Listing of file='SYMBOL.MAC;01' on disk='vmedia/tiny_c_v3.0-sector.ccvf'
; @@@@ SYMBOL TOOLS @@@@ ; VLEN EQU 3 TMFUER EQU 17 TMVRER EQU 18 TMVLER EQU 19 SYMERA EQU 26 ; EXTRN BFUN,EFUN,EPR,EVAR EXTRN CURGLBL,CURFUN,FNAME,LNAME,NXTVAR,PRUSED EXTRN ESET EXTRN ZERO ; ALLOCATE REFERENCE IN FUNB FOR VARIABLE OF A FUNCTION ENTRY NEWFUN NEWFUN: LHLD CURFUN LXI D,6 DAD D SHLD CURFUN XCHG LHLD EFUN DAD D XCHG JNC NF2 CALL ESET DB TMFUER RET NF2: LDA NXTVAR MOV M,A SUI 6+VLEN MOV C,A LDA NXTVAR+1 INX H MOV M,A SBI 0 INX H MOV M,C INX H MOV M,A LDA PRUSED INX H MOV M,A LDA PRUSED+1 INX H MOV M,A RET ; DEALLOCATE VARIABLE OF LAST FUNCTION ENTRY FUNDONE FUNDONE:LHLD CURFUN MOV A,M STA NXTVAR INX H MOV A,M STA NXTVAR+1 INX H INX H INX H MOV A,M STA PRUSED INX H MOV A,M STA PRUSED+1 LXI D,-11 DAD D SHLD CURFUN RET ; ALLOCATE A VARIABLE. CALL IN A, SIZE IN B, LEN IN DE ; PASSED VALUE IN HL ENTRY NEWVAR NEWVAR: STA CLASS MOV A,B STA OBSIZE SHLD PASSED XCHG SHLD LEN LHLD NXTVAR CALL CANON INX H LDA CLASS MOV M,A INX H LDA OBSIZE MOV M,A INX H LDA LEN MOV M,A INX H LDA LEN+1 MOV M,A INX H SHLD FVAL LDA CLASS ORA A JZ NR2 LHLD PASSED MOV A,L ORA H JNZ NR3 NR2: LHLD PRUSED INX H SHLD KF XCHG LHLD FVAL MOV M,E INX H MOV M,D LHLD LEN XCHG LHLD PRUSED LDA OBSIZE DAD D DCR A JZ NR7 DAD D NR7: SHLD PRUSED XCHG LHLD EPR DAD D XCHG JNC NR4 CALL ESET DB TMVLER RET NR4: LHLD KF XCHG LHLD PRUSED CALL ZERO JMP NR5 NR3: LHLD FVAL LDA PASSED MOV M,A INX H LDA PASSED+1 MOV M,A JMP NR6 NR5: LDA CLASS ORA A JNZ NR6 LHLD PASSED MOV A,H ORA L JZ NR6 XCHG LHLD KF MOV M,E INX H MOV M,D NR6: LHLD CURFUN INX H INX H LDA NXTVAR MOV M,A INX H LDA NXTVAR+1 MOV M,A LHLD NXTVAR LXI D,6+VLEN DAD D SHLD NXTVAR XCHG LHLD EVAR DAD D XCHG LHLD FVAL RNC CALL ESET DB TMVRER RET PUBLIC CLASS,OBSIZE,PASSED,LEN,FVAL,KF CLASS: DB 0 ; TEMPS USED BY NEWVAR OBSIZE: DB 0 PASSED: DW 0 LEN: DW 0 FVAL: DW 0 KF: DW 0 ; ADRVAL LOOKS UP A SYMBOL POINTED TO BY FNAME,LNAME ENTRY ADRVAL ADRVAL:LHLD CURFUN SHLD SFUN LXI H,CSIZE ;RSS04 CALL CANON XRA A STA AREA AD8: LHLD SFUN MOV E,M INX H MOV D,M INX H MOV C,M INX H MOV B,M XCHG SHLD PVAR MOV H,B MOV L,C SHLD LAST LHLD PVAR LDA CSIZE ; B:=CSIZE ;RSS04 MOV B,A ;RSS04 AD2: LDA LAST SUB L LDA LAST+1 SBB H JC AD3 MOV A,B ;RSS04 CMP M ; SIZES MATCH? ;RSS04 JNZ AD5A ; NO ;RSS04 INX H ;RSS04 MOV E,M ; DE:=@HL ;RSS04 INX H ;RSS04 MOV D,M ;RSS04 MOV C,B ; C:=CSIZE ;RSS04 LHLD CPTR ; HL:=CPTR ;RSS04 AD4: LDAX D CMP M JNZ AD5 DCR C INX D INX H JNZ AD4 LHLD PVAR ; RESET HL ;RSS04 INX H ;RSS04 INX H ;RSS04 INX H ;RSS04 MOV A,M INX H MOV B,M INX H MOV E,M INX H MOV D,M INX H ORA A JZ AD9 CPI 'E' RNZ AD9: PUSH D MOV E,M INX H MOV D,M XCHG POP D RET AD5: LHLD PVAR AD5A: LXI D,VLEN+6 DAD D SHLD PVAR JMP AD2 AD3: LDA AREA ORA A JNZ AD6 LHLD CURGLBL AD7: SHLD SFUN INR A STA AREA JMP AD8 AD6: CPI 2 JP ADERR LHLD BFUN JMP AD7 ADERR: CALL ESET DB SYMERA RET PUBLIC CSIZE,CPTR,PVAR,AREA,SFUN,LAST CSIZE: DB 0 ; CANONICAL STORAGE ;RSS04 CPTR: DW 0 ;RSS04 PVAR: DW 0 AREA: DB 0 SFUN: DW 0 LAST: DW 0 ; CANONICALIZES SYMBOL FROM FNAME TO LNAME INCLUSIVE ENTRY CANON CANON: XCHG ; SAVE DESTINATION ;RSS04 LHLD FNAME ;RSS04 XCHG ;RSS04 LDA LNAME ; A:=SIZE ;RSS04 SUB E ;RSS04 INR A ;RSS04 MOV M,A ; SAVE SIZE ;RSS04 INX H ;RSS04 MOV M,E ; SAVE ADDRESS ;RSS04 INX H ;RSS04 MOV M,D ;RSS04 RET END