NEW AUTO 3,1 .LIST OFF *-------------------------------------- * In: A = current CHAR * Out: CC, int16 on stack or pSTR in stack *-------------------------------------- EXP.Eval stz EXP.TYPE EXP.Eval.R lda EXP.AOPS pha lda #$FF >PUSHA Previous OP = none *-------------------------------------- .10 jsr CORE.GetCharNB bcs .39 .11 cmp #'(' bne .12 jsr CORE.GetNextCharNB skip ( bcs .39 jsr EXP.Eval.R bcs .39 jsr CORE.GetCharNB bcs .39 cmp #')' sec bne .39 jsr CORE.GetNextCharNB skip ) bra .41 .12 cmp #'"' bne .20 jsr EXP.CreateStrConst bcs .37 bra .40 *-------------------------------------- .20 jsr CORE.IsLetter bcs .30 No, go check for number... >LDYA L.ACOS.KW Yes, KW, FN or VAR ? jsr CORE.Lookup bcc .80 KW, end of exp >LDYA L.ACOS.FN jsr CORE.LookupSkip bcs .21 jsr EXP.FNjmpX bcs .99 bra .40 .21 jsr EXP.VARLookup bcc .22 .22 ldx EXP.TYPE bne .23 jsr CODE.INTGET bra .40 .23 jsr CODE.STRGET bra .40 *-------------------------------------- .30 jsr CORE.IsDigit10 .39 bcs .90 jsr EXP.Int16 .37 bcs .99 *-------------------------------------- .40 jsr CORE.GetCharNB .41 bcs .80 .50 jsr CORE.IsEndExp bcs .80 jsr CORE.IsKW bcc .80 jsr CORE.LookupOPS bcs .90 stx EXP.AOPS lda (pStack) get op context bmi .60 no prev op, go get arg2 cmp EXP.AOPS we have arg1 A=op1 arg2 X=op2 bcc .60 inc pStack prev op has precedence tay ldx ACOS.OPS2FPU,y jsr CODE.FPUCALL go compute (arg1 op1 arg2) .60 lda EXP.AOPS we must compute arg2 op2 arg3 before >PUSHA jsr CORE.GetCharNB bcs .90 jmp .11 *-------------------------------------- .80 >PULLA tay bmi .88 nothing to do ldx ACOS.OPS2FPU,y jsr CODE.FPUCALL bra .80 .90 lda #E.ESYN .99 tay Save Err code .98 >PULLA tax bpl .98 sec .HS 90 BCC .88 clc pla sta EXP.AOPS tya rts *-------------------------------------- EXP.FNjmpX jmp (J.ACOS.FN,x) *-------------------------------------- EXP.CreateStrConst lda #'$' sta EXP.TYPE ldy #0 .1 jsr CORE.GetNextChar bcs .91 cmp #'"' beq .2 sta (ZPConstBufPtr),y iny bne .1 .2 lda #0 sta (ZPConstBufPtr),y phy >LDYA ZPConstBufPtr jsr CODE.PUSHIYA pla sec for \0 adc ZPConstBufPtr sta ZPConstBufPtr bcc .3 inc ZPConstBufPtr+1 .3 jsr CORE.GetNextCharNB skip " clc rts .91 lda #E.ESYN * sec rts *-------------------------------------- EXP.Int16 >PUSHW ZPInputBufPtr >PUSHWI ZPInputBufPtr >PUSHBI 10 >SYSCALL StrToL bcs .9 jsr CODE.PUSHINT16 >POP 4 clc .9 rts *-------------------------------------- EXP.VARLookup >LDA.G hVars >PUSHA >PUSHA for SListGetData/SListAddData >PUSHW ZPInputBufPtr >SYSCALL SListLookup bcs .3 >PUSHYA KeyID txa jsr CORE.SkipA .1 >PUSHWI EXP.ADDR >PUSHWI 3 3 bytes : ADDR + TYPE >PUSHWZ From Start >SYSCALL SListGetData bcs .99 jsr CORE.GetVarType cpx EXP.TYPE bne .90 clc rts .90 lda #E.TMISMATCH sec .99 rts *-------------------------------------- .3 jsr CORE.NewVarKey bcs .39 phy pha KeyID jsr CORE.GetVarType stx EXP.TYPE beq .11 lda STRID sta EXP.ADDR lda STRID+1 sta EXP.ADDR+1 inc STRID bne .10 inc STRID+1 bra .10 .11 lda ZPDataBufPtr sta EXP.ADDR clc adc #2 Word sta ZPDataBufPtr lda ZPDataBufPtr+1 sta EXP.ADDR+1 adc #0 sta ZPDataBufPtr+1 .10 pla >PUSHA pla >PUSHA >PUSHWI EXP.ADDR >PUSHWI 3 3 bytes : ADDR + TYPE >SYSCALL SListAddData rts .39 inc pStack rts *-------------------------------------- MAN SAVE usr/src/bin/acos.s.exp LOAD usr/src/bin/acos.s ASM