A2osX/SBIN/SHELL.S.CSH.txt

352 lines
5.9 KiB
Plaintext
Raw Normal View History

2016-08-17 06:25:58 +00:00
PR#3
PREFIX /A2OSX.BUILD
2016-08-17 06:25:58 +00:00
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
TXT.Reset ldy #CSH.SEPStack
tya
sta (pData),y
rts
*--------------------------------------
TXT.Exec jsr TXT.GetBuffer
ldy #0
jsr TXT.GetCharNB
2016-08-17 06:25:58 +00:00
bcs .9
jsr TXT.SavePtr Save Ptr, in case of while,for....
2016-08-17 06:25:58 +00:00
cmp #$0D
beq .6 empty line...skip...
2016-08-17 06:25:58 +00:00
.1 iny
sta (pData),y
cpy #CmdLine.MAX
beq .7 Buffer full, try execute...
jsr TXT.GetNextChar
bcs .7 EOF, try execute...
cmp #$0D EOL, skip CR and exec...
beq .6
jsr TXT.CheckCharNB
bcc .1 still in keyword....loop
tya
sta (pData)
jsr TXT.CheckKeyword
bcs .5 not an internal SCRipt keyword....
2016-08-17 06:25:58 +00:00
lda #0
sta (pData) Reset Cmdline
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)
ldy #bEcho
2016-08-17 06:25:58 +00:00
lda (pData),y
beq .8
>PUSHW pData
>LDYA L.MSG.ECHO
>SYSCALL PPrintFYA
2016-08-17 06:25:58 +00:00
.8 clc
.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
2016-08-17 06:25:58 +00:00
lda (pData),y
>SYSCALL GetMemPtrA
>STYA ZPBufBase
2016-08-17 06:25:58 +00:00
ldy #BatchFileLen
lda (pData),y
clc
adc ZPBufBase
sta ZPBufEnd
iny
lda (pData),y
adc ZPBufBase+1
sta ZPBufEnd+1
TXT.SetBufPtr ldy #BatchFilePtr
lda (pData),y
clc
adc ZPBufBase
sta ZPBufPtr
iny
lda (pData),y
adc ZPBufBase+1
sta ZPBufPtr+1
rts
*--------------------------------------
TXT.SavePtr ldx ZPBufPtr
stx CSH.SavePtr
ldx ZPBufPtr+1
stx CSH.SavePtr+1
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
ldy #BatchFilePtr
lda (pData),y
inc
2016-08-17 06:25:58 +00:00
sta (pData),y
bne .1
iny
lda (pData),y
inc
sta (pData),y
.1 ply
inc ZPBufPtr
bne TXT.GetChar
inc ZPBufPtr+1
*--------------------------------------
TXT.GetChar lda ZPBufPtr
eor ZPBufEnd
bne .1
lda ZPBufPtr+1
eor ZPBufEnd+1
bne .1
lda #MLI.ERR.EOF
sec
rts
.1 lda (ZPBufPtr)
clc
2016-08-17 06:25:58 +00:00
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
jsr TXT.GetCharNB
bcs .99
cmp #')'
bne .9
jsr TXT.GetNextCharNB
bcs .99
cmp #'{'
bne .9
lda CSH.ACC
ora CSH.ACC+1
ora CSH.ACC+2
ora CSH.ACC+3
beq .6 eval returned false, skip {{....}}
jsr TXT.GetNextCharNB Skip '{'
lda #'}' Tell '}' is expected at the end of block
jsr TXT.PushSEP
bcs .99
rts
.6 ldx #1 expecting 1 '}'
.7 jsr TXT.GetNextChar
bcs .9
cmp #'{'
bne .71
inx
bra .7
.71 cmp #'}'
bne .7
dex
bne .7
clc
rts
.9 lda #SYSMGR.ERRSYN
sec
.99 rts
*--------------------------------------
TXT.PushSEP tax
ldy #CSH.SEPStack
lda (pData),y
cmp #CSH.SEPStack+CSH.Stack.MAX
beq .9
pha
inc
sta (pData),y
ply
txa
sta (pData),y
clc
rts
.9 lda #SYSMGR.ERRSYN
sec
rts
*--------------------------------------
TXT.PopSEP ldy #CSH.SEPStack
lda (pData),y
cmp #CSH.SEPStack
beq .9
dec
sta (pData),y
clc
rts
.9 lda #SYSMGR.ERRSYN
sec
rts
*--------------------------------------
TXT.CheckSEP tax
ldy #CSH.SEPStack
lda (pData),y
cmp #CSH.SEPStack
beq .9
tay
txa
cmp (pData),y
bne .9
clc
rts
.9 lda #SYSMGR.ERRSYN
sec
rts
*--------------------------------------
TXT.ExpEval jsr TXT.GetNextCharNB
bcs .9
lda #1
sta CSH.ACC
clc
.9 rts
2016-08-17 06:25:58 +00:00
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.TXT
LOAD /A2OSX.SRC/SBIN/SHELL.S
2016-08-17 06:25:58 +00:00
ASM