A2osX/LIB/LIBTUI.S.txt
burniouf 0ea8d62a96 KERNEL : more terminal fixes
LIBTUI : DLG fix
2023-05-01 09:35:39 +02:00

404 lines
9.1 KiB
Plaintext
Raw 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
.OP 65C02
.OR $2000
.TF lib/libtui
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/kernel.i
.INB inc/net.telnet.i
.INB inc/libtui.i
*--------------------------------------
.DUMMY
.OR ZPLIB
ZPCtxPtr .BS 2
ZPObjPtr .BS 2
ZPLineBufPtr .BS 2
ZPLineBufCnt .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
bTemp1 .BS 1
bTemp2 .BS 1
TempW .BS 2
TempC .BS 2
TempI .BS 2
bRepaintAll .BS 1
hObj .BS 1
.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 CTX.Init
.DA CTX.Close
*--------------------------------------
.DA SCRN.New
.DA DLG.New
.DA LABEL.New
.DA TLINE.New
.DA TBOX.New
.DA LBOX.New
.DA CBOX.New
.DA BUT.New
.DA RADIO.New
.DA OBJ.Exec
.DA LIB.Destroy
.DA OBJ.Run
.DA OBJ.Draw
.DA OBJ.GetProp
.DA LIB.SetProp
.DA OBJ.Activate
.DA OBJ.Deactivate
*--------------------------------------
J.ObjDestroy .DA OBJ.Destroy
.DA OBJ.Destroy
.DA OBJ.Destroy
.DA OBJ.Destroy
.DA OBJ.Destroy
.DA OBJ.Destroy
.DA OBJ.Destroy
.DA OBJ.Destroy
.DA OBJ.Destroy
*--------------------------------------
J.ObjRun .DA CONT.Run
.DA CONT.Run
.DA LABEL.Run
.DA TLINE.Run
.DA TBOX.Run
.DA LBOX.Run
.DA CBOX.Run
.DA BUT.Run
.DA RADIO.Run
*--------------------------------------
J.ObjDraw .DA CONT.Draw
.DA CONT.Draw
.DA LABEL.Draw
.DA TLINE.Draw
.DA TBOX.Draw
.DA LBOX.Draw
.DA CBOX.Draw
.DA BUT.Draw
.DA RADIO.Draw
*--------------------------------------
J.ObjActivate .DA OBJ.Activate
.DA OBJ.Activate
.DA LABEL.Activate
.DA TLINE.Activate
.DA TBOX.Activate
.DA LBOX.Activate
.DA CBOX.Activate
.DA BUT.Activate
.DA RADIO.Activate
*--------------------------------------
J.ObjDeactivate .DA OBJ.Deactivate
.DA OBJ.Deactivate
.DA LABEL.Deactivate
.DA TLINE.Deactivate
.DA TBOX.Deactivate
.DA LBOX.Deactivate
.DA CBOX.Deactivate
.DA BUT.Deactivate
.DA RADIO.Deactivate
*--------------------------------------
J.ObjSetProp .DA OBJ.SetProp
.DA OBJ.SetProp
.DA OBJ.SetProp
.DA OBJ.SetProp
.DA TBOX.SetProp
.DA OBJ.SetProp
.DA OBJ.SetProp
.DA OBJ.SetProp
.DA OBJ.SetProp
*--------------------------------------
J.TBOX.RUN.RO .DA TBOX.RUN.Ignore
.DA TBOX.RUN.Ignore Ctrl-A
.DA TBOX.RUN.Ignore Ctrl-B
.DA TBOX.RUN.Ignore Ctrl-C
.DA TBOX.RUN.Ignore Ctrl-D
.DA TBOX.RUN.Ignore Ctrl-E
.DA TBOX.RUN.Ignore Ctrl-F
.DA TBOX.RUN.Ignore Ctrl-G
.DA TBOX.RUN.PrevLink BS
.DA TBOX.RUN.Ignore TAB
.DA TBOX.RUN.ScrollUp LF
.DA TBOX.RUN.ScrollDown VT
.DA TBOX.RUN.EOL Ctrl-L
.DA TBOX.RUN.GetLink CR
.DA TBOX.RUN.Ignore Ctrl-N
.DA TBOX.RUN.PGUP Ctrl-O
.DA TBOX.RUN.PGDN Ctrl-P
.DA TBOX.RUN.QUIT Ctrl-Q
.DA TBOX.RUN.Ignore Ctrl-R
.DA TBOX.RUN.Ignore Ctrl-S
.DA TBOX.RUN.Home Ctrl-T
.DA TBOX.RUN.NextLink FS
.DA TBOX.RUN.Ignore Ctrl-V
.DA TBOX.RUN.Ignore Ctrl-W
.DA TBOX.RUN.Ignore Ctrl-X
.DA TBOX.RUN.EOF Ctrl-Y
.DA TBOX.RUN.Ignore Ctrl-Z
*--------------------------------------
J.TBOX.RUN.RW .DA TBOX.RUN.Ignore
.DA TBOX.RUN.Ignore
.DA TBOX.RUN.SelBegin Ctrl-B
.DA TBOX.RUN.Ignore ** Copy
.DA TBOX.RUN.Ignore ** Delete Selection
.DA TBOX.RUN.SelEnd Ctrl-E
.DA TBOX.RUN.Ignore ** Find...
.DA TBOX.RUN.SOL Ctrl-G
.DA TBOX.RUN.BS
.DA TBOX.RUN.Ignore TAB
.DA TBOX.RUN.LF
.DA TBOX.RUN.VT
.DA TBOX.RUN.EOL Ctrl-L
.DA TBOX.RUN.CR
.DA TBOX.RUN.Ignore ** Next...
.DA TBOX.RUN.PGUP Ctrl-O
.DA TBOX.RUN.PGDN Ctrl-P
.DA TBOX.RUN.QUIT Ctrl-Q
.DA TBOX.RUN.Ignore ** Replace
.DA TBOX.RUN.Ignore ** save
.DA TBOX.RUN.Home Ctrl-T
.DA TBOX.RUN.FS
.DA TBOX.RUN.Ignore ** Paste
.DA TBOX.RUN.EraseCL Ctrl-W
.DA TBOX.RUN.Ignore ** Cut
.DA TBOX.RUN.EOF Ctrl-Y
.DA TBOX.RUN.Ignore ** delete under cusror
*--------------------------------------
L.SEQ.INIT .DA SEQ.INIT
L.SEQ.GOTOXY .DA SEQ.GOTOXY
L.SEQ.COLOR .DA SEQ.COLOR
L.SEQ.CLOSE .DA SEQ.CLOSE
L.FMT.ESCCSI.R .DA FMT.ESCCSI.R
.DA 0
*--------------------------------------
LIB.LOAD lda LibCnt
bne .8
>LDYAI 512
>SYSCALL2 GetMem
bcs .9
>STYA LineBuf
stx hLineBuf
.8 inc LibCnt
clc
.9 rts
*--------------------------------------
LIB.UNLOAD dec LibCnt
bne .8
lda hLineBuf
>SYSCALL2 FreeMem
.8 clc
rts
*--------------------------------------
LIB.SetProp ldy #3 hObj
lda (pStack),y
jsr LIB.GetOBJ
ldy #2
lda (pStack),y
tay prop
>PULLA Value
sta (ZPObjPtr),y
iny
>PULLA
sta (ZPObjPtr),y
dey prop
inc pStack prop
inc pStack hObj
lda (ZPObjPtr) S.OBJ.T
tax
jmp (J.ObjSetProp,x)
*--------------------------------------
LIB.Destroy ldx ZPObjPtr
phx
ldx ZPObjPtr+1
phx
pha
jsr LIB.GetOBJ
ldy #S.OBJ.S
lda (ZPObjPtr),y
and #S.OBJ.S.bHasChilds
beq .3
ldy #S.OBJ.Childs
.1 lda (ZPObjPtr),y
beq .2
phy
pha
jsr OBJ.Destroy
pla
>SYSCALL2 FreeMem
ply
.2 iny
cpy #S.OBJ
bcc .1
pla
pha
jsr LIB.GetOBJ
.3 jsr .7
pla
>SYSCALL2 FreeMem
plx
stx ZPObjPtr+1
plx
stx ZPObjPtr
rts
.7 lda (ZPObjPtr) S.OBJ.T
tax
jmp (J.ObjDestroy,x)
*--------------------------------------
LIB.GetCTX >LDYA ZPObjPtr
>STYA ZPCtxPtr
.1 lda (ZPCtxPtr)
* cmp #S.OBJ.T.SCRN
beq .8
jsr .8
bra .1
.8 ldy #S.OBJ.hParent
lda (ZPCtxPtr),y
beq *
>SYSCALL2 GetMemPtr
bcs *
>STYA ZPCtxPtr
rts
*--------------------------------------
LIB.GetOBJ >SYSCALL2 GetMemPtr
>STYA ZPObjPtr
rts
*--------------------------------------
.INB usr/src/lib/libtui.s.io
.INB usr/src/lib/libtui.s.lb
.INB usr/src/lib/libtui.s.ctx
.INB usr/src/lib/libtui.s.cont
.INB usr/src/lib/libtui.s.obj
.INB usr/src/lib/libtui.s.scrn
.INB usr/src/lib/libtui.s.dlg
.INB usr/src/lib/libtui.s.label
.INB usr/src/lib/libtui.s.tline
.INB usr/src/lib/libtui.s.tbox
.INB usr/src/lib/libtui.s.lbox
.INB usr/src/lib/libtui.s.cbox
.INB usr/src/lib/libtui.s.but
.INB usr/src/lib/libtui.s.radio
*--------------------------------------
CS.END
*--------------------------------------
LibCnt .BS 1
hLineBuf .BS 1
LineBuf .BS 2
*--------------------------------------
ESC.In .AS "DABC"
ESC.Out .DA #C.BS,#C.VT,#C.LF,#21
*--------------------------------------
FMT.ESCCSI.R .AZ "%d;%d"
*--------------------------------------
OBJ.SIZES .DA S.SCRN,S.DLG,S.LABEL,S.TLINE,S.TBOX,S.LBOX,S.CBOX,S.BUT,S.RADIO
*--------------------------------------
OBJ.COLORS .DA #93,#44 SCRN
.DA #93,#46 DLG
.DA #93,#0 LABEL
.DA #93,#104 TLINE
.DA #93,#104 TBOX
.DA #93,#104 LBOX
.DA #93,#0 CBOX
.DA #92,#100 BUT
.DA #93,#0 RADIO
*--------------------------------------
SEQ.INIT .CS "\ec" reset
.CS "\e[999;999H" Set Cursor Pos to 999,999
.CS "\e[6n" then query Cursor Pos
.CS "\e(B" font select
.CS "\e)0" font select
.CS "\e[?7l" Disable Line Wrap
.CZ "\e[?25l" Hide Cursor
*--------------------------------------
SEQ.GOTOXY .CZ "\e[%d;%dH"
*--------------------------------------
SEQ.COLOR .CZ "\e[%d;%dm"
*--------------------------------------
SEQS .EQ *
*--------------------------------------
SEQ.CURON .CZ "\e[?25h" Show Cursor
SEQ.CUROFF .CZ "\e[?25l" Hide Cursor
*--------------------------------------
SEQ.BAR .CS "\e[1m" BOLD
.CS "\e[7m" INVERSE
.CZ "\e[37;40m"
SEQ.BAREND .CZ "\e[0m"
*--------------------------------------
SEQ.BORDERTL .DA #C.SO,#'l'
.DA #0
SEQ.BORDERTR .DA #C.SO,#'k',#C.SI
.DA #0
SEQ.BORDERBL .DA #C.SO,#'m'
.DA #0
SEQ.BORDERBR .DA #C.SO,#'j',#C.SI
.DA #0
*SEQ.BORDERH .DA #C.SO,#'q',#C.SI
* .DA #0
SEQ.BORDERV .DA #C.SO,#'x',#C.SI
.DA #0
SEQ.INVERSE .CZ "\e[7m"
SEQ.NORMAL .CZ "\e[0m"
*--------------------------------------
*SEQ.SCROLLCURUP .CS "\e[?7l\e[%d;%dr"
*SEQ.SCROLLUP .CZ "\eD"
*SEQ.SCROLLCURDN .CS "\e[?7l\e[%d;%dr"
*SEQ.SCROLLDN .CZ "\eM"
*--------------------------------------
SEQ.CLOSE .CZ "\ec\e[?7h" Enable Line Wrap
*--------------------------------------
MAN
SAVE usr/src/lib/libtui.s
ASM