diff --git a/.Docs/Shell Developers Guide.md b/.Docs/Shell Developers Guide.md index 99351e3d..6a1288e0 100644 --- a/.Docs/Shell Developers Guide.md +++ b/.Docs/Shell Developers Guide.md @@ -134,7 +134,7 @@ Notice that the DO X and DO Y logic is swapped between the two cases. | 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 | -S : no echo (password)
-P : "prompt message" | +| READ | Working | -S : no echo (password)
-P : "prompt message"
-N maxchar | | REN | Working | Rename a file, directory or volume | | 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 | diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 2fd5e3a4..d4090cd6 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/SH.S.CL.txt b/BIN/SH.S.CL.txt index 7f7ed903..07b858a5 100644 --- a/BIN/SH.S.CL.txt +++ b/BIN/SH.S.CL.txt @@ -104,9 +104,10 @@ CL.CHARIN.CTRL cpx #C.CR rts *-------------------------------------- CL.Insert >LDA.G CL.Len + >CMP.G READ.N + beq .8 Buffer full, discard... inc - beq .9 Buffer full, discard... - sta (pData),y + >STA.G CL.Len pha @@ -128,21 +129,23 @@ CL.Insert >LDA.G CL.Len txa sta (ZPCLBuf),y - >LDA.G bREAD.S - bpl .2 - >INC.G CL.Ptr - clc - rts -.2 txa + >LDA.G bREAD.S + bmi .7 + + txa >SYSCALL PutChar + jsr CL.PrintEOL - >INC.G CL.Ptr +.7 >LDA.G READ.N READ N = 1, don't wait for CR + dec + bne .8 - jmp CL.PrintEOL + lda #$ff + >STA.G CL.bReady -.9 clc +.8 clc rts *-------------------------------------- CL.CLR lda (ZPCLBuf) diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index f377fd0e..79203d07 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -7,12 +7,16 @@ CMD.. lda (ZPArgVBufPtr) >LDYA ZPArgVBufPtr jsr IO.Load - bcs .99 - >LDYA ZPArgVBufPtr - jmp CORE.Load.YAX exec cmd file and continue + bcs CMD.SHIFTA.RTS -.9 jmp CMD.Exec.CSYN -.99 rts + >LDYA ZPArgVBufPtr + jsr CORE.Load.YAX Exec . file + bcs CMD.SHIFTA.RTS + + lda #$C0+C.. + jmp CORE.StkPush + +.9 jmp CMD.E.CSYN *-------------------------------------- CMD.NOHUP lda #S.PS.F.NOHUP tsb CORE.PSFlags @@ -33,7 +37,7 @@ CMD.SHIFTA >SYSCALL ArgV sta (pPS),y .8 clc - rts +CMD.SHIFTA.RTS rts *-------------------------------------- CMD.PUSHD >LDA.G PUSHD.STACK cmp #PUSHD.STACK+PUSHD.STACK.MAX @@ -69,7 +73,7 @@ CMD.POPD >LDA.G PUSHD.STACK CMD.POPD.RTS rts -CMD.POPD.CSYN jmp CMD.Exec.CSYN +CMD.POPD.CSYN jmp CMD.E.CSYN *-------------------------------------- CMD.PWD ldy #S.PS.hCWD lda (pPs),y @@ -285,7 +289,7 @@ CMD.SET.1 .8 clc .9 rts -.99 jmp CMD.Exec.CSYN +.99 jmp CMD.E.CSYN CMD.SET.UNSET >LDYA ZPVarNamePtr >SYSCALL UnsetEnv @@ -319,16 +323,16 @@ CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.In bcs .9 - lda #$ff - >STA.G bREAD.S secret - >STA.G bReadMode + lda #255 + >STA.G READ.N + >STA.G bREAD.S + + jmp CMD.READ.VAR - >SLEEP - clc .9 rts *-------------------------------------- CMD.DATE sec - .HS 90 bcc + .HS 90 BCC CMD.TIME clc php >LEA.G TimeBuf @@ -444,10 +448,16 @@ CMD.GETKEY lda (ZPArgVBufPtr) >LDYA ZPArgVBufPtr >SYSCALL SetEnv -.9 rts +.9 +CMD.GETKEY.RTS rts *-------------------------------------- CMD.READ lda (ZPArgVBufPtr) - beq .9 + beq .9 + + stz ZPVarNamePtr+1 + >STZ.G bREAD.S + dec + >STA.G READ.N .1 jsr CMD.IsSwitch bcs .4 @@ -457,10 +467,10 @@ CMD.READ lda (ZPArgVBufPtr) lda #$ff >STA.G bREAD.S - bra .7 + bra .5 -.2 cmp #'P' - bne .9 +.2 cmp #'P' + bne .3 jsr CORE.ArgV.Next beq .9 @@ -468,39 +478,73 @@ CMD.READ lda (ZPArgVBufPtr) >PUSHBI 0 >LDYA ZPArgVBufPtr >SYSCALL printf - bcs .99 - bra .7 + bcs CMD.GETKEY.RTS + bra .5 + +.9 jmp CMD.E.CSYN + +.3 cmp #'N' + bne .9 + + jsr CORE.ArgV.Next + beq .9 + + >LDYA ZPArgVBufPtr + >SYSCALL AToL + bcs CMD.GETKEY.RTS + + >PULLA + >STA.G READ.N + + inc pStack + inc pStack + inc pStack + + bra .5 .4 >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr - >LDA.G bReadMode - bne .9 - lda #$ff - >STA.G bReadMode - -.7 jsr CORE.ArgV.Next +.5 jsr CORE.ArgV.Next bne .1 - >LDA.G bReadMode + lda ZPVarNamePtr+1 beq .9 - clc -.99 rts -.9 jmp CMD.Exec.CSYN +CMD.READ.VAR jsr CL.Reset + +.1 >SYSCALL GetChar + bcs .9 + + jsr CL.CHARIN + + >LDA.G CL.bReady + bpl .1 + + lda (ZPCLBuf) + bne .2 + + >LDYA ZPVarNamePtr + >SYSCALL UnSetEnv + rts + +.2 >PUSHW ZPCLBuf + + >LDYA ZPVarNamePtr + >SYSCALL SetEnv + +.9 rts *-------------------------------------- CMD.SLEEP lda (ZPArgVBufPtr) - beq .9 + beq CMD.REN.CSYN >LDYA ZPArgVBufPtr >SYSCALL AToL - bcs .9 + bcs CMD.REN.CSYN >PULLL.G Sleep clc rts - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.PAUSE lda #$FF >STA.G bPause @@ -508,13 +552,11 @@ CMD.PAUSE lda #$FF rts *-------------------------------------- CMD.MD lda (ZPArgVBufPtr) - beq .9 + beq CMD.REN.CSYN >LDYA ZPArgVBufPtr >SYSCALL MKDir rts - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.REN lda (ZPArgVBufPtr) beq .9 @@ -529,10 +571,11 @@ CMD.REN lda (ZPArgVBufPtr) rts .90 >PULLYA -.9 jmp CMD.Exec.CSYN +.9 +CMD.REN.CSYN jmp CMD.E.CSYN *-------------------------------------- CMD.RD lda (ZPArgVBufPtr) - beq .9 + beq CMD.REN.CSYN >PUSHEA.G StatBuf >LDYA ZPArgVBufPtr @@ -541,13 +584,11 @@ CMD.RD lda (ZPArgVBufPtr) >LDA.G StatBuf+S.STAT.P.TYPE cmp #S.FI.T.DIR - bne .9 + bne CMD.REN.CSYN >LDYA ZPArgVBufPtr >SYSCALL Remove .99 rts - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.FUNCTION lda (ZPArgVBufPtr) beq .9 @@ -580,7 +621,7 @@ CMD.FUNCTION lda (ZPArgVBufPtr) lda (ZPArgVBufPtr),y beq .11 -.9 jmp CMD.Exec.CSYN +.9 jmp CMD.E.CSYN .99 rts *-------------------------------------- @@ -659,7 +700,11 @@ CMD.CALL >LDA.G hFuncList bcs CMD.CALL.RTS >LDYA ZPArgVBufPtr FUNC PARAM1 PARAM2... - jmp CORE.Load.YAX + jsr CORE.Load.YAX Exec FUNC + bcs CMD.CALL.RTS + + lda #$C0+C.CALL + jmp CORE.StkPush *-------------------------------------- CMD.EXIT lda (ZPArgVBufPtr) beq .1 no arg, exit 0 @@ -678,12 +723,18 @@ CMD.EXIT lda (ZPArgVBufPtr) inc pStack .1 sta M32.ACC - -.2 jsr CORE.StkPull + +.2 jsr CORE.StkPull Pull everything until CALL . CL... bcs .9 - cmp #$C0 in CALL / . context ? - beq CMD.EXIT.CALL + cmp #$C0+C.. in CALL . CL context ? + beq CMD.EXIT.FILE + + cmp #$C0+C.CALL + beq CMD.EXIT.FILE + + cmp #$C0+C.CLEXEC + beq CMD.EXIT.SH jsr CMD.EXIT.POP bcc .2 @@ -694,7 +745,14 @@ CMD.EXIT lda (ZPArgVBufPtr) * sec rts *-------------------------------------- -CMD.EXIT.CALL jsr CORE.StkPull +CMD.EXIT.SH jsr CMD.EXIT.FILE + + lda #$ff + >STA.G bExitOnEOF + clc + rts +*-------------------------------------- +CMD.EXIT.FILE jsr CORE.StkPull >SYSCALL freemem Code buffer ldy #S.PS.hARGV @@ -776,11 +834,12 @@ CMD.BREAK jsr CORE.StkGetCtx Get context in CORE.TestResult jsr CORE.StkPull remove C.CASE jsr CORE.StkGet and #$7F + sta (pDATA),y .8 clc rts -.9 jmp CMD.Exec.CSYN +.9 jmp CMD.E.CSYN *-------------------------------------- * stack-1 hVALUE * stack SWITCH TOKEN @@ -793,6 +852,7 @@ CMD.SWITCH jsr CORE.StkGetCtx jsr EXP.GET bcs .9 + >SYSCALL strdup bcs .9 @@ -850,17 +910,20 @@ CMD.CASE jsr CORE.StkGetCtx Get context in CORE.TestResult ora #C.CASE jmp CORE.StkPush -.9 jmp CMD.Exec.CSYN +.9 +CMD.E.CSYN lda #E.CSYN + sec + rts *-------------------------------------- CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult - bcs .9 + bcs CMD.E.CSYN and #$3F cmp #C.SWITCH beq .1 cmp #C.CASE - bne .9 + bne CMD.E.CSYN jsr CORE.StkPull remove C.CASE @@ -868,11 +931,9 @@ CMD.DEFAULT jsr CORE.StkGetCtx Get context in CORE.TestResult and #$C0 ora #C.DEFAULT jmp CORE.StkPush - -.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult - bcs CMD.END.CSYN + bcs CMD.E.CSYN and #$3F cmp #C.SWITCH @@ -882,7 +943,7 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult beq .2 cmp #C.DEFAULT - bne CMD.END.CSYN + bne CMD.E.CSYN .2 jsr CORE.StkPull remove C.CASE or C.DEFAULT @@ -890,27 +951,25 @@ CMD.END jsr CORE.StkGetCtx Get context in CORE.TestResult jsr CORE.StkPull get hVALUE >SYSCALL freemem rts - -CMD.END.CSYN jmp CMD.Exec.CSYN *-------------------------------------- CMD.FOR jsr CORE.StkGetCtx lda (ZPArgVBufPtr) - beq CMD.END.CSYN + beq CMD.E.CSYN >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr jsr CORE.ArgV.Next - beq CMD.END.CSYN + beq CMD.E.CSYN >PUSHW ZPArgVBufPtr >LDYA L.IN >SYSCALL StrCaseCmp - bcs CMD.END.CSYN + bcs CMD.E.CSYN jsr CORE.ArgV.Next - beq CMD.END.CSYN + beq CMD.E.CSYN lda #8 Make sure 8 bytes free on stack jsr CORE.StkCheck diff --git a/BIN/SH.S.CORE.txt b/BIN/SH.S.CORE.txt index 146e537e..c9634a19 100644 --- a/BIN/SH.S.CORE.txt +++ b/BIN/SH.S.CORE.txt @@ -21,20 +21,18 @@ CORE.FUNCRESET >LDA.G hFuncList >SYSCALL SListFree >STZ.G hFuncList -.8 -CORE.FUNCRESET.RTS - rts +.8 rts *-------------------------------------- -CORE.Load.YAX stx M32.ACC X=Code to Execute +CORE.Load.YAX stx M32.ACC X = Code to Execute jsr CORE.ArgV.Dup Y,A = ArgV - bcs CORE.FUNCRESET.RTS - sta M32.ACC+2 A=ARGC - stx M32.ACC+1 X=ARGV + bcs .9 + sta M32.ACC+2 A = ARGC + stx M32.ACC+1 X = hARGV lda #8 jsr CORE.StkCheck - bcs CORE.FUNCRESET.RTS + bcs .9 >LDYA ZPInputBuf jsr CORE.StkPushYA @@ -48,7 +46,7 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute ldy #S.PS.hARGV lda (pPS),y - jsr CORE.StkPush old ARGV + jsr CORE.StkPush old hARGV ldy #S.PS.ARGC lda M32.ACC+2 new ARGC @@ -56,18 +54,18 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute iny #S.PS.hARGV lda M32.ACC+1 - sta (pPS),y new ARGV + sta (pPS),y new hARGV lda M32.ACC new code jsr CORE.StkPush - lda M32.ACC +* lda M32.ACC >SYSCALL GetMemPtr >STYA ZPInputBuf >STYA ZPInputBufPtr - lda #$C0 - jmp CORE.StkPush +* clc +.9 rts *-------------------------------------- * http://heirloom.sourceforge.net/sh/sh.1.html *-------------------------------------- @@ -94,13 +92,16 @@ CORE.Load.YAX stx M32.ACC X=Code to Execute * set hStdOut = Std *-------------------------------------- CORE.Run.EOF jsr CORE.StkPull - bcs .9 + bcs * - cmp #$C0 in CALL / . context ? + cmp #$C0+C.. check CALL . CL context + beq .1 + cmp #$C0+C.CALL + beq .1 + cmp #$C0+C.CLEXEC bne .9 - jsr CMD.EXIT.CALL - bcs .9 +.1 jsr CMD.EXIT.FILE jsr IO.Reset @@ -108,7 +109,7 @@ CORE.Run.EOF jsr CORE.StkPull sec rts Ending 0, CS,A=0 -.9 lda #E.UNEXP +.9 lda #E.UNEXPEOF sec rts *-------------------------------------- @@ -305,12 +306,14 @@ CORE.SkipLine jsr CORE.GetNextCharNB * search ZPInputBufPtr/ZPArgVBufPtr in Y,A table *-------------------------------------- CORE.LookupInputBuf - >STYA ZPPtr1 - >LDYA ZPInputBufPtr - bra CORE.Lookup -CORE.LookupArgVBuf - >STYA ZPPtr1 + sec + .HS 90 BCC +CORE.LookupArgVBuf + clc + >STYA ZPPtr1 Keywords table >LDYA ZPArgVBufPtr + bcc CORE.Lookup + >LDYA ZPInputBufPtr CORE.Lookup >STYA ZPPtr2 @@ -318,47 +321,59 @@ CORE.Lookup >STYA ZPPtr2 .1 ldy #$ff -.2 iny - lda (ZPPtr2),y - beq .3 Src Keyword end - - jsr CORE.IsSpaceOrEndCmd - bcc .3 Src Keyword end +.2 jsr .7 get next valid char in src text + bcs .3 - lda (ZPPtr1),y - beq .4 Table Keyword end - lda (ZPPtr2),y +.20 jsr ToUpperCase + + eor (ZPPtr1),y match table char ? + asl compare only 7 bits + bne .4 no match...get next table keyword - jsr ToUpperCase - - cmp (ZPPtr1),y - beq .2 + bcc .2 not last char in this keyword + + jsr .7 next char in text... + bcc .4 valid....failed + +.8 tya Keyword Len - bra .4 - -.3 lda (ZPPtr1),y - bne .4 - - tya Keyword Len - dey clc -.8 rts - -.4 jsr IncPtr1 + rts - lda (ZPPtr1) - bne .4 +.3 dey + lda (ZPPtr1),y was last char in this keyword ? + bmi .8 + + iny + +.41 jsr IncPtr1 skip chars to next keyword + +.4 lda (ZPPtr1) + bpl .41 jsr IncPtr1 .6 inx - lda (ZPPtr1) Array Ending 0, must be an external Cmd.... + lda (ZPPtr1) Array Ending 0, lookup failed bne .1 lda #E.SYN sec rts + +.7 iny + lda (ZPPtr2),y Get Src text char... + beq .9 end of text + + jsr CORE.IsSpaceOrEndCmd + bcc .9 end of valid chars + + clc + rts + +.9 sec + rts *-------------------------------------- * ArgV *-------------------------------------- @@ -388,7 +403,7 @@ CORE.ArgV.Dup >STYA ZPPtr1 >STYA ZPPtr2 - lda #$ff Arg count-1 (skip $0) + lda #$ff Arg count-1 (skip $0) pha .5 pla @@ -666,16 +681,22 @@ CORE.StkGetCtx jsr CORE.StkGet tax bcs .1 no context... - cmp #$C0 in a call... + cmp #$C0+C.. in a call... beq .1 CS + cmp #$C0+C.CALL + beq .1 CS + + cmp #$C0+C.CLEXEC + beq .1 CS + and #$80 get current.. lsr becomes parent - bra .2 + bra .8 .1 lda #$40 ...set Parent = true -.2 sta CORE.TestResult +.8 sta CORE.TestResult txa rts diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index d7e5adc5..1440c89c 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -28,11 +28,11 @@ EXP.GET jsr CORE.ArgV.Next jsr EXP.FPU.EXEC - jsr CORE.ArgV.Next another op ? + jsr CORE.ArgV.Next another op ? bne .2 .8 >PUSHBI 4 ACC on stack - >PUSHW L.M32.Printf + >PUSHW L.FMT.Long >LEA.G M32.BUF >SYSCALL sprintf bcs .9 diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 8bbb1107..6b090e24 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -199,7 +199,7 @@ IO.PrintBatchErrMsg >PUSHBI 2 >PUSHW L.MSG.BATCHLINE - jsr .80 + jsr IO.PrintErr ldy #$ff ldx #'-' @@ -217,11 +217,7 @@ IO.PrintBatchErrMsg >PUSHBI 4 >PUSHW L.MSG.BATCHERR -.80 ldy #S.PS.hStdErr - lda (pPS),y - >SYSCALL fprintf - -.9 rts +.80 bra IO.PrintErr *-------------------------------------- IO.PrintErrMsg pha Save EC for PrintF @@ -255,7 +251,8 @@ IO.PrintErrMsg pha Save EC for PrintF >PUSHA >PUSHBI 3 >PUSHW L.MSG.ERROR - ldy #S.PS.hStdErr + +IO.PrintErr ldy #S.PS.hStdErr lda (pPS),y >SYSCALL fprintf rts diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index f2b01988..d67699b9 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -1,5 +1,5 @@ NEW - AUTO 4,1 + AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 @@ -48,6 +48,8 @@ C.ELSE .EQ 31 C.FI .EQ 32 C.END .EQ 33 *-------------------------------------- +C.CLEXEC .EQ 63 +*-------------------------------------- E.CSYN .EQ $C0 E.ESYN .EQ $C1 E.STACKERROR .EQ $C2 @@ -57,7 +59,7 @@ E.NOFOR .EQ $C5 E.NOIF .EQ $C6 E.BADFTYPE .EQ $C7 E.FUNDEF .EQ $C8 -E.UNEXP .EQ $C9 +E.UNEXPEOF .EQ $C9 *-------------------------------------- .INB INC/MACROS.I .INB INC/A2OSX.I @@ -125,6 +127,7 @@ L.MSG.PID .DA MSG.PID L.FMT.DATE .DA FMT.DATE L.FMT.TIME .DA FMT.TIME L.FMT.GETKEY .DA FMT.GETKEY +L.FMT.Long .DA FMT.Long J.ESC .DA CL.BS left arrow .DA HIS.GetNext .DA HIS.GetPrev @@ -187,10 +190,9 @@ J.EXP.OP.UNARY .DA EXP.OP.UNARY.D L.EXP.OP.BINARY .DA EXP.OP.BINARY L.EXP.OP.MATH .DA EXP.OP.MATH L.EXP.OP.LOGIC .DA EXP.OP.LOGIC -L.HOME .DA HOME L.HOME.PROFILE .DA HOME.PROFILE +L.HOME .DA HOME L.PS1 .DA PS1 -L.M32.Printf .DA M32.Printf L.ERR.Codes .DA ERR.Codes L.ERR.Messages .DA ERR.Messages .DA 0 @@ -222,7 +224,12 @@ CS.RUN jsr CL.Init lda (pPS),y >SYSCALL GetMemPtr plx - jsr CORE.Load.YAX + jsr CORE.Load.YAX Exec Batch file + bcs CS.INIT.RTS + + lda #$C0+C.. + jsr CORE.StkPush + bra CS.RUN.LOOP *-------------------------------------- .1 jsr CMD.CD.HOME @@ -235,26 +242,22 @@ CS.RUN jsr CL.Init >SYSCALL printf bcs CS.INIT.RTS - >PUSHEA.G StatBuf - >LDYA L.HOME.PROFILE - >SYSCALL STAT - bcs CS.RUN.LOOP no profile... - >LDYA L.HOME.PROFILE jsr IO.Load - bcs CS.RUN.LOOP + bcs CS.RUN.LOOP No profile... + >LDYA L.HOME.PROFILE - jsr CORE.Load.YAX exec profile and continue + jsr CORE.Load.YAX Exec profile and continue -* bcs CS.RUN.LOOP + bcs CS.RUN.LOOP + + lda #$C0+C.. + jsr CORE.StkPush *-------------------------------------- CS.RUN.LOOP >SLEEP .1 jsr CheckSleep - beq .3 - - >LDA.G bSET.C - bne CS.RUN.LOOP + beq .2 ldy #S.PS.hStdIn lda (pPS),y @@ -268,67 +271,69 @@ CS.RUN.LOOP >SLEEP bcs .9 I/O err cmp #3 Ctrl-C - bne CS.RUN.LOOP + bne .11 lda (pData) batch mode ? beq CS.RUN.LOOP >LDA.G bSET.C beq .8 + bra CS.RUN.LOOP + +.11 cmp #19 test Ctrl-s + bne CS.RUN.LOOP -.3 >LDA.G bPause - bpl .6 - -.4 >SYSCALL GetChar - bcs .9 I/O err - -.5 cmp #3 Ctrl-C - bne .60 - - lda (pData) batch mode ? - beq .61 - - >LDA.G bSET.C - beq .8 - bra .61 - -.60 tax - - >LDA.G bPause - asl - bpl .61 not from PAUSE command - - cpx #C.CR - bne .4 - -.61 >STZ.G bPause - bra .62 - -.6 >LDA.G bReadMode read mode ? - bne .7 - -.62 lda (pData) batch mode ? - beq CS.RUN.INTERACTIVE - - jmp CS.RUN.BATCH -.7 jmp CS.RUN.READ - + lda #$80 + >STA.G bPause + bra CS.RUN.LOOP +*-------------------------------------- .8 lda #3 User Interrupt sec .9 rts *-------------------------------------- -CS.RUN.INTERACTIVE - >LDA.G bExitOnEOF - beq .10 - - jmp CS.RUN.LOOP.EXIT +.2 >LDA.G bPause + bpl .6 -.10 jsr IO.Reset +.3 >SYSCALL GetChar + bcs .9 I/O err + + cmp #3 Ctrl-C + bne .4 + + lda (pData) batch mode ? + beq .5 + + >LDA.G bSET.C + beq .8 + bra .5 + +.4 tax + + >LDA.G bPause + asl $ff ? + bpl .5 not from PAUSE command + + cpx #C.CR + bne .3 + +.5 >STZ.G bPause +*-------------------------------------- +.6 lda (pData) batch mode ? + + bne CS.RUN.BATCH +*-------------------------------------- +CS.RUN.INTERACTIVE + jsr IO.Reset jsr CL.Reset + jsr CL.PrintPrompt bcs .9 - + + >STZ.G bREAD.S + dec + >STA.G READ.N + .1 >SYSCALL GetChar bcs .9 I/O error @@ -361,7 +366,11 @@ CS.RUN.INTERACTIVE >SYSCALL GetMemPtr Y,A =ARGV plx - jsr CORE.Load.YAX X = Copy of CL + jsr CORE.Load.YAX Exec CL + bcs .9 + + lda #$C0+C.CLEXEC + jsr CORE.StkPush .6 jsr CORE.Run @@ -369,68 +378,7 @@ CS.RUN.INTERACTIVE .9 rts *-------------------------------------- -CS.RUN.READ jsr CL.RESET - -.1 >SYSCALL GetChar - bcs CS.RUN.READ.9 - - jsr CL.CHARIN - - >LDA.G CL.bReady - bpl .1 - - lda (ZPCLBuf) - bne .2 - - >LDYA ZPVarNamePtr - >SYSCALL UnSetEnv - bra .7 - -.2 >PUSHW ZPCLBuf - - >LDYA ZPVarNamePtr - >SYSCALL SetEnv - -.7 php - pha - - >STZ.G bReadMode - >STA.G bREAD.S - - pla - plp - -.8 jmp CS.RUN.LOOP.END -CS.RUN.READ.9 rts -*-------------------------------------- -CS.RUN.BATCH >LDA.G bSET.C - bne .2 - - ldy #S.PS.hStdIn - lda (pPS),y - >SYSCALL feof - bcs .2 unsupported - - tay - bne .2 - - >SYSCALL GetChar - bcs CS.RUN.READ.9 - - cmp #3 test Ctrl-c - bne .1 - - bra CS.RUN.LOOP.END CS - -.1 cmp #19 test Ctrl-s - bne .2 - - lda #$80 - >STA.G bPause - clc - jmp CS.RUN.LOOP.END - -.2 >LDA.G bSET.X +CS.RUN.BATCH >LDA.G bSET.X beq .5 ldy #$ff @@ -452,27 +400,25 @@ CS.RUN.BATCH >LDA.G bSET.C bcs CS.RUN.LOOP.RTS .5 jsr CORE.Run - bcc CS.RUN.LOOP.END - - tay 0 = EOF - bne CS.RUN.LOOP.END - - lda #0 - sec CS.RUN.LOOP.END ldy #S.PS.RC sta (pPs),y bcc CS.RUN.LOOP.80 tay - beq CS.RUN.LOOP.80 + beq CS.RUN.LOOP.80 0 = EOF >LDA.G bSET.E bmi CS.RUN.LOOP.80 + + jsr CORE.StkGet + cmp #$C0+C.CLEXEC + beq .1 + jsr IO.PrintBatchErrMsg bcs CS.RUN.LOOP.RTS - ldy #S.PS.RC +.1 ldy #S.PS.RC lda (pPs),y jsr IO.PrintErrMsg @@ -518,6 +464,7 @@ CS.DOEVENT lda (pEvent) CS.QUIT jsr HIS.Quit jsr CL.Quit jsr CORE.Quit + clc rts *-------------------------------------- @@ -621,12 +568,12 @@ 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)" FMT.GETKEY .AZ "%d" -M32.Printf .AZ "%L" +FMT.Long .AZ "%L" *-------------------------------------- -HOME .AZ "${HOME}" HOME.PROFILE .AZ "${HOME}PROFILE" -PS1 .AZ "${PS1}" .HS 00 To Make It ArgV +PS1 .AZ "${PS1}" +HOME .AZ "${HOME}" *-------------------------------------- EscChars .AS 'DBAC' EscChars.Cnt .EQ *-EscChars @@ -634,76 +581,82 @@ EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS *-------------------------------------- IN .AZ "IN" *-------------------------------------- -CMD .AZ ".." - .AZ "." - .AZ "CD" - .AZ "NOHUP" - .AZ "DATE" - .AZ "ECHO" - .AZ "EXIT" - .AZ "GETKEY" - .AZ "MD" - .AZ "PAUSE" - .AZ "PWD" - .AZ "RD" - .AZ "READ" - .AZ "REN" - .AZ "SET" - .AZ "SLEEP" - .AZ "SHIFT" - .AZ "TIME" - .AZ "PUSHD" - .AZ "POPD" - .AZ "FUNCTION" - .AZ "CALL" - .AZ "BREAK" - .AZ "SWITCH" - .AZ "CASE" - .AZ "DEFAULT" - .AZ "FOR" - .AZ "WHILE" - .AZ "IF" - .AZ "NEXT" - .AZ "LOOP" - .AZ "ELSE" - .AZ "FI" - .AZ "END" +CMD .AT ".." + .AT "." + .AT "CD" + .AT "NOHUP" + .AT "DATE" + .AT "ECHO" + .AT "EXIT" + .AT "GETKEY" + .AT "MD" + .AT "PAUSE" + .AT "PWD" + .AT "RD" + .AT "READ" + .AT "REN" + .AT "SET" + .AT "SLEEP" + .AT "SHIFT" + .AT "TIME" + .AT "PUSHD" + .AT "POPD" + .AT "FUNCTION" + .AT "CALL" + .AT "BREAK" + .AT "SWITCH" + .AT "CASE" + .AT "DEFAULT" + .AT "FOR" + .AT "WHILE" + .AT "IF" + .AT "NEXT" + .AT "LOOP" + .AT "ELSE" + .AT "FI" + .AT "END" + .HS 00 +CORE.IO .AT "&" + .AT "<" + .AT ">>" + .AT ">" + .AT "1>>" + .AT "1>" + .AT "2>>" + .AT "2>" + .HS 00 +EXP.BEGIN .AT "![" + .AT "[" + .HS 00 +EXP.OP.UNARY .AT "-D" + .AT "-E" + .AT "-F" + .AT "-N" + .AT "-Z" + .HS 00 +EXP.OP.BINARY .AT "=" + .AT "!=" + .AT ".<" + .AT "<=" + .AT ".>" + .AT ">=" + .AT "-EQ" + .AT "-NE" + .AT "-LT" + .AT "-LE" + .AT "-GT" + .AT "-GE" + .HS 00 +EXP.OP.MATH .AT "+" + .AT "-" + .AT "*" + .AT "/" + .AT "MOD" + .HS 00 +EXP.OP.LOGIC .AT "AND" + .AT "OR" .HS 00 *-------------------------------------- -* https://www.tldp.org/LDP/abs/html/io-redirection.html -*-------------------------------------- -CORE.IO .AZ "&" - .AZ "<" - .AZ ">>" - .AZ ">" - .AZ "1>>" - .AZ "1>" - .AZ "2>>" - .AZ "2>" - .HS 00 -*-------------------------------------- -EXP.BEGIN .AZ "![" - .AZ "[" - .HS 00 -EXP.OP.UNARY .AZ "-D" - .AZ "-E" - .AZ "-F" - .AZ "-N" - .AZ "-Z" - .HS 00 -EXP.OP.BINARY .AZ "=" - .AZ "!=" - .AZ ".<" - .AZ "<=" - .AZ ".>" - .AZ ">=" - .AZ "-EQ" - .AZ "-NE" - .AZ "-LT" - .AZ "-LE" - .AZ "-GT" - .AZ "-GE" - .HS 00 EXP.OP.BINARY.BITS .DA #%010 .DA #%101 @@ -718,16 +671,8 @@ EXP.OP.BINARY.BITS .DA #%110 .DA #%001 .DA #%011 -EXP.OP.MATH .AZ "+" - .AZ "-" - .AZ "*" - .AZ "/" - .AZ "MOD" - .HS 00 + EXP.OP.MATH.FPU .DA #FPU.ADD32,#FPU.SUB32,#FPU.IMUL32,#FPU.IDIV32,#FPU.IMOD32 -EXP.OP.LOGIC .AZ "AND" - .AZ "OR" - .HS 00 *-------------------------------------- .INB USR/SRC/SHARED/X.ERRORS.S *-------------------------------------- @@ -739,7 +684,6 @@ PUSHD.STACK .BS PUSHD.STACK.MAX+1 hFuncList .BS 1 -bReadMode .BS 1 bExitOnEOF .BS 1 bEscMode .BS 1 @@ -750,6 +694,7 @@ bSET.E .BS 1 bSET.X .BS 1 bREAD.S .BS 1 +READ.N .BS 1 Sleep .BS 4 StatBuf .BS S.STAT diff --git a/SHARED/X.ERRORS.S.txt b/SHARED/X.ERRORS.S.txt index 78506bc4..1754452f 100644 --- a/SHARED/X.ERRORS.S.txt +++ b/SHARED/X.ERRORS.S.txt @@ -41,7 +41,7 @@ ERR.Codes .DA #MLI.E.IO .DA #E.NOIF .DA #E.BADFTYPE .DA #E.FUNDEF - .DA #E.UNEXP + .DA #E.UNEXPEOF *-------------------------------------- ERR.Count .EQ *-ERR.Codes *--------------------------------------