From c4ca3e590705f36bc6b8264a29f7a9d07164bc1a Mon Sep 17 00:00:00 2001 From: burniouf Date: Tue, 31 Jan 2023 07:55:01 +0100 Subject: [PATCH] CC:BugFix in while LIBTUI:Improved TBOX control (wip) GOPHER:....to test hyperlinks in TBOX control (wip) --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CC.S.F.txt | 21 +- BIN/CC.S.SYM.txt | 62 ++-- BIN/GOPHER.S.txt | 681 +++++++++++++++++++++++++++++++++++++ INC/LIBTUI.I.txt | 2 +- INCLUDE/libtui.h.txt | 2 +- LIB/LIBTUI.S.OBJ.txt | 67 +++- LIB/LIBTUI.S.TBOX.txt | 146 +++++--- LIB/LIBTUI.S.TLINE.txt | 2 +- LIB/LIBTUI.S.txt | 20 +- ROOT/asmtest/TESTTUI.S.txt | 73 ++-- ROOT/ctest/testargs.c.txt | 4 +- 12 files changed, 962 insertions(+), 118 deletions(-) create mode 100644 BIN/GOPHER.S.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 65d8aa9413457970119601b62770c319d8e4c068..71cf323566a25cc75024185a9cf1f5dc7769cf49 100644 GIT binary patch delta 49379 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 delta 46121 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.G CC.bInitCode +F.Def >DEBUG + + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +F.Body >LDA.G CC.bInitCode bmi .1 lda #$60 RTS @@ -250,11 +259,17 @@ F.CallRetV sec ldx ZPPtr2+1 local : expected Q phx - >STYA ZPPtr2 + >STYA ZPPtr2 T/Q ror ZPPtr1+1 bRetV - bpl .1 + bpl .1 no Return value expected.... + ldy #SYM.Addr+1 + lda (ZPLookupSymPtr),y + cmp #3+LIBS.MAX + bcc .1 SYS/FPU/LIB call, no room on stack required + + >LDYA ZPPtr2 jsr EXP.GetYASizeOfInAX jsr CODE.AddLocal add room for return value diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index 66a57b89..a34e52fe 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -14,7 +14,21 @@ SYM.New >STYA ZPPtr2 T/Q *-------------------------------------- SYM.New.Pass1 jsr SYM.BufInitYAXC set buf according C - >PUSHB.G CC.hSyms + jsr SYM.Get + bcs .1 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.FUNC + beq .90 + + ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + bne .90 + + jmp F.Def + +.1 >PUSHB.G CC.hSyms >PUSHW ZPLineBufPtr jsr SCOPE.Push >SYSCALL SListNewKey @@ -29,30 +43,14 @@ SYM.New.Pass1 jsr SYM.BufInitYAXC set buf according C .FIN bra SYM.New.2 + +.90 lda #E.REDEF + sec SYM.New.9 rts *-------------------------------------- -SYM.New.Pass2 >PUSHB.G CC.hSyms - >PUSHW ZPLineBufPtr - jsr SCOPE.Push - >SYSCALL SListLookup - bcs SYM.New.9 - - >STYA.G CC.SymID Y,A = KeyID - - jsr CC.SkipX X = KeyLen - - >PUSHB.G CC.hSyms - >PUSHW.G CC.SymID - >PUSHW ZPSymBufPtr - >PUSHWI 65535 all - >PUSHWZ From Start - >SYSCALL SListGetData +SYM.New.Pass2 jsr SYM.Get bcs SYM.New.9 - - .DO _DBG_SYM=1 - jsr SYM.DEBUGG - .FIN *-------------------------------------- SYM.New.2 jsr CC.GetCharNB bcs .98 @@ -379,6 +377,28 @@ SYM.GetAddr2 ldy #SYM.SC .9 rts *-------------------------------------- +SYM.Get >PUSHB.G CC.hSyms + >PUSHW ZPLineBufPtr + jsr SCOPE.Push + >SYSCALL SListLookup + bcs .9 + + >STYA.G CC.SymID Y,A = KeyID + + jsr CC.SkipX X = KeyLen + + >PUSHB.G CC.hSyms + >PUSHW.G CC.SymID + >PUSHW ZPSymBufPtr + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + .DO _DBG_SYM=1 + bcs .9 + jsr SYM.DEBUGG + .FIN +.9 rts +*-------------------------------------- SYM.NewKey >PUSHA >PUSHW ZPLineBufPtr >PUSHWI 0 ScopeID diff --git a/BIN/GOPHER.S.txt b/BIN/GOPHER.S.txt new file mode 100644 index 00000000..4dce7e9a --- /dev/null +++ b/BIN/GOPHER.S.txt @@ -0,0 +1,681 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF bin/gopher +*-------------------------------------- +* mirrors.apple2.org.za +* gopherpedia.com +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/eth.i + .INB inc/net.tcpip.i + .INB inc/libtcpip.i + .INB inc/libtui.i +*-------------------------------------- +TIMEOUT.MAX .EQ 200 20 sec. +BUFSIZE .EQ 4096 +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +ZPIPCfgPtr .BS 2 +ZPBufPtr .BS 2 +ZPLinePtr .BS 2 +ZPFramePtr .BS 2 +ZPnFrameLen .BS 2 + +hBuf .BS 1 +hLine .BS 1 +hSocket .BS 1 +hFrame .BS 1 + +TimeOut .BS 1 + +bScreen .BS 1 +hCTX .BS 1 +hSCR .BS 1 +hTBOX .BS 1 + +TargetHost .BS 2 +TargetPort .BS 2 +TargetSelector .BS 2 +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA #S.PS.F.EVENT S.PS.F + .DA #0 + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data Segment Size + .DA #64 Stack Size + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.LIBTCPIP .DA LIBTCPIP +L.LIBTUI .DA LIBTUI +L.SA.LOCAL .DA SA.LOCAL + +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.CONNECTING .DA MSG.CONNECTING +L.MSG.UNKNOWN .DA MSG.UNKNOWN +L.MSG.ERROR .DA MSG.ERROR +L.MSG.CONNECTED .DA MSG.CONNECTED + +J.ITEMTYPES .DA CS.Net.File + .DA CS.Net.Dir + .DA CS.Net.Search + .DA CS.Net.Info + .DA 0 +*-------------------------------------- +CS.INIT >LDYA L.LIBTCPIP + >SYSCALL LoadLib + bcs .9 + + sta hLIBTCPIP + + >LDYA L.LIBTUI + >SYSCALL LoadLib + bcs .9 + + sta hLIBTUI + +.9 +CS.INIT.RTS rts +*-------------------------------------- +CS.RUN jsr CS.Net.Init + bcs CS.INIT.RTS + + jsr CS.Scr.Init + bcs CS.INIT.RTS + + dec bScreen + + >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 + bcs CS.INIT.RTS +*-------------------------------------- + jsr CS.Scr.SetBuf +*-------------------------------------- +CS.RUN.LOOP lda hSCR + >LIBCALL hLIBTUI,LIBTUI.Exec + bcs .99 Error + + tay + beq CS.RUN.LOOP No Event + + cmp #3 + beq .99 + + + + + bra CS.RUN.LOOP + +.99 rts +*-------------------------------------- +CS.DOEVENT lda (pEvent) + bpl .9 is it a TIMER event? + + lda TimeOut + beq .9 + + dec TimeOut + +.9 sec do not discard TIMER event + rts +*-------------------------------------- +CS.QUIT bit bScreen + bpl .10 + + >LIBCALL hLIBTUI,LIBTUI.Close + +.10 lda hLIBTUI + beq .1 + + >SYSCALL UnloadLib + +.1 lda hSocket + beq .2 + + >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown + +.2 lda hBuf + beq .3 + + >SYSCALL FreeMem + +.3 lda hLine + beq .4 + + >SYSCALL FreeMem + +.4 lda hLIBTCPIP + beq .8 + + >SYSCALL UnloadLib + +.8 clc + rts +*-------------------------------------- +CS.Net.Init >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG is TCPIP loaded ? + >STYA ZPIPCfgPtr + lda (ZPIPCfgPtr) Configured ? + bpl .97 + + ldy #S.IPCFG.IP+3 + ldx #3 + +.1 lda (ZPIPCfgPtr),y + sta SA.LOCAL+S.SOCKADDR.ADDR,x + dey + dex + bpl .1 + + lda #1 + >SYSCALL ArgV + bcs .96 + + >STYA TargetHost + + lda #2 + >SYSCALL ArgV + bcs .7 + + >SYSCALL AToI + bra .8 + +.7 >LDYAI 70 + +.8 >STYA TargetPort + + lda #AF.INET + >STA.G SA.REMOTE+S.SOCKADDR.AF + + clc + rts + +.96 >LDYA L.MSG.USAGE + bra .98 + +.97 >LDYA L.MSG.IPKO + +.98 >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 + sta TimeOut + +.1 >SLEEP + + >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR + >PUSHW TargetHost + >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName + bcc CS.Net.Connect1 + + lda 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 + >PUSHBI 0 + >LIBCALL hLIBTCPIP,LIBTCPIP.Socket + bcs .9 + + sta hSocket + + >PUSHA + >PUSHW L.SA.LOCAL + >LIBCALL hLIBTCPIP,LIBTCPIP.Bind + bcs .9 + + >LDYA TargetPort + >STYA.G SA.REMOTE+S.SOCKADDR.PORT + + lda #TIMEOUT.MAX + sta TimeOut + +.1 >SLEEP + + >PUSHB hSocket + >PUSHEA.G SA.REMOTE + >LIBCALL hLIBTCPIP,LIBTCPIP.Connect + bcc .8 + + cmp #ERR.SKT.NOCONN + sec + bne .9 + + lda 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 + >SYSCALL SPrintF + jsr CS.Scr.SetStatus + clc + rts +*-------------------------------------- +CS.Net.Get >STYA TargetSelector + + lda hBuf + >SYSCALL GetMemPtr + >STYA ZPBufPtr + + lda #0 + sta (ZPBufPtr) + sta (ZPLinePtr) + + >PUSHB hSocket + >PUSHW TargetSelector + + ldy #$ff + +.1 iny + lda (TargetSelector),y + bne .1 + + >PUSHYA + + >LIBCALL hLIBTCPIP,LIBTCPIP.Send + bcs .9 + +.2 >SLEEP + + lda hSocket + >LIBCALL hLIBTCPIP,LIBTCPIP.Recv + bcc .3 + + cmp #E.NODATA + beq .2 + + +* lda hSocket +* >LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown + + clc + rts + +.3 jsr CS.Net.GetFrame + + jsr CS.Net.GetLines + + + 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 + sbc #S.TCP-S.ETH.EII + eor #$ff + sta ZPnFrameLen + + dey + + lda (ZPFramePtr),y + sbc /S.TCP-S.ETH.EII + eor #$ff + sta ZPnFrameLen+1 + + lda ZPFramePtr + clc + adc #S.TCP + sta ZPFramePtr + bcc .8 + + inc ZPFramePtr+1 + +.8 rts +*-------------------------------------- +CS.Net.GetLines ldy #$ff + +.1 iny + lda (ZPLinePtr),y + bne .1 + +.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 + rts +*-------------------------------------- +CS.Net.Line2Buf lda (ZPLinePtr) + + ldx #ITEMTYPES.L-1 + +.1 cmp ITEMTYPES,x + beq .2 + + dex + bpl .1 + + bra .6 + +.2 txa + asl + tax + jmp (J.ITEMTYPES,x) + +.6 ldy #$ff + +.7 iny + lda (ZPLinePtr),y + sta (ZPBufPtr),y + bne .7 + + tya + clc + adc ZPBufPtr + sta ZPBufPtr + bcc .8 + + inc ZPBufPtr+1 + +.8 rts +*-------------------------------------- +* hyperlinks: [[text to show|targetUrl]] +*-------------------------------------- +CS.Net.File +CS.Net.Dir +CS.Net.Search + lda #'[' + jsr CS.Net.Char2Buf + jsr CS.Net.Char2Buf + + ldy #0 + + jsr CS.Net.Token2Buf + + lda #'|' + jsr CS.Net.Char2Buf + + phy save Selector pos + + 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 + jsr CS.Net.Char2Buf + +.8 lda #C.CR + jsr CS.Net.Char2Buf + + lda #0 + sta (ZPBufPtr) + + rts +*-------------------------------------- +CS.Net.Info ldy #0 + + jsr CS.Net.Token2Buf + + lda #C.CR + jsr CS.Net.Char2Buf + + lda #0 + sta (ZPBufPtr) + + rts +*-------------------------------------- +CS.Net.Token2Buf + iny + lda (ZPLinePtr),y + cmp #C.TAB + beq .8 + + cmp #C.CR + beq .8 + + jsr CS.Net.Char2Buf + bra CS.Net.Token2Buf + +.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 +*-------------------------------------- +CS.Net.Char2Buf sta (ZPBufPtr) + + inc ZPBufPtr + bne .8 + + inc ZPBufPtr+1 + +.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 + rts + +.9 sec + rts +*-------------------------------------- +CS.Scr.Init >LIBCALL hLIBTUI,LIBTUI.Init + bcs .9 + + sta hCTX + + >PUSHA hCTX + >PUSHBI S.OBJ.F.bTitle+S.OBJ.F.bStatus + >LIBCALL hLIBTUI,LIBTUI.NewScrn + bcs .9 + + sta hSCR + jsr CS.Scr.SetTitle + + jsr CS.Scr.SetStatus + + >PUSHB hSCR + >PUSHBI 0 X1 + >PUSHBI 0 Y1 + >PUSHBI 80 W + >PUSHBI 22 H + >PUSHBI S.OBJ.F.bEdit F + lda hBuf + >SYSCALL GetMemPtr + >PUSHYA + >PUSHWI BUFSIZE + >LIBCALL hLIBTUI,LIBTUI.NewTBox + bcs .9 + + sta hTBOX + + >LIBCALL hLIBTUI,LIBTUI.Activate + +.9 rts +*-------------------------------------- +CS.Scr.SetTitle >PUSHEA.G SCR.TitleBuf + >PUSHW L.MSG.ScrTitle + >PUSHW TargetHost + >PUSHW TargetPort + >PUSHW TargetSelector + >PUSHBI 6 + >SYSCALL SPrintF + + >PUSHB hSCR + >PUSHBI S.OBJ.pTITLE + >PUSHEA.G SCR.TitleBuf + >LIBCALL hLIBTUI,LIBTUI.SetProp + rts +*-------------------------------------- +CS.Scr.SetBuf >PUSHB hTBOX + >PUSHBI S.OBJ.pBuf + lda hBuf + >SYSCALL GetMemPtr + >PUSHYA + >LIBCALL hLIBTUI,LIBTUI.SetProp + rts +*-------------------------------------- +CS.Scr.SetStatus + >PUSHB hSCR + >PUSHBI S.OBJ.pSTATUS + >PUSHEA.G SCR.StatusBuf + >LIBCALL hLIBTUI,LIBTUI.SetProp + rts +*-------------------------------------- +CS.END +LIBTCPIP .AZ "libtcpip" +hLIBTCPIP .BS 1 +LIBTUI .AZ "libtui" +hLIBTUI .BS 1 +*-------------------------------------- +MSG.ScrTitle .CZ "A2osX-GOPHER %s:%D/%s : Exit" +*-------------------------------------- +MSG.IPKO .CZ "TCP/IP Not Loaded/Configured.\r\n" +MSG.USAGE .CZ "Usage : GOPHER [port]\r\n" +MSG.IOERR .CS "I/O Error." +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." +*-------------------------------------- +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 +SA.REMOTE .BS S.SOCKADDR + +SCR.TitleBuf .BS 80 +SCR.StatusBuf .BS 80 +DS.END .ED +*-------------------------------------- +MAN +SAVE usr/src/bin/gopher.s +ASM diff --git a/INC/LIBTUI.I.txt b/INC/LIBTUI.I.txt index 443fede1..7536a327 100644 --- a/INC/LIBTUI.I.txt +++ b/INC/LIBTUI.I.txt @@ -51,7 +51,7 @@ S.OBJ.F.bHBorder .EQ %00010000 S.OBJ.F.bVBorder .EQ %00001000 S.OBJ.F.bHScroll .EQ %00000100 S.OBJ.F.bVScroll .EQ %00000010 -S.OBJ.F.bCursor .EQ %00000001 +S.OBJ.F.bEdit .EQ %00000001 S.OBJ.S .EQ 2 S.OBJ.S.bActive .EQ %10000000 S.OBJ.S.bDisabled .EQ %01000000 diff --git a/INCLUDE/libtui.h.txt b/INCLUDE/libtui.h.txt index 831597c3..28a7fcbf 100644 --- a/INCLUDE/libtui.h.txt +++ b/INCLUDE/libtui.h.txt @@ -18,7 +18,7 @@ NEW #define F_bVBorder 8 #define F_bHScroll 4 #define F_bVScroll 2 -#define F_bCursor 1 +#define F_bEdit 1 #define P_pTitle 16 #define P_pMenu 18 diff --git a/LIB/LIBTUI.S.OBJ.txt b/LIB/LIBTUI.S.OBJ.txt index 1b03ec6c..14b15560 100644 --- a/LIB/LIBTUI.S.OBJ.txt +++ b/LIB/LIBTUI.S.OBJ.txt @@ -412,7 +412,7 @@ OBJ.Draw.Top lda (pStack) * clc beq OBJ.Draw.RTS - jsr LB.Init +OBJ.Draw.Top.I jsr LB.Init ldy #S.OBJ.X1 lda (ZPObjPtr),y @@ -502,9 +502,7 @@ OBJ.Draw.Top lda (pStack) OBJ.Draw.Body lda (pStack) jsr LIB.GetOBJ - jsr OBJ.CurOff - - ldy #S.OBJ.InnerY +OBJ.Draw.Body.I ldy #S.OBJ.InnerY lda (ZPObjPtr),y >PUSHA Start @@ -514,6 +512,8 @@ OBJ.Draw.Body lda (pStack) >PUSHBI 0 Relative Y +OBJ.Draw.Lines jsr OBJ.CurOff + .1 jsr LB.Init ldy #S.OBJ.X1 @@ -598,6 +598,7 @@ OBJ.Draw.Bottom lda (pStack) * clc beq OBJ.Draw.Body.RTS +OBJ.Draw.Bottom.I jsr LB.Init ldy #S.OBJ.X1 @@ -712,15 +713,30 @@ OBJ.SetProp ldy #3 hObj lda (pStack),y tay prop - >PULLA + >PULLA Value sta (ZPObjPtr),y iny >PULLA sta (ZPObjPtr),y - inc pStack - inc pStack -* clc + >PULLA prop + inc pStack hObj + cmp #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 + bne .8 + + jmp OBJ.Draw.Bottom.I + +.8 clc rts *-------------------------------------- OBJ.Activate >PUSHA hObj @@ -808,9 +824,40 @@ OBJ.FindActive ldx ZPObjPtr rts *-------------------------------------- +OBJ.CurUpdPos ldy #S.OBJ.F + lda (ZPObjPtr),y + and #S.OBJ.F.bEdit + beq .8 + + ldy #S.OBJ.S + lda (ZPObjPtr),y S.OBJ.S.bActive + bpl .8 + + jsr LB.Init + + ldy #S.OBJ.InnerX + lda (ZPObjPtr),y + clc + ldy #S.OBJ.CurX + adc (ZPObjPtr),y + tax + + ldy #S.OBJ.InnerY + lda (ZPObjPtr),y + clc + ldy #S.OBJ.CurY + adc (ZPObjPtr),y + tay + jsr LB.GotoXY + + jsr LB.Out + +.8 clc + rts +*-------------------------------------- OBJ.CurOn ldy #S.OBJ.F lda (ZPObjPtr),y - and #S.OBJ.F.bCursor + and #S.OBJ.F.bEdit beq .8 ldy #S.OBJ.S @@ -851,7 +898,7 @@ OBJ.CurOn ldy #S.OBJ.F *-------------------------------------- OBJ.CurOff ldy #S.OBJ.F lda (ZPObjPtr),y - and #S.OBJ.F.bCursor + and #S.OBJ.F.bEdit beq .8 ldy #S.OBJ.S diff --git a/LIB/LIBTUI.S.TBOX.txt b/LIB/LIBTUI.S.TBOX.txt index f5761338..e265e1d8 100644 --- a/LIB/LIBTUI.S.TBOX.txt +++ b/LIB/LIBTUI.S.TBOX.txt @@ -11,7 +11,6 @@ TBOX.New lda #S.OBJ.T.TBOX jsr OBJ.PullBuf >PULLA - ora #S.OBJ.F.bCursor ldy #S.OBJ.F sta (ZPObjPtr),y @@ -40,48 +39,48 @@ TBOX.Run ldy #S.OBJ.S lda (pStack) Event cmp #C.SPACE - bcs .2 + bcs .1 asl tax - jsr .1 - - bcc TBOX.RUN.7 - - rts - -.1 jmp (J.TBOX.RUN,x) - -.2 cmp #C.DEL - bne TBOX.RUN.CR + jmp (J.TBOX.RUN,x) +.1 cmp #C.DEL + beq .3 + jsr TBOX.GetBuf + jsr TBOX.ToBuf1 + bcs .8 Buffer full + jsr TBOX.RUN.FS1 + bit bRepaintAll + bmi .2 + + jsr OBJ.CurUpdPos + + jmp TBOX.DrawCurLine + +.2 jmp TBOX.DrawAllLines + +.3 jsr TBOX.GetBuf jsr TBOX.Delete1 + bcs .8 Buffer Empty - bra TBOX.RUN.7 + bit bRepaintAll + bmi .4 + + jsr OBJ.CurUpdPos + + jmp TBOX.DrawCurLine + +.4 jmp TBOX.DrawAllLines + +.8 *-------------------------------------- TBOX.RUN.Ignore lda #0 sec rts *-------------------------------------- -TBOX.RUN.CR jsr TBOX.GetBuf - - jsr TBOX.ToBuf1 - bcs TBOX.RUN.8 Buffer full - - jsr TBOX.RUN.FS1 - -TBOX.RUN.7 ldy #1 hObj - lda (pStack),y - >PUSHA - - jsr OBJ.Draw.Body - inc pStack - -TBOX.RUN.8 clc - rts -*-------------------------------------- TBOX.RUN.SelBegin ldy #S.TBOX.BufPtr lda (ZPObjPtr),y @@ -146,13 +145,13 @@ TBOX.RUN.BS ldy #S.TBOX.BufPtr+1 lda (ZPPtr2) cmp #C.CR - beq .1 + beq .2 ldy #S.TBOX.DocX jsr OBJ.DecWordAtY - jmp TBOX.SetViewPort + jmp TBOX.CheckViewPort -.1 ldy #S.TBOX.DocY +.2 ldy #S.TBOX.DocY jsr OBJ.DecWordAtY jmp TBOX.RUN.EOL @@ -222,7 +221,7 @@ TBOX.RUN.VT1 jsr TBOX.GetCurlineInAX txa sta (ZPObjPtr),y - jmp TBOX.SetViewPort + jmp TBOX.CheckViewPort TBOX.RUN.VT.8 clc rts @@ -253,7 +252,7 @@ TBOX.RUN.FS1 lda (ZPPtr2) .7 jsr OBJ.IncWordAtY - jsr TBOX.SetViewPort + jmp TBOX.CheckViewPort .8 clc rts @@ -274,7 +273,7 @@ TBOX.RUN.SOL lda #0 lda TempC+1 sta (ZPObjPtr),y - jmp TBOX.SetViewPort + jmp TBOX.CheckViewPort *-------------------------------------- TBOX.RUN.EOL jsr TBOX.GetCurlineInAX jsr TBOX.GetLineAX @@ -299,12 +298,25 @@ TBOX.RUN.EOL jsr TBOX.GetCurlineInAX txa sta (ZPObjPtr),y - jmp TBOX.SetViewPort + jmp TBOX.CheckViewPort *-------------------------------------- -TBOX.RUN.PGUP clc +TBOX.RUN.CR jsr TBOX.GetBuf + jsr TBOX.ToBuf1 + bcs .8 Buffer full + + jmp TBOX.RUN.FS1 + +.8 clc rts *-------------------------------------- -TBOX.RUN.PGDN clc +TBOX.RUN.PGUP +*-------------------------------------- +TBOX.RUN.PGDN lda #0 + sec + rts +*-------------------------------------- +TBOX.RUN.QUIT lda #3 User Interrupt + clc rts *-------------------------------------- TBOX.RUN.Home ldy #S.TBOX.DocX @@ -323,7 +335,7 @@ TBOX.RUN.Home ldy #S.TBOX.DocX iny sta (ZPObjPtr),y - jmp TBOX.SetViewPort + jmp TBOX.CheckViewPort *-------------------------------------- TBOX.RUN.EraseCL jsr TBOX.GetCurlineInAX @@ -367,7 +379,36 @@ TBOX.RUN.EOF lda #$ff txa sta (ZPObjPtr),y - jmp TBOX.SetViewPort + jmp TBOX.CheckViewPort +*-------------------------------------- +TBOX.DrawAllLines + ldy #1 hObj + lda (pStack),y + >PUSHA + + jsr OBJ.Draw.Body + inc pStack + + rts +*-------------------------------------- +TBOX.DrawCurLine + ldy #S.OBJ.InnerY + lda (ZPObjPtr),y + + clc + + ldy #S.OBJ.CurY + adc (ZPObjPtr),y + >PUSHA Start + + lda #1 + >PUSHA Count + + ldy #S.OBJ.CurY + lda (ZPObjPtr),y Relative Y + >PUSHA + + jmp OBJ.Draw.Lines *-------------------------------------- TBOX.Draw ldy #S.TBOX.VScroll lda (ZPObjPtr),y @@ -427,7 +468,8 @@ TBOX.Draw ldy #S.TBOX.VScroll dex bne .7 -.8 +.8 clc + rts *-------------------------------------- TBOX.Activate *-------------------------------------- @@ -585,7 +627,7 @@ TBOX.ToBuf1 ldy #S.TBOX.BufCnt jsr OBJ.IncWordAtY -.1 jsr TBOX.GetBuf + jsr TBOX.GetBuf jsr TBOX.Insert1 @@ -660,7 +702,18 @@ TBOX.DeleteAXC adc ZPPtr2 .8 rts *-------------------------------------- +TBOX.CheckViewPort + jsr TBOX.SetViewPort + bit bRepaintAll + bpl .8 + + jmp TBOX.DrawAllLines + +.8 jmp OBJ.CurUpdPos +*-------------------------------------- TBOX.SetViewPort + stz bRepaintAll + ldy #S.TBOX.DocX+1 lda (ZPObjPtr),y tax @@ -752,8 +805,7 @@ TBOX.SetViewPort .20 ldy #S.OBJ.CurX sta (ZPObjPtr),y - sec - ror bRepaintAll + dec bRepaintAll *-------------------------------------- .21 ldy #S.TBOX.DocY+1 lda (ZPObjPtr),y @@ -847,8 +899,8 @@ TBOX.SetViewPort .40 ldy #S.OBJ.CurY sta (ZPObjPtr),y - sec - ror bRepaintAll + + dec bRepaintAll .41 clc CLC RTS to jmp to rts diff --git a/LIB/LIBTUI.S.TLINE.txt b/LIB/LIBTUI.S.TLINE.txt index cc8bd307..552a0ce9 100644 --- a/LIB/LIBTUI.S.TLINE.txt +++ b/LIB/LIBTUI.S.TLINE.txt @@ -11,7 +11,7 @@ TLINE.New lda #S.OBJ.T.TLINE jsr OBJ.PullBuf ldy #S.OBJ.F - lda #S.OBJ.F.bHScroll+S.OBJ.F.bCursor + lda #S.OBJ.F.bHScroll+S.OBJ.F.bEdit sta (ZPObjPtr),y >PULLA diff --git a/LIB/LIBTUI.S.txt b/LIB/LIBTUI.S.txt index bca1f52d..56c0264f 100644 --- a/LIB/LIBTUI.S.txt +++ b/LIB/LIBTUI.S.txt @@ -123,10 +123,10 @@ J.ObjDeactivate .DA SCRN.Deactivate J.TBOX.RUN .DA TBOX.RUN.Ignore .DA TBOX.RUN.Ignore .DA TBOX.RUN.SelBegin Ctrl-B - .DA TBOX.RUN.Ignore Ctrl-C - .DA TBOX.RUN.Ignore + .DA TBOX.RUN.Ignore ** Copy + .DA TBOX.RUN.Ignore ** Delete Selection .DA TBOX.RUN.SelEnd Ctrl-E - .DA TBOX.RUN.Ignore + .DA TBOX.RUN.Ignore ** Find... .DA TBOX.RUN.SOL Ctrl-G .DA TBOX.RUN.BS .DA TBOX.RUN.Ignore TAB @@ -134,19 +134,19 @@ J.TBOX.RUN .DA TBOX.RUN.Ignore .DA TBOX.RUN.VT .DA TBOX.RUN.EOL Ctrl-L .DA TBOX.RUN.CR - .DA TBOX.RUN.Ignore + .DA TBOX.RUN.Ignore ** Next... .DA TBOX.RUN.PGUP Ctrl-O .DA TBOX.RUN.PGDN Ctrl-P - .DA TBOX.RUN.Ignore - .DA TBOX.RUN.Ignore - .DA TBOX.RUN.Ignore + .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 + .DA TBOX.RUN.Ignore ** Paste .DA TBOX.RUN.EraseCL Ctrl-W - .DA TBOX.RUN.Ignore + .DA TBOX.RUN.Ignore ** Cut .DA TBOX.RUN.EOF Ctrl-Y - .DA TBOX.RUN.Ignore + .DA TBOX.RUN.Ignore ** delete under cusror .DA TBOX.RUN.Ignore .DA TBOX.RUN.Ignore .DA TBOX.RUN.Ignore diff --git a/ROOT/asmtest/TESTTUI.S.txt b/ROOT/asmtest/TESTTUI.S.txt index faeff060..aa3492cb 100644 --- a/ROOT/asmtest/TESTTUI.S.txt +++ b/ROOT/asmtest/TESTTUI.S.txt @@ -27,14 +27,14 @@ ZS.END .ED *-------------------------------------- CS.START cld jmp (.1,x) - .DA #$61 6502,Level 1 (65c02) - .DA #1 BIN Layout Version 1 - .DA #0 S.PS.F.EVENT + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA #0 S.PS.F.EVENT .DA #0 - .DA CS.END-CS.START Code Size (without Constants) - .DA DS.END-DS.START Data Segment Size - .DA #64 Stack Size - .DA #ZS.END-ZS.START Zero Page Size + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data Segment Size + .DA #64 Stack Size + .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- .1 .DA CS.INIT @@ -61,8 +61,11 @@ L.BUT.Cancel .DA BUT.Cancel CS.INIT >LDYA L.LIBTUI >SYSCALL LoadLib bcs CS.INIT.RTS + sta hLIBTUI + * clc + CS.INIT.RTS rts *-------------------------------------- CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init @@ -71,37 +74,51 @@ CS.RUN >LIBCALL hLIBTUI,LIBTUI.Init sta hCTX jsr CS.SCRN.Init bcs CS.RUN.RTS + jsr CS.TBOX1.Init bcs CS.RUN.RTS + jsr CS.LBOX1.Init bcs CS.RUN.RTS + jsr CS.TLINE.Init bcs CS.RUN.RTS + jsr CS.RADIO.Init bcs CS.RUN.RTS + jsr CS.CBOX.Init bcs CS.RUN.RTS + jsr CS.BUT.Init bcs CS.RUN.RTS - jsr CS.SCRN.Draw Will Call SCRN.Draw - lda hTBOX1 + + jsr CS.SCRN.Draw Will Call SCRN.Draw + + lda hTBOX1 >LIBCALL hLIBTUI,LIBTUI.Activate *-------------------------------------- CS.RUN.LOOP lda hSCRN >LIBCALL hLIBTUI,LIBTUI.Exec bcs .9 + cmp #EV.RESIZE bne .1 + jsr CS.SCRN.Draw bcs .9 + bra CS.RUN.LOOP + .1 cmp #EV.SAVE bne .2 jsr CS.RUN.DLGSAVE bcc CS.RUN.LOOP + .2 cmp #EV.QUIT bne CS.RUN.LOOP + lda hSCRN >LIBCALL hLIBTUI,LIBTUI.Destroy @@ -110,10 +127,11 @@ CS.RUN.LOOP lda hSCRN .9 CS.RUN.RTS rts *-------------------------------------- -CS.SCRN.Init >PUSHB hCTX hParent +CS.SCRN.Init >PUSHB hCTX hParent >PUSHBI S.OBJ.F.bTitle+S.OBJ.F.bStatus >LIBCALL hLIBTUI,LIBTUI.NewScrn bcs .9 + sta hSCRN >PUSHA >PUSHBI S.OBJ.pTITLE @@ -123,6 +141,7 @@ CS.SCRN.Init >PUSHB hCTX hParent >PUSHBI S.OBJ.pSTATUS >PUSHW L.SCRN.Status >LIBCALL hLIBTUI,LIBTUI.SetProp + .9 rts *-------------------------------------- CS.TBOX1.Init >LDYAI 1024 @@ -138,15 +157,16 @@ CS.TBOX1.Init >LDYAI 1024 >PUSHB hSCRN hParent >PUSHBI 1 X1 >PUSHBI 1 Y1 - >PUSHBI 44 W + >PUSHBI 46 W >PUSHBI 20 H - >PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder+S.OBJ.F.bTitle+S.OBJ.F.bStatus + >PUSHBI S.OBJ.F.bHBorder+S.OBJ.F.bVBorder+S.OBJ.F.bTitle+S.OBJ.F.bStatus+S.OBJ.F.bEdit >LDA.G TBOX1.hBuf >SYSCALL GetMemPtr >PUSHYA >PUSHWI 1024 >LIBCALL hLIBTUI,LIBTUI.NewTBox bcs .9 + sta hTBOX1 >PUSHA >PUSHBI S.OBJ.pTITLE @@ -156,6 +176,7 @@ CS.TBOX1.Init >LDYAI 1024 >PUSHBI S.OBJ.pSTATUS >PUSHW L.TBOX1.Status >LIBCALL hLIBTUI,LIBTUI.SetProp + .9 rts *-------------------------------------- CS.LBOX1.Init >PUSHB hSCRN hParent @@ -214,6 +235,7 @@ CS.BUT.Init >PUSHB hSCRN hParent >PUSHW L.BUTS.Label >LIBCALL hLIBTUI,LIBTUI.NewBut bcs .9 + >PUSHB hSCRN hParent >PUSHBI 65 X1 >PUSHBI 20 Y1 @@ -224,32 +246,34 @@ CS.BUT.Init >PUSHB hSCRN hParent .9 CS.BUT.Init.RTS rts *-------------------------------------- -CS.RUN.DLGSAVE >PUSHB hCTX hParent - >PUSHBI 70 W - >PUSHBI 11 H +CS.RUN.DLGSAVE >PUSHB hCTX hParent + >PUSHBI 70 W + >PUSHBI 11 H >PUSHW L.DLGS.Title >LIBCALL hLIBTUI,LIBTUI.NewDlg bcs CS.BUT.Init.RTS sta hDLGS - >PUSHB hDLGS hParent - >PUSHBI 50 X1 - >PUSHBI 7 Y1 + >PUSHB hDLGS hParent + >PUSHBI 50 X1 + >PUSHBI 7 Y1 >PUSHBI C.CR >PUSHBI EV.OK >PUSHW L.BUT.OK >LIBCALL hLIBTUI,LIBTUI.NewBut bcs .9 + sta ZPPtr1 - >PUSHB hDLGS hParent - >PUSHBI 57 X1 - >PUSHBI 7 Y1 - >PUSHBI 3 Ctrl-C + >PUSHB hDLGS hParent + >PUSHBI 57 X1 + >PUSHBI 7 Y1 + >PUSHBI 3 Ctrl-C >PUSHBI EV.CANCEL >PUSHW L.BUT.Cancel >LIBCALL hLIBTUI,LIBTUI.NewBut bcs .9 + lda hDLGS >LIBCALL hLIBTUI,LIBTUI.Draw bcs .9 @@ -270,11 +294,12 @@ CS.RUN.DLGSAVE >PUSHB hCTX hParent plp rts *-------------------------------------- -CS.DOEVENT sec do not discard TIMER event +CS.DOEVENT sec do not discard TIMER event rts *-------------------------------------- CS.QUIT >LDA.G TBOX1.hBuf beq .1 + >SYSCALL FreeMem .1 lda hCTX beq .2 @@ -283,7 +308,9 @@ CS.QUIT >LDA.G TBOX1.hBuf .2 lda hLIBTUI beq .8 + >SYSCALL UnloadLib + .8 clc rts *-------------------------------------- diff --git a/ROOT/ctest/testargs.c.txt b/ROOT/ctest/testargs.c.txt index c978cc53..d5312b94 100644 --- a/ROOT/ctest/testargs.c.txt +++ b/ROOT/ctest/testargs.c.txt @@ -2,6 +2,8 @@ NEW AUTO 3,1 #include +int testf4(int, int); + int testf1() { puts("testf1 called!"); int r = 1029; @@ -19,7 +21,7 @@ int testf2() { void testf3(char *msg) { puts(msg); - return; + return; //not required just for testing } int testf4(int arg1, int arg2) {