mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-04 04:31:04 +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_BitMapChanged
|
|
IMPORT D_BitMapPtr
|
|
IMPORT D_ClearBitMap
|
|
IMPORT D_Deref
|
|
IMPORT P_AddThreadRgn
|
|
IMPORT P_CheckHand
|
|
IMPORT P_ContentRect
|
|
IMPORT P_CurrentWin
|
|
IMPORT P_DoThread
|
|
IMPORT P_DrawContent
|
|
IMPORT P_DrawHandles
|
|
IMPORT P_ErrorAlert
|
|
IMPORT P_FixMenus
|
|
IMPORT P_FixSpecRect
|
|
IMPORT P_HideTabs
|
|
IMPORT P_KillUndo
|
|
IMPORT P_Page
|
|
IMPORT P_PageMode
|
|
IMPORT P_Placing
|
|
IMPORT P_ThreadDir
|
|
IMPORT P_ThreadHdl
|
|
IMPORT D_RectZap
|
|
IMPORT T_BlinkCaret
|
|
IMPORT T_Click
|
|
IMPORT T_GetParPtr
|
|
IMPORT T_InvSelect
|
|
IMPORT T_NewParHdl
|
|
IMPORT T_OffThread
|
|
IMPORT T_PadThread
|
|
IMPORT T_Pt2Offset
|
|
IMPORT T_RecutParag
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY T_CInterval
|
|
ENTRY T_CaretDrawn
|
|
ENTRY T_CaretTime
|
|
ENTRY T_ClickCount
|
|
ENTRY T_ClipThread
|
|
ENTRY T_CurParHdl
|
|
ENTRY T_Editing
|
|
ENTRY T_FontFlags
|
|
ENTRY T_ReThread
|
|
ENTRY T_Refresh
|
|
ENTRY T_RulDrawn
|
|
ENTRY T_TextSelect
|
|
ENTRY T_ThreadRgn
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; T_New (ObjHdl:l,ParagHdl:l)
|
|
;
|
|
; Returns any errors. ObjHdl should be X_Locked when T_New is called.
|
|
|
|
|
|
T_New PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
input ObjHdl:l,ParagHdl:l
|
|
local ObjPtr:l,ParagPtr:l,PThread:l,ReThreadHdl:l,TempPtr:l
|
|
|
|
error Err
|
|
|
|
begin
|
|
|
|
|
|
stz Err
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
call P_FixSpecRect,in=(ObjPtr:l)
|
|
|
|
|
|
; Make a D_New parag array if neccessary
|
|
|
|
cpzl ParagHdl
|
|
bne ThreadExists
|
|
call T_NewParHdl,out=(ParagHdl:l),err=(Err)
|
|
jcs Exit
|
|
ThreadExists movelong ParagHdl,[ObjPtr]:#P_ParagHdl
|
|
|
|
|
|
moveword P_Page,[ObjPtr]:#P_PageNo
|
|
moveword #0,[ObjPtr]:#P_NThread
|
|
moveword a,[ObjPtr]:#P_NThread+2
|
|
moveword a,[ObjPtr]:#P_PThread
|
|
moveword a,[ObjPtr]:#P_PThread+2
|
|
|
|
|
|
; Do threading
|
|
|
|
lda P_Placing
|
|
beq NoThread
|
|
cpzl P_ThreadHdl
|
|
beq NoThread
|
|
|
|
rcall D_Deref,in=(P_ThreadHdl:ax),out=(TempPtr:ax)
|
|
cmpw [TempPtr]:#P_PageNo,P_Page
|
|
bne NoHand1
|
|
call P_DrawHandles,in=(TempPtr:l)
|
|
NoHand1
|
|
|
|
call P_DoThread,in=(P_ThreadHdl:l,ObjHdl:l,P_ThreadDir:w)
|
|
|
|
cmpw [TempPtr]:#P_PageNo,P_Page
|
|
bne NoHand2
|
|
call P_DrawHandles,in=(TempPtr:l)
|
|
NoHand2
|
|
|
|
tool _HUnlock,in=(P_ThreadHdl:l)
|
|
NoThread
|
|
|
|
|
|
|
|
|
|
; Setup and rethread
|
|
|
|
movelong [ObjPtr]:#P_PThread,PThread
|
|
cpzl PThread
|
|
bne PrevExists
|
|
|
|
movelong ObjHdl,ReThreadHdl
|
|
movelong [ParagHdl],ParagPtr
|
|
movelong ObjHdl,[ParagPtr]:#T_ObjHdl
|
|
|
|
lda #0
|
|
moveword a,[ParagPtr]:#T_ParStart
|
|
moveword a,[ObjPtr]:#P_StartParag
|
|
moveword a,[ObjPtr]:#P_StartLine
|
|
lda #$FFFF
|
|
moveword a,[ObjPtr]:#P_EndParag
|
|
moveword a,[ObjPtr]:#P_EndLine
|
|
bra Done
|
|
|
|
|
|
PrevExists
|
|
movelong PThread,ReThreadHdl
|
|
|
|
Done
|
|
call T_ReThread,in=(ReThreadHdl:l)
|
|
|
|
|
|
Exit return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;-------------------------------------------------------------------------------
|
|
;
|
|
; T_ReThread (ObjHdl:l)
|
|
;
|
|
|
|
T_ReThread PROC EXPORT
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using T_TextEqu
|
|
|
|
input ObjHdl:l
|
|
local ObjPtr:l,ParagHdl:l,ParagPtr:l
|
|
local ParagNo:w,ParagCount:w,VertPos:w
|
|
error Err
|
|
|
|
begin +b
|
|
|
|
|
|
stz Err
|
|
|
|
; D_Save on stack
|
|
pushlong T_CurParHdl
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
movelong [ObjPtr]:#P_ParagHdl,ParagHdl
|
|
|
|
movelong ParagHdl,T_CurParHdl
|
|
rcall T_GetParPtr,in=(#0:a),out=(ParagPtr:ax)
|
|
moveword [ParagPtr],ParagCount
|
|
|
|
|
|
|
|
cpzl [ObjPtr]:#P_PThread
|
|
bne NotStart
|
|
|
|
lda #0
|
|
moveword a,[ObjPtr]:#P_StartParag
|
|
moveword a,[ObjPtr]:#P_StartLine
|
|
sta ParagNo
|
|
sta VertPos
|
|
bra ParagLoop
|
|
|
|
|
|
NotStart
|
|
moveword [ObjPtr]:#P_StartParag,ParagNo
|
|
bpl NotEnd
|
|
moveword ParagCount,ParagNo
|
|
NotEnd
|
|
lda ParagNo
|
|
beq NoDec
|
|
dec ParagNo
|
|
NoDec
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
movelong [ParagPtr]:#T_ObjHdl,ObjHdl
|
|
moveword [ParagPtr]:#T_ParStart,VertPos
|
|
|
|
|
|
|
|
ParagLoop
|
|
in ObjHdl:l,ParagNo:w,VertPos:w
|
|
out ObjHdl:l,VertPos:w
|
|
xcall T_RecutParag
|
|
|
|
rcall T_GetParPtr,in=(ParagNo:a),out=(ParagPtr:ax)
|
|
tool _DisposeHandle,in=([ParagPtr]:#T_LinesHdl:l)
|
|
movelong #0,[ParagPtr]:#T_LinesHdl
|
|
moveword [ParagPtr]:#T_LineCount,a
|
|
|
|
inc ParagNo
|
|
cmpw ParagNo,ParagCount
|
|
blt ParagLoop
|
|
|
|
|
|
call T_PadThread,in=(ObjHdl:l,VertPos:w)
|
|
|
|
|
|
; Restore from stack
|
|
|
|
Done
|
|
pulllong T_CurParHdl
|
|
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; T_Activate (ObjHdl:l,Pt:l) : Drawn:w
|
|
;
|
|
; ThePoint should be in local coordinates.
|
|
;
|
|
|
|
T_Activate PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
|
|
input ObjHdl:l,Pt:l
|
|
output Drawn:w
|
|
|
|
local ObjPtr:l,Start:l,End:l
|
|
local NewParag:w,NewOffset:w,NewLine:w,NewPixs:w
|
|
|
|
begin
|
|
|
|
|
|
stz Drawn
|
|
|
|
lda P_PageMode
|
|
jne Exit
|
|
|
|
call P_CheckHand,in=(#$8000:l)
|
|
bcc Cont
|
|
call P_ErrorAlert,in=(#1:w)
|
|
brl Exit
|
|
Cont
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
movelong [ObjPtr]:#P_StartParag,Start
|
|
movelong [ObjPtr]:#P_EndParag,End
|
|
movelong [ObjPtr]:#P_ParagHdl,T_CurParHdl
|
|
|
|
inc T_Editing
|
|
stz T_ClickCount
|
|
stz T_TextSelect
|
|
stzl T_RulDrawn
|
|
|
|
tool _GetCaretTime,out=(T_CInterval:l)
|
|
tool _SetPort,in=(P_CurrentWin:l)
|
|
call P_KillUndo
|
|
|
|
cmpl Start,End
|
|
beq Deactivate
|
|
|
|
in ObjHdl:l,Pt:l
|
|
out NewParag:w,NewOffset:w,NewLine:w,NewPixs:w
|
|
xcall T_Pt2Offset
|
|
|
|
call T_OffThread,in=(NewParag:w,NewLine:w),out=(a:w)
|
|
bne Deactivate
|
|
|
|
tool _NewRgn,out=(T_ThreadRgn:l)
|
|
call T_ClipThread,in=(ObjHdl:l)
|
|
jsl T_Refresh
|
|
|
|
call T_Click,in=(ObjHdl:l,Pt:l,#0:w,#0:w)
|
|
inc Drawn
|
|
|
|
Exit return
|
|
|
|
Deactivate
|
|
stz T_Editing
|
|
stzl T_CurParHdl
|
|
bra Exit
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; T_Deactivate (Refresh:w,OffScreen:w)
|
|
;
|
|
; Refresh - Refreshes the screen if true.
|
|
|
|
T_Deactivate PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
|
|
input Refresh:w,OffScreen:w
|
|
|
|
begin
|
|
|
|
lda T_Editing
|
|
beq Exit
|
|
|
|
jsl P_KillUndo
|
|
jsl T_InvSelect
|
|
jsl P_HideTabs
|
|
|
|
stz T_Editing
|
|
stz T_FontFlags
|
|
stzl T_CurParHdl
|
|
|
|
tool _DisposeRgn,in=(T_ThreadRgn:l)
|
|
|
|
lda Refresh
|
|
beq DoMenus
|
|
lda OffScreen
|
|
beq On
|
|
jsl T_Refresh
|
|
bra DoMenus
|
|
On call P_DrawContent,in=(#P_ContentRect:l,#0:w)
|
|
DoMenus jsl P_FixMenus
|
|
|
|
|
|
Exit return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_ClipThread (ObjHdl:l)
|
|
;
|
|
|
|
T_ClipThread PROC EXPORT
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
|
|
input ObjHdl:l
|
|
local ThreadHdl:l,ThreadPtr:l,PThread:l
|
|
|
|
begin
|
|
|
|
lda T_Editing
|
|
beq Exit
|
|
|
|
cpzl [ObjHdl]
|
|
bne DoIt ;if zero not valid
|
|
tool _SetEmptyRgn,in=(T_ThreadRgn:l)
|
|
bra Exit
|
|
|
|
DoIt
|
|
movelong ObjHdl,ThreadHdl
|
|
|
|
Loop
|
|
movelong [ThreadHdl],ThreadPtr
|
|
movelong [ThreadPtr]:#P_PThread,PThread
|
|
cpzl PThread
|
|
beq EndLoop
|
|
movelong PThread,ThreadHdl
|
|
bra Loop
|
|
EndLoop
|
|
|
|
tool _SetEmptyRgn,in=(T_ThreadRgn:l)
|
|
call P_AddThreadRgn,in=(ThreadHdl:l,T_ThreadRgn:l)
|
|
|
|
Exit return
|
|
ENDP
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; T_Refresh ()
|
|
;
|
|
|
|
T_Refresh PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using D_GlobalData
|
|
|
|
|
|
local Port:l,Q_Rect:r
|
|
|
|
begin
|
|
|
|
movelong P_CurrentWin,Port
|
|
pushlong [Port]:#2 ;D_Save BitMap Ptr
|
|
movelong >D_BitMapPtr,[Port]:#2
|
|
|
|
moverect P_ContentRect,Q_Rect
|
|
tool _LocalToGlobal,in=(!Q_Rect:l)
|
|
tool _LocalToGlobal,in=(!Q_Rect+4:l)
|
|
call D_ClearBitMap,in=(!Q_Rect:l)
|
|
call P_DrawContent,in=(#P_ContentRect:l,#0:w)
|
|
tool _HideCursor
|
|
call D_RectZap,in=(!Q_Rect:l)
|
|
tool _ShowCursor
|
|
pulllong [Port]:#2 ;Restore BitMap Ptr
|
|
moveword #1,>D_BitMapChanged
|
|
|
|
return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; T_Idle (TickCount:l)
|
|
;
|
|
|
|
T_Idle PROC EXPORT
|
|
;Using P_Data
|
|
;Using T_Data
|
|
|
|
input TickCount:l
|
|
local Diff:l,CTime:l
|
|
|
|
begin
|
|
|
|
lda T_TextSelect
|
|
bne Exit
|
|
|
|
|
|
sublong TickCount,T_CaretTime,Diff
|
|
cmpl Diff,T_CInterval
|
|
bcc Exit
|
|
movelong TickCount,T_CaretTime
|
|
|
|
jsl T_BlinkCaret
|
|
lda T_CaretDrawn
|
|
eor #1
|
|
sta T_CaretDrawn
|
|
|
|
Exit return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; T_Data
|
|
;
|
|
|
|
T_Data PROC EXPORT
|
|
EXPORT T_Editing
|
|
EXPORT T_CurParHdl
|
|
EXPORT T_TextSelect
|
|
EXPORT T_RulDrawn
|
|
EXPORT T_RulObj
|
|
EXPORT T_ThreadRgn
|
|
EXPORT T_CurRulHdl
|
|
EXPORT T_CurRulPtr
|
|
EXPORT T_CurRulBits
|
|
EXPORT T_CurIndent
|
|
EXPORT T_Dot
|
|
EXPORT T_DotParag
|
|
EXPORT T_DotOffset
|
|
EXPORT T_DotLine
|
|
EXPORT T_DotPixs
|
|
EXPORT T_DotObj
|
|
EXPORT T_Mark
|
|
EXPORT T_MarkParag
|
|
EXPORT T_MarkOffset
|
|
EXPORT T_MarkLine
|
|
EXPORT T_MarkPixs
|
|
EXPORT T_MarkObj
|
|
EXPORT T_FontFlags
|
|
EXPORT T_NewFont
|
|
EXPORT T_NewAddStyle
|
|
EXPORT T_NewSubStyle
|
|
EXPORT T_NewSize
|
|
EXPORT T_NewColor
|
|
EXPORT T_CurFont
|
|
EXPORT T_CurStyleSize
|
|
EXPORT T_CurStyle
|
|
EXPORT T_CurSize
|
|
EXPORT T_CurColor
|
|
EXPORT T_MaxAscent
|
|
EXPORT T_MaxDescent
|
|
EXPORT T_ScalePort
|
|
EXPORT T_ScaleLocInfo
|
|
EXPORT T_ScaleRect
|
|
EXPORT T_LastPos
|
|
EXPORT T_LastParag
|
|
EXPORT T_LastOffset
|
|
EXPORT T_CInterval
|
|
EXPORT T_CaretTime
|
|
EXPORT T_CaretDrawn
|
|
EXPORT T_ClickCount
|
|
EXPORT T_BrkFlag
|
|
|
|
T_Editing DS.B 2 ; True if editing
|
|
T_CurParHdl DS.B 4 ; Current thread being operated on
|
|
T_TextSelect DS.B 2 ; True if Q_Text is selected
|
|
T_RulDrawn DS.B 4 ; Current ruler drawn
|
|
T_RulObj DS.B 4 ; Object T_RulDraw is in
|
|
T_ThreadRgn DS.B 4 ; Rgn for thread being edited
|
|
|
|
T_CurRulHdl DS.B 4 ;Vars set by T_LockRuler
|
|
T_CurRulPtr DS.B 4
|
|
T_CurRulBits DS.B 2
|
|
T_CurIndent DS.B 2
|
|
|
|
|
|
T_Dot
|
|
T_DotParag DS.B 2
|
|
T_DotOffset DS.B 2
|
|
T_DotLine DS.B 2
|
|
T_DotPixs DS.B 2
|
|
T_DotObj DS.B 4
|
|
|
|
T_Mark
|
|
T_MarkParag DS.B 2
|
|
T_MarkOffset DS.B 2
|
|
T_MarkLine DS.B 2
|
|
T_MarkPixs DS.B 2
|
|
T_MarkObj DS.B 4
|
|
|
|
|
|
|
|
T_FontFlags DS.B 2
|
|
|
|
|
|
|
|
T_NewFont DS.B 2 ;The D_New font
|
|
T_NewAddStyle DS.B 2 ;D_New styles to add
|
|
T_NewSubStyle DS.B 2 ;D_New styles to subtract
|
|
T_NewSize DS.B 2 ;D_New Size
|
|
T_NewColor DS.B 2 ;NewColor
|
|
|
|
|
|
T_CurFont DS.B 2
|
|
T_CurStyleSize
|
|
T_CurStyle DS.B 1
|
|
T_CurSize DS.B 1
|
|
T_CurColor DS.B 2
|
|
|
|
T_MaxAscent DS.B 2
|
|
T_MaxDescent DS.B 2
|
|
|
|
|
|
T_ScalePort DS.B 4
|
|
T_ScaleLocInfo DC.W $80 ;PortSCB
|
|
DC.L 0 ;PixelImagePtr
|
|
DC.W 320 ;Width
|
|
T_ScaleRect DC.W 0,0,100,1280 ;BoundsRect
|
|
|
|
|
|
|
|
T_LastPos ; ; Last caret position
|
|
T_LastParag DS.B 2
|
|
T_LastOffset DS.B 2
|
|
|
|
|
|
T_CInterval DS.B 4 ; Time between caret blinks
|
|
T_CaretTime DC.L 0 ; Last time caret was drawn
|
|
T_CaretDrawn DC.W 0
|
|
T_ClickCount DS.B 2
|
|
|
|
|
|
|
|
|
|
|
|
T_BrkFlag DC.W 0
|
|
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; T_TextEqu
|
|
|
|
T_TextEqu PROC EXPORT
|
|
|
|
|
|
|
|
; Paragraph Info
|
|
|
|
|
|
|
|
|
|
|
|
; RulerInfo
|
|
|
|
|
|
|
|
|
|
|
|
; Q_Line Info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; Q_Text Block Header
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; RulBits stuff
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; ParagHdl --> ParagCount
|
|
; Array [1..ParagCount] of ParagInfo
|
|
;
|
|
; ParagInfo
|
|
; TextBlock : long; -- Handle to Q_Text block
|
|
; ParOffset : word; -- Offset within Q_Text block
|
|
; ParStart : word; -- Top pixel count of paragraph
|
|
; RulerHdl : long; -- Handle to ruler
|
|
; ParHeight : word; -- Pixel height of paragraph
|
|
; LinesHdl : long; -- Handle to lines array
|
|
; LineCount : word; -- Number of lines
|
|
; ObjHdl : long; -- Object with first Q_Line of parag.
|
|
;
|
|
;
|
|
; RulerInfo
|
|
; ParsUsing : word;
|
|
; RulBits : word;
|
|
; NotUsed : word;
|
|
; TabCount : word; ; Does not include Indent.
|
|
; Indent : long;
|
|
; TabArray : 40 bytes
|
|
;
|
|
;
|
|
;
|
|
; LineInfo
|
|
; Offset : word;
|
|
; Length : word;
|
|
; LineWidth : word;
|
|
; Ascent : byte;
|
|
; Descent : byte;
|
|
;
|
|
END
|
|
|