NEW PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- CMD.NOHUP >LDA.G CORE.PSFlags ora #S.PS.F.NOHUP sta (pData),y >LDYA ZPArgVBuf jmp CORE.ExecExtCmd *-------------------------------------- CMD.SHIFT lda #1 CMD.SHIFTA >SYSCALL ArgV bcs .8 jsr RemoveStrFromArgV .7 ldy #S.PS.ARGC lda (pPS),y dec sta (pPS),y .8 clc rts *-------------------------------------- CMD.PUSHD >LDA.G PUSHD.STACK cmp #PUSHD.STACK+PUSHD.STACK.MAX beq CMD.POPD.CSYN ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtr >SYSCALL strdup bcs CMD.POPD.CSYN >INC.G PUSHD.STACK tay txa sta (pData),y lda (ZPArgVBufPtr) bne CMD.CD.1 .8 clc .9 rts *-------------------------------------- CMD.POPD >LDA.G PUSHD.STACK cmp #PUSHD.STACK beq CMD.POPD.CSYN tay lda (pData),y jsr CMD.SetPrefixA >DEC.G PUSHD.STACK clc CMD.POPD.RTS rts CMD.POPD.CSYN jmp CMD.Exec.CSYN *-------------------------------------- CMD.PWD ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL GetMemPtr >SYSCALL puts rts *-------------------------------------- CMD.CD lda (ZPArgVBufPtr) beq CMD.CD.HOME >LDYA ZPArgVBufPtr bra CMD.CD.1 CMD.CD.HOME >LDYA L.ENV.HOME >SYSCALL GetEnv bcc CMD.CD.1 >LDYA L.ENV.ROOT >SYSCALL GetEnv bcs CMD.PWD CMD.CD.1 * >DEBUG >SYSCALL realpath bcs CMD.POPD.RTS >STYA ZPPtr1 stx TmpByte Save hMem ldy #1 lda (ZPPtr1),y bne .12 txa jmp CMD.SetPrefixA we have '/' .12 >PUSHEA.G StatBuf >LDYA ZPPtr1 >SYSCALL STAT bcs .19 .10 >LDA.G StatBuf+S.STAT.P.TYPE cmp #S.FI.T.DIR beq .11 lda #MLI.E.INVPATH .19 pha lda TmpByte >SYSCALL freemem pla sec rts .11 ldy #$ff .1 iny lda (ZPPtr1),y bne .1 dey lda (ZPPtr1),y cmp #'/' bne .14 lda TmpByte jmp CMD.SetPrefixA already ends with a / .14 iny iny lda #0 >SYSCALL getmem bcs .19 >STYA ZPPtr2 ldy #$ff .2 iny lda (ZPPtr1),y lda (ZPPtr2),y bne .2 iny sta (ZPPtr2),y dey lda #'/' sta (ZPPtr2),y phx lda TmpByte >SYSCALL freemem pla *-------------------------------------- CMD.SetPrefixA pha ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL FreeMem pla ldy #S.PS.hPREFIX sta (pPs),y lda #0 * clc rts *-------------------------------------- CMD.Exec.CSYN lda #E.CSYN sec rts *-------------------------------------- CMD.SET lda (ZPArgVBufPtr) bne CMD.SET.1 * No arg, print all ENV ldy #S.PS.hENV lda (pPs),y >SYSCALL GetMemPtr >STYA ZPPTR1 .1 lda (ZPPTR1) beq .8 Ending 0 ? ldy #$ff .2 iny lda (ZPPTR1),y bne .2 tya sec adc ZPPTR1 sta ZPPTR2 lda #0 adc ZPPTR1+1 sta ZPPTR2+1 >PUSHW ZPPTR2 Push value >PUSHW ZPPTR1 Push name jsr CMD.SET.PRINT bcs .9 ldy #$ff .3 iny lda (ZPPTR2),y bne .3 tya sec adc ZPPTR2 sta ZPPTR1 lda #0 adc ZPPTR2+1 sta ZPPTR1+1 bra .1 .8 clc .9 rts *-------------------------------------- * SET +X VAR = VALUE1 op VALUE2 op VALUE3 ... *-------------------------------------- CMD.SET.1 .1 jsr CMD.IsSwitch bcs .6 cmp #'C' bne .2 >LDA.G bSET.C bra .5 .2 cmp #'X' bne .99 >LDA.G bSET.X .5 eor #$ff sta (pData),y jsr CORE.ArgV.Next bne .1 clc rts .6 >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr jsr CORE.ArgV.Next beq CMD.SET.GET cmp #'=' bne .99 ldy #1 lda (ZPArgVBufPtr),y bne .99 jsr CORE.ArgV.Next beq CMD.SET.UNSET cmp #'`' beq CMD.SET.EXEC jsr EXP.GET bcs .9 >PUSHYA >LDYA ZPVarNamePtr >SYSCALL SetEnv rts .8 clc .9 rts .99 jmp CMD.Exec.CSYN CMD.SET.UNSET >LDYA ZPVarNamePtr >SYSCALL UnsetEnv rts CMD.SET.GET >LDYA ZPVarNamePtr >SYSCALL GetEnv bcc .1 clc rts .1 >PUSHYA push value >LDYA ZPVarNamePtr >PUSHYA push name *-------------------------------------- CMD.SET.PRINT >PUSHBI 4 >LDYA L.MSG.PRINTENV >SYSCALL printf rts *-------------------------------------- CMD.SET.EXEC jsr CORE.ArgV.NextChar skip "`" jsr IO.Pipe.Out bcs .9 >PUSHBI S.PS.F.DUPENV >LDYA ZPArgVBufPtr >SYSCALL execl bcs .9 jsr IO.Pipe.In bcs .9 lda #$ff >STA.G bREAD.S secret >STA.G bReadMode >SLEEP clc .9 rts *-------------------------------------- CMD.DATE sec .HS 90 bcc CMD.TIME clc php >LEA.G TimeBuf >SYSCALL Time >PUSHEA.G TimeBuf plp bcc .1 >PUSHW L.FMT.DATE bra .2 .1 >PUSHW L.FMT.TIME .2 >LEA.G StatBuf >SYSCALL StrFTime >LEA.G StatBuf >SYSCALL puts rts *-------------------------------------- CMD.ECHO stz ZPPtr1 echo -N stz ZPPtr1+1 Token Cnt lda (ZPArgVBufPtr) beq .7 .1 jsr CMD.IsSwitch bcs .2 cmp #'N' bne .99 lda #$ff eor ZPPtr1 sta ZPPtr1 bra .4 .2 lda ZPPtr1+1 beq .3 lda #C.SPACE >SYSCALL putchar .3 >PUSHBI 0 >LDYA ZPArgVBufPtr >SYSCALL printf bcs .9 inc ZPPtr1+1 .4 jsr CORE.ArgV.Next bne .1 .7 bit ZPPtr1 bmi .8 >PUSHBI 0 >LDYA L.MSG.ECHOCRLF >SYSCALL printf rts .8 clc .9 rts .99 lda #E.CSYN sec rts *-------------------------------------- CMD.GETKEY lda (ZPArgVBufPtr) beq .99 ldy #S.PS.hStdIn lda (pPS),y >SYSCALL feof bcs .9 tay beq .1 >SYSCALL getchar bcs .9 .1 >PUSHA >PUSHBI 1 >PUSHW L.FMT.GETKEY >LEA.G M32.BUF >SYSCALL sprintf bcs .9 >PUSHEA.G M32.BUF >LDYA ZPArgVBufPtr >SYSCALL SetEnv .9 rts .99 jmp CMD.Exec.CSYN *-------------------------------------- CMD.READ lda (ZPArgVBufPtr) beq .9 .1 jsr CMD.IsSwitch bcs .4 cmp #'S' bne .2 lda #$ff >STA.G bREAD.S bra .7 .2 cmp #'P' bne .9 jsr CORE.ArgV.Next beq .9 >PUSHBI 0 >LDYA ZPArgVBufPtr >SYSCALL printf bcs .99 bra .7 .4 >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr >LDA.G bReadMode bne .9 lda #$ff >STA.G bReadMode .7 jsr CORE.ArgV.Next bne .1 >LDA.G bReadMode beq .9 clc .99 rts .9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.SLEEP lda (ZPArgVBufPtr) beq .9 >LDYA ZPArgVBufPtr >SYSCALL AToL bcs .9 >PULLL.G Sleep clc rts .9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.PAUSE lda #$FF >STA.G bPause clc rts *-------------------------------------- CMD.EXIT lda (ZPArgVBufPtr) beq .8 no arg, exit 0 >LDYA ZPArgVBufPtr >SYSCALL AToL bcs .9 >PULLL.G M32.ACC >LDA.G M32.ACC .8 pha lda #$FF >STA.G bExit pla clc .9 rts *-------------------------------------- CMD.MD lda (ZPArgVBufPtr) beq .9 >LDYA ZPArgVBufPtr >SYSCALL MKDir rts .9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.REN lda (ZPArgVBufPtr) beq .9 >PUSHW ZPArgVBufPtr jsr CORE.ArgV.Next lda (ZPArgVBufPtr) beq .90 >LDYA ZPArgVBufPtr >SYSCALL Rename rts .90 >PULLYA .9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.RD lda (ZPArgVBufPtr) beq .9 >PUSHEA.G StatBuf >LDYA ZPArgVBufPtr >SYSCALL STAT bcs .99 >LDA.G StatBuf+S.STAT.P.TYPE cmp #S.FI.T.DIR bne .9 >LDYA ZPArgVBufPtr >SYSCALL Remove .99 rts .9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.BREAK .9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.CONTINUE .9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.FOR lda (ZPArgVBufPtr) beq .9 >LDYA ZPArgVBufPtr >STYA ZPVarNamePtr jsr CORE.ArgV.Next beq .9 jsr ToUpperCase cmp #'I' bne .9 ldy #1 lda (ZPArgVBufPtr),y beq .9 jsr ToUpperCase cmp #'N' bne .9 iny lda (ZPArgVBufPtr),y bne .9 jsr CORE.ArgV.Next beq .9 cmp #'`' beq FOR.EXEC sec jsr CORE.StkPushPtr Push CmdPtr AFTER FOR bcs .99 >LDYA ZPArgVBufPtr >SYSCALL strdup bcs .99 phy jsr CORE.StkPush ply bcs .99 tya jsr CORE.StkPush Push ListPtr bcs .99 txa jsr CORE.StkPush Push hLIST bcs .99 lda ZPVarNamePtr jsr CORE.StkPush bcs .99 lda ZPVarNamePtr+1 Push VARNAME jsr CORE.StkPush bcs .99 lda #C.FORLIST jsr CORE.StkPush bcs .99 >LDA.G CORE.Test ora #C.FOR Push FOR jsr CORE.StkPush bcs .99 jmp CMD.NEXT clc .99 rts .9 jmp CMD.Exec.CSYN *-------------------------------------- FOR.EXEC * lda #$ff * >STA.G bReadMode clc rts *-------------------------------------- * stack+7 CmdPtr * stack+5 ListPtr * stack+4 hLIST * stack+2 VARNAME * stack+1 FOR SUB TOKEN * stack FOR TOKEN *-------------------------------------- CMD.NEXT jsr CORE.StkGet Y = StkPtr bcs .9 tax and #$3F cmp #C.FOR bne .9 dey lda (pData),y sta ZPVarNamePtr+1 dey lda (pData),y sta ZPVarNamePtr dey skip hLIST dey lda (pData),y sta ZPPtr1 get ListPtr dey lda (pData),y sta ZPPtr1+1 ldy #$ff .1 iny lda (ZPPtr1) beq .8 inc ZPPtr1 bne .2 inc ZPPtr1+1 .2 cmp #C.SPACE beq .3 sta (ZPCLBuf),y bra .1 .3 lda #0 sta (ZPCLBuf),y tya beq .8 lda (pData) sec sbc #5 tay lda ZPPtr1 sta (pData),y iny lda ZPPtr1+1 sta (pData),y iny lda (pData),y sta ZPInputBufPtr iny lda (pData),y sta ZPInputBufPtr+1 clc rts .8 lda (pData) sec sbc #9 sta (pData) clc rts .9 lda #E.NOFOR sec .99 rts *-------------------------------------- CMD.WHILE CMD.IF jsr CORE.StkGet bcs .1 no context... and #$80 get current.. lsr becomes parent bra .2 .1 lda #$40 ...set Parent = true .2 >STA.G CORE.Test bit #$40 Parent is true ? beq .3 jsr EXP.TEST bcs .9 .3 >LDA.G CORE.IntCmd cmp #C.WHILE bne .8 clc jsr CORE.StkPushPtr Push BEFORE WHILE/IF bcs .9 .8 >LDA.G CORE.Test >ORA.G CORE.IntCmd jmp CORE.StkPush clc .9 rts *-------------------------------------- CMD.LOOP jsr CORE.StkPull bcs .9 tax and #$3F cmp #C.WHILE bne .9 txa bpl .1 jmp CORE.StkPullPtr .1 jsr CORE.StkPull bcs .99 jmp CORE.StkPull .9 lda #E.NOWHILE sec .99 rts *-------------------------------------- CMD.ELSE jsr CORE.StkGet bcs .9 bit #$40 parent is true ? beq .8 no, skip tax and #$3F cmp #C.IF bne .9 txa eor #$80 toggle and store at stack ptr sta (pData),y .8 clc rts .9 lda #E.NOIF sec rts *-------------------------------------- CMD.FI jsr CORE.StkPull bcs .9 and #$3F cmp #C.IF bne .9 clc rts .9 lda #E.NOIF sec rts *-------------------------------------- CMD.IsSwitch lda (ZPArgVBufPtr) cmp #'-' bne .9 ldy #1 lda (ZPArgVBufPtr),y beq .9 cmp #'0' is -0 ... -9 ? bcc .9 cmp #'9'+1 bcc .9 .1 tax iny lda (ZPArgVBufPtr),y bne .9 txa jmp ToUpperCase .9 sec rts *-------------------------------------- MAN SAVE USR/SRC/BIN/SH.S.CMD LOAD USR/SRC/BIN/SH.S ASM