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
