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) 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