mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-23 05:30:29 +00:00
1 line
12 KiB
ArmAsm
Executable File
1 line
12 KiB
ArmAsm
Executable File
|
|
load 'macros.dump'
|
|
include 'driver.equ'
|
|
include 'pl.equ'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
IMPORT D_GetWdth
|
|
IMPORT P_ContentRect
|
|
IMPORT P_CurrentWin
|
|
IMPORT P_Fix2Int
|
|
IMPORT P_H
|
|
IMPORT P_Page
|
|
IMPORT P_V
|
|
IMPORT D_SelectFont
|
|
IMPORT T_CaretDrawn
|
|
IMPORT T_CountSpaces
|
|
IMPORT T_CurFont
|
|
IMPORT T_CurIndent
|
|
IMPORT T_CurRulBits
|
|
IMPORT T_CurSize
|
|
IMPORT T_CurStyle
|
|
IMPORT T_DotLine
|
|
IMPORT T_DotObj
|
|
IMPORT T_DotOffset
|
|
IMPORT T_DotParag
|
|
IMPORT T_DotPixs
|
|
IMPORT T_GetLinePtr
|
|
IMPORT T_GetObject
|
|
IMPORT T_GetParPtr
|
|
IMPORT T_GetRulBits
|
|
IMPORT T_GetSpacing
|
|
IMPORT T_LockRuler
|
|
IMPORT T_TopLine
|
|
IMPORT T_TrackFont
|
|
IMPORT T_UnlockRuler
|
|
IMPORT T_UseTab
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY T_Pix2Offset
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_GetStart (LineWidth:w,MaxWidth:w,NoIndent:w) : StartWidth:w
|
|
;
|
|
; Returns the starting horiz offset for a Q_Line of Q_Text, using the current
|
|
; ruler information.
|
|
|
|
T_GetStart PROC EXPORT
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
INPUT LineWidth:w,MaxWidth:w,NoIndent:w
|
|
OUTPUT StartWidth:w
|
|
|
|
BEGIN
|
|
|
|
stz StartWidth
|
|
|
|
lda T_CurRulBits
|
|
and #T_Center
|
|
bne DoCenter
|
|
lda T_CurRulBits
|
|
and #T_Right
|
|
beq DoIndent
|
|
|
|
DoRight subword MaxWidth,LineWidth,StartWidth
|
|
bra DoIndent
|
|
|
|
DoCenter subword MaxWidth,LineWidth,a
|
|
lsr a
|
|
sta StartWidth
|
|
|
|
DoIndent
|
|
lda NoIndent
|
|
bne Exit
|
|
addword StartWidth,T_CurIndent,StartWidth
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------
|
|
;
|
|
; T_Pt2Offset (ObjHdl:l,Pt:l) : ParagNo:w,Offset:w,LineNo:w,Q_Pixels:w
|
|
;
|
|
|
|
T_Pt2Offset PROC EXPORT
|
|
;Using P_ObjData
|
|
;Using T_TextEqu
|
|
;Using T_Data
|
|
|
|
INPUT ObjHdl:l,Pt:l
|
|
OUTPUT ParagNo:w,Offset:w,LineNo:w,Q_Pixels:w
|
|
|
|
LOCAL ObjPtr:l,ParagPtr:l,LinePtr:l
|
|
LOCAL EndParag:w,EndLine:w,ParagCount:w,LineCount:w,Q_Rect:r
|
|
LOCAL RulBits:w,TotHeight:w,Leading:w,Ascent:w,Descent:w
|
|
LOCAL MaxWidth:w
|
|
|
|
|
|
BEGIN
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
moveword [ObjPtr]:#P_StartParag,ParagNo
|
|
moveword [ObjPtr]:#P_StartLine,LineNo
|
|
moveword [ObjPtr]:#P_EndParag,EndParag
|
|
moveword [ObjPtr]:#P_EndLine,EndLine
|
|
|
|
moverect [ObjPtr]:#P_TRect,Q_Rect
|
|
|
|
subword Pt,Q_Rect,Pt
|
|
subword Pt+2,Q_Rect+2,Pt+2
|
|
subword Q_Rect+6,Q_Rect+2,MaxWidth
|
|
|
|
rcall T_GetParPtr,in=(#0:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr],ParagCount
|
|
|
|
|
|
stz TotHeight
|
|
|
|
|
|
; Find the Q_Line and the parag
|
|
|
|
ParagLoop
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr]:#T_LineCount,LineCount
|
|
rcall T_GetRulBits,in=(ParagNo:a),out=(RulBits:a)
|
|
rcall T_GetLinePtr,in=(ParagNo:a,LineNo:x),out=(LinePtr:ax)
|
|
|
|
|
|
LineLoop
|
|
cmpw ParagNo,EndParag
|
|
blt CheckCount
|
|
cmpw LineNo,EndLine
|
|
blt CheckCount
|
|
brl PastEnd
|
|
|
|
CheckCount
|
|
cmpw LineNo,LineCount
|
|
bge NextParag
|
|
|
|
moveword [LinePtr]:#T_Ascent,a
|
|
and #$ff
|
|
sta Ascent
|
|
moveword [LinePtr]:#T_Descent,a
|
|
and #$ff
|
|
sta Descent
|
|
|
|
rcall T_GetSpacing,in=(RulBits:a,Ascent:x,Descent:y),out=(a:a)
|
|
addword a,Ascent,a
|
|
addword a,Descent,a
|
|
addword a,TotHeight,TotHeight
|
|
scmpw a,Pt
|
|
bge FindPixels
|
|
|
|
addwl #T_LineInfoSize,LinePtr
|
|
inc LineNo
|
|
bra LineLoop
|
|
|
|
|
|
|
|
NextParag
|
|
stz LineNo
|
|
inc ParagNo
|
|
cmpw ParagNo,ParagCount
|
|
bge PastEnd
|
|
|
|
addwl #T_ParInfoSize,ParagPtr
|
|
brl ParagLoop
|
|
|
|
|
|
PastEnd
|
|
moveword MaxWidth,Pt+2
|
|
|
|
lda LineNo
|
|
bne Skip
|
|
lda ParagNo
|
|
beq FindPixels
|
|
dec ParagNo
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr]:#T_LineCount,LineNo
|
|
Skip dec LineNo
|
|
|
|
|
|
|
|
FindPixels
|
|
in ParagNo:w,LineNo:w,Pt+2:w,MaxWidth:w
|
|
out Offset:w,Q_Pixels:w
|
|
xcall T_Pix2Offset
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_Pix2Offset (ParagNo:w,LineNo:w,Pix:w,MaxWidth:w) : Offset:w,Q_Pixels:w
|
|
;
|
|
;
|
|
|
|
T_Pix2Offset PROC EXPORT
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
INPUT ParagNo:w,LineNo:w,Pix:w,MaxWidth:w
|
|
OUTPUT Offset:w,Q_Pixels:w
|
|
|
|
LOCAL ParagPtr:l,TextHdl:l,TextPtr:l,LinePtr:l
|
|
LOCAL LineCount:w,MaxOffset:w,LineWidth:w
|
|
LOCAL Width:l,NextWidth:l,SpaceExtra:l
|
|
LOCAL FontChanged:w,Spaces:w,TabStop:w
|
|
|
|
BEGIN
|
|
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
rcall T_LockRuler,in=(ax:ax)
|
|
|
|
moveword [ParagPtr]:#T_LineCount,LineCount
|
|
movelong [ParagPtr]:#T_TextBlock,TextHdl
|
|
tool _HLock,in=(TextHdl:l)
|
|
movelong [TextHdl],TextPtr
|
|
moveword [ParagPtr]:#T_ParOffset,a
|
|
addwl a,TextPtr
|
|
|
|
rcall T_GetLinePtr,in=(ParagNo:a,LineNo:x),out=(LinePtr:ax)
|
|
moveword [LinePtr]:#T_Offset,Offset
|
|
addword a,[LinePtr]:#T_Length,MaxOffset
|
|
moveword [LinePtr]:#T_LineWidth,LineWidth
|
|
|
|
|
|
stz FontChanged
|
|
stzl SpaceExtra
|
|
stzl Width
|
|
|
|
call T_GetStart,in=(LineWidth:w,MaxWidth:w,LineNo:w),out=(a:w)
|
|
sta Width+2
|
|
|
|
lda Pix
|
|
jmi SetPixs
|
|
|
|
|
|
lda T_CurRulBits
|
|
and #T_Full
|
|
beq NotFull
|
|
|
|
dec LineCount
|
|
cmpw LineNo,LineCount
|
|
bge NotFull
|
|
|
|
in TextPtr:l,Offset:w,MaxOffset:w
|
|
out TabStop:w,Spaces:w
|
|
xcall T_CountSpaces
|
|
|
|
lda Spaces
|
|
beq NotFull
|
|
|
|
spacelong
|
|
subword MaxWidth,LineWidth,s
|
|
pushword Spaces
|
|
_FixRatio
|
|
pulllong SpaceExtra
|
|
NotFull
|
|
|
|
|
|
|
|
call T_TrackFont,in=(TextPtr:l,Offset:w)
|
|
rcall D_SelectFont,in=(T_CurFont:a,T_CurStyle:x,#0:y)
|
|
|
|
|
|
CharLoop
|
|
cmpw Offset,MaxOffset
|
|
jge SetPixs
|
|
|
|
moveword [TextPtr]:Offset,a
|
|
inc Offset
|
|
and #$ff
|
|
cmp #T_MaxChange+1
|
|
bge NormalChar
|
|
|
|
inc FontChanged
|
|
asl a
|
|
tax
|
|
jmp (JumpTable,x)
|
|
|
|
|
|
NormalChar ldx FontChanged
|
|
beq NoChange
|
|
|
|
pha
|
|
rcall D_SelectFont,in=(T_CurFont:a,T_CurStyle:x,#0:y)
|
|
pla
|
|
stz FontChanged
|
|
|
|
NoChange
|
|
cmp #SPACE
|
|
beq DoSpace
|
|
cmp #TAB
|
|
beq DoTab
|
|
cmp #CR
|
|
beq FoundIt
|
|
|
|
jsl D_GetWdth
|
|
sta NextWidth+2
|
|
stz NextWidth
|
|
brl CheckIt
|
|
|
|
|
|
DoSpace
|
|
moveword SpaceExtra,NextWidth
|
|
rcall D_GetWdth,in=(#SPACE:a),out=(a:a)
|
|
addword a,SpaceExtra+2,NextWidth+2
|
|
brl CheckIt
|
|
|
|
|
|
DoTab
|
|
in TextPtr:l,Offset:w,Width+2:w,MaxWidth:w
|
|
in T_CurFont:l,#0:w
|
|
out a:w
|
|
xcall T_UseTab
|
|
bmi FoundIt
|
|
subword a,Width+2,NextWidth+2
|
|
stz NextWidth
|
|
bra CheckIt
|
|
|
|
|
|
CheckIt
|
|
rcall P_Fix2Int,in=(NextWidth:ax),out=(a:a)
|
|
lsr a
|
|
addword a,Width+2,a
|
|
cmp Pix
|
|
bge FoundIt
|
|
|
|
addlong Width,NextWidth,Width
|
|
brl CharLoop
|
|
|
|
|
|
|
|
FoundIt dec Offset
|
|
SetPixs rcall P_Fix2Int,in=(Width:ax),out=(a:a)
|
|
cmp MaxWidth
|
|
blt StorePixs
|
|
lda MaxWidth
|
|
StorePixs sta Q_Pixels
|
|
|
|
call T_UnlockRuler
|
|
tool _HUnlock,in=(TextHdl:l)
|
|
|
|
Exit
|
|
RETURN
|
|
|
|
|
|
|
|
|
|
JumpTable DC.W CharLoop
|
|
DC.W FontChange
|
|
DC.W StyleChange
|
|
DC.W SizeChange
|
|
DC.W ChangeExit
|
|
DC.W CharLoop
|
|
DC.W CharLoop
|
|
DC.W CharLoop
|
|
|
|
|
|
FontChange
|
|
moveword [TextPtr]:Offset,T_CurFont
|
|
inc Offset
|
|
bra ChangeExit
|
|
|
|
StyleChange
|
|
movebyte [TextPtr]:Offset,T_CurStyle
|
|
bra ChangeExit
|
|
|
|
SizeChange
|
|
movebyte [TextPtr]:Offset,T_CurSize
|
|
bra ChangeExit
|
|
|
|
ChangeExit
|
|
inc Offset
|
|
brl CharLoop
|
|
|
|
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------;
|
|
;
|
|
; T_Offset2Pix (ObjHdl:l,ParagNo:w,StopOffset:w,LineNo:w) : Pixs:w
|
|
;
|
|
|
|
T_Offset2Pix PROC EXPORT
|
|
;Using P_ObjData
|
|
;Using T_TextEqu
|
|
;Using T_Data
|
|
|
|
INPUT ObjHdl:l,ParagNo:w,StopOffset:w,LineNo:w
|
|
OUTPUT Pixs:w
|
|
|
|
LOCAL ParagPtr:l,LinePtr:l,TextHdl:l,TextPtr:l,ObjPtr:l
|
|
LOCAL LineCount:w,MaxWidth:w
|
|
LOCAL CurOffset:w,MaxOffset:w,LineWidth:w
|
|
LOCAL Width:l,SpaceExtra:l
|
|
LOCAL Spaces:w,TabStop:w,FontChanged:w
|
|
|
|
|
|
BEGIN
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
rcall T_LockRuler,in=(ax:ax)
|
|
rcall T_GetLinePtr,in=(ParagNo:a,LineNo:x),out=(LinePtr:ax)
|
|
|
|
movelong [ParagPtr]:#T_TextBlock,TextHdl
|
|
moveword [ParagPtr]:#T_LineCount,LineCount
|
|
moveword [LinePtr]:#T_Offset,CurOffset
|
|
addword a,[LinePtr]:#T_Length,MaxOffset
|
|
moveword [LinePtr]:#T_LineWidth,LineWidth
|
|
|
|
tool _HLock,in=(TextHdl:l)
|
|
movelong [TextHdl],TextPtr
|
|
moveword [ParagPtr]:#T_ParOffset,a
|
|
addwl a,TextPtr
|
|
|
|
stzl Width
|
|
stzl SpaceExtra
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
subword [ObjPtr]:#P_TRect+6,[ObjPtr]:#P_TRect+2,MaxWidth
|
|
|
|
|
|
in LineWidth:w,MaxWidth:w,LineNo:w
|
|
out Width+2:w
|
|
xcall T_GetStart
|
|
|
|
|
|
lda T_CurRulBits
|
|
and #T_Full
|
|
beq NotFull
|
|
|
|
dec LineCount
|
|
cmpw LineNo,LineCount
|
|
bge NotFull
|
|
|
|
|
|
in TextPtr:l,CurOffset:w,MaxOffset:w
|
|
out TabStop:w,Spaces:w
|
|
xcall T_CountSpaces
|
|
|
|
|
|
lda Spaces
|
|
beq NotFull
|
|
|
|
|
|
spacelong
|
|
subword MaxWidth,LineWidth,s
|
|
pushword Spaces
|
|
_FixRatio
|
|
pulllong SpaceExtra
|
|
NotFull
|
|
|
|
|
|
|
|
|
|
call T_TrackFont,in=(TextPtr:l,CurOffset:w)
|
|
rcall D_SelectFont,in=(T_CurFont:a,T_CurStyle:x,#0:y)
|
|
|
|
|
|
CharLoop
|
|
cmpw CurOffset,StopOffset
|
|
jge Done
|
|
moveword [TextPtr]:CurOffset,a
|
|
inc CurOffset
|
|
and #$ff
|
|
cmp #T_MaxChange+1
|
|
blt SpecialCase
|
|
|
|
ldx FontChanged
|
|
beq NoChange
|
|
|
|
pha
|
|
rcall D_SelectFont,in=(T_CurFont:a,T_CurStyle:x,#0:y)
|
|
pla
|
|
stz FontChanged
|
|
NoChange
|
|
|
|
|
|
cmp #SPACE
|
|
beq DoSpace
|
|
cmp #TAB
|
|
beq DoTab
|
|
cmp #CR
|
|
beq Done
|
|
|
|
|
|
jsl D_GetWdth
|
|
addword a,Width+2,Width+2
|
|
bra CharLoop
|
|
|
|
DoSpace
|
|
rcall D_GetWdth,in=(#SPACE:a),out=(a:a)
|
|
addword a,Width+2,Width+2
|
|
addlong Width,SpaceExtra,Width
|
|
bra CharLoop
|
|
|
|
|
|
DoTab
|
|
in TextPtr:l,CurOffset:w,Width+2:w,MaxWidth:w
|
|
in T_CurFont:l,#0:w
|
|
out a:w
|
|
xcall T_UseTab
|
|
bmi Done
|
|
sta Width+2
|
|
brl CharLoop
|
|
|
|
|
|
|
|
SpecialCase
|
|
inc FontChanged
|
|
asl a
|
|
tax
|
|
jmp (JumpTable,x)
|
|
|
|
|
|
|
|
Done rcall P_Fix2Int,in=(Width:ax),out=(Width+2:a)
|
|
|
|
SetPixs
|
|
cmpw Width+2,MaxWidth
|
|
blt StorePixs
|
|
lda MaxWidth
|
|
StorePixs sta Pixs
|
|
|
|
call T_UnlockRuler
|
|
tool _HUnlock,in=(TextHdl:l)
|
|
|
|
RETURN
|
|
|
|
|
|
JumpTable DC.W Done
|
|
DC.W FontChange
|
|
DC.W StyleChange
|
|
DC.W SizeChange
|
|
DC.W ChangeExit
|
|
DC.W CharLoop
|
|
DC.W CharLoop
|
|
DC.W CharLoop
|
|
|
|
FontChange
|
|
moveword [TextPtr]:CurOffset,T_CurFont
|
|
inc CurOffset
|
|
bra ChangeExit
|
|
|
|
StyleChange
|
|
movebyte [TextPtr]:CurOffset,T_CurStyle
|
|
bra ChangeExit
|
|
|
|
SizeChange
|
|
movebyte [TextPtr]:CurOffset,T_CurSize
|
|
bra ChangeExit
|
|
|
|
ChangeExit
|
|
inc CurOffset
|
|
brl CharLoop
|
|
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_Offset2Line (ParagNo:w,Offset:w) : ObjHdl:l,LineNo:w
|
|
;
|
|
|
|
T_Offset2Line PROC EXPORT
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
INPUT ParagNo:w,Offset:w
|
|
OUTPUT ObjHdl:l,LineNo:w
|
|
LOCAL LinePtr:l
|
|
|
|
|
|
BEGIN
|
|
|
|
rcall T_GetLinePtr,in=(ParagNo:a,#0:x),out=(LinePtr:ax)
|
|
|
|
stz LineNo
|
|
LineLoop addword [LinePtr],[LinePtr]:#T_Length,a
|
|
cmpw a,Offset
|
|
bge EndLoop
|
|
|
|
addwl #T_LineInfoSize,LinePtr
|
|
inc LineNo
|
|
bra LineLoop
|
|
EndLoop
|
|
|
|
|
|
call T_GetObject,in=(ParagNo:w,LineNo:w),out=(ObjHdl:l)
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------;
|
|
;
|
|
; T_BlinkCaret ()
|
|
;
|
|
|
|
T_BlinkCaret PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
LOCAL ParagPtr:l,LinePtr:l,ObjHdl:l,ObjPtr:l
|
|
LOCAL RTop:w,RLeft:w,Top:w,Height:w,Ascent:w,Descent:w
|
|
|
|
BEGIN
|
|
|
|
tool _SetPort,in=(P_CurrentWin:l)
|
|
|
|
movelong T_DotObj,ObjHdl
|
|
movelong [ObjHdl],ObjPtr
|
|
cmpw [ObjPtr]:#P_PageNo,P_Page
|
|
jne Exit
|
|
|
|
moveword [ObjPtr]:#P_TRect,RTop
|
|
moveword [ObjPtr]:#P_TRect+2,RLeft
|
|
|
|
call T_TopLine,in=(T_DotParag:w,T_DotLine:w),out=(a:l,Top:w)
|
|
rcall T_GetLinePtr,in=(T_DotParag:a,T_DotLine:x),out=(LinePtr:ax)
|
|
|
|
moveword [LinePtr]:#T_Ascent,a
|
|
and #$ff
|
|
sta Ascent
|
|
moveword [LinePtr]:#T_Descent,a
|
|
and #$ff
|
|
sta Descent
|
|
|
|
addword a,Ascent,Height
|
|
|
|
rcall T_GetParPtr,in=(T_DotParag:a),out=(ParagPtr:ax)
|
|
rcall T_GetRulBits,in=(T_DotParag:a),out=(a:a)
|
|
rcall T_GetSpacing,in=(a:a,Ascent:x,Descent:y),out=(a:a)
|
|
addword a,Top,Top
|
|
|
|
in T_DotObj:l,T_DotParag:w,T_DotOffset:w,T_DotLine:w
|
|
out T_DotPixs:w
|
|
xcall T_Offset2Pix
|
|
|
|
|
|
addword P_ContentRect+2,RLeft,a
|
|
subword a,P_H,a
|
|
addword a,T_DotPixs,s
|
|
|
|
addword P_ContentRect,RTop,a
|
|
subword a,P_V,a
|
|
addword a,Top,s
|
|
_MoveTo
|
|
|
|
tool _SetPenMode,in=(#notXOR:w)
|
|
tool _Line,in=(#0:w,Height:w)
|
|
tool _SetPenMode,in=(#0:w)
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_EraseCaret ()
|
|
;
|
|
; Erases the caret if necessary.
|
|
|
|
T_EraseCaret PROC EXPORT
|
|
;Using T_Data
|
|
|
|
lda T_CaretDrawn
|
|
beq Exit
|
|
jsl T_BlinkCaret
|
|
stz T_CaretDrawn
|
|
Exit rtl
|
|
ENDP
|
|
END
|
|
|