diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ad5ae068..0c56cde7 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 91ae47a0..f32525cf 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 7a74c708..c6fd991f 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -204,6 +204,11 @@ AUTO 4,1 ldy #]1 ora (pData),y .EM +*-------------------------------------- + .MA EOR.G + ldy #]1 + eor (pData),y + .EM *-------------------------------------- .MA CMP.G ldy #]1 diff --git a/README.md b/README.md index 0212d9cc..aa847976 100644 --- a/README.md +++ b/README.md @@ -255,7 +255,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | ---- | ------ | ------- | ----- | | TCPIPD | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.92 | | DHCPCLNT| Working | rewritten to use new Socket API | 0.92 | -| TELNETD | In Progress | | 0.9 | +| TELNETD | In Progress | | 0.92 | | HTTPD | In Progress | | 0.9 | ## Internal Shell commands: @@ -265,17 +265,20 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | CD | Working | Improved syntax : now, 'CD ../BIN' works | | MD | Working | Create a directory | | RD | Working | Delete an empty directory | -| PWD | Working | | +| PWD | Working | Print Working Directory | | DATE | Working | | | ECHO | Working | \b,\e,\f,\n,\\\ and \\% supported | -| EXIT | Working | | -| PAUSE | Working | | +| EXIT | Working | exit shell | +| PAUSE | Working | Wait until CR | | READ | Working | -S : no echo (password) | | | | -P : "prompt message" | | TIME | Working | | -| SET | Working | | -| SLEEP | Working | | +| SET | Working | -X toggle debug mode | +| SLEEP | Working | Wait 10th sec | | STARTPROC | Working | Used in A2osX.startup | +| IF ELSE FI | Working | [ -d direxists ] | +| | | [ -e fileordirexists ] | +| | | [ -f fileexists ] | ## Shell variables: diff --git a/SBIN/SHELL.S.CL.txt b/SBIN/SHELL.S.CL.txt index c6082c9c..c8cba333 100644 --- a/SBIN/SHELL.S.CL.txt +++ b/SBIN/SHELL.S.CL.txt @@ -128,7 +128,7 @@ CL.Insert >LDA.G CL.Len txa sta (ZPCMDBuf),y - >LDA.G bSecureRead + >LDA.G bREAD.S bpl .2 ldx #'*' @@ -259,7 +259,10 @@ CL.PrintEOL.8 clc rts *-------------------------------------- CL.PrintCmdBuf >LDYA ZPCMDBuf - >SYSCALL printf + >PUSHYA + ldy #S.PS.hStdOut + lda (pPs),y + >SYSCALL fputs rts *-------------------------------------- CL.GetLine lda (ZPFileBufPtr) @@ -351,12 +354,11 @@ CL.Parse >STZ.G CMD.IntCmd >LDA.G CMD.IntCmd bne .3 we already have Cmd, go check args - ldy #2 + ldy #1 lda (ZPCMDBuf),y only one char ? bne .2 - dey - lda (ZPCMDBuf),y + lda (ZPCMDBuf) cmp #'.' leading dot ? bne .2 diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index 1cd89e2c..a86f0d72 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -52,13 +52,28 @@ Cmd.Exec >LDA.G CMD.IntCmd .1 jmp (J.CMD.INT,x) -.8 clc - rts - .2 >PUSHB.G CMD.PSFlags >LDYA ZPArgVBuf >SYSCALL execv + bcs .9 + + tax CPID + + >LDA.G CMD.PSFlags + and #S.PS.F.HOLD + bne .3 + + txa + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.PID + >SYSCALL printf rts + +.3 >SLEEP Suspend this PID + +.8 clc +.9 rts *-------------------------------------- * STARTPROC : intcmd = 0 *-------------------------------------- @@ -200,7 +215,19 @@ Cmd.INT.SET ldx #1 .8 clc .9 rts *-------------------------------------- -Cmd.INT.SETVAR >STYA ZPPTR1 +Cmd.INT.SETVAR jsr CMD.IsSwitch + bcs .10 + + cmp #'X' + bne .99 + + >LDA.G bSET.X + eor #$ff + sta (pData),y + clc + rts + +.10 >STYA ZPPTR1 lda (ZPPTR1) cmp #'=' string is '=value' ? @@ -231,6 +258,13 @@ Cmd.INT.SETVAR >STYA ZPPTR1 >SYSCALL UnsetEnv rts + +.8 clc + rts + +.99 lda #E.SYN + sec + rts * Print requested VAR .3 >LDYA ZPPTR1 @@ -239,12 +273,6 @@ Cmd.INT.SETVAR >STYA ZPPTR1 >PUSHYA push value >PUSHW ZPPTR1 push name - jsr Cmd.INT.SET.PRINT - -.8 clc -.9 rts - -.99 jmp Cmd.Exec.ERRSYN *-------------------------------------- Cmd.INT.SET.PRINT >PUSHBI 4 @@ -274,37 +302,45 @@ Cmd.INT.TIME clc >SYSCALL puts rts *-------------------------------------- -Cmd.INT.ECHO ldx #1 - jsr Cmd.GetArgX - bcs .71 - - >PUSHYA - ldy #S.PS.hStdOut - lda (pPs),y - >SYSCALL fputs - bcs .9 +Cmd.INT.ECHO lda #1 + >STA.G CMD.ArgIndex - ldx #2 - -.1 phx + tax jsr Cmd.GetArgX bcs .7 - >PUSHYA - - lda #C.SPACE - >SYSCALL putchar - ldy #S.PS.hStdOut - lda (pPs),y - >SYSCALL fputs - plx - inx - bcc .1 - clc - rts + pha + >PUSHBI 0 + pla + >SYSCALL printf + bcs .9 -.7 plx -.71 >LDA.G bECHO.N + >INC.G CMD.ArgIndex + tax + + jsr Cmd.GetArgX + bcs .7 + +.1 lda #C.SPACE + >SYSCALL putchar + bcs .9 + + >PUSHBI 0 + + >LDA.G CMD.ArgIndex + tax + jsr Cmd.GetArgX + + >SYSCALL printf + bcs .9 + + >INC.G CMD.ArgIndex + tax + + jsr Cmd.GetArgX + bcc .1 + +.7 >LDA.G bECHO.N bmi .8 >PUSHBI 0 @@ -315,105 +351,53 @@ Cmd.INT.ECHO ldx #1 .8 clc .9 rts *-------------------------------------- -Cmd.INT.READ ldx #1 +Cmd.INT.READ lda #1 + >STA.G CMD.ArgIndex + + tax jsr Cmd.GetArgX - beq .9 - - lda #0 - >STA.G bSecureRead - >STA.G CMD.VarName.LEN - - lda pData - clc - adc #CMD.VarName - sta ZPPTR1 - lda pData+1 - adc #0 - sta ZPPTR1+1 - -.1 lda (ZPPtr2) - beq .8 - - cmp #' ' - bne .11 - jsr Cmd.NextCharPtr2 - bra .1 - -.11 cmp #'-' - bne .7 - - jsr Cmd.NextCharPtr2 - beq .9 + bcs .9 +.1 jsr CMD.IsSwitch + bcs .4 cmp #'S' bne .2 - lda #$80 - >STA.G bSecureRead + lda #$ff + >STA.G bREAD.S - jsr Cmd.NextCharPtr2 - beq .8 - cmp #' ' - bne .9 - - bra .1 + bra .7 .2 cmp #'P' bne .9 - jsr Cmd.NextCharPtr2 - beq .9 - - cmp #' ' - bne .9 - - jsr Cmd.NextCharPtr2 - beq .9 - - cmp #'"' - bne .9 - -.3 jsr Cmd.NextCharPtr2 - beq .9 - - cmp #'"' - beq .1 - - >SYSCALL PutChar - bcs .99 - bra .3 - -.9 jmp Cmd.Exec.ERRSYN - -.7 >LDA.G CMD.VarName.LEN - cmp #VarLen.MAX - beq .9 + >INC.G CMD.ArgIndex + tax + jsr Cmd.GetArgX + bcs .9 pha - - inc - sta (pData),y - - ply - lda (ZPPtr2) - sta (ZPPTR1),y - iny - lda #0 - sta (ZPPTR1),y - - jsr Cmd.NextCharPtr2 - beq .1 - cmp #' ' - beq .1 - + >PUSHBI 0 + pla + >SYSCALL printf + bcs .99 bra .7 -.8 >LDA.G CMD.VarName.LEN No var name ? SYNERR +.4 >SYSCALL newstr + txa + >STA.G hVarName + +.7 >INC.G CMD.ArgIndex + tax + jsr Cmd.GetArgX + bcc .1 + + >LDA.G hVarName beq .9 - - lda #$ff - >STA.G bReadMode - clc + rts + +.9 lda #E.SYN + sec .99 rts *-------------------------------------- Cmd.INT.SLEEP ldx #1 @@ -506,11 +490,8 @@ Cmd.INT.IF >LDA.G CMD.IF.PTR bcs .1 - phx - ldx #3 - jsr Cmd.GetArgX - plx - bcs .9 we need one arg + txa + >STA.G CMD.Operator jsr CMD.IF.UNARY bcs .9 @@ -524,11 +505,31 @@ Cmd.INT.IF >LDA.G CMD.IF.PTR ldx #4 go check ] bra .8 -.1 +.9 lda #E.SYN + sec + rts +.1 ldx #3 + jsr Cmd.GetArgX + beq .9 + >PUSHYA + >LDYA L.CMD.IF.TOKEN3 -eq -ne .... ? + jsr Lookup + bcs .9 + txa + >STA.G CMD.Operator - ldx #5 + jsr CMD.IF.BINARY + bcs .9 + + >LDA.G CMD.IF.PTR + tay + txa + eor (pData),y + sta (pData),y + + ldx #5 go check ] .8 jsr Cmd.GetArgX beq .9 @@ -544,14 +545,20 @@ Cmd.INT.IF >LDA.G CMD.IF.PTR bne .9 clc -.99 rts + rts +*-------------------------------------- +CMD.IF.UNARY ldx #3 + jsr Cmd.GetArgX + bcs .9 we need one arg + >LDA.G CMD.Operator + tax + jmp (J.CMD.IF.TOKEN2,x) + .9 lda #E.SYN sec rts -*-------------------------------------- -CMD.IF.UNARY jmp (J.CMD.IF.TOKEN2,x) - + CMD.IF.D jsr CMD.IF.DEF.7 bcs CMD.IF.DEF.9 >LDA.G CMD.Stat+S.STAT.P.TYPE @@ -583,6 +590,119 @@ CMD.IF.DEF.8 ldx #$ff true CMD.IF.DEF.9 ldx #0 false clc + rts +*-------------------------------------- +CMD.IF.BINARY ldx #2 + jsr Cmd.GetArgX + bcs .9 + + ldx #4 + jsr Cmd.GetArgX + bcs .9 + + >LDA.G CMD.Operator + beq .1 = + + cmp #2 != + bne CMD.IF.BINARY.NUM + lda #$ff + >STA.G CMD.Operator + +.1 ldx #2 + jsr Cmd.GetArgX + >PUSHYA + ldx #4 + jsr Cmd.GetArgX + >SYSCALL strcmp + lsr CS if != + >EOR.G CMD.Operator + tax + clc + rts + +.9 lda #E.SYN + sec + rts + +CMD.IF.BINARY.NUM + ldx #2 + jsr Cmd.GetArgX + bcs .9 + + >SYSCALL AToL + bcs .9 + + >PULLL.G CMD.NumArg1 + + ldx #4 + jsr Cmd.GetArgX + bcs .9 + + >SYSCALL AToL + bcs .9 + + >PULLL.G CMD.NumArg2 + + ldx #4 + ldy #CMD.NumArg2+3 + +.1 lda (pData),y + pha + dey + dex + bne .1 + + ldx #4 + ldy #CMD.NumArg1 + + sec + +.2 pla + sbc (pData),y + sta (pData),y + iny + dex + bne .2 + + bcc .5 CC if Arg1 < Arg2 + + ldy #CMD.NumArg1 + + lda (pData),y + iny + ora (pData),y + iny + ora (pData),y + iny + ora (pData),y Z if Arg1 = Arg2 + + bne .4 + +.3 lda #%001 001 arg1 = arg2 + bra .6 +.4 lda #%010 010 arg1 > arg2 + bra .6 +.5 lda #%100 100 Arg1 < Arg2 + +.6 pha + + >LDA.G CMD.Operator + lsr + tax + pla + eor CMD.IF.TOKEN3.BITS,x + bne .80 + + ldx #$ff true + clc + rts + +.80 ldx #0 false + clc + rts + +.9 lda #E.SYN + sec rts *-------------------------------------- Cmd.INT.ELSE >LDA.G CMD.IF.PTR @@ -623,52 +743,60 @@ Cmd.GetArgX >LDYA ZPArgVBuf >STYA ZPPtr1 -.1 jsr Cmd.NextArgPtr1 - bcs .9 +.1 lda (ZPPtr1) + beq .9 + +.2 inc ZPPtr1 + bne .3 + inc ZPPtr1+1 +.3 lda (ZPPtr1) + bne .2 + + inc ZPPtr1 + bne .4 + inc ZPPtr1+1 + +.4 lda (ZPPtr1) + beq .9 + dex bpl .1 >LDYA ZPPtr1 -.8 clc -.9 rts -*-------------------------------------- -Cmd.NextArgPtr1 lda (ZPPtr1) - beq .9 - -.1 inc ZPPtr1 - bne .2 - inc ZPPtr1+1 -.2 lda (ZPPtr1) - bne .1 - - inc ZPPtr1 - bne .3 - inc ZPPtr1+1 - -.3 lda (ZPPtr1) - beq .9 - .8 clc rts - + .9 sec rts *-------------------------------------- -Cmd.NextCharPtr2NB -.1 jsr Cmd.NextCharPtr2 - beq .9 - cmp #C.SPACE - beq .1 +CMD.IsSwitch >STYA ZPPtr1 + lda (ZPPtr1) + cmp #'-' + bne .9 -.9 rts -*-------------------------------------- -Cmd.NextCharPtr2 - inc ZPPtr2 - bne .1 - inc ZPPtr2+1 -.1 lda (ZPPtr2) - rts + ldy #1 + lda (ZPPtr1),y + beq .9 + + iny + lda (ZPPtr1),y + bne .9 + + dey + lda (ZPPtr1),y + cmp #'a' + bcc .8 + cmp #'z'+1 + bcs .8 + eor #$20 + +.8 clc + rts + +.9 >LDYA ZPPtr1 + sec + rts *-------------------------------------- MAN SAVE /A2OSX.SRC/SBIN/SHELL.S.CMD diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index e07ebe33..53b7dbc1 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -45,9 +45,8 @@ ZPCSHStack .EQ ZPBIN+18 .FIN *-------------------------------------- CmdLine.MAX .EQ 127 -VarLen.MAX .EQ 15 History.MAX .EQ 256 -CMD.IF.STACK.MAX .EQ 4 +CMD.IF.STACK.MAX .EQ 8 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -80,6 +79,7 @@ L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.BATCHERR .DA MSG.BATCHERR L.MSG.ERROR .DA MSG.ERROR L.MSG.PRINTENV .DA MSG.PRINTENV +L.MSG.PID .DA MSG.PID L.ENV.PATH .DA ENV.PATH L.ENV.PWD .DA ENV.PWD L.ENV.PS1 .DA ENV.PS1 @@ -165,7 +165,7 @@ CS.RUN jsr SetPWD *-------------------------------------- CS.RUN.LOOP jsr CL.Reset jsr IO.Reset - + .1 jsr CheckSleep beq .3 @@ -205,7 +205,7 @@ CS.RUN.LOOP jsr CL.Reset >STZ.G bPause -.6 >LDA.G bReadMode READ Command ? +.6 >LDA.G hVarName read mode ? bne .7 >LDA.G hFileBuf batch mode ? @@ -218,8 +218,6 @@ CS.RUN.LOOP jsr CL.Reset rts *-------------------------------------- CS.RUN.INTERCATIVE - >STZ.G bSecureRead Clear password mode - jsr CL.PrintPrompt bcs .9 @@ -258,16 +256,31 @@ CS.RUN.READ >LDA.G CL.bExec bpl .1 - >STZ.G bReadMode - lda (ZPCMDBuf) - beq .8 + bne .2 - >PUSHW ZPCMDBuf + >LDA.G hVarName + >SYSCALL GetMemPtr + >SYSCALL UnSetEnv + bra .7 + +.2 >PUSHW ZPCMDBuf - >LEA.G CMD.VarName + >LDA.G hVarName + >SYSCALL GetMemPtr >SYSCALL SetEnv +.7 php + pha + + >LDA.G hVarName + >SYSCALL freemem + >STZ.G hVarName + >STA.G bREAD.S + + pla + plp + .8 jmp CS.RUN.LOOP.END *-------------------------------------- CS.RUN.BATCH >SYSCALL GetChar @@ -319,7 +332,6 @@ CS.RUN.Exec jsr CL.Parse lda (ZPArgVBuf) beq CS.RUN.LOOP.8 jsr CMD.Exec - >SLEEP if S.PS.HOLD *-------------------------------------- CS.RUN.LOOP.END ldy #S.PS.RC sta (pPs),y @@ -450,6 +462,7 @@ MSG.ECHOCRLF .AZ "\r\n" MSG.BATCHERR .AZ "^\r\nLine #%D:" MSG.ERROR .AZ "[$%h]:%S.\r\n" MSG.PRINTENV .AZ "%s=%s\r\n" +MSG.PID .AZ "PID=%d\r\n" FMT.DATE .AZ "%A (%w), %B %d %Y" FMT.TIME .AZ "%H:%M:%S (%I:%M:%S%p)" *-------------------------------------- @@ -489,16 +502,31 @@ CMD.INT .AZ "STARTPROC" .AZ "FI" .HS 00 *-------------------------------------- -CMD.IF.TOKEN1 .AZ "[" - .AZ "![" +CMD.IF.TOKEN1 .AZ "![" + .AZ "[" .HS 00 CMD.IF.TOKEN2 .AZ "-d" .AZ "-e" .AZ "-f" .HS 00 -CMD.IF.TOKEN3 .AZ "-eq" +CMD.IF.TOKEN3 .AZ "=" + .AZ "!=" + .AZ "-eq" .AZ "-ne" - .HS 00 + .AZ "-lt" + .AZ "-le" + .AZ "-gt" + .AZ "-ge" + .HS 00 +CMD.IF.TOKEN3.BITS + .DA #%000 + .DA #%000 + .DA #%001 + .DA #%110 + .DA #%100 + .DA #%101 + .DA #%010 + .DA #%011 *-------------------------------------- .DO CSH=1 .INB /A2OSX.SRC/SBIN/SHELL.C.CSH @@ -511,15 +539,15 @@ EscChars.Cnt .EQ *-EscChars .DUMMY .OR 0 DS.START -hFileBuf .BS 1 +hFileBuf .BS 1 batch mode +hVarName .BS 1 read mode bEscMode .BS 1 bPause .BS 1 bExit .BS 1 bSET.X .BS 1 bECHO.N .BS 1 -bReadMode .BS 1 -bSecureRead .BS 1 +bREAD.S .BS 1 Sleep .BS 4 @@ -532,9 +560,12 @@ CMD.hCmdLine .BS 1 CMD.hCmdBuf .BS 1 CMD.hArgVBuf .BS 1 +CMD.ArgIndex .BS 1 +CMD.Operator .BS 1 +CMD.NumArg1 .BS 4 +CMD.NumArg2 .BS 4 + CMD.PSFlags .BS 1 -CMD.VarName.LEN .BS 1 -CMD.VarName .BS VarLen.MAX+1 CMD.Stat .BS S.STAT CMD.Time .BS S.TIME