mirror of
https://github.com/A2osX/A2osX.git
synced 2024-08-13 21:29:33 +00:00
704a72cee7
Finally FIX the KM.APPLTALK module crashing at startup, Fix in SYS Driver messing with MOUSE IRQ, fix VSDRIVE timout
1011 lines
16 KiB
Plaintext
1011 lines
16 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.BUILD
|
||
LOMEM $A00
|
||
INC 1
|
||
AUTO 6
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
CSH.TYPE.CHAR .EQ 1
|
||
CSH.TYPE.INT .EQ 2
|
||
CSH.TYPE.LONG .EQ 3
|
||
CSH.TYPE.FLOAT .EQ 4
|
||
*--------------------------------------
|
||
CSH.Init lda #$FF
|
||
>STA.G bExitOnEOF
|
||
|
||
inc
|
||
>STA.G CSH.SymbolsPtr
|
||
>STA.G CSH.DataPtr
|
||
>STA.G CSH.StackPtr
|
||
|
||
lda #1
|
||
>SYSCALL GetArg.A
|
||
>SYSCALL LoadTxtFile.YA
|
||
bcs .9
|
||
|
||
txa
|
||
>STA.G CSH.hBuf
|
||
>SYSCALL GetMemPtr.A
|
||
>STYA ZPCSHBufPtr
|
||
|
||
>LDYAI 256
|
||
>SYSCALL GetMem0.YA
|
||
bcs .9
|
||
txa
|
||
>STA.G CSH.hSymbols
|
||
>SYSCALL GetMemPtr.A
|
||
>STYA ZPCSHSymbols
|
||
|
||
>LDYAI 256
|
||
>SYSCALL GetMem.YA
|
||
bcs .9
|
||
txa
|
||
>STA.G CSH.hData
|
||
>SYSCALL GetMemPtr.A
|
||
>STYA ZPCSHData
|
||
|
||
>LDYAI 256
|
||
>SYSCALL GetMem.YA
|
||
bcs .9
|
||
txa
|
||
>STA.G CSH.hStack
|
||
>SYSCALL GetMemPtr.A
|
||
>STYA ZPCSHStack
|
||
|
||
* clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
CSH.Run lda #0
|
||
>STA.G CmdBuflen Reset Cmdline
|
||
jsr CSH.GetCharNB
|
||
bcs .9
|
||
|
||
cmp #'}' End of block ?
|
||
bne .1
|
||
|
||
jsr CSH.CheckStack must be something on stack....
|
||
bcs .9
|
||
|
||
jsr CSH.Pop was expected, get stacked Cmd...
|
||
tax
|
||
jmp (J.CSH.KEYWORDS.END,x)
|
||
|
||
.1 cmp #$0D
|
||
bne .2
|
||
|
||
jmp CSH.GetNextCharNB Skip CR and exit
|
||
|
||
.2 pha
|
||
jsr CSH.SavePtr Save Ptr, in case of while,for....
|
||
pla
|
||
jsr CSH.IsLetter
|
||
bcc .3
|
||
|
||
cmp #'#'
|
||
beq .5 comments : pass line to shell
|
||
|
||
bra .9 error, todo : PREOPS ++ --.....
|
||
|
||
.3 >LDYA L.CSH.KEYWORDS
|
||
jsr CSH.LookupID
|
||
|
||
bcs .4 not an internal CSH keyword....
|
||
|
||
txa
|
||
>STA.G CSH.CmdSave
|
||
|
||
jmp (J.CSH.KEYWORDS,x)
|
||
|
||
.4 jsr CSH.GetVar
|
||
bcs .5
|
||
|
||
|
||
jsr CSH.GetCharNB
|
||
bcs .9
|
||
cmp #'='
|
||
bne .99
|
||
|
||
jsr CSH.GetNextCharNB Skip =
|
||
bcs .99
|
||
|
||
jsr CSH.ExpEval
|
||
bcs .9
|
||
|
||
jsr CSH.StoreACCToVar
|
||
bcs .9
|
||
|
||
jsr CSH.GetChar
|
||
cmp #';'
|
||
bne .99
|
||
|
||
jmp CSH.GetNextCharNB Skip ;
|
||
|
||
.99 lda #CSH.E.SYNTAX
|
||
sec
|
||
.9 rts
|
||
|
||
.5
|
||
|
||
jsr CSH.RestorePtr Restore ptr to get full cmd line to execute
|
||
|
||
ldy #$0
|
||
|
||
.6 lda (ZPCSHBufPtr),y
|
||
beq .7
|
||
|
||
cmp #13
|
||
beq .7
|
||
sta (ZPCMDBuf),y
|
||
iny
|
||
cpy #CmdLine.MAX
|
||
bne .6
|
||
bra .99 Line Too long !!!
|
||
|
||
.7 lda #0
|
||
sta (ZPCMDBuf),y
|
||
|
||
tya
|
||
clc
|
||
adc ZPCSHBufPtr
|
||
sta ZPCSHBufPtr
|
||
bcc .8
|
||
inc ZPCSHBufPtr+1
|
||
|
||
.8 tya
|
||
>STA.G CmdBuflen
|
||
lda #$ff
|
||
>STA.G bCmdBufexec
|
||
|
||
>LDA.G bEcho
|
||
beq .80
|
||
|
||
>PUSHW ZPCMDBuf
|
||
>LDYA L.MSG.ECHO
|
||
>SYSCALL PrintF.YA
|
||
|
||
.80 clc
|
||
rts
|
||
*--------------------------------------
|
||
CSH.Quit >LDA.G CSH.hBuf
|
||
beq .1
|
||
>SYSCALL FreeMem.A
|
||
|
||
.1 >LDA.G CSH.hStack
|
||
beq .2
|
||
>SYSCALL FreeMem.A
|
||
|
||
.2 >LDA.G CSH.hData
|
||
beq .3
|
||
>SYSCALL FreeMem.A
|
||
|
||
.3 >LDA.G CSH.hSymbols
|
||
beq .8
|
||
>SYSCALL FreeMem.A
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
CSH.WHILE
|
||
CSH.IF jsr CSH.GetCharNB
|
||
bcs .9
|
||
cmp #'('
|
||
bne .9
|
||
|
||
jsr CSH.GetNextCharNB
|
||
bcs .9
|
||
|
||
jsr CSH.ExpEval
|
||
bcs .99
|
||
|
||
jsr CSH.GetCharNB
|
||
bcs .99
|
||
cmp #')'
|
||
bne .9
|
||
|
||
jsr CSH.GetNextCharNB
|
||
bcs .99
|
||
cmp #'{'
|
||
bne .9
|
||
|
||
jsr CSH.IsACC0
|
||
bcc .6 eval returned ACC=0, skip {{....}}
|
||
|
||
jsr CSH.GetNextCharNB Skip '{'
|
||
bcs .99
|
||
|
||
>LDA.G CSH.CmdSave Push "IF" or "WHILE"
|
||
tax
|
||
jsr CSH.Keyword.start
|
||
bcs .99
|
||
|
||
lda #'}' Tell '}' is expected at the end of block
|
||
jsr CSH.Push
|
||
bcs .99
|
||
|
||
rts
|
||
|
||
.6 ldx #1 expecting 1 '}' for now....
|
||
|
||
.7 jsr CSH.GetNextChar
|
||
bcs .9
|
||
cmp #'{'
|
||
bne .71
|
||
inx
|
||
bra .7
|
||
|
||
.71 cmp #'}'
|
||
bne .7
|
||
txa
|
||
beq .9
|
||
dex
|
||
bne .7
|
||
|
||
jsr CSH.GetNextChar
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #CSH.E.SYNTAX
|
||
sec
|
||
.99 rts
|
||
|
||
CSH.Keyword.Start
|
||
jmp (J.CSH.KEYWORDS.START,x)
|
||
*--------------------------------------
|
||
CSH.IF.START jmp CSH.Push
|
||
*--------------------------------------
|
||
CSH.WHILE.START pha
|
||
>LDA.G CSH.BufPtrSave+1 WHILE : push loop address...
|
||
jsr CSH.Push
|
||
>LDA.G CSH.BufPtrSave
|
||
jsr CSH.Push
|
||
pla
|
||
jmp CSH.Push
|
||
*--------------------------------------
|
||
CSH.IF.END jsr CSH.GetNextChar just skip ending '}'
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
CSH.WHILE.END jsr CSH.Pop
|
||
sta ZPCSHBufPtr
|
||
jsr CSH.Pop
|
||
sta ZPCSHBufPtr+1
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
CSH.ELSE
|
||
CSH.DO
|
||
CSH.FOR
|
||
CSH.SWITCH
|
||
CSH.CASE
|
||
CSH.BREAK
|
||
CSH.CONTINUE
|
||
|
||
lda #CSH.E.SYNTAX
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.CHAR lda #CSH.TYPE.CHAR
|
||
bra CSH.TYPE
|
||
CSH.INT lda #CSH.TYPE.INT
|
||
bra CSH.TYPE
|
||
CSH.LONG lda #CSH.TYPE.LONG
|
||
bra CSH.TYPE
|
||
CSH.FLOAT lda #CSH.TYPE.FLOAT
|
||
|
||
CSH.TYPE >STA.G CSH.ACCT
|
||
|
||
jsr CSH.GetChar
|
||
bcs .9
|
||
cmp #' '
|
||
bne .9
|
||
|
||
jsr CSH.GetNextCharNB
|
||
bcs .9
|
||
|
||
jsr CSH.IsLetter
|
||
bcs .9
|
||
|
||
jsr CSH.GetVar Already exists ?
|
||
bcc .90
|
||
|
||
jsr CSH.AddVar No, add with undefined value...
|
||
bcs .99
|
||
|
||
jsr CSH.GetCharNB
|
||
bcs .9
|
||
cmp #';'
|
||
beq .8 end of declaration, no value...
|
||
|
||
cmp #'='
|
||
bne .9
|
||
|
||
jsr CSH.GetNextCharNB
|
||
bcs .9
|
||
|
||
jsr CSH.ExpEval
|
||
|
||
bcs .9
|
||
|
||
jsr CSH.StoreACCToVar Update value to this var
|
||
|
||
jsr CSH.GetChar
|
||
bcs .9
|
||
cmp #';'
|
||
bne .9
|
||
|
||
.8 jsr CSH.GetNextCharNB Skip ;
|
||
clc
|
||
rts
|
||
|
||
.90 lda #CSH.E.DUP
|
||
sec
|
||
rts
|
||
|
||
.9 lda #CSH.E.SYNTAX
|
||
sec
|
||
.99 rts
|
||
*--------------------------------------
|
||
CSH.ExpEval jsr CSH.ZeroACC
|
||
dec A=0
|
||
>STA.G CSH.EXPBOP1
|
||
|
||
jsr CSH.GetCharNB
|
||
bcs .9
|
||
|
||
.10 jsr CSH.IsLetter Fnc or Var ?
|
||
bcs .2
|
||
|
||
jsr CSH.GetVar
|
||
bcs .1
|
||
|
||
jsr CSH.LoadACCFromVar
|
||
bcs .9
|
||
bra .11
|
||
|
||
.1 bra .9 TO DO : Functions
|
||
|
||
.2 jsr CSH.IsDigit10 number ?
|
||
bcs .9
|
||
|
||
jsr CSH.GetNumInACC
|
||
bcs .9
|
||
|
||
.11 jsr CSH.GetCharNB
|
||
bcs .9
|
||
|
||
cmp #')'
|
||
beq .8
|
||
cmp #';'
|
||
beq .8
|
||
|
||
jsr CSH.IsOPChar
|
||
bcs .9
|
||
|
||
>LDYA L.CSH.BOPS
|
||
jsr CSH.LookupOP
|
||
bcs .9
|
||
|
||
>LDA.G CSH.EXPBOP1 previous OP...
|
||
bpl .5 go check precedence
|
||
|
||
txa
|
||
>STA.G CSH.EXPBOP1
|
||
jsr CSH.ACC2ARG
|
||
jsr CSH.GetCharNB
|
||
bcc .10 go check for an ARG
|
||
|
||
.9 lda #CSH.E.SYNTAX
|
||
sec
|
||
.99 rts
|
||
|
||
.5 txa
|
||
>STA.G CSH.EXPBOP2
|
||
>CMP.G CSH.EXPBOP1
|
||
bcs .3
|
||
|
||
* new OP has precedence, stack ACC
|
||
|
||
|
||
|
||
bra .10
|
||
|
||
* Old OP has precedence, compute ACC=ARG <BOP> ACC
|
||
.3 >LDA.G CSH.EXPBOP1
|
||
jsr CSA.Compute
|
||
bcs .9
|
||
jsr CSH.GetCharNB
|
||
bcc .10
|
||
bra .9
|
||
|
||
.8 >LDA.G CSH.EXPBOP1
|
||
bmi .80
|
||
|
||
jmp CSA.Compute
|
||
|
||
.80 clc
|
||
rts
|
||
*--------------------------------------
|
||
CSH.SavePtr >LDYA ZPCSHBufPtr
|
||
>STYA.G CSH.BufPtrSave
|
||
rts
|
||
*--------------------------------------
|
||
CSH.RestorePtr >LDYA.G CSH.BufPtrSave
|
||
>STYA ZPCSHBufPtr
|
||
rts
|
||
*--------------------------------------
|
||
CSH.LookupID >STYA ZPPtr1
|
||
jsr CSH.GetIDLen
|
||
bra CSH.Lookup
|
||
|
||
CSH.LookupOP >STYA ZPPtr1
|
||
jsr CSH.GetOPLen
|
||
|
||
CSH.Lookup phy Y = len
|
||
|
||
ldx #0
|
||
|
||
.1 lda (ZPPtr1)
|
||
beq .9 Ending 0, not found....
|
||
|
||
pla
|
||
pha Get Back Len
|
||
|
||
cmp (ZPPtr1) Same Len ?
|
||
bne .4
|
||
|
||
tay
|
||
|
||
.2 lda (ZPPtr1),y
|
||
|
||
.3 dey
|
||
cmp (ZPCSHBufPtr),y
|
||
bne .4
|
||
tya
|
||
|
||
bne .2
|
||
|
||
pla Found keyword...
|
||
clc
|
||
adc ZPCSHBufPtr ..advance Ptr to char after it..
|
||
sta ZPCSHBufPtr
|
||
bcc .8
|
||
inc ZPCSHBufPtr+1
|
||
clc
|
||
.8 rts
|
||
|
||
.4 inx
|
||
inx
|
||
|
||
lda ZPPtr1
|
||
sec
|
||
adc (ZPPtr1)
|
||
sta ZPPtr1
|
||
bcc .1
|
||
inc ZPPtr1+1
|
||
bra .1
|
||
|
||
.9 pla
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.GetNumInACC >LDA.G CSH.ACCT
|
||
cmp #CSH.TYPE.FLOAT
|
||
bcc .1
|
||
|
||
>PUSHWI ZPCSHBufPtr
|
||
>PUSHW ZPCSHBufPtr
|
||
>PUSHEA.G CSH.ACC
|
||
|
||
>SYSCALL StrToF
|
||
rts
|
||
|
||
.1 >PUSHBI 10
|
||
|
||
>PUSHWI ZPCSHBufPtr
|
||
>PUSHW ZPCSHBufPtr
|
||
>PUSHEA.G CSH.ACC
|
||
|
||
>SYSCALL StrToL
|
||
rts
|
||
*--------------------------------------
|
||
CSH.ZeroACC lda #0
|
||
ldx #5
|
||
ldy #CSH.ACC
|
||
|
||
.1 sta (pData),y
|
||
iny
|
||
dex
|
||
bne .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CSH.ACC2ARG >LEA.G CSH.ACCT
|
||
>STYA ZPPtr1
|
||
|
||
>LEA.G CSH.ARGT
|
||
>STYA ZPPtr2
|
||
|
||
ldy #5
|
||
|
||
.1 lda (ZPPtr1),y
|
||
sta (ZPPtr2),y
|
||
dey
|
||
bpl .1
|
||
|
||
rts
|
||
*--------------------------------------
|
||
* Vars...
|
||
*--------------------------------------
|
||
CSH.AddVar jsr CSH.GetIDLen
|
||
|
||
sec
|
||
>ADC.G CSH.SymbolsPtr Enough room to store this symbol ?
|
||
|
||
bcs .99
|
||
|
||
adc #1 Add One Byte for storing Ptr to DATA
|
||
bcs .99 Out of Symbols space
|
||
|
||
>LDA.G CSH.DataPtr
|
||
pha
|
||
|
||
>LDA.G CSH.ACCT
|
||
tax
|
||
sec +1 for Type
|
||
adc CSH.TSIZE,x
|
||
bcs .98 Out of Data Space
|
||
|
||
>LDA.G CSH.SymbolsPtr
|
||
pha
|
||
|
||
jsr CSH.GetIDLen
|
||
|
||
ply
|
||
sta (ZPCSHSymbols),y
|
||
iny
|
||
|
||
jsr CSH.GetChar
|
||
|
||
.1 sta (ZPCSHSymbols),y Store this symbol....
|
||
iny
|
||
jsr CSH.GetNextChar
|
||
|
||
jsr CSH.IsLetterOrDigit
|
||
bcc .1
|
||
|
||
pla Get Back Data Ptr
|
||
pha
|
||
|
||
sta (ZPCSHSymbols),y
|
||
iny
|
||
|
||
tya
|
||
>STA.G CSH.SymbolsPtr Mark new end of Symbols
|
||
|
||
pla Get again Data Ptr
|
||
clc
|
||
adc ZPCSHData
|
||
sta ZPCSHValue
|
||
lda #0
|
||
adc ZPCSHData+1
|
||
sta ZPCSHValue+1
|
||
|
||
>LDA.G CSH.ACCT
|
||
sta (ZPCSHValue)
|
||
* clc
|
||
rts
|
||
|
||
.98 pla
|
||
.99 lda #CSH.E.OOM
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.GetVar >LDYA ZPCSHSymbols
|
||
>STYA ZPPtr1
|
||
|
||
jsr CSH.GetIDLen
|
||
tax Save len
|
||
|
||
.1 lda (ZPPtr1)
|
||
beq .9
|
||
|
||
txa Get back len
|
||
cmp (ZPPtr1)
|
||
bne .3
|
||
|
||
tay
|
||
|
||
.2 lda (ZPPtr1),y
|
||
dey
|
||
cmp (ZPCSHBufPtr),y
|
||
bne .3
|
||
|
||
tya
|
||
bne .2
|
||
|
||
lda (ZPPtr1)
|
||
inc
|
||
tay
|
||
lda (ZPPtr1),y Get Ptr to DATA
|
||
clc
|
||
adc ZPCSHData
|
||
sta ZPCSHValue
|
||
lda #0
|
||
adc ZPCSHData+1
|
||
sta ZPCSHValue+1
|
||
|
||
txa Get back len
|
||
|
||
clc
|
||
adc ZPCSHBufPtr
|
||
sta ZPCSHBufPtr
|
||
bcc .8
|
||
inc ZPCSHBufPtr+1
|
||
|
||
clc
|
||
.8 rts
|
||
|
||
.3 lda (ZPPtr1)
|
||
sec
|
||
adc ZPPtr1
|
||
sta ZPPtr1
|
||
bcc .4
|
||
inc ZPPtr1+1
|
||
|
||
.4 inc ZPPtr1 Skip Pointer to TYPE/DATA
|
||
bne .1
|
||
inc ZPPtr1+1
|
||
bra .1
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.LoadACCFromVar
|
||
>LDA.G CSH.ACCT
|
||
cmp (ZPCSHValue)
|
||
bne .9
|
||
|
||
tax
|
||
lda CSH.TSIZE,x
|
||
tax Byte count to transfer
|
||
|
||
>LEA.G CSH.ACC
|
||
>STYA ZPPtr1
|
||
|
||
ldy #1
|
||
|
||
.1 lda (ZPCSHValue),y
|
||
sta (ZPPtr1)
|
||
inc ZPPtr1
|
||
bne .2
|
||
inc ZPPtr1+1
|
||
|
||
.2 iny
|
||
dex
|
||
bne .1
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #CSH.E.TMISMATCH
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.StoreACCToVar
|
||
>LDA.G CSH.ACCT
|
||
cmp (ZPCSHValue)
|
||
bne .9
|
||
|
||
tax
|
||
lda CSH.TSIZE,x
|
||
tax Byte count to transfer
|
||
|
||
>LEA.G CSH.ACC
|
||
>STYA ZPPtr1
|
||
|
||
ldy #1 do not trash TYPE byte
|
||
|
||
.1 lda (ZPPtr1)
|
||
inc ZPPtr1
|
||
bne .2
|
||
inc ZPPtr1+1
|
||
|
||
.2 sta (ZPCSHValue),y
|
||
iny
|
||
dex
|
||
bne .1
|
||
clc
|
||
rts
|
||
|
||
.9 lda #CSH.E.TMISMATCH
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.IsACC0 >LDA.G CSH.ACCT
|
||
cmp #CSH.TYPE.FLOAT
|
||
bne .1 char,int,long
|
||
>LDA.G CSH.ACC
|
||
bne .9
|
||
|
||
.8 clc
|
||
rts
|
||
|
||
.1 tax
|
||
lda CSH.TSIZE,x
|
||
tax
|
||
|
||
lda #0
|
||
ldy #CSH.ACC
|
||
|
||
.2 ora (pData),y
|
||
iny
|
||
dex
|
||
bne .2
|
||
|
||
tax
|
||
beq .8
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
CSA.Compute tax
|
||
jmp (J.CSH.BOPS,x)
|
||
*--------------------------------------
|
||
CSH.BOPS.ADD
|
||
|
||
|
||
|
||
CSH.BOPS.SUB
|
||
CSH.BOPS.MUL
|
||
CSH.BOPS.DIV
|
||
CSH.BOPS.MOD
|
||
CSH.BOPS.SHL
|
||
CSH.BOPS.SHR
|
||
CSH.BOPS.L
|
||
CSH.BOPS.G
|
||
CSH.BOPS.LE
|
||
CSH.BOPS.GE
|
||
CSH.BOPS.EQ
|
||
CSH.BOPS.NE
|
||
CSH.BOPS.AND
|
||
CSH.BOPS.OR
|
||
CSH.BOPS.EOR
|
||
CSH.BOPS.LAND
|
||
CSH.BOPS.LOR
|
||
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
* Stack
|
||
*--------------------------------------
|
||
CSH.Push pha
|
||
>LDA.G CSH.StackPtr
|
||
tay
|
||
|
||
pla
|
||
sta (ZPCSHStack),y
|
||
iny
|
||
beq .9
|
||
tya
|
||
>STA.G CSH.StackPtr
|
||
sta (pData),y
|
||
clc
|
||
rts
|
||
|
||
.9 lda #CSH.E.SOVERFLW
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.Pop >LDA.G CSH.StackPtr
|
||
beq .9
|
||
dec
|
||
tay
|
||
sta (pData),y
|
||
lda (ZPCSHStack),y
|
||
clc
|
||
rts
|
||
|
||
.9 lda #CSH.E.SYNTAX
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.CheckStack pha
|
||
>LDA.G CSH.StackPtr
|
||
beq .9
|
||
dec
|
||
tay
|
||
pla
|
||
cmp (ZPCSHStack),y
|
||
bne .9
|
||
|
||
tya
|
||
>STA.G CSH.StackPtr
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #CSH.E.SYNTAX
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
* CHAR related Subs.....
|
||
*--------------------------------------
|
||
CSH.GetOPLen ldy #0
|
||
|
||
.1 iny
|
||
lda (ZPCSHBufPtr),y
|
||
beq .8
|
||
|
||
jsr CSH.IsOPChar
|
||
bcc .1
|
||
|
||
.8 tya
|
||
rts
|
||
*--------------------------------------
|
||
CSH.GetIDLen ldy #0
|
||
|
||
.1 iny
|
||
lda (ZPCSHBufPtr),y
|
||
beq .8
|
||
|
||
jsr CSH.IsLetterOrDigit
|
||
bcc .1
|
||
|
||
.8 tya
|
||
rts
|
||
*--------------------------------------
|
||
CSH.GetCharNB jsr CSH.GetChar
|
||
bcs CSH.GetNextCharNB.RTS
|
||
jsr CSH.CheckCharNB
|
||
bcc CSH.GetNextCharNB.RTS
|
||
*--------------------------------------
|
||
CSH.GetNextCharNB
|
||
jsr CSH.GetNextChar
|
||
bcs CSH.GetNextCharNB.RTS
|
||
jsr CSH.CheckCharNB
|
||
bcs CSH.GetNextCharNB
|
||
CSH.GetNextCharNB.RTS
|
||
rts
|
||
*--------------------------------------
|
||
CSH.CheckCharNB cmp #32 SPACE
|
||
beq .9
|
||
cmp #13 CR
|
||
beq .9
|
||
cmp #10 LF
|
||
beq .9
|
||
cmp #8 TAB
|
||
beq .9
|
||
clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
CSH.GetNextChar inc ZPCSHBufPtr
|
||
bne CSH.GetChar
|
||
inc ZPCSHBufPtr+1
|
||
*--------------------------------------
|
||
CSH.GetChar lda (ZPCSHBufPtr)
|
||
beq .9
|
||
clc
|
||
rts
|
||
|
||
.9 lda #MLI.E.EOF
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
CSH.IsOPChar ldx #OPChars.Count-1
|
||
|
||
.1 cmp CSH.OPChars,x
|
||
beq .8
|
||
dex
|
||
bpl .1
|
||
sec
|
||
rts
|
||
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
CSH.IsLetterOrDigit
|
||
jsr CSH.IsDigit10
|
||
bcc CSH.IsLetterRTS
|
||
*---------------------------------------
|
||
CSH.IsLetter cmp #'_'
|
||
bne .1
|
||
clc
|
||
rts
|
||
|
||
.1 cmp #'A'
|
||
bcc .9
|
||
|
||
cmp #'Z'+1
|
||
bcc CSH.IsLetterRTS
|
||
|
||
cmp #'a'
|
||
bcc .9
|
||
cmp #'z'+1
|
||
rts CC if lowercase
|
||
|
||
.9 sec
|
||
|
||
CSH.IsLetterRTS rts
|
||
*---------------------------------------
|
||
CSH.IsDigit10 cmp #'0'
|
||
bcc .9
|
||
cmp #'9'+1
|
||
rts cc if ok, cs if not
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
CSH.ErrorMsg >LDA.G CSH.hBuf
|
||
>SYSCALL GetMemPtr.A
|
||
>STYA ZPPtr1
|
||
|
||
lda #0
|
||
>STA.G CSH.LineNum
|
||
iny
|
||
>STA.G CSH.LineNum+1
|
||
|
||
.1 >LDYA ZPPtr1
|
||
>STYA ZPPtr2 Save actual line start
|
||
|
||
>INCW.G CSH.LineNum
|
||
|
||
.2 lda (ZPPtr1)
|
||
beq .6 EoF
|
||
inc ZPPtr1
|
||
bne .3
|
||
inc ZPPtr1+1
|
||
|
||
.3 cmp #$0D
|
||
bne .2 Scan until EoL
|
||
|
||
ldx ZPPtr1
|
||
cpx ZPCSHBufPtr
|
||
lda ZPPtr1+1
|
||
sbc ZPCSHBufPtr+1
|
||
bcc .1 not this line....
|
||
|
||
.4 ldy #0
|
||
|
||
.5 lda (ZPPtr2),y
|
||
beq .6
|
||
iny
|
||
cmp #$0D
|
||
beq .6
|
||
phy
|
||
>SYSCALL PutChar.A
|
||
ply
|
||
bra .5
|
||
|
||
.6 lda #$0D
|
||
>SYSCALL PutChar.A
|
||
lda #$0A
|
||
>SYSCALL PutChar.A
|
||
|
||
|
||
|
||
lda ZPCSHBufPtr
|
||
sec
|
||
sbc ZPPtr2
|
||
beq .8
|
||
tay
|
||
|
||
.7 phy
|
||
lda #'-'
|
||
>SYSCALL PutChar.A
|
||
ply
|
||
dey
|
||
bne .7
|
||
|
||
.8 >PUSHW.G CSH.LineNum
|
||
|
||
>LDYA L.MSG.CSHERR
|
||
>SYSCALL PrintF.YA
|
||
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE /A2OSX.SRC/SBIN/SHELL.S.CSH
|
||
LOAD /A2OSX.SRC/SBIN/SHELL.S
|
||
ASM
|