A2osX/SBIN/SHELL.S.CSH.txt

352 lines
5.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.BUILD
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
bcs .9
jsr TXT.SavePtr Save Ptr, in case of while,for....
cmp #$0D
beq .6 empty line...skip...
.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....
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
lda (pData),y
beq .8
>PUSHW pData
>LDYA L.MSG.ECHO
>SYSCALL PPrintFYA
.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
lda (pData),y
>SYSCALL GetMemPtrA
>STYA ZPBufBase
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
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
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
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.TXT
LOAD /A2OSX.SRC/SBIN/SHELL.S
ASM