2021-12-02 21:28:26 +00:00
|
|
|
|
NEW
|
|
|
|
|
AUTO 3,1
|
|
|
|
|
.LIST OFF
|
2022-09-04 20:12:49 +00:00
|
|
|
|
*/--------------------------------------
|
|
|
|
|
* # tuiInit
|
|
|
|
|
* Initialize screen & create a new context
|
|
|
|
|
* ## C
|
|
|
|
|
* `short int hCTX tuiInit();`
|
|
|
|
|
* ## ASM
|
|
|
|
|
* `>LIBCALL hLIBTUI,LIBTUI.Init`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* CC = success, A = hCTX
|
|
|
|
|
*\--------------------------------------
|
2021-12-02 21:28:26 +00:00
|
|
|
|
CTX.Init >LDYA L.SEQ.INIT
|
|
|
|
|
jsr CTX.fputs
|
|
|
|
|
bcs .99
|
|
|
|
|
|
|
|
|
|
>LDYAI S.CTX
|
|
|
|
|
>SYSCALL2 GetMem
|
|
|
|
|
bcs .99
|
|
|
|
|
|
|
|
|
|
>STYA ZPCtxPtr
|
|
|
|
|
txa
|
|
|
|
|
>PUSHA hCTX
|
|
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
|
>PUSHA Init Counter
|
|
|
|
|
|
|
|
|
|
ldy #S.CTX-1
|
|
|
|
|
|
|
|
|
|
.10 sta (ZPCtxPtr),y
|
|
|
|
|
dey
|
|
|
|
|
bpl .10
|
|
|
|
|
|
|
|
|
|
jsr CTX.GetC.Reset
|
|
|
|
|
|
|
|
|
|
.1 >SLEEP
|
|
|
|
|
|
|
|
|
|
jsr CTX.GetC
|
|
|
|
|
bcs .98
|
|
|
|
|
|
|
|
|
|
beq .2
|
|
|
|
|
|
|
|
|
|
jsr CTX.PutC
|
|
|
|
|
bcs .98
|
|
|
|
|
|
|
|
|
|
.2 ldy #S.CTX.W
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
lda (pStack)
|
|
|
|
|
dec
|
|
|
|
|
sta (pStack)
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
lda #80
|
|
|
|
|
|
|
|
|
|
ldy #S.CTX.W
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
lda #24
|
|
|
|
|
iny S.CTX.H
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
.8 inc pStack Discard counter
|
|
|
|
|
>PULLA hCTX
|
|
|
|
|
clc
|
|
|
|
|
.99 rts
|
|
|
|
|
|
|
|
|
|
.98 pha
|
|
|
|
|
inc pStack Discard counter
|
|
|
|
|
>PULLA hCTX
|
|
|
|
|
>SYSCALL2 FreeMem
|
|
|
|
|
pla
|
|
|
|
|
sec
|
|
|
|
|
|
|
|
|
|
rts
|
2022-09-04 20:12:49 +00:00
|
|
|
|
*/--------------------------------------
|
|
|
|
|
* # tuiClose
|
|
|
|
|
* destroy context
|
|
|
|
|
* ## C
|
|
|
|
|
* `void fastcall tuiClose(short int hCTX);`
|
|
|
|
|
* ## ASM
|
|
|
|
|
* `lda hCTX`
|
|
|
|
|
* `>LIBCALL hLIBTUI,LIBTUI.Close`
|
|
|
|
|
* ## RETURN VALUE
|
|
|
|
|
* CC = success
|
|
|
|
|
*\--------------------------------------
|
2021-12-02 21:28:26 +00:00
|
|
|
|
CTX.Close >SYSCALL2 FreeMem
|
|
|
|
|
|
|
|
|
|
>LDYA L.SEQ.CLOSE
|
|
|
|
|
jsr CTX.fputs
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
CTX.Close.RTS rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.GetC ldx ZPCtxPtr
|
|
|
|
|
phx
|
|
|
|
|
ldx ZPCtxPtr+1
|
|
|
|
|
phx
|
|
|
|
|
ldx ZPObjPtr
|
|
|
|
|
phx
|
|
|
|
|
ldx ZPObjPtr+1
|
|
|
|
|
phx
|
|
|
|
|
|
|
|
|
|
>SYSCALL GetChar
|
|
|
|
|
|
|
|
|
|
plx
|
|
|
|
|
stx ZPObjPtr+1
|
|
|
|
|
plx
|
|
|
|
|
stx ZPObjPtr
|
|
|
|
|
plx
|
|
|
|
|
stx ZPCtxPtr+1
|
|
|
|
|
plx
|
|
|
|
|
stx ZPCtxPtr
|
|
|
|
|
|
|
|
|
|
bcs CTX.Close.RTS
|
|
|
|
|
|
|
|
|
|
tax
|
|
|
|
|
|
|
|
|
|
ldy #S.CTX.bEscMode
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
beq .20
|
|
|
|
|
|
|
|
|
|
bmi .40 IAC mode
|
|
|
|
|
|
|
|
|
|
iny S.CTX.InBufPtr
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
cpx #'[' CSI ?
|
|
|
|
|
bne .12
|
|
|
|
|
|
|
|
|
|
cmp #S.CTX.InBufPtr
|
|
|
|
|
bne .49 buffer not empty...bad SEQ
|
|
|
|
|
|
|
|
|
|
.12 jsr CTX.GetC.ToBuf
|
|
|
|
|
bcs .49 Buffer Full
|
|
|
|
|
|
|
|
|
|
cpx #'['
|
|
|
|
|
beq .18
|
|
|
|
|
|
|
|
|
|
cpx #64
|
|
|
|
|
bcs CTX.GetC.ESCSEQ if CC, not a letter...SEQ is incomplete
|
|
|
|
|
|
|
|
|
|
.18 lda #0
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.20 cpx #C.ESC
|
|
|
|
|
bne .30
|
|
|
|
|
|
|
|
|
|
inc A = $01
|
|
|
|
|
|
|
|
|
|
bra .31
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.30 cpx #IAC
|
|
|
|
|
bne .38
|
|
|
|
|
|
|
|
|
|
dec A = $FF
|
|
|
|
|
|
|
|
|
|
.31 jsr CTX.GetC.SetMode
|
|
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.38 txa
|
|
|
|
|
clc
|
|
|
|
|
.39 rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.40 jsr CTX.GetC.ToBuf
|
|
|
|
|
bcs .49 Buffer Full
|
|
|
|
|
|
|
|
|
|
cpy #S.CTX.InBuf First char...
|
|
|
|
|
beq .48
|
|
|
|
|
|
|
|
|
|
ldy #S.CTX.InBuf
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
cmp #SB First char is SB ?
|
|
|
|
|
bne CTX.GetC.IACSEQ no ...
|
|
|
|
|
|
|
|
|
|
cpx #SE is SE after SB ..... ?
|
|
|
|
|
bne .48
|
|
|
|
|
|
|
|
|
|
bra CTX.GetC.IACSEQ yes, we have IAC SB .....SE
|
|
|
|
|
|
|
|
|
|
.49 jsr CTX.GetC.Reset
|
|
|
|
|
|
|
|
|
|
.48 lda #0
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.GetC.ESCSEQ cmp #S.CTX.InBuf+2
|
|
|
|
|
bcs .2
|
|
|
|
|
|
|
|
|
|
ldy #ESC.Out-ESC.In-1
|
|
|
|
|
txa
|
|
|
|
|
|
|
|
|
|
.1 cmp ESC.In,y
|
|
|
|
|
beq .7
|
|
|
|
|
|
|
|
|
|
dey
|
|
|
|
|
bpl .1
|
|
|
|
|
|
|
|
|
|
bra .6
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* \e[xxx;yyyR
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
.2 cpx #'R' Response to cursor position query?
|
|
|
|
|
bne .6
|
|
|
|
|
|
|
|
|
|
lda #S.CTX.InBuf+1 skip ESC [
|
|
|
|
|
jsr CTX.GetC.GetCtxEA
|
|
|
|
|
>PUSHYA
|
|
|
|
|
|
|
|
|
|
>PUSHW L.FMT.ESCCSI.R
|
|
|
|
|
|
|
|
|
|
lda #S.CTX.H
|
|
|
|
|
jsr CTX.GetC.GetCtxEA
|
|
|
|
|
>PUSHYA
|
|
|
|
|
|
|
|
|
|
lda #S.CTX.W
|
|
|
|
|
jsr CTX.GetC.GetCtxEA
|
|
|
|
|
>PUSHYA
|
|
|
|
|
|
|
|
|
|
>PUSHBI 4 2 pointers
|
|
|
|
|
>SYSCALL2 sscanf
|
|
|
|
|
|
|
|
|
|
.6 ldx #0
|
|
|
|
|
bra .8
|
|
|
|
|
|
|
|
|
|
.7 ldx ESC.Out,y
|
|
|
|
|
|
|
|
|
|
.8 jsr CTX.GetC.Reset
|
|
|
|
|
|
|
|
|
|
txa
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
* IAC SB TN.O.NAWS ww ww hh hh IAC SE
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.GetC.IACSEQ ldy #S.CTX.InBuf
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
cmp #SB
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
cmp #TN.O.NAWS
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
cmp #80
|
|
|
|
|
bcs .1
|
|
|
|
|
|
|
|
|
|
lda #80
|
|
|
|
|
|
|
|
|
|
.1 tax
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
bne .8
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
cmp #24
|
|
|
|
|
bcs .2
|
|
|
|
|
|
|
|
|
|
lda #24
|
|
|
|
|
|
|
|
|
|
.2 ldy #S.CTX.H
|
|
|
|
|
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
dey S.CTX.W
|
|
|
|
|
|
|
|
|
|
txa
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
jsr CTX.GetC.Reset
|
|
|
|
|
|
|
|
|
|
lda #EV.RESIZE
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
.8 jsr CTX.GetC.Reset
|
|
|
|
|
|
|
|
|
|
lda #0
|
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.GetC.Reset lda #0
|
|
|
|
|
|
|
|
|
|
CTX.GetC.SetMode
|
|
|
|
|
ldy #S.CTX.bEscMode
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
iny Y = S.CTX.InBufPtr
|
|
|
|
|
tya
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.GetC.GetCtxEA
|
|
|
|
|
clc
|
|
|
|
|
adc ZPCtxPtr
|
|
|
|
|
tay
|
|
|
|
|
lda ZPCtxPtr+1
|
|
|
|
|
adc #0
|
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.GetC.ToBuf ldy #S.CTX.InBufPtr
|
|
|
|
|
lda (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
cmp #S.CTX.EndBuf buffer full
|
|
|
|
|
bcs .9
|
|
|
|
|
|
|
|
|
|
phy
|
|
|
|
|
inc
|
|
|
|
|
tay
|
|
|
|
|
txa
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
tya
|
|
|
|
|
ply
|
|
|
|
|
sta (ZPCtxPtr),y
|
|
|
|
|
|
|
|
|
|
* clc
|
|
|
|
|
|
|
|
|
|
.9 rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.PutC ldx ZPCtxPtr
|
|
|
|
|
phx
|
|
|
|
|
ldx ZPCtxPtr+1
|
|
|
|
|
phx
|
|
|
|
|
ldx ZPObjPtr
|
|
|
|
|
phx
|
|
|
|
|
ldx ZPObjPtr+1
|
|
|
|
|
phx
|
|
|
|
|
|
|
|
|
|
>SYSCALL PutChar
|
|
|
|
|
|
|
|
|
|
plx
|
|
|
|
|
stx ZPObjPtr+1
|
|
|
|
|
plx
|
|
|
|
|
stx ZPObjPtr
|
|
|
|
|
plx
|
|
|
|
|
stx ZPCtxPtr+1
|
|
|
|
|
plx
|
|
|
|
|
stx ZPCtxPtr
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CTX.fputs dec pStack
|
|
|
|
|
>PUSHYA
|
|
|
|
|
ldy #S.PS.hStdOut
|
|
|
|
|
lda (pPS),y
|
|
|
|
|
ldy #2
|
|
|
|
|
sta (pStack),y
|
|
|
|
|
>SYSCALL fputs
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
MAN
|
|
|
|
|
SAVE usr/src/lib/libtui.s.ctx
|
|
|
|
|
LOAD usr/src/lib/libtui.s
|
|
|
|
|
ASM
|