mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-04 04:31:04 +00:00
1 line
14 KiB
Plaintext
Executable File
1 line
14 KiB
Plaintext
Executable File
|
|
LOAD 'Macros.dump'
|
|
|
|
INCLUDE 'SS.equ'
|
|
|
|
INCLUDE 'Driver.equ'
|
|
INCLUDE 'Heap.aii.i'
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Imported addresses
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
; IMPORT KeyPad
|
|
; IMPORT appleKey
|
|
|
|
IMPORT S_ActiveWindow
|
|
IMPORT S_CellWidth
|
|
IMPORT S_Clear
|
|
IMPORT S_CurBRSelect
|
|
IMPORT S_CurBScrl
|
|
IMPORT S_CurContHt
|
|
IMPORT S_CurContRect
|
|
IMPORT S_CurContWd
|
|
IMPORT S_CurContXpt
|
|
IMPORT S_CurContYpt
|
|
IMPORT S_CurEditFlag
|
|
IMPORT S_CurLEHandle
|
|
IMPORT S_CurMaxTLCell
|
|
IMPORT S_CurRScrl
|
|
IMPORT S_CurTLCell
|
|
IMPORT S_CurTLSelect
|
|
IMPORT S_DoChecks
|
|
IMPORT S_DrawLocation
|
|
IMPORT S_EndEdit
|
|
IMPORT S_GetCellIndex
|
|
IMPORT S_HiliteCells
|
|
IMPORT S_NewEditCell
|
|
IMPORT S_NewLineEdit
|
|
IMPORT S_SetCurFormat
|
|
IMPORT S_SetEdittingMenus
|
|
IMPORT S_SwapIn
|
|
IMPORT S_Thumb
|
|
IMPORT S_WhereCell
|
|
IMPORT S_WhichCell
|
|
|
|
;-----------------------------------------------
|
|
;
|
|
; Forward addresses and entries
|
|
;
|
|
;-----------------------------------------------
|
|
|
|
ENTRY S_DoPageDown
|
|
ENTRY S_DoPageLeft
|
|
ENTRY S_DoPageRight
|
|
ENTRY S_DoPageUp
|
|
ENTRY S_PageOver
|
|
|
|
;-------------------------------------------------------------------------;
|
|
; S_KeyDown ( TaskRecordPtr:l )
|
|
;
|
|
; S_KeyDown is called by the driver to handle a key down event in the
|
|
; currently active window.
|
|
|
|
S_KeyDown PROC EXPORT
|
|
;Using S_CurrentData
|
|
|
|
input TaskRecordPtr:l
|
|
local Key:w,Mods:w,NotArrow:w
|
|
BEGIN +b
|
|
|
|
stz NotArrow
|
|
|
|
Call S_SwapIn,in=(S_ActiveWindow:l)
|
|
Tool _SetPort,in=(S_ActiveWindow:l)
|
|
|
|
lda S_CurEditFlag
|
|
and #S_KeysInactive
|
|
jne Exit
|
|
|
|
ldy #2
|
|
lda [TaskRecordPtr],y
|
|
and #$00FF
|
|
sta Key
|
|
|
|
ldy #14
|
|
lda [TaskRecordPtr],y
|
|
sta Mods
|
|
|
|
CmpLong S_CurTLSelect,S_CurBRSelect
|
|
jne rangeSelected
|
|
|
|
ldx #MaxCellTable
|
|
lda Key
|
|
loop
|
|
cmp CellKeyTable,x
|
|
beq foundkey
|
|
dex
|
|
dex
|
|
bne loop
|
|
|
|
notfound
|
|
lda Mods
|
|
and #appleKey
|
|
jne Exit
|
|
|
|
lda S_CurEditFlag
|
|
and #S_EditingBit
|
|
bne doEdit
|
|
|
|
lda S_CurEditFlag
|
|
ora #S_EditingBit
|
|
sta S_CurEditFlag
|
|
|
|
Tool _LEActivate,in=(S_CurLEHandle:l)
|
|
Tool _LEGetTextLen,in=(S_CurLEHandle:l),out=(x:w)
|
|
Tool _LESetSelect,in=(#0:w,x:w,S_CurLEHandle:l)
|
|
|
|
Call S_SetCurFormat,in=(S_CurTLSelect:l)
|
|
Call S_SetEdittingMenus
|
|
|
|
doEdit
|
|
Tool _LEKey,in=(Key:w,Mods:w,S_CurLEHandle:l)
|
|
bra Exit
|
|
|
|
foundkey
|
|
lda Mods
|
|
and #appleKey
|
|
bne appledown
|
|
|
|
lda S_CurEditFlag
|
|
and #S_EditingBit
|
|
bne editing
|
|
|
|
jsr (CellTable,x)
|
|
bra Exit
|
|
|
|
editing
|
|
jsr (CellEdit,x)
|
|
bra Exit
|
|
|
|
appledown
|
|
jsr (CellApple,x)
|
|
bra Exit
|
|
|
|
rangeSelected
|
|
ldx #MaxRangeTable
|
|
lda Key
|
|
|
|
Rloop
|
|
cmp RangeKeyTable,x
|
|
beq foundRkey
|
|
dex
|
|
dex
|
|
bne Rloop
|
|
|
|
RKeyNotFound
|
|
bra Exit
|
|
|
|
foundRkey
|
|
lda Mods
|
|
and #appleKey
|
|
bne Rappledown
|
|
jsr (RangeTable,x)
|
|
bra Exit
|
|
|
|
Rappledown
|
|
jsr (RangeApple,x)
|
|
|
|
Exit
|
|
RETURN
|
|
|
|
;-----------------------------
|
|
|
|
maxCellTable equ 16
|
|
maxRangeTable equ 10
|
|
|
|
CellKeyTable DC.W 0
|
|
DC.W 8 ; left arrow
|
|
DC.W 21 ; right arrow
|
|
DC.W 10 ; down arrow
|
|
DC.W 11 ; up arrow
|
|
DC.W 13 ; return
|
|
DC.W 9 ; tab
|
|
DC.W 27 ; esc
|
|
DC.W 127 ; delete
|
|
|
|
CellTable DC.W 0
|
|
DC.W cellLeft ; left arrow
|
|
DC.W cellRight ; right arrow
|
|
DC.W cellDown ; down arrow
|
|
DC.W cellUp ; up arrow
|
|
DC.W cellReturn ; return
|
|
DC.W cellTab ; tab
|
|
DC.W cellEsc ; esc
|
|
DC.W rangeDelete ; delete
|
|
|
|
CellEdit DC.W 0
|
|
DC.W enterLE ; left arrow
|
|
DC.W enterLE ; right arrow
|
|
DC.W cellDown ; down arrow
|
|
DC.W cellUp ; up arrow
|
|
DC.W cellReturn ; return
|
|
DC.W cellTab ; tab
|
|
DC.W cellEsc ; esc
|
|
DC.W enterLE ; delete
|
|
|
|
CellApple DC.W 0
|
|
DC.W doPageLeft ; apple-left arrow
|
|
DC.W doPageRight ; apple-right arrow
|
|
DC.W doPageDown ; apple-down arrow
|
|
DC.W doPageUp ; apple-up arrow
|
|
DC.W cellAppleReturn ; apple-return
|
|
DC.W cellAppleTab ; apple-tab
|
|
DC.W cellEsc ; esc
|
|
DC.W nothing ; delete
|
|
|
|
RangeKeyTable
|
|
DC.W 0
|
|
DC.W 8 ; left arrow
|
|
DC.W 21 ; right arrow
|
|
DC.W 10 ; down arrow
|
|
DC.W 11 ; up arrow
|
|
DC.W 127 ; delete
|
|
|
|
RangeTable
|
|
DC.W 0
|
|
DC.W nothing ; left arrow
|
|
DC.W nothing ; right arrow
|
|
DC.W nothing ; down arrow
|
|
DC.W nothing ; up arrow
|
|
DC.W rangeDelete ; delete
|
|
|
|
RangeApple DC.W 0
|
|
DC.W nothing ; apple-left arrow
|
|
DC.W nothing ; apple-right arrow
|
|
DC.W nothing ; apple-down arrow
|
|
DC.W nothing ; apple-up arrow
|
|
DC.W nothing ; apple-delete
|
|
|
|
;---------------------------
|
|
|
|
nothing
|
|
rts
|
|
|
|
;---------------------------
|
|
|
|
enterLE
|
|
Tool _LEKey,in=(Key:w,Mods:w,S_CurLEHandle:l)
|
|
rts
|
|
|
|
;---------------------------
|
|
|
|
cellesc
|
|
lda S_CurEditFlag
|
|
and #S_EditingBit
|
|
beq done
|
|
|
|
Call S_EndEdit,in=(#0:w)
|
|
|
|
lda S_CurEditFlag
|
|
and #-1-S_EditingBit
|
|
sta S_CurEditFlag
|
|
|
|
Call S_DoChecks
|
|
done rts
|
|
|
|
;---------------------------
|
|
|
|
rangeDelete
|
|
Call S_Clear
|
|
rts
|
|
|
|
;---------------------------
|
|
|
|
cellAppleTab
|
|
inc NotArrow
|
|
|
|
cellLeft
|
|
pha
|
|
PushWord S_CurTLSelect
|
|
SubWord S_CurTLSelect+2,#1,3:s
|
|
|
|
bne OKleft
|
|
|
|
lda NotArrow
|
|
beq Invalid
|
|
|
|
MoveWord #$02BE,3:s ; hex for #ZZ
|
|
SubWord 1:s,#1,1:s
|
|
|
|
bne OKleft
|
|
|
|
MoveWord #$270F,1:s ; hex for #9999
|
|
|
|
OKleft
|
|
Call S_NewEditCell,in=(:l)
|
|
brl setLocation
|
|
|
|
;---------------------------
|
|
|
|
cellTab
|
|
inc NotArrow
|
|
|
|
cellRight
|
|
pha
|
|
PushWord S_CurTLSelect
|
|
AddWord S_CurTLSelect+2,#1,3:s
|
|
|
|
cmp #$02BF ; hex for #ZZ + 1
|
|
blt OKright
|
|
|
|
lda NotArrow
|
|
beq Invalid
|
|
|
|
MoveWord #1,3:s
|
|
AddWord 1:s,#1,1:s
|
|
|
|
cmp #$2710 ; hex for 10000
|
|
blt OKright
|
|
|
|
MoveWord #1,1:s
|
|
|
|
OKright
|
|
Call S_NewEditCell,in=(:l)
|
|
brl setLocation
|
|
|
|
;---------------------------
|
|
|
|
Invalid
|
|
pla
|
|
pla
|
|
rts
|
|
|
|
;---------------------------
|
|
cellAppleReturn
|
|
lda Mods
|
|
and #KeyPad
|
|
bne cellEnter
|
|
|
|
inc NotArrow
|
|
|
|
cellUp
|
|
PushWord S_CurTLSelect+2
|
|
SubWord S_CurTLSelect,#1,s
|
|
|
|
bne OKup
|
|
|
|
lda NotArrow
|
|
beq Invalid
|
|
|
|
MoveWord #$270F,1:s ; hex for #9999
|
|
SubWord 3:s,#1,3:s
|
|
|
|
bne OKup
|
|
|
|
MoveWord #$02BE,3:s ; hex for #ZZ
|
|
|
|
OKup
|
|
Call S_NewEditCell,in=(:l)
|
|
brl setLocation
|
|
|
|
;---------------------------
|
|
|
|
cellReturn
|
|
lda Mods
|
|
and #KeyPad
|
|
bne cellEnter
|
|
|
|
inc NotArrow
|
|
|
|
cellDown
|
|
PushWord S_CurTLSelect+2
|
|
AddWord S_CurTLSelect,#1,s
|
|
|
|
cmp #$2710 ; hex for 10000
|
|
blt OKdown
|
|
|
|
lda NotArrow
|
|
beq Invalid
|
|
|
|
MoveWord #1,1:s
|
|
AddWord 3:s,#1,3:s
|
|
|
|
cmp #$02BF ; hex for #ZZ + 1
|
|
blt OKdown
|
|
|
|
MoveWord #1,3:s
|
|
|
|
OKdown
|
|
Call S_NewEditCell,in=(:l)
|
|
bra setLocation
|
|
|
|
;---------------------------
|
|
|
|
cellEnter
|
|
Call S_NewEditCell,in=(S_CurTLSelect:l)
|
|
bra setLocation
|
|
|
|
;---------------------------
|
|
|
|
doPageLeft
|
|
Call S_PageOver,in=(#S_DoPageLeft:l)
|
|
bra setLocation
|
|
|
|
doPageRight
|
|
Call S_PageOver,in=(#S_DoPageRight:l)
|
|
bra setLocation
|
|
|
|
doPageUp
|
|
Call S_PageOver,in=(#S_DoPageUp:l)
|
|
bra setLocation
|
|
|
|
doPageDown
|
|
Call S_PageOver,in=(#S_DoPageDown:l)
|
|
|
|
setLocation
|
|
Call S_DoChecks
|
|
Call S_DrawLocation
|
|
rts
|
|
|
|
ENDP
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; S_PageOver( ShiftRoutine:l )
|
|
;
|
|
; Direction = $0000FFFF means up
|
|
; $FFFF0000 left
|
|
; $00000001 down
|
|
; $00010000 right
|
|
|
|
S_PageOver PROC EXPORT
|
|
;Using S_CurrentData
|
|
|
|
input ShiftRoutine:l
|
|
local NewCell:l
|
|
local Value:w,Width:w
|
|
local OldClipRgn:l,Col:w
|
|
local ErrorFlag:w
|
|
BEGIN
|
|
|
|
; The old Cell needs to be accepted, if edited. ;
|
|
|
|
lda S_CurEditFlag
|
|
and #S_EditingBit
|
|
beq doShift
|
|
|
|
Call S_EndEdit,in=(#-1:w),err=ErrorFlag
|
|
jcs Exit
|
|
|
|
clrEdit
|
|
lda S_CurEditFlag
|
|
and #-1-S_EditingBit
|
|
sta S_CurEditFlag
|
|
|
|
; Bump the window until the New cell is completely in view ;
|
|
|
|
doShift
|
|
MoveWord ShiftRoutine,CallIt+1
|
|
MoveWord ShiftRoutine+1,CallIt+2
|
|
|
|
SpaceLong
|
|
|
|
callIt
|
|
Call *
|
|
|
|
PullLong NewCell
|
|
|
|
CmpLong NewCell,S_CurTLSelect
|
|
jeq Exit
|
|
|
|
; The Cell is completely in view ;
|
|
|
|
Tool _NewRgn,out=(:l)
|
|
MoveLong 1:s,OldClipRgn
|
|
Tool _GetClip,in=(:l)
|
|
Tool _ClipRect,in=(#S_CurContRect:l)
|
|
|
|
Call S_HiliteCells
|
|
|
|
MoveWord NewCell,S_CurTLSelect
|
|
sta S_CurBRSelect
|
|
|
|
MoveWord NewCell+2,S_CurTLSelect+2
|
|
sta S_CurBRSelect+2
|
|
|
|
Call S_HiliteCells
|
|
|
|
Tool _SetClip,in=(OldClipRgn:l)
|
|
Tool _DisposeRgn,in=(OldClipRgn:l)
|
|
|
|
; The New cell needs to be displayed in the LE field. ;
|
|
|
|
in NewCell:l
|
|
out :l
|
|
XCall S_GetCellIndex
|
|
|
|
Call S_NewLineEdit,in=(:l)
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
;------------------------------------------------------------------------
|
|
;
|
|
;
|
|
|
|
S_DoPageLeft PROC EXPORT
|
|
;Using S_CurrentData
|
|
|
|
output NewCell:l
|
|
local WorkWidth:w,dh:w
|
|
BEGIN
|
|
|
|
MoveLong S_CurTLSelect,NewCell
|
|
|
|
Call S_WhereCell,in=(NewCell:l),out=(y:w,y:w,a:w,y:w)
|
|
|
|
tay
|
|
beq leftSide1
|
|
|
|
cmp S_CurContXpt
|
|
beq leftSidePage
|
|
|
|
cmp S_CurContWd
|
|
bge leftSide1
|
|
|
|
leftSideHere
|
|
MoveWord S_CurTLCell+2,NewCell+2
|
|
bra doLeftSide
|
|
|
|
leftSide1
|
|
SubWord S_CurTLSelect+2,#1,NewCell+2
|
|
bne doLeftSide
|
|
|
|
MoveWord #1,NewCell+2
|
|
bra doLeftSide
|
|
|
|
leftSidePage
|
|
SubWord S_CurContWd,S_CurContXpt,WorkWidth
|
|
|
|
stz dh
|
|
bra cond
|
|
|
|
loop
|
|
Call S_CellWidth,in=(NewCell+2:w),out=(a:w)
|
|
AddWord a,dh,a
|
|
cmp WorkWidth
|
|
bge full
|
|
sta dh
|
|
|
|
cond
|
|
dec NewCell+2
|
|
bne loop
|
|
|
|
inc NewCell+2
|
|
lda dh
|
|
beq Exit
|
|
bra doLeftSide
|
|
|
|
full
|
|
inc NewCell+2
|
|
lda dh
|
|
bne doLeftSide
|
|
|
|
dec NewCell+2
|
|
|
|
doLeftSide
|
|
CmpWord S_CurMaxTLCell+2,NewCell+2
|
|
bge setThumb
|
|
|
|
sta NewCell+2
|
|
|
|
setThumb
|
|
lda NewCell+2
|
|
dec a
|
|
|
|
Tool _SetCtlValue,in=(a:w,S_CurBScrl:l)
|
|
Call S_Thumb,in=(S_CurBScrl:l)
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
;------------------------------------------------------------------------
|
|
;
|
|
;
|
|
|
|
S_DoPageRight PROC EXPORT
|
|
;Using S_CurrentData
|
|
|
|
output NewCell:l
|
|
local WorkWidth:w,dh:w,NewTLCol:l
|
|
BEGIN
|
|
|
|
MoveLong S_CurTLSelect,NewCell
|
|
SubWord S_CurContWd,S_CurContXpt,WorkWidth
|
|
stz dh
|
|
|
|
Call S_WhereCell,in=(NewCell:l),out=(x:w,y:w,a:w,y:w)
|
|
|
|
tay
|
|
beq rightSide1
|
|
|
|
cmp S_CurContWd
|
|
bge rightSide1
|
|
|
|
cpx S_CurContWd
|
|
bge rightSidePage
|
|
|
|
rightSideHere
|
|
in S_CurContWd:w,S_CurContHt:w
|
|
out NewCell+2:w,a:w,x:w,y:w
|
|
XCall S_WhichCell
|
|
|
|
cmp #702+1
|
|
jlt Exit
|
|
|
|
MoveWord #702,NewCell+2
|
|
brl Exit
|
|
|
|
rightSide1
|
|
MoveWord NewCell+2,a
|
|
inc a
|
|
sta NewTLCol
|
|
sta NewCell+2
|
|
|
|
cmp #702+1
|
|
blt start1
|
|
|
|
MoveWord S_CurMaxTLCell+2,NewTLCol
|
|
MoveWord #702,NewCell+2
|
|
brl gotTLCol
|
|
|
|
loop1
|
|
sta dh
|
|
|
|
start1
|
|
dec NewTLCol
|
|
beq atZero
|
|
|
|
Call S_CellWidth,in=(NewTLCol:w),out=(a:w)
|
|
AddWord a,dh,a
|
|
cmp WorkWidth
|
|
blt loop1
|
|
|
|
inc NewTLCol
|
|
brl gotTLCol
|
|
|
|
atZero
|
|
inc NewTLCol
|
|
bra start2
|
|
|
|
loop2
|
|
sta dh
|
|
inc NewCell+2
|
|
|
|
start2
|
|
Call S_CellWidth,in=(NewCell+2:w),out=(a:w)
|
|
AddWord a,dh,a
|
|
cmp WorkWidth
|
|
blt loop2
|
|
|
|
bra gotTLCol
|
|
|
|
rightSidePage
|
|
MoveWord S_CurTLSelect+2,NewTLCol
|
|
cmp S_CurMaxTLCell+2
|
|
blt pageCond
|
|
|
|
MoveWord S_CurMaxTLCell+2,NewTLCol
|
|
bra pageCond
|
|
|
|
pageLoop
|
|
inc NewCell+2
|
|
|
|
Call S_CellWidth,in=(NewCell+2:w),out=(a:w)
|
|
AddWord a,dh,a
|
|
cmp WorkWidth
|
|
bge full
|
|
sta dh
|
|
|
|
pageCond
|
|
CmpWord NewCell+2,#702
|
|
bne pageLoop
|
|
|
|
bra gotTLCol
|
|
|
|
full
|
|
dec NewCell+2
|
|
lda dh
|
|
bne gotTLCol
|
|
|
|
inc NewCell+2
|
|
|
|
gotTLCol
|
|
lda NewTLCol
|
|
dec a
|
|
|
|
Tool _SetCtlValue,in=(a:w,S_CurBScrl:l)
|
|
Call S_Thumb,in=(S_CurBScrl:l)
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
;------------------------------------------------------------------------
|
|
;
|
|
;
|
|
|
|
S_DoPageUp PROC EXPORT
|
|
;Using S_CurrentData
|
|
|
|
output NewCell:l
|
|
local WorkHeight:w,dv:w
|
|
BEGIN
|
|
|
|
MoveLong S_CurTLSelect,NewCell
|
|
|
|
Call S_WhereCell,in=(NewCell:l),out=(y:w,y:w,y:w,a:w)
|
|
|
|
tax
|
|
beq up1
|
|
|
|
cmp S_CurContYpt
|
|
beq upPage
|
|
|
|
cmp S_CurContHt
|
|
bge up1
|
|
|
|
upHere
|
|
MoveWord S_CurTLCell,NewCell
|
|
bra doUp
|
|
|
|
up1
|
|
SubWord S_CurTLSelect,#1,NewCell
|
|
bne doUp
|
|
|
|
MoveWord #1,NewCell
|
|
bra doUp
|
|
|
|
upPage
|
|
SubWord S_CurContHt,S_CurContYpt,WorkHeight
|
|
|
|
stz dv
|
|
bra cond
|
|
|
|
loop
|
|
AddWord #S_RowHeight,dv,a
|
|
cmp WorkHeight
|
|
bge full
|
|
sta dv
|
|
|
|
cond
|
|
dec NewCell
|
|
bne loop
|
|
|
|
inc NewCell
|
|
lda dv
|
|
beq Exit
|
|
bra doUp
|
|
|
|
full
|
|
inc NewCell
|
|
lda dv
|
|
bne doUp
|
|
|
|
dec NewCell
|
|
|
|
doUp
|
|
CmpWord S_CurMaxTLCell,NewCell
|
|
bge setThumb
|
|
|
|
sta NewCell
|
|
|
|
setThumb
|
|
lda NewCell
|
|
dec a
|
|
|
|
Tool _SetCtlValue,in=(a:w,S_CurRScrl:l)
|
|
Call S_Thumb,in=(S_CurRScrl:l)
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
|
|
;------------------------------------------------------------------------
|
|
;
|
|
;
|
|
|
|
S_DoPageDown PROC EXPORT
|
|
;Using S_CurrentData
|
|
|
|
output NewCell:l
|
|
local WorkHeight:w,dv:w,NewTLRow:l
|
|
BEGIN
|
|
|
|
MoveLong S_CurTLSelect,NewCell
|
|
SubWord S_CurContHt,S_CurContYpt,WorkHeight
|
|
stz dv
|
|
|
|
Call S_WhereCell,in=(NewCell:l),out=(y:w,x:w,y:w,a:w)
|
|
|
|
tay
|
|
beq down1
|
|
|
|
cmp S_CurContHt
|
|
bge down1
|
|
|
|
cpx S_CurContHt
|
|
bge downPage
|
|
|
|
downHere
|
|
in S_CurContWd:w,S_CurContHt:w
|
|
out x:w,NewCell:w,x:w,y:w
|
|
XCall S_WhichCell
|
|
|
|
cmp #9999+1
|
|
jlt Exit
|
|
|
|
MoveWord #9999,NewCell
|
|
brl Exit
|
|
|
|
down1
|
|
MoveWord NewCell,a
|
|
inc a
|
|
sta NewTLRow
|
|
sta NewCell
|
|
|
|
cmp #9999+1
|
|
blt start1
|
|
|
|
MoveWord S_CurMaxTLCell,NewTLRow
|
|
MoveWord #9999,NewCell
|
|
brl gotTLRow
|
|
|
|
loop1
|
|
sta dv
|
|
|
|
start1
|
|
dec NewTLRow
|
|
beq atZero
|
|
|
|
AddWord #S_RowHeight,dv,a
|
|
cmp WorkHeight
|
|
blt loop1
|
|
|
|
inc NewTLRow
|
|
brl gotTLRow
|
|
|
|
atZero
|
|
inc NewTLRow
|
|
bra start2
|
|
|
|
loop2
|
|
sta dv
|
|
inc NewCell
|
|
|
|
start2
|
|
AddWord #S_RowHeight,dv,a
|
|
cmp WorkHeight
|
|
blt loop2
|
|
|
|
bra gotTLRow
|
|
|
|
downPage
|
|
MoveWord S_CurTLSelect,NewTLRow
|
|
cmp S_CurMaxTLCell
|
|
blt pageCond
|
|
|
|
MoveWord S_CurMaxTLCell,NewTLRow
|
|
bra pageCond
|
|
|
|
pageLoop
|
|
inc NewCell
|
|
|
|
AddWord #S_RowHeight,dv,a
|
|
cmp WorkHeight
|
|
bge full
|
|
sta dv
|
|
|
|
pageCond
|
|
CmpWord NewCell,#9999
|
|
bne pageLoop
|
|
|
|
bra gotTLRow
|
|
|
|
full
|
|
dec NewCell
|
|
lda dv
|
|
bne gotTLRow
|
|
|
|
inc NewCell
|
|
|
|
gotTLRow
|
|
lda NewTLRow
|
|
dec a
|
|
|
|
Tool _SetCtlValue,in=(a:w,S_CurRScrl:l)
|
|
Call S_Thumb,in=(S_CurRScrl:l)
|
|
|
|
Exit
|
|
RETURN
|
|
ENDP
|
|
END
|
|
|