/ PDP-8 (8K) FORTRAN COMPILER *** FORT.05 *** / OCTOBER 28, 1970 / COPYRIGHT 1969, DIGITAL EQUIPMENT CORP. MAYNARD, MASS. / / SYMBOL TABLE FOR FORTRAN COMPILER (8K- PDP-8) / FOR USE WITH DISK/DECTAPE MONITOR SYSTEM / CHANGE LOCATION 'XFINI' TO A 'JMP I LFINI' THEN / SAVE ON THE DISK AS FOLLOWS: / / SAVE FTC0!0-7577;5363 / SAVE FTC1!200,1000-1577,2600,6000-16377; / / CALL FTC1 FIRST, THEN CALL FTC0 TO COMPILE / FOR SUBSEQUENT COMPILATIONS ONLY CALL FTC0. FIELD 0 *200 INBUF, TEXT /PDP-8 FORTRAN DEC-08-A2B1-4/ *1000 BEGIN, PLS /INITIALIZATION ROUTINE TLS RFC CDF 00 TAD CM1300 /SET SYMBOL TABLE TO ZEROS (6300-7577 FIELD 1) DCA INDX TAD BSYMP DCA TPTT LP, DCA I TPTT ISZ INDX JMP LP TAD CM60 DCA INDX TAD BTTAB DCA TPTT DCA I TPTT /ZERO OUT TEMPORARY TABLES IN FIELD 0 ISZ INDX JMP .-2 CDF 10 TAD MIN104 /ZERO EVERYTHING FROM ZERO TO 107 DCA INDX TAD CP6 DCA TPTT LPP, DCA I TPTT ISZ INDX JMP LPP TAD TPT /MOVE DATA FROM TABLE TO FIELD 0 DCA TPTT REP, CDF 00 TAD I TPTT SNA /END OF FIELD 0 INITIALIZATION? JMP DN /YES DCA LOC TAD I TPTT CDF 10 DCA I LOC JMP REP DN, TAD I TPTT /MOVE DATA FROM TABLE TO FIELD 1 SNA /END FIELD 1 INITIALIZATION JMP DNN /YES DCA LOC TAD I TPTT DCA I LOC JMP DN DNN, CIF 10 JMP I STRT LOC, 0 INDX, 0 MIN104, L7-ASSIGN CP6, L7-1 CM1300, -1300 CM60, -60 BTTAB, ITTAB-1 BSYMP, BSYM-1 /BOTTOM OF TEMPORARY SYMBOL TABLE STRT, FORST /STARTING POINT AFTER INITIALIZATION TPTT=10 TPT, TABLE-1 TABLE, PUNCH LTTYPE 15 DOEND 45 FTTAB 51 ITTAB 47 TSYM-3 50 TSYM 55 -25 56 BSYM 57 BSYM 71 5777 74 3000 MIKE4 3377 POINTZ 3377 BASE INBUF BASE2 INBUF+100 SCOUNT 0 SCOUNT+1 0 SCOUNT+2 0 QONE 0 QONE+1 0 QONE+2 0 QONE+3 0 QONE+4 0 QONE+5 0 QONE+6 0 0 /THIS TERMINATES FIELD ZERO INITIALIZATION 2375 4000 2376 4000 2377 4000 0 / ERROR MESSAGE TABLE AND TEXT ELIST, -ERR1-1; EMSG1 /ILLEGAL CONTINUATION -ERR2-1; IE /ILLEGAL ARITHMETIC EXPRESSION -ERR3-1; IE -ERR6-1; IE -ERR9-1; EMSG3 -ERR10-1; EMSG4 -ERR12-1; EMSG4 -ERR14-1; EMSG4 -ERR15-1; EMSG3 -ERR16-1; EMSG5 -ERR17-1; EMSG6 -ERR18-1; SE /SYNTAX ERROR -ERR28-1; SE -ERR29-1; SE -ERR30-1; EMSG8 /ILLEGAL VARIABLE -ERR31-1; SE -ERR35-1; SE -ERR37-1; CE -ERR38-1; EMSG9 /ILLEGAL DO NESTING -ERR39-1; SE -ERR40-1; IE -ERR41-1; EMSG10 /EXPRESSION TOO BIG -ERR42-1; IE -ERR43-1; EMSG11 /MIXED MODE -ERR44-1; EMSG9 -ERR48-1; SE -ERR50-1; SE -ERR51-1; SE -ERR52-1;IE -ERR53-1; EMSG12 /ILLEGAL SUBSCRIPT -ERR54-1; EMSG13 /ILLEGAL EQUIVALENCING -ERR59-1; SE -ERR60-1; EMSG3 0; EMSG14 /COMPILER MALFUNCTION EMSG1, TEXT /ILLEGAL CONTINUATION/ IE, TEXT /ILLEGAL ARITHMETIC EXPRESSION/ EMSG3, TEXT /ILLEGAL STATEMENT/ EMSG4, TEXT /ILLEGAL CONSTANT/ EMSG5, TEXT /ILLEGAL STATEMENT NUMBER/ EMSG6, TEXT /SYMBOL TABLE EXCEEDED/ SE, TEXT /SYNTAX ERROR/ EMSG8, TEXT /ILLEGAL VARIABLE/ EMSG9, TEXT /ILLEGAL OR EXCESSIVE DO NESTING/ EMSG10, TEXT /ARITHMETIC EXPRESSION TOO COMPLEX/ EMSG11, TEXT /MIXED MODE EXPRESSION/ EMSG12, TEXT /EXCESSIVE SUBSCRIPTS/ EMSG13, TEXT /ILLEGAL EQUIVALENCING/ EMSG14, TEXT /COMPILER MALFUNCTION/ CE, TEXT /UNBALANCED QUOTES/ ITTAB=710 FTTAB=ITTAB+30 DOEND=2377 BSYM=6300 TSYM=7600 / THE STATEMENT TYPE TABLE FOLLOWS *2600 STYPE, 7361 /-DO 0000 LDO 6672 /-IF 0000 LIF 7061 /-GO 5361 /-TO LGOTO 7477 /-CA 6364 /-LL CAL 5573 /-RE 5353 /-TU LRET 7461 /-CO 6154 /-NT LCONT 5454 /-ST 6060 /-OP LSTOP 5777 /-PA 5255 /-US LPAUSE 5573 /-RE 7674 /-AD LREAD 5056 /-WR 6654 /-IT LWRIT 7161 /-FO 5563 /-RM LFRMAT 7262 /-EN 7400 /-D LLAST 7461 /-CO 6263 /-MM LCOMON 7367 /-DI 6273 /-ME LDIMEN 7257 /-EQ 5267 /-UI EQUI -0611 /-FI -1611 /-NI LFIN XXSUBR, 5453 /-SU 7556 /-BR LSUB 7153 /-FU 6175 /-NC LFUNC 0000 /THIS IS THE END OF LIST AREA1, 0 AREA2, 0 / THE PRECEDENCE TABLE FOLLOWS, NON-ZERO PREC. OPERATORS APPEAR -45 / PREC('%') = 7 NOTE: '%' REPLACES '**' 700 -52 / PREC('*') = 5 500 -57 / PREC('/') = 5 500 -53 / PREC('+') = 4 400 -55 / PREC('-') = 4 400 -75 / PREC('=') = 1 100 -74 / PREC('<') = 1 NOTE: '<' IMPLIES SUBSCRIPTED ASSIGNMENT 100 1 /THIS IS THE END OF THE TABLE THOU, -1750 -144 -12 -1 / THE PERMANENT SYMBOL TABLE BEGINS HERE *6000 1501 /MAIN 1116 0001 0601 /FAD 0400 0001 2324 /STO 1700 0001 0623 /FSB 0200 0001 0615 /FMP 2000 0001 0604 /FDV 2600 0001 1520 /MPY 3100 0001 0411 /DIV 2600 0001 2205 /READ 0104 0001 2722 /WRITE 1124 0501 1117 /IOH 1000 0001 5060 /(0 0000 0001 1215 /JMP 2000 0001 1617 /NOP 2000 0001 0516 /ENTRY 2422 3101 0501 /EAP 2000 0001 2001 /PAUSE 2523 0501 OPTADI, 2401 /TAD I 0440 1101 OPTAD, 2401 /TAD 0400 0001 OPDCA, 0403 /DCA 0100 0001 OPJMPI, 1215 /JMP I 2040 1101 2205 /RETRN 2422 1601 0320 /CPAGE 0107 0501 OPSNA, 2316 /SNA 0100 0001 2320 /SPC 0300 0001 0301 /CALL 1414 0001 0313 /CKIO 1117 0001 1014 /HLT 2400 0001 OPCLA, 0314 /CLA 0100 0001 0614 /FLOT 1724 0001 1106 /IFAD 0104 0001 0311 /CIA 0100 0001 0310 /CHS 2300 0001 0611 /FIX 3000 0001 1123 /ISTO 2417 0001 2001 /PAGE 0705 0001 BLCK, 0214 /BLOCK 1703 1301 0516 /END 0400 0001 1401 /LAP 2000 0001 0317 /COMMN 1515 1601 1123 /ISZ 3200 0001 2325 /SUBSC 0223 0301 DUMMY, 0425 /DUMMY 1515 3101 0122 /ARG 0700 0001 0314 /CLEAR 0501 2201 1111 /IIPOW 2017 2701 0611 /FIPOW 2017 2701 1106 /IFPOW 2017 2701 0606 /FFPOW 2017 2701 0403 /DCA I 0140 1101 0103 /ACH 1000 0001 OPEN, 1720 /OPEN 0516 0001 0522 /ERROR 2217 2201 1116 /INC 0300 0001 FORTR, 0617 /FORTR 2224 2201 OPCMA, 0315 /CMA 0100 0001 OPIAC, 1101 /IAC 0300 0001 EXIT, 0530 /EXIT 1124 0001 FIELD 1 *7 L7, 0 L10, 0 L11, 0 L12, 0 /LAST LINE'S CONTENTS FOR OPTOMIZATION 0 L14, 0 L15, 2377 /POINTER INTO DOEND LIST L16, 0 L17, 0 L20, 0 /FLAG, NON-ZERO IF '=' SEEN L21, 0 L22, 0 /SUBSCRIPT NESTING LEVEL L23, 0 /USED BY "DUMARG" AND "IOHAR" PATCH L24, 0 /LINE POINTER L25, 0 /HIGHEST SUBSCRIPT TEMP USED L26, 0 /USED FOR DIMENSION INFORMATION 0 /UNUSED L30, 0 /FOLLOWING EIGHT LOCS ARE USED BY ENTITY L31, 0 L32, 0 L33, 0 L34, 0 L35, 0 L36, 0 L37, 0 L40, 0 /CONTAINS THE CURRENT TRIPLE NUMBER L41, 0 /THIS IS THE POINTER INTO THE PUSH DOWN LIST L42, 0 /THESE TWO LOCATIONS ARE USED BY THE TRIPLE PROCESSOR L43, 0 / L44, 0 /CONTAINS ONE FOR RIGHT OF EQUALS, ZERO FOR LEFT L45, FTTAB /CONTAINS LARFEST FLOATING POINT TEMPORARY NUMBER USED L46, 0 /CONTAINS NUMBER OF THE TRIPLE CURRENTLY IN THE AC L47, 7575 /CONTAINS THREE LESS THAN START OF FCON TABLE L50, 7600 /CONTAINS START OF DIMENSION TABLE L51, ITTAB /CONTAINS LARGEST INTEGER TEMPORARY NUMBER USED L52, 0 /CONTAINS ONE IF RETURN FROM GENER IS DESIRED FOR BALANCE L53, 0 /CONTAINS THE LAST CREATED LABEL L54, 0 /CONTAINS THE LABEL FOR THE CURRENT STATEMENT L55, -25 /CONTAINS THE MAXIMUM ALLOWABLE NUMBER OF UNENDED DOS L56, 6300 /CONTAINS BEGINNING OF SYMBOL TABLE L57, 6300 /CONTAINS END OF SYMBOL TABLE L60, 0 /"INDIRECT =" FLAG FOR S.S LEFT OF EQUALS SIGN L61, 0 /NON-ZERO IF LAST STMT READ IS A COMMENT L62, 0 /NEXT FOUR LOCATIONS USED BY GENER AND ENTITY L63, 0 /CONTAINS THE CURRENT OPERATOR L64, 0 /POINTS TO THE LAST OPERATOR IN THE STACK L65, 0 /CONTAINS THE PRECEDENCE OF THE CURRENT OPERATOR BPAREN, 0 /PARENTHESIS COUNTER L67, 0 /ONE FOR FUNCTION AND ZERO FOR SUBROUTINE L70, 0 /CONTAINS POINTER TO SUBPROGRAM NAME L71, 5777 /BEGINNING OF PUSHDOWN LIST L72, 0 /SET TO ONE IF SUBSCRIPT IS ENCOUNTERED L73, 0 / L74, 3000 /BEGINNING OF ERASABLE LOCATIONS USED FOR PARAMETERS L75, 0 /SET TO ONE SUPPRESS /OUTPUT FROM COMPILER L76, 0 / L77, 0 /CONTAINS ADDRESS OF LAST ENTRY INTO FCON OR SYMBOL TABLE /THE FOLLOWING THREE LOCS ARE USED BY THE /LITERAL COLLECTER COUNT2, 0 /NUMBER OF DIGITS TO RIGHT OF DECIMAL POINT ESIGN, 0 /0 MEANS POSITIVE EXPONENT, 1 MEANS NEGATIVE FPSW, 0 /0 MEANS INTEGER CONSTANT, 1 MEANS FLOATING POINT MIKE4,MA, 3377 MIKE8,TOTAL, 0 INTA, 0 INTB,MIKE7, 0 SNUM,MB, 0 POINTZ, 3377 CHK, 0 IMPDO, 0 /"IMPLIED DO-LOOP IN PROGRESS" FLAG KOUNT, 0 ASSIGN, LASIGN /ROUTINE TO PROCESS ASSIGNMENT STATEMENTS PUTCH, LPUTCH /ROUTINE TO PUT A CHARACTER BACK IN THE INPUT BUFFER PROP, LPROP /PRINTS OPCODES PRCRL, LPRCRL /PRINTS CREATED LABELS PRINT, LPRINT /PRINTS ONE ASCII CHAR P2, LP2 /PRINT TWO PACKED ASCII CHARS GETCH, LGETCH /GETS ONE CHARACTER OUT OF THE INPUT BUFFER LUNCH, LLUNCH /PRINTS ERROR COMMENTS MODE, LMODE /DETERMINES THE MODE OF THE ARGUMENT LOOK, LLOOK /CHECKS FOR THE REST OF THE INPUT STATEMENT ZZZ, LZZZ /PRINTS OUT STATEMENT LABELS ENTITY, LENTT /GETS THE NEXT LOGICAL INPUT PARAMETER SYMTAB, LSYMTB /ENTERS SYMBOLS INTO THE SYMBOL TABLE DUMARG, LDMARG /SEES IF PARAMETER IS A DUMMY ARG OR SUBSCRIPT PRSYM, LPRSYM /PRINTS SYMBOLS CREATE, LCREAT /CREATES LABELS PROTAC, LPRTAC /PRINTS CONTENTS OF AC IN OCTAL PLAB, LPLAB /PRINTS LABELS PIFF, LPIFF /PUTS OUT AN IFF FOR THE CONTENTS OF THE AC TRIPL, LTRIPL /PROCESSES THE TRIPLES GENERATED FROM AN EXPRESSION GENER, LGENER /GENERATES THE TRIPLES LCHNG, CHNG /TEST FOR DUMMY ARG AND REPLACE CLAB, LCLAB /HANGS A CREATED LABEL ON THE NEXT LINE STORE, LSTORE /STORES THE CONTENTS OF THE AC FPROP, LFPROP /PUT OUT CALLS TO F.P. ROUTINES ZER, LZER DUM, LDUM /PROCESSES OCCURRANCES OF DUMMY ARGUMENTS IN LISTS DIM, LDIM /LOOKS UP DIMENSION INFORMATION ON VARIABLES PUNCH, LTTYPE /ADDRESS OF CURRENT OUTPUT ROUTINE C2, 2 C3, 3 C40, 40 C7240, 5440 /THIS WAS COLON-SPACE NOW ITS COMMA-SPACE C77, 77 CM40, -40 CM4046, -4046 CM50, -50 CM51, -51 CM54, -54 CM2, -2 CM3, -3 CHECK, LCHECK SMODE, LSMODE BSS, LBSS ARG, LARG C54, 54 BASE, INBUF BASE2, INBUF+100 C4000, 4000 GNB, LGNB *177 START, CLA /COME HERE AT BEGINNING OF EACH STMT TAD IMPDO SZA CLA JMP ERR1 /IF IMPDO<>0 THEN WE MUST HAVE SCREWED UP ON /CONTINUATIONS (I THINK) ISZ CHK /IS THERE A STMT IN THE BUFFER? JMP .+3 JMS I SWAP /YES, SWITCH BUFFER POINTERS JMP .+3 TAD BASE JMS I RCD /NO, READ THE NEXT LINE TEST, TAD L15 TAD CM3 DCA L16 /SET UP XR FOR DO TERMINATION TEST TAD L54 CIA TAD I L16 SZA CLA /ARE WE TERMINATING A DO? JMP ATRY JMS LDNEXT /TERMINATE DO LOOP JMP TEST /SEE IF THERE IS ANY MORE... ATRY, TAD L61 SZA CLA /A COMMENT? JMP CMNT TAD CHK SZA CLA /ILLEGAL CONTINUATION? ERR1, JMS I LUNCH JMS I STMT /GET THE STMT NR... TAD L32 SNA JMP .+4 /NO STMT NUMBER CIA TAD L12 SZA CLA /CAN WE OMIT A TERMINAL JMP? JMS I PRINT DCA L24 FLST, JMS LIST /PUNCH SOURCE STMT JMS I WIPE /ZERO THE SUBSCRIPT TEMP. TABLE TAD L32 DCA L54 TAD CM2 DCA L64 SKP ACA, DCA I BAREA1 JMS I GETCH JMP ALPH NOP JMS I PUTCH /PUT CHARACTER BACK ALPH, RTL CLL RTL RTL DCA L65 JMS I GETCH JMP ALPH2 NOP JMS I PUTCH /PUT CHARACTER BACK ALPH2, TAD L65 ISZ L64 JMP ACA DCA I BAREA2 DCA CHK TAD SSTYP /COMPARE THESE CHARS WITH DISPATCH TABLE DCA L17 TRY, TAD I L17 SNA /END OF THE TABLE? JMP I ASSIGN /YES, MUST BE ARITHMETIC STMT TAD I BAREA1 SZA CLA JMP NOHIT2 TAD I BAREA2 TAD I L17 SZA CLA JMP NOHIT1 TAD I L17 /FOUND A MATCH, GO TO PROPER HANDLER... DCA L30 JMP I L30 NOHIT2, ISZ L17 NOHIT1, ISZ L17 JMP TRY /DOESN'T MATCH, TRY AGAIN LDNEXT, 0 TAD L15 /RESET THE DO END POINTER TAD CM3 DCA L15 TAD L15 IAC DCA L16 CMA TAD L55 DCA L55 JMS I PROP /PUNCH 'JMP