mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-04 04:31:04 +00:00
1 line
10 KiB
ArmAsm
Executable File
1 line
10 KiB
ArmAsm
Executable File
|
|
load 'macros.dump'
|
|
include 'driver.equ'
|
|
|
|
include 'pl.equ'
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
IMPORT D_DrawIcon
|
|
IMPORT D_FastMult
|
|
IMPORT P_ChangePage
|
|
IMPORT P_ContentRect
|
|
IMPORT P_DblPage
|
|
IMPORT P_Do_Ruler
|
|
IMPORT P_DrawAPage
|
|
IMPORT P_DrawContent
|
|
IMPORT P_FirstPOff
|
|
IMPORT P_H
|
|
IMPORT P_HRulRect
|
|
IMPORT P_L_ArrFilledIcon
|
|
IMPORT P_L_ArrHollowIcon
|
|
IMPORT P_Page
|
|
IMPORT P_PageCount
|
|
IMPORT P_PageStart
|
|
IMPORT P_Pagemode
|
|
IMPORT P_PortRect
|
|
IMPORT P_PrintHand
|
|
IMPORT P_R_ArrFilledIcon
|
|
IMPORT P_R_ArrHollowIcon
|
|
IMPORT P_TrackCursor
|
|
IMPORT P_V
|
|
IMPORT P_VRulRect
|
|
IMPORT P_VScroll
|
|
IMPORT P_VisPalette
|
|
IMPORT P_VisRuler
|
|
IMPORT T_ClipThread
|
|
IMPORT T_DotObj
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_ActionProc (PartCode:w,CtlHdl:l) : Result:w
|
|
;
|
|
|
|
|
|
P_ActionProc PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_RulerData
|
|
;Using T_Data
|
|
|
|
input PartCode:w,CtlHdl:l
|
|
output Result:w
|
|
|
|
local UpdateRgn:l,UpdateRect:r,SRect:r,CtlMax:w
|
|
local Amount:w,NewValue:w,Width:w,Height:w
|
|
local PHdl:l,PPtr:l,TempPtr:l
|
|
|
|
begin +b
|
|
|
|
; Get rid of any possible scritch marks before possible scrolling
|
|
moveword #-10,PPtr
|
|
moveword #-10,PPtr+2
|
|
call P_TrackCursor,in=(!PPtr:l)
|
|
tool _ClipRect,in=(#P_PortRect:l)
|
|
|
|
|
|
moverect P_ContentRect,SRect
|
|
tool _NewRgn,out=(UpdateRgn:l)
|
|
movelong P_PrintHand,PHdl
|
|
movelong [PHdl],PPtr
|
|
|
|
|
|
spacelong
|
|
pushlong CtlHdl
|
|
_GetCtlParams
|
|
subword s,s,CtlMax
|
|
|
|
cmpl CtlHdl,P_VScroll
|
|
jeq Vertical
|
|
|
|
|
|
subword P_ContentRect+6,P_ContentRect+2,Width
|
|
|
|
lda PartCode
|
|
cmp #Thumb
|
|
beq HThumb
|
|
cmp #5 ;UpArrow
|
|
beq HUpArrow
|
|
cmp #6 ;DownArrow
|
|
beq HDownArrow
|
|
cmp #PageUp
|
|
beq HPageUp
|
|
cmp #PageDown
|
|
beq HPageDown
|
|
brl Exit
|
|
|
|
|
|
HThumb
|
|
tool _GetCtlValue,in=(CtlHdl:l),out=(a:w)
|
|
and #$fffe
|
|
sta NewValue
|
|
|
|
tool _SetCtlValue,in=(a:w,CtlHdl:l)
|
|
|
|
subword NewValue,P_H,Amount
|
|
moveword NewValue,P_H
|
|
lda Amount
|
|
abs a
|
|
cmp Width
|
|
blt HSmall
|
|
|
|
lda Width
|
|
ldy Amount
|
|
bpl HStore
|
|
neg a
|
|
HStore sta Amount
|
|
HSmall brl HDoScroll
|
|
|
|
|
|
HUpArrow
|
|
moveword #-32,Amount
|
|
bra HCheckValue
|
|
|
|
HDownArrow
|
|
moveword #32,Amount
|
|
bra HCheckValue
|
|
|
|
HPageUp
|
|
lda Width
|
|
lsr a
|
|
neg a
|
|
sta Amount
|
|
bra HCheckValue
|
|
|
|
HPageDown
|
|
lda Width
|
|
lsr a
|
|
sta Amount
|
|
|
|
|
|
|
|
|
|
HCheckValue lda Amount
|
|
and #$fffe
|
|
sta Amount
|
|
addword a,P_H,NewValue
|
|
bpl HCheckMax
|
|
stz NewValue
|
|
bra HSet
|
|
|
|
HCheckMax cmp CtlMax
|
|
bmi HSet
|
|
moveword CtlMax,NewValue
|
|
|
|
HSet
|
|
subword NewValue,P_H,Amount
|
|
moveword NewValue,P_H
|
|
pushword NewValue
|
|
pushlong CtlHdl
|
|
_SetCtlValue
|
|
|
|
|
|
HDoScroll
|
|
stz SRect
|
|
pushlong !SRect
|
|
subword #0,Amount,s
|
|
pushword #0
|
|
pushlong UpdateRgn
|
|
_ScrollRect
|
|
|
|
movelong [UpdateRgn],TempPtr
|
|
moverect [TempPtr]:#2,UpdateRect
|
|
moveword P_ContentRect,UpdateRect
|
|
|
|
|
|
lda P_VisRuler
|
|
beq ToUpdate
|
|
|
|
pushword [PPtr]:#6
|
|
pushword #0
|
|
subword P_ContentRect+2,P_H,s
|
|
in UpdateRect+2:w,UpdateRect+6:w,#0:w
|
|
in #P_HRulRect:l,#P_VRulRect:l,#P_PortRect:l
|
|
in #P_ContentRect:l,P_Pagemode:w
|
|
xcall P_Do_Ruler
|
|
|
|
ToUpdate brl DoUpdate
|
|
|
|
|
|
|
|
|
|
Vertical
|
|
subword P_ContentRect+4,P_ContentRect,Height
|
|
|
|
lda PartCode
|
|
cmp #Thumb
|
|
beq VThumb
|
|
cmp #5 ;UpArrow
|
|
beq VUpArrow
|
|
cmp #6 ;DownArrow
|
|
beq VDownArrow
|
|
cmp #PageUp
|
|
beq VPageUp
|
|
cmp #PageDown
|
|
beq VPageDown
|
|
brl Exit
|
|
|
|
|
|
VThumb
|
|
tool _GetCtlValue,in=(CtlHdl:l),out=(a:w)
|
|
and #$fffe
|
|
sta NewValue
|
|
|
|
tool _SetCtlValue,in=(a:w,CtlHdl:l)
|
|
|
|
subword NewValue,P_V,Amount
|
|
moveword NewValue,P_V
|
|
lda Amount
|
|
abs a
|
|
cmp Height
|
|
blt VSmall
|
|
|
|
lda Height
|
|
ldy Amount
|
|
bpl VStore
|
|
neg a
|
|
VStore sta Amount
|
|
VSmall brl VDoScroll
|
|
|
|
|
|
VUpArrow
|
|
moveword #-16,Amount
|
|
bra VCheckValue
|
|
|
|
VDownArrow
|
|
moveword #16,Amount
|
|
bra VCheckValue
|
|
|
|
VPageUp
|
|
lda Height
|
|
lsr a
|
|
neg a
|
|
sta Amount
|
|
bra VCheckValue
|
|
|
|
VPageDown
|
|
lda Height
|
|
lsr a
|
|
sta Amount
|
|
|
|
|
|
|
|
VCheckValue lda Amount
|
|
and #$fffe
|
|
sta Amount
|
|
addword a,P_V,NewValue
|
|
bpl VCheckMax
|
|
stz NewValue
|
|
bra VSet
|
|
|
|
VCheckMax cmp CtlMax
|
|
bmi VSet
|
|
moveword CtlMax,NewValue
|
|
|
|
VSet
|
|
subword NewValue,P_V,Amount
|
|
moveword NewValue,P_V
|
|
tool _SetCtlValue,in=(a:w,CtlHdl:l)
|
|
|
|
|
|
|
|
VDoScroll stz SRect+2
|
|
lda P_VisPalette
|
|
beq DidPal
|
|
moveword #P_VRulLeft,SRect+2
|
|
DidPal pushlong !SRect
|
|
pushword #0
|
|
subword #0,Amount,s
|
|
pushlong UpdateRgn
|
|
_ScrollRect
|
|
|
|
movelong [UpdateRgn],TempPtr
|
|
moverect [TempPtr]:#2,UpdateRect
|
|
moveword P_ContentRect+2,UpdateRect+2
|
|
|
|
lda P_VisRuler
|
|
beq DoUpdate
|
|
|
|
pushword [PPtr]:#4
|
|
pushword #0
|
|
subword P_ContentRect,P_V,s
|
|
|
|
in UpdateRect:w,UpdateRect+4:w,#1:w
|
|
in #P_HRulRect:l,#P_VRulRect:l,#P_PortRect:l
|
|
in #P_ContentRect:l,P_Pagemode:w
|
|
xcall P_Do_Ruler
|
|
|
|
|
|
|
|
DoUpdate
|
|
tool _DisposeRgn,in=(UpdateRgn:l)
|
|
tool _ClipRect,in=(!UpdateRect:l)
|
|
|
|
call T_ClipThread,in=(T_DotObj:l)
|
|
call P_DrawContent,in=(!UpdateRect:l,#0:w)
|
|
tool _ClipRect,in=(#P_PortRect:l)
|
|
|
|
|
|
Exit return
|
|
ENDP
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
; P_ScrollPages (xpos:w)
|
|
;
|
|
|
|
P_ScrollPages PROC EXPORT
|
|
;Using P_Data
|
|
;Using P_IconDATA
|
|
|
|
input xpos:w
|
|
|
|
local pagenum:w,xloc:w,yloc:w,count:w,xcheck:w
|
|
local pt:l,tmprect:r,CRect:r,off:w,curpage:w
|
|
|
|
begin
|
|
|
|
|
|
addword P_Page,P_FirstPOff,curpage
|
|
|
|
moveword #-1,xloc
|
|
moveword P_ContentRect+4,yloc
|
|
sta tmprect
|
|
sta CRect
|
|
addword a,#12,tmprect+4
|
|
sta CRect+4
|
|
|
|
moveword #P_PageWidth-1,xcheck
|
|
; Check the template page
|
|
cmpw xpos,xcheck
|
|
bge Ck2nd
|
|
|
|
lda P_DblPage
|
|
beq DoRight
|
|
moveword P_FirstPOff,pagenum ; pagenum=#0+P_FirstPOff;
|
|
brl ShowPage
|
|
|
|
; Check the second template page
|
|
Ck2nd lda P_DblPage
|
|
beq CheckLeft
|
|
addword #P_PageWidth-2,xloc,xloc
|
|
addword #P_PageWidth-2,xcheck,xcheck
|
|
cmpw xpos,xcheck
|
|
bge CheckLeft
|
|
|
|
DoRight addword #1,P_FirstPOff,pagenum
|
|
brl ShowPage
|
|
|
|
; Check the leftarrow
|
|
CheckLeft
|
|
; first add in the space.
|
|
addword #P_SpaceWidth,xcheck,xcheck
|
|
|
|
cmp xpos
|
|
jge exit ; dead space
|
|
|
|
addword #P_SpaceWidth+P_PageWidth,xloc,xloc
|
|
|
|
cmpw P_PageCount,#P_MaxVisPages+1
|
|
jlt CheckVis
|
|
|
|
addword #P_ControlWidth-2,xloc,xloc
|
|
addword #P_ControlWidth-1,xcheck,xcheck
|
|
cmp xpos
|
|
jlt CheckVis
|
|
|
|
|
|
moveword #1,off
|
|
moveword xloc,tmprect+2
|
|
inc a
|
|
inc a
|
|
sta CRect+6
|
|
addword a,#5*(P_PageWidth-2)-2,tmprect+6
|
|
subword xloc,#P_ControlWidth-2,CRect+2
|
|
|
|
lda P_DblPage
|
|
beq LeftLoop
|
|
|
|
inc tmprect+2
|
|
inc tmprect+2
|
|
|
|
|
|
LeftLoop tool _GetMouse,in=(!pt:l)
|
|
tool _PtInRect,in=(!pt:l,!CRect:l),out=(a:w)
|
|
bne LeftIn
|
|
|
|
; Outside the box
|
|
|
|
lda off
|
|
jne LeftDown ; already off
|
|
|
|
; turn it off
|
|
moveword #1,off
|
|
pushlong #P_L_ArrHollowIcon
|
|
subword xloc,#P_ControlWidth-6,s
|
|
lda yloc
|
|
inc a
|
|
pha
|
|
pushword #modeCOPY
|
|
jsl D_DrawIcon
|
|
|
|
brl LeftDown
|
|
|
|
LeftIn lda off
|
|
beq LeftHere ; already on
|
|
|
|
; turn it on
|
|
stz off
|
|
pushlong #P_L_ArrFilledIcon
|
|
subword xloc,#P_ControlWidth-6,s
|
|
lda yloc
|
|
inc a
|
|
pha
|
|
pushword #modeCOPY
|
|
jsl D_DrawIcon
|
|
|
|
LeftHere addword #2,P_FirstPOff,a
|
|
cmp P_PageStart
|
|
beq LeftDown
|
|
|
|
tool _ScrollRect,in=(!tmprect:l,#P_PageWidth-2:w,#0:w,#0:l)
|
|
|
|
NoExtra
|
|
|
|
dec P_PageStart
|
|
|
|
call P_DrawAPage,in=(xloc:w,yloc:w,P_PageStart:w,#1:w)
|
|
|
|
LeftDown tool _StillDown,in=(#0:w),out=(a:w)
|
|
jne LeftLoop
|
|
|
|
pushlong #P_L_ArrHollowIcon
|
|
subword xloc,#P_ControlWidth-6,s
|
|
lda yloc
|
|
inc a
|
|
pha
|
|
pushword #modeCOPY
|
|
jsl D_DrawIcon
|
|
|
|
brl Exit
|
|
|
|
; Check pages 1-5
|
|
CheckVis cmpw P_PageCount,#P_MaxVisPages
|
|
blt GotCount
|
|
lda #P_MaxVisPages
|
|
GotCount sta count
|
|
moveword P_PageStart,pagenum
|
|
|
|
loop addword #P_PageWidth-2,xcheck,xcheck
|
|
cmp xpos
|
|
jge ShowPage
|
|
|
|
addword #P_PageWidth-2,xloc,xloc
|
|
inc pagenum
|
|
dec count
|
|
bne loop
|
|
|
|
; Check the rightarrow
|
|
CheckRight cmpw P_PageCount,#P_MaxVisPages+1
|
|
jlt exit ; Not really here, I guess
|
|
|
|
addword #4,xloc,xloc
|
|
addword #P_ControlWidth+1,xcheck,xcheck
|
|
cmp xpos
|
|
jlt exit
|
|
|
|
|
|
moveword #1,off
|
|
subword xloc,#4,tmprect+6
|
|
sta CRect+2
|
|
subword a,#5*(P_PageWidth-2)-2,tmprect+2
|
|
moveword xcheck,CRect+6
|
|
|
|
RightLoop tool _GetMouse,in=(!pt:l)
|
|
tool _PtInRect,in=(!pt:l,!CRect:l),out=(a:w)
|
|
bne RightIn
|
|
|
|
lda off
|
|
bne RightDown
|
|
|
|
moveword #1,off
|
|
pushlong #P_R_ArrHollowIcon
|
|
pushword xloc
|
|
lda yloc
|
|
inc a
|
|
pha
|
|
pushword #modeCOPY
|
|
jsl D_DrawIcon
|
|
|
|
bra RightDown
|
|
|
|
RightIn lda off
|
|
beq RightHere
|
|
|
|
stz off
|
|
pushlong #P_R_ArrFilledIcon
|
|
pushword xloc
|
|
lda yloc
|
|
inc a
|
|
pha
|
|
pushword #modeCOPY
|
|
jsl D_DrawIcon
|
|
|
|
RightHere addword P_PageCount,P_FirstPOff,a
|
|
subword a,#4,a
|
|
cmp P_PageStart
|
|
blt RightDown
|
|
|
|
tool _ScrollRect,in=(!tmprect:l,#-P_PageWidth+2:w,#0:w,#0:l)
|
|
|
|
inc P_PageStart
|
|
|
|
subword xloc,#2+P_PageWidth,s
|
|
pushword yloc
|
|
addword P_PageStart,#P_MaxVisPages-1,s
|
|
pushword #1
|
|
jsl P_DrawAPage
|
|
|
|
|
|
RightDown tool _StillDown,in=(#0:w),out=(a:w)
|
|
jne RightLoop
|
|
|
|
pushlong #P_R_ArrHollowIcon
|
|
pushword xloc
|
|
lda yloc
|
|
inc a
|
|
pha
|
|
pushword #modeCOPY
|
|
jsl D_DrawIcon
|
|
|
|
brl Exit
|
|
|
|
|
|
ShowPage
|
|
; don't do anything if the page is current.
|
|
cmpw curpage,pagenum
|
|
cmp pagenum
|
|
jeq exit
|
|
|
|
stz count
|
|
; redraw the old page, if visible.
|
|
|
|
cmpw P_Page,#2
|
|
bge NotTemplate ; curpage is a template
|
|
|
|
moveword #-1,count
|
|
lda P_DblPage
|
|
beq HideOldPage
|
|
|
|
lda P_Page
|
|
beq HideOldPage
|
|
addword #P_PageWidth-2,count,count
|
|
bra HideOldPage
|
|
|
|
NotTemplate cmpw curpage,P_PageStart
|
|
jlt DoNewPage ; curpage is scrolled off left
|
|
|
|
cmpw P_PageCount,#P_MaxVisPages+1
|
|
blt DoOldPage ; all pages are visible.
|
|
|
|
addword #P_ControlWidth-2,count,count
|
|
|
|
addword #P_MaxVisPages-1,P_PageStart,a
|
|
cmp curpage
|
|
blt DoNewPage ; curpage is scrolled off right
|
|
|
|
DoOldPage subword curpage,P_PageStart,a
|
|
|
|
; x now has 0-4
|
|
rcall D_FastMult,in=(a:x,#P_PageWidth-2:y)
|
|
|
|
addword a,#P_PageWidth-1+P_SpaceWidth,a
|
|
addword a,count,count
|
|
|
|
lda P_DblPage
|
|
beq HideOldPage
|
|
addword #P_PageWidth-2,count,count
|
|
|
|
HideOldPage addword #2,count,tmprect+2
|
|
addword a,#P_PageWidth-4,tmprect+6
|
|
tool _ClipRect,in=(!tmprect:l)
|
|
|
|
dec P_Page
|
|
call P_DrawAPage,in=(count:w,yloc:w,curpage:w,#0:w)
|
|
inc P_Page
|
|
|
|
|
|
DoNewPage addword #2,xloc,tmprect+2
|
|
addword a,#P_PageWidth-4,tmprect+6
|
|
tool _ClipRect,in=(!tmprect:l)
|
|
|
|
; do all this stack monkeying w/ P_Page so the page
|
|
; icon changes, then the screen gets refreshed -- it
|
|
; 'looks & feels' better.
|
|
|
|
pushword P_Page ; ...on the stack
|
|
subword pagenum,P_FirstPOff,off ; squirrel away the D_New
|
|
sta P_Page ; page # for later...
|
|
call P_DrawAPage,in=(xloc:w,yloc:w,pagenum:w,#0:w)
|
|
pullword P_Page ; off the stack.
|
|
tool _ClipRect,in=(#P_ContentRect:l) ; so that P_ChangePage
|
|
call P_ChangePage,in=(off:w,#0:w) ; will be happy
|
|
|
|
|
|
Exit return
|
|
ENDP
|
|
END
|
|
|