A2osX/BIN/CSH.S.EXP.txt

253 lines
4.0 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.

NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* Input:
* ZPInputBufPtr, A = Expected type
* Output:
* CS, A = EC
* CC, X = Var Type, Value on Stack
*--------------------------------------
CSH.ExpEval ldx ZPPtr1
phx
ldx ZPPtr1+1 local : used by lookup
phx
ldx ZPPtr2 local : VarType
phx
ldx ZPPtr2+1 local : BOP
phx
sta ZPPtr2 local : expected type
lda #$ff
pha
*--------------------------------------
.10 jsr CSH.GetCharNB
bcs .19
.11 cmp #'('
bne .20
jsr CSH.GetNextCharNB skip (
bcs .19
lda ZPPtr2
jsr CSH.ExpEval
bcs .19
stx ZPPtr2
jsr CSH.GetCharNB
bcs .19
cmp #')'
bne .19
jsr CSH.GetNextCharNB skip )
bcc .31
.19 jmp .90
*--------------------------------------
.20 jsr CSH.IsLetter define, Fnc or Var ?
bcs .22
jsr CSH.GetDefine
bcc .10
jsr CSH.GetVar
bcs .21
ldx ZPPtr2 YA=VarID, X=expected var type (or 0=any)
jsr CSH.GetVarValueOnStack Y,A = VarID, Get value on stack
bcs .29
stx ZPPtr2 store real var type
bra .30
.21 lda ZPPtr2 var type
jsr CSH.fCall X = function index
bcs .29
stx ZPPtr2 store real var type
bra .30
.22 jsr CSH.IsDigit10 number ?
bcs .24
ldx ZPPtr2
bne .23
ldx #CSH.T.SINT
stx ZPPtr2
.23 jsr CSH.GetNumOnStack
bcs .29
bra .30
.24 cmp #'"' String literal
bne .90
jsr CSH.AddContCharP
.29 bcs .99
*--------------------------------------
.30 jsr CSH.GetCharNB
bcs .90
.31 cmp #','
beq .80
cmp #')'
beq .80
cmp #';'
beq .80
jsr CSH.IsOPChar
bcs .90
>LDYA L.CSH.BOPS we are at V1 op1 V2 op2...
jsr CSH.LookupOP
bcs .90
stx ZPPtr2+1 save OP(n)
.32 pla get OP(n-1)
bmi .33 $ff....
cmp ZPPtr2+1
bcc .33 OP(n) has precedence, on stack : V1,V2
ldy ZPPtr2 OP(n-1) has precedence...
jsr CSH.BOP.EXEC compute V(n-1) <OP(n-1)> V(n)
bcc .32
bcs .99
.33 pha push back OP(n-1)
lda ZPPtr2+1 get OP(n)
pha push OP(n) on stack
jmp .10 go check for next token
*--------------------------------------
.80 pla any OP on stack ?
bmi .88
ldy ZPPtr2 Var Type
jsr CSH.BOP.EXEC
bcc .80
bcs .99
.90 lda #E.ESYN
.99 plx
bpl .99
sec
.HS 90 BCC
.88 clc
ldx ZPPtr2 X = Var Type
ply
sty ZPPtr2+1
ply
sty ZPPtr2
ply
sty ZPPtr1+1
ply
sty ZPPtr1
rts
*--------------------------------------
CSH.AddContCharP
ldy #0
.1 jsr CSH.GetNextChar
bcs .9
cmp #C.CR
beq .9
cmp #'"'
beq .2
sta (ZPCSHConst),y
iny
bra .1
.2 lda #0
sta (ZPCSHConst),y
>PUSHW ZPCSHConst Push PTR on stack
tya
sec
adc ZPCSHConst
sta ZPCSHConst
bcc .3
inc ZPCSHConst+1
.3 jsr CSH.GetNextChar Skip "
clc
rts
.9 lda #E.ESYN
sec
rts
*--------------------------------------
CSH.GetNumOnStack
txa
beq .99
cpx #CSH.T.FLOAT
bcc .1
bne .99
>PUSHW ZPInputBufPtr
>PUSHWI ZPInputBufPtr
>SYSCALL StrToF
clc
rts
.1 >PUSHW ZPInputBufPtr
>PUSHWI ZPInputBufPtr
>PUSHBI 10
phx
bcc .2
>SYSCALL StrToUL
bra .3
.2 >SYSCALL StrToL
.3 plx
bcs .9
lda CSH.TYPESIZE,x
cmp #4
beq .8
cmp #2
bne .4
ldy #1
>PULLA
sta (pStack),y
>PULLA
sta (pStack),y
clc
rts
.4 >PULLA
inc pStack
inc pStack
sta (pStack)
.8 clc
.9 rts
.99 lda #E.TMISMATCH
sec
rts
*--------------------------------------
MAN
SAVE usr/src/bin/csh.s.exp
LOAD usr/src/bin/csh.s
ASM