* * * PREPROCESSOR * * PREPROCESS LINE IN IBUF BACK INTO IBUF * * SETS CARRY IF LINE HAS NO LINE NUMBER * LEAVES CORRECT LENGTH OF LINE AFTER PREPROCESSING IN IBCN * IF THERE IS A LINE NUMBER, IT IS LOCATED AT IBLN=IBUF-2 * TXA IS CLOBBERED * PP LXI H,IBUF1 FIRST CHARACTER OF INPUT LINE CALL GF1 SHLD TXA SO GCI WILL WORK MVI A,-1 INIT THE "LET" FLAG STA LETFG * CALL INTGER SETS CARRY IF NO LINE NUMBER SHLD IBLN STORE LINE NUMBER VALUE (EVEN IF NONE) PUSH PSW SAVE STATE OF CARRY BIT FOR RETURNING LHLD TXA ADDRESS OF NEXT CHARACTER IN IBUF * MVI C,3 SET UP INITIAL VALUE FOR COUNT LXI D,IBUF INITIALIZE WRITE POINTER * * COME HERE TO CONTINUE PREPROCESSING LINE * PPL LDA LETFG BUMP LET FLAG INR A STA LETFG CALL GF1 GET CHAR CPI '.' IS IT BY ITSELF? JZ PPL4A YES--DON'T BOTHER GOING THRU TBL PUSH D LXI D,RWT BASE OF RWT * PPL1 PUSH H SAVE TEXT ADDRESS LDAX D RW VALUE FOR THIS ENTRY IN RWT STA ARGF SAVE IN ARGF IN CASE OF MATCH * PPL2 INX D ADVANCE ENTRY POINTER TO NEXT BYTE CALL GF1 GET NXT CHAR INX H MOV B,A LDAX D GET NEXT CHARACTER FROM ENTRY CMP B COMPARE WITH CHARACTER IN TEXT JZ PPL2 * * COME HERE WHEN COMPARISON OF BYTE FAILED * PPL3 ORA A JM PPL6 JUMP IF FOUND MATCH MOV A,B GET LAST CHAR THAT MISMATCHED CPI '.' IS IT ABBREVIATION INDICATOR JNZ PPL4 NO--ADVANCE SEARCH LDA ARGF GET IT'S TOKEN CPI TOKCM-1 IS IT AN OPERATOR JC PPL6A NO CPI TOKOP JNC PPL6A NO--THEN IT IS A VALID ABBREVIATION * * SCAN TO BEGINNING OF NEXT ENTRY * PPL4 INX D ADVANCE ENTRY POINTER LDAX D NEXT BYTE IS EITHER CHARACTER OR RW BYTE ORA A JP PPL4 KEEP SCANNING IF NOT RW BYTE * * NOW SEE IF AT END OF TABLE, AND FAIL OR RETURN CONDITION POP H RESTORE ORIGINAL TXT PTR CPI EOTT CHECK FOR END OF TABLE BYTE JNZ PPL1 CONTINUE SCAN OF TABLE * * DIDN'T FIND AN ENTRY AT THE GIVEN TEXT ADDR POP D CALL GF1 GET TEXT CHARACTER CPI CR CHECK FOR END OF LINE JZ PPL8 GO CLEAN UP AND RETURN * PUSH PSW LDA LETFG TEST LET FLAG ORA A JNZ PPL3Z MVI A,LETRW CALL PF1 PPL3Z POP PSW * PPL4A CALL PF1 INX H ADVANCE TEXT POINTER CPI '"' CHECK FOR QUOTED STRING POSSIBILITY JNZ PPL RESTART RWT SEARCH AT NEXT CHARACTER POSITION MOV B,A SET TO STOP SCAN AT CR OR " * * PASS A STRING AS IS UNTIL CHAR IN 'B' OR CR * PPL5 MOV A,M NEXT CHARACTER CPI CR JZ PPL8 A CR ALWAYS STOPS US CALL PF1 INX H ADVANCE TEXT POINTER CMP B HAVE WE REACHED THE END JZ PPL BEGIN RWT SCAN FROM NEW CHARACTER POSITION JMP PPL5 * * FOUND MATCH SO PUT RW VALUE IN TEXT * PPL6A INX H PASS THE DOT PPL6 POP PSW REMOVE UNNEEDED TEXT POINTER FROM STACK POP D LDA ARGF GET IT'S TOKEN CALL PF1 DCX H MVI B,CR * * NOW TEST IF COMMAND * CPI EOSRW JNZ PPL6B MVI A,-1 STA LETFG JMP PPL PPL6B CPI REMRW IS IT A REMARK JZ PPL5 YES--PASS THRU AS IS TO A CR POP PSW PUSH PSW GET CARRY (LN FLAG) LDA ARGF GET TOKEN JNC PPL6C THERE WAS A LN CPI XEQRW JZ PPL5 XEQ IN KEYBOARD MODE, COPY AS IS IF PTDOS CPI LODRW LOAD IN KYB MODE JZ PPL5 CPI SE6RW OF= IN KBD MODE JZ PPL5 ENDF PPL6C CPI GETRW TEST FOR A PS COMMAND JC PPLN NOT CPI SAVRW+1 JC PPL5 IS, COPY AS IS * * TEST FOR LINE NUMBERS * PPLN CPI GOTORW JZ PPLN1 CPI GOSURW JZ PPLN1 CPI ERSRW JZ PPLN1 CPI EXITRW JZ PPLN1 CPI RESTRW JZ PPLN1 CPI THENRW JZ PPLNX CPI ELSERW JNZ PPL * * PPLNX MVI A,-1 RE INIT LET FLAG STA LETFG * PPLN1 CALL GF1 TO SKIP ANY SPACES DCX H FOR SKIIPING OF COMMA * PPLN2 PUSH D PUSH B SAVE COUNT IN C INX H SKIP COMMA SHLD TXA CALL INTGER POP B COUNT IN C POP D DEST POINTER JNC PPLN3 THERE WAS A LINE NUMBER LHLD TXA JMP PPL * PPLN3 MVI A,LNRW CALL PF1 MOV A,L CALL PF1 STORE LOW OF LINE NUMBER MOV A,H CALL PF1 STORE HIGH * LHLD TXA CALL GF1 CPI ',' JNZ PPL JMP PPLN2 * * * COME HERE WHEN DONE * PPL8 MVI A,CR CALL PF1 LXI H,IBCNT SET UP COUNT MOV M,C POP PSW RESTORE CARRY CONDITION (LINE NUMBER FLAG) RET * * * * UN-PREPROCESSOR * * UN PREPROCESS LINE ADDRESSES IN HL TO ADDRESS IN DE * RETURN SOURCE ADDRESS OF CR IN HL ON RETURN * AND LINE LENGTH IN C * UPPL MVI A,' ' STA FLNFG SET FIRST LN FLAG XRA A STA FORFG CLEAR "FOR" SEEN FLAG STA BACKF CLEAR BACKUP FLAG MVI C,0 DE=BUFFER ADDRESS, C=CHARACTERS IN BUFFER * UPPL9 INX H SKIP OVER COUNT BYTE OR LNRW TOKEN MOV A,M LOAD LINE NUMBER VALUE INX H PUSH H SAVE SOURCE POINTER PUSH B SAVE C COUNT PUSH D SAVE BUFFER POINTER MOV H,M REST OF LINE NUMBER MOV L,A * LDA FLNFG 0==>NO LEADING ANYTHING, ' '==>LEADING BLANKS CALL CLNS CONVERT LINE NUMBER * POP H PUSH D XCHG . OLD BUFFER POINTER IN DE, NEW IN HL CALL DSUB FIND DIFFERENCE HL=HL-DE POP D NEW BUFFER POINTER POP B C HAS CHARACTER COUNT DAD B C+L MOV C,L INTO C POP H SOURCE POINTER * XRA A STA FLNFG LDA BACKF UPDATE BACKUP FLAG INR A STA BACKF * UPP0 INX H MOV A,M NEXT TOKEN IN SOURCE ORA A JM UPP1 JUMP IF TOKEN IS RW CALL PF1 PUT CHARACTER IN BUFFER CPI CR JNZ UPP0 RET * * COME HERE WHEN RW BYTE DETECTED IN SOURCE * UPP1 CPI LNRW LINE NUMBER? (IT'S NOT IN THE TABLE) JZ UPPL5 YES, PROCESS IT PUSH H SAVE SOURCE POINTER LXI H,RWT BASE OF RWT UPP2 CMP M SEE IF RW MATCHED RWT ENTRY INX H ADVANCE RWT POINTER JNZ UPP2 CONTINUE LOOKING IF NOT FOUND * * FOUND MATCH, ENTRY POINTER LOCATES FIRST CHARACTER * UPP3 CPI FORRW IF "FOR" THEN INC LPHED CZ INCNT CPI NEXTRW IF "NEXT" DEC LPHED CZ DCNT * CPI THENRW+1 CK THEN/ELSE/TO/STEP ETC... JC UPP3D YES, PRINT SPACE * CPI ANDRW CK FOR AND/OR JZ UPP3D CPI ORRW JZ UPP3D * CPI TOKSW STATEMENTS HAVE A LEADING SPACE JC UPP3B CPI TOKST JNC UPP3B UPP3D MVI A,' ' JMP UPP3C * UPP3B MOV A,M CHARACTER OF RW INX H ADVANCE TO NEXT CHAR NOW ORA A SEE IF THIS CAHR IS ASCII TO DISPLAY JM UPP4 UPP3C CALL PF1 JMP UPP3B KEEP PUTING OUT R/W IN ASCII * * PROCESS THE DISCOVERY OF A LINE NUMBER * UPPL5 LDA BACKF GET BACKUP FLAG CPI 2 JC UPPL9 CAN'T BACKUP (LESS THAN 3 LN ON THIS LINE YET) * PUSH H SAVE IT DCX H DCX H DCX H BACK UP TO LAST LNRW (MABY) MVI A,LNRW CMP M POP H JNZ UPPL9 LAST WAS NOT LINE NUMBER, CONTINUE MVI A,',' LAST WAS LNRW, SO PRINT A COMMA TO SEPERATE CALL PF1 JMP UPPL9 AND PRINT LN * * INDENTATION * DCNT XRA A STA FORFG FOR SEEN NO LONGER VALID LDA LPHED SUI 2 JMP INCN1 * INCNT LDA LPHED ADI 2 STA FORFG A "FOR" HAS BEEN SEEN * INCN1 JNC INCN2 NO FURTHER BACK THAN 0 XRA A INCN2 CPI 32-6+1 RNC . NO FURTHER THEN 1/2 SCREEN STA LPHED RET * * COME HERE IF DONE WITH RW TRANSFER * UPP4 POP H SOURCE POINTER MOV A,M GET SOURCE CHAR AGAIN * CPI ANDRW JZ SPOUT CPI ORRW JZ SPOUT CPI NOTRW JZ SPOUT * CPI THENRW+1 JC SPOUT * CPI TOKSW JC UPP0 CPI TOKST JNC UPP0 * CPI REMRW TEST FOR REM JZ UPP0 CPI FNRW AND FUNCTIONS (USER) JZ UPP0 * SPOUT MVI A,' ' OUTPUT A SPACE CALL PF1 JMP UPP0 * * * "GET" FILTER #1 FOR PARSER * GF1N INX H SKIP BLANKS * GF1 MOV A,M GET THE CHARACTER CPI CR RZ . NEVER FOOL WITH THOSE * CPI ' '+1 SPACE OR CTRL-CHAR? JC GF1N GET NEXT CHARACTER * CPI 97 LOWER CASE A RC CPI 122+1 LOWER CASE Z + 1 RNC ANI -1-20H UPSHIFT RET * * * "PUT" FILTER #1 FOR PARSER * PF1 PUSH PSW MVI A,LINMAX CMP C JC LLERR LINE TOO LONG POP PSW * STAX D INX D INR C RET * * BACKF DS 1 * * * * SCANNER'S TEXT-TO-TOKEN/TOKEN-TO-TEXT TRANSLATION TABLE * RWT EQU $ THE RESERVED WORD TABLE * DB EOSRW END-OF-STATEMENT FOR MULTI-STATEMENTS PER LINE EOS ASC ':' * DB LETRW LET ASC 'LET' * DB FORRW FOR ASC 'FOR' * DB FLERW FILE ASC 'FILE' * DB PRIRW PRINT ASC 'PRINT' * DB NEXTRW NEXT ASC 'NEXT' * DB IFRW IF ASC 'IF' * DB REARW READ ASC 'READ' * DB REWRW REWIND ASC 'REWIND' * DB CLORW CLOSE ASC 'CLOSE' * DB IPTRW INPUT ASC 'INPUT' * DB DATARW DATA ASC 'DATA' * DB GOTORW GOTO ASC 'GOTO' * DB GOSURW GOSUB ASC 'GOSUB' * DB RETRW RETURN ASC 'RETURN' * DB DIMRW DIM ASC 'DIM' * DB STORW STOP ASC 'STOP' * DB ENDRW END ASC 'END' * DB RESTRW RESTORE ASC 'RESTORE' * DB REMRW REM ASC 'REM' * DB FNERW FNEND ASC 'FNEND' * DB FNRW FN ASC 'FN' * DB DEFRW DEF ASC 'DEF' * DB ONRW ON ASC 'ON' * DB OUTRW OUT ASC 'OUT' * DB POKRW FILL ASC 'POKE' * DB EXITRW EXIT ASC 'EXIT' * DB CURRW CURSOR ASC 'CURSOR' * DB WATRW WAIT ASC 'WAIT' * DB SRCRW SEARCH ASC 'SEARCH' * DB TONRW TON ASC 'TUON' * DB TOFRW TOFF ASC 'TUOFF' * DB ERSRW ERRSET ASC 'ERRSET' * DB ERCRW ERRCLR ASC 'ERRCLR' * DB MATRW MAT ASC 'MAT' * DB PAURW PAUSE ASC 'PAUSE' IF PTDOS * DB PRGRW PURGE ASC 'PURGE' ENDF * DB ZERRW MAT ZER ASC 'ZER' * DB IDNRW MAT IDN ASC 'IDN' * DB INVRW MAT INV ASC 'INV' * DB TRNRW MAT TRN ASC 'TRN' * DB STEPRW STEP ASC 'STEP' * DB TORW TO ASC 'TO' * DB THENRW THEN ASC 'THEN' * DB TABRW TAB ASC 'TAB' * DB ELSERW ELSE ASC 'ELSE' * DB CHRRW CHR ASC 'CHR' * DB ASCRW ASC ASC 'ASC' * DB ERRRW ERR ASC 'ERR' * DB VALRW VAL ASC 'VAL' * DB STRRW STR ASC 'STR' * DB RUNRW RUN ASC 'RUN' * DB XEQRW XEQ ASC 'XEQ' * DB GETRW GET ASC 'GET' * DB SAVRW SAVE ASC 'SAVE' * DB APPRW APPEND ASC 'APPEND' * DB LISTRW LIST ASC 'LIST' * DB SCRRW SCR ASC 'SCR' * DB CLRRW CLEAR ASC 'CLEAR' * DB CONTRW CONT ASC 'CONT' IF PTDOS * DB KILRW KILL ASC 'KILL' * DB CATRW CAT ASC 'CAT' * DB LODRW LOAD ASC 'LOAD' ENDF * DB CONRW CON (MAT) ASC 'CON' * DB RENRW REN ASC 'REN' * DB BYERW BYE ASC 'BYE' * DB DELRW DEL ASC 'DEL' * DB SETRW SET ASC 'SET' * DB SE1RW DS= ASC 'DS=' * IF SOLOS DB SE2RW IP= ASC 'IP=' * DB SE3RW OP= ASC 'OP=' * DB SE4RW DB= ASC 'DB=' ENDF IF PTDOS * DB SE4RW SET CM= ASC 'CM=' * DB SE5RW SET CP= ASC 'CP=' * DB SE6RW SET OF= ASC 'OF=' * DB SE2RW SET XI= ASC 'XI=' * DB SE3RW SET FB= ASC 'FB=' ENDF * DB EDTRW EDIT ASC 'EDIT' * DB SELRW LL= ASC 'LL=' * DB SEMRW ML= ASC 'ML=' * DB FILRW FILL ASC 'FILL' * DB LPARRW OPEN PARENTHESIS ASC '(' * DB ASKRW MULTIPLY ASC '*' * DB PLSRW ADDITION ASC '+' * DB MINRW SUBTRACTION ASC '-' * DB SLARW DIVISION ASC '/' * DB ANDRW LOGICAL AND ASC 'AND' * DB ORRW LOGICAL OR ASC 'OR' * DB GERW GREATER THAN OR EQUAL TO ASC '>=' * DB LERW LESS THAN OR EQUAL TO ASC '<=' * DB NERW NOT EQUAL TO ASC '<>' * DB LTRW LESS THAN ASC '<' * DB EQRW EQUAL TO ASC '=' * DB GTRW GREATER THAN ASC '>' * DB NOTRW LOGICAL NOT ASC 'NOT' * DB XPNRW EXPONENTIATION ASC '^' * DB ABSRW ABS ASC 'ABS' * DB INTRW INT ASC 'INT' * DB LENRW LEN ASC 'LEN' * DB CALLRW CALL ASC 'CALL' * DB RNDRW RND ASC 'RND' * DB SGNRW SGN ASC 'SGN' * DB POSRW POS ASC 'POS' * DB EOFRW EOF ASC 'EOF' * DB TYPRW TYP ASC 'TYP' * DB SINRW SIN ASC 'SIN' * DB SQRRW SQR ASC 'SQR' * DB FRERW FREE ASC 'FREE' * DB INPRW INP ASC 'INP' * DB PEKRW EXAM ASC 'PEEK' * DB COSRW COS ASC 'COS' * DB EXPRW EXP ASC 'EXP' * DB TANRW TAN ASC 'TAN' * DB ATNRW ATN ASC 'ATN' * DB SYFRW SYST ASC 'SYST' * DB LG1RW LOG (BASE 10) ASC 'LOG10' * DB LGERW LOG (BASE e) ASC 'LOG' * DB EOTT END OF TABLE * * * TOKEN DEFFINITIONS * * A TOKEN IS STRUCTURED AS FOLLOWS: * BIT USE * 7 1=TOKEN, 0=NON-TOKEN-BYTE * 6-0 TOKEN IDENTIFIER (0-127) * TOKEN EQU 080H * * * STATEMENT TOKEN DEFINITIONS * STEPRW EQU TOKEN+0 STEP TORW EQU STEPRW+1 TO ELSERW EQU TORW+1 ELSE THENRW EQU ELSERW+1 THEN FNRW EQU THENRW+1 FN TABRW EQU FNRW+1 TAB CHRRW EQU TABRW+1 CHR ASCRW EQU CHRRW+1 ASC ERRRW EQU ASCRW+1 ERR VALRW EQU ERRRW+1 VAL STRRW EQU VALRW+1 STR ZERRW EQU STRRW+1 MAT ZER CONRW EQU ZERRW+1 MAT CON IDNRW EQU CONRW+1 MAT IDN INVRW EQU IDNRW+1 MAT INV TRNRW EQU INVRW+1 MAT TRN SELRW EQU TRNRW+1 LL= SEMRW EQU SELRW+1 ML= SE1RW EQU SEMRW+1 DS= IF SOLOS SE2RW EQU SE1RW+1 IP= SE3RW EQU SE2RW+1 OP= SE4RW EQU SE3RW+1 DB= LNRW EQU SE4RW+1 LINE NUMBER TOKEN ENDF IF PTDOS SE2RW EQU SE1RW+1 XI= SE3RW EQU SE2RW+1 FB= SE4RW EQU SE3RW+1 CM= SE5RW EQU SE4RW+1 CP= SE6RW EQU SE5RW+1 OF= LNRW EQU SE6RW+1 LINE NUMBER TOKEN ENDF EOSRW EQU LNRW+1 THE E-O-S TOKEN * TOKSW EQU EOSRW+1 ALL < TOKSW ARE SPECIAL TO THE PARSER * AND ARE NOT FIRST WORDS ON A LINE * LETRW EQU TOKSW+0 LET FORRW EQU LETRW+1 FOR PRIRW EQU FORRW+1 PRINT NEXTRW EQU PRIRW+1 NEXT IFRW EQU NEXTRW+1 IF REARW EQU IFRW+1 READ IPTRW EQU REARW+1 INPUT DATARW EQU IPTRW+1 DATA GOTORW EQU DATARW+1 GOTO GOSURW EQU GOTORW+1 GOSUB RETRW EQU GOSURW+1 RETURN DIMRW EQU RETRW+1 DIM STORW EQU DIMRW+1 STOP ENDRW EQU STORW+1 END RESTRW EQU ENDRW+1 RESTORE REMRW EQU RESTRW+1 REMARK FNERW EQU REMRW+1 FNEND DEFRW EQU FNERW+1 DEF ONRW EQU DEFRW+1 ON OUTRW EQU ONRW+1 OUT POKRW EQU OUTRW+1 POKE BYERW EQU POKRW+1 BYE SETRW EQU BYERW+1 SET SCRRW EQU SETRW+1 SCRATCH CLRRW EQU SCRRW+1 CLEAR XEQRW EQU CLRRW+1 XEQ FLERW EQU XEQRW+1 FILE REWRW EQU FLERW+1 REWIND CLORW EQU REWRW+1 CLOSE CURRW EQU CLORW+1 CURSOR WATRW EQU CURRW+1 WAIT SRCRW EQU WATRW+1 SEARCH TONRW EQU SRCRW+1 TON TOFRW EQU TONRW+1 TOFF ERSRW EQU TOFRW+1 ERRSET ERCRW EQU ERSRW+1 ERRCLR FILRW EQU ERCRW+1 FILL MATRW EQU FILRW+1 MAT IF PTDOS PRGRW EQU MATRW+1 PURGE LODRW EQU PRGRW+1 LOAD PAURW EQU LODRW+1 PAUSE ENDF IF 1-PTDOS PAURW EQU MATRW+1 PAUSE ENDF EXITRW EQU PAURW+1 EXIT * * * THE STATEMENT DIVIDER * TOKST EQU EXITRW+1 ALL < TOKST ARE STATEMENT TOKENS * * * COMMAND TOKEN DEFINITIONS * RUNRW EQU TOKST+0 RUN LISTRW EQU RUNRW+1 LIST CONTRW EQU LISTRW+1 CONTINUE EDTRW EQU CONTRW+1 EDIT DELRW EQU EDTRW+1 DEL GETRW EQU DELRW+1 GET APPRW EQU GETRW+1 APPEND IF PTDOS KILRW EQU APPRW+1 KILL CATRW EQU KILRW+1 CAT SAVRW EQU CATRW+1 SAVE ENDF IF 1-PTDOS SAVRW EQU APPRW+1 SAVE ENDF RENRW EQU SAVRW+1 RENUMBER * * * THE COMMAND DIVIDER * TOKCM EQU RENRW+1 ALL < TOKCM AND >= TOKST ARE COMMANDS * * * OPERATOR TOKEN DEFINITIONS * LPARRW EQU TOKCM+0 UMINUS EQU LPARRW+1 UNARY MINUS ASKRW EQU UMINUS+1 PLSRW EQU ASKRW+1 MINRW EQU PLSRW+1 SLARW EQU MINRW+1 ANDRW EQU SLARW+1 ORRW EQU ANDRW+1 GERW EQU ORRW+1 LERW EQU GERW+1 NERW EQU LERW+1 LTRW EQU NERW+1 EQRW EQU LTRW+1 GTRW EQU EQRW+1 NOTRW EQU GTRW+1 XPNRW EQU NOTRW+1 * * * THE OPERATOR DIVIDER * TOKOP EQU XPNRW+1 ALL < TOKOP AND >= TOKCM ARE OPERATORS * * * FUNCTION TOKEN DEFINITIONS * DMYRW EQU TOKOP+0 DUMMY OF LOW PRESIDENCE FOR EXPR OPERATION ABSRW EQU DMYRW+1 ABS INTRW EQU ABSRW+1 INT LENRW EQU INTRW+1 LEN CALLRW EQU LENRW+1 CALL RNDRW EQU CALLRW+1 RND SGNRW EQU RNDRW+1 SGN POSRW EQU SGNRW+1 POS EOFRW EQU POSRW+1 EOF TYPRW EQU EOFRW+1 TYP SINRW EQU TYPRW+1 SIN SQRRW EQU SINRW+1 SQR FRERW EQU SQRRW+1 FREE INPRW EQU FRERW+1 INP PEKRW EQU INPRW+1 PEEK COSRW EQU PEKRW+1 COS EXPRW EQU COSRW+1 EXP TANRW EQU EXPRW+1 TANGENT ATNRW EQU TANRW+1 ATN LG1RW EQU ATNRW+1 LOG10 LGERW EQU LG1RW+1 LOGE SYFRW EQU LGERW+1 SYST * * * FUNCTION DIVIDER * TOKFU EQU SYFRW+1 ALL < TOKFU AND >= TOKOP ARE FUNCTIONS * * * END OF TABLE MARKER * EOTT EQU TOKFU+0 END OF TOKEN TABLE MARKER * * * DISPATCH TABLE FOR STATEMENTS AND COMMANDS * DISPT DW LET DW SFOR DW PRINT DW NEXT DW SIF DW READ DW INPUT DW DATA DW GOTO DW GOSUB DW RETRN DW DIM DW STOP DW END DW RESTOR DW REM DW FN DW DEF DW ON DW OUT DW FILL IF SOLOS XBYE DW 0C004H BYE FOR SOLOS ENDF IF PTDOS DW CBYE BYE FOR PTDOS ENDF DW CSET DW CSCR DW CCLEAR DW CXEQ DW SFILE DW SFREWIND DW SFCLOSE DW SCURS DW SWAIT DW SSEAR DW CTON DW CTOFF DW SERRS DW SERRC DW SFILL VMAT DW SMATER IF PTDOS DW SPURG DW CLOAD ENDF DW SPAW DW EXIT * * * COMMANDS * DW CRUN DW CLIST DW CCONT DW CEDIT DW CDEL DW CGET DW CAPP IF PTDOS DW CKILL DW CCAT ENDF DW CSAVE DW CREN * * * OPERATOR AND FUNCTION DISPATCH AND PRESIDANCE * TABLES * OPTAB EQU $ OPLPAR EQU $ DB 20+1 DW FLPAR DUMMY RETURN INSTRUCTION DB 16+1 DW FNEG DB 12 DW FMUL DB 10 DW FADD DB 10 DW FSUB DB 12 DW FDIV DB 4 DW AAND DB 2 DW AOR DB 6 DW AGE DB 6 DW ALE DB 6 DW ANE DB 6 DW ALT DB 6 DW AEQ DB 6 DW AGT DB 14+1 DW ANOT DB 18 VFXPN DW FXPN * * * BUILT IN FUNCTION DISPATCH TABLE * OPBOL DB 1 DUMMT ENTRY FOR INITIAL ENTRY TO 'EXPRB' DW 0 DB 20+1 DW FABS DB 20+1 DW FINT DB 20+1 DW 0 DUMMY ENTRY FOR 'LEN' DB 20+1 DW 0 DUMMY ENTRY FOR 'CALL' DB 20+1 DW FRANDOM DB 20+1 DW FSGN DB 20+1 DW FPOS DB 20+1 DW FEOF DB 20+1 DW FTYP DB 20+1 VFSIN DW FSIN DB 20+1 DW FSQR DB 20+1 DW FFREE DB 20+1 DW FINP DB 20+1 DW FEXAM DB 20+1 VFCOS DW FCOS DB 20+1 VFEXP DW FEXP DB 20+1 VFTAN DW FTANG DB 20+1 VFATN DW FARCTAN DB 20+1 VFLG10 DW FLOG10 DB 20+1 VFLOG DW FLOG DB 20+1 DW FSYST * *