diff --git a/.Docs/Shell Developers Guide.md b/.Docs/Shell Developers Guide.md index 6184ec02..8649f71b 100644 --- a/.Docs/Shell Developers Guide.md +++ b/.Docs/Shell Developers Guide.md @@ -64,12 +64,13 @@ where [ exp ] and [ condition ] allow to detail operators.... | CALL | Working | CALL function ... | | CASE | Working | CASE | | CD | Working | CD path or relative path | +| .. | Working | CD .. | | DATE | Working | | | DEFAULT | Working | Default CASE for SWITCH | | ECHO | Working | \b,\e,\f,\n,\\\ and \\% supported
-N : Suppress \r\n | | ELSE | Working | Optional branch for IF block | | END | Working | End of SWITCH Statement | -| EXIT | Working | exit script or shell | +| EXIT | Working | exit function, script or shell | | FI | Working | Terminator for IF block | | FUNC | In Progress | FUNC fonction_name
\
END | | IF | Working | [ \ ] | @@ -81,10 +82,9 @@ where [ exp ] and [ condition ] allow to detail operators.... | PUSHD | Working | Save actual working directory
PUSHD \ do also a CD to \ | | PWD | Working | Print Working Directory | | RD | Working | Delete an empty directory | -| READ | Working | -F : Undefine all functions
-S : no echo (password)
-P : "prompt message" | +| READ | Working | -S : no echo (password)
-P : "prompt message" | | REN | Working | Rename a file, directory or volume | -| RETURN | In Progress | Exit function with return code | -| SET | Working | -X : toggle debug mode
-C : toggle Control-C break mode | +| SET | Working | -X : toggle debug mode
-C : toggle Control-C break mode
-E : toggle error printing mode
-F : delete all declared functions | | SHIFT | Working | Remove $1 from cmd line | | SLEEP | Working | Wait \ 10th sec | | SWITCH | Working | SWITCH | diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 4d732870..3b51e9d7 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -572,17 +572,24 @@ CMD.. lda (ZPArgVBufPtr) beq .9 >LDYA ZPArgVBufPtr - jmp CORE.FCALL exec cmd file and continue + jsr IO.Load + bcs CMD.CALL.RTS + >LDYA ZPArgVBufPtr + jmp CMD.CALL exec cmd file and continue .9 jmp CMD.Exec.CSYN *-------------------------------------- +CMD.CALL.UNDEF lda #E.FUNDEF + sec +CMD.CALL.RTS rts +*-------------------------------------- CMD.CALL >LDA.G hFuncList - beq .9 + beq CMD.CALL.UNDEF >PUSHW ZPArgVBufPtr >LDA.G hFuncList >SYSCALL SListLookup - bcs .9 + bcs CMD.CALL.UNDEF >STYA M32.TMP KeyID @@ -592,47 +599,131 @@ CMD.CALL >LDA.G hFuncList >PUSHW M32.TMP KeyID >LDA.G hFuncList >SYSCALL SListGetData - bcs .99 + bcs CMD.CALL.RTS >LDYA ZPArgVBufPtr FUNC PARAM1 PARAM2... - jmp CORE.CALL X = Func Code - -.9 lda #E.FUNDEF - sec -.99 rts -*-------------------------------------- -CMD.RETURN jsr CORE.RETURN + +CMD.CALL.YAX stx M32.ACC X=Code to Execute + + jsr CORE.ArgV.Dup Y,A = ArgV bcs .9 - lda (ZPArgVBufPtr) - beq .8 no arg, exit 0 - - >LDYA ZPArgVBufPtr - >SYSCALL AToL + stx M32.ACC+1 X=ARGV + + lda #7 + jsr CORE.StkCheck bcs .9 - - >PULLL M32.ACC + + lda ZPInputBuf + jsr CORE.StkPush + + lda ZPInputBuf+1 + jsr CORE.StkPush + + lda ZPInputBufPtr + jsr CORE.StkPush + + lda ZPInputBufPtr+1 + jsr CORE.StkPush + + ldy #S.PS.hARGV + lda (pPS),y + jsr CORE.StkPush + + lda M32.ACC+1 new ARGV + ldy #S.PS.hARGV + sta (pPS),y + lda M32.ACC + jsr CORE.StkPush -.8 clc + lda M32.ACC + >SYSCALL GetMemPtr + >STYA ZPInputBuf + >STYA ZPInputBufPtr + + lda #$C0 + jsr CORE.StkPush + + >INC.G bBatchMode + clc .9 rts *-------------------------------------- CMD.EXIT lda (ZPArgVBufPtr) - beq .8 no arg, exit 0 + beq CMD.EXIT.A no arg, exit 0 >LDYA ZPArgVBufPtr + jsr EXP.GET + bcs CMD.EXIT.RTS >SYSCALL AToL - bcs .9 + bcs CMD.EXIT.RTS - >PULLL M32.ACC - lda M32.ACC + >PULLA + inc pStack + inc pStack + inc pStack -.8 pha +CMD.EXIT.A sta M32.ACC + >DEBUG +.1 jsr CORE.StkPull + bcs CMD.EXIT.RTS + + cmp #$C0 in CALL / . context ? + beq .8 + + and #$3F + ldx #1 + cmp #C.IF + beq .3 + +.2 ldx #3 + cmp #C.WHILE + bne CMD.EXIT.99 + +.3 lda (pData) + +.4 dec + dex + bne .4 + + sta (pData) + bra .1 + +.8 jsr CORE.StkPull + >SYSCALL freemem Code buffer + + ldy #S.PS.hARGV + lda (pPS),y + >SYSCALL freemem ArgV buffer + + jsr CORE.StkPull + ldy #S.PS.hARGV + sta (pPS),y + + jsr CORE.StkPull + sta ZPInputBufPtr+1 + + jsr CORE.StkPull + sta ZPInputBufPtr + + jsr CORE.StkPull + sta ZPInputBuf+1 + + jsr CORE.StkPull + sta ZPInputBuf + + >DEC.G bBatchMode + + pha lda #$FF >STA.G bExit pla clc -.9 rts +CMD.EXIT.RTS rts + +CMD.EXIT.99 lda #E.STACKERROR + sec + rts *-------------------------------------- CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test bcs .9 @@ -659,6 +750,10 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.Test *-------------------------------------- CMD.SWITCH jsr CORE.StkGetCtx + lda #2 + jsr CORE.StkCheck + bcs .9 + jsr EXP.GET bcs .9 >SYSCALL strdup @@ -799,6 +894,14 @@ CMD.FOR jsr CORE.StkGetCtx jsr CORE.ArgV.Next beq CMD.END.CSYN + lda #8 + jsr CORE.StkCheck + bcs .9 + + sec + jsr CORE.StkPushPtr Push CmdPtr AFTER FOR + + lda (ZPArgVBufPtr) cmp #'(' beq FOR.FILE @@ -806,15 +909,9 @@ CMD.FOR jsr CORE.StkGetCtx bne FOR.LIST jmp FOR.EXEC +.9 rts *-------------------------------------- -FOR.LIST lda #8 - jsr CORE.StkCheck - bcs .9 - - sec - jsr CORE.StkPushPtr Push CmdPtr AFTER FOR - - >LDYA ZPArgVBufPtr +FOR.LIST >LDYA ZPArgVBufPtr >SYSCALL strdup bcs .9 @@ -851,14 +948,7 @@ FOR.LIST lda #8 .9 rts *-------------------------------------- -FOR.FILE lda #8 - jsr CORE.StkCheck - bcs FOR.FILE.9 - - sec - jsr CORE.StkPushPtr Push CmdPtr AFTER FOR - - jsr CORE.ArgV.NextChar skip "(" +FOR.FILE jsr CORE.ArgV.NextChar skip "(" >PUSHWI 0 Aux type >PUSHBI S.FI.T.TXT @@ -897,14 +987,7 @@ FOR.FILE lda #8 FOR.FILE.9 rts *-------------------------------------- -FOR.EXEC lda #8 - jsr CORE.StkCheck - bcs FOR.FILE.9 - - sec - jsr CORE.StkPushPtr Push CmdPtr AFTER FOR - - jsr CORE.ArgV.NextChar skip "`" +FOR.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.Out bcs .9 @@ -1222,6 +1305,7 @@ CMD.IF jsr CORE.StkGetCtx *-------------------------------------- CMD.LOOP jsr CORE.StkPull bcs .9 + tax and #$3F cmp #C.WHILE @@ -1231,8 +1315,8 @@ CMD.LOOP jsr CORE.StkPull bmi .8 lda (pData) - sec - sbc #2 Discard loop Ptr + dec + dec Discard loop Ptr sta (pData) clc diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 7ef7117a..40c0057f 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -71,7 +71,8 @@ CORE.Run >LDYA ZPInputBufPtr Save Actual cmd for looping jsr CORE.GetCharNB bcc .11 - jsr CORE.RETURN + lda #0 EOF + jsr CMD.EXIT.A bcs .9 jsr IO.Reset @@ -321,100 +322,6 @@ CORE.SkipLine jsr CORE.GetNextCharNB jsr CORE.GetNextChar skip CR... .8 rts -*-------------------------------------- -CORE.FCALL >STYA ZPPtr1 ArgV - >PUSHWI 0 Aux type - >PUSHBI S.FI.T.TXT - >PUSHBI O.RDONLY - - >LDYA ZPPtr1 - >SYSCALL LoadTxtFile - bcs CORE.CALL.9 - - >LDYA ZPPtr1 - -CORE.CALL stx M32.ACC X=Code to Execute - - jsr CORE.ArgV.Dup Y,A = ArgV - bcs CORE.CALL.9 - - stx M32.ACC+1 X=ARGV - - lda #7 - jsr CORE.StkCheck - bcs CORE.CALL.9 - - lda ZPInputBuf - jsr CORE.StkPush - - lda ZPInputBuf+1 - jsr CORE.StkPush - - lda ZPInputBufPtr - jsr CORE.StkPush - - lda ZPInputBufPtr+1 - jsr CORE.StkPush - - ldy #S.PS.hARGV - lda (pPS),y - jsr CORE.StkPush - - lda M32.ACC+1 new ARGV - ldy #S.PS.hARGV - sta (pPS),y - - lda M32.ACC - jsr CORE.StkPush - - lda M32.ACC - >SYSCALL GetMemPtr - >STYA ZPInputBuf - >STYA ZPInputBufPtr - - lda #$C0 - jsr CORE.StkPush - - >INC.G bBatchMode -* clc -CORE.CALL.9 rts -*-------------------------------------- -CORE.RETURN jsr CORE.StkPull - bcs .90 - - cmp #$C0 - bne .90 - - jsr CORE.StkPull - >SYSCALL freemem Code buffer - - ldy #S.PS.hARGV - lda (pPS),y - >SYSCALL freemem ArgV buffer - - jsr CORE.StkPull - ldy #S.PS.hARGV - sta (pPS),y - - jsr CORE.StkPull - sta ZPInputBufPtr+1 - - jsr CORE.StkPull - sta ZPInputBufPtr - - jsr CORE.StkPull - sta ZPInputBuf+1 - - jsr CORE.StkPull - sta ZPInputBuf - - >DEC.G bBatchMode -* clc - rts - -.90 lda #E.STACKERROR - sec - rts *-------------------------------------- * search ZPInputBufPtr/ZPArgVBufPtr in Y,A table *-------------------------------------- @@ -779,15 +686,6 @@ CORE.StkPushPtr bcs .1 txa bra CORE.StkPush *-------------------------------------- -CORE.StkPullPtr jsr CORE.StkPull - bcs CORE.StkPullPtr.9 - sta ZPInputBufPtr+1 - jsr CORE.StkPull - bcs CORE.StkPullPtr.9 - sta ZPInputBufPtr -CORE.StkPullPtr.9 - rts -*-------------------------------------- CORE.StkPushYA phy jsr CORE.StkPush pla @@ -846,6 +744,15 @@ CORE.StkGetCtx jsr CORE.StkGet txa rts *-------------------------------------- +CORE.StkPullPtr jsr CORE.StkPull + bcs CORE.StkPullPtr.9 + sta ZPInputBufPtr+1 + jsr CORE.StkPull + bcs CORE.StkPullPtr.9 + sta ZPInputBufPtr +CORE.StkPullPtr.9 + rts +*-------------------------------------- CORE.StkPull jsr CORE.StkGet bcs .9 diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index d6787a1f..d03c64fa 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -7,7 +7,16 @@ IO.Reset jsr IO.Reset.In jsr IO.Reset.Out jsr IO.Reset.Err IO.Reset.9 rts -*-------------------------------------- +*-------------------------------------- +IO.Load pha + >PUSHWI 0 Aux type + >PUSHBI S.FI.T.TXT + >PUSHBI O.RDONLY + + pla + >SYSCALL LoadTxtFile + rts +*-------------------------------------- IO.Pipe.In >LDA.G IO.hOut ldy #S.PS.hStdOut sta (pPS),y @@ -21,7 +30,7 @@ IO.Pipe.In >LDA.G IO.hOut >SYSCALL fopen bcs IO.Set.RTS -*-------------------------------------- +*-------------------------------------- IO.Set.In pha jsr IO.Reset.In ldy #S.PS.hStdIn @@ -31,7 +40,7 @@ IO.Set.In pha ldy #S.PS.hStdIn sta (pPS),y IO.Set.RTS rts -*-------------------------------------- +*-------------------------------------- IO.Reset.In >LDA.G IO.hIn beq .8 @@ -49,7 +58,7 @@ IO.Reset.In >LDA.G IO.hIn >STZ.G IO.hIn .8 clc IO.Reset.In.RTS rts -*-------------------------------------- +*-------------------------------------- IO.Pipe.Out >SYSCALL pipe bcs IO.Reset.In.RTS >STA.G IO.hPipe diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index 58501e4f..588bbc87 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -31,24 +31,23 @@ C.TIME .EQ 17 C.PUSHD .EQ 18 C.POPD .EQ 19 C.FUNC .EQ 20 -C.RETURN .EQ 21 -C.CALL .EQ 22 -C.BREAK .EQ 23 -C.SWITCH .EQ 24 -C.CASE .EQ 25 -C.DEFAULT .EQ 26 -C.END .EQ 27 +C.CALL .EQ 21 +C.BREAK .EQ 22 +C.SWITCH .EQ 23 +C.CASE .EQ 24 +C.DEFAULT .EQ 25 +C.END .EQ 26 *-------------------------------------- -C.FOR .EQ 28 +C.FOR .EQ 27 C.FOR.LIST .EQ 0 C.FOR.FILE .EQ 2 C.FOR.EXEC .EQ 4 -C.WHILE .EQ 29 -C.IF .EQ 30 -C.NEXT .EQ 31 -C.LOOP .EQ 32 -C.ELSE .EQ 33 -C.FI .EQ 34 +C.WHILE .EQ 28 +C.IF .EQ 29 +C.NEXT .EQ 30 +C.LOOP .EQ 31 +C.ELSE .EQ 32 +C.FI .EQ 33 *-------------------------------------- E.CSYN .EQ $C0 E.ESYN .EQ $C1 @@ -150,7 +149,6 @@ J.CMD .DA CMD... .DA CMD.PUSHD .DA CMD.POPD .DA CMD.FUNC - .DA CMD.RETURN .DA CMD.CALL .DA CMD.BREAK .DA CMD.SWITCH @@ -218,9 +216,14 @@ CS.RUN jsr CL.Init lda (pPS),y >SYSCALL GetMemPtr - jsr CORE.FCALL Exec file an exit + jsr IO.Load bcs CS.INIT.RTS - + phx + ldy #S.PS.hARGV + lda (pPS),y + >SYSCALL GetMemPtr + plx + jsr CMD.CALL.YAX bra CS.RUN.LOOP *-------------------------------------- .1 jsr CMD.CD.HOME @@ -239,7 +242,10 @@ CS.RUN jsr CL.Init bcs CS.RUN.LOOP no profile... >LDYA L.HOME.PROFILE - jsr CORE.FCALL exec profile and continue + jsr IO.Load + bcs CS.RUN.LOOP + >LDYA L.HOME.PROFILE + jsr CMD.CALL.YAX exec profile and continue * bcs CS.RUN.LOOP *-------------------------------------- @@ -347,7 +353,7 @@ CS.RUN.INTERACTIVE >SYSCALL GetMemPtr Y,A =ARGV plx - jsr CORE.CALL X = Copy of CL + jsr CMD.CALL.YAX X = Copy of CL .6 jsr CORE.Run @@ -442,7 +448,7 @@ CS.RUN.BATCH >LDA.G bSET.C bne CS.RUN.LOOP.END pha - jsr CORE.RETURN + jsr CMD.EXIT.A lda (pData) bne .6 @@ -614,7 +620,6 @@ CMD .AZ ".." .AZ "PUSHD" .AZ "POPD" .AZ "FUNC" - .AZ "RETURN" .AZ "CALL" .AZ "BREAK" .AZ "SWITCH"