mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-16 00:29:35 +00:00
352 lines
5.9 KiB
Plaintext
352 lines
5.9 KiB
Plaintext
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
|