A2osX/LIB/LIBTUI.S.txt

432 lines
7.2 KiB
Plaintext
Raw Normal View History

2021-04-15 20:52:08 +00:00
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF lib/libtui
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/net.telnet.i
2021-04-15 20:52:08 +00:00
.INB inc/libtui.i
*--------------------------------------
.DUMMY
.OR ZPLIB
hScrn .BS 1
2021-04-29 11:56:34 +00:00
.BS 1
ZPScrnPtr .BS 2
2021-04-15 20:52:08 +00:00
ZPObjPtr .BS 2
ZPPtr1 .BS 2
.ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA LIB.Open
.DA LIB.Close
.DA LIB.LBOXNew
2021-04-29 11:56:34 +00:00
*--------------------------------------
L.SEQ.TERMCAP .DA SEQ.TERMCAP
2021-04-29 11:56:34 +00:00
L.SEQ.INIT .DA SEQ.INIT
L.FMT.ESCCSI.R .DA FMT.ESCCSI.R
2021-04-15 20:52:08 +00:00
.DA 0
*--------------------------------------
LIB.LOAD lda LibCnt
bne .8
>LDYAI 256
>SYSCALL2 GetMem
bcs .9
stx hLineBuf
.8 inc LibCnt
clc
.9 rts
2021-04-15 20:52:08 +00:00
*--------------------------------------
LIB.UNLOAD dec LibCnt
bne .8
lda hLineBuf
>SYSCALL2 FreeMem
.8 clc
2021-04-15 20:52:08 +00:00
rts
*--------------------------------------
LIB.Open >LDYAI S.SCRN
>SYSCALL2 GetMem
bcs .99
>STYA ZPScrnPtr
txa
>PUSHA
lda #0
2021-04-29 11:56:34 +00:00
ldy #S.SCRN-1
2021-04-29 11:56:34 +00:00
.10 sta (ZPScrnPtr),y
dey
bpl .10
2021-04-29 11:56:34 +00:00
jsr CheckCh.Reset
>LDYA L.SEQ.TERMCAP
>SYSCALL2 puts
lda #0
>PUSHA
.1 >SLEEP
ldy #1
lda (pStack),y
jsr GetScrn
jsr CheckCh
bcs .97
beq .2
>SYSCALL2 PutChar
bcs .97
.2 ldy #S.OBJ.W
lda (ZPScrnPtr),y
bne .8
lda (pStack)
dec
sta (pStack)
bne .1
lda #80
ldy #S.OBJ.W
sta (ZPScrnPtr),y
lda #24
iny S.OBJ.H
sta (ZPScrnPtr),y
.8 inc pStack
>LDYA ZPScrnPtr
jsr LIB.SetObjX2Y2
>PULLA hScrn
clc
rts
.97 inc pStack
inc pStack
.98 pha
lda hScrn
>SYSCALL2 FreeMem
pla
sec
.99 rts
2021-04-15 20:52:08 +00:00
*--------------------------------------
LIB.Close >SYSCALL2 FreeMem
clc
2021-04-15 20:52:08 +00:00
rts
*--------------------------------------
LIB.LBOXNew >PULLW ZPPtr1 Params
2021-04-29 11:56:34 +00:00
>PULLA hScrn
jsr GetScrn
2021-04-15 20:52:08 +00:00
>LDYAI S.LBOX
>SYSCALL2 GetMem
2021-04-15 20:52:08 +00:00
bcs .9
>STYA ZPObjPtr
lda #S.OBJ.T.LBOX
sta (ZPObjPtr)
2021-04-29 11:56:34 +00:00
ldy #S.OBJ.P
lda hScrn
2021-04-29 11:56:34 +00:00
sta (ZPObjPtr),y
iny #S.OBJ.F
lda #S.OBJ.F.bHBorder+S.OBJ.F.bVBorder
sta (ZPObjPtr),y
ldy #S.OBJ.X1
2021-04-15 20:52:08 +00:00
.1 lda (ZPPtr1),y
sta (ZPObjPtr),y
iny
2021-04-15 20:52:08 +00:00
cpy #S.OBJ.H+1
bne .1
2021-04-15 20:52:08 +00:00
.8 txa
clc
.9 rts
*--------------------------------------
LIB.LBOXSetData >SYSCALL2 GetMemPtr
2021-04-29 11:56:34 +00:00
>STYA ZPObjPtr
rts
2021-04-15 20:52:08 +00:00
*--------------------------------------
LIB.LBOXFocus
2021-04-15 20:52:08 +00:00
*--------------------------------------
LIB.LBOXRun
2021-04-15 20:52:08 +00:00
*--------------------------------------
LIB.LBOXClose
2021-04-15 20:52:08 +00:00
clc
rts
*--------------------------------------
LIB.SetObjX2Y2 >STYA ZPObjPtr
2021-04-15 20:52:08 +00:00
ldy #S.OBJ.X1
jsr .1
ldy #S.OBJ.Y1
.1 clc
lda (ZPObjPtr),y
iny
iny S.OBJ.W/H
adc (ZPObjPtr),y
iny
iny S.OBJ.X2/Y2
sta (ZPObjPtr),y
rts
*--------------------------------------
LIB.DrawFrame
clc
rts
*--------------------------------------
CheckCh ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL2 FEOF
bcs .9
tay
bne .18
>SYSCALL2 GetChar
bcs .9
tax
ldy #S.SCRN.bEscMode
lda (ZPScrnPtr),y
beq .20
bmi .40 IAC mode
iny S.SCRN.InBufPtr
lda (ZPScrnPtr),y
cpx #'[' CSI ?
bne .10
cmp #S.SCRN.InBufPtr
bne .49 buffer not empty...bad SEQ
.10 jsr CheckCh.ToBuf
bcs .49 Buffer Full
cpx #'['
beq .18
cpx #64
bcs CheckCh.ESCSEQ if CC, not a letter...SEQ is incomplete
.18 lda #0
clc
rts
*--------------------------------------
.20 cpx #C.ESC
bne .30
inc A = $01
jsr CheckCh.SetMode
lda #0
clc
rts
*--------------------------------------
.30 cpx #IAC
bne .38
dec A = $FF
jsr CheckCh.SetMode
inx X = 0
.38 txa
clc
rts
*--------------------------------------
.40 jsr CheckCh.ToBuf
bcs .49 Buffer Full
cpy #S.SCRN.InBuf First char...
beq .48
ldy #S.SCRN.InBuf
lda (ZPScrnPtr),y
cmp #SB
bne CheckCh.IACSEQ
cpx #SE
bne .48
bra CheckCh.IACSEQ
.49 jsr CheckCh.Reset
.48 lda #0
clc
.9 rts
*--------------------------------------
CheckCh.ESCSEQ cmp #S.SCRN.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.SCRN.InBuf+1 skip ESC [
jsr GetScrnOfs
>PUSHYA
>PUSHW L.FMT.ESCCSI.R
lda #S.OBJ.H
jsr GetScrnOfs
>PUSHYA
lda #S.OBJ.W
jsr GetScrnOfs
>PUSHYA
>PUSHBI 4 2 pointers
>SYSCALL2 sscanf
.6 ldx #0
bra .8
.7 ldx ESC.Out,y
.8 jsr CheckCh.Reset
txa
clc
.9 rts
*--------------------------------------
CheckCh.IACSEQ
>DEBUG
jsr CheckCh.Reset
lda #0
clc
rts
*--------------------------------------
CheckCh.Reset lda #0
CheckCh.SetMode ldy #S.SCRN.bEscMode
sta (ZPScrnPtr),y
iny Y = S.SCRN.InBufPtr
tya
sta (ZPScrnPtr),y
rts
*--------------------------------------
CheckCh.ToBuf ldy #S.SCRN.InBufPtr
lda (ZPScrnPtr),y
cmp #S.SCRN.EndBuf buffer full
bcs .9
phy
inc
tay
txa
sta (ZPScrnPtr),y
tya
ply
sta (ZPScrnPtr),y
* clc
2021-04-15 20:52:08 +00:00
.9 rts
*--------------------------------------
GetScrn sta hScrn
>SYSCALL2 GetMemPtr
>STYA ZPScrnPtr
rts
*--------------------------------------
GetScrnOfs clc
adc ZPScrnPtr
tay
lda ZPScrnPtr+1
adc #0
.9 rts
2021-04-15 20:52:08 +00:00
*--------------------------------------
CS.END
*--------------------------------------
LibCnt .BS 1
hLineBuf .BS 1
*--------------------------------------
ESC.In .AS "DBAC"
ESC.Out .HS 080A0B15
*--------------------------------------
FMT.ESCCSI.R .AZ "%d;%d"
*--------------------------------------
SEQ.TERMCAP .DA #C.ESC
.AS "[999;999H" Set Cursor Pos to 999,999
.DA #C.ESC
.AZ "[6n" then query Cursor Pos
2021-04-29 11:56:34 +00:00
SEQ.INIT .AS "\ec\e(B\e)0"
SEQ.SCROLLRGN .AZ "\e[?7l\e[2;%dr"
SEQ.SCROLLCURUP .AS "\e[?7l\e[%d;%dr"
SEQ.SCROLLUP .AZ "\eD"
SEQ.SCROLLCURDN .AS "\e[?7l\e[%d;%dr"
SEQ.SCROLLDN .AZ "\eM"
SEQ.CLOSE .AZ "\ec"
2021-04-15 20:52:08 +00:00
*--------------------------------------
MAN
SAVE usr/src/lib/libtui.s
ASM