A2osX/LIB/LIBTUI.S.TBOX.txt

1331 lines
20 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* TBOX.New hParent,X1,Y1,W,H,pBuf,BufSize,F 10
*--------------------------------------
TBOX.New lda #S.OBJ.T.TBOX
jsr OBJ.Create
bcs .9
>PULLA
ldy #S.OBJ.F
sta (ZPObjPtr),y
jsr OBJ.PullBuf
jsr OBJ.PullHW
jsr OBJ.PullY1X1hParent
jsr CONT.Insert
bcs .99
lda hObj
* clc
rts
.9 >POP 10
.99 rts
*--------------------------------------
TBOX.Run ldy #S.OBJ.S
lda (ZPObjPtr),y
bpl TBOX.RUN.Ignore
ldy #S.OBJ.F
lda (ZPObjPtr),y
and #S.OBJ.F.bEdit
bne TBOX.Run.RW
lda (pStack) Event
cmp #C.SPACE
beq .1
cmp #27
bcs TBOX.RUN.Ignore
asl
tax
jmp (J.TBOX.RUN.RO,x)
.1 lda #EV.HL.PRESSED
clc
rts
*--------------------------------------
TBOX.Run.RW lda (pStack) Event
cmp #C.SPACE
bcs .1
cmp #27
bcs TBOX.RUN.Ignore
asl
tax
jmp (J.TBOX.RUN.RW,x)
.1 cmp #C.DEL
beq .2
jsr TBOX.GetBuf
jsr TBOX.ToBuf1
bcs TBOX.RUN.Ignore Buffer full
jsr TBOX.RUN.FS1
bra .3
.2 jsr TBOX.GetBuf
jsr TBOX.Delete1
bcs TBOX.RUN.Ignore Buffer Empty
.3 bit bRepaintAll
bmi .4
jsr OBJ.CurUpdPos
jmp TBOX.DrawCurLine
.4 jmp TBOX.DrawAllLines
*--------------------------------------
TBOX.RUN.Ignore lda #0
sec
rts
*--------------------------------------
TBOX.RUN.PrevLink
jsr OBJ.GetpBufPtr1
ldy #S.TBOX.SelBegin
jsr TBOX.RUN.GetSel -> TempC
.1 ldx #0
.2 jsr TBOX.GetCharBW
beq TBOX.RUN.PrevLink.9
cmp #'['
bne .1
cpx #'['
beq .3
tax
bra .2
.3 lda ZPPtr1
sta TempI
lda ZPPtr1+1
sta TempI+1
jsr TBOX.RUN.CheckLink
bcs .1
rts
TBOX.RUN.PrevLink.9
lda #0
sec
rts
*--------------------------------------
TBOX.RUN.NextLink
jsr OBJ.GetpBufPtr1
ldy #S.TBOX.SelEnd
jsr TBOX.RUN.GetSel -> TempC
.1 ldx #0
.2 jsr TBOX.GetCharFW
beq TBOX.RUN.PrevLink.9
cmp #'['
bne .1
cpx #'['
beq .3
tax
bra .2
.3 lda ZPPtr1
sec
sbc #2
sta TempI
lda ZPPtr1+1
sbc #0
sta TempI+1
lda TempC
sec
sbc #2
sta TempC
lda TempC+1
sbc #0
sta TempC+1
jsr TBOX.RUN.CheckLink
bcc .99
.9 lda #0
sec
.99 rts
*--------------------------------------
TBOX.RUN.GetSel lda (ZPObjPtr),y
sta TempC
clc
adc ZPPtr1
sta ZPPtr1
iny
lda (ZPObjPtr),y
sta TempC+1
adc ZPPtr1+1
sta ZPPtr1+1
rts
*--------------------------------------
TBOX.RUN.CheckLink
ldy #S.TBOX.BufPtr
jsr TBOX.SetTempCAtY
ldy #S.TBOX.SelBegin
jsr TBOX.SetTempCAtY
ldx #0
.1 jsr TBOX.GetCharFW
beq .9
cmp #C.CR
beq .9
iny
cmp #']'
bne .1
cpx #']'
beq .2
tax
bra .1
.2 ldy #S.TBOX.SelEnd
jsr TBOX.SetTempCAtY
jsr OBJ.GetpVarPtr2
ldy #$ff SKIP "[[TEXT]"
.3 iny
lda (TempI),y
cmp #']'
bne .3
tya
sec
adc TempI
sta TempI
bcc .4
inc TempI+1
.4 ldy #$ff
.5 iny
lda (TempI),y
sta (ZPPtr2),y
cmp #']'
bne .5
lda #0
sta (ZPPtr2),y
* jsr TBOX.SetViewPort
* bit bRepaintAll
* bmi .6
* jsr OBJ.CurUpdPos
* jsr TBOX.DrawCurLine
* bra .60
.6 jsr TBOX.DrawAllLines
.60 lda #EV.HL.SELECTED
clc
rts
.9 sec
rts
*--------------------------------------
TBOX.RUN.GetLink
lda #EV.HL.PRESSED
clc
rts
lda #0
sec
rts
*--------------------------------------
TBOX.RUN.ScrollUp
jsr TBOX.GetBuf
ldy #S.OBJ.InnerH
lda (ZPObjPtr),y
clc
ldy #S.TBOX.VScroll
adc (ZPObjPtr),y
pha
iny #S.TBOX.VScroll+1
lda (ZPObjPtr),y
adc #0
plx
jsr TBOX.GetLineAX
bcs .8
ldy #S.TBOX.VScroll
jsr OBJ.IncWordAtY
jmp TBOX.DrawAllLines
.8 clc
rts
*--------------------------------------
TBOX.RUN.ScrollDown
jsr TBOX.GetBuf
ldy #S.TBOX.VScroll+1
lda (ZPObjPtr),y
dey
ora (ZPObjPtr),y
beq .8
jsr OBJ.DecWordAtY
ldy #S.TBOX.DocY
jsr OBJ.DecWordAtY
jmp TBOX.DrawAllLines
.8 clc
rts
*--------------------------------------
TBOX.RUN.SelBegin
ldy #S.TBOX.BufPtr
lda (ZPObjPtr),y
tax
iny
lda (ZPObjPtr),y
ldy #S.TBOX.SelBegin+1
sta (ZPObjPtr),y
txa
dey
sta (ZPObjPtr),y
jmp TBOX.DrawAllLines
*--------------------------------------
TBOX.RUN.SelEnd ldy #S.TBOX.BufPtr
lda (ZPObjPtr),y
tax
iny
lda (ZPObjPtr),y
ldy #S.TBOX.SelEnd+1
sta (ZPObjPtr),y
txa
dey
sta (ZPObjPtr),y
jmp TBOX.DrawAllLines
*--------------------------------------
TBOX.RUN.BS ldy #S.TBOX.BufPtr+1
lda (ZPObjPtr),y
dey
ora (ZPObjPtr),y
beq .9
jsr OBJ.DecWordAtY
jsr TBOX.GetBuf
lda (ZPPtr2)
cmp #C.CR
beq .2
ldy #S.TBOX.DocX
jsr OBJ.DecWordAtY
jmp TBOX.CheckViewPort
.2 ldy #S.TBOX.DocY
jsr OBJ.DecWordAtY
jmp TBOX.RUN.EOL
.9 sec
rts
*--------------------------------------
TBOX.RUN.LF jsr TBOX.GetBuf
TBOX.RUN.LF1 jsr TBOX.GetDocYInAX
inx
bne .1
inc
.1 jsr TBOX.GetLineAX
bcs TBOX.RUN.VT.8
ldy #S.TBOX.DocY
jsr OBJ.IncWordAtY
bra TBOX.RUN.VT1
*--------------------------------------
TBOX.RUN.VT jsr TBOX.GetBuf
ldy #S.TBOX.DocY+1
lda (ZPObjPtr),y
dey
ora (ZPObjPtr),y
beq TBOX.RUN.VT.8
jsr OBJ.DecWordAtY
TBOX.RUN.VT1 jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
jsr TBOX.GetLineLenInAXC
sta TempW
stx TempW+1
ldy #S.TBOX.DocX
cmp (ZPObjPtr),y
txa
iny
sbc (ZPObjPtr),y
bcs .1
lda TempW+1
sta (ZPObjPtr),y
dey
lda TempW
sta (ZPObjPtr),y
.1 ldy #S.TBOX.DocX
lda TempC
clc
adc (ZPObjPtr),y
tax
iny
lda TempC+1
adc (ZPObjPtr),y
ldy #S.TBOX.BufPtr+1
sta (ZPObjPtr),y
dey
txa
sta (ZPObjPtr),y
jmp TBOX.CheckViewPort
TBOX.RUN.VT.8 clc
rts
*--------------------------------------
TBOX.RUN.FS jsr TBOX.GetBuf
TBOX.RUN.FS1 lda (ZPPtr2)
beq .8
tax
ldy #S.TBOX.BufPtr
jsr OBJ.IncWordAtY
ldy #S.TBOX.DocX
cpx #C.CR
bne .7
.1 jsr OBJ.ZeroWordAtY
ldy #S.TBOX.DocY
.7 jsr OBJ.IncWordAtY
jmp TBOX.CheckViewPort
.8 clc
rts
*--------------------------------------
TBOX.RUN.SOL ldy #S.TBOX.DocX
jsr OBJ.ZeroWordAtY
jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
ldy #S.TBOX.BufPtr
jsr TBOX.SetTempCAtY BufPtr at SOL
jmp TBOX.CheckViewPort
*--------------------------------------
TBOX.RUN.EOL jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
jsr TBOX.GetLineLenInAXC
pha
ldy #S.TBOX.BufPtr
clc
adc TempC BufPtr at SOL+LineLen
sta (ZPObjPtr),y
iny
txa
adc TempC+1
sta (ZPObjPtr),y
pla
ldy #S.TBOX.DocX
sta (ZPObjPtr),y
iny
txa
sta (ZPObjPtr),y
jmp TBOX.CheckViewPort
*--------------------------------------
TBOX.RUN.CR jsr TBOX.GetBuf
jsr TBOX.ToBuf1
bcs .8 Buffer full
ldy #S.TBOX.DocX
jsr OBJ.ZeroWordAtY
jsr TBOX.RUN.LF1
jsr OBJ.CurUpdPos
bit bRepaintAll
bmi .1
jsr TBOX.DrawBottom
.1 jmp TBOX.DrawAllLines
.8 clc
rts
*--------------------------------------
TBOX.RUN.PGUP
*--------------------------------------
TBOX.RUN.PGDN lda #0
sec
rts
*--------------------------------------
TBOX.RUN.QUIT lda #3 User Interrupt
sec
rts
*--------------------------------------
TBOX.RUN.Home ldy #S.TBOX.DocX
jsr OBJ.ZeroWordAtY
ldy #S.TBOX.DocY
jsr OBJ.ZeroWordAtY
ldy #S.TBOX.BufPtr
jsr OBJ.ZeroWordAtY
jmp TBOX.CheckViewPort
*--------------------------------------
TBOX.RUN.EraseCL
jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
jsr TBOX.GetLineLenInAXC
jsr TBOX.DeleteAXC
jmp TBOX.RUN.VT1
*--------------------------------------
TBOX.RUN.EOF lda #$ff
tax
jsr TBOX.GetLineAX
ldy #S.TBOX.DocY
lda TempI
sta (ZPObjPtr),y
tax
lda TempI+1
iny
sta (ZPObjPtr),y
jsr TBOX.GetLineAX
jsr TBOX.GetLineLenInAXC
ldy #S.TBOX.DocX
sta (ZPObjPtr),y
iny
txa
sta (ZPObjPtr),y
ldy #S.TBOX.BufCnt+1
lda (ZPObjPtr),y
tax
dey
lda (ZPObjPtr),y
ldy #S.TBOX.BufPtr
sta (ZPObjPtr),y
iny
txa
sta (ZPObjPtr),y
jmp TBOX.CheckViewPort
*--------------------------------------
TBOX.DrawAllLines
ldy #1 hObj
lda (pStack),y
>PUSHA
jsr OBJ.Draw.Body
inc pStack
rts
*--------------------------------------
TBOX.DrawBottom ldy #S.OBJ.InnerY
lda (ZPObjPtr),y
clc
ldy #S.OBJ.CurY
adc (ZPObjPtr),y
>PUSHA Start
ldy #S.OBJ.InnerH
lda (ZPObjPtr),y
sec
ldy #S.OBJ.CurY
sbc (ZPObjPtr),y
>PUSHA Count
ldy #S.OBJ.CurY
lda (ZPObjPtr),y Relative Y
>PUSHA
jmp OBJ.Draw.Lines
*--------------------------------------
TBOX.DrawCurLine
ldy #S.OBJ.InnerY
lda (ZPObjPtr),y
clc
ldy #S.OBJ.CurY
adc (ZPObjPtr),y
>PUSHA Start
lda #1
>PUSHA Count
ldy #S.OBJ.CurY
lda (ZPObjPtr),y Relative Y
>PUSHA
jmp OBJ.Draw.Lines
*--------------------------------------
TBOX.Draw ldy #S.TBOX.VScroll
lda (ZPObjPtr),y
clc
adc (pStack) Relative Y
tax
iny
lda (ZPObjPtr),y
adc #0
jsr TBOX.GetLineAX
bcs .5
ldy #S.TBOX.HScroll
lda (ZPObjPtr),y
beq .12
tax
.1 jsr TBOX.GetLineChar
beq .5
cmp #C.CR
beq .5
dex
bne .1
.12 ldy #S.OBJ.InnerW
lda (ZPObjPtr),y
tax
stz bTemp1 reset selection
stz bTemp2 reset Hyperlink
.2 jsr TBOX.CheckSel
jsr TBOX.GetLineChar
beq .3
cmp #C.CR
beq .3
jsr LB.COut
dex
bne .2
.3 txa
bne .6
clc
rts
.5 ldy #S.OBJ.InnerW
lda (ZPObjPtr),y
tax
.6 jsr TBOX.ResetSel
lda #C.SPACE
.7 jsr LB.COut
dex
bne .7
.8 clc
rts
*--------------------------------------
TBOX.Activate
*--------------------------------------
TBOX.Deactivate clc
rts
*--------------------------------------
TBOX.SetProp jsr OBJ.SetProp
bcs .9
cpy #S.OBJ.pBuf
bne .8
ldy #S.TBOX.DocX
lda #0
.1 sta (ZPObjPtr),y
iny
cpy #S.TBOX.BufPtr+2
bcc .1
jsr OBJ.GetpBufPtr1
ldx #0
ldy #0
.2 lda (ZPPtr1),y
beq .3
iny
bne .2
inc ZPPtr1+1
inx
bra .2
.3 tya
ldy #S.TBOX.BufCnt
sta (ZPObjPtr),y
iny
txa
sta (ZPObjPtr),y
jmp OBJ.Draw.Body.I
.8 clc
.9 rts
*--------------------------------------
TBOX.GetBuf jsr OBJ.GetpBufPtr1
ldy #S.TBOX.BufPtr
lda ZPPtr1
clc
adc (ZPObjPtr),y
sta ZPPtr2
lda ZPPtr1+1
iny
adc (ZPObjPtr),y
sta ZPPtr2+1
rts
*--------------------------------------
TBOX.GetDocYInAX
ldy #S.TBOX.DocY
lda (ZPObjPtr),y
tax
iny
lda (ZPObjPtr),y
rts
*--------------------------------------
TBOX.GetLineAX stx TempW
sta TempW+1 Req Line Num
jsr OBJ.GetpBufPtr1
stz TempI Current Line Num
stz TempI+1
stz TempC Buffer Ofs
stz TempC+1
.1 lda TempI
eor TempW
bne .2
lda TempI+1
eor TempW+1
beq .8
.2 lda (ZPPtr1)
beq .9
jsr TBOX.GetLineLenInAXC
bcc .9
* sec
pha
adc TempC
sta TempC
txa
adc TempC+1
sta TempC+1
sec
pla
adc ZPPtr1
sta ZPPtr1
txa
adc ZPPtr1+1
sta ZPPtr1+1
inc TempI
bne .1
inc TempI+1
bra .1
.9 sec
rts
.8 clc
rts
*--------------------------------------
TBOX.SetLineAtDocX
ldy #S.TBOX.DocX
lda (ZPObjPtr),y
clc
adc ZPPtr1
sta ZPPtr1
iny
lda (ZPObjPtr),y
adc ZPPtr1+1
sta ZPPtr1+1
* clc
dey #S.TBOX.DocX
lda (ZPObjPtr),y
adc TempC
sta TempC
iny
lda (ZPObjPtr),y
adc TempC+1
sta TempC+1
rts
*--------------------------------------
* TempC charPos
*--------------------------------------
TBOX.CheckSel ldy #S.TBOX.SelBegin
jsr TBOX.CmpTempCAtY
bcc TBOX.ResetSel
iny #S.TBOX.SelEnd
jsr TBOX.CmpTempCAtY
bcs TBOX.ResetSel
*--------------------------------------
TBOX.SetSel bit bTemp1
bmi .8
phx
ldx #SEQ.INVERSE-SEQS
jsr LB.SeqOut
plx
dec bTemp1
.8 rts
*--------------------------------------
TBOX.ResetSel bit bTemp1
bpl .8
phx
ldx #SEQ.NORMAL-SEQS
jsr LB.SeqOut
plx
stz bTemp1
.8 rts
*--------------------------------------
* hyperlinks: [[text]targetUrl#targetHtag]
* htags: [#htag]
*--------------------------------------
TBOX.GetLineChar
ldy #S.OBJ.F
lda (ZPObjPtr),y
and #S.OBJ.F.bEdit
bne TBOX.GetCharFW
bit bTemp2
bmi .3
jsr TBOX.GetCharFW
beq .8
cmp #'['
bne .8 NZ
cmp (ZPPtr1) "[["
bne .1
dec bTemp2
bra TBOX.GetCharFW skip "[["
.1 lda (ZPPtr1) "[#" ?
cmp #'#'
beq .2
lda #'[' NZ
rts
.2 jsr TBOX.GetCharFW skip "[#"
beq .8
cmp #']' skip "htag]"
bne .2
bra TBOX.GetCharFW skip "]"
.3 jsr TBOX.GetCharFW
beq .8
cmp #']' "text"
bne .8 NZ
stz bTemp2
.4 jsr TBOX.GetCharFW skip "link]"
beq .8
cmp #']'
bne .4
lda #']' NZ
.8 rts
*--------------------------------------
TBOX.GetCharFW lda (ZPPtr1)
beq .9
inc ZPPtr1
bne .1
inc ZPPtr1+1
.1 inc TempC
bne .9
inc TempC+1 NZ
.9 rts
*--------------------------------------
TBOX.GetCharBW lda TempC
ora TempC+1
beq .9
lda ZPPtr1
bne .1
dec ZPPtr1+1
.1 dec ZPPtr1
lda TempC
bne .2
dec TempC+1
.2 dec TempC
lda (ZPPtr1)
.9 rts
*--------------------------------------
TBOX.CmpTempCAtY
lda TempC
cmp (ZPObjPtr),y
lda TempC+1
iny
sbc (ZPObjPtr),y
rts
*--------------------------------------
TBOX.SetTempCAtY
lda TempC
sta (ZPObjPtr),y
lda TempC+1
iny
sta (ZPObjPtr),y
rts
*--------------------------------------
TBOX.GetLineLenInAXC
lda ZPPtr1+1
pha
clc
ldy #0
ldx #0
.1 lda (ZPPtr1),y
beq .8
eor #C.CR
beq .7
iny
bne .1
inx
bra .1
.7 sec to skip CR
.8 pla
sta ZPPtr1+1
tya AX = len, CS if CR ended
rts
*--------------------------------------
TBOX.ToBuf1 ldy #S.TBOX.BufCnt
lda (ZPObjPtr),y
ldy #S.OBJ.BufSize
cmp (ZPObjPtr),y
ldy #S.TBOX.BufCnt+1
lda (ZPObjPtr),y
ldy #S.OBJ.BufSize+1
sbc (ZPObjPtr),y
bcs .9
dey ldy #S.TBOX.BufCnt
jsr OBJ.IncWordAtY
jsr TBOX.GetBuf
jsr TBOX.Insert1
lda (pStack)
sta (ZPPtr2)
.8 clc
.9 rts
*--------------------------------------
TBOX.Insert1 lda #1
ldx #0
TBOX.InsertAX clc
adc ZPPtr2
sta ZPPtr3
txa
adc ZPPtr2+1
sta ZPPtr3+1
ldy #0
ldx #0
.1 lda (ZPPtr2),y
beq .4
iny
bne .1
inx
inc ZPPtr2+1
inc ZPPtr3+1
bra .1
.2 dex
.3 dey
lda (ZPPtr2),y
.4 sta (ZPPtr3),y
tya
bne .3
txa
bne .2
.8 rts
*--------------------------------------
TBOX.Delete1 lda #1
ldx #0
*--------------------------------------
TBOX.DeleteAX clc
TBOX.DeleteAXC adc ZPPtr2
sta ZPPtr3
txa
adc ZPPtr2+1
sta ZPPtr3+1
ldy #0
.1 lda (ZPPtr3),y
sta (ZPPtr2),y
beq .8
iny
bne .1
inc ZPPtr3+1
inc ZPPtr2+1
bra .1
.8 rts
*--------------------------------------
TBOX.CheckViewPort
jsr TBOX.SetViewPort
bit bRepaintAll
bpl .8
jmp TBOX.DrawAllLines
.8 jmp OBJ.CurUpdPos
*--------------------------------------
TBOX.SetViewPort
stz bRepaintAll
ldy #S.TBOX.DocX+1
lda (ZPObjPtr),y
tax
dey
lda (ZPObjPtr),y
ldy #S.TBOX.HScroll
sec
sbc (ZPObjPtr),y
ldy #S.OBJ.CurX set CurX = DocX - HScroll
sta (ZPObjPtr),y
ldy #S.TBOX.HScroll+1
txa
sbc (ZPObjPtr),y DocX => HScroll ?
bcs .10 yes..
ldy #S.TBOX.DocX+1 no, set HScroll = DocX
lda (ZPObjPtr),y
tax
dey
lda (ZPObjPtr),y
ldy #S.TBOX.HScroll
sta (ZPObjPtr),y
iny
txa
sta (ZPObjPtr),y
lda #0 set CurX = 0
bra .20
*--------------------------------------
.10 ldy #S.TBOX.HScroll+1
lda (ZPObjPtr),y
tax
dey
lda (ZPObjPtr),y
ldy #S.OBJ.InnerW
clc
adc (ZPObjPtr),y
bcc .11
inx
.11 ldy #S.TBOX.DocX (HScroll + InnerW) > (DocX + 1) ?
clc DocX+1
sbc (ZPObjPtr),y
iny
txa
sbc (ZPObjPtr),y
bcs .21 no...
ldy #S.OBJ.InnerW yes, set HScroll = DocX - (InnerW - 1)
lda (ZPObjPtr),y
dec
sta TempW (InnerW - 1)
ldy #S.TBOX.DocX
lda (ZPObjPtr),y
sec
sbc TempW
tax
iny
lda (ZPObjPtr),y
sbc #0
bcc .12 DocX - (InnerW - 1) < 0
ldy #S.TBOX.HScroll+1
sta (ZPObjPtr),y
dey
txa
sta (ZPObjPtr),y
lda TempW set CurX = (InnerW - 1)
bra .20
.12 lda #0
ldy #S.TBOX.HScroll+1
sta (ZPObjPtr),y
dey
sta (ZPObjPtr),y
.20 ldy #S.OBJ.CurX
sta (ZPObjPtr),y
dec bRepaintAll
*--------------------------------------
.21 ldy #S.TBOX.DocY+1
lda (ZPObjPtr),y
tax
dey
lda (ZPObjPtr),y
ldy #S.TBOX.VScroll
sec
sbc (ZPObjPtr),y
ldy #S.OBJ.CurY set CurY = DocY - VScroll
sta (ZPObjPtr),y
ldy #S.TBOX.VScroll+1
txa
sbc (ZPObjPtr),y DocY => VScroll ?
bcs .30 yes..
ldy #S.TBOX.DocY+1 no, set VScroll = DocY
lda (ZPObjPtr),y
tax
dey
lda (ZPObjPtr),y
ldy #S.TBOX.VScroll
sta (ZPObjPtr),y
iny
txa
sta (ZPObjPtr),y
lda #0 set CurY = 0
bra .40
*--------------------------------------
.30 ldy #S.TBOX.VScroll+1
lda (ZPObjPtr),y
tax
dey
lda (ZPObjPtr),y
ldy #S.OBJ.InnerH
clc
adc (ZPObjPtr),y
bcc .31
inx
.31 ldy #S.TBOX.DocY (VScroll + InnerH) > (DocY + 1) ?
clc DocY+1
sbc (ZPObjPtr),y
iny
txa
sbc (ZPObjPtr),y
bcs .41 no...
ldy #S.OBJ.InnerH yes, set VScroll = DocY - (InnerH - 1)
lda (ZPObjPtr),y
dec
sta TempW (InnerH - 1)
ldy #S.TBOX.DocY
lda (ZPObjPtr),y
sec
sbc TempW
tax
iny
lda (ZPObjPtr),y
sbc #0
bcc .32 DocY - (InnerH - 1) < 0
ldy #S.TBOX.VScroll+1
sta (ZPObjPtr),y
dey
txa
sta (ZPObjPtr),y
lda TempW set CurY = (InnerH - 1)
bra .40
.32 ldy #S.TBOX.VScroll
jsr OBJ.ZeroWordAtY
ldy #S.TBOX.DocY
lda (ZPObjPtr),y
.40 ldy #S.OBJ.CurY
sta (ZPObjPtr),y
dec bRepaintAll
.41 clc CLC RTS to jmp to
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libtui.s.tbox
LOAD usr/src/lib/libtui.s
ASM