From 45d654382a77fa9763acb6a09491b0d86fe90d2c Mon Sep 17 00:00:00 2001 From: burniouf Date: Wed, 30 Jun 2021 21:09:07 +0200 Subject: [PATCH] BugFix: IPCONFIG, STAT, EDIT, CIFS --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes A2osX.S.QC.txt | 24 ++++- BIN/EDIT.S.BUF.txt | 110 +++++++++++----------- BIN/EDIT.S.FILE.txt | 73 ++++++++------- BIN/EDIT.S.SCRN.txt | 102 ++++++++++----------- BIN/IPCONFIG.S.DHCP.txt | 78 +++++++--------- BIN/IPCONFIG.S.ETC.txt | 45 +++++---- BIN/IPCONFIG.S.txt | 31 ++++++- BIN/STAT.S.txt | 16 ++-- INC/NET.SMB.I.txt | 1 + LIB/LIBCIFS.S.IO.txt | 193 ++++++++++++++++++++++++++------------- LIB/LIBCIFS.S.txt | 82 ++++++++++++++++- SHARED/X.CPMVRM.G.txt | 8 +- 13 files changed, 477 insertions(+), 286 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d58a9fa8a09479593702a011be62041892cf9e9c..b6a14d12ed4afc31bf35d7f717a3f7e59d498acb 100644 GIT binary patch delta 47829 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 delta 47011 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 MSG.INIT1 diff --git a/BIN/EDIT.S.BUF.txt b/BIN/EDIT.S.BUF.txt index 01ba7ff6..37f995a3 100644 --- a/BIN/EDIT.S.BUF.txt +++ b/BIN/EDIT.S.BUF.txt @@ -11,41 +11,41 @@ BUF.InsertA sta TmpByte >LDYAI 1 jsr BUF.BufPtrSetup bcs .9 - + jsr BUF.MoveForwardTail - + .2 lda TmpByte sta (BufPtr) jmp SCRN.UnSaved -.8 clc +.8 clc .9 rts *-------------------------------------- BUF.InsertTAB >LDA.G FileX and #3 0-3 eor #$3 3-0 - + inc sta TmpByte - + jsr BUF.ComputeCOffset tya sec adc TmpByte bcs .8 - + ldy TmpByte lda #0 jsr BUF.BufPtrSetup bcs .9 - + jsr BUF.MoveForwardTail - + lda #C.SPACE ldy TmpByte dey - + .2 sta (BufPtr),y dey @@ -54,24 +54,24 @@ BUF.InsertTAB >LDA.G FileX jmp SCRN.UnSaved .8 stz TmpByte - clc -.9 rts + clc +.9 rts *-------------------------------------- BUF.DelCharAtCursor lda BUF.COffset clc >ADC.G BufBase sta BufPtrDst - + lda BUF.COffset+1 >ADC.G BufBase+1 sta BufPtrDst+1 - + >LDYA BufPtrDst iny bne .1 inc - + .1 >STYA BufPtr lda (BufPtrDst) @@ -82,7 +82,7 @@ BUF.DelCharAtCursor lda FileLen bne .5 dec FileLen+1 -.5 dec FileLen +.5 dec FileLen jsr BUF.ResetSel pla Get back deleted char @@ -99,45 +99,46 @@ BUF.InsertClipboard jsr BUF.ComputeCOffset - >LDYA.G ClipBoardLen + >LDYA.G ClipBoardLen jsr BUF.BufPtrSetup bcs .9 jsr BUF.MoveForwardTail - + >LDA.G ClipBoardLen eor #$ff tax - + iny lda (pData),y ClipBoardLen+1 eor #$ff pha - + ldy #0 - + .1 inx bne .2 - + pla inc beq .3 - + pha - + .2 lda (ClipboardPtr),y sta (BufPtr),y iny bne .1 + inc ClipboardPtr+1 inc BufPtr+1 bra .1 - + .3 jsr BUF.ResetSel jsr SCRN.UpdateStatusBar jmp SCRN.UnSaved - -.8 clc + +.8 clc .9 rts *-------------------------------------- BUF.DelSel jsr BUF.GetSelLen @@ -244,7 +245,7 @@ BUF.CopyClipboard lda (pData),y eor #$ff pha - + ldy #0 .1 inx @@ -277,6 +278,7 @@ BUF.CopyAddY tya adc BufPtr sta BufPtr bcc .2 + inc BufPtr+1 .2 rts *-------------------------------------- @@ -285,7 +287,7 @@ BUF.MoveBackTail lda BufPtr+1 pha - + .1 lda (BufPtr),y sta (BufPtrDst),y beq .8 @@ -299,50 +301,50 @@ BUF.MoveBackTail .8 pla sta BufPtr+1 - + rts *-------------------------------------- -BUF.MoveForwardTail +BUF.MoveForwardTail ldy #0 ldx #0 - -.1 lda (BufPtr),y + +.1 lda (BufPtr),y beq .2 iny bne .1 - + inx inc BufPtr+1 inc BufPtrDst+1 bra .1 - + .2 txa eor #$ff pha tya eor #$ff tax will move tail len+1 - + .3 lda (BufPtr),y sta (BufPtrDst),y inx bne .4 - + pla inc beq .8 - + pha - + .4 tya bne .5 - + dec BufPtr+1 dec BufPtrDst+1 - + .5 dey bra .3 @@ -389,7 +391,7 @@ BUF.GetLineAX sta BUF.TmpLine1 Requested Line stz BUF.TmpLine2 stz BUF.TmpLine2+1 - + stz BUF.LOffset stz BUF.LOffset+1 @@ -403,6 +405,7 @@ BUF.GetLineAX sta BUF.TmpLine1 Requested Line cmp #C.CR beq .3 + iny bne .2 @@ -419,6 +422,7 @@ BUF.GetLineAX sta BUF.TmpLine1 Requested Line adc BufPtr sta BufPtr bcc .5 + inc BufPtr+1 .5 tya @@ -426,10 +430,12 @@ BUF.GetLineAX sta BUF.TmpLine1 Requested Line adc BUF.LOffset sta BUF.LOffset bcc .6 + inc BUF.LOffset+1 .6 inc BUF.TmpLine2 bne .1 + inc BUF.TmpLine2+1 bra .1 @@ -477,7 +483,7 @@ BUF.CheckSelected iny lda (pData),y sbc BUF.COffset+1 -* CC:SelEnd < COffset +* CC:SelEnd < COffset .9 lda #0 ror $80 = selected rts @@ -487,7 +493,7 @@ BUF.GetSelLen ldy #SelEnd sec ldy #SelStart sbc (pData),y - + sta SelLen tax ldy #SelEnd+1 @@ -508,33 +514,33 @@ BUF.GetSelLen ldy #SelEnd .9 sec rts *-------------------------------------- -* in : Y,A = cnt to insert at COffset +* in : Y,A = cnt to insert at COffset *-------------------------------------- BUF.BufPtrSetup >STYA TmpLen tya clc - + adc FileLen sta FileLen - + tay - + lda TmpLen+1 adc FileLen+1 - + sta FileLen+1 cpy BufLen sbc BufLen+1 - + bcc .8 jsr BUF.BufPtr.Realloc bcs .9 jsr BUF.ComputeCOffset - + .8 lda BUF.COffset clc >ADC.G BufBase @@ -552,7 +558,7 @@ BUF.BufPtrSetup >STYA TmpLen lda BufPtr+1 adc TmpLen+1 sta BufPtrDst+1 - + clc .9 rts *-------------------------------------- @@ -565,7 +571,7 @@ BUF.BufPtr.Realloc sta BufLen+1 >PUSHA >PUSHBI 0 - + >SYSCALL Realloc bcs .9 diff --git a/BIN/EDIT.S.FILE.txt b/BIN/EDIT.S.FILE.txt index 840e551a..e2b9f0d3 100644 --- a/BIN/EDIT.S.FILE.txt +++ b/BIN/EDIT.S.FILE.txt @@ -89,62 +89,57 @@ FILE.Load.TXT stz FileLen ldx #S.FI.T.TXT jsr FILE.OpenTypeX - bcs .99 + bcs .9 >PUSHA >PUSHEA.G STATBUF >SYSCALL FStat - bcs .99 + bcs .9 jsr FILE.GetBuffer -.99 bcs .9 + bcs .9 -.1 ldy #254 - jsr FILE.ReadY +.1 ldy #0 + jsr FILE.ReadY read 256 bcs .7 - lda #0 - sta (ZPPTR1),y Y = line len - - ldx #0 + sty TmpCount Count read + ldy #0 - lda (ZPPTR1) - beq .8 +.2 lda (ZPPTR1),y - eor #C.LF - bne .2 + cmp #C.LF + bne .3 phy - + lda #2 >STA.G FileType ply - iny - -.2 lda (ZPPTR1),y - beq .4 + bra .5 - sta (BufPtr) +.3 sta (BufPtr) inc BufPtr - bne .3 + bne .4 inc BufPtr+1 -.3 inx - iny - bra .2 - -.4 txa - clc - adc FileLen - sta FileLen - bcc .1 +.4 cmp #C.CR + beq .5 + + inc FileLen + bne .5 inc FileLen+1 - bra .1 + +.5 dec TmpCount + beq .1 + + iny + bra .2 .7 cmp #MLI.E.EOF bne .9 @@ -153,7 +148,8 @@ FILE.Load.TXT stz FileLen sta (BufPtr) clc - .HS B0 BCS + rts + .9 sec rts *-------------------------------------- @@ -194,7 +190,8 @@ FILE.Load.ASM stz FileLen sta (BufPtr) clc - .HS B0 BCS + rts + .9 sec .99 rts *-------------------------------------- @@ -249,13 +246,16 @@ FILE.Load.ASM.Decode FILE.Load.ASM.2Buf phy phx + sta (BufPtr) inc BufPtr bne .1 + inc BufPtr+1 .1 inc FileLen bne .8 + inc FileLen+1 lda FileLen+1 @@ -275,6 +275,7 @@ FILE.Load.ASM.2Buf sta BufPtr+1 .8 clc + .9 plx ply rts @@ -501,9 +502,13 @@ FILE.ReadY phy >PUSHB TmpIndex >PUSHW ZPPTR1 - ply lda #0 - >PUSHYA + ply + bne .1 + + inc + +.1 >PUSHYA >SYSCALL FRead rts *-------------------------------------- diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt index 110f5abb..248171e1 100644 --- a/BIN/EDIT.S.SCRN.txt +++ b/BIN/EDIT.S.SCRN.txt @@ -15,15 +15,15 @@ SCRN.Init >PUSHW L.SEQ.INIT SCRN.Repaint lda #$ff >STA.G bUpdateTop >STA.G bUpdateStatus - + jsr SCRN.UpdateTopBar bcs SCRN.Init.9 - + jsr SCRN.GotoCurXCurY bcs SCRN.Init.9 jmp SCRN.UpdateMainAndStatus - + SCRN.Init.9 rts *-------------------------------------- SCRN.Home lda #0 @@ -55,7 +55,7 @@ SCRN.UnSaved >LDA.G bUnSaved SCRN.UpdateTopBar >LDA.G bUpdateTop bmi SCRN.UpdateTopBar.1 -SCRN.UpdateTopBar.8 +SCRN.UpdateTopBar.8 clc rts @@ -64,56 +64,56 @@ SCRN.UpdateTopBar.1 sta (pData),y jsr SCRN.LineBufInitBar - + ldx #SEQ.CURSAVE-SEQS jsr SCRN.SEQS.ToLineBuf - + ldy #1 jsr SCRN.LineBufGotoLineY bcs .9 - + >LDA.G ScreenW tax - + lda #C.SPACE - + .1 jsr SCRN.ToLineBuf dex bne .1 - + lda #C.CR jsr SCRN.ToLineBuf - + >PUSHW LineBufPtr >PUSHW L.MSG.TOPBAR >PUSHW A2osX.KVER - + >LDA.G hFileName >SYSCALL GetMemPtr >PUSHYA >LDA.G FileType tax >PUSHW L.MSG.FILETYPES,x - + >PUSHBI 6 jsr SCRN.LineBufSprintf bcs .9 >LDA.G bUnSaved beq .2 - + lda #'!' jsr SCRN.ToLineBuf - + .2 ldx #SEQ.CURRESTORE-SEQS jsr SCRN.SEQS.ToLineBuf - + jmp SCRN.LineBufOut - -.8 clc + +.8 clc .9 rts *-------------------------------------- -SCRN.UpdateViewPort +SCRN.UpdateViewPort stz bRepaint .1 >LDA.G FileX @@ -127,7 +127,7 @@ SCRN.UpdateViewPort .2 bit bRepaint bmi .30 - + .21 >LDA.G ScreenX clc >ADC.G ScreenW @@ -142,7 +142,7 @@ SCRN.UpdateViewPort .3 bit bRepaint .30 bmi .6 - + .31 >LDA.G FileY+1 tax dey @@ -158,13 +158,13 @@ SCRN.UpdateViewPort bit bRepaint bmi .31 skip scroll, will be repainted later - jsr SCRN.scrollDn ...and move content one line down + jsr SCRN.scrollDn ...and move content one line down bcc .31 rts .4 bit bRepaint bmi .6 - + .41 >LDA.G ScreenY+1 tax dey @@ -178,7 +178,7 @@ SCRN.UpdateViewPort .5 >CMP.G FileY A,X = screen bottom txa - iny FileY > screen bottom ? + iny FileY > screen bottom ? sbc (pData),y bcs .6 CS : fileY>= screen bottom @@ -202,7 +202,7 @@ SCRN.UpdateViewPort jsr BUF.ComputeCOffset jsr SCRN.GotoCurXCurY - + bit bRepaint bmi SCRN.UpdateMain @@ -220,7 +220,7 @@ SCRN.UpdateMain >LDA.G ScreenY stz TmpByte >LDA.G ViewPortH bra SCRN.UpdateMain.1 - + SCRN.UpdateLast >LDA.G ViewPortHm1 sta TmpByte clc @@ -230,11 +230,11 @@ SCRN.UpdateLast >LDA.G ViewPortHm1 lda (pData),y adc #0 sta TmpIndex+1 - + lda #1 SCRN.UpdateMain.1 sta TmpCount - + .1 lda TmpIndex ldx TmpIndex+1 @@ -291,10 +291,10 @@ SCRN.UpdateCurrentLine .1 jsr BUF.GetLineAX bcc .2 - + jsr SCRN.LineBufInitEdit jmp SCRN.UpdateLineAtBufPtr.EOL - + .2 phy >LDA.G CurY ply @@ -309,14 +309,14 @@ SCRN.UpdateLineAtALenY sta TmpLen+1 jsr SCRN.LineBufInitEdit - + ldy TmpLen+1 jsr SCRN.LineBufGotoLineY >LDA.G ScreenX cmp TmpLen bcs SCRN.UpdateLineAtBufPtr.EOL - + tay clc adc BUF.LOffset @@ -332,7 +332,7 @@ SCRN.UpdateLineAtALenY bcc .2 inc BufPtr+1 -.2 +.2 SCRN.UpdateLineAtBufPtr >LDA.G ScreenW @@ -357,12 +357,12 @@ SCRN.UpdateLineAtBufPtr beq .50 cmp #'%' bne .51 - + .50 pha lda #'\' jsr SCRN.ToLineBuf pla - + .51 jsr SCRN.ToLineBuf inc BufPtr bne .6 @@ -407,15 +407,15 @@ SCRN.ToggleSel.RTS SCRN.UpdateStatusBar >LDA.G bUpdateStatus bpl SCRN.ToggleSel.RTS - - lda #0 + + lda #0 sta (pData),y jsr SCRN.ResetStatusBar >PUSHW LineBufPtr >PUSHW L.MSG.STATUSBAR - + >PUSHW FileLen >PUSHW BUF.COffset @@ -436,7 +436,7 @@ SCRN.UpdateStatusBar txa >PUSHA - + >PUSHBI 7 jsr SCRN.LineBufSprintf bcs .9 @@ -451,7 +451,7 @@ SCRN.UpdateStatusBar *-------------------------------------- SCRN.ResetStatusBar jsr SCRN.LineBufInitBar - + ldx #SEQ.CURSAVE-SEQS jsr SCRN.SEQS.ToLineBuf @@ -461,13 +461,13 @@ SCRN.ResetStatusBar >LDA.G ScreenW tax - + lda #C.SPACE - + .1 jsr SCRN.ToLineBuf dex bne .1 - + lda #C.CR jmp SCRN.ToLineBuf *-------------------------------------- @@ -481,7 +481,7 @@ SCRN.CursorAdjust .8 rts *-------------------------------------- -SCRN.GotoCurXCurY +SCRN.GotoCurXCurY ldy #CurX lda (pData),y tax @@ -498,7 +498,7 @@ SCRN.GotoXY >PUSHW L.MSG.GOTOXY inc >PUSHA >PUSHBI 2 - + >SYSCALL PrintF rts *-------------------------------------- @@ -558,11 +558,11 @@ SCRN.LineBufInitLBL phx ldx #SEQ.DLG.LBL-SEQS bra SCRN.LineBufInit -SCRN.LineBufInitTB +SCRN.LineBufInitTB phx ldx #SEQ.DLG.TB-SEQS bra SCRN.LineBufInit -SCRN.LineBufInitBut +SCRN.LineBufInitBut phx ldx #SEQ.DLG.BUT-SEQS bra SCRN.LineBufInit @@ -573,7 +573,7 @@ SCRN.LineBufInitEdit SCRN.LineBufInit >LDYA.G LineBufBase >STYA LineBufPtr - + jsr SCRN.SEQS.ToLineBuf plx rts @@ -598,16 +598,16 @@ SCRN.LineBufGotoLineY SCRN.LineBufSprintf >SYSCALL SPrintF bcs .9 - + tya clc adc LineBufPtr sta LineBufPtr bcc .9 - + inc LineBufPtr+1 clc - + .9 rts *-------------------------------------- SCRN.ToLineBuf sta (LineBufPtr) diff --git a/BIN/IPCONFIG.S.DHCP.txt b/BIN/IPCONFIG.S.DHCP.txt index b0436740..dd59ac32 100644 --- a/BIN/IPCONFIG.S.DHCP.txt +++ b/BIN/IPCONFIG.S.DHCP.txt @@ -29,7 +29,6 @@ DHCP.INIT lda IPCFG+S.NETCFG.STATUS .99 >LDYA L.MSG.DHCP.NA >SYSCALL PutS - lda #0 sec rts *-------------------------------------- @@ -83,6 +82,7 @@ DHCP.RUN.ROFFER jsr DHCP.RUN.SKT.RECV .1 jsr CheckDHCPOffer bcs DHCP.RUN.ROFFER + lda #S.IPCFG.STATUS.ROFFER sta IPCFG @@ -193,20 +193,6 @@ DHCP.QUIT lda hSocket CheckDHCPOffer jsr CheckDHCPXID bcs .9 - lda ZPFrameBase - clc - adc #S.DHCP.OPTIONS - sta ZPFramePtr - - lda ZPFrameBase+1 - adc /S.DHCP.OPTIONS - sta ZPFramePtr+1 - lda (ZPFramePtr) - cmp #S.DHCP.OPTIONS.MSGTYPE - bne .9 - - ldy #2 - lda (ZPFramePtr),y cmp #S.DHCP.OPTIONS.DHCPOffer bne .9 @@ -250,7 +236,7 @@ CheckDHCPOffer jsr CheckDHCPXID .6 lda (ZPFramePtr) sec - adc ZPFramePtr add option len + 1 + adc ZPFramePtr add option len + 1 sta ZPFramePtr bcc .7 @@ -260,15 +246,16 @@ CheckDHCPOffer jsr CheckDHCPXID cmp #S.DHCP.OPTIONS.END beq .8 - jsr GetDHCPOption May override SVRIP + jsr GetDHCPOption May override SVRIP bra .5 -.8 jsr CS.RUN.DISCARD - clc - rts - -.9 jsr CS.RUN.DISCARD - sec +.8 clc + .HS B0 BCS +.9 sec + php + lda hFrame + >SYSCALL FreeMem + plp rts *-------------------------------------- GetDHCPOption cmp #S.DHCP.OPTIONS.MASK @@ -349,33 +336,16 @@ GetDHCPOption.CopyIP CheckDHCPAck jsr CheckDHCPXID bcs .9 - lda ZPFrameBase - clc - adc #S.DHCP.OPTIONS - sta ZPFramePtr - - lda ZPFrameBase+1 - adc /S.DHCP.OPTIONS - sta ZPFramePtr+1 - lda (ZPFramePtr) - cmp #S.DHCP.OPTIONS.MSGTYPE - bne .9 - - ldy #2 - lda (ZPFramePtr),y cmp #S.DHCP.OPTIONS.DHCPAck bne .9 - jsr CS.RUN.DISCARD - clc - rts - -.9 jsr CS.RUN.DISCARD - sec - rts -*-------------------------------------- -CS.RUN.DISCARD lda hFrame +.8 clc + .HS B0 BCS +.9 sec + php + lda hFrame >SYSCALL FreeMem + plp rts *-------------------------------------- CheckDHCPXID ldy #S.DHCP.XID+3 @@ -389,6 +359,22 @@ CheckDHCPXID ldy #S.DHCP.XID+3 dex bpl .1 + lda ZPFrameBase + clc + adc #S.DHCP.OPTIONS + sta ZPFramePtr + + lda ZPFrameBase+1 + adc /S.DHCP.OPTIONS + sta ZPFramePtr+1 + + lda (ZPFramePtr) + cmp #S.DHCP.OPTIONS.MSGTYPE + bne .9 + + ldy #2 + lda (ZPFramePtr),y + clc rts diff --git a/BIN/IPCONFIG.S.ETC.txt b/BIN/IPCONFIG.S.ETC.txt index b4d40a51..f6ef7fe0 100644 --- a/BIN/IPCONFIG.S.ETC.txt +++ b/BIN/IPCONFIG.S.ETC.txt @@ -4,9 +4,12 @@ NEW ETC.ReadFiles >LDYAI 256 >SYSCALL GetMem bcc .1 + rts + .1 >STYA ZPTmpPtr1 stx CFG.hBuf1 + >LDYA L.HOSTNAME jsr CFG.Read.PrintF jsr CFG.Read.HOSTNAME @@ -55,23 +58,24 @@ CFG.Read.HOSTNAME jsr CFG.Read.Open jsr CFG.Read.Result bcs .9 + .1 jsr CFG.Read.GetS bcs .8 - lda (ZPTmpPtr1) - beq .1 empty line... - cmp #'# - beq .1 comment... + ldy #0 .2 lda (ZPTmpPtr1),y sta IPCFG+S.IPCFG.HOSTNAME,y beq .8 end of name + iny cpy #15 bne .2 + .8 clc .HS B0 BCS .9 sec + jmp CFG.Read.Close *-------------------------------------- CFG.Read.TCPIP.CONF @@ -83,12 +87,6 @@ CFG.Read.TCPIP.CONF .1 jsr CFG.Read.GetS bcs .8 - lda (ZPTmpPtr1) - beq .1 empty line... - - cmp #'#' - beq .1 comment... - ldy #$ff .2 iny @@ -143,6 +141,7 @@ CFG.Read.TCPIP.CONF .8 clc .HS B0 BCS .9 sec + jmp CFG.Read.Close .80 jmp (J.CFG.Keywords,x) @@ -202,21 +201,27 @@ CFG.Read.dnsdomain adc ZPTmpPtr1 sta ZPTmpPtr1 bcc .1 + inc ZPTmpPtr1+1 .1 ldy #$ff + .2 iny lda (ZPTmpPtr1),y sta IPCFG+S.IPCFG.DOMAIN,y beq .8 + cpy #K.DNS.MAXLEN bne .2 + lda #0 sta IPCFG+S.IPCFG.DOMAIN,y + .8 rts *-------------------------------------- CFG.Read.HOSTS stz CFG.hBuf2 stz CFG.hBuf3 + >LDYA L.HOSTS jsr CFG.Read.Open jsr CFG.Read.Result @@ -239,12 +244,6 @@ CFG.Read.HOSTS stz CFG.hBuf2 .1 jsr CFG.Read.GetS bcs .8 - lda (ZPTmpPtr1) - beq .1 empty line... - - cmp #'# - beq .1 comment... - jsr CFG.Read.HOSTS.Scan bcs .1 @@ -267,8 +266,10 @@ CFG.Read.HOSTS stz CFG.hBuf2 pha lda CFG.hBuf3 beq .90 + >SYSCALL FreeMem .90 lda CFG.hBuf2 + beq .91 >SYSCALL FreeMem @@ -350,7 +351,17 @@ CFG.Read.GetS >PUSHB CFG.hCfgFile >PUSHW ZPTmpPtr1 >PUSHWI 255 >SYSCALL FGetS - rts + bcs .9 + + lda (ZPTmpPtr1) + beq CFG.Read.GetS empty line... + + cmp #'#' + beq CFG.Read.GetS comment... + + clc + +.9 rts *-------------------------------------- MAN SAVE usr/src/bin/ipconfig.s.etc diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index 085baf85..b512bfb9 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -127,6 +127,7 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG >STYA pIPCFG ldy #S.IPCFG-1 + .1 lda (pIPCFG),y sta IPCFG,y dey @@ -134,11 +135,14 @@ CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG lda IPCFG+S.NETCFG.DevID bne CS.RUN.SETUP + >LDYA L.MSG.NODEV >SYSCALL PutS + lda #MLI.E.NODEV sec rts +*-------------------------------------- CS.RUN.SETUP .1 inc ArgIndex lda ArgIndex @@ -189,6 +193,7 @@ CS.RUN.SETUP lda bETC bpl .6 + jsr ETC.ReadFiles .6 lda bDHCP @@ -237,6 +242,7 @@ CS.RUN.DUMPNIC >PUSHW L.MSG1.DEV ldy #DCB.NIC+S.DCB.NIC.MAC ldx #6 + .1 lda (pData),y >PUSHA iny @@ -252,7 +258,9 @@ CS.RUN.DUMPNIC >PUSHW L.MSG1.DEV >LDA.G DCB.NIC+S.DCB.NIC.FLAGS and #S.DCB.NIC.FLAGS.ARPOFFLOAD beq .2 + lda #1 + .2 >PUSHA >PUSHBI 1 @@ -266,8 +274,8 @@ CS.RUN.DUMPNIC >PUSHW L.MSG1.DEV beq .3 lda #1 -.3 - >PUSHA + +.3 >PUSHA >PUSHBI 1 >SYSCALL PrintF @@ -275,10 +283,11 @@ CS.RUN.DUMPNIC >PUSHW L.MSG1.DEV >LDA.G DCB.NIC+S.DCB.NIC.LINK and #S.DCB.NIC.LINK.OK bne CS.RUN.LINK + >LDYA L.MSG1.LINK.KO >SYSCALL PutS bra CS.RUN.DUMPIP - +*-------------------------------------- CS.RUN.LINK >LDYA L.MSG1.LINK.OK >SYSCALL PutS @@ -289,18 +298,23 @@ CS.RUN.LINK >LDYA L.MSG1.LINK.OK >LDA.G DCB.NIC+S.DCB.NIC.SPEED and #$0F tax + .4 phx lda #'0' >SYSCALL PutChar plx dex bne .4 + >LDA.G DCB.NIC+S.DCB.NIC.LINK and #S.DCB.NIC.LINK.FD bne .5 + >LDYA L.MSG1.DPLX.HD bra .6 + .5 >LDYA L.MSG1.DPLX.FD + .6 >SYSCALL PutS CS.RUN.DUMPIP >PUSHW L.MSG2 @@ -310,14 +324,18 @@ CS.RUN.DUMPIP >PUSHW L.MSG2 lda IPCFG+S.NETCFG.STATUS and #S.IPCFG.STATUS.OK beq .11 + >LDYA L.MSG2.C bra .10 + .11 >LDYA L.MSG2.U + .10 >SYSCALL PutS >PUSHW L.MSG2.DHCPSRVR ldx #0 + .2 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x inx cpx #4 @@ -330,10 +348,12 @@ CS.RUN.DUMPIP >PUSHW L.MSG2 >PUSHW L.MSG2.IPMASK ldx #0 IP/MASK + .3 >PUSHB IPCFG+S.IPCFG.IP,x inx cpx #8 bne .3 + >PUSHBI 8 >SYSCALL PrintF @@ -341,20 +361,24 @@ CS.RUN.DUMPIP >PUSHW L.MSG2 >PUSHW L.MSG2.GW ldx #0 + .4 >PUSHB IPCFG+S.IPCFG.GW,x inx cpx #4 bne .4 + >PUSHBI 4 >SYSCALL PrintF >PUSHW L.MSG2.DNS ldx #0 + .5 >PUSHB IPCFG+S.IPCFG.DNS1,x inx cpx #8 bne .5 + >PUSHBI 8 >SYSCALL PrintF @@ -365,6 +389,7 @@ CS.RUN.DUMPIP >PUSHW L.MSG2 >PUSHBI 4 >SYSCALL PrintF + lda #0 tell TSKMGR that all done ok, but sec we do not want to stay in memory rts diff --git a/BIN/STAT.S.txt b/BIN/STAT.S.txt index 2c48aa1d..795676f1 100644 --- a/BIN/STAT.S.txt +++ b/BIN/STAT.S.txt @@ -70,6 +70,7 @@ CS.RUN dec bAll lda ArgIndex >SYSCALL ArgV bcs .3 + >STYA ZPPtr1 lda (ZPPtr1) @@ -106,7 +107,7 @@ CS.RUN dec bAll bit bAll bmi .7 - + jsr CS.RUN.PRINT bcs .9 @@ -123,14 +124,14 @@ CS.RUN.RTS rts CS.RUN.PRINT bit bAccess bpl .1 - >LDYA.G ATTR + >LEA.G AttrBuf >SYSCALL PutS bcs CS.RUN.RTS .1 bit bMod bpl .2 - >LDYA.G MOD + >LEA.G MOD >SYSCALL PutS bcs CS.RUN.RTS @@ -211,7 +212,7 @@ CS.RUN.DUMP lda ArgFile >SYSCALL FreeMem >PUSHW L.MSG.Access - >PUSHEA.G ATTR + >PUSHEA.G AttrBuf >PUSHBI 2 >SYSCALL PrintF @@ -244,7 +245,7 @@ CS.RUN.CONVERT jsr Access2CSTR Access2CSTR ldy #S.STAT.P.ACCESS lda (pData),y - ldy #ATTR+15 + ldy #AttrBuf+15 ldx #15 .1 lsr @@ -431,13 +432,12 @@ MSG.U .AZ "%u\r\n" .OR 0 DS.START StatBuf .BS S.STAT -ATTR .BS 17 +AttrBuf .BS 17 MOD .BS 11 drwxrwxrwx + \0 TIME.Access .BS 20 TIME.Mod .BS 20 TIME.Create .BS 20 -DS.END - .ED +DS.END .ED *-------------------------------------- MAN SAVE usr/src/bin/stat.s diff --git a/INC/NET.SMB.I.txt b/INC/NET.SMB.I.txt index ed2d805e..8f68eae5 100644 --- a/INC/NET.SMB.I.txt +++ b/INC/NET.SMB.I.txt @@ -15,6 +15,7 @@ S.SMB.H.CMD.FLUSH .EQ $05 S.SMB.H.CMD.DELETE .EQ $06 S.SMB.H.CMD.RENAME .EQ $07 S.SMB.H.CMD.SEEK .EQ $12 +S.SMB.H.CMD.OPEN.ANDX .EQ $2D S.SMB.H.CMD.READ.ANDX .EQ $2E S.SMB.H.CMD.WRITE.ANDX .EQ $2F S.SMB.H.CMD.TRANS2 .EQ $32 diff --git a/LIB/LIBCIFS.S.IO.txt b/LIB/LIBCIFS.S.IO.txt index 92fdca91..5a612195 100644 --- a/LIB/LIBCIFS.S.IO.txt +++ b/LIB/LIBCIFS.S.IO.txt @@ -49,7 +49,7 @@ CIFS2.Stat jsr ReadSocket jsr GetRespData jsr CheckSMBStatus - + lda #MLI.E.INVPATH Return this for stat() match ProDOS Behavior bcs .90 @@ -67,15 +67,15 @@ CIFS2.Stat jsr ReadSocket .9 jsr Exit.NODATA beq .99 - + .90 >POP 4 -.99 rts +.99 rts *-------------------------------------- CIFS.MKDir >STYA pPath resolved path * jsr ClearSocket - + jsr GetCtx jsr RequestT2SetupX @@ -116,7 +116,7 @@ CIFS2.MKDir jsr ReadSocket .9 jsr Exit.NODATA beq .99 - + .90 >POP 4 .99 rts @@ -282,7 +282,7 @@ CIFS2.ReadDir jsr GetPFD jsr CIFS2.ReadDir.FillBuf jsr Exit.OK - + >LDYA BufPtr ldx hBuf @@ -327,12 +327,12 @@ CIFS2.ReadDir.GetBuf jsr AddA2Ptr1 lda (ZPPtr1) Filename Len - sec + sec +\0 jsr AddA2Ptr2 lda (ZPPtr1) Filename Len - inc - sec + inc +1 skip Filename Len + sec +\0 jsr AddA2Ptr1 dex @@ -363,31 +363,94 @@ CIFS2.ReadDir.FillBuf .10 lda (ZPRespPtr),y tax -.1 jsr FileInfo2StatBuf +.1 phx + + jsr FileInfo2StatBuf lda #22 - sec skip Filename Len + clc jsr AddA2Ptr1 + + lda (ZPPtr1) + tax Save Filename Len + + inc ZPPtr1 Skip Filename Len + bne .2 + + inc ZPPtr1+1 - ldy #$ff +.2 ldy #$ff .3 iny lda (ZPPtr1),y sta (ZPPtr2),y bne .3 - tya + txa sec jsr AddA2Ptr1 + txa + sec + sbc #4 "x.EXT" ? + bcc .7 + + tay + + lda (ZPPtr2),y + cmp #'.' + bne .7 + + ldx #0 + +.4 phy Y = '.' offset + + phx + +.5 lda PRODOS.FT.TXT,x + iny + cmp (ZPPtr2),y + bne .6 + + inx + txa + and #3 + bne .5 + + pla + lsr + lsr + tax + lda PRODOS.FT.HEX,x + sta StatBuf+S.STAT.P.TYPE + + ply + lda #0 + sta (ZPPtr2),y + tya + tax + bra .7 + +.6 pla + clc + adc #4 + tax + + ply + + cpx #PRODOS.FT.END + bne .4 + +.7 txa sec +\0 jsr AddA2Ptr2 - + jsr StatBuf2Ptr2 jsr AddSTAT2Ptr2 +.8 plx dex bne .1 @@ -428,6 +491,11 @@ CIFS2.ChOwn *-------------------------------------- CIFS.FOpen >STYA pPath resolved path + ldy #2 + lda (pStack),y TYPE + + jsr ProDOS2TypeLess + jsr GetCtx ldx #S.SMB.H.CMD.NT.CREATE.ANDX @@ -457,10 +525,9 @@ CIFS.FOpen >STYA pPath resolved path sta (ZPReqPtr),y lda #0 - ror iny ByteCountOfs+1 sta (ZPReqPtr),y - + jsr SetReqLen ldx #1 FILE_OPEN @@ -469,15 +536,15 @@ CIFS.FOpen >STYA pPath resolved path lda (pStack),y bit #O.WRONLY beq .8 - + bit #O.CREATE bne .3 - + ldx #3 FILE_OPEN_IF .3 bit #O.APPEND bne .8 - + ldx #5 FILE_OVERWRITE_IF .8 txa @@ -502,7 +569,7 @@ CIFS2.FOpen jsr ReadSocket jsr CIFS.NewFD bcs .91 - + ldy #S.NETBIOS+S.SMB.H+6 FileID lda (ZPRespPtr),y pha @@ -514,7 +581,7 @@ CIFS2.FOpen jsr ReadSocket dey pla sta (pFD),y - + ldy #3 fopen flags lda (pStack),y bit #O.APPEND @@ -522,24 +589,24 @@ CIFS2.FOpen jsr ReadSocket ldy #S.NETBIOS+S.SMB.H+56+3 EOF ldx #4 - + .1 lda (ZPRespPtr),y pha dey dex bne .1 - + ldx #4 ldy #S.FD.REG.REF+2 - + .2 pla sta (pFD),y iny dex bne .2 - + bra .8 - + .3 jsr CIFS.Seek0 .8 ldy #4 path @@ -553,12 +620,12 @@ CIFS2.FOpen jsr ReadSocket >PUSHB hFD >SYSCALL2 mknod -.91 jsr Exit.KO +.91 jsr Exit.KO bra .90 .9 jsr Exit.NODATA beq .99 - + .90 >POP 6 .99 rts @@ -615,7 +682,7 @@ CIFS2.FClose sta hFILE lda hFILE jsr CIFS.CloseDir - + jmp Exit.OK .9 jmp Exit.NODATA @@ -644,24 +711,24 @@ CIFS.FRead ldy #4 hNod jsr ReqSetupPtr2 jsr CIFS.RWGetFidOfs - + ldy #1 DataLen HI lda (pStack),y beq .2 - + lda #0 ldx #1 256 bytes to read bra .3 - -.2 lda (pStack) DataLen LO + +.2 lda (pStack) DataLen LO ldx #0 - + .3 ldy #S.NETBIOS+S.SMB.H+11 MaxCountOfBytesToReturn sta (ZPReqPtr),y iny txa sta (ZPReqPtr),y - + jsr SetReqLen jsr WriteSocket @@ -684,9 +751,9 @@ CIFS2.FRead jsr ReadSocket iny ora (ZPRespPtr),y bne .10 - + jsr Exit.OK - + lda #MLI.E.EOF sec bra .90 @@ -717,7 +784,7 @@ CIFS2.FRead jsr ReadSocket tax jsr CIFS.CopyX - + ldy #S.NETBIOS+S.SMB.H+11 jsr CIFS2.RWSetOfsY @@ -731,7 +798,7 @@ CIFS2.FRead jsr ReadSocket lda (pStack),y dec sta (pStack),y - + ldy #3 DataPtr HI lda (pStack),y inc @@ -740,9 +807,9 @@ CIFS2.FRead jsr ReadSocket .2 dey DataLength LO lda (ZPRespPtr),y - + sta CIFS.Cnt - + lda #0 sta (pStack) DataLen LO @@ -752,9 +819,9 @@ CIFS2.FRead jsr ReadSocket lda (pStack),y ora (pStack) DataLen LO bne .8 - + >LDYA CIFS.Cnt - + bra .90 .8 jmp Sleep2 Back to CIFS.FRead for next chunk @@ -785,7 +852,7 @@ CIFS.FWrite ldy #4 hNod bne .1 jsr ReqSetupPtr2 - + jsr CIFS.RWGetFidOfs ldy #3 DataPtr HI @@ -840,7 +907,7 @@ CIFS.FWrite ldy #4 hNod plx jsr CIFS.CopyX - + jsr SetReqLen jsr WriteSocket @@ -881,7 +948,7 @@ CIFS2.FWrite jsr ReadSocket ldy #S.NETBIOS+S.SMB.H+5 Count LO lda (ZPRespPtr),y bne .1 - + inc CIFS.Cnt+1 bra .7 @@ -889,7 +956,7 @@ CIFS2.FWrite jsr ReadSocket lda #0 sta (pStack) DataLen LO - + .7 jsr Exit.OK ldy #1 DataLen HI @@ -897,12 +964,12 @@ CIFS2.FWrite jsr ReadSocket ora (pStack) DataLen LO bne .8 - + >LDYA CIFS.Cnt clc bra .90 -.8 jmp Sleep2 +.8 jmp Sleep2 .9 jsr Exit.NODATA beq .99 @@ -952,7 +1019,7 @@ CIFS.Remove >STYA pPath resolved path inc +1 for \0 jsr Add2ByteCount - + jsr SetReqLen jsr WriteSocket @@ -981,7 +1048,7 @@ CIFS.Rename >STYA pPath resolved src path * jsr ClearSocket jsr GetCTX - + ldx #S.SMB.H.CMD.RENAME jsr RequestSetupX @@ -1005,19 +1072,19 @@ CIFS.Rename >STYA pPath resolved src path inc +1 for BufferFormat inc +1 for \0 jsr Add2ByteCount - + lda (pStack) sta pPath ldy #1 lda (pStack),y sta pPath+1 - + .2 inc pPath skip /mount bne .3 - + inc pPath+1 - + .3 lda (pPath) cmp #'/' bne .2 @@ -1026,11 +1093,11 @@ CIFS.Rename >STYA pPath resolved src path jsr PutBytePtr2 jsr AppendPathPtr2 - + tya inc +1 for BufferFormat inc +1 for \0 - + jsr Add2ByteCount jsr SetReqLen @@ -1115,18 +1182,18 @@ CIFS2.RWSetOfsY phy ply iny Count HI lda (ZPRespPtr),y - + ldy #S.FD.REG.REF+3 adc (pFD),y sta (pFD),y bcc .8 - + iny lda (pFD),y inc sta (pFD),y bne .8 - + iny lda (pFD),y inc @@ -1141,18 +1208,18 @@ CIFS.CopyX ldy #0 iny dex bne .1 - + rts *-------------------------------------- CIFS.Seek0 ldx #4 ldy #S.FD.REG.REF+2 lda #0 - + .1 sta (pFD),y iny dex bne .1 - + rts *-------------------------------------- MAN diff --git a/LIB/LIBCIFS.S.txt b/LIB/LIBCIFS.S.txt index fd76990d..ce35a6c7 100644 --- a/LIB/LIBCIFS.S.txt +++ b/LIB/LIBCIFS.S.txt @@ -557,6 +557,69 @@ CIFS.CallBack bit CIFS.Status *-------------------------------------- .INB usr/src/lib/libcifs.io.s *-------------------------------------- +TypeLess2ProDOS +*-------------------------------------- +ProDOS2TypeLess tax + beq .8 + + ldx #0 + +.1 cmp PRODOS.FT.HEX,x + beq .4 + + inx + cpx #PRODOS.FT.TXT-PRODOS.FT.HEX + bne .1 + + pha + lsr + lsr + lsr + lsr + + ora #$30 + cmp #'9'+1 + bcc .2 + + adc #6 + +.2 sta PRODOS.FT.DFLT+1 + pla + and #$0F + + ora #$30 + cmp #'9'+1 + bcc .3 + + adc #6 + +.3 sta PRODOS.FT.DFLT+2 + +.4 txa + asl + asl + tax + + ldy #0 + +.5 iny + lda (pPath),y + bne .5 + + lda #'.' + sta (pPath),y + iny + +.6 lda PRODOS.FT.TXT,x + sta (pPath),y + beq .8 + + inx + iny + bra .6 + +.8 rts +*-------------------------------------- GetPFD tax phx @@ -913,8 +976,6 @@ FreeRespData.RTS rts *-------------------------------------- FileInfo2StatBuf - phx - ldx #S.STAT-1 .1 stz StatBuf,x @@ -953,9 +1014,7 @@ FileInfo2StatBuf lda /S.STAT.MODE.DIR sta StatBuf+S.STAT.MODE+1 -.8 plx - - rts +.8 rts *-------------------------------------- * YYYYYYYM MMM DDDDD * HHHHHmmm mmm SSSSS @@ -1069,6 +1128,19 @@ CIFS.BADCALL lda #MLI.E.BADCALL rts *-------------------------------------- CS.END +PRODOS.FT.HEX .HS 0406FAFCFDE2CBCCCFFF +PRODOS.FT.TXT .AZ "txt" + .AZ "bin" + .AZ "asm" + .AZ "bas" + .AZ "var" + .AZ "atk" + .AZ "pix" + .AZ "fon" + .AZ "pak" + .AZ "sys" +PRODOS.FT.END .EQ *-PRODOS.FT.TXT +PRODOS.FT.DFLT .AZ "$ " *-------------------------------------- SMBERR01 .DA #2,#3,#32 MLIERR01 .DA #MLI.E.FNOTFND,#MLI.E.PNOTFND,#MLI.E.OPEN diff --git a/SHARED/X.CPMVRM.G.txt b/SHARED/X.CPMVRM.G.txt index 0388977b..c7a1ba0a 100644 --- a/SHARED/X.CPMVRM.G.txt +++ b/SHARED/X.CPMVRM.G.txt @@ -5,7 +5,6 @@ NEW ArgCount .BS 1 bPause .BS 1 -hSrcFile .BS 1 hSrcFullPath .BS 1 Count .BS 2 RC .BS 1 @@ -13,8 +12,11 @@ RC .BS 1 .DO X.COPY.TO.DEST=1 hDstFileName .BS 1 hDstFullPath .BS 1 -hDstFile .BS 1 + bCopy .BS 1 + +hSrcFile .BS 1 +hDstFile .BS 1 hCopyBuf .BS 1 CopyRC .BS 1 .FIN @@ -25,3 +27,5 @@ hToDelete .BS 1 *-------------------------------------- MAN SAVE usr/src/shared/x.cpmvrm.g +LOAD usr/src/bin/cp.s +ASM