LIBTCPIP:shutdown() fix

LIBTUI:bugfix & improvments (hyperlinks....)
KERNEL:bugfix in fwrite() to socket
CIFSD:NT_CREATE now set proper rights, better ERR codes
GOPHER:Hyperlinks (wip)
This commit is contained in:
burniouf 2023-03-26 19:42:38 +02:00
parent e0d317e793
commit 05ee4ce936
24 changed files with 1475 additions and 920 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -709,22 +709,22 @@ MSG.DONE .CZ "All Done!!!"
*--------------------------------------
* LOWRES Patette : https://comp.sys.apple2.narkive.com/lTSrj2ZI/apple-ii-colour-rgb
*--------------------------------------
*PALETTE.RGB .HS 00000000 BLACK
* .HS ffffff00 WHITE
* .HS 7e7e7e00 DARK.GRAY
* .HS 9c9c9c00 DARK.GRAY
*PALETTE.RGB .HS 00000000 BLACK
* .HS 604ebd00 DARK.BLUE
* .HS 14cffd00 BLUE
* .HS d0c3ff00 LIGHT.BLUE
* .HS 00a36000 DARK.GREEN
* .HS 14cffd00 BLUE
* .HS 60720300 BROWN
* .HS 7e7e7e00 DARK.GRAY
* .HS 14f53c00 LIGHT.GREEN
* .HS 72ffd000 AQUA
* .HS e31e6000 RED
* .HS ff44fd00 PURPLE
* .HS ffa0d000 PINK
* .HS 60720300 BROWN
* .HS 9c9c9c00 LIGHT.GRAY
* .HS d0c3ff00 LIGHT.BLUE
* .HS ff6a3c00 ORANGE
* .HS ffa0d000 PINK
* .HS d0dd8d00 YELLOW
* .HS ffffff00 WHITE
*--------------------------------------
*PALETTE.RGB .DA #0,#0,#0,#0 0 Black
* .DA #255,#255,#255,#0 15 White

View File

@ -60,7 +60,7 @@ CS.START cld
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.DOEVENT
.DA CS.QUIT
L.SEQ.INIT .DA SEQ.INIT
L.SEQ.SCROLLRGN .DA SEQ.SCROLLRGN
@ -152,13 +152,13 @@ CS.RUN >PUSHW L.MSG.TERMCAP
.1 jsr GetCh
bcs CS.INIT.RTS
beq .1
>SYSCALL PutChar
bcs CS.INIT.RTS
>LDA.G ScreenW Wait for Response from terminal for W & H
* beq .11
* >SYSCALL PutChar
* bcs CS.INIT.RTS
.11 >LDA.G ScreenW Wait for Response from terminal for W & H
beq .1
jsr SCRN.Init
@ -170,7 +170,7 @@ CS.RUN >PUSHW L.MSG.TERMCAP
>STYA.G LineBufBase
txa
>STA.G hLineBuf
lda #1
>SYSCALL ArgV
bcs .2 No arg, new file....
@ -186,12 +186,12 @@ CS.RUN >PUSHW L.MSG.TERMCAP
.3 jsr SCRN.Repaint
bcs CS.RUN.RTS
jsr CS.RUN.GetBuf64
bcs CS.RUN.RTS
>STA.G hFind
jsr CS.RUN.GetBuf64
bcs CS.RUN.RTS
@ -201,13 +201,13 @@ CS.RUN.LOOP jsr GetCh
bcs CS.RUN.RTS I/O error
beq .8
jsr CS.RUN.LOOP.CharIn
bcs .9
.8 >LDA.G bExit
bpl CS.RUN.LOOP
lda #0
.9 pha
@ -221,7 +221,7 @@ CS.RUN.RTS rts
CS.RUN.LOOP.CharIn
cmp #C.DEL
bne .1
jmp Ctrl.DEL
.1 cmp #C.SPACE
@ -238,8 +238,8 @@ CS.RUN.LOOP.CharIn
.2 asl
tax
jmp (J.CTRL,x)
.9 rts
.9 rts
*--------------------------------------
CS.RUN.GetBuf64 >LDYAI 64
>SYSCALL GetMem
@ -296,92 +296,88 @@ CS.QUIT ldy #hLineBuf
*--------------------------------------
GetCh >SYSCALL GetChar
bcs .9
cmp #C.CR
bne GetChTranslate
bne GetCh.1
ldy #S.PS.hStdIn Check for any extra LF
lda (pPS),y
>SYSCALL FEOF
bcs .9
tay
bne .8
>SYSCALL GetChar
bcs .9
.8 lda #C.CR
* clc
.9 rts
*--------------------------------------
GetChTranslate tax
GetCh.1 tax
>LDA.G bEscMode
bpl .1 Not in ESC mode
bmi .1
cpx #'[' \e[ ?
bne .11
lda (pData) #EscBufferPtr
bne .19 buffer not empty...bad SEQ
clc
rts
.11 lda (pData) #EscBufferPtr
cmp #16
bne .10
.19 >STZ.G bEscMode
clc
rts
.10 inc
sta (pData)
tay
txa
sta (pData),y
cmp #64
bcc .7 not a letter...SEQ is incomplete
jsr GetCh.Esc
bcs .8 Not translated, exit
.HS B0 BCS
*--------------------------------------
.1 txa
cmp #C.ESC
cpx #C.ESC
bne .8
lda #$ff
>STA.G bEscMode
inc
clc
rts
.1 >LDA.G bCSIMode
bmi .11
cpx #'[' \e[ ?
bne GetCh.Esc
lda #$ff
>STA.G bCSIMode
inc
sta (pData) #EscBufferPtr
.7 lda #0
clc
rts
*--------------------------------------
.11 lda (pData) #EscBufferPtr
cmp #15
bcc .10
.8 clc
.9 rts
.19 >STZ.G bEscMode
>STA.G bCSIMode
clc
rts
.10 inc
sta (pData)
tay
txa
sta (pData),y
cmp #64
bcs GetCh.CSI
ldx #0
.8 txa
clc
rts
*--------------------------------------
GetCh.Esc >STZ.G bEscMode
lda (pData) #EscBufferPtr
tay
lda #0
sta (pData)
lda (pData),y
cpy #1
bne .10
GetCh.Esc1 txa
ldx #EscChars.Cnt-1
.1 cmp EscChars,x
@ -389,22 +385,31 @@ GetCh.Esc >STZ.G bEscMode
dex
bpl .1
sec
rts
.10 cmp #'R' Response to cursor position query?
beq .3
sec
lda #0
clc
rts
.2 lda EscAscii,x
clc
rts
*--------------------------------------
* \e[xxx;yyyR
* \e[A UP
* \e[B DOWN
* \e[C FOWARD
* \e[D BACK
* \e[xxx;yyyR DSR ("\e[I6n" reply)
*--------------------------------------
GetCh.CSI >STZ.G bEscMode
>STA.G bCSIMode
cpx #'R' Response to cursor position query?
beq .3
>DEBUG
bra GetCh.Esc1
.3 stz TmpByte
ldy #0
@ -436,7 +441,7 @@ GetCh.Esc >STZ.G bEscMode
stz TmpByte
.6 iny
lda (pData),y
cmp #'R'
beq .7
@ -447,7 +452,8 @@ GetCh.Esc >STZ.G bEscMode
.7 lda TmpByte
>STA.G ScreenW
sec
.8 lda #0
clc
rts
*--------------------------------------
GetCh.TmpByte10pA
@ -502,7 +508,7 @@ SEQ.SCROLLUP .CZ "\eD"
SEQ.SCROLLCURDN .CS "\e[?7l\e[%d;%dr"
SEQ.SCROLLDN .CZ "\eM"
*--------------------------------------
MSG.TERMCAP .CZ "\e[999;999H\e[6n"
MSG.TERMCAP .CZ "\r\n\e[999;999H\e[6n"
MSG.TOPBAR .CZ "A2osX Edit %d.%d:%s (%s)"
MSG.TXTCR .CZ "TXT/CR"
MSG.TXTCRLF .CZ "TXT/CRLF"
@ -582,10 +588,10 @@ DLG.SAVE.1 .DA #S.DLG.Ctrl.LBL,#2,#2
DLG.SAVE.2 .DA #S.DLG.Ctrl.TB,#2,#3
.DA #0,#64,#hFileName CURPOS,MAXCHAR,hMem
DLG.SAVE.3 .DA #S.DLG.Ctrl.LBL,#2,#5
.AZ "Filetype :"
DLG.SAVE.4 .DA #S.DLG.Ctrl.OL,#2,#6
.DA #18 Ctrl-R
.DA #FileType
@ -603,15 +609,15 @@ DLG.SAVE.6 .DA #S.DLG.Ctrl.OL,#26,#6
.DA #FileType
.DA #2
.AZ "ASM"
DLG.SAVE.7 .DA #S.DLG.Ctrl.BUT,#40,#8
.DA #C.CR
.AZ " Save "
DLG.SAVE.8 .DA #S.DLG.Ctrl.BUT,#52,#8
.DA #3 Ctrl-C
.AZ " Cancel "
.AZ " Cancel "
DLG.SAVE.T .AZ "Save As..." Title
DLG.SAVE.S .AZ "CR:Save, Ctrl-R/L/A:Change Type, Ctrl-C:Cancel"
DLG.SAVE.LEN .EQ *-DLG.SAVE
@ -638,21 +644,21 @@ DLG.FIND.1 .DA #S.DLG.Ctrl.LBL,#2,#2
DLG.FIND.2 .DA #S.DLG.Ctrl.TB,#2,#3
.DA #0,#63,#hFind
DLG.FIND.3 .DA #S.DLG.Ctrl.LBL,#2,#5
.AZ "Replace :"
DLG.FIND.4 .DA #S.DLG.Ctrl.TB,#2,#6
.DA #0,#63,#hReplace
DLG.FIND.5 .DA #S.DLG.Ctrl.BUT,#40,#8
.DA #C.CR
.AZ " Find "
DLG.FIND.6 .DA #S.DLG.Ctrl.BUT,#52,#8
.DA #3 Ctrl-C
.AZ " Cancel "
.AZ " Cancel "
DLG.FIND.T .AZ "Find/Replace..." Title
DLG.FIND.S .AZ "CR:Find, Ctrl-C:Cancel"
DLG.FIND.LEN .EQ *-DLG.FIND
@ -663,6 +669,7 @@ DS.START
EscBuffer .BS 16
bEscMode .BS 1
bCSIMode .BS 1
bExit .BS 1
bUnSaved .BS 1
bUpdateTop .BS 1

View File

@ -15,7 +15,7 @@ NEW
.INB inc/libtcpip.i
.INB inc/libtui.i
*--------------------------------------
TIMEOUT.MAX .EQ 200 20 sec.
TIMEOUT.MAX .EQ 250 25 sec.
BUFSIZE .EQ 4096
*--------------------------------------
.DUMMY
@ -25,6 +25,7 @@ ZPIPCfgPtr .BS 2
ZPBufPtr .BS 2
ZPLinePtr .BS 2
ZPFramePtr .BS 2
ZPnFrameLen .BS 2
hBuf .BS 1
@ -41,6 +42,7 @@ hTBOX .BS 1
TargetHost .BS 2
TargetPort .BS 2
TargetSelector .BS 2
ZPPtr1 .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -63,23 +65,30 @@ CS.START cld
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.LIBTUI .DA LIBTUI
L.SA.LOCAL .DA SA.LOCAL
L.MSG.ScrTitle0 .DA MSG.ScrTitle0
L.MSG.ScrTitle .DA MSG.ScrTitle
L.MSG.IPKO .DA MSG.IPKO
L.MSG.USAGE .DA MSG.USAGE
L.MSG.IOERR .DA MSG.IOERR
L.MSG.CRLF .DA MSG.CRLF
L.MSG.NULL .DA MSG.NULL
L.MSG.CONNECTING .DA MSG.CONNECTING
L.MSG.UNKNOWN .DA MSG.UNKNOWN
L.MSG.CONNECT .DA MSG.CONNECT
L.MSG.GETTING .DA MSG.GETTING
L.MSG.OK .DA MSG.OK
L.MSG.ERROR .DA MSG.ERROR
L.MSG.CONNECTED .DA MSG.CONNECTED
L.MSG.GOTO .DA MSG.GOTO
J.ITEMTYPES .DA CS.Net.File
.DA CS.Net.Dir
.DA CS.Net.Search
.DA CS.Net.Info
J.items2Buf .DA CS.Net.File2Buf
.DA CS.Net.Dir2Buf
.DA CS.Net.Search2Buf
.DA CS.Net.Info2Buf
J.items2HL .DA CS.Net.File2HL
.DA CS.Net.Dir2HL
.DA CS.Net.Search2HL
.DA CS.Net.Info2HL
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
@ -87,7 +96,7 @@ CS.INIT >LDYA L.LIBTCPIP
bcs .9
sta hLIBTCPIP
>LDYA L.LIBTUI
>SYSCALL LoadLib
bcs .9
@ -97,50 +106,93 @@ CS.INIT >LDYA L.LIBTCPIP
.9
CS.INIT.RTS rts
*--------------------------------------
CS.RUN.USAGE >LDYA L.MSG.USAGE
>SYSCALL PutS
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN jsr CS.Net.Init
bcs CS.INIT.RTS
jsr CS.Scr.Init
bcs CS.INIT.RTS
lda #1
>SYSCALL ArgV
bcs CS.RUN.USAGE
phy
pha
>PUSHEA.G NET.HyperLink+1
pla
>PUSHA
pla
>PUSHA
>SYSCALL strcpy
>LDYAI BUFSIZE
>SYSCALL GetMem
bcs CS.INIT.RTS
stx hBuf
>LDYAI 256
>SYSCALL GetMem
bcs CS.INIT.RTS
>STYA ZPLinePtr
stx hLine
jsr CS.Net.Connect
bcs CS.INIT.RTS
>LDYA L.MSG.CRLF
jsr CS.Net.Get
jsr CS.Scr.Init
bcs CS.INIT.RTS
*--------------------------------------
CS.RUN.LOOP0 jsr CS.Scr.SetStatusConn
bcs CS.RUN.LOOP.9
jsr CS.Net.ParseHL
jsr CS.Scr.SetStatusOkErr
bcs CS.RUN.LOOP
jsr CS.Net.Connect
jsr CS.Scr.SetStatusOkErr
bcs CS.RUN.LOOP
jsr CS.Net.Get
jsr CS.Scr.SetStatusOkErr
bcs CS.RUN.LOOP
jsr CS.Scr.SetTitle
jsr CS.Scr.SetBuf
jsr CS.Scr.SetStatusOkErr
*--------------------------------------
CS.RUN.LOOP lda hSCR
>LIBCALL hLIBTUI,LIBTUI.Exec
bcs .99 Error
bcs CS.RUN.LOOP.9
tay
beq CS.RUN.LOOP No Event
cmp #3
beq .99
beq CS.RUN.LOOP.9
cmp #EV.HL.SELECTED
bne .1
jsr CS.Scr.SetStatusGoto
bcc CS.RUN.LOOP
rts
bra CS.RUN.LOOP
.1 cmp #EV.HL.PRESSED
bne CS.RUN.LOOP
jsr CS.Net.GetHL
bcc CS.RUN.LOOP0
.99 rts
tay
beq CS.RUN.LOOP
CS.RUN.LOOP.9 rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
@ -155,14 +207,14 @@ CS.DOEVENT lda (pEvent)
*--------------------------------------
CS.QUIT lda hCTX
beq .10
>LIBCALL hLIBTUI,LIBTUI.Close
.10 lda hLIBTUI
beq .1
>SYSCALL UnloadLib
.1 lda hSocket
beq .2
@ -192,80 +244,142 @@ CS.Net.Init >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ?
bpl .97
ldy #S.IPCFG.IP+3
ldx #3
ldx #4
.1 lda (ZPIPCfgPtr),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
pha
dey
dex
bpl .1
bne .1
lda #1
>SYSCALL ArgV
bcs .96
>STYA TargetHost
ldy #SA.LOCAL+S.SOCKADDR.ADDR
ldx #4
lda #2
>SYSCALL ArgV
bcs .7
>SYSCALL AToI
bra .8
.7 >LDYAI 70
.8 >STYA TargetPort
.2 pla
sta (pData),y
iny
dex
bne .2
lda #AF.INET
>STA.G SA.LOCAL+S.SOCKADDR.AF
>STA.G SA.REMOTE+S.SOCKADDR.AF
clc
rts
.96 >LDYA L.MSG.USAGE
bra .98
.97 >LDYA L.MSG.IPKO
.98 >SYSCALL PutS
.97 >LDYA L.MSG.IPKO
>SYSCALL PutS
lda #E.SYN
sec
.99 rts
*--------------------------------------
CS.Net.Connect >PUSHEA.G SCR.StatusBuf
>PUSHW L.MSG.CONNECTING
>PUSHW TargetHost
>PUSHW TargetPort
>PUSHBI 4
>SYSCALL SPrintF
jsr CS.Scr.SetStatus
lda #TIMEOUT.MAX
CS.Net.ParseHL >LEA.G NET.HyperLink+1
>STYA ZPPtr1
>STYA TargetHost
lda (ZPPtr1)
beq .9
cmp #'/'
beq .50
ldy #$ff
.1 iny
lda (ZPPtr1),y
bne .2
jsr CS.Net.Resolve host\0
bcs .99
>LDYAI 70
>STYA TargetPort
bra .7
.9 lda #E.SYN
sec
.99 rts
.2 eor #':'
beq .3
eor #'/'
bne .1
lda #70
sta TargetPort Default PORT
lda /70
sta TargetPort+1
bra .5
.3 lda #0 host:Port, stop HOST here
sta (ZPPtr1),y
jsr CS.Net.AddYp1Ptr1
jsr CS.Net.Resolve
bcs .99
>LDYA ZPPtr1
>SYSCALL AToI
>STYA TargetPort
ldy #$ff
.4 iny
lda (ZPPtr1),y
beq .7
eor #'/'
bne .4
.5 jsr CS.Net.AddYp1Ptr1
bra .6
.50 >LDYA L.MSG.NULL
>STYA TargetHost
.6 >LDYA ZPPtr1
>STYA TargetSelector
clc
rts
.7 >LDYA L.MSG.NULL
>STYA TargetSelector
.8 clc
rts
*--------------------------------------
CS.Net.AddYp1Ptr1
tya
sec skip :
adc ZPPtr1
sta ZPPtr1
tay
lda ZPPtr1+1
clc
adc #0
sta ZPPtr1+1
rts
*--------------------------------------
CS.Net.Resolve lda #TIMEOUT.MAX
sta TimeOut
.1 >SLEEP
>PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR
>PUSHW TargetHost
>PUSHEA.G NET.HyperLink+1
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName
bcc CS.Net.Connect1
bcc .9
lda TimeOut
ldx TimeOut
bne .1
>PUSHEA.G SCR.StatusBuf
>PUSHW L.MSG.UNKNOWN
>PUSHW TargetHost
>PUSHBI 2
>SYSCALL SPrintF
jsr CS.Scr.SetStatus
sec
rts
CS.Net.Connect1 >PUSHBI S.SOCKET.T.SEQPKT
.9 rts
*--------------------------------------
CS.Net.Connect >PUSHBI S.SOCKET.T.SEQPKT
>PUSHBI 0
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
@ -273,7 +387,7 @@ CS.Net.Connect1 >PUSHBI S.SOCKET.T.SEQPKT
sta hSocket
>PUSHA
>PUSHW L.SA.LOCAL
>PUSHEA.G SA.LOCAL
>LIBCALL hLIBTCPIP,LIBTCPIP.Bind
bcs .9
@ -288,76 +402,70 @@ CS.Net.Connect1 >PUSHBI S.SOCKET.T.SEQPKT
>PUSHB hSocket
>PUSHEA.G SA.REMOTE
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcc .8
bcc .9
cmp #ERR.SKT.NOCONN
sec
bne .9
lda TimeOut
ldx TimeOut
bne .1
lda #ERR.SKT.NOCONN
sec
.9 rts
.8 >PUSHEA.G SCR.StatusBuf
>PUSHW L.MSG.CONNECTED
ldy #SA.REMOTE+S.SOCKADDR.ADDR
.80 >PUSHB (pData),y
iny
cpy #SA.REMOTE+S.SOCKADDR.PORT
bcc .80
iny
>PUSHB (pData),y
dey
>PUSHB (pData),y
>PUSHBI 6
*--------------------------------------
CS.Net.Get >PUSHEA.G SCR.StatusBuf
>PUSHW L.MSG.GETTING
>PUSHW TargetSelector
>PUSHBI 2
>SYSCALL SPrintF
jsr CS.Scr.SetStatus
clc
rts
*--------------------------------------
CS.Net.Get >STYA TargetSelector
lda hBuf
>SYSCALL GetMemPtr
>STYA ZPBufPtr
lda #0
lda #0 Reset Buffer
sta (ZPBufPtr)
sta (ZPLinePtr)
>PUSHB hSocket
>PUSHW TargetSelector
>PUSHW ZPLinePtr
ldy #$ff
.1 iny
lda (TargetSelector),y
sta (ZPLinePtr),y
bne .1
lda #C.CR
sta (ZPLinePtr),y
iny
lda #C.LF
sta (ZPLinePtr),y
iny
lda #0
sta (ZPLinePtr),y
iny
>PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcs .9
lda #0
sta (ZPLinePtr)
.2 >SLEEP
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .3
cmp #E.NODATA
beq .2
* lda hSocket
* >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
stz hSocket
clc
rts
@ -369,15 +477,15 @@ CS.Net.Get >STYA TargetSelector
lda hFrame
>SYSCALL FreeMem
bra .2
.9 rts
*--------------------------------------
CS.Net.GetFrame sta hFrame
>SYSCALL GetMemPtr
>STYA ZPFramePtr
ldy #S.IP.TOTAL.LENGTH+1
lda (ZPFramePtr),y
sec
@ -410,43 +518,45 @@ CS.Net.GetLines ldy #$ff
.2 jsr CS.Net.GetChar
bcs .8
cmp #C.LF
beq .3
sta (ZPLinePtr),y
iny
bra .2
.3 lda #0
sta (ZPLinePtr),y
jsr CS.Net.Line2Buf
lda #0
sta (ZPLinePtr)
tay
bra .2
.8 clc
.8 lda #0
sta (ZPLinePtr),y
clc
rts
*--------------------------------------
CS.Net.Line2Buf lda (ZPLinePtr)
ldx #ITEMTYPES.L-1
ldx #ITEMTYPES.L
.1 cmp ITEMTYPES,x
.1 cmp ITEMTYPES-1,x
beq .2
dex
bpl .1
bne .1
bra .6
.2 txa
asl
tax
jmp (J.ITEMTYPES,x)
jmp (J.items2Buf-2,x)
.6 ldy #$ff
@ -454,7 +564,7 @@ CS.Net.Line2Buf lda (ZPLinePtr)
lda (ZPLinePtr),y
sta (ZPBufPtr),y
bne .7
tya
clc
adc ZPBufPtr
@ -465,11 +575,11 @@ CS.Net.Line2Buf lda (ZPLinePtr)
.8 rts
*--------------------------------------
* hyperlinks: [[text to show|targetUrl]]
* hyperlinks: [[text to show]targetUrl]
*--------------------------------------
CS.Net.File
CS.Net.Dir
CS.Net.Search
CS.Net.File2Buf
CS.Net.Dir2Buf
CS.Net.Search2Buf
lda #'['
jsr CS.Net.Char2Buf
jsr CS.Net.Char2Buf
@ -478,46 +588,48 @@ CS.Net.Search
jsr CS.Net.Token2Buf
lda #'|'
lda #']'
jsr CS.Net.Char2Buf
phy save Selector pos
txa
jsr CS.Net.Char2Buf Type
jsr CS.Net.SkipToken
jsr CS.Net.Token2Buf address
lda #':'
jsr CS.Net.Char2Buf
jsr CS.Net.Token2Buf port
ply
jsr CS.Net.Token2Buf selector
lda #']'
jsr CS.Net.Char2Buf
lda #C.CR
jsr CS.Net.Char2Buf
.8 lda #C.CR
jsr CS.Net.Char2Buf
lda #0
sta (ZPBufPtr)
rts
*--------------------------------------
CS.Net.Info ldy #0
CS.Net.Info2Buf ldy #0
jsr CS.Net.Token2Buf
lda #C.CR
jsr CS.Net.Char2Buf
lda #0
sta (ZPBufPtr)
rts
*--------------------------------------
CS.Net.Token2Buf
@ -525,68 +637,81 @@ CS.Net.Token2Buf
lda (ZPLinePtr),y
cmp #C.TAB
beq .8
cmp #C.CR
beq .8
jsr CS.Net.Char2Buf
bra CS.Net.Token2Buf
.8 rts
.8 rts
*--------------------------------------
CS.Net.SkipToken
iny
lda (ZPLinePtr),y
cmp #C.TAB
beq .8
cmp #C.CR
beq .8
bra CS.Net.SkipToken
.8 rts
.8 rts
*--------------------------------------
CS.Net.Char2Buf sta (ZPBufPtr)
inc ZPBufPtr
bne .8
inc ZPBufPtr+1
.8 rts
.8 rts
*--------------------------------------
CS.Net.GetChar inc ZPnFrameLen
bne .1
inc ZPnFrameLen+1
beq .9
.1 lda (ZPFramePtr)
inc ZPFramePtr
bne .8
inc ZPFramePtr+1
.8 clc
.8 clc
rts
.9 sec
rts
*--------------------------------------
CS.Net.GetHL >LDA.G NET.HyperLink
tax
jmp (J.items2HL-2,x)
*--------------------------------------
CS.Net.Search2HL
*--------------------------------------
CS.Net.File2HL
CS.Net.Dir2HL
CS.Net.Info2HL clc
rts
*--------------------------------------
CS.Scr.Init >LIBCALL hLIBTUI,LIBTUI.Init
bcs .9
bcs .99
sta hCTX
>PUSHA hCTX
>PUSHBI S.OBJ.F.bTitle+S.OBJ.F.bStatus
>LIBCALL hLIBTUI,LIBTUI.NewScrn
bcs .9
bcs .99
sta hSCR
jsr CS.Scr.SetTitle
jsr CS.Scr.SetTitle0
jsr CS.Scr.SetStatus
>PUSHB hSCR
@ -600,18 +725,31 @@ CS.Scr.Init >LIBCALL hLIBTUI,LIBTUI.Init
>PUSHYA
>PUSHWI BUFSIZE
>LIBCALL hLIBTUI,LIBTUI.NewTBox
bcs .9
.99 bcs .9
sta hTBOX
>LIBCALL hLIBTUI,LIBTUI.Activate
.9 rts
bcs .9
>PUSHB hTBOX
>PUSHBI S.OBJ.pVar
>PUSHEA.G NET.HyperLink
>LIBCALL hLIBTUI,LIBTUI.SetProp
.9 rts
*--------------------------------------
CS.Scr.SetTitle0
>PUSHB hSCR
>PUSHBI S.OBJ.pTITLE
>PUSHW L.MSG.ScrTitle0
>LIBCALL hLIBTUI,LIBTUI.SetProp
rts
*--------------------------------------
CS.Scr.SetTitle >PUSHEA.G SCR.TitleBuf
>PUSHW L.MSG.ScrTitle
>PUSHW TargetHost
>PUSHW TargetPort
>PUSHW TargetHost
>PUSHW TargetPort
>PUSHW TargetSelector
>PUSHBI 6
>SYSCALL SPrintF
@ -630,6 +768,43 @@ CS.Scr.SetBuf >PUSHB hTBOX
>LIBCALL hLIBTUI,LIBTUI.SetProp
rts
*--------------------------------------
CS.Scr.SetStatusConn
>PUSHEA.G SCR.StatusBuf
>PUSHW L.MSG.CONNECT
>PUSHEA.G NET.HyperLink+1
>PUSHBI 2
>SYSCALL SPrintF
jmp CS.Scr.SetStatus
*--------------------------------------
CS.Scr.SetStatusGoto
>PUSHEA.G SCR.StatusBuf skip type
>PUSHW L.MSG.GOTO
>PUSHEA.G NET.HyperLink+1
>PUSHBI 2
>SYSCALL SPrintF
bra CS.Scr.SetStatus
*--------------------------------------
CS.Scr.SetStatusOkErr
bcc .1
pha
>PUSHEA.G SCR.StatusBuf
>PUSHW L.MSG.ERROR
pla
pha
>PUSHA
>PUSHBI 1
>SYSCALL SPrintF
jsr CS.Scr.SetStatus
pla
sec
rts
.1 >PUSHEA.G SCR.StatusBuf
>PUSHW L.MSG.OK
>PUSHBI 0
>SYSCALL SPrintF
*--------------------------------------
CS.Scr.SetStatus
>PUSHB hSCR
>PUSHBI S.OBJ.pSTATUS
@ -643,34 +818,32 @@ hLIBTCPIP .BS 1
LIBTUI .AZ "libtui"
hLIBTUI .BS 1
*--------------------------------------
MSG.ScrTitle .CZ "A2osX-GOPHER %s:%D/%s <Ctrl-Q> : Quit"
MSG.ScrTitle0 .CZ "A2osX-GOPHER - <Ctrl-Q>uit"
MSG.ScrTitle .CZ "A2osX-GOPHER %s:%D/%s - <Ctrl-Q>uit"
*--------------------------------------
MSG.IPKO .CZ "TCP/IP Not Loaded/Configured.\r\n"
MSG.USAGE .CZ "Usage : GOPHER <ip|host> [port]\r\n"
MSG.IOERR .CS "I/O Error."
MSG.USAGE .CS "Usage : GOPHER <ip|host[:port][/selector]"
MSG.CRLF .CS "\r\n"
MSG.NULL .HS 00
*--------------------------------------
MSG.CONNECTING .CZ "Connecting to %s:%D..."
MSG.UNKNOWN .CZ "%s: Unknown host"
MSG.ERROR .CZ "Error : $%h"
MSG.CONNECTED .CZ "Connected to %d.%d.%d.%d:%D."
MSG.CONNECT .CZ "Connect: %s..."
MSG.GETTING .CZ "Getting: /%s..."
MSG.OK .CZ "Ok"
MSG.ERROR .CZ "Error: $%h"
MSG.GOTO .CZ "Goto: %s"
*--------------------------------------
ITEMTYPES .AS "017i"
ITEMTYPES.L .EQ *-ITEMTYPES
*--------------------------------------
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
.BS 4 S.SOCKADDR.ADDR
.BS 2 S.SOCKADDR.PORT
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.START
SA.LOCAL .BS S.SOCKADDR
SA.REMOTE .BS S.SOCKADDR
SCR.TitleBuf .BS 80
SCR.StatusBuf .BS 80
NET.HyperLink .BS 80
DS.END .ED
*--------------------------------------
MAN

View File

@ -4,6 +4,8 @@ NEW
.OP 65C02
.OR $2000
.TF bin/pak
*--------------------------------------
X.RESETSRCDIR .EQ 0 single pass
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
@ -76,6 +78,7 @@ CS.INIT >LDYA L.LIBPAK
CS.RUN >INC.G ArgIndex
>SYSCALL ArgV
bcs .8
>STYA ZPPtr1
lda (ZPPtr1)
@ -115,7 +118,7 @@ CS.RUN >INC.G ArgIndex
bne .9
>LDYA ZPPtr1
jsr InitSrcDirYA
jsr X.InitSrcDirYA
bcc CS.RUN
rts
@ -128,6 +131,7 @@ CS.RUN >INC.G ArgIndex
>LDYAI 256
>SYSCALL GetMem
bcs .99
>STYA ZPFullPath
txa
>STA.G hSrcFullPath
@ -156,6 +160,7 @@ CS.RUN >INC.G ArgIndex
>LDYAI CHNK.SIZE
>SYSCALL GetMem
bcs .98
>STYA ZPSrcBufPtr
txa
>STA.G hSrcBuf
@ -163,6 +168,7 @@ CS.RUN >INC.G ArgIndex
>LDYAI CHNK.SIZE
>SYSCALL GetMem
bcs .98
>STYA ZPDstBufPtr
txa
>STA.G hDstBuf
@ -192,13 +198,13 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
.1 lda bPause
bne CS.RUN.LOOP Pause...
*--------------------------------------
jsr GetEntry
jsr X.GetEntry
bcs .9
jsr FilterMatch
jsr X.IncludeMatch
bcs .8 no match, skip....
jsr ExcludeMatch
jsr X.IgnoreMatch
bcc .8 match, skip
ldy #S.STAT.MODE+1
@ -211,18 +217,20 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
jsr CS.RUN.DIR
bcs .99
bra .8
.6 jsr CS.RUN.FILE
bcs .99
bra .8
.9 jsr LeaveSubDir
.9 jsr X.LeaveSubDir
bcs .90
jsr BasePath..
jsr X.BasePath..
.8 jsr GetNextEntry
.8 jsr X.GetNextEntry
jmp CS.RUN.LOOP
.90 lda #0
@ -264,7 +272,7 @@ CS.RUN.DIR lda bRecurse
bcs .9
>LDYA ZPFileName
jsr EnterSubDirYA
jsr X.EnterSubDirYA
.9 jmp CS.RUN.CheckErr
@ -386,6 +394,7 @@ CS.RUN.CloseFile
bcs .9
>STZ.G hFile
.9 rts
*--------------------------------------
CS.RUN.Pak >PUSHEA.G PAKSTAT
@ -394,7 +403,9 @@ CS.RUN.Pak >PUSHEA.G PAKSTAT
>PUSHW ZPSrcBufPtr
>LIBCALL hLIB,LIBPAK.Pak
bcs .9
>STYA.G Shunk.DstSize
.9 rts
*--------------------------------------
CS.RUN.OpenArc >LDA.G ArcName
@ -428,8 +439,6 @@ CS.RUN.AppendArc
>SYSCALL FOpen
bcs CS.RUN.OpenArc.RTS
>STA.G hArcFile
rts
>PUSHB.G hArcFile
>PUSHLZ
@ -451,6 +460,7 @@ CS.RUN.AppendArc
.2 lda ARC.Header,y
cmp (ZPSrcBufPtr),y
bne .99
dey
bpl .2
@ -458,10 +468,6 @@ CS.RUN.AppendArc
>PUSHLZ
>PUSHBI SEEK.END
>SYSCALL FSeek
* bcc .9
* cmp #MLI.E.EOF
* bne .99
* clc
.9 rts
.99 >LDYA L.MSG.E.IARC
@ -583,22 +589,27 @@ CS.RUN.WriteArcByteA
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr LeaveSubDir
CS.QUIT jsr X.LeaveSubDir
bcc CS.QUIT
ldy #hExclude
jsr .7
ldy #hFilter
ldy #hInclude
jsr .7
ldy #hSrcFullPath
jsr .7
ldy #hDstBuf
jsr .7
ldy #hSrcBuf
jsr .7
>LDA.G hArcFile
beq .1
>SYSCALL FClose
.1 lda hLIB
@ -611,7 +622,9 @@ CS.QUIT jsr LeaveSubDir
.7 lda (pData),y
beq .8
>SYSCALL FreeMem
.8 rts
*--------------------------------------
CS.RUN.CheckOpt ldy #1
@ -621,6 +634,7 @@ CS.RUN.CheckOpt ldy #1
.1 cmp OptionList,x
beq .2
dex
bpl .1

View File

@ -80,7 +80,7 @@ S.OBJ.pMenu .EQ 18
S.OBJ.pStatus .EQ 20
S.OBJ.pBuf .EQ 22
S.OBJ.BufSize .EQ 24
*
S.OBJ.pVar .EQ 26
*--------------------------------------
S.OBJ.Childs .EQ 32
*
@ -98,31 +98,29 @@ S.TLINE.Ptr .EQ S.OBJ
S.TLINE.Len .EQ S.OBJ+1
S.TLINE.HScroll .EQ S.OBJ+2
*
S.TLINE .EQ S.OBJ+3
S.TLINE .EQ S.OBJ+4
*--------------------------------------
S.TBOX.DocX .EQ S.OBJ
S.TBOX.DocY .EQ S.OBJ+2
S.TBOX.HScroll .EQ S.OBJ+4
S.TBOX.VScroll .EQ S.OBJ+6
S.TBOX.BufPtr .EQ S.OBJ+8
S.TBOX.BufCnt .EQ S.OBJ+10
S.TBOX.SelBegin .EQ S.OBJ+12
S.TBOX.SelEnd .EQ S.OBJ+14
S.TBOX.SelBegin .EQ S.OBJ+8
S.TBOX.SelEnd .EQ S.OBJ+10
S.TBOX.BufPtr .EQ S.OBJ+12
S.TBOX.BufCnt .EQ S.OBJ+14
*
S.TBOX .EQ S.OBJ+16
*--------------------------------------
S.LBOX.Idx .EQ S.OBJ+0
S.LBOX.VScroll .EQ S.OBJ+1
S.LBOX.pVar .EQ S.OBJ+2
S.LBOX.VScroll .EQ S.OBJ+2
*
S.LBOX .EQ S.OBJ+6
S.LBOX .EQ S.OBJ+4
*--------------------------------------
S.CBOX.HotKey .EQ S.OBJ+0
S.CBOX.EV .EQ S.OBJ+1
S.CBOX.pLabel .EQ S.OBJ+2
S.CBOX.pVar .EQ S.OBJ+4
*
S.CBOX .EQ S.OBJ+6
S.CBOX .EQ S.OBJ+4
*--------------------------------------
S.BUT.HotKey .EQ S.OBJ+0
S.BUT.EV .EQ S.OBJ+1
@ -132,13 +130,14 @@ S.BUT .EQ S.OBJ+4
*--------------------------------------
S.RADIO.HotKey .EQ S.OBJ+0
S.RADIO.EV .EQ S.OBJ+1
S.RADIO.pVar .EQ S.OBJ+2
S.RADIO.Idx .EQ S.OBJ+4
S.RADIO.Idx .EQ S.OBJ+2
*
S.RADIO .EQ S.OBJ+6
S.RADIO .EQ S.OBJ+4
*--------------------------------------
EV.RESIZE .EQ $80
EV.QUIT .EQ $81
EV.HL.SELECTED .EQ $82
EV.HL.PRESSED .EQ $83
*--------------------------------------
MAN
SAVE inc/libtui.i

View File

@ -335,9 +335,9 @@ SKT.shutdown pha
lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.S.CLOSING
bne .10
inc S.SOCKET.TCP.S.TIMEWT
sta (ZPPtrSKT),y
pla
clc
@ -349,15 +349,19 @@ SKT.shutdown pha
lda (ZPPtrSKT),y
cmp #S.SOCKET.TCP.S.ESTBLSH
bne .1
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA Send FIN/ACK
jsr SKT.SendOptFIN
lda #S.SOCKET.TCP.S.FINWT1
jmp SKT.StoreTCB.S
.1 cmp #S.SOCKET.TCP.S.CLWAIT
beq .3
bne .2
jsr SKT.SendOptFIN
lda #S.SOCKET.TCP.S.LASTACK
jmp SKT.StoreTCB.S
.2 lda #S.TCP.OPTIONS.RST
jsr TCP.OUT.SendOptA Send RST
@ -386,6 +390,19 @@ SKT.shutdown.HQ jsr SKT.GetFromQueue
>SYSCALL2 freemem
* clc
rts
*--------------------------------------
SKT.SendOptFIN lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA Send FIN/ACK
ldx #3
.1 inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
bne .8
dex
bpl .1
.8 rts
*/--------------------------------------
* # Read (STREAM)
* ## C
@ -423,7 +440,7 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen
lda (ZPPtrSKT),y
and #S.TCP.OPTIONS.ACK
beq .8
jmp TCP.OUT.SendOptA
.8 jsr SKT.CheckStream
@ -463,6 +480,7 @@ SKT.GetDataFromSktIn
.1 inx Check if room left in dest buffer
bne .2
pla
inc
beq .8
@ -477,10 +495,12 @@ SKT.GetDataFromSktIn
sta (ZPDataInPtr)
inc ZPDataInPtr
bne .3
inc ZPDataInPtr+1
.3 iny
bne .1
inc ZPTmpPtr1+1
inc SKT.Cache+S.SOCKET.TCP.INTAIL+1

View File

@ -237,12 +237,9 @@ TCP.IN.JMP.ESTBLSH
and #S.TCP.OPTIONS.FIN
beq .8
jsr SKT.StoreTCB update socket
lda #S.TCP.OPTIONS.FIN+S.TCP.OPTIONS.ACK
jsr TCP.OUT.SendOptA FIN received, Send FIN.ACK
lda #S.SOCKET.TCP.S.LASTACK
jsr TCP.IN.ACKTheFIN
lda #S.SOCKET.TCP.S.CLWAIT
jmp SKT.StoreTCB.S
.8 ldy #S.SOCKET.TCP.O
@ -262,6 +259,10 @@ TCP.IN.JMP.ESTBLSH
lda #S.TCP.OPTIONS.ACK
.91 jmp TCP.OUT.SendOptA
*--------------------------------------
TCP.IN.JMP.CLWAIT
clc Wait for SKT.shutdown
rts
*--------------------------------------
TCP.IN.JMP.LASTACK
ldy #S.TCP.OPTIONS only accept ACK packet
lda (ZPFrameInPtr),y
@ -273,10 +274,8 @@ TCP.IN.JMP.LASTACK
ldy #S.SOCKET.TCP.S
lda #S.SOCKET.TCP.S.TIMEWT
sta (ZPPtrSKT),y
.8
*--------------------------------------
TCP.IN.JMP.CLWAIT
clc Wait for SKT.shutdown
.8 clc
rts
*--------------------------------------
TCP.IN.JMP.FINWT1
@ -298,23 +297,9 @@ TCP.IN.JMP.FINWT2
TCP.IN.2TIMEWT jsr SKT.GetTCB
ldx #3
jsr TCP.IN.ACKTheFIN
.1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .2
dex
bpl .1
.2 ldx #3
.3 inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
bne .4
dex
bpl .3
.4 jsr TCP.OUT.SendACK FIN received, Send ACK
jsr TCP.OUT.SendACK FIN received, Send ACK
bcs TCP.IN.JMP.TIMEWT.RTS
lda #S.SOCKET.TCP.S.TIMEWT
@ -344,6 +329,28 @@ TCP.IN.ACKTheSYN
rts
*--------------------------------------
TCP.IN.ACKTheFIN
ldx #3
.1 inc SKT.Cache+S.SOCKET.TCP.INSEQNUM,x
bne .2
dex
bpl .1
.2 rts
* ldx #3
*.3 inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
* bne .4
* dex
* bpl .3
*.4 rts
*--------------------------------------
TCP.IN.SetDataInPtrAndLen
ldy #S.IP.TOTAL.LENGTH+1
lda (ZPFrameInPtr),y

View File

@ -8,7 +8,7 @@ CBOX.New lda #S.OBJ.T.CBOX
jsr OBJ.Create
bcs .9
ldy #S.CBOX.pVar
ldy #S.OBJ.pVar
jsr OBJ.PullWordY
ldy #S.CBOX.pLabel
@ -69,7 +69,7 @@ CBOX.Run ldy #S.BUT.HotKey
cmp #C.SPACE
bne .9
.8 ldy #S.CBOX.pVar
.8 ldy #S.OBJ.pVar
lda (ZPObjPtr),y
sta ZPPtr1
iny
@ -104,7 +104,7 @@ CBOX.Draw ldx #'('
.10 txa
jsr LB.COut
ldy #S.CBOX.pVar
ldy #S.OBJ.pVar
lda (ZPObjPtr),y
sta ZPPtr1
iny

View File

@ -12,7 +12,7 @@ NEW
* CC = success, A = hCTX
*\--------------------------------------
CTX.Init >LDYA L.SEQ.INIT
jsr CTX.fputs
jsr IO.fputs
bcs .99
>LDYAI S.CTX
@ -32,23 +32,19 @@ CTX.Init >LDYA L.SEQ.INIT
dey
bpl .10
jsr CTX.GetC.Reset
jsr IO.GetC.Reset
.1 >SLEEP
jsr CTX.GetC
bcs .98
beq .2
jsr CTX.PutC
.1 >SLEEP
jsr IO.GetC
bcs .98
.2 ldy #S.CTX.W
lda (ZPCtxPtr),y
bne .8
lda (pStack)
.3 lda (pStack)
dec
sta (pStack)
bne .1
@ -63,6 +59,7 @@ CTX.Init >LDYA L.SEQ.INIT
sta (ZPCtxPtr),y
.8 inc pStack Discard counter
>PULLA hCTX
clc
.99 rts
@ -90,291 +87,21 @@ CTX.Close pha
>SYSCALL2 GetMemPtr
>STYA ZPCtxPtr
lda (ZPCtxPtr) S.CTX.hSCRN
beq .1
>DEBUG
jsr LIB.Destroy
.1 pla
>SYSCALL2 FreeMem
>LDYA L.SEQ.CLOSE
jsr CTX.fputs
jsr IO.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

View File

@ -43,11 +43,11 @@ DLG.New lda #S.OBJ.T.DLG
sta (ZPObjPtr),y
jsr OBJ.SetX2Y2
lda hObj
* clc
rts
rts
.9 >POP 5
rts
*--------------------------------------

324
LIB/LIBTUI.S.IO.txt Normal file
View File

@ -0,0 +1,324 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
IO.GetC ldx ZPCtxPtr
phx
ldx ZPCtxPtr+1
phx
ldx ZPObjPtr
phx
ldx ZPObjPtr+1
phx
jsr IO.GetChar
plx
stx ZPObjPtr+1
plx
stx ZPObjPtr
plx
stx ZPCtxPtr+1
plx
stx ZPCtxPtr
bcs .9
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 IO.GetC.ToBuf
bcs .49 Buffer Full
cpx #'['
beq .18
cpx #64
bcs IO.GetC.ESCSEQ if CC, not a letter...SEQ is incomplete
.18 lda #0
clc
.9 rts
*--------------------------------------
.20 cpx #C.ESC
bne .30
inc A = $01
bra .31
*--------------------------------------
.30 cpx #IAC
bne .38
dec A = $FF
.31 jsr IO.GetC.SetMode
lda #0
clc
rts
*--------------------------------------
.38 txa
clc
.39 rts
*--------------------------------------
.40 jsr IO.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 IO.GetC.IACSEQ no ...
cpx #SE is SE after SB ..... ?
bne .48
bra IO.GetC.IACSEQ yes, we have IAC SB .....SE
.49 jsr IO.GetC.Reset
.48 lda #0
clc
rts
*--------------------------------------
IO.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 IO.GetC.GetCtxEA
>PUSHYA
>PUSHW L.FMT.ESCCSI.R
lda #S.CTX.H
jsr IO.GetC.GetCtxEA
>PUSHYA
lda #S.CTX.W
jsr IO.GetC.GetCtxEA
>PUSHYA
>PUSHBI 4 2 pointers
>SYSCALL2 sscanf
.6 ldx #0
bra .8
.7 ldx ESC.Out,y
.8 jsr IO.GetC.Reset
txa
clc
rts
*--------------------------------------
* IAC SB TN.O.NAWS ww ww hh hh IAC SE
*--------------------------------------
IO.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 IO.GetC.Reset
lda #EV.RESIZE
clc
rts
.8 jsr IO.GetC.Reset
lda #0
clc
rts
*--------------------------------------
IO.GetC.Reset lda #0
IO.GetC.SetMode
ldy #S.CTX.bEscMode
sta (ZPCtxPtr),y
iny Y = S.CTX.InBufPtr
tya
sta (ZPCtxPtr),y
rts
*--------------------------------------
IO.GetC.GetCtxEA
clc
adc ZPCtxPtr
tay
lda ZPCtxPtr+1
adc #0
.9 rts
*--------------------------------------
IO.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
*--------------------------------------
IO.GetChar >SYSCALL GetChar
bcs .9
cmp #C.CR
clc
bne .9
ldy #S.PS.hStdIn Check for any extra LF
lda (pPS),y
>SYSCALL FEOF
bcs .9
tay
bne .8
>SYSCALL GetChar
bcs .9
.8 lda #C.CR
.9 rts
*--------------------------------------
IO.fputs ldx ZPCtxPtr
phx
ldx ZPCtxPtr+1
phx
ldx ZPObjPtr
phx
ldx ZPObjPtr+1
phx
dec pStack
>PUSHYA
ldy #S.PS.hStdOut
lda (pPS),y
ldy #2
sta (pStack),y
>SYSCALL fputs
plx
stx ZPObjPtr+1
plx
stx ZPObjPtr
plx
stx ZPCtxPtr+1
plx
stx ZPCtxPtr
rts
*--------------------------------------
IO.LBWrite ldx ZPCtxPtr
phx
ldx ZPCtxPtr+1
phx
ldx ZPObjPtr
phx
ldx ZPObjPtr+1
phx
ldy #S.PS.hStdOut
lda (pPS),y
>PUSHA
>PUSHW LineBuf
>PUSHW ZPLineBufCnt
>SYSCALL fwrite
plx
stx ZPObjPtr+1
plx
stx ZPObjPtr
plx
stx ZPCtxPtr+1
plx
stx ZPCtxPtr
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libtui.s.io
LOAD usr/src/lib/libtui.s
ASM

View File

@ -92,22 +92,6 @@ LB.PrintF >SYSCALL2 SPrintF
.8 rts
*--------------------------------------
LB.HexOut pha
lsr
lsr
lsr
lsr
jsr .1
pla
and #$0F
.1 ora #$30
cmp #'9'+1
bcc LB.COut
adc #6
*--------------------------------------
LB.COut sta (ZPLineBufPtr)
inc ZPLineBufPtr
bne .1
@ -121,33 +105,6 @@ LB.COut sta (ZPLineBufPtr)
.8 rts
*--------------------------------------
LB.Out ldx ZPCtxPtr
phx
ldx ZPCtxPtr+1
phx
ldx ZPObjPtr
phx
ldx ZPObjPtr+1
phx
ldy #S.PS.hStdOut
lda (pPS),y
>PUSHA
>PUSHW LineBuf
>PUSHW ZPLineBufCnt
>SYSCALL fwrite
plx
stx ZPObjPtr+1
plx
stx ZPObjPtr
plx
stx ZPCtxPtr+1
plx
stx ZPCtxPtr
rts
*--------------------------------------
MAN
SAVE usr/src/lib/libtui.s.lb
LOAD usr/src/lib/libtui.s

View File

@ -8,7 +8,7 @@ LBOX.New lda #S.OBJ.T.LBOX
jsr OBJ.Create
bcs .9
ldy #S.LBOX.pVar
ldy #S.OBJ.pVar
jsr OBJ.PullWordY
ldy #S.OBJ.pBuf

View File

@ -11,7 +11,7 @@ OBJ.Create pha Type
bcs .9
>STYA ZPObjPtr
stx hObj
pla
@ -19,15 +19,15 @@ OBJ.Create pha Type
tax
ldy OBJ.SIZES,x
lda #0
dey
.1 sta (ZPObjPtr),y
dey
bne .1
* clc
rts
@ -182,26 +182,28 @@ OBJ.SetX2Y2 ldy #S.OBJ.X1
*--------------------------------------
OBJ.Exec >PUSHA hOBJ
jsr LIB.GetOBJ
jsr LIB.GetCTX
.1 jsr CTX.GetC
.1 >SLEEP
jsr IO.GetC
bcs .9
cmp #EV.RESIZE
clc
beq .99
tay
beq .1
>PUSHA
jsr OBJ.Run
inc pStack
tay
beq .1 no event, no error
.9 inc pStack
.99 rts
@ -213,11 +215,11 @@ OBJ.Run ldx ZPObjPtr
phx
ldx ZPObjPtr+1
phx
ldy #1
lda (pStack),y
jsr LIB.GetOBJ
jsr LIB.GetOBJ
ldy #S.OBJ.S
lda (ZPObjPtr),y
and #S.OBJ.S.bDisabled
@ -235,11 +237,11 @@ OBJ.Run ldx ZPObjPtr
tax
bne .8 error / event
bcc .8
ldy #S.OBJ.Childs
.1 lda (ZPObjPtr),y
beq .5
@ -272,12 +274,12 @@ OBJ.Run ldx ZPObjPtr
stx ZPObjPtr+1
plx
stx ZPObjPtr
rts
.80 lda (ZPObjPtr) S.OBJ.T
tax
jmp (J.ObjRun,x)
jmp (J.ObjRun,x)
*--------------------------------------
OBJ.Draw >PUSHA hObj
@ -419,11 +421,11 @@ OBJ.Draw.Top.I jsr LB.Init
ldx #SEQ.BORDERTR-SEQS
jsr LB.SeqOut
.7 jmp LB.Out
.7 jmp IO.LBWrite
*--------------------------------------
OBJ.Draw.Body lda (pStack)
jsr LIB.GetOBJ
OBJ.Draw.Body.I ldy #S.OBJ.InnerY
lda (ZPObjPtr),y
>PUSHA Start
@ -462,7 +464,7 @@ OBJ.Draw.Lines jsr OBJ.CurOff
ldx #SEQ.NORMAL-SEQS
jsr LB.SeqOut
plp
beq .4
@ -480,7 +482,7 @@ OBJ.Draw.Lines jsr OBJ.CurOff
ldx #SEQ.BORDERV-SEQS
jsr LB.SeqOut
.4 jsr LB.Out
.4 jsr IO.LBWrite
bcs .9
lda (pStack) Relative Y
@ -607,7 +609,7 @@ OBJ.Draw.Bottom.I
ldx #SEQ.BORDERBR-SEQS
jsr LB.SeqOut
.7 jmp LB.Out
.7 jmp IO.LBWrite
*--------------------------------------
OBJ.GetProp ldy #1 hObj
lda (pStack),y
@ -626,37 +628,19 @@ OBJ.GetProp ldy #1 hObj
* clc
rts
*--------------------------------------
OBJ.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
>PULLA prop
inc pStack hObj
cmp #S.OBJ.pTitle
OBJ.SetProp cpy #S.OBJ.pTitle
bne .1
jmp OBJ.Draw.Top.I
.1 cmp #S.OBJ.pBuf
bne .2
jmp OBJ.Draw.Body.I
.2 cmp #S.OBJ.pStatus
jsr OBJ.Draw.Top.I
ldy #0
rts
.1 cpy #S.OBJ.pStatus
bne .8
jmp OBJ.Draw.Bottom.I
jsr OBJ.Draw.Bottom.I
ldy #0
rts
.8 clc
rts
@ -712,11 +696,11 @@ OBJ.FindActive ldx ZPObjPtr
jsr LIB.GetOBJ
ldy #S.OBJ.Childs
.1 phy
lda (ZPObjPtr),y
beq .7
pha
>SYSCALL2 GetMemPtr
@ -724,39 +708,39 @@ OBJ.FindActive ldx ZPObjPtr
ldy #S.OBJ.S
lda (ZPPtr1),y S.OBJ.S.bActive
bmi .8
pla
.7 ply
iny
cpy #S.OBJ
bne .1
* sec
bra .80
.8 pla
ply
clc
.80 plx
stx ZPObjPtr+1
plx
stx ZPObjPtr
rts
*--------------------------------------
OBJ.CurUpdPos ldy #S.OBJ.F
lda (ZPObjPtr),y
and #S.OBJ.F.bEdit
beq .8
* beq .8
ldy #S.OBJ.S
lda (ZPObjPtr),y S.OBJ.S.bActive
bpl .8
lda (ZPObjPtr),y S.OBJ.S.bActive
bpl .8
jsr LB.Init
ldy #S.OBJ.InnerX
lda (ZPObjPtr),y
clc
@ -772,19 +756,19 @@ OBJ.CurUpdPos ldy #S.OBJ.F
tay
jsr LB.GotoXY
jsr LB.Out
jsr IO.LBWrite
.8 clc
rts
*--------------------------------------
OBJ.CurOn ldy #S.OBJ.F
lda (ZPObjPtr),y
and #S.OBJ.F.bEdit
beq .8
* beq .8
ldy #S.OBJ.S
lda (ZPObjPtr),y S.OBJ.S.bActive
bpl .8
lda (ZPObjPtr),y S.OBJ.S.bActive
bpl .8
bit #S.OBJ.S.bCurOn
bne .8
@ -793,7 +777,7 @@ OBJ.CurOn ldy #S.OBJ.F
sta (ZPObjPtr),y
jsr LB.Init
ldy #S.OBJ.InnerX
lda (ZPObjPtr),y
clc
@ -811,9 +795,9 @@ OBJ.CurOn ldy #S.OBJ.F
ldx #SEQ.CURON-SEQS
jsr LB.SeqOut
jsr LB.Out
jsr IO.LBWrite
.8 lda #0
clc
rts
@ -821,31 +805,31 @@ OBJ.CurOn ldy #S.OBJ.F
OBJ.CurOff ldy #S.OBJ.F
lda (ZPObjPtr),y
and #S.OBJ.F.bEdit
beq .8
* beq .8
ldy #S.OBJ.S
lda (ZPObjPtr),y S.OBJ.S.bActive
bpl .8
lda (ZPObjPtr),y S.OBJ.S.bActive
bpl .8
bit #S.OBJ.S.bCurOn
beq .8
eor #S.OBJ.S.bCurOn
sta (ZPObjPtr),y
jsr LB.Init
ldx #SEQ.CUROFF-SEQS
jsr LB.SeqOut
jmp LB.Out
jmp IO.LBWrite
.8 lda #0
clc
rts
*--------------------------------------
OBJ.ZeroWordAtY lda #0
lda (ZPObjPtr),y
sta (ZPObjPtr),y
iny
sta (ZPObjPtr),y
rts
@ -854,9 +838,9 @@ OBJ.IncWordAtY lda (ZPObjPtr),y
inc
sta (ZPObjPtr),y
bne .8
iny
lda (ZPObjPtr),y
inc
sta (ZPObjPtr),y
@ -869,7 +853,7 @@ OBJ.DecWordAtY clc
sta (ZPObjPtr),y
iny
lda (ZPObjPtr),y
sbc #0
sta (ZPObjPtr),y
@ -888,9 +872,9 @@ OBJ.GetLineXAtY lda (ZPObjPtr),y
iny
lda (ZPObjPtr),y
sta ZPPtr1+1
stz TempI
.1 lda (ZPPtr1)
beq .9
@ -905,7 +889,7 @@ OBJ.GetLineXAtY lda (ZPObjPtr),y
lda (ZPPtr1),y
clc
beq .5
cmp #C.CR
bne .4
@ -915,13 +899,13 @@ OBJ.GetLineXAtY lda (ZPObjPtr),y
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
bra .1
.8 clc
rts
.9 sec
rts
*--------------------------------------

View File

@ -8,7 +8,7 @@ RADIO.New lda #S.OBJ.T.RADIO
jsr OBJ.Create
bcs .9
ldy #S.RADIO.pVar
ldy #S.OBJ.pVar
jsr OBJ.PullWordY
ldy #S.OBJ.pBuf
@ -87,7 +87,7 @@ RADIO.Run ldy #S.OBJ.S
cmp #C.SPACE
bne .2
ldy #S.RADIO.pVar
ldy #S.OBJ.pVar
lda (ZPObjPtr),y
sta ZPPtr1
iny
@ -154,7 +154,7 @@ RADIO.Draw lda (pStack) Relative Y
jsr OBJ.GetLineXAtY
bcs .8
ldy #S.RADIO.pVar
ldy #S.OBJ.pVar
lda (ZPObjPtr),y
sta ZPPtr2
iny

View File

@ -33,37 +33,53 @@ 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 jmp TBOX.RUN.GetLink
*--------------------------------------
TBOX.Run.RW lda (pStack) Event
cmp #C.SPACE
bcs .1
cmp #27
bcs TBOX.RUN.Ignore
asl
tax
jmp (J.TBOX.RUN,x)
jmp (J.TBOX.RUN.RW,x)
.1 cmp #C.DEL
beq .3
beq .2
jsr TBOX.GetBuf
jsr TBOX.ToBuf1
bcs .8 Buffer full
bcs TBOX.RUN.Ignore Buffer full
jsr TBOX.RUN.FS1
bit bRepaintAll
bmi .2
bra .3
jsr OBJ.CurUpdPos
.2 jsr TBOX.GetBuf
jmp TBOX.DrawCurLine
.2 jmp TBOX.DrawAllLines
.3 jsr TBOX.GetBuf
jsr TBOX.Delete1
bcs .8 Buffer Empty
bcs TBOX.RUN.Ignore Buffer Empty
bit bRepaintAll
.3 bit bRepaintAll
bmi .4
jsr OBJ.CurUpdPos
@ -71,13 +87,185 @@ TBOX.Run ldy #S.OBJ.S
jmp TBOX.DrawCurLine
.4 jmp TBOX.DrawAllLines
.8
*--------------------------------------
TBOX.RUN.Ignore lda #0
sec
rts
*--------------------------------------
TBOX.RUN.PrevLink
TBOX.RUN.PrevLink.9
lda #0
sec
rts
*--------------------------------------
TBOX.RUN.NextLink
jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX will do GetBuf
bcs TBOX.RUN.PrevLink.9
jsr TBOX.SetLineAtDocX
.1 ldx #$ff
.2 inx
jsr TBOX.GetChar
beq .9
cmp #C.CR
beq .7
cmp #'['
bne .2
cmp (ZPPtr1) "[["
bne .2
jsr TBOX.RUN.SelectLink
.3 jsr TBOX.GetChar
beq .9
cmp #C.CR
beq .7
cmp #']'
bne .3
jsr TBOX.RUN.Link2pVar
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
.7 ldy #S.TBOX.DocX
jsr OBJ.ZeroWordAtY
ldy #S.TBOX.DocY
jsr OBJ.IncWordAtY
bra .1
.9 lda #0
sec
rts
*--------------------------------------
TBOX.RUN.SelectLink
txa
sec skip first [
ldy #S.TBOX.DocX
adc (ZPObjPtr),y
sta (ZPObjPtr),y
iny
lda #0
adc (ZPObjPtr),y
sta (ZPObjPtr),y
ldy #S.TBOX.BufPtr
jsr TBOX.SetTempCAtY
ldy #S.TBOX.SelBegin
jmp TBOX.SetTempCAtY
*--------------------------------------
TBOX.RUN.Link2pVar
ldy #S.TBOX.SelEnd
jsr TBOX.SetTempCAtY
ldy #S.OBJ.pVar
lda (ZPObjPtr),y
sta ZPPtr2
iny
lda (ZPObjPtr),y
sta ZPPtr2+1
ldy #0
.1 jsr TBOX.GetChar
beq .8
cmp #C.CR
beq .8
cmp #']'
beq .8
sta (ZPPtr2),y
iny
bra .1
.8 lda #0
sta (ZPPtr2),y
rts
*--------------------------------------
TBOX.RUN.GetLink
lda #EV.HL.PRESSED
clc
rts
lda #0
sec
rts
*--------------------------------------
TBOX.RUN.ScrollUp
jsr TBOX.GetBuf
ldy #S.TBOX.VScroll
lda (ZPObjPtr),y
clc
ldy #S.OBJ.InnerH
adc (ZPObjPtr),y
pha
ldy #S.TBOX.VScroll+1
lda (ZPObjPtr),y
ldy #S.OBJ.InnerH+1
adc (ZPObjPtr),y
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
@ -91,7 +279,7 @@ TBOX.RUN.SelBegin
dey
sta (ZPObjPtr),y
rts
jmp TBOX.DrawAllLines
*--------------------------------------
TBOX.RUN.SelEnd ldy #S.TBOX.BufPtr
lda (ZPObjPtr),y
@ -105,7 +293,7 @@ TBOX.RUN.SelEnd ldy #S.TBOX.BufPtr
dey
sta (ZPObjPtr),y
rts
jmp TBOX.DrawAllLines
*--------------------------------------
TBOX.RUN.BS ldy #S.TBOX.BufPtr+1
lda (ZPObjPtr),y
@ -135,7 +323,7 @@ TBOX.RUN.BS ldy #S.TBOX.BufPtr+1
*--------------------------------------
TBOX.RUN.LF jsr TBOX.GetBuf
TBOX.RUN.LF1 jsr TBOX.GetCurlineInAX
TBOX.RUN.LF1 jsr TBOX.GetDocYInAX
inx
bne .1
@ -158,7 +346,7 @@ TBOX.RUN.VT jsr TBOX.GetBuf
jsr OBJ.DecWordAtY
TBOX.RUN.VT1 jsr TBOX.GetCurlineInAX
TBOX.RUN.VT1 jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
jsr TBOX.GetLineLenInAXC
@ -210,17 +398,11 @@ TBOX.RUN.FS1 lda (ZPPtr2)
ldy #S.TBOX.BufPtr
jsr OBJ.IncWordAtY
ldy #S.TBOX.DocX
cpx #C.CR
beq .1
bne .7
ldy #S.TBOX.DocX
bra .7
.1 lda #0
ldy #S.TBOX.DocX
sta (ZPObjPtr),y
iny
sta (ZPObjPtr),y
.1 jsr OBJ.ZeroWordAtY
ldy #S.TBOX.DocY
@ -231,25 +413,18 @@ TBOX.RUN.FS1 lda (ZPPtr2)
.8 clc
rts
*--------------------------------------
TBOX.RUN.SOL lda #0
ldy #S.TBOX.DocX
sta (ZPObjPtr),y
iny
sta (ZPObjPtr),y
TBOX.RUN.SOL ldy #S.TBOX.DocX
jsr OBJ.ZeroWordAtY
jsr TBOX.GetCurlineInAX
jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
ldy #S.TBOX.BufPtr
lda TempC BufPtr at SOL
sta (ZPObjPtr),y
iny
lda TempC+1
sta (ZPObjPtr),y
jsr TBOX.SetTempCAtY BufPtr at SOL
jmp TBOX.CheckViewPort
*--------------------------------------
TBOX.RUN.EOL jsr TBOX.GetCurlineInAX
TBOX.RUN.EOL jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
jsr TBOX.GetLineLenInAXC
@ -278,11 +453,8 @@ TBOX.RUN.CR jsr TBOX.GetBuf
jsr TBOX.ToBuf1
bcs .8 Buffer full
lda #0
ldy #S.TBOX.DocX
sta (ZPObjPtr),y
iny
sta (ZPObjPtr),y
jsr OBJ.ZeroWordAtY
jsr TBOX.RUN.LF1
@ -309,25 +481,18 @@ TBOX.RUN.QUIT lda #3 User Interrupt
rts
*--------------------------------------
TBOX.RUN.Home ldy #S.TBOX.DocX
jsr OBJ.ZeroWordAtY
ldx #4 DocX + DocY
lda #0
.1 sta (ZPObjPtr),y
iny
dex
bne .1
ldy #S.TBOX.DocY
jsr OBJ.ZeroWordAtY
ldy #S.TBOX.BufPtr
sta (ZPObjPtr),y
iny
sta (ZPObjPtr),y
jsr OBJ.ZeroWordAtY
jmp TBOX.CheckViewPort
*--------------------------------------
TBOX.RUN.EraseCL
jsr TBOX.GetCurlineInAX
jsr TBOX.GetDocYInAX
jsr TBOX.GetLineAX
jsr TBOX.GetLineLenInAXC
jsr TBOX.DeleteAXC
@ -423,7 +588,7 @@ TBOX.DrawCurLine
jmp OBJ.Draw.Lines
*--------------------------------------
* hyperlinks: [[text to show|targetUrl]]
* hyperlinks: [[text to show]targetUrl]
*--------------------------------------
TBOX.Draw ldy #S.TBOX.VScroll
lda (ZPObjPtr),y
@ -457,7 +622,8 @@ TBOX.Draw ldy #S.TBOX.VScroll
lda (ZPObjPtr),y
tax
stz bTemp reset selection
stz bTemp1 reset selection
stz bTemp2 reset Hyperlink
.2 jsr TBOX.CheckSel
@ -497,6 +663,47 @@ 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.GetBuf
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.GetBuf
ldy #S.TBOX.BufPtr
@ -512,7 +719,7 @@ TBOX.GetBuf jsr OBJ.GetBuf
rts
*--------------------------------------
TBOX.GetCurlineInAX
TBOX.GetDocYInAX
ldy #S.TBOX.DocY
lda (ZPObjPtr),y
tax
@ -546,7 +753,8 @@ TBOX.GetLineAX stx TempW
jsr TBOX.GetLineLenInAXC
bcc .9
php
* sec
pha
adc TempC
@ -555,8 +763,9 @@ TBOX.GetLineAX stx TempW
adc TempC+1
sta TempC+1
sec
pla
plp
adc ZPPtr1
sta ZPPtr1
@ -576,43 +785,52 @@ TBOX.GetLineAX stx TempW
.8 clc
rts
*--------------------------------------
* TempC charPos
*--------------------------------------
TBOX.CheckSel bit bTemp
bmi .1
ldy #S.TBOX.SelBegin
TBOX.SetLineAtDocX
ldy #S.TBOX.DocX
lda (ZPObjPtr),y
cmp TempC
clc
adc ZPPtr1
sta ZPPtr1
iny
lda (ZPObjPtr),y
sbc TempC+1
bcc .8
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
rts
.1 ldy #S.TBOX.SelEnd
lda (ZPObjPtr),y
cmp TempC
iny
lda (ZPObjPtr),y
sbc TempC+1
bcc .8
phx
ldx #SEQ.NORMAL-SEQS
jsr LB.SeqOut
plx
dec bTemp1
.8 rts
*--------------------------------------
TBOX.ResetSel bit bTemp
TBOX.ResetSel bit bTemp1
bpl .8
phx
@ -620,24 +838,83 @@ TBOX.ResetSel bit bTemp
jsr LB.SeqOut
plx
stz bTemp1
.8 rts
*--------------------------------------
TBOX.GetLineChar
lda (ZPPtr1)
ldy #S.OBJ.F
lda (ZPObjPtr),y
and #S.OBJ.F.bEdit
bne TBOX.GetChar
bit bTemp2
bmi .1
jsr TBOX.GetChar
beq .8
cmp #'['
bne .8 NZ
cmp (ZPPtr1) "[["
bne .8 NZ
dec bTemp2
rts NZ
.1 jsr TBOX.GetChar
beq .8
cmp #'['
beq .1 skip 2nd [
cmp #']' "[[display]"
bne .8 NZ
stz bTemp2
.2 jsr TBOX.GetChar skip "link]"
beq .8
cmp #']'
bne .2
lda #']' NZ
.8 rts
*--------------------------------------
TBOX.GetChar lda (ZPPtr1)
beq .8
inc ZPPtr1
bne .7
bne .1
inc ZPPtr1+1
.7 inc TempC
.1 inc TempC
bne .8
inc TempC+1
inc TempC+1 NZ
.8 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
@ -944,11 +1221,8 @@ TBOX.SetViewPort
bra .40
.32 lda #0
ldy #S.TBOX.VScroll+1
sta (ZPObjPtr),y
dey
sta (ZPObjPtr),y
.32 ldy #S.TBOX.VScroll
jsr OBJ.ZeroWordAtY
ldy #S.TBOX.DocY
lda (ZPObjPtr),y

View File

@ -22,7 +22,8 @@ ZPLineBufCnt .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
bTemp .BS 1
bTemp1 .BS 1
bTemp2 .BS 1
TempW .BS 2
TempC .BS 2
@ -66,7 +67,7 @@ CS.START cld
.DA OBJ.Run
.DA OBJ.Draw
.DA OBJ.GetProp
.DA OBJ.SetProp
.DA LIB.SetProp
.DA OBJ.Activate
.DA OBJ.Deactivate
*--------------------------------------
@ -120,7 +121,45 @@ J.ObjDeactivate .DA OBJ.Deactivate
.DA BUT.Deactivate
.DA RADIO.Deactivate
*--------------------------------------
J.TBOX.RUN .DA TBOX.RUN.Ignore
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
@ -147,11 +186,6 @@ J.TBOX.RUN .DA TBOX.RUN.Ignore
.DA TBOX.RUN.Ignore ** Cut
.DA TBOX.RUN.EOF Ctrl-Y
.DA TBOX.RUN.Ignore ** delete under cusror
.DA TBOX.RUN.Ignore
.DA TBOX.RUN.Ignore
.DA TBOX.RUN.Ignore
.DA TBOX.RUN.Ignore
.DA TBOX.RUN.Ignore
*--------------------------------------
L.SEQ.INIT .DA SEQ.INIT
L.SEQ.GOTOXY .DA SEQ.GOTOXY
@ -185,32 +219,56 @@ LIB.UNLOAD dec LibCnt
.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
>SYSCALL FreeMem
ply
.2 iny
cpy #S.OBJ
bcc .1
@ -218,7 +276,7 @@ LIB.Destroy ldx ZPObjPtr
pla
pha
jsr LIB.GetOBJ
.3 jsr .7
pla
@ -235,26 +293,28 @@ LIB.Destroy ldx ZPObjPtr
tax
jmp (J.ObjDestroy,x)
*--------------------------------------
LIB.GetCTX ldy #S.OBJ.hParent
lda (ZPObjPtr),y
.1 >SYSCALL2 GetMemPtr
LIB.GetCTX >LDYA ZPObjPtr
>STYA ZPCtxPtr
lda (ZPCtxPtr)
.1 lda (ZPCtxPtr)
* cmp #S.OBJ.T.SCRN
beq .8
ldy #S.OBJ.hParent
lda (ZPCtxPtr),y
jsr .8
bra .1
.8 rts
.8 ldy #S.OBJ.hParent
lda (ZPCtxPtr),y
>SYSCALL2 GetMemPtr
>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
@ -292,7 +352,8 @@ OBJ.COLORS .DA #93,#44 SCRN
.DA #92,#100 BUT
.DA #93,#0 RADIO
*--------------------------------------
SEQ.INIT .CS "\ec\e[999;999H" Set Cursor Pos to 999,999
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

View File

@ -68,7 +68,7 @@ CS.INIT >LDYA L.LIBTUI
CS.INIT.RTS rts
*--------------------------------------
CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init
CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init
bcs CS.RUN.RTS
sta hCTX

View File

@ -21,7 +21,7 @@ int main(int argc, char *argv[])
char *pBuf = malloc(1024);
pBuf[0]=0;
short int hTBOX = tuiNewTBox(hSCRN, 1, 1, 44, 20, F_bTitle+F_bStatus+F_bHBorder+F_bVBorder, pBuf, 1024);
short int hTBOX = tuiNewTBox(hSCRN, 1, 1, 44, 20, F_bTitle+F_bStatus+F_bHBorder+F_bVBorder+F_bEdit, pBuf, 1024);
tuiSetProp(hTBOX, P_pTitle, "Text Box Title");
tuiSetProp(hTBOX, P_pStatus, "Text Box Status");
@ -65,10 +65,13 @@ int main(int argc, char *argv[])
if (e == EV_SAVE) {
short int hDLGS = tuiNewDlg(hCTX, 70, 11, "Save As...");
short int hOKBut = tuiNewBut(hDLGS, 50, 7, 13, EV_OK, " OK ");
tuiNewBut(hDLGS, 57, 7, 3, EV_CANCEL, "Cancel");
short int hCanBut = tuiNewBut(hDLGS, 57, 7, 3, EV_CANCEL, "Cancel");
tuiDraw(hDLGS);
tuiActivate(hOKBut);
tuiExec(hDLGS);
short int e;
do {
e = tuiExec(hDLGS);
} while (e != EV_CANCEL);
tuiDestroy(hDLGS);
tuiDraw(hSCRN);
}

View File

@ -451,8 +451,10 @@ PRODOS.FT.TXT .AZ "txt"
.AZ "sys"
PRODOS.FT.END .EQ *-PRODOS.FT.TXT
*--------------------------------------
SMBERR01 .DA #2,#3,#32
MLIERR01 .DA #MLI.E.FNOTFND,#MLI.E.PNOTFND,#MLI.E.OPEN
SMBERR01 .DA #2,#3,#4,#5,#12
.DA #32
MLIERR01 .DA #MLI.E.FNOTFND,#MLI.E.PNOTFND,#MLI.E.FCBFULL,#MLI.E.WRTPROT,#MLI.E.WRTPROT
.DA #MLI.E.OPEN
*--------------------------------------
NETBIOS.H .DA #0 DIRECT TCP TRANSPORT
.DA #0 24 BITS LENGTH
@ -538,7 +540,7 @@ SMB.ComCreate.H .DA #24 WORD COUNT
.BS 2 NameLength
.HS 00000000 Flags
.HS 00000000 RootDirectoryFID
.HS 00000010 DesiredAccess = GENERIC_ALL
.HS 000000C0 DesiredAccess = GENERIC_READ+GENERIC_WRITE
.HS 0000000000000000 AllocationSize
.HS 00000000 ExtFileAttributes
.HS 00000000 ShareAccess

View File

@ -54,7 +54,7 @@ STDIO.Put1 >PUSHWI K.IOBuf buf
inc write 1 byte
>PUSHA
STDIO.Write jsr K.FWrite
STDIO.Write jsr K.FWrite.PFT
bcc .9
tay
@ -480,12 +480,15 @@ K.FRead.RTS rts
* ## RETURN VALUE
* Y,A = Bytes Written
*\--------------------------------------
K.FWrite.PFT ldx #SYS.FWrite Needed by PFT
K.FWrite jsr PFT.CheckNode4
bcs K.FWrite.RET5
jsr UNISTD.Write
bcc K.FRead.RTS
K.FWrite.9 cmp #E.NODATA
sec
bne K.FRead.RTS IO Error
@ -899,8 +902,8 @@ K.PrintF.1 sec format string->ptr2
>PUSHA
>PUSHWI K.IOBuf
>PUSHW PrintF.Cnt Writing to File/dev...
ldx #SYS.FWrite Needed by PFT
jsr K.FWrite
jsr K.FWrite.PFT
bcc .81
tay