.PREL .IDENT EXPR .INSERT BBEQU.ASM ; ** EXPR ** EXPRLA:: CALL EXPR1 PUSH H LXI H,TAB6 JMP EXEC# XPR1: CALL XPR8 RC MOV L,A RET XPR2: CALL XPR8 RZ MOV L,A RET XPR3: CALL XPR8 RZ RC MOV L,A RET XPR4: CALL XPR8 MOV L,A RZ RC MOV L,H RET XPR5: CALL XPR8 RNZ MOV L,A RET XPR6: CALL XPR8 RNC MOV L,A RET XPR7: POP H RET XPR8: MOV A,C POP H POP B PUSH H PUSH B MOV C,A CALL EXPR1 XCHG XTHL CALL CKHLDE# POP D LXI H,0 MVI A,1 RET EXPR1: TSTC '-',XP11 LXI H,0 JMPR XP16 XP11: TSTC '+',XP12 XP12: CALL EXPR2 XP13: TSTC '+',XP15 PUSH H CALL EXPR2 XP14: XCHG XTHL MOV A,H XRA D MOV A,D DAD D POP D JM XP13 XRA H JP XP13 JMP QHOW# XP15: TSTC '-',XPR9 XP16: PUSH H CALL EXPR2 CALL CHGSGN# JMPR XP14 EXPR2: CALL EXPR3 XP21: TSTCC 62H,XP24 PUSH H CALL EXPR3 MVI B,0 CALL CHKSGN# XTHL CALL CHKSGN# XCHG XTHL MOV A,H ORA A JRZ XP22 MOV A,D ORA D XCHG JNZ AHOW# XP22: MOV A,L LXI H,0 ORA A JRZ XP25 XP23: DAD D JC AHOW# DCR A JRNZ XP23 JMPR XP25 XP24: TSTCC 63H,XPR9 PUSH H CALL EXPR3 MVI B,0 CALL CHKSGN# XTHL CALL CHKSGN# XCHG XTHL XCHG MOV A,D ORA E JZ AHOW# PUSH B CALL DIVIDE# POP D ; SIGN STUFF TO DE PUSH B ; SAVE DIVIDE RESULT BIT 7,D ; WAS SIGN SET? CNZ CHGSGN# ; YEP - CHANGE# SHLD REMAIN# ; STUFF IT POP H ; RESULT TO HL MOV B,D ; COPY OVER SIGN STUFF MOV C,E XP25: POP D MOV A,H ORA A JM QHOW# MOV A,B ORA A CM CHGSGN# JMPR XP21 EXPR3: LXI H,TAB3 JMP EXEC# NOTF:: CALL TSTV# JRC XP32 XCHG LDAX D PUSH PSW INX D LDAX D XCHG MOV H,A POP PSW MOV L,A RET XP32: CALL TSTNUM# MOV A,B ORA A RNZ ; SINGLE CHAR STRING CONSTANT? TSTC '"',PARN ; HAVE WE GOT QUOTES? LDAX D MOV L,A ; FAILED TSTNUM SET H TO ZERO INX D TSTC '"',XPR0 ; ERROR IF NO TRAILING RET PARN:: TSTC '(',XPR0 PARNP: RSTEXP TSTC ')',XPR0 XPR9: RET XPR0: JMP QWHAT# ; FUNCTION AND COMPARISON OPERATION LOOKUP TABLES TAB3: TOKEN 76H,RND# ITEM 'KN',GETPOT# ITEM 'TR',GETTRG# ITEM 'JX',GETJX# ITEM 'JY',GETJY# ITEM 'KP',GETKB# ITEM 'PX',PIXFUN# ITEM '&',IOFUN# ITEM 'ABS',ABS# ITEM 'SZ',SIZE# ITEM 'BYTE',BYTEFUN# ITEM 'LARGE',LARGEF# ITEM 'SMALL',SMALF# ITEM 'RND',RND# TOKEN 5FH,RETADR# TOKEN 7FH,HKUFUN# TAB6: ITEM '>=',XPR1 ITEM '#',XPR2 ITEM '>',XPR3 ITEM '=',XPR5 ITEM '<=',XPR4 ITEM '<',XPR6 TOKEN 7FH,XPR7 .END