PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *-------------------------------------- EXEC.CMD stz hFullCmd stz hEnvPath ldy #hCmdLine lda (pData),y >PUSHA >PUSHBI $20 Push SEP=' ' >PUSHBI 0 Push 0 for getting CMD & ARGS >SYSCALL SYS.PStrGetTkn bcs .99 sta hExecCmd stx hExecArgs >SYSCALL SYS.GetMemPtrA >STYA ZPPtr1 ldx #0 stz ExecCmdIdx stz ExecCmdMode .1 lda CMDS,x beq .6 cmp (ZPPtr1) bne .5 phx ldy #0 .2 iny inx lda (ZPPtr1),y cmp #'a' bcc .3 cmp #'z'+1 bcs .3 eor #$20 to Uppercase .3 cmp CMDS,x bne .4 tya cmp (ZPPtr1) bne .2 plx ldx ExecCmdIdx jsr EXEC.CMD.INT jmp EXEC.CMD.ClnUp .4 plx .5 txa sec adc CMDS,x tax inc ExecCmdIdx inc ExecCmdIdx bra .1 .6 jsr EXEC.CMD.EXT jmp EXEC.CMD.ClnUp .99 rts *-------------------------------------- EXEC.CMD.ClnUp pha php lda hFullCmd beq .1 >SYSCALL SYS.FreeMemA .1 lda hEnvPath beq .2 >SYSCALL SYS.FreeMemA .2 lda hExecArgs beq .3 >SYSCALL SYS.FreeMemA .3 lda hExecCmd beq .8 >SYSCALL SYS.FreeMemA .8 plp pla rts *-------------------------------------- EXEC.CMD.INT jmp (J.INTCMDS,x) *-------------------------------------- * ZPPtr1 = hExecCmd *-------------------------------------- EXEC.CMD.EXT ldy #1 lda (ZPPtr1),y cmp #'/' bne .1 >LDYA ZPPtr1 >SYSCALL SYS.NewPStrYA bra .10 .1 >LDYA L.ENV.PATH push ENVNAME=PATH >SYSCALL SYS.GetEnvVarYA get value for ENV=PATH bcc .12 jmp .9 .12 sta hEnvPath >PUSHB hExecCmd >PUSHB hEnvPath >SYSCALL SYS.FileSearch bcc .10 >PUSHB hExecCmd ldy #S.PS.hPREFIX lda (pPs),y >PUSHA >SYSCALL SYS.FileSearch .10 bcs .9 sta hFullCmd >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.MLIGetFileInfoYA bcs .9 >STYA ZPPTR1 ldy #1 Get File Type lda (ZPPTR1),y cmp #$04 TXT File ? bne .2 lda hFullCmd jsr OpenTxtFileA bcs .9 lda hExecArgs beq .11 >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.NewPStrYA bcs .9 .11 ldy #hInputArgs sta (pData),y bra .9 .2 cmp #$06 BIN File ? bne .4 lda hFullCmd ldy hExecArgs bit ExecCmdMode bmi .3 startproc >SYSCALL SYS.ExecProcessNewEnvYA bra .9 .3 >SYSCALL SYS.CreateProcessYA bra.9 .4 cmp #$ff SYS File ? bne .5 bra * .5 lda #SYSMGR.ERRSYN sec .9 rts *-------------------------------------- EXEC.CMD.CD lda hExecArgs bne EXEC.CMD.CD.C ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.PSTROutYA lda #13 >SYSCALL SYS.COutA clc rts EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA >STYA ZPPTR2 ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 >PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH >PUSHBI 0 no particular Option >SYSCALL SYS.GetMem bcs .99 >STYA ZPPTR3 stx hNEWPATH lda #0 sta (ZPPTR3) ldy #1 lda (ZPPTR2),y cmp #'/' Full Path? beq .3 cmp #'.' ".." ? bne .2 lda (ZPPTR2) cmp #2 bne .97 iny lda (ZPPTR2),y cmp #'.' bne .97 lda (ZPPTR1) tay .1 dey beq .97 lda (ZPPTR1),y cmp #'/' bne .1 tya sta (ZPPTR3) .11 lda (ZPPTR1),y sta (ZPPTR3),y dey bne .11 bra .4 .97 lda #SYSMGR.ERRSYN .98 pha lda hNEWPATH >SYSCALL SYS.FreeMemA pla sec .99 rts .2 >PUSHW ZPPTR1 >PUSHW ZPPTR3 >LIBCALL hLIBSTR,LIBSTR.STRCPYP .3 >PUSHW ZPPTR2 >PUSHW ZPPTR3 >LIBCALL hLIBSTR,LIBSTR.STRCATP lda (ZPPTR3) tay lda #'/' Ending with '/'? cmp (ZPPTR3),y beq .4 iny sta (ZPPTR3),y tya sta (ZPPTR3) .4 >LDYA ZPPTR3 >SYSCALL SYS.CheckPrefixYA bcs .98 ldy #S.PS.hPREFIX lda (pPs),y pha lda hNEWPATH sta (pPs),y pla >SYSCALL SYS.FreeMemA clc rts *-------------------------------------- EXEC.CMD.STARTPROC lda hExecCmd >SYSCALL SYS.FreeMemA stz hExecCmd lda hExecArgs beq .9 >PUSHA >PUSHBI $20 Push SEP=' ' >PUSHBI 0 Push 0 for getting CMD & ARGS >SYSCALL SYS.PStrGetTkn bcs .99 phx sta hExecCmd >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 lda hExecArgs >SYSCALL SYS.FreeMemA pla sta hExecArgs sec ror ExecCmdMode jmp EXEC.CMD.EXT .9 lda #SYSMGR.ERRSYN sec .99 rts *-------------------------------------- EXEC.CMD.SET lda hExecArgs bne EXEC.CMD.SETVAR ldy #S.PS.hENV lda (pPs),y >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 .1 lda (ZPPTR1) beq .8 Ending 0 ? >LDYA ZPPTR1 >SYSCALL SYS.PSTROutYA lda #13 >SYSCALL SYS.COutA lda ZPPTR1 sec adc (ZPPTR1) Add len+1 to PTR sta ZPPTR1 bcc .1 inc ZPPTR1 bra .1 .8 clc rts EXEC.CMD.SETVAR >PUSHA Push Cmd Line >PUSHBI $3D Push SEP='=' >PUSHBI 0 Push Token IDX >SYSCALL SYS.PStrGetTkn bcc .3 lda #SYSMGR.ERRSYN rts .3 sta hVarName stx hVarValue txa beq .31 >PUSHB hVarValue >PUSHB hVarName >SYSCALL SYS.SetEnvVarH jmp .97 .31 lda hExecArgs >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 lda (ZPPTR1) tay lda (ZPPTR1),y cmp #'=' bne .4 lda hVarName >SYSCALL SYS.DelEnvVarA bra .97 .4 lda hVarName >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetEnvVarYA bcs .97 sta hVarValue lda hVarName >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.PSTROutYA lda #'=' >SYSCALL SYS.COutA lda hVarValue >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.PSTROutYA lda #13 >SYSCALL SYS.COutA clc .97 php pha lda hVarValue beq .98 >SYSCALL SYS.FreeMemA .98 lda hVarName >SYSCALL SYS.FreeMemA pla php rts *-------------------------------------- EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime bcs .9 >PUSHW DATELO >LIBCALL hLIBSTR,LIBSTR.PRINTDATE lda #13 >SYSCALL SYS.COutA clc .9 rts *-------------------------------------- EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime bcs .9 >PUSHW TIMELO >LIBCALL hLIBSTR,LIBSTR.PRINTTIME lda #13 >SYSCALL SYS.COutA clc .9 rts *-------------------------------------- EXEC.CMD.ECHO lda hExecArgs beq .98 >SYSCALL SYS.ExpandPStrA bcs .99 pha >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.PSTROutYA lda #13 >SYSCALL SYS.COutA pla >SYSCALL SYS.FreeMemA clc rts .98 lda #SYSMGR.ERRSYN sec .99 rts *-------------------------------------- EXEC.CMD.TYPE lda hExecArgs beq .98 >SYSCALL SYS.GetMemPtrA >SYSCALL SYS.LoadFileYA bcs .99 >STYA ZPPTR2 store file len phx txa >SYSCALL SYS.GetMemPtrA >STYA ZPPTR1 .1 lda ZPPTR2 bne .2 lda ZPPTR2+1 beq .3 dec ZPPTR2+1 .2 dec ZPPTR2 lda (ZPPTR1) >SYSCALL SYS.COutA inc ZPPTR1 bne .1 inc ZPPTR1+1 bra .1 .3 pla >SYSCALL SYS.FreeMemA clc rts .98 lda #SYSMGR.ERRSYN sec .99 rts *-------------------------------------- EXEC.CMD.READ clc rts *-------------------------------------- EXEC.CMD.PAUSE ldy #bPause lda #$80 sta (pData),y clc rts *-------------------------------------- EXEC.CMD.EXIT ldy #bEXIT lda #$FF sta (pData),y clc rts *-------------------------------------- MAN SAVE SBIN/SHELL.S.CMD LOAD SBIN/SHELL.S ASM