/ MULTI COMPILER V 1.15 / / MULTI TERMINAL DIBOL COMPILER / BASED ON COS DIBOL COMPILER V01.11 BY SR / /COPYRIGHT 1972, 1973 /DIGITAL EQUIPMENT CORP. /MAYNARD MASS. 01754 / /THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE /ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION /OF DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT /AS MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL /EQUIPMENT CORPORATION. / /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. / / ASSEMBLY INSTRUCTIONS / / .R PAL8 / *MCOMP.BN,MCOMP.LS /RETURN TO RSETLN TO IGNORE LINE /IF LINK IS ON, IT'S A CCP COMMAND /NORMAL RETURN TO PROCESS LINE CCP, 0 SNL /IS IT A CCP COMMAND? JMP REGCOM /NO TAD JT DCA .+1 IGNORE, 0 TAD NOCOMP SZA CLA JMP BLNKLN CALL ZNAME /LOOK FOR VARIABLE JMP ER71 /NAME MISSING CALL ZLOOKUP TAD I OPRAND JMP I IGNORE JT, JMP I .+1 CCLT CCEQ CCGT CCLT, ISZ LTKNT /BUMP LT COUNT JMS IGNORE SMA CLA /IS IT DEFINED? ISZ NOCOMP /YES TAD LTKNT CIA DCA OFFKNT /SAVE (NEG OF) LTKNT JMP I (RSETLN /IGNORE LINE CCEQ, JMS IGNORE TAD (4000 CCOM, DCA I OPRAND /DEFINE IT JMP I (RSETLN CCGT, TAD LTKNT TAD OFFKNT SNA CLA DCA NOCOMP /COMPILE AGAIN STA TAD LTKNT SPA JMP ER71 /MISMATCHED GT DCA LTKNT /DECREMENT LT COUNT TAD NOCOMP SNA CLA JMP I (RSETLN /IGNORE LINE BLNKLN, TAD Z101 DCA I (INPLIN+1 TAD Z101 DCA I (INPLIN+2 JMP I (RSETLN ER71, JMS I ZERROR ERR71 NOCOMP, 0 /1 MEANS DON'T COMPILE LTKNT, 0 /NUMBER OF NESTED LT'S REGCOM, CLA TAD NOCOMP SNA CLA EXIT CCP JMP BLNKLN /NESTED CONDITIONALS NOT WORKING /REACTIVATE WHEN COUNT RETURNS TO ACTIVATING ONE (NOT 0) /CHECK IN END OVERLAY FOR HANGING NEST /CAN'T DEFINE USE UNDEFINED CONDITIONAL IN MIDDLE OF RECORD OFFKNT, 0 /NEG OF LT COUNT WHEN COMP WENT AWAY IMAGE, TAD ZM15 /CHECK FOR COMMA SZA CLA JMP ILLDIM CLL CML RTL AND TYPE SNA CLA JMP I (IMGERR STL RAL AND TYPLFT SNA CLA JMP I (IMGERR /REALLY SEP ERROR IAC /TYPE REQUIRED IS ALPHA DCA TYPE JMS I ZEXPR /GET IMAGE STRING TAD (IMAGOP JMS I ZCODE JMP I ZNXTSTM ILLDIM, CALL ZERROR ERR16 PAGE PRINT, 0 /PRINTS THE NEXT SOURCE LINE SNA CLA ISZ LINKNT SKP JMS EJEKT TAD I PRINT CALL (CDOIOC CLL TAD LINKNT TAD I (SUPLCT DCA LINKNT SZL JMS EJEKT ISZ PRINT JMP I PRINT EJEKT, 0 /PERFORM TOP OF FORMS TAD (-65 /55 LINES PER PAGE DCA LINKNT /RESET LINE COUNTER TAD (214 CALL LP8PC /PRINT FORM FEED ISZ PGNM /INCR PAGE NUMBER TAD PGNM CALL OTOD /CONVERT TO DECIMAL CDF 10 DCA I (PAGNUM /INSERT CDF 0 TAD HEAD CALL (CDOIOC CALL ZPCRLF TAD SUBHD CALL (CDOIOC CALL ZPCRLF /PAGE # AND DATE? EXIT EJEKT /RETURN PGNM, 0 /PAGE NUMBER HEAD, HEADING-1 SUBHD, SUBHDG-1 /THIS ROUTINE INSERTS LINE NUMBER IN INPUT BUFFER. /FORMAT OF INPUT BUFFER /LOCATION ORIGINAL USE NEW USE /INPLIN NOT USED NEW WC /INPLIN+1 NOT USED DIG1,DIG2 /INPLIN+2 OLD WC DIG3,DIG4 /INPLIN+3 OLD LINE# BLANK,BLANK /INPLIN+4 START OF TEXT START OF TEXT GETLIN, 0 /READ A NEW LINE TAD Z7700 DCA LENGTH /SET LENGTH CLA STL RTL /READ FILE 0 CALL RDOIO INPLIN+1 /BUFFER ADDR -1 JMP I (NOEND /IF EOF, END MISSING STA CLL RAL TAD I (INPLIN+2 /INCREMENT WC BY 2 DCA I (INPLIN /INSERT TAD LINENO DCA OLDLNO /SAVE OLD LINE # TAD I (INPLIN+3 DCA LINENO /SET NEW LINE # TAD LINENO JMS DECI DCA I (INPLIN+1 /INSERT TAD LOD /GET NEXT 2 DIGITS DCA I (INPLIN+2 /INSERT TAD Z101 /GET 2 BLANKS DCA I (INPLIN+3 /INSERT TAD (6 /RESET CHAR POINTER DCA CHRPTR JMP I GETLIN /RETURN DECI, 0 DCA N1 DCA TEST TAD N1 DECILP, CLL ISZ TEST TAD (-144 SZL JMP DECILP TAD (144 CALL OTOD DCA LOD STA TAD TEST CALL OTOD EXIT DECI N1, 0 TEST, 0 /ENTER WITH STREF PTING TO ENTRY COMN, 0 TAD STREF TAD (5 DCA STREF ISZ I STREF ISZ STREF TAD I STREF EXIT COMN CLEAR, CLA CLL CML RTL AND TYPE RAR TAD (CLEARA JMP CLSTCM INKR, DCA RIGHT /WANT LEFT SIDE STL RTL DCA TYPE /WANT DECIMAL CALL ZEXPR TAD (INCROP CLSTCM, CALL ZCODE JMP I ZNXTSTM TRYLIT, TAD RIGHT SZA CLA JMS I (LITERL /IS OPERAND A LITEAL? JMP I (MSNGOP /NO, MISSING OPERAND TAD OPRAND /YES, SAVE PARAMETERS DCA EXTMP1 TAD SYMNUM DCA EXTMP2 CALL (TYPCHK JMP I (WASLIT /GO DO REST PAGE /3400-4400 IS PROC OVERLAY OF BLOCK BLOCK, JMS I ZNAME /LOOK FOR "BLOCK" JMP I (NOBL /MAYBE STARTS WITH "," TAD NAME1 TAD (-4355 /"BL" SNA CLA TAD NAME2 TAD (-6044 /"OC" SNA CLA TAD NAME3 AND Z7700 TAD (-5400 /"K" SZA CLA JMP I (TRYREC JMS I ZRESET /RESET CHAR POINTER JMS I ZSKIP /SKIP OVER FIRST 5 -5 RECORD, TAD SYMEND /SET STREF IAC DCA I (STREF TAD L7000 DCA BLNAME JMS I ZNAME /GET BLOCK NAME JMS I (DUMMY /NO BLOCK NAME JMS I ZLOOKUP TAD I OPRAND /CHECK TYPE CLL RAL SZA CLA JMP I (ER12 /IF ALREADY DEFINED, BAD RAR TAD Z10 /SET TYPE TO "BLOCK" DCA I OPRAND CDF 0 TAD BLKOPT SZA CLA /WAS LAST BLOCK AN OVERLAY? JMP NOVA /YES TAD RECSIZ /NO CIA DCA LASIZ NOVA, JMS I (FIX DCA BLKOPT DCA COPT /NEEDED FOR CHAIN OVERLAYS DCA RECSIZ BLKLUP, JMS I ZNXTCHR JMP NOOPTN TAD ZM15 SZA CLA JMP I (ER56 JMS I ZNXTCHR L7000, NOP TAD (-71 /WE HAD A COMMA, LOOK FOR X SNA /IS IT "X"? JMP XOPT /YES ER45, JMS I ZERROR ERR45 /BAD OPTION XOPT, ISZ BLKOPT /NOTE X OPT JMP BLKLUP /MORE OPTIONS? NOOPTN, TAD BLKOPT SNA CLA JMP NOX TAD OLDBLK /OPTION IS ",X" DCA BYTORG /DO OVERLAY TAD HIOLDBLK DCA HIORG DCA COPT /X IMPLIES NO C JMP YOX NOX, DCA LASIZ /YOX, TAD HIORG / RAR / CLA YOX, STL /MIGHT WASTE 2 WDS AT HALF-FLD BDRY TAD BYTORG RAR CLL IAC SNL CLA JMP .+3 ISZ HIORG DCA BYTORG CALL (ROUND TAD BYTORG DCA OLDBLK /FIX ELUSIVE BUG TAD HIORG DCA HIOLDBLK ISZ OPRAND /POINTER TO DIMENSION IAC CDF SFLD DCA I OPRAND /SET IT TO 1 ISZ OPRAND TAD OPRAND /SAVE PTR TO BLK SIZE DCA OBSIZE TAD HIORG DCA I OPRAND ISZ OPRAND TAD BYTORG DCA I OPRAND /STORE BLOCK ORIGIN ISZ BYTORG ISZ BYTORG CDF 0 /CAN'T POSSIBLY BE SKIPPED JMP I ZNXTSTM /GET BLOCK STUFF LASIZ, 0 /NEG OF SIZE OF FIRST RECORD IN OVERLAY GROUP PATCH2, 0 TAD RECSIZ CLL CML TAD TSIZE SNL /NEW JMP ER20 /NEW DCA RECSIZ TAD RECSIZ TAD LASIZ SZL SNA CLA /CHECK FOR OVERFLOW (DOUBLE CHECK) EXIT PATCH2 ER20, CALL ZERROR ERR20 /OVERLAYOR LARGER THAN OVERLAYEE HIOLDBLK,0 PAGE DUMMY, 0 /CREATE DUMMY NAME CLA IAC DCA NAME1 CDF SFLD DCA I Z3 /UNDEFINE IT CDF 0 DCA BLNAME EXIT DUMMY /RETURN DINIT, JMS I ZNXTCHR /LOOK FOR DECIMAL INIT. JMP I (ENDDAT-1 TAD ZM15 SZA CLA JMP I (ER56 /NOT "," TAD L40 DCA SIGN /40 IS NEGATIVE JMS NYPD /LOOK FOR P OR D JMP I (ENDDAT-1 /FOUND P, OR D OR S TAD (-6 /IS IT "-"? SNA JMP .+5 TAD (16-14 SZA CLA JMS I ZBACKUP DCA SIGN /0 IS POSITIVE JMS I (RLINIT GDINIT, JMS I ZNXTCHR JMP ENDNUM TAD (-16 SNA /IS IT "-"? JMP ENDNU /YES TAD (16 /RESTORE CHAR JMS I NUMBER JMP ENDFLD DCA Y5 TAD Y5 CALL (RLPUTC JMP GDINIT ENDNU, TAD L40 /NEGATIVE DCA SIGN CALL ZNXTCHR JMP ENDNUM ENDFLD, CALL ZNXTCHR L40, 40 /DNO TAD ZM15 SZA CLA JMP ER43 CALL ZBACKUP ENDNUM, STA TAD I (RLCNT DCA I (RLCNT TAD Y5 TAD SIGN CALL (RLPUTC JMS RLFINI JMP DINIT SIGN, 0 RLFINI, 0 TAD I (RLCNT CIA TAD ELSIZE SZA CLA JMP ER51 TAD (LBUFR-1 DCA X0 STA TAD I (RLCNT CLL CML CMA RAR DCA ELCNT TAD I X0 CALL ZCODE ISZ ELCNT JMP .-3 JMS I (BUPD ISZ CRCNT EXIT RLFINI CALL ZERROR ERR50 ER51, CALL ZERROR ERR51 ER46, CALL ZERROR /DATA INIT MISSING ERR46 ER43, CALL ZERROR /BAD DECIMAL CONSTANT ERR43 Y5, 0 NYPD, 0 CALL ZNXTCHR JMP ER46 TAD (-64 /IS IT S? SNA JMP SOPT /YES TAD Z3 /BUT IS IT P? SZA JMP NOPP /NO STL RTL /2 NYGO, CLL CMA RAL /-6 OR -2 SOPT, TAD (12 /4 OR 10 OR 12 DCA PFLAG JMP I NYPD NOPP, TAD (61-45 SNA JMP NYGO TAD (45-65 /LOOK FOR ,T SZA JMP NOD /NOPE IAC JMP SOPT /MARYJANE LIVES NOD, TAD (55 ISZ NYPD EXIT NYPD /RETURN WITH IT-10 IN AC /P - TYPE 4 RECORD /D - TYPE 10 RECORD /S - TYPE 12 RECORD /T - TYPE 13 RECORD PAGE NOBL, JMS I (DUMMY CALL ZCOMA DATASP, JMS I ZLOOKUP TAD I OPRAND CLL RAL CDF 0 SZA CLA JMP I (EER12 JMS I (DATNUM DCA RCNT TAD RCNT CMA DCA CRCNT JMS I ZNXTCHR JMP I (ER52 TAD (-42 DCA TYPE CALL (DATNUM DCA ELSIZE TAD ELSIZE CIA CLL DCA CELSIZ ADUP, TAD RCNT SZL JMP I (ER15 /WOW IS BIG! ISZ CELSIZ JMP ADUP DCA TSIZE TAD ELSIZE AND D7000 SZA CLA JMP I (ER15 /IS BIG CALL (PATCH2 CLA IAC TAD RECSIZ AND BLNAME SZA CLA JMP I (ER20 /RECORD TOO BIG DCA PFLAG /ZERO P FLAG CALL (PATCH /SAVE INFO FOR ,P TAD BLKOPT SZA CLA JMP NOCLR TAD TSIZE DCA SIZE TAD TYPE SNA CLA JMP NOCLR CALL ZCDUMP XCLEAR, DCLEAR JMS I (CORG /OUTPUT SIZE-ORIGIN TAD SIZE CIA CALL ZCODE /NEED 12-BIT SIZE HERE (NEW) NOCLR, TAD ELSIZE DCA SIZE TAD TYPE SZA CLA /IS TYPE "A"? JMP I (DINIT /NO AINIT, JMS I ZNXTCHR /LOOK FOR ALPHA INITIALIZATION JMP I (ENDDAT TAD ZM15 SZA CLA JMP I (ER14 CALL (NYPD JMP I (ENDDAT SZA CLA JMP I (ER47 JMS RLINIT GETAI, JMS I (GETCHR /GET NEXT CHAR, KEEP BLANKS JMP I (ER47 TAD ZM10 /LOOK FOR CLOSING ' SNA JMP FINAI TAD Z10 JMS RLPUTC JMP GETAI FINAI, CALL (RLFINI JMP AINIT RLINIT, 0 TAD TYPE SNA CLA JMP SRLINI TAD BLKOPT TAD TSIZE CIA TAD ELSIZE SNA CLA DCA I (CODBUF / DELETE PREVIOUS CODE ENTRY! SRLINI, CALL ZCDUMP DATAIN CALL (CORG DCA RLCNT JMP I RLINIT RLPUTC, 0 CALL KPUTC LBUFR-1 RLCNT, 0 ISZ RLCNT D7000, 7000 EXIT RLPUTC BUPD, 0 CLL TAD BYTORG TAD ELSIZE DCA BYTORG SZL ISZ HIORG EXIT BUPD PAGE IAC ENDDAT, IAC CDF SFLD TAD I OPRAND DCA I OPRAND ISZ OPRAND TAD RCNT DCA I OPRAND TAD SAVHI DCA HIORG ISZ OPRAND TAD ELSIZE CLL RTL RAL TAD HIORG DCA I OPRAND ISZ OPRAND TAD SAVBYT /THIS IS BETTER THAN ORGBYT DCA BYTORG TAD BYTORG DCA I OPRAND CDF 0 TAD TSIZE DCA ELSIZE /BUPD WANTS ELSIZE CALL (BUPD TAD PFLAG /P? SNA JMP I ZNXTSTM DCA TYPE4 CALL ZCDUMP /CREATE TYPE 4 RECORD TYPE4, COMMAP TAD NAME1 /OUTPUT NAME CALL ZCODE TAD NAME2 CALL ZCODE TAD NAME3 CALL ZCODE TAD SV1 CALL ZCODE /OUTPUT SIZE-ORIGIN TAD SV2 CALL ZCODE JMP I ZNXTSTM /NEXT STMNT /NOTE: ,P CAN FOLLOW A DEFAULT INITIAL VALUE SAVHI, 0 SAVBYT, 0 SV1, 0 SV2, 0 DIGIT, 0 NMBR, 0 DATNUM, 0 TAD M4 DCA DTCNT NUMCNV, DCA NMBR JMS I ZNXTCHR /LOOK FOR FIRST DIGIT JMP NONUM /IF NO CHARS, INCOMPLETE JMS I NUMBER /TEST FOR DIGIT JMP NONUM /IN THIS CASE, BACK 1 AND L17 /STRIP OFF LEADING BITS TAD M1 DCA DIGIT /SAVE THIS DIGIT ISZ DTCNT JMP .+3 ER15, CALL ZERROR /ENTITY TOO LARGE ERR15 TAD NMBR /MULTIPLY OLD NUMBER BY 10 CLL RTL TAD NMBR CLL RAL TAD DIGIT /NOW ADD NEW DIGIT JMP NUMCNV /GO STORE THE UPDATED NUMBER NONUM, CLA STL RTL /2 RAL /4 TAD DTCNT SNA CLA /IF NUMBER WASN'T THERE IAC /MAKE IT 1 TAD NMBR SNA /IF NUMBER WAS THERE AND WAS 0, JMP ER15 /ITS AN ERROR JMP I DATNUM /RETURN WITH NUMBER IN AC DTCNT, /NO. MUST BE 1, 2, OR 3 DIGS. FIX, 0 TAD OLDBLK CIA TAD BYTORG CLL RAL CLL RAL CLL RAL TAD I (HIOLDBLK CDF SFLD DCA I OBSIZE CDF 0 TAD BLKOPT SNA CLA /WAS LAST BLOCK AN OVERLAY? JMP NOOV /NO TAD REALBYT /YES DCA BYTORG TAD REALHI DCA HIORG NOOV, TAD BYTORG DCA REALBYT TAD HIORG DCA REALHI EXIT FIX /RETURN REALBYT,0 /NEXT REAL BYTE LOC REALHI, 0 PATCH, 0 TAD TYPE SZA TAD (-3 SZA CLA JMP ER52 /IT'S NOT A OR D TAD ELSIZE CLL RTL RAL TAD HIORG DCA SV1 TAD BYTORG DCA SV2 TAD BYTORG DCA SAVBYT TAD HIORG DCA SAVHI EXIT PATCH ER52, CALL ZERROR ERR52 /NOT A OR D PAGE *4400 SWITCH, 0 / ARG IN AC DCA TM2 TAD I (LISTSW RTR RTR RTR AND L77 DCA TM1 TAD TM1 JMS I (NUMBUR JMP N2 /IT'S A DIGIT TAD TM1 /IT'S NOT JMS GOPT TAD TM2 /NO JMS I (NUMBUR /DIGIT? EXIT SWITCH /YES SIR N2, TAD TM2 /NO SIR JMS GOPT / ISZ I (LISTSW /"??"? / EXIT SWITCH / DCA I (QPRNT /YES EXIT SWITCH DEIGHT, 0 TAD I SYSDAT /GET DATE DCA DATEM /SAVE IT TAD DATEM CLL RTL RTL RAL AND L17 DCA TM1 /SAVE MONTH FOR LATER TAD TM1 CLL RAL TAD (MONLST-3 DCA X2 TAD I X2 CDF 10 DCA I (MONTH1 CDF 0 TAD I X2 CDF 10 DCA I (MONTH2 TAD DATEM AND L7 DCA TM2 /SAVE YEAR FOR LATER TAD TM2 CLL RTL RTL RTL TAD (2301 DCA I (YEAR CDF 0 TAD DATEM CLL RTR RAR AND (37 DCA DATEM /SAVE DAY FOR LATER TAD DATEM CALL OTOD CDF 10 DCA I (DAY /FIGURE OUT DAY OF WEEK CDF 0 TAD TM2 CLL RTR SNL SMA /CHECK FOR A LEAP YEAR JMP LEAP /WE GOT ONE! ISZ I (JAN /IF NOT, FUDGE UP THE CONSTANTS ISZ I (FEB LEAP, AND (37 TAD TM2 TAD (132 /72 + 72/4 IN DISGUISE TAD DATEM DCA DATEM TAD TM1 JMS I (PART2 /GO TO NEXT KLUDGE AREA EXIT DEIGHT /THAT'S A SWITCH / GOPT, 0 TAD (-17 / /O IS THE ONLY ONE LEFT SZA JMP TSTNSW TAD (7200 DCA I (OPTMZ1 TAD (7200 DCA I (OPTMZ2 /DON'T OUTPUT LINE NUMBERS ISZ I (OPTMZ3 TSTNSW, IAC SZA CLA JMP I GOPT SETNLS, STL CLA RAR /LSTSW=4000 MEANS NOLIST DCA LSTSW JMP I GOPT SCRCHK, TAD (400 /LOOK AT FIRST BLOCK ENTRY IN JMS I SYSHND /DIRECTORY TO DETERMINE BINARY SCRATCH AREA 0110 /LENGTH. READ 1 PAGE, BLOCK 1 INTO 0000 /PAGE 0 FIELD ONE 0000 /SEGMENT 0 CDF 10 TAD I (1 /GET FIRST BLOCK OF FIRST FILE CDF 00 AND (7760 /ROUND OFF TO SEGMENT # CLL RTR RTR CIA DCA I (TOPF JMP I (SCROK /CONTINUE INIT CODE / PAGE CODBUF, -1 /KLUDGE TO CDUMP EMSG, 4663 /ER 6360 /RO 6364 /RS 0101 / NUMBUR, 0 /SKIP IF NOT STRIPPED DIGIT & STUFF TAD (-72 CLL TAD (12 SNL JMP YECCH /BAD # /SW ROUTINE TO FIND LOG UNIT# ASSOC WITH DT # TAD SYSHND CIA DCA MATCH TAD (UTBASE-1 DCA X0 TAD (-20 DCA COUNT DCA LOGICAL SLOOP, TAD I X0 TAD MATCH SNA CLA JMP GOTCHA ISZ LOGICAL CLA STL RTL TAD X0 DCA X0 ISZ COUNT JMP SLOOP HLT /DTA NOT ASSIGNED GOTCHA, TAD LOGICAL DCA BUNIT /SOMEONE'S BEEN SLEEPING IN MY UNIT AND HERE IT IS EXIT NUMBUR YECCH, CLA ISZ NUMBUR /BUMP EXIT NUMBUR LOGICAL,0 COUNT, 0 MATCH, 0 / PART2, 0 /2ND PART OF KLUDGE TO GET DAY OF WEEK TAD (JAN-1 DCA TM1 TAD I TM1 /GET MAGIC # FROM TABLE TAD DATEM DIV7, CLL TAD (-7 SZL JMP DIV7 TAD L7 CLL RAL TAD (WEEKDY-1 DCA GETWKP AC7776= CLA CLL CMA RAL AC7776 JMS I MOVE CDF 10 GETWKP, 0 WKDAY-1 JMP I PART2 / WEEKDY, 6442 /SA 6501 /T 6466 /SU 5701 /N 5660 /MO 5701 /N 6566 /TU 4601 /E 7046 /WE 4501 /D 6551 /TH 6663 /UR 4763 /FR 5201 /I MONLST, 1653;4257;1647 4643;1656;4263 1642;6163;1656 4272;1653;6657 1653;6655;1642 6650;1664;4661 1660;4465;1657 6067;1645;4644 / /A MAGICAL TABLE JAN, 0 FEB, 3 4;0;2;5;0;3;6;1;4;6 NOFGBG, TAD (11 /HERE IF MCOMP RUN WITH LESS THAN 12K JMS I CDOIO /MAYBE 16K WITH FGBF GOING NOCORE-1 7600 /NEVER RETURN HERE JMP I .-1 /NIFTY, NO? / PAGE FIELD 1 /OVERLAYS GO IN FIELD 1 FOR ASSEMBLY PURPOSES *1400 ENDOVO=. NOPUNCH *1400 ENPUNCH ENDOVF=. /TYPE / / /KLUDGE /0 0 14 00003 /1 2 2 10000 /2 4 4 00001 /4 10 10 00002 /10 20 20 00004 /20 40 40 00010 /2000 4000 14 00003 /4000 0 16 10003 SOT, 0 /2 OR 3 PLACE PRINT ROUTINE CALL (DECI AND L77 DCA SOTM TAD SOTM TAD (-21 SZA TAD (20 TAD Z101 CALL (PUSHX2 /INSERT IN PRINT BUFFER TAD LOD CALL (PUSHX2 /LOW ORDER PART TOO EXIT SOT SOTM, 0 / THIS WAS GOLOAD PTCH3, 0 CALL (BLPAD TAD (4265 /"AT" CALL (PUSHX2 TAD (155 /" L" CALL (PUSHX2 TAD (5257 /"IN" CALL (PUSHX2 TAD (4601 /"E " CALL (PUSHX2 ISZ X0 ISZ X0 CALL (POPX0 CDF 0 CALL (DECI CALL (PUSHX2 TAD LOD CALL (PUSHX2 CALL (PUSHX2 EXIT PTCH3 ENDST, TAD I (LTKNT SZA CLA JMP CCPFTL TAD NSYMS IAC CDF 10 DCA I (TYPE3+2 CDF 00 TAD I (PROCSYM IAC CDF 10 DCA I (TYPE3+3 CDF 00 TAD L100 DCA I (SBT STL CLA RAR DCA LENGTH TAD ERKNT SZA CLA JMP LEV TAD (11 CALL RDOIO TYPE3-1 L100, 100 LEV, TAD (STITLE-1 /CHANGE HEADING DCA I (SUBHD CDF 10 TAD (-6 JMS I MOVE CDF 10 /CHANGE THE HEADER LINE HEAD2-1 /TO READ "STORAGE MAP LISTING" CMPLTN-1 /INSTEAD OF "COMPILATION LISTING" STA DCA LINKNT STA DCA X1 TAD NSYMS CIA CLL RAL JMS PUSHX1 TAD (3400 DCA R3 CDF 0 JMP I (ENDST2 CCPFTL, JMS I (FATAL ERR71 POPX0, 0 CDF SFLD TAD I X0 JMP I POPX0 PUSHX1, 0 CDF SFLD DCA I X1 JMP I PUSHX1 PUSHX2, 0 CDF 10 DCA I X2 JMP I PUSHX2 BINLEN, 0 TAD BOUTLN AND L7400 CLL RAL TAD HIBOUT RTL RTL DCA HIBOUT JMP I BINLEN VERSN, VERSON BINXT, BINEXT / PAGE ENDST2, CDF SFLD TAD (6 /START AT ENTRY 1!!!! DCA X0 TAD (-31 CDF 10 DCA I L7001 /SET WC CDF 0 CALL (ROUND /ROUND UP TO EVEN BYTE TAD I (HILIT /DOUBLE PREC DIVIDE BY 2 CLL RAR DCA PROGH TAD I (LITORG RAR CLL TAD NSYMS TAD NSYMS IAC /ADD 1 FOR WC PRECEEDING SYMBOLS DCA PROGL SZL ISZ PROGH L7001, IAC DCA NSKNT TAD (ENDLUP DCA I (ERET /X0 PTS TO SYMBOL TABLE /X1 PTS TO COMPACTED SYMBOL TABLE /X2 PTS TO PRINT BUFFER /X4 PTS TO TYPE NAME /R3 POINTS TO DDT SYMBOL TABLE ENDLUP, CDF SFLD TAD L7001 DCA X2 TAD (1717 DCA UNTEM CALL (POPX0 SNA JMP I (ISZN SPA DCA UNTEM CLA TAD NSKNT RTR RTR RTR CALL (BFOO TAD NSKNT CALL (BFOO CALL (BLPAD ISZ NSKNT TAD UNTEM CALL (PUSHX2 /PRINT NAME DCA EFL CALL (POPX0 CALL (NULCHR CALL (PUSHX2 CALL (POPX0 CALL (NULCHR CALL (PUSHX2 JMS I (BLPAD CALL (POPX0 /GET TYPE CLL RAL DCA NTEM TAD NTEM SMA SZA JMP UNUN DCA EFL /UNRESOLVED LABEL REFERENCE RTL TAD (14 /PT TO "UNDEF" UNUN, CLL RTR /FUDGE CML SZA SNL STA TAD (TYPTBL DCA UNTEM CDF 0 TAD I UNTEM DCA X4 CLL STA RTL /-3 DCA ENDKNT UNUN01, CDF 10 TAD I X4 CALL (PUSHX2 /PRINT TYPE ISZ ENDKNT JMP UNUN01 TAD NTEM SNA CLA CALL (PUSHX2 TAD EFL SNA CLA JMP I (AAAAAA JMS I (ABORT CALL (PTCH3 JMP I (NOOF UNTEM, 0 / PAGE AAAAAA, JMS I (BLPAD CALL (POPX0 /GET DIMENSION CDF 0 CALL (SOT /CONVERT TO DECIMAL JMS I (BLPAD CALL (POPX0 /GET SIZE, H.O. ORIGIN DCA SIZ CALL (POPX0 DCA ORI /GET L.O. ORIGIN TAD NTEM TAD ZM10 SZA CLA JMP NOOF CLL TAD ORI TAD PROGL DCA ORI RAL /FIXED TAD PROGH TAD SIZ DCA SIZ NOOF, TAD SIZ CALL (PUSHX1 TAD ORI CALL (PUSHX1 /COMPACT TAD SIZ CLL RAR CLL RAR CLL RAR CDF 0 SNA TAD (1000 CALL (SOT /PRINT SIZE JMS I (BLPAD TAD SIZ AND L7 TAD (121 CALL (PUSHX2 TAD ORI RTR RTR RTR JMS BFOO TAD ORI JMS BFOO CDF 0 TAD EFL SZA CLA JMP ZPR TAD LSTSW SZA CLA JMP I (ENDLUP ZPR, CALL ZPRINT 7000 JMP I (ENDLUP BFOO, 0 DCA FOOT TAD FOOT AND L7 DCA FOT TAD FOOT RTL RAL AND (700 TAD FOT TAD (2121 CALL (PUSHX2 EXIT BFOO FOOT, 0 ISZN, CDF 10 TAD ERKNT SZA CALL OTOD SNA TAD (5760 DCA I (ERTXT /INSERT NO. OF ERRORS IN MSG /COMBINE ERRORS WITH SYMBOLS TEXT STA TAD ERKNT SZA CLA JMP .+3 TAD Z101 /CORRECT ENGLISH GRAMMAR DCA I (S /BLANK OUT "S" CLL TAD LOCCTR TAD PROGL DCA LOCCTR RAL TAD PROGH /ADD CARRY INTO HIGH ORDER TAD HILOC DCA HILOC JMP I (PREEND FOT, ABORT, 0 TAD (1313 /"**" CALL (PUSHX2 TAD ERKNT SZA CLA JMP OK CDF 0 CLA IAC CALL (SFINI OK, ISZ ERKNT EXIT ABORT PAGE LPTFG, 0 /SET TO 0400 IF INIT (N,LPT) WAS FOUND PREEND, TAD BYTORG /GET HERE WITH CDF 10 CLL RAR DCA BYTORG TAD HIORG RAR DCA HIORG CIF 10 CALL (LPTSPL TAD BYTORG DCA BYTX RAL TAD HIORG / DATA FIELD STILL = 10 CLL RTL CALL OTOD DCA I (JOBCOR+1 TAD BYTX CALL (DECI DCA I (JBCOR TAD LOD DCA I (JBCOR+1 STA /DATA FIELD = 10 FOR A WHILE TAD NSKNT CALL (DECI DCA I (STLENT+1 TAD LOD DCA I (STLENT+2 TAD LPTFG /PREDETERMINE CARRY CLL TAD LOCCTR /LOW ORDER PROGRAM SIZE CLA RAL /DISCARD SUM, RETAIN CARRY TAD HILOC CLL RTL CALL OTOD DCA I (PRGCOR+1 TAD LPTFG TAD LOCCTR CALL (DECI DCA I (PRGLCS TAD LOD DCA I (PRGLCS+1 CDF 00 TAD LSTSW SZA CLA JMP EPI2 CALL ZPCRLF CALL ZPRINT STLENT-1 TAD I (OPTMZ3 SNA CLA / /O? JMP EPI2 CALL ZPCRLF CALL ZPRINT OPTMSG-1 EPI2, TAD ERKNT SZA CLA JMP LEAVE TAD (SFLD+1 CALL RDOIO -1 214 CLA IAC CALL (SFINI DCA X2 TAD I (TOPFLD JMP I (EPI1 CP-1 TYPTBL, AL-1 DE-1 LA-1 UN-1 RE-1 K3400, 3400 KM3400, -3400 K377, 377 MD-1 /MUST BE AT TYPTBL+10 LEAVE, TAD TTOCHR DCA LP8PC DCA LINKNT CDF 10 TAD I (ERTXT DCA I (XLVTXT CDF 00 DCA I CTRLO CALL ZPRINT XLVTXT-2 JMP I L7600 MOVEX1, 0 /MOVE PROLOG STUFF INTO RECORD MOVEX, TAD (201 DCA X1 MOVEXL, TAD I MOVEX1 /GET ADDRESS OF DATA ISZ MOVEX1 SNA /ZERO ENDS LIST JMP I MOVEX1 DCA MOVEX /USED AS TEMPORARY TAD I MOVEX /PICK UP DATA DCA I X1 JMP MOVEXL NULCHR, 0 /CALL TO CHECK AC FOR NULL CHAR SNA /MAYBE BOTH NULL? TAD Z101 /EASY TO FIX DCA MOVEX1 TAD MOVEX1 AND L77 /HOW ABOUT LAST CHAR SNA CLA IAC TAD MOVEX1 /CONVERT TO SPACE IF NECESSARY EXIT NULCHR / PAGE EPI1, RTR RAR AND L7 CMA /-NK-1 TAD HILOC DCA X3 TAD LOCCTR AND L7400 TAD (400 TAD I (LPTFG /ADD 400 WORDS IF LPT IS TO BE USED DCA X4 SZL JMP DONJOB TAD BYTX /GET PROG SIZE WITH BUFFERS AND L7400 TAD (400 /ROUND UP TO NEXT BOUNDARY DCA BYTX RAL /WITH CARRY TAD HIORG DCA COPY CLA CLL CMA CML /ALLOW FOR EXACT FIT NXTJOB, TAD BYTX TAD X4 DCA X4 RAL TAD COPY TAD X3 DCA X3 SZL JMP DONJOB ISZ X2 JMP NXTJOB DONJOB, TAD X2 CALL OTOD CDF 10 DCA I (NTERM CDF 00 TAD LSTSW SNA CLA /IF NO LIST THEN SEND CORE SIZE TO TTY JMP NOTT TAD TTOCHR DCA LP8PC DCA LINKNT /PREVENT HEADINGS ON TTY NOTT, CALL ZPCRLF CALL ZPCRLF CALL ZPRINT PRGCOR-1 CALL ZPCRLF CALL ZPRINT JOBCOR-1 CALL ZPCRLF CALL ZPRINT NJOBS-1 STA CALL ZPCRLF /FORM FEED EPI3, TAD NSYMS IAC CLL RAL TAD BOUTLN DCA BOUTLN SZL ISZ HIBOUT TAD BUNIT SNA CLA /COPY TEMP FILE? JMP BACKIN /NO TAD HIBOUT CMA HBCNT, DCA . /SUAVELY USES A TEMPORARY SKP JMS COPY /COPY A HUNK ISZ HBCNT /KEEP GOING? JMP .-2 /YES TAD BOUTLN /GET LOW ORDER OUTPUT WORD COUNT AND L7400 SZA /WATCH OUT IF ITS ZERO JMS COPY /IF NOT, COPY A TRUNCATED HUNK BACKIN, CALL SYSHND /GO BACK AND INSERT 0200 /READ OUTPUT 0200 /INTO 200 4 /THE HUNK CALL (BINLEN CALL (MOVEX1 /MOVE DATA INTO RECORD AREA PROCNM /# I/O BUFFERS PER JOB PROGH /PC START PROGL /IS ALSO END OF LITERALS HIBOUT /LENGTH OF BINARY FILE NSYMS /# SYMBOLS VERSN /COMPILER VERSION NUMBER FOR MULTI BINXT /BINARY FILENAME EXTENSION FOR 'SAVE' HILOC /TOTAL PROGRAM LENGTH LOCCTR /LOW ORDER LENGTH HIORG /JOB AREA SIZE BYTORG /LOW ORDER LPTFG /LPT USE FLAG 0 /ZERO TERMINATES LIST CALL SYSHND /REWRITE 4200 200 4 /LONG LIVE THE HUNK! JMP I GOPTR COPY, 0 /TAPE COPY ROUTINE CLL CML RAR TAD Z10 /SET UP A WRITE ONTO THE SYSTEM TAPE DCA IOCTW2 TAD IOCTW2 AND (3670 /KEEP THE COUNT AND THE FIELD TAD BUNIT /TURN IT INTO A READ FROM BUNIT DCA IOCTW1 CALL SYSHND IOCTW1, 0 0 4 /BINARY WORK AREA ISZ .-1 /BUMP IT CALL SYSHND IOCTW2, 0 0 4 /BINARY WORK AREA ON SYS ISZ .-1 /BUMP THAT TOO JMP I COPY /RETURN ENDOVL=.&7600+200 PAGE / THIS STUFF STAYS IN FIELD 1 / XX0=10 /FIELD 1 XR REGISTER XLOOK, 0 /LOOKUP VAR IN SYMBOL TABLE DCA XSYMNUM /ZERO SYMBOL # (MIGHT HAVE AC NON-ZERO) TAD I (NAME1 /COMPLEMENT DCA NAME1C /THE TAD I (NAME2 DCA NAME2C TAD I (NAME3 /WORD DCA NAME3C /NAME. TAD XSYMNUM CLL RAL TAD XSYMNUM CLL RAL TAD XSYMNUM /MULT SYMNUM BY 7 TAD (-1 DCA XX0 /SET PTR TO TABLE-1 CDF SFLD /SET FIELD SYMLUP, TAD I XX0 /IS THIS END OF TABLE? SNA JMP ENDTAB /YES, MAKE NEW ENTRY CIA TAD NAME1C /IS THIS THE ONE? SZA CLA JMP BUMP6 /NO TAD I XX0 CIA TAD NAME2C /SO FAR SO GOOD SZA CLA JMP BUMP5 /NO TAD I XX0 CIA TAD NAME3C /ALMOST... SZA CLA JMP BUMP4 /AW NUTS! TAD XX0 /YES, THIS IT IAC DCA XOPRAND /SET THE POINTER XLOKND, CIF CDF 00 TAD XSYMNUM DCA I (SYMNUM TAD XX0 DCA I (X0 TAD XOPRAND DCA I (OPRAND CDF SFLD /CALLING ROUTINES EXPECT THIS JMP I XLOOK BUMP6, IAC /SKIP BUMP5, IAC /THE REST BUMP4, IAC /OF TAD (3 /THIS TAD XX0 /ENTRY DCA XX0 /AND THEN ISZ XSYMNUM /BUMP SYMBOL NUMBER AND JMP SYMLUP /LOOP ENDTAB, CMA /END OF TABLE TAD XX0 DCA XX0 TAD NAME1C DCA I XX0 /SO MAKE TAD NAME2C DCA I XX0 /A NEW TAD NAME3C DCA I XX0 /ENTRY. DCA I XX0 /WITH TYPE 0 TAD XX0 DCA XOPRAND /(SAVE THE POINTER) DCA I XX0 /AND 0 DIMENSION DCA I XX0 /AND 0 ELEMENT SIZE DCA I XX0 /AND 0 ORIGIN TAD XX0 DCA XSYMEND /SAVE NEW END OF TABLE DCA I XX0 /ZERO E.O.T. CDF 00 TAD XSYMEND DCA I (SYMEND ISZ I (NSYMS /BUMP # OF SYMBOLS TAD I (NSYMS TAD STS /S.T. FULL SMA CLA ISZ XLOOK JMP XLOKND NAME1C, 0 NAME2C, 0 NAME3C, 0 XSYMNUM, 0 XOPRAND, 0 XSYMEND, 0 STS, -555 /- S.T. SIZE (IN ENTRIES) LPTTST, 0 DCA I (WROPZ /STORE DEVICE # TAD I (WROPZ /AND WAS IT THE LPT? TAD (-105 SNA CLA ISZ LPTUSE /PROBABLY NEVER SEE 4096 INIT'S TAD I (WROPZ CLL RAL SPA SNA SNL CLA ISZ LPTTST CIF 00 JMP I LPTTST LPTUSE, 0 LPTSPL, 0 /HERE BECAUSE THERE'S NO ROOM LEFT CDF CIF 00 TAD LPTUSE SZA CLA TAD (400 /SIZE OF LPT JOB AND USE INDICATOR DCA I (LPTFG /STORE USAGE INDICATOR IN FIELD ZERO TAD I (PROCNM RTR RTR RAR CDF 10 EXIT LPTSPL / PAGE *3400 PRCOVO=. /USED TO RELOCATED PROC OVERLAY NOPUNCH *3400 ENPUNCH PRCOVF=. /USED FOR ORIGIN AND LENGTH GOTREL, JMS I ZNXTCHR /LOOK FOR ANOTHER . G537, 537 TAD (-17 SZA CLA JMP ER25 JMS I ZEXPR /NOW GET EXPR CALL ZRPAREN /LOOK FOR ) TAD IFCCOD CLL CMA RTL /MULTIPLY C.C. BY 20 RTL TAD G537 /ADD OFFSET TO MAKE MAGIC SKIP TAD TYPE CALL ZCODE TAD CHRPTR DCA SAVE ISZ I (IFLG /DON'T WANT COMPUTED GOTOS TAD (CML2-CMLIST /FAKE OUT CMLIST JMP CMCHK FORMS, JMS CKLET 64 /CHECK FOR "S" CALL ZLPAREN /GET LEFT PAREN CALL (IARG CALL ZCOMA CALL ZEXPR /GET CHANNEL CALL ZRPAREN /GET RIGHT PAREN TAD (FORMOP /YES JMP CMNCOD XMIT, CALL ZLPAREN /GET LEFT PAREN CALL (XARG TAD (XMITOP /OUTPUT XMIT CODE LOKXM, JMS I ZCODE CALL ZNXTCHR /LOOK FOR "," JMP I (ER56 /OH WELL TAD ZM15 /IS IT? SNA JMP GETEOF /IT'S A COMMA TAD Z3 SZA CLA /IS IT A ")"? JMP I (ER56 /NO CALL ZBACKUP JMP GOTEOF GETEOF, CALL (GETLBL /LOOK FOR LABEL TAD SYMNUM /SET UP BRANCH TO IT GOTEOF, TAD (BRANCH /OUTPUT BRANCH CODE JMP I (CCLOSE RETURN, JMS RNSUB STA /*** RETURN MUST BE STOP-1! *** STOP, TAD (STOPOP JMP CMNCOD IFCCOD, RNSUB, 0 /CAN BE CALLED WITH AC .NE. 0 TAD NAME3 TAD (-6357 SZA CLA JMP I ZNMLS CALL ZSKIP -2 EXIT RNSUB KALL, JMS I (GETLBL /GET THE LABEL / TAD (BRASUB /AND THE OPCODE SENDIT, STL RAR TAD SYMNUM CMNCOD, JMS I ZCODE /AND SEND IT OUT JMP I ZNXTSTM TRAP, STA JMS RNSUB JMS CKLET 63 CALL (GETLBL STA CLL RAL DCA I (ONERCT STL RAR /4000 HERE, 6000 LATER JMP SENDIT CKLET, 0 /ROUTINE TO VERIFY A CHARACTER CALL ZNXTCHR JMP I ZNMLS CIA TAD I CKLET SZA CLA JMP I ZNMLS JMP I CKLET COMAND, TAD SAVE DCA CHRPTR CMCHK, TAD (CMLIST-2 /(NEE CMCHTKA) COMMAND LIST POINTER DCA X0 JMS I ZNAME /GET THE COMMAND JMP I (IFTST INK1, ISZ X0 CDF 10 TAD I X0 /CHECK AGAINST LIST SNA JMP I ZNMLS /NO KNOWN STMT CIA TAD NAME1 SNA CLA TAD NAME2 CIA TAD I X0 SZA CLA JMP INK1 /NOT THIS COM. TAD I X0 CDF 00 DCA EXTMP1 /GET COMMAND HANDLER ADR TAD SAVE DCA CHRPTR CALL ZSKIP -4 JMP I EXTMP1 /GO THERE ER25, CALL ZERROR /RELATIONAL IS N.G. ERR25 PAGE IARG, 0 TAD (2 /AC MIGHT BE NON-ZERO DCA TYPE /SET TYPE TO DEC (ALPHA) IAC DCA RIGHT CALL ZEXPR EXIT IARG XARG, 0 /PARSE EXPR,BLKNAME JMS IARG CALL ZCOMA TAD Z10 DCA TYPE CALL ZEXPR DCA TYPE EXIT XARG /RETURN WRYTE, JMS I (CKLET 46 IAC WREAD, TAD (READOP /GET READ OR WRITE OP DCA WROPZ CALL ZLPAREN /GET LEFT PAREN JMS XARG /GET ARGS 1 AND 2 CALL ZCOMA /GET COMMA CALL ZEXPR /GET ARG 3 TAD WROPZ CCLOSE, CALL ZCODE /OUTPUT CALL ZRPAREN /GET RIGHT PAREN JMP I ZNXTSTM /CONTINUE WITH NEXT STMNT LPAREN, 0 /GET LEFT PARENTHESIS CALL ZNXTCHR JMP ER66 /BAD IF NOTHING TAD ZM11 SNA CLA /IS IT "("? EXIT LPAREN /YES, RETURN ER66, CALL ZERROR /NO ERR66 /MISSING LEFT PAREN RPAREN, 0 /GET RIGHT PARENTHESIS CALL ZNXTCHR /NOTHING IS BAD JMP ER67 TAD ZM12 SNA CLA /IS IT ")"? EXIT RPAREN /YES, RETURN ER67, CALL ZERROR /NO, ERROR ERR67 /MISSING RIGHT PAREN NOTRACE,TAD (6357-4244 CALL (RNSUB TAD Z10 /NEW IFNZRO HERENT-HERETR-10 TRACE, TAD (HERETR CALL ZCODE JMS I (CKLET 46 JMP I ZNXTSTM WROPZ, 0 INIT, CALL ZLPAREN /GET LEFT PAREN JMS IARG FORV, CALL ZCOMA /LOOK FOR COMMA CALL ZNAME /GET DEVICE NAME JMP ER64 /NOTHING THERE. TAD (DEVTBL-1 DCA NAME2 /SET UP FOR TBL SRCH DEVLUP, ISZ NAME2 /PASS OVER DEVICE CODE CDF 10 TAD I NAME2 /GET TABLE ENTRY ISZ NAME2 SNA /END OF TABLE? JMP ER64 /YES, DEVICE NOT FOUND TAD NAME1 AND Z7700 /HIGH - ORDER CHAR ONLY SZA CLA /IS THIS IT? JMP DEVLUP /NO, KEEP LOOKING TAD I NAME2 /YES, GET CODE # CDF 0 SNA / WAS IT F OR V? JMP FORV /YES - TRY AGAIN CIF 10 CALL (LPTTST JMP INIEND /NO CALL ZCOMA /LOOK FOR COMMA STA /WANT ALPHA JMS IARG CALL (UNITRY INIEND, TAD (INITOP CALL ZCODE /OUTPUT INIT OP TAD WROPZ JMP CCLOSE ER64, CALL ZERROR /MISSING OR BAD DEVICE ERR64 DISPLAY,TAD (6357-5542 CALL (RNSUB JMS I (CKLET 72 CALL ZLPAREN /CHECK FOR "(" JMS IARG CALL ZCOMA /GET DEC XCOORD JMS IARG /GET DEC YCOORD CALL ZCOMA DCA TYPE /BE UNBIASED CALL ZEXPR /GET ARG3 STA TAD TYPE CLL RAR SZA CLA JMP I (ER26 TAD TYPE TAD (DISPOP-1 JMP CCLOSE FINIS, CALL ZLPAREN /GET LEFT PAREN JMS I ZBACKUP /PUT BACK ( JMS IARG TAD (FINIOP /OUTPUT FINI OPCODE JMP I (CMNCOD PAGE GOTO, JMS I ZNXTCHR /LOOK FOR ( JMP LBLERR /NOTHING LEFT MEANS ERROR TAD ZM11 SNA CLA JMP COMPGT /COMPUTED GO TO JMS I ZBACKUP JMS GETLBL /GO GET LABEL TAD (BRANCH TAD SYMNUM JMS I ZCODE /OUTPUT BRANCH JMP I ZNXTSTM /GO GET NEXT STATEMENT GETLBL, 0 JMS I ZNAME /PICK UP LABEL NAME JMP LBLERR /MISSING LABLE TAD I (PROCSYM /SEARCH FOR PROC SYMBOL JMS I ZLOOKUP /S.T. LOOKUP TAD I OPRAND /TEST TYPE CLL RAL SZA JMP NNLABL /THIS ISN'T FIRST REF. CLL CML RAR /TYPE SET TO 4000 RAR DCA I OPRAND /MEANS REFNCD, NOT DEFINED TAD OPRAND TAD Z3 DCA OPRAND TAD LINENO DCA I OPRAND GLRETN, CDF 0 JMP I GETLBL NNLABL, AND (4010 /IF DEFINED, MUST BE SZA CLA /2000, OR 4 JMP GLRETN CALL ZERROR /WRONG TYPE (NOT LABEL) ERR24 LBLERR, ISZ CHRPTR JMS I ZERROR ERR13 COMPGT, TAD X4 /SAVE STACK POSITION DCA STKSAV TAD IFLG SZA CLA JMP I ZNMLS /NOT ALLOWED IN IF DCA GTTMP CGTLUP, JMS GETLBL /GET A LABEL TAD SYMNUM CALL ZPUSH ISZ GTTMP /BUMP COUNT JMS I ZNXTCHR /LOOK AT DELIMITER JMP I (ER67 /BAD COMPUTED GO TO TAD ZM15 /IS IT A COMMA? SNA JMP CGTLUP /YES, GET NEXT LABEL TAD Z3 /IS IT A ) ? SZA CLA JMP I (ER67 /NO, ERROR CALL ZCOMA CALL (IARG TAD (BCMPTD /NOW A COMPUTED GO TO OP. JMS I ZCODE TAD GTTMP /NOW THE COUNT JMS I ZCODE TAD GTTMP CIA DCA GTTMP TAD STKSAV DCA X4 TAD I X4 TAD (BRANCH JMS I ZCODE /OUTPUT THIS LABEL ISZ GTTMP JMP .-4 TAD STKSAV DCA X4 JMP I ZNXTSTM /GO GET NEXT STMT IFLG, 0 ACCEPT, TAD (6357-6165 CALL (RNSUB CALL ZLPAREN DCA RIGHT /WANT LEFT SIDE STL RTL DCA TYPE /WANT DEC CALL ZEXPR CALL ZCOMA CLA IAC DCA TYPE /WANT ALPHA CALL ZEXPR TAD (ACPTOP JMP I (CCLOSE STKSAV, /SAVE PDL PTR UNITRY, 0 CALL ZNXTCHR JMP I (ER67 TAD ZM15 SZA CLA /IS IT ","? JMP NOUN /NO STL RTL DCA TYPE /YES CALL ZEXPR /COMPILE DECIMAL EXPRESSION TAD (TRYOP CALL ZCODE EXIT UNITRY SUBB, 0 TAD ZM12 CALL ZCODE STL CLA RTL DCA TYPE /SET TYPE TO 2 EXIT SUBB PREC, 10 /* 05 /+ GTTMP, 0 /, 05 /- 20 /. 10 // 24 /# (UNARY) 30 /# (BINARY) NOUN, CALL ZBACKUP EXIT UNITRY PAGE GOPR8R, JMS I ZNXTCHR /LOOK FOR OPERATOR JMP NDEXPR /END OF STMT TAD M4 SNA /IS IT #? TAD (16 /YES - CHANGE TO 1 TAD (4 DCA NEWOP /SAVE CHAR TAD NEWOP TAD (-13 SNA JMP OPR8R /* IS LEGAL CLL RAR AND M4 SNA CLA /CHECK FOR +,-,/,# SNL /IN ONE SWELL FOOP JMP NOPR8R OPR8R, TAD RIGHT /CHECK SWITCH SNA CLA JMP I (BADLFT /OPERATOR ILLEGAL ON LEFT TAD NEWOP TAD (PREC-13 DCA PNEWOP /GET NEW PRECEDENCE CMPPRC, JMS I ZPOP /GET OLD OPERATOR SNA JMP PSHNEW+1 /IS ZERO, JUST PUSH NEW DCA OLDOP TAD OLDOP TAD (PREC-13 DCA POLDOP /GET OLD PREC TAD I PNEWOP CIA TAD I POLDOP /COMPARE PREC SPA CLA JMP PSHNEW /IF P(OLD) < P(NEW), PUSH NEW TAD OLDOP /IF P(OLD) >= P(NEW), THEN ... CALL (SUBB JMP CMPPRC /AND DO NEW COMPARE PSHNEW, TAD OLDOP /REPLACE OLD JMS I ZPUSH TAD NEWOP /PUSH NEW JMS I ZPUSH JMP I (GTOPND /GET AN OPERAND NOPR8R, JMS I ZBACKUP /REPLACE ONE CHARACTER NDEXPR, JMS I ZPOP /OUTPUT ALL SNA /REMAINING JMP EXPRET CALL (SUBB JMP NDEXPR EXPRET, CALL ZPOP DCA NEWOP JMP I NEWOP NEWOP, 0 OLDOP, 0 PNEWOP, 0 POLDOP, 0 /***IF OPERATOR IS #, SET TYPE TO 2 (DEC) LOCK, CALL ZLPAREN CALL (IARG /PICK UP CHANNEL # TAD CHRPTR DCA SAVE JMS TCOMA /MAY BE MORE ARGS CALL ZNAME JMP LOKLIT /NOT A NAME, TRY LITERAL CALL ZLOOKUP /USE TYPE TO FIGURE OUT JMP LOKTYP LOKLIT, JMS I (LITERL JMP LOKERR /NEITHER LITERAL NOR VARIABLE? CDF SFLD LOKTYP, TAD I OPRAND CDF 00 RTR SNL CLA JMP TRYL /MUST BE LABEL TAD (PUSHOP TAD SYMNUM /MAYBE SHOULD CHECK FOR DECIMAL CALL ZCODE /THIS IS RECORD NUMBER TAD (LOKRC JMP I (LOKXM /OUTPUT RECORD LOCK OPERATOR TRYL, TAD SAVE /MAYBE A LABEL? DCA CHRPTR LOKEND, TAD (LOKOP /LET XMIT WORRY ABOUT IT JMP I (LOKXM TCOMA, 0 CALL ZNXTCHR /LOOK FOR POSSIBLE COMA JMP TCOMER TAD ZM15 SNA CLA JMP I TCOMA /FOUND A COMA CALL ZBACKUP /NO COMA, NO MORE ARGS JMP LOKEND UNLOCK, TAD (6357-4454 /SHARE SOME CODE CALL (RNSUB CALL ZLPAREN CALL (IARG /BETTER BE CHANNEL # CALL ZNXTCHR JMP I (ER56 /BETTER BE MORE STATEMENT TAD ZM15 /COMMA MEANS ARG TO FOLLOW SZA CLA /???? JMP NOMORU CALL (IARG /RECORD TO UNLOCK TAD (UNLREC JMP I (CCLOSE /SHARE SOME CODE NOMORU, CALL ZBACKUP TAD (UNLOK JMP I (CCLOSE LOKERR, CALL ZERROR ERR2 TCOMER, CALL ZERROR ERR67 PRCOVL=.&7600+200 /DETERMINES LENGTH OF PROC OVERLAY PAGE / VARIOUS FIELD ONE GOODIES PRCDIV, 6163 6044 4645 6663 4601 CMLIST, 4657;4501;EENDY 5247;0101;IF 5257;5265;INIT 7156;5265;XMIT 4752;5752;FINIS 6465;4263;STAR 4760;6356;FORMS 6346;4245;WREAD 7063;5265;WRYTE 4552;6461;DISPLAY 4244;4446;ACCEPT 5257;4463;INKR 5560;4454;LOCK 6657;5560;UNLOCK CML2, 5060;6560;GOTO 6346;6566;RETURN 6465;6061;STOP 4442;5555;KALL 6563;4244;TRACE 5760;6563;NOTRACE 6057;4663;TRAP 6346;5546;RELEAS 0 /ERROR DETECTION SECTION: IFNZRO BLOCK-3400 <_ERROR - SEE "BLKJMX"> IFNZRO PROCST-2000 <_ERROR - SEE "PATCH3"> / SOME TEXT FOR THE END OVERLAY PRGCOR, PRGCOR-JOBCOR+1 /00 K CORE + 0000 LOCS REQUIRED FOR PROGRAM. 2121 0154 0144 6063 4601 1401 PRGLCS, 2121 2121 0155 6044 6401 6346 6266 5263 4645 0147 6063 0161 6360 5063 4256 1700 JOBCOR, JOBCOR-NJOBS+1 /00 K CORE + 0000 LOCS REQUIRED PER TERMINAL 0121 0154 0144 6063 4601 1401 JBCOR, 0 0 0155 6044 6401 6346 6266 5263 4645 0161 4663 0165 4663 5652 5742 5517 NJOBS, NJOBS-OPTMSG+1 /ENOUGH ROOM FOR 00 TERMINALS. 4657 6066 5051 0163 6060 5601 4760 6301 NTERM, 2121 0165 4663 5652 5742 5564 1700 OPTMSG, -10 /COMPILED WITH /O 4460;5661;5255 4645;0170;5265 5101;2060 TYPE3, -3;SYMTAB;0;0 STLENT, -24 /XXX SYMBOLS 101;101;164 7256;4360;5564 1701 0101 0101 0101 ERTXT, 101;146;6363;6063 S, 6401;4546 6546;4465;4645 1700 MD, 6346;4546;4700 AL, 4255;6151;4201 DE, 4546;4456;4255 LA, 5542;4346;5501 UN, 6657;4546;4701 RE, 6346;4460;6345 CP, 4444;6100 RELLST, -5065 /GT - SZL SNA CLA -5546 /LE - SNL SZA CLA -5746 /NE - SNA CLA -4662 /EQ - SZA CLA -5046 /GE - SZL CLA -5565 /LT - SNL CLA -5 /WORD COUNT FOR XLVTXT XLVTXT, 5760 /NO ERRORS 0146 6363 6063 6400 *6400 MESOVO=. NOPUNCH *6400 ENPUNCH MESOVF=. /ERROR MESSAGES MUST BE IN UPPER HALF OF FIELD / SEE CDOIOC FOR WHY ERR2, ERR2-ERR3 /MISSING OPERAND 5652;6464;5257 5001;6061;4663 4257;4500 ERR3, ERR3-ERR4 /SUBSCRIPT ERROR 6466;4364;4463 5261;6501;4663 6360;6300 ERR4, ERR4-ERR5 /EXPRESSION NOT ALLOWED 4671;6163;4664 6452;6057;157 6065;142;5555 6070;4645;0 ERR5, ERR5-ERR6 /UNDEFINED NAME 6657;4546;4752 5746;4501;5742 5646;0 ERR6, ERR6-ERR10 /WRONG DATA TYPE 7063;6057;5001 4542;6542;165 7261;4600 ERR10, ERR10-ERR11 /MISSING QUOTE 5652;6464;5257 5001;6266;6065 4600 ERR11, ERR11-ERR12 /ILLEGAL STMNT 5255;5546;5042 5501;6465;5657 6500 ERR12, ERR12-ERR13 /NAME PREVIOUSLY DEFINED 5742;5646;161 6346;6752;6066 6455;7201;4546 4752;5746;4500 ERR13, ERR13-ERR14 /EXPECTED LABEL IS MISSING 4671;6146;4465 4645;155;4243 4655;152;6401 5652;6464;5257 5000 ERR14, ERR14-ERR15 /EXTRA CHARS ARE AT STMNT END 4671;6563;4201 4451;4263;6401 4265;164;6556 5765;146;5745 0 ERR15, ERR15-ERR16 /FIELD TOO LARGE OR 0 4752;4655;4501 6560;6001;5542 6350;4601;6063 121;0 ERR16, ERR16-ERR17 /ILLEGAL OPERATOR 5255;5546;5042 5501;6061;4663 4265;6063;0 ERR17, ERR17-ERR20 /SUBSCRIPT NOT DECIMAL 6466;4364;4463 5261;6501;5760 6501;4546;4452 5642;5500 ERR20, ERR20-ERR22 /RECORD TOO BIG 6346;4460;6345 165;6060;143 5250;0 ERR22, ERR22-ERR23 /STMNT TOO COMPLEX 6465;5657;6501 6560;6001;4460 5661;5546;7100 ERR23, ERR23-ERR24 /TOO MANY SYMBOLS! 6560;6001;5642 5772;164;7256 4360;5564;200 ERR24, ERR24-ERR25 /NOT LABEL 5760;6501;5542 4346;5500 ERR25, ERR25-ERR26 /BAD RELATIONAL 4342;4501;6346 5542;6552;6057 4255;0 ERR26, ERR26-ERR43 /LABEL NOT ALLOWED 5542;4346;5501 5760;6501;4255 5560;7046;4500 ERR43, ERR43-ERR45 /BAD DECIMAL VALUE 4342;4501;4546 4452;5642;5501 6742;5566;4600 ERR45, ERR45-ERR46 /MISSING OR BAD OPTION 5652;6464;5257 5001;6063;143 4245;160;6165 5260;5700 ERR46, ERR46-ERR47 /DATA INITIALIZATION MISSING 4542;6542;152 5752;6552;4255 5273;4265;5260 5701;5652;6464 5257;5000 ERR47, ERR47-ERR50 /BAD ALPHA VALUE 4342;4501;4255 6151;4201;6742 5566;4600 ERR50, ERR50-ERR51 /TOO MANY ITEMS 6560;6001;5642 5772;152;6546 5664;0 ERR51, ERR51-ERR52 /INITIAL VALUE WRONG SIZE 5257;5265;5242 5501;6742;5566 4601;7063;6057 5001;6452;7346 0 ERR52, ERR52-ERR56 /NOT A OR D 5760;6501;4201 6063;145;0 ERR56, ERR56-ERR61 /COMMA MISSING 4460;5656;4201 5652;6464;5257 5000 ERR61, ERR61-ERR63 /PROGRAM TOO BIG 6163;6050;6342 5601;6560;6001 4352;5000 ERR63, ERR63-ERR64 /TOO MUCH DATA 6560;6001;5666 4451;145;4265 4200 ERR64, ERR64-ERR65 /MISSING OR BAD DEVICE 5652;6464;5257 5001;6063;143 4245;145;4667 5244;4600 ERR65, ERR65-ERR66 /MISSING RELATIONAL 5652;6464;5257 5001;6346;5542 6552;6057;4255 0 ERR66, ERR66-ERR67 /MISSING OPEN PAREN 5652;6464;5257 5001;6061;4657 161;4263;4657 0 ERR67, ERR67-ERR70 /MISSING CLOSE PAREN 5652;6464;5257 5001;4455;6064 4601;6142;6346 5700 ERR70, ERR70-ERR71 /BAD PROC # 4342;4501;6163 6044;104;0 ERR71, ERR71-ERR100 /CCP ERROR 4444;6101;4663 6360;6300 ERR100, ERR100-DEVTBL /TOO MANY LITERALS 6560;6001;5642 5772;0155;5265 4663;4255;6400 / ! INDICATES COMPILER ABORT. /DEVICE TABLE USED BY INIT DEVTBL, -5200;2000 /IN -6000;4000 /OUT -6600;6000 /UPDATE -5400;100 /KBD -6500;101 /TTY -4400;102 /CDR -6100;103 /PUNCH -6300;104 /RDR -5500;105 /LPT -4700;0 /F -6700;0 /V -6400;1777 /SYS 0 /TABLE END HEADING,HEADING-PAGNUM 5666;5565;5216;4552 4360;5501;101 167 122;1722;2601 /*** " 1.15 " *** 0101 DAY, 101;166;5745 1630;4645;101 WKDAY, 0101;0101 101;101 CMPLTN, 4460 5661;5255;4265 5260;5701 LSTNG, 5552 6465;5257;5001 101;101 161;4250;4601 PAGNUM, 2121 MONTH1=DAY+1 MONTH2=DAY+2 YEAR=DAY+4 HEAD2, 6465;6063;4250 4601;5642;6101 SUBHDG, SUBHDG-EOMESGS 101;101;101 101;101;4542 6542;145;5267 5264;5260;5701 101;0 ZBLOCK 33 /PADDING FOR THE USER HEADING EOMESGS=. MESOVL=.&7600+200 STITLE, -31 401;101;101 101;5742;5646 101;101;101 6572;6146;101 101;101;145 5256;101;101 6452;7346;101 101;6063;5250 5257 NOCORE, -10 /NO ROOM IN CORE 5760;0163;6060 5601;5257;0144 6063;4600 //////////////////////////// / / / END OF MCOMP / / / //////////////////////////// $