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