mirror of
https://github.com/antoinevignau/source.git
synced 2024-08-31 13:29:30 +00:00
1 line
14 KiB
ArmAsm
Executable File
1 line
14 KiB
ArmAsm
Executable File
|
|
load 'macros.dump'
|
|
include 'driver.equ'
|
|
include 'pl.equ'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
IMPORT P_BuildType
|
|
IMPORT P_BuildUndo
|
|
IMPORT P_FixMenus
|
|
IMPORT P_Page
|
|
IMPORT T_CalcFBytes
|
|
IMPORT T_Clear
|
|
IMPORT T_ClearBottom
|
|
IMPORT T_CopyParEnd
|
|
IMPORT T_CurColor
|
|
IMPORT T_CurFont
|
|
IMPORT T_CurStyleSize
|
|
IMPORT T_CutParag
|
|
IMPORT T_DeletePars
|
|
IMPORT T_DoControl
|
|
IMPORT T_DoRoom
|
|
IMPORT T_DotLine
|
|
IMPORT T_DotObj
|
|
IMPORT T_DotOffset
|
|
IMPORT T_DotParag
|
|
IMPORT T_DrawOneLine
|
|
IMPORT T_DrawParag
|
|
IMPORT T_DrawRuler
|
|
IMPORT T_EraseCaret
|
|
IMPORT T_FontFlags
|
|
IMPORT T_GetParPtr
|
|
IMPORT T_GetParSize
|
|
IMPORT T_GetTextPtr
|
|
IMPORT T_InsertFont
|
|
IMPORT T_JunkRight
|
|
IMPORT T_LockLines
|
|
IMPORT T_MakeRoom
|
|
IMPORT T_MovedDot
|
|
IMPORT T_NewAddStyle
|
|
IMPORT T_NewColor
|
|
IMPORT T_NewFont
|
|
IMPORT T_NewPars
|
|
IMPORT T_NewSize
|
|
IMPORT T_Offset2Line
|
|
IMPORT T_OffsetPCount
|
|
IMPORT T_PadThread
|
|
IMPORT T_PastePar
|
|
IMPORT T_PrevChar
|
|
IMPORT T_RecutParag
|
|
IMPORT T_TextSelect
|
|
IMPORT T_TopLine
|
|
IMPORT T_TrackFont
|
|
IMPORT T_UseRuler
|
|
IMPORT T_WriteFBytes
|
|
IMPORT T_JunkLeft
|
|
IMPORT T_JunkRight
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; T_BumpParags (ParagNo:w; ObjHdl:l; ParStart:w; DoDraw:w);
|
|
;
|
|
; The starting position of ParagNo has changed. I need to recalculate all
|
|
; the paragraphs below this one until a paragraph doesn't move and D_Update the
|
|
; ones that are currently on the screen.
|
|
;
|
|
; ObjHdl is the object that ParagNo starts in.
|
|
; ParStart is the pixel count from the top of ObjHdl to the top of ParagNo.
|
|
|
|
T_BumpParags PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
INPUT ParagNo:w,ObjHdl:l,ParStart:w,DoDraw:w
|
|
|
|
LOCAL ParagPtr:l,ParagCount:w
|
|
LOCAL ObjPtr:l,MaxVert:w,ParEnd:w
|
|
LOCAL OldObj:l,OldParStart:w,OldParHeight:w
|
|
|
|
|
|
BEGIN
|
|
|
|
rcall T_GetParPtr,in=(#0:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr],ParagCount
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
subword [ObjPtr]:#P_TRect+4,[ObjPtr]:#P_TRect,MaxVert
|
|
|
|
|
|
ParLoop
|
|
lda ParagNo
|
|
cmp ParagCount
|
|
jge EraseBottom
|
|
|
|
rcall T_GetParPtr,in=(a:a),out=(ParagPtr:ax)
|
|
|
|
movelong [ParagPtr]:#T_ObjHdl,OldObj
|
|
moveword [ParagPtr]:#T_ParStart,OldParStart
|
|
moveword [ParagPtr]:#T_ParHeight,OldParHeight
|
|
|
|
cmpl ObjHdl,OldObj
|
|
bne Recut
|
|
cmpw ParStart,OldParStart
|
|
jeq Done
|
|
|
|
|
|
; If it used to cross object boundaries, recut it.
|
|
addword OldParStart,OldParHeight,a
|
|
cmp MaxVert
|
|
bge Recut
|
|
|
|
|
|
; If it crosses object boundaries for D_New ParStart, recut it.
|
|
|
|
addword ParStart,OldParHeight,a
|
|
sta ParEnd
|
|
cmp MaxVert
|
|
bge Recut
|
|
|
|
|
|
; Set the ParStart since it could have changed and redraw paragraph
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
moveword ParStart,[ParagPtr]:#T_ParStart
|
|
|
|
lda DoDraw
|
|
beq NextPar
|
|
|
|
in ParagNo:w,#0:w,[ParagPtr]:#T_LineCount:w,ParStart:w
|
|
xcall T_DrawParag
|
|
bra NextPar
|
|
|
|
|
|
|
|
Recut
|
|
in ObjHdl:l,ParagNo:w,ParStart:w
|
|
out ObjHdl:l,ParEnd:w
|
|
xcall T_RecutParag
|
|
|
|
lda DoDraw
|
|
beq NoDraw
|
|
|
|
in ParagNo:w,#0:w,[ParagPtr]:#T_LineCount:w,ParStart:w
|
|
xcall T_DrawParag
|
|
NoDraw
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
subword [ObjPtr]:#P_TRect+4,[ObjPtr]:#P_TRect,MaxVert
|
|
|
|
|
|
NextPar
|
|
moveword ParEnd,ParStart
|
|
inc ParagNo
|
|
brl ParLoop
|
|
|
|
|
|
|
|
EraseBottom
|
|
call T_PadThread,in=(ObjHdl:l,ParStart:w)
|
|
lda DoDraw
|
|
beq Done
|
|
call T_ClearBottom,in=(ObjHdl:l,ParStart:w,P_Page:w)
|
|
Done
|
|
jsl T_MovedDot
|
|
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;----------------------------------------------------------------------------
|
|
;
|
|
; T_CmpLines (LHdl1:l,LHdl2:l,LCount1:w,LCount2:w,Bytes:w) :
|
|
; FirstLine:w,LastLine:w
|
|
;
|
|
|
|
T_CmpLines PROC EXPORT
|
|
;Using T_TextEqu
|
|
;Using T_Data
|
|
|
|
INPUT LHdl1:l,LHdl2:l
|
|
INPUT LCount1:w,LCount2:w
|
|
INPUT Bytes:w
|
|
OUTPUT FirstLine:w,LastLine:w
|
|
|
|
LOCAL LPtr1:l,LPtr2:l,LineNo:w
|
|
LOCAL TotLength1:w,TotLength2:w
|
|
|
|
BEGIN
|
|
|
|
movelong [LHdl1],LPtr1
|
|
movelong [LHdl2],LPtr2
|
|
|
|
stz TotLength1
|
|
stz TotLength2
|
|
stz LineNo
|
|
|
|
FirstLoop
|
|
ldy #T_Length
|
|
addword [LPtr1]:y,TotLength1,TotLength1
|
|
addword [LPtr2]:y,TotLength2,TotLength2
|
|
cmpw TotLength1,TotLength2
|
|
bne Different
|
|
|
|
lda LineNo
|
|
inc a
|
|
cmp LCount1
|
|
beq NoMore
|
|
cmp LCount2
|
|
beq NoMore
|
|
sta LineNo
|
|
|
|
addwl #T_LineInfoSize,LPtr1
|
|
addwl #T_LineInfoSize,LPtr2
|
|
bra FirstLoop
|
|
|
|
NoMore
|
|
moveword LineNo,FirstLine
|
|
lda LCount2
|
|
dec a
|
|
sta LastLine
|
|
brl Exit
|
|
|
|
|
|
Different
|
|
moveword LineNo,FirstLine
|
|
sta LastLine
|
|
cmpw LCount1,LCount2
|
|
bne NoMore2
|
|
addword TotLength2,Bytes,TotLength2
|
|
cmpw TotLength1,TotLength2
|
|
beq Exit
|
|
|
|
|
|
SecLoop
|
|
lda LineNo
|
|
inc a
|
|
cmp LCount1
|
|
beq NoMore2
|
|
cmp LCount2
|
|
beq NoMore2
|
|
sta LineNo
|
|
|
|
addwl #T_LineInfoSize,LPtr1
|
|
addwl #T_LineInfoSize,LPtr2
|
|
|
|
ldy #T_Length
|
|
addword [LPtr1]:y,TotLength1,TotLength1
|
|
addword [LPtr2]:y,TotLength2,TotLength2
|
|
|
|
cmpw TotLength1,TotLength2
|
|
bne SecLoop
|
|
Same
|
|
|
|
moveword LineNo,LastLine
|
|
bra Exit
|
|
|
|
|
|
NoMore2
|
|
lda LCount2
|
|
dec a
|
|
sta LastLine
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------------
|
|
;
|
|
; T_FixParag (ParagNo:w,LineNo:w,CharCount:w)
|
|
;
|
|
|
|
T_FixParag PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
INPUT ParagNo:w,LineNo:w,CharCount:w
|
|
|
|
LOCAL ParagPtr:l,OldLinesHdl:l,LinesHdl:l
|
|
LOCAL OldCount:w,NewCount:w,FirstLine:w,LastLine:w
|
|
LOCAL EndVert:w,EndObjHdl:l,VertPos:w
|
|
|
|
BEGIN
|
|
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr]:#T_LineCount,OldCount
|
|
rcall T_LockLines,in=(ParagNo:a),out=(OldLinesHdl:ax)
|
|
|
|
|
|
|
|
; Cut Paragraph
|
|
|
|
in [ParagPtr]:#T_ObjHdl:l,ParagNo:w,[ParagPtr]:#T_ParStart:w
|
|
out EndObjHdl:l,EndVert:w
|
|
xcall T_CutParag
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
movelong [ParagPtr]:#T_LinesHdl,LinesHdl
|
|
moveword [ParagPtr]:#T_LineCount,NewCount
|
|
|
|
|
|
; Compare the lines
|
|
|
|
in OldLinesHdl:l,LinesHdl:l,OldCount:w,NewCount:w,CharCount:w
|
|
out FirstLine:w,LastLine:w
|
|
xcall T_CmpLines
|
|
|
|
|
|
tool _DisposeHandle,in=(OldLinesHdl:l)
|
|
tool _HUnlock,in=(LinesHdl:l)
|
|
|
|
|
|
cmpw LineNo,FirstLine
|
|
bge Okay
|
|
sta FirstLine
|
|
Okay
|
|
|
|
|
|
call T_TopLine,in=(ParagNo:w,FirstLine:w),out=(a:l,VertPos:w)
|
|
inc LastLine
|
|
call T_DrawParag,in=(ParagNo:w,FirstLine:w,LastLine:w,VertPos:w)
|
|
|
|
inc ParagNo
|
|
call T_BumpParags,in=(ParagNo:w,EndObjHdl:l,EndVert:w,#1:w)
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_InsertCR ()
|
|
;
|
|
|
|
T_InsertCR PROC EXPORT
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
;Using P_Data
|
|
|
|
LOCAL TextPtr:l,ParagPtr:l,ParOffset:w
|
|
LOCAL EndObjHdl:l,MidVert:w,EndVert:w,RulerHdl:l
|
|
LOCAL VertLPos:w,LastLine:w,BogusHdl:l
|
|
|
|
BEGIN
|
|
|
|
call P_BuildType
|
|
jsl T_Clear
|
|
|
|
rcall T_JunkRight,in=(T_DotParag:a,T_DotOffset:x)
|
|
sta T_DotOffSet
|
|
|
|
call T_MakeRoom,in=(T_DotParag:w,T_DotOffset:w,#T_ParHeader+1:w)
|
|
|
|
rcall T_GetTextPtr,in=(T_DotParag:a),out=(TextPtr:ax)
|
|
call T_TrackFont,in=(TextPtr:l,T_DotOffset:w)
|
|
|
|
addwl T_DotOffset,TextPtr
|
|
moveword #CR,[TextPtr]
|
|
moveword T_CurFont,[TextPtr]:#T_ParFont+1
|
|
moveword T_CurStyleSize,[TextPtr]:#T_ParStyle+1
|
|
shortm
|
|
moveword T_CurColor,[TextPtr]:#T_ParColor+1
|
|
longm
|
|
|
|
|
|
|
|
; Make D_New paragraph
|
|
|
|
call T_NewPars,in=(T_DotParag:w,#1:w)
|
|
call T_OffsetPCount,in=(T_DotObj:l,#1:w)
|
|
|
|
|
|
; 1st paragraph -- Recut it and then draw the last Q_Line.
|
|
|
|
rcall T_GetParPtr,in=(T_DotParag:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr]:#T_ParOffset,ParOffset
|
|
|
|
in [ParagPtr]:#T_ObjHdl:l,T_DotParag:w,[ParagPtr]:#T_ParStart:w
|
|
out EndObjHdl:l,MidVert:w
|
|
xcall T_RecutParag
|
|
|
|
rcall T_GetParPtr,in=(T_DotParag:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr]:#T_LineCount,a
|
|
dec a
|
|
sta LastLine
|
|
|
|
call T_TopLine,in=(T_DotParag:w,LastLine:w),out=(a:l,VertLPos:w)
|
|
|
|
in T_DotParag:w,LastLine:w,T_DotObj:l,VertLPos:w
|
|
xcall T_DrawOneLine
|
|
|
|
|
|
|
|
; 2nd paragraph --
|
|
; Set ParOffset,ParStart and use the ruler.
|
|
|
|
inc T_DotParag
|
|
rcall T_GetParPtr,in=(T_DotParag:a),out=(ParagPtr:ax)
|
|
|
|
addword ParOffset,T_DotOffset,a
|
|
inc a
|
|
moveword a,[ParagPtr]:#T_ParOffset
|
|
movelong EndObjHdl,[ParagPtr]:#T_ObjHdl
|
|
moveword MidVert,[ParagPtr]:#T_ParStart
|
|
movelong #0,[ParagPtr]:#T_LinesHdl
|
|
movelong [ParagPtr]:#T_RulerHdl,RulerHdl
|
|
rcall T_UseRuler,in=(RulerHdl:ax)
|
|
|
|
in EndObjHdl:l,T_DotParag:w,MidVert:w
|
|
out EndObjHdl:l,EndVert:w
|
|
xcall T_RecutParag
|
|
|
|
rcall T_GetParPtr,in=(T_DotParag:a),out=(ParagPtr:ax)
|
|
|
|
in T_DotParag:w,#0:w,[ParagPtr]:#T_LineCount:w,MidVert:w
|
|
xcall T_DrawParag
|
|
|
|
moveword #T_ParHeader,T_DotOffset
|
|
|
|
; Bump stuff.
|
|
|
|
lda T_DotParag
|
|
inc a
|
|
call T_BumpParags,in=(a:w,EndObjHdl:l,EndVert:w,#1:w)
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_DeleteCR ()
|
|
;
|
|
|
|
T_DeleteCR PROC EXPORT
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
;Using P_Data
|
|
|
|
LOCAL Hdl:l,NewOffset:w,CharCount:w
|
|
LOCAL ParagPtr:l,LastLine:w
|
|
|
|
BEGIN
|
|
|
|
|
|
lda T_DotParag
|
|
beq Exit
|
|
|
|
call P_BuildUndo,in=(#P_NoUndo:w)
|
|
call T_CopyParEnd,in=(T_DotParag:w,#T_ParHeader:w),out=(Hdl:l)
|
|
bcs Exit
|
|
|
|
lda T_DotParag
|
|
dec a
|
|
rcall T_GetParSize,in=(a:a),out=(a:a)
|
|
dec a
|
|
sta NewOffset
|
|
|
|
|
|
call T_DeletePars,in=(T_DotParag:w,#1:w)
|
|
dec T_DotParag
|
|
|
|
|
|
in T_DotParag:w,NewOffset:w,Hdl:l
|
|
out CharCount:w
|
|
xcall T_PastePar
|
|
|
|
moveword NewOffset,T_DotOffset
|
|
rcall T_GetParPtr,in=(T_DotParag:a),out=(ParagPtr:ax)
|
|
subword [ParagPtr]:#T_LineCount,#1,LastLine
|
|
call T_FixParag,in=(T_DotParag:w,LastLine:w,CharCount:w)
|
|
call T_DrawRuler
|
|
|
|
jsl P_FixMenus
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; T_DeleteChar ()
|
|
;
|
|
; Deletes the character to the left of T_DotOffset.
|
|
|
|
T_DeleteChar PROC EXPORT
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
;Using P_Data
|
|
|
|
LOCAL LOffset:w,ROffset:w,TextPtr:l
|
|
LOCAL LeftFont:l,LeftColor:w,RightFont:l,RightColor:w
|
|
LOCAL Room:w
|
|
|
|
BEGIN
|
|
|
|
rcall T_PrevChar,in=(T_DotParag:a,T_DotOffset:x),out=(LOffset:a)
|
|
|
|
cmp #0
|
|
bne DoChar
|
|
jsl T_DeleteCR
|
|
brl Exit
|
|
DoChar
|
|
|
|
call P_BuildUndo,in=(#P_NoUndo:w)
|
|
rcall T_JunkRight,in=(T_DotParag:a,T_DotOffset:x),out=(ROffset:a)
|
|
rcall T_GetTextPtr,in=(T_DotParag:a),out=(TextPtr:ax)
|
|
|
|
call T_TrackFont,in=(TextPtr:l,LOffset:w)
|
|
movelong T_CurFont,LeftFont
|
|
moveword T_CurColor,LeftColor
|
|
|
|
call T_TrackFont,in=(TextPtr:l,ROffset:w)
|
|
movelong T_CurFont,RightFont
|
|
moveword T_CurColor,RightColor
|
|
|
|
in LeftFont:l,LeftColor:w,RightFont:l,RightColor:w
|
|
out a:w
|
|
xcall T_CalcFBytes
|
|
|
|
|
|
;Room = Bytes-(RightOffset-LeftOffset)
|
|
|
|
addword a,LOffset,a
|
|
subword a,ROffset,Room
|
|
call T_DoRoom,in=(T_DotParag:w,LOffset:w,Room:w)
|
|
|
|
rcall T_GetTextPtr,in=(T_DotParag:a),out=(TextPtr:ax)
|
|
addwl LOffset,TextPtr
|
|
|
|
in TextPtr:l,LeftFont:l,LeftColor:w,RightFont:l,RightColor:w
|
|
xcall T_WriteFBytes
|
|
|
|
|
|
moveword LOffset,T_DotOffset
|
|
|
|
|
|
; This is a hack to prevent bug #1626, so that if you are at the beginning of
|
|
; a Q_Line, the previous Q_Line will get updated correctly.
|
|
|
|
in T_DotParag:w,T_DotOffset:w
|
|
out T_DotObj:l,T_DotLine:w
|
|
xcall T_Offset2Line
|
|
|
|
call T_FixParag,in=(T_DotParag:w,T_DotLine:w,Room:w)
|
|
jsl P_FixMenus
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------------
|
|
;
|
|
; T_InsertChars (ObjHdl:l,LineNo:w,ParagNo:w,Offset:w,CharsPtr:l,Bytes:w)
|
|
;
|
|
|
|
T_InsertChars PROC EXPORT
|
|
;Using P_Data
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
INPUT ObjHdl:l,LineNo:w
|
|
INPUT ParagNo:w,Offset:w
|
|
INPUT CharsPtr:l,Bytes:w
|
|
|
|
LOCAL TextPtr:l,ObjPtr:l,CharsWidth:l,LineWidth:w
|
|
LOCAL LinePtr:l,VertPos:w,EndOffset:w,EndFont:l,EndColor:w
|
|
|
|
BEGIN
|
|
|
|
jsl P_BuildType
|
|
jsl T_Clear
|
|
|
|
|
|
call T_MakeRoom,in=(ParagNo:w,Offset:w,Bytes:w)
|
|
rcall T_GetTextPtr,in=(ParagNo:a),out=(TextPtr:ax)
|
|
|
|
|
|
pushlong CharsPtr
|
|
lda Offset
|
|
addlong a,TextPtr,s
|
|
pushword #0
|
|
pushword Bytes
|
|
_BlockMove
|
|
|
|
|
|
lda T_FontFlags
|
|
beq NoChange
|
|
|
|
addword Offset,Bytes,EndOffset
|
|
rcall T_JunkRight,in=(ParagNo:a,EndOffset:x),out=(EndOffset:a)
|
|
call T_TrackFont,in=(TextPtr:l,EndOffset:w)
|
|
movelong T_CurFont,EndFont
|
|
moveword T_CurColor,EndColor
|
|
|
|
call T_InsertFont,in=(ParagNo:w,Offset:w,#1:w),out=(a:w)
|
|
addword a,Offset,a
|
|
addword a,Bytes,Offset
|
|
|
|
moveword EndFont,T_NewFont
|
|
shortm
|
|
moveword EndFont+2,T_NewAddStyle
|
|
moveword EndFont+3,T_NewSize
|
|
longm
|
|
moveword EndColor,T_NewColor
|
|
|
|
call T_InsertFont,in=(ParagNo:w,Offset:w,#1:w),out=(a:w)
|
|
stz T_FontFlags
|
|
bra FixIt
|
|
|
|
NoChange
|
|
addword Offset,Bytes,Offset
|
|
|
|
FixIt
|
|
moveword Offset,T_DotOffset
|
|
|
|
|
|
call T_FixParag,in=(ParagNo:w,LineNo:w,Bytes:w)
|
|
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------;
|
|
;
|
|
; T_Key (EvtPtr:l)
|
|
;
|
|
|
|
|
|
T_Key PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
|
|
INPUT EvtPtr:l
|
|
LOCAL ParagPtr:l,LinesHdl:l,LinePtr:l
|
|
LOCAL Char:w,CharCount:w,CharBuf:r
|
|
LOCAL MoreEvtRec:r,EvtRec:r,Src:l
|
|
LOCAL CharsWidth:w,LineWidth:w,TextPtr:l,SpaceCount:w
|
|
|
|
BEGIN
|
|
|
|
moverect [EvtPtr],EvtRec
|
|
moverect [EvtPtr]:#8,EvtRec+8
|
|
|
|
lda EvtRec+2
|
|
and #$ff
|
|
sta Char
|
|
|
|
cmp #SPACE
|
|
beq SkipApple
|
|
|
|
lda EvtRec+14
|
|
and #AppleKey
|
|
jne Exit
|
|
SkipApple
|
|
|
|
_ObscureCursor
|
|
jsl T_EraseCaret
|
|
|
|
|
|
; lda Char
|
|
; cmp #$24
|
|
; jeq SpecChar1
|
|
; cmp #$21
|
|
; jeq SpecChar2
|
|
; cmp #$23
|
|
; jeq SpecChar3
|
|
|
|
lda Char
|
|
|
|
cmp #$7F
|
|
jeq Delete
|
|
cmp #SPACE
|
|
bge InsertChars
|
|
cmp #TAB
|
|
beq InsertChars
|
|
cmp #CR
|
|
bne DoControl
|
|
|
|
jsl T_InsertCR
|
|
bra ToExit
|
|
|
|
|
|
DoControl
|
|
call T_DoControl,in=(Char:w,EvtRec+14:w)
|
|
ToExit brl Exit
|
|
|
|
|
|
|
|
InsertChars
|
|
stz CharCount
|
|
stz SpaceCount
|
|
|
|
SuckChars
|
|
cmpw Char,#SPACE
|
|
bne DidSpace
|
|
|
|
lda EvtRec+14
|
|
and #appleKey
|
|
bne Sticky
|
|
lda EvtRec+14
|
|
and #optionKey
|
|
beq DidSpace
|
|
Sticky moveword #$CA,Char
|
|
DidSpace
|
|
|
|
lda Char
|
|
ldx CharCount
|
|
sta CharBuf,x
|
|
inx
|
|
stx CharCount
|
|
cpx #8
|
|
beq NoMore
|
|
cmp #CR
|
|
beq NoMore
|
|
|
|
tool _OSEventAvail,in=(#%101110:w,!EvtRec:l),out=(a:w)
|
|
beq NoMore
|
|
|
|
lda EvtRec
|
|
cmp #3 ; key event
|
|
beq KeyEvent
|
|
cmp #5 ; auto-key event
|
|
bne NoMore
|
|
KeyEvent
|
|
|
|
lda EvtRec+2
|
|
and #$ff
|
|
cmp #$7F
|
|
beq NoMore
|
|
cmp #SPACE
|
|
blt NoMore
|
|
|
|
tool _GetOSEvent,in=(#%101000:w,!EvtRec:l),out=(a:w)
|
|
|
|
lda EvtRec+2
|
|
and #$ff
|
|
sta Char
|
|
brl SuckChars
|
|
NoMore
|
|
|
|
|
|
in T_DotObj:l,T_DotLine:w,T_DotParag:w,T_DotOffset:w
|
|
in !CharBuf:l,CharCount:w
|
|
xcall T_InsertChars
|
|
bra Exit
|
|
|
|
|
|
|
|
; Delete the previous chararcter
|
|
|
|
Delete
|
|
lda T_TextSelect
|
|
beq NoClear
|
|
call P_BuildUndo,in=(#P_ClearTextUndo:w)
|
|
jsl T_Clear
|
|
bra Exit
|
|
NoClear
|
|
jsl T_DeleteChar
|
|
|
|
|
|
Exit
|
|
RETURN
|
|
|
|
|
|
;specChar1 anop
|
|
; pushlong T_CurParHdl
|
|
; jsl T_DebugThread
|
|
; bra Exit
|
|
;
|
|
;specChar2 anop
|
|
; lda T_BrkFlag
|
|
; beq Set
|
|
; stz T_BrkFlag
|
|
; bra Exit
|
|
;set inc T_BrkFlag
|
|
; bra Exit
|
|
;
|
|
;specChar3 anop
|
|
;
|
|
; pushlong T_DotObj
|
|
; jsl T_DebugTextObj
|
|
; brl Exit
|
|
;
|
|
ENDP
|
|
END
|
|
|