Kernel version 0.9 : SHELL, enhancement in Batch mode....(Cont.)

This commit is contained in:
Rémy GIBERT 2017-07-11 17:53:52 +02:00
parent 3cf8399ffb
commit 7d37574112
7 changed files with 184 additions and 52 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -270,8 +270,6 @@ CS.DOEVENT sec
CS.QUIT jsr FIO.FileClose CS.QUIT jsr FIO.FileClose
bne CS.QUIT bne CS.QUIT
>DEBUG
jsr SYM.Quit jsr SYM.Quit
ldy #ASM.T.hMem ldy #ASM.T.hMem

View File

@ -7,7 +7,7 @@ AUTO 6
*-------------------------------------- *--------------------------------------
* Y,A -> Command line (formatted & not empty) * Y,A -> Command line (formatted & not empty)
*-------------------------------------- *--------------------------------------
Cmd.ExecYA stz Cmd.Exec.Mode Cmd.ExecYA stz bStartProc
Cmd.ExecYA.1 >SYSCALL ExpandPStrYA Cmd.ExecYA.1 >SYSCALL ExpandPStrYA
>STYA ZPPtr1 >STYA ZPPtr1
@ -17,14 +17,8 @@ Cmd.ExecYA.1 >SYSCALL ExpandPStrYA
ldx #0 ARGS len ldx #0 ARGS len
lda (ZPPtr1),y lda (ZPPtr1),y
.10
* cmp #'a'
* bcc .11
* cmp #'z'+1
* bcs .11
* eor #$20 to Uppercase
.11 sta CMD,y Store Cmd in Buffer .10 sta CMD,y Store Cmd in Buffer
sty CMD update CMD len sty CMD update CMD len
tya tya
@ -51,7 +45,7 @@ Cmd.ExecYA.1 >SYSCALL ExpandPStrYA
pla pla
>SYSCALL FreeMemA >SYSCALL FreeMemA
>LDYA L.CMDS >LDYA L.INTCMDS
>STYA ZPPtr2 >STYA ZPPtr2
ldx #0 ldx #0
@ -99,7 +93,6 @@ Cmd.ExecYA.1 >SYSCALL ExpandPStrYA
bcc .1 bcc .1
inc ZPPtr2+1 inc ZPPtr2+1
bra .1 bra .1
*-------------------------------------- *--------------------------------------
Cmd.Exec.EXT ldy #1 Cmd.Exec.EXT ldy #1
lda CMD,y lda CMD,y
@ -187,7 +180,7 @@ Cmd.Exec.EXT.BIN
>SYSCALL PStrCat >SYSCALL PStrCat
.1 >LDYAI UsrBuf256 .1 >LDYAI UsrBuf256
bit Cmd.Exec.Mode bit bStartProc
bmi .2 startproc bmi .2 startproc
>SYSCALL ExecProcessNewEnvYA >SYSCALL ExecProcessNewEnvYA
@ -206,10 +199,7 @@ Cmd.Exec.PWD ldy #S.PS.hPREFIX
>SYSCALL GetMemPtrA >SYSCALL GetMemPtrA
>SYSCALL PPrintFYA >SYSCALL PPrintFYA
bcs .9 bcs .9
lda #13 jmp Cmd.Exec.ECHO.CR
>SYSCALL PutCA
lda #10
>SYSCALL PutCA
.9 rts .9 rts
Cmd.Exec.CD1 stz UsrBuf256 Cmd.Exec.CD1 stz UsrBuf256
@ -324,7 +314,7 @@ Cmd.Exec.STARTPROC
lda ARGS lda ARGS
beq Cmd.Exec.ERRSYN beq Cmd.Exec.ERRSYN
sec sec
ror Cmd.Exec.Mode ror bStartProc
>LDYA L.ARGS >LDYA L.ARGS
jmp Cmd.ExecYA.1 jmp Cmd.ExecYA.1
@ -432,26 +422,26 @@ Cmd.Exec.TIME clc
>LDYAI UsrBuf256 >LDYAI UsrBuf256
>SYSCALL PPrintFYA >SYSCALL PPrintFYA
bcs .9 bcs Cmd.Exec.ECHO.RTS
lda #13 bra Cmd.Exec.ECHO.CR
>SYSCALL PutCA
lda #10
>SYSCALL PutCA
.9 rts
*-------------------------------------- *--------------------------------------
Cmd.Exec.ECHO lda ARGS Cmd.Exec.ECHO lda ARGS
beq .1 beq Cmd.Exec.ECHO.CR
>LDYA L.ARGS >LDYA L.ARGS
>SYSCALL PPrintFYA >SYSCALL PPrintFYA
bcs .9 bcs Cmd.Exec.ECHO.RTS
.1 lda #13 Cmd.Exec.ECHO.CR
lda #13
>SYSCALL PutCA >SYSCALL PutCA
bcs Cmd.Exec.ECHO.RTS
lda #10 lda #10
>SYSCALL PutCA >SYSCALL PutCA
.9 rts Cmd.Exec.ECHO.RTS
rts
*-------------------------------------- *--------------------------------------
Cmd.Exec.READ lda ARGS Cmd.Exec.READ lda ARGS
beq .9 beq .9

View File

@ -6,35 +6,47 @@ AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
TXT.Exec jsr TXT.GetBuffer TXT.Exec jsr TXT.GetBuffer
jsr TXT.GetChar
ldy #0
jsr TXT.GetCharNB
bcs .9 bcs .9
.11 cmp #' ' jsr TXT.SavePtr Save Ptr, in case of while,for....
bne .10
jsr TXT.GetNextChar
bcc .11
bcs .9
.10 ldy #0
cmp #$0D cmp #$0D
beq .2 beq .6 empty line...skip...
.1 iny .1 iny
sta (pData),y sta (pData),y
cpy #CmdLine.MAX cpy #CmdLine.MAX
beq .2 beq .7 Buffer full, try execute...
jsr TXT.GetNextChar jsr TXT.GetNextChar
bcs .3 bcs .7 EOF, try execute...
cmp #$0D
bne .1
.2 jsr TXT.GetNextChar Skip CR cmp #$0D EOL, skip CR and exec...
beq .6
.3 tya jsr TXT.CheckCharNB
bcc .1 still in keyword....loop
tya
sta (pData)
jsr TXT.CheckKeyWord
bcs .5 not an internal SCRipt keyword....
jmp (J.TXTCMDS,x)
.5 lda (ZPBufPtr) restore char....
bra .1
.6 jsr TXT.GetNextChar Skip last char...
.7 tya
beq .8 empty line....nothing to do..
sta (pData) sta (pData)
ldy #bEcho ldy #bEcho
@ -47,6 +59,53 @@ TXT.Exec jsr TXT.GetBuffer
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TXT.CheckKeyWord
phy
>LDYA L.TXTCMDS
>STYA ZPPtr2
ldx #0
.1 lda (ZPPtr2)
beq .9 Ending 0, not found....
cmp (pData) Same Len ?
bne .4
tay
.2 lda (pData),y
cmp #'a' To Uppercase
bcc .3
cmp #'z'+1
bcs .3
eor #$20
.3 cmp (ZPPtr2),y
bne .4
dey
bne .2
ply
clc Found an internal Cmd...
rts
.4 inx
inx
lda ZPPtr2
sec
adc (ZPPtr2)
sta ZPPtr2
bcc .1
inc ZPPtr2+1
bra .1
.9 ply
sec
rts
*--------------------------------------
TXT.GetBuffer ldy #hBatchFile TXT.GetBuffer ldy #hBatchFile
lda (pData),y lda (pData),y
>SYSCALL GetMemPtrA >SYSCALL GetMemPtrA
@ -75,7 +134,33 @@ TXT.SetBufPtr ldy #BatchFilePtr
sta ZPBufPtr+1 sta ZPBufPtr+1
rts rts
*-------------------------------------- *--------------------------------------
TXT.PushPtr TXT.SavePtr rts
*--------------------------------------
TXT.PushPtr rts
*--------------------------------------
TXT.GetCharNB jsr TXT.GetChar
bcs TXT.GetNextCharNB.RTS
jsr TXT.CheckCharNB
bcc TXT.GetNextCharNB.RTS
*--------------------------------------
TXT.GetNextCharNB
jsr TXT.GetNextChar
bcs TXT.GetNextCharNB.RTS
jsr TXT.CheckCharNB
bcs TXT.GetNextCharNB
TXT.GetNextCharNB.RTS
rts
*--------------------------------------
TXT.CheckCharNB cmp #32 SPACE
beq .9
cmp #13 CR
beq .9
cmp #10 LF
beq .9
cmp #8 TAB
beq .9
clc
.9 rts
*-------------------------------------- *--------------------------------------
TXT.GetNextChar phy TXT.GetNextChar phy
ldy #BatchFilePtr ldy #BatchFilePtr
@ -94,7 +179,7 @@ TXT.GetNextChar phy
inc ZPBufPtr inc ZPBufPtr
bne TXT.GetChar bne TXT.GetChar
inc ZPBufPtr+1 inc ZPBufPtr+1
*--------------------------------------
TXT.GetChar lda ZPBufPtr TXT.GetChar lda ZPBufPtr
eor ZPBufEnd eor ZPBufEnd
bne .1 bne .1
@ -110,6 +195,62 @@ TXT.GetChar lda ZPBufPtr
.1 lda (ZPBufPtr) .1 lda (ZPBufPtr)
clc clc
rts rts
*---------------------------------------
TXT.IsLetterOrDigit
jsr TXT.IsDigit
bcc TXT.IsLetterRTS
*---------------------------------------
TXT.IsLetter cmp #'A'
bcc .9
cmp #'Z'+1
bcc TXT.IsLetterRTS
cmp #'a'
bcc .9
cmp #'z'+1
rts CC if lowercase
.9 sec
TXT.IsLetterRTS rts
*---------------------------------------
TXT.IsDigit cmp #'0'
bcc .9
cmp #'9'+1
rts cc if ok, cs if not
.9 sec
rts
*--------------------------------------
TXT.Exec.IF jsr TXT.GetCharNB
bcs .9
cmp #'('
bne .9
jsr TXT.ExpEval
bcs .99
tax
jsr TXT.GetCharNB
bcs .9
cmp #')'
bne .9
txa
clc
rts
.9 lda #SYSMGR.ERRSYN
sec
.99 rts
*--------------------------------------
TXT.ExpEval lda #1
clc
rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.TXT SAVE /A2OSX.SRC/SBIN/SHELL.S.TXT

View File

@ -55,7 +55,7 @@ L.TIME .DA TIME
L.STAT .DA STAT L.STAT .DA STAT
L.FMT.DATE .DA FMT.DATE L.FMT.DATE .DA FMT.DATE
L.FMT.TIME .DA FMT.TIME L.FMT.TIME .DA FMT.TIME
L.CMDS .DA CMDS L.INTCMDS .DA INTCMDS
J.INTCMDS .DA Cmd.Exec.CD J.INTCMDS .DA Cmd.Exec.CD
.DA Cmd.Exec.DATE .DA Cmd.Exec.DATE
.DA Cmd.Exec.ECHO .DA Cmd.Exec.ECHO
@ -66,6 +66,8 @@ J.INTCMDS .DA Cmd.Exec.CD
.DA Cmd.Exec.SET .DA Cmd.Exec.SET
.DA Cmd.Exec.STARTPROC .DA Cmd.Exec.STARTPROC
.DA Cmd.Exec.TIME .DA Cmd.Exec.TIME
L.TXTCMDS .DA TXTCMDS
J.TXTCMDS .DA TXT.Exec.IF
L.ERR.Codes .DA ERR.Codes L.ERR.Codes .DA ERR.Codes
L.ERR.Messages .DA ERR.Messages L.ERR.Messages .DA ERR.Messages
.DA 0 .DA 0
@ -495,7 +497,7 @@ CS.END
ENV.PATH >PSTR "PATH" ENV.PATH >PSTR "PATH"
ENV.PWD >PSTR "PWD" ENV.PWD >PSTR "PWD"
ENV.PS1 >PSTR "PS1" ENV.PS1 >PSTR "PS1"
CMDS >PSTR "CD" INTCMDS >PSTR "CD"
>PSTR "DATE" >PSTR "DATE"
>PSTR "ECHO" >PSTR "ECHO"
>PSTR "EXIT" >PSTR "EXIT"
@ -506,6 +508,8 @@ CMDS >PSTR "CD"
>PSTR "STARTPROC" >PSTR "STARTPROC"
>PSTR "TIME" >PSTR "TIME"
.HS 00 .HS 00
TXTCMDS >PSTR "IF"
.HS 00
*-------------------------------------- *--------------------------------------
MSG.GREETINGS >PSTR "\r\nA2osX-Shell\r\n\r\n" MSG.GREETINGS >PSTR "\r\nA2osX-Shell\r\n\r\n"
MSG.PROMPT >PSTR "%S$ " MSG.PROMPT >PSTR "%S$ "
@ -525,8 +529,8 @@ TIME .BS S.TIME
STAT .BS S.STAT STAT .BS S.STAT
hNEWPATH .BS 1 hNEWPATH .BS 1
hCmdLine .BS 1 hCmdLine .BS 1
Cmd.Exec.Mode .BS 1
hFullPath .BS 1 hFullPath .BS 1
bStartProc .BS 1
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
@ -545,8 +549,7 @@ CmdHistory.END .BS 1
hBatchFile .BS 1 hBatchFile .BS 1
BatchFilePtr .BS 2 BatchFilePtr .BS 2
BatchFileLen .BS 2 BatchFileLen .BS 2
DS.END DS.END .ED
.ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S SAVE /A2OSX.SRC/SBIN/SHELL.S