antoine-source/appleworksgs/Scrap/Src/drawpl.aii

1 line
6.5 KiB
Plaintext
Raw Normal View History

2023-03-04 02:45:20 +00:00
load 'macros.dump' include 'driver.equ' include 'scrap.equ' IMPORT D_Deref IMPORT D_DrawText IMPORT D_GetStats IMPORT D_GetWdth IMPORT D_KillFont IMPORT D_SectClipRect IMPORT D_SelectFont ;------------------------------------------------------------------------------- ; ; X_DrawPLText ; X_DrawPLText PROC EXPORT INPUT TextHdl:l,RectPtr:l LOCAL OldFont:l,OldColor:w LOCAL ClipRgn:l,Just:w,Spacing:w,Remain:w LOCAL TextPtr:l,EndPtr:l,Pt:l LOCAL Offset:w,StartOffset:w,EndOffset:w LOCAL LineTop:w,MaxWidth:w,CurWidth:w,EndWidth:w LOCAL Font:l,Color:w,FontChanged:w LOCAL StartFont:l,StartColor:w LOCAL Ascent:w,Descent:w,Leading:w LOCAL EndAscent:w,EndDescent:w,EndLeading:w LOCAL MaxAscent:w,MaxDescent:w,MaxLeading:w LOCAL StartPar:w,theChar:w,SpaceCount:w LOCAL StartSeg:w,EndSeg:w,LeftOffset:w BEGIN tool _NewRgn,out=(ClipRgn:l) tool _GetClip,in=(ClipRgn:l) call D_SectClipRect,in=(RectPtr:l) tool _GetFontId,out=(OldFont:l) tool _GetForeColor,out=(OldColor:w) jsl D_KillFont rcall D_Deref,in=(TextHdl:ax),out=(TextPtr:ax) tool _GetHandleSize,in=(TextHdl:l),out=(:l) addlong s,TextPtr,EndPtr moveword #1,StartPar stz EndOffset moveword [RectPtr],LineTop subword [RectPtr]:#6,[RectPtr]:#2,MaxWidth LineLoop lda StartPar beq NotStart addwl EndOffset,TextPtr cmpl TextPtr,EndPtr bge Done jsr DoParag stz StartPar NotStart jsr CutLine jsr DrawLine jsr GetBaseOffset addword a,LineTop,a addword a,EndDescent,LineTop scmpw LineTop,[RectPtr]:#4 blt LineLoop Done tool _HUnlock,in=(TextHdl:l) tool _SetClip,in=(ClipRgn:l) tool _DisposeHandle,in=(ClipRgn:l) rcall D_SelectFont,in=(OldFont:ax,OldColor:y) RETURN DoParag movelong [TextPtr],Font moveword [TextPtr]:#4,a and #$ff sta Color moveword [TextPtr]:#5,a and #$ff sta Just moveword [TextPtr]:#6,a and #$ff sta Spacing moveword #7,Offset rts D_SetStuff moveword Offset,EndOffset moveword CurWidth,EndWidth moveword MaxAscent,EndAscent moveword MaxDescent,EndDescent moveword MaxLeading,EndLeading rts CutLine movelong Font,StartFont moveword Color,StartColor moveword Offset,StartOffset stz CurWidth stz SpaceCount stz EndOffset rcall D_SelectFont,in=(Font:ax,Color:y) rcall D_GetStats,out=(MaxAscent:a,MaxDescent:x,MaxLeading:y) stz FontChanged CharLoop moveword [TextPtr]:Offset,a inc Offset and #$ff sta theChar cmp #SPACE+1 blt SpecialCase lda FontChanged beq NoChange rcall D_SelectFont,in=(Font:a,Font+2:x,#0:y) rcall D_GetStats,out=(Ascent:a,Descent:x,Leading:y) cmpw Ascent,MaxAscent blt AscOk sta MaxAscent AscOk cmpw Descent,MaxDescent blt DscOk sta MaxDescent DscOk cmpw Leading,MaxLeading blt LdgOk sta MaxLeading LdgOk stz FontChanged NoChange CheckWidth rcall D_GetWdth,in=(theChar:a) addword a,CurWidth,CurWidth cmp MaxWidth blt CharLoop NoFit lda EndOffset bne Set jsr D_SetStuff Set brl CutExit SpecialCase asl a tax jmp (CutTable,x) DoSpace jsr D_SetStuff inc SpaceCount bra CheckWidth DoTab tool _UDivide,in=(CurWidth:w,#80:w),out=(Remain:w,a:w) subword #80,Remain,a addword a,CurWidth,a cmp MaxWidth bge TabNext sta CurWidth jsr D_SetStuff brl CharLoop TabNext dec Offset jsr D_SetStuff brl CutExit X_DoCR jsr D_SetStuff inc StartPar brl CutExit FontChange moveword [TextPtr]:Offset,Font inc Offset bra ChangeExit StyleChange movebyte [TextPtr]:Offset,Font+2 bra ChangeExit SizeChange movebyte [TextPtr]:Offset,Font+3 ChangeExit inc Offset inc FontChanged brl CharLoop CutExit rts DrawLine jsr DoJust addword [RectPtr]:#2,LeftOffset,s jsr GetBaseOffset addword a,LineTop,s _MoveTo stz FontChanged movelong StartFont,Font moveword StartColor,Color rcall D_SelectFont,in=(Font:ax,Color:y) moveword StartOffset,Offset moveword Offset,StartSeg CharLoop2 cmpw Offset,EndOffset jge DrawExit moveword [TextPtr]:Offset,a inc Offset and #$ff sta TheChar cmp #5 blt ChangeChar ; real characters lda FontChanged beq NoChange2 rcall D_SelectFont,in=(Font:ax,Color:y) stz FontChanged moveword Offset,StartS