TOP; TINCMP COPYRIGHT (C) 1981 W.A.GALE PARAMETER KLF=010; CP/M MODIFICATION AND 8086 RECODING PARAMETER KCR=013; BY A. L. BENDER, M. D. PARAMETER KEF=026; NEW MODS AND REWORKING COPYRIGHT (C) 1981 A L BENDER, M D BYTE AA; WORK BYTE BB; WORK BYTE BYTE DD; WORK BYTE EE; WORK BYTE BYTE BF(080); EXPANSION BUFFER BYTE BL; BLANK BYTE BP; POINTER INTO BF BYTE C0; CONSTANT ZERO BYTE C1; CONSTANT ONE BYTE C2; CONSTANT TWO BYTE C3; CONSTANT 3 BYTE C4; CONSTANT 040 BYTE C8; CONSTANT 080 BYTE C9; CONSTANT 9 BYTE CC; INPUT CHARACTER BYTE CX; CONSTANT TEN BYTE DG; DIGIT FROM PARAMTER TREATMENT DEFINITION BYTE DS(010); DIGIT STACK FOR SUB SD BYTE EF; END FILE CHARACTER BYTE F1(00128); INPUT BUFFER BYTE F2(00128); OUTPUT BUFFER BYTE HA; 'A' BYTE HF; 'F' BYTE LE; END OF LIST BYTE LF; LINE FEED CHARACTER BYTE LS(09000); LIST OF MACRO DEFINITIONS BYTE MF; MACRO REPLACEMENT OPERATOR FLAG BYTE ML; MACRO LENGTH BYTE MM; MINIMUM MACRO LENGTH BYTE ND; NUMBER OF DIGITS USED IN SUB SD FOR NUMBER OUTPUT BYTE NL; NEW LINE BYTE O1; FETCH CODE BYTE O2; INDEX CODE BYTE O3; DISPOSE CODE BYTE OA; '+' ADD OPERATOR BYTE OB; '!' POP STACK OPERATOR BYTE OC; 'C' CHARACTER DISPOSE BYTE OD; 'V' DIGIT CONVERSION FETCH BYTE OE; ESCAPE CHARACTER BYTE OG; IGNORE CHARACTER BYTE OH; 'H' HEX CONVERSION FETCH BYTE OL; 'L' LITERAL FETCH BYTE OM; '*' MULTIPLY DISPOSE BYTE ON; 'N' NUMERIC LITERAL FETCH BYTE OP; 'P' PARAMETER FETCH OR DISPOSE BYTE OR; '-' REDUCE (SUBTRACT) DISPOSE BYTE OS; 'S' STACK FETCH OR DISPOSE BYTE OT; TRACE FLAG TURN ON BYTE PP; POINTER INTO IPR BYTE RB; BEGIN DEFINITION FLAG BYTE RC; (COMMENT) END OF LINE FLAG BYTE SF; SUBSTITUTION PARAMETER FLAG BYTE SP; STACK POINTER BYTE TR; TRUE IF NO TRACE BYTE UG; USE IGNORE; TRUE UNLESS OG IS 'X' BYTE UN; NOT X-- FLAG FOR NOT SUPPRESSING NEW LINES ON OUTPUT BYTE UO; USE OPERATIONS-- TRUE UNLESS MF IS 'X' BYTE UT; USE TRACE TRACE MODE IS ON BYTE ZR; CHARACTER ZERO INT I00; CONSTANT ZERO INT I01; CONSTANT 1 INT I09; CONSTANT 9 INT I10; CONSTANT 10 INT I16; CONSTANT 16 INT IAA; WORK INT IBB; WORKING STORAGE INT IBC; BUCKET NUMBER INT IDP; DEFINITION POINTER WHILE MATCH INT IED; POINTS TO END OF DEFINITIONS INT III; POINTER TO L WHILE READING INT IJJ; POINTER TO L READING CODE INT ILM; MAXIMUM LIMIT FOR STORING IN L INT ILP(01000); POINTERS TO MACROS INT IMP; MACRO POINTER DURING EXPANSION INT INM; NUMBER OF MACROS INT IPR(010); PARAMETER VALUES INT ISS(040); INT TO HOLD NUMBERS-MAIN STACK INT ITU; VALUE OF PARAMETER TO USE INT IUU; SYMBOL GENERATOR(UNIQUE) INT IXX; WORK INT IYY; WORK BEGINMAIN(AC,IAV) NL=+KCR LF=+KLF GOSUB CR MS 'COPYRIGHT' MS ' (C) 1981' MS ' W.A.GALE' GOSUB CR MS '8086 TINC' MS 'MP COMPIL' MS 'ER CP/M V' MS 'ERSION 1.' MS '00/TINCMP' GOSUB CR MS 'COPYRIGHT' MS ' (C) 1984' MS ' A L BEND' MS 'ER, MD ' GOSUB CR MS 'COLLECTED' MS ' WITH VER' MS ' 1.3 I/O ' MS 'PACKAGE. ' GOSUB CR GOSUB IN GOSUB RM LOC 00 WHILE READ CC FROM F1 AA=ER==C0 ON AA; THAT IS, UNTIL EOF IS REACHED ON INPUT IF UG WHILE BB=CC==NL DD=CC==LF AA=CC==OG EE=BB?DD BB=CC==BL AA=BB?AA AA=EE?AA ON AA; IGNORE LEADING CHARACTERS GOSUB GC; READ CC FROM F1 ENDWHILE ENDIF BP=C1; BUF POINTER BF(C0)=CC WHILE GOSUB GC; READ CC FROM F1 AA=CC==NL IF AA GOSUB GC; READ CC FROM F1 AA=CC==LF IF AA CC=NL ENDIF ENDIF AA=CC!=NL BB=BP!=C8 AA=AA&BB ON AA; WHILE LESS THAN 80 CHAR AND NOT NEWLINE BF(BP)=CC; THEN PUT IT IN BUFFER FOR MULT COMP BP++ ENDWHILE WHILE AA=CC!=NL ON AA GOSUB GC; READ CC FROM F1 ENDWHILE; HERE WE ARE DUMPING A LONG INPUT LINE BF(BP)=RC BP++ BF(BP)=NL LE=BP AA=BP<=MM IF AA; TOO SHORT TO MATCH ML=+000 GOTO 17 ELSE ML=+001 ENDIF IDP=I00 PP=C0 IJJ=I00 INM=C0 WHILE AA=IDP