mirror of
https://github.com/antoinevignau/source.git
synced 2024-09-29 22:55:21 +00:00
1 line
8.4 KiB
ArmAsm
Executable File
1 line
8.4 KiB
ArmAsm
Executable File
|
|
load 'macros.dump'
|
|
include 'driver.equ'
|
|
include 'pl.equ'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
IMPORT P_PageRect
|
|
IMPORT P_FullPageRect
|
|
IMPORT P_PrintHand
|
|
|
|
IMPORT D_BitMapChanged
|
|
IMPORT D_Deref
|
|
IMPORT X_DoAsciitoPLText
|
|
IMPORT D_DrawIcon
|
|
IMPORT X_DrawPLText
|
|
IMPORT D_NeedHand
|
|
IMPORT P_AddObjRgn
|
|
IMPORT P_BtmHdl
|
|
IMPORT P_Constrain
|
|
IMPORT P_ContentRect
|
|
IMPORT P_CurrentWin
|
|
IMPORT P_DefColor
|
|
IMPORT P_DoHandles
|
|
IMPORT P_DrawContent
|
|
IMPORT P_FixRect
|
|
IMPORT P_GetPageMode
|
|
IMPORT P_LineSize
|
|
IMPORT P_Local2PL
|
|
IMPORT P_MagPt
|
|
IMPORT P_Mask
|
|
IMPORT P_MinHdl
|
|
IMPORT P_ObjList
|
|
IMPORT P_Page
|
|
IMPORT P_PageMode
|
|
IMPORT P_PlsHdl
|
|
IMPORT P_SpecStr
|
|
IMPORT P_TopHdl
|
|
IMPORT P_TrackCursor
|
|
IMPORT D_SectRgnRect
|
|
IMPORT D_Set4Pat
|
|
IMPORT T_ScalePort
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY P_SetPen
|
|
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; P_DrawFigure (Figure:w,Pt1:l,Pt2:l)
|
|
;
|
|
|
|
P_DrawFigure PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
|
|
INPUT Figure:w,Pt1:l,Pt2:l
|
|
LOCAL Q_Rect:r,PageMode:w,Pen:l,Q_OvalSize:w
|
|
|
|
|
|
BEGIN
|
|
|
|
movelong Pt1,Q_Rect
|
|
movelong Pt2,Q_Rect+4
|
|
rcall P_GetPageMode,out=(PageMode:a)
|
|
|
|
call P_FixRect,in=(!Q_Rect:l,Figure:w,PageMode:w,#1:w)
|
|
|
|
|
|
lda Figure
|
|
asl a
|
|
tax
|
|
jmp (JumpTable,x)
|
|
|
|
|
|
JumpTable
|
|
DC.W DoRect ; 0
|
|
DC.W DoRect ; 1
|
|
DC.W DoRect ; 2
|
|
DC.W DoRect ; 3
|
|
DC.W DoLine ; 4
|
|
DC.W DoLine ; 5
|
|
DC.W DoRect ; 6
|
|
DC.W DoRoundRect ; 7
|
|
DC.W DoOval ; 8
|
|
DC.W DoRect ; 9
|
|
|
|
|
|
DoLine
|
|
cmpl Q_Rect,Q_Rect+4
|
|
beq ToExit
|
|
|
|
tool _MoveTo,in=(Q_Rect:l)
|
|
tool _LineTo,in=(Q_Rect+4:l)
|
|
ToExit bra Exit
|
|
|
|
|
|
DoRect
|
|
tool _FrameRect,in=(!Q_Rect:l)
|
|
bra Exit
|
|
|
|
|
|
DoRoundRect
|
|
moveword #20,Q_OvalSize
|
|
moveword #40,Q_OvalSize+2
|
|
lda PageMode
|
|
beq NoScale
|
|
tool _ScalePt,in=(!Q_OvalSize:l,#P_PageRect:l,#P_FullPageRect:l)
|
|
NoScale
|
|
tool _FrameRRect,in=(!Q_Rect:l,Q_OvalSize:l)
|
|
bra Exit
|
|
|
|
|
|
DoOval
|
|
tool _FrameOval,in=(!Q_Rect:l)
|
|
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_DrawSpec (ObjPtr:l)
|
|
;
|
|
|
|
P_DrawSpec PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
;Using T_Data
|
|
;Using D_GlobalData
|
|
|
|
INPUT ObjPtr:l
|
|
LOCAL AsciiHdl:l,StaticText:l,Lngth:l,Port:l
|
|
LOCAL Q_Rect:r,ScaleRect:r
|
|
|
|
BEGIN
|
|
|
|
lda P_SpecStr
|
|
and #$ff
|
|
sta Lngth
|
|
stz Lngth+2
|
|
|
|
call D_NeedHand,in=(Lngth:l),out=(AsciiHdl:l)
|
|
jcs Exit
|
|
tool _PtrToHand,in=(#P_SpecStr+1:l,AsciiHdl:l,Lngth:l)
|
|
|
|
in AsciiHdl:l,[ObjPtr]:#P_ItemFontId:l,[ObjPtr]:#P_ItemColor:w
|
|
out StaticText:l
|
|
xcall X_DoAsciitoPLText
|
|
jcs Done2
|
|
|
|
moverect [ObjPtr]:#P_ObjRect,Q_Rect
|
|
|
|
lda P_PageMode
|
|
bne OffScreen
|
|
call P_FixRect,in=(!Q_Rect:l,#P_RECTANGLE:w,#0:w,#1:w)
|
|
call X_DrawPLText,in=(StaticText:l,!Q_Rect:l)
|
|
brl Done1
|
|
|
|
|
|
OffScreen
|
|
subword Q_Rect+4,Q_Rect,a
|
|
cmp #100
|
|
blt VOkay
|
|
addword Q_Rect,#100,Q_Rect+4
|
|
VOkay
|
|
|
|
moverect Q_Rect,ScaleRect
|
|
tool _MapRect,in=(!ScaleRect:l,#P_PageRect:l,#P_FullPageRect:l)
|
|
|
|
subword Q_Rect+4,Q_Rect,Q_Rect+4
|
|
subword Q_Rect+6,Q_Rect+2,Q_Rect+6
|
|
stz Q_Rect
|
|
stz Q_Rect+2
|
|
|
|
|
|
tool _SetPort,in=(T_ScalePort:l)
|
|
tool _EraseRect,in=(!Q_Rect:l)
|
|
call X_DrawPLText,in=(StaticText:l,!Q_Rect:l)
|
|
tool _SetPort,in=(P_CurrentWin:l)
|
|
|
|
pushlong T_ScalePort ;Src LocInfo
|
|
pushlong P_CurrentWin ;Dest LocInfo
|
|
pushlong !Q_Rect ;Src Q_Rect
|
|
pushlong !ScaleRect ;Dest Q_Rect
|
|
pushword #NotBIC ;Mode
|
|
pushlong #0
|
|
_CopyPixels
|
|
|
|
moveword #1,>D_BitMapChanged
|
|
|
|
|
|
Done1 tool _DisposeHandle,in=(StaticText:l)
|
|
Done2 tool _DisposeHandle,in=(AsciiHdl:l)
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_IsObjSel () : Result:w
|
|
;
|
|
; Returns true if an object is selected.
|
|
|
|
P_IsObjSel PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
|
|
OUTPUT Result:w
|
|
LOCAL ObjHdl:l,ObjPtr:l
|
|
|
|
BEGIN
|
|
|
|
stz Result
|
|
movelong P_ObjList,ObjHdl
|
|
|
|
Loop cpzl ObjHdl
|
|
beq Exit
|
|
|
|
movelong [ObjHdl],ObjPtr
|
|
moveword [ObjPtr]:#P_Deleted,a
|
|
bne NextObj
|
|
|
|
moveword [ObjPtr]:#P_Selected,a
|
|
bne Yes
|
|
|
|
NextObj
|
|
movelong [ObjPtr],ObjHdl
|
|
bra Loop
|
|
|
|
Yes inc Result
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_MakeFigure (Figure:w,AnchorPt:l) : EndPt:l
|
|
;
|
|
; AnchorPt must be in D_PL coordinates.
|
|
|
|
P_MakeFigure PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
|
|
INPUT Figure:w,AnchorPt:l
|
|
OUTPUT EndPt:l
|
|
LOCAL NewPt:l
|
|
|
|
BEGIN
|
|
|
|
movelong AnchorPt,EndPt
|
|
|
|
tool _SetPenMode,in=(#notXOR:w)
|
|
|
|
lda Figure
|
|
cmp #P_STRLINE
|
|
blt Normal
|
|
|
|
call P_SetPen,in=(P_LineSize:w,P_DefColor:w)
|
|
bra WhileLoop
|
|
|
|
Normal tool _SetPenSize,in=(#1:w,#1:w)
|
|
tool _SetPenMask,in=(#P_Mask:l)
|
|
|
|
|
|
|
|
WhileLoop
|
|
tool _StillDown,in=(#0:w),out=(a:w)
|
|
jeq EndWhile
|
|
|
|
tool _GetMouse,in=(!NewPt:l)
|
|
call P_TrackCursor,in=(!NewPt:l)
|
|
rcall P_Local2PL,in=(NewPt:ax),out=(NewPt:ax)
|
|
|
|
cmpw Figure,#P_RECTANGLE
|
|
blt NoCorrect
|
|
cmp #P_CIRCLE+1
|
|
bge NoCorrect
|
|
addword P_LineSize,NewPt,NewPt
|
|
lda P_LineSize
|
|
asl a
|
|
addword a,NewPt+2,NewPt+2
|
|
NoCorrect
|
|
|
|
call P_Constrain,in=(Figure:w,AnchorPt:l,!NewPt:l,P_PrintHand:l)
|
|
call P_MagPt,in=(!NewPt:l,!AnchorPt:l,Figure:w)
|
|
call P_Constrain,in=(Figure:w,AnchorPt:l,!NewPt:l,P_PrintHand:l)
|
|
|
|
cmpl EndPt,NewPt
|
|
jeq WhileLoop
|
|
|
|
|
|
; Erase Old Figure
|
|
call P_DrawFigure,in=(Figure:w,AnchorPt:l,EndPt:l)
|
|
|
|
; Draw D_New Figure
|
|
call P_DrawFigure,in=(Figure:w,AnchorPt:l,NewPt:l)
|
|
|
|
movelong NewPt,EndPt
|
|
brl WhileLoop
|
|
EndWhile
|
|
|
|
|
|
; erase last one
|
|
call P_DrawFigure,in=(Figure:w,AnchorPt:l,EndPt:l)
|
|
|
|
_PenNormal
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_SetPen (LineSize:w,Color:w)
|
|
;
|
|
|
|
P_SetPen PROC EXPORT
|
|
;Using P_Data
|
|
|
|
INPUT LineSize:w,Color:w
|
|
LOCAL Pt:l
|
|
|
|
BEGIN
|
|
|
|
|
|
lda LineSize
|
|
sta Pt
|
|
stz Pt+2
|
|
|
|
lda P_PageMode
|
|
beq SetIt
|
|
|
|
tool _ScalePt,in=(!Pt:l,#P_PageRect:l,#P_FullPageRect:l)
|
|
|
|
SetIt lda Pt
|
|
bne Okay
|
|
inc Pt
|
|
Okay lda Pt
|
|
asl a
|
|
sta Pt+2
|
|
|
|
tool _SetPenSize,in=(Pt:l)
|
|
call D_Set4Pat,in=(Color:w)
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_AddThreadRgn (ObjHdl:l,RgnHdl:l)
|
|
;
|
|
; Adds the rectangles for all the Q_Text objects in the thread starting at
|
|
; ObjHdl that are on the current page.
|
|
|
|
P_AddThreadRgn PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_ObjData
|
|
|
|
INPUT ObjHdl:l,RgnHdl:l
|
|
LOCAL ObjPtr:l
|
|
|
|
BEGIN
|
|
|
|
Loop cpzl ObjHdl
|
|
beq EndLoop
|
|
|
|
rcall D_Deref,in=(ObjHdl:ax),out=(ObjPtr:ax)
|
|
|
|
cmpw P_Page,[ObjPtr]:#P_PageNo
|
|
bne Skip
|
|
call P_AddObjRgn,in=(ObjPtr:l,RgnHdl:l)
|
|
Skip
|
|
|
|
tool _HUnlock,in=(ObjHdl:l)
|
|
|
|
movelong [ObjPtr]:#P_NThread,ObjHdl
|
|
bra Loop
|
|
EndLoop
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;-----------------------------------------------------------------------------
|
|
;
|
|
; P_DrawRgn (UpdateRgn:l)
|
|
;
|
|
; Disposes the UpdateRgn when done.
|
|
|
|
P_DrawRgn PROC EXPORT
|
|
;Using P_Data
|
|
|
|
INPUT UpdateRgn:l
|
|
LOCAL ClipHdl:l,ClipPtr:l,Q_Rect:r
|
|
|
|
BEGIN
|
|
|
|
call D_SectRgnRect,in=(UpdateRgn:l,#P_ContentRect:l)
|
|
tool _GetClipHandle,out=(ClipHdl:l)
|
|
tool _EraseRgn,in=(ClipHdl:l)
|
|
|
|
movelong [ClipHdl],ClipPtr
|
|
moverect [ClipPtr]:#2,Q_Rect
|
|
|
|
call P_DrawContent,in=(!Q_Rect:l,#0:w)
|
|
tool _ClipRect,in=(#P_ContentRect:l)
|
|
tool _DisposeRgn,in=(UpdateRgn:l)
|
|
|
|
RETURN
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
;
|
|
; P_DrawHandles (ObjPtr:l)
|
|
;
|
|
|
|
P_DrawHandles PROC EXPORT
|
|
;Using P_ObjData
|
|
;Using P_IconData
|
|
;Using P_Data
|
|
|
|
INPUT ObjPtr:l
|
|
LOCAL Q_Rect:r,MidPt:w,PThread:l,NThread:l
|
|
|
|
BEGIN
|
|
|
|
call P_DoHandles,in=(ObjPtr:l,#0:w,#0:l),out=(a:w)
|
|
|
|
cmpw [ObjPtr]:#P_Type,#P_ALPHA
|
|
jne Exit
|
|
|
|
moverect [ObjPtr]:#P_ObjRect,Q_Rect
|
|
call P_FixRect,in=(!Q_Rect:l,[ObjPtr]:#P_Type:w,P_PageMode:w,#1:w)
|
|
|
|
subword Q_Rect+6,Q_Rect+2,a
|
|
lsr a
|
|
subword a,#7,a
|
|
addword a,Q_Rect+2,MidPt
|
|
|
|
|
|
pushlong ObjPtr
|
|
|
|
|
|
TryPrev
|
|
movelong [ObjPtr]:#P_PThread,PThread
|
|
cpzl PThread
|
|
beq NoPrev
|
|
|
|
movelong [PThread],ObjPtr
|
|
moveword [ObjPtr]:#P_Deleted,a
|
|
bne TryPrev
|
|
|
|
pushlong #P_MinHdl
|
|
bra Cont
|
|
NoPrev pushlong #P_TopHdl
|
|
Cont pushword MidPt
|
|
subword Q_Rect,#5,s
|
|
pushword #notXOR
|
|
jsl D_DrawIcon
|
|
|
|
pulllong ObjPtr
|
|
|
|
|
|
TryNext
|
|
movelong [ObjPtr]:#P_NThread,NThread
|
|
cpzl NThread
|
|
beq NoNext
|
|
|
|
movelong [NThread],ObjPtr
|
|
moveword [ObjPtr]:#P_Deleted,a
|
|
bne TryNext
|
|
|
|
pushlong #P_PlsHdl
|
|
bra Cont2
|
|
NoNext pushlong #P_BtmHdl
|
|
Cont2 pushword MidPt
|
|
lda Q_Rect+4
|
|
dec a
|
|
pha
|
|
pushword #notXOR
|
|
jsl D_DrawIcon
|
|
|
|
|
|
Exit RETURN
|
|
ENDP
|
|
END
|
|
|