14 START ;MAIN LOOP FOR PASS 2 24 ;... SBTTL ;MAIN LOOP FOR PASS 2 34 44 ;... PASS2, I/O ;OPEN FILES 54 ;... IF NO:END2 ;L OPTION? 64 ;... LOOP2, DISK ;READ A PASS 1 RECORD 74 ;... IF YES:DOHOF ;HOF RECORD? 84 ;... I/O ;PRINT THE RECORD 94 ;... GOTO LOOP2 104 ;... DOHOF, I/O ;OUTPUT A FORM FEED 114 ;... GOTO LOOP2 124 ;... END2, I/O ;CLOSE FILES 134 ;... STOP ;END OF PGM 144 PASS2, INIT(1,I,'$PASS1',1) 154 INIT(2,LPT) 164 IF(OPTL.NE.'L')GO TO END2 ;SKIP PASS 2 IF LISTING NOT SELECTED 174 LOOP2, XMIT(1,OUTREC,END2) ;READ A PASS 1 RECORD 184 IF(OUTDTA.EQ.'$HOF')GO TO DOHOF ;IS THIS A NEW PAGE? 194 RSIZE=(4096-64*#TRICK2(3)-#TRICK2(4))*2+2 204 XMIT(2,OUTREC(1,RSIZE)) ;PRINT THE LINE 214 GO TO LOOP2 224 DOHOF, FORMS(2,0) ;GO TO A NEW PAGE 234 GO TO LOOP2 244 END2, FINI(1) 254 FINI(2) 264 STOP 274 START ;SUBROUTINES 284 ;... SBTTL ;SUBROUTINES 294 304 ;... START ;HOF ROUTINE 314 ;... HOF, IF YES:HOFEXT ;SBTTL COMMAND? 324 ;... IF YES:HOFEXT ;TITLE COMMAND? 334 ;... IF YES:HOFEXT ;GOTO COMMAND? 344 ;... IF YES:HOFEXT ;STOP COMMAND? 354 ;... IF YES:HOFYES ;NEED OFF PAGE POINTER? 364 ;... CALL HOF1 ;START A NEW PAGE 374 ;... GOTO HOFEXT 384 ;... HOFYES, DISK ;OUTPUT OFF PAGE POINTER 394 ;... CALL HOF1 ;START A NEW PAGE 404 ;... DISK ;OUTPUT POINTER TO FIRST BLOCK 414 ;... PROC ;FIX LINE COUNT & LBLFIX 424 ;... HOFEXT, STOP ;RETURN 434 HOF, IF(COMAND.EQ.'SBTTL')GO TO HOFEXT 444 IF(COMAND.EQ.'TITLE')GO TO HOFEXT 454 IF(COMAND.EQ.'GOTO')GO TO HOFEXT 464 IF(COMAND.EQ.'STOP')GO TO HOFEXT 474 IF(LBLFIX.NE.SPACES)GO TO HOFYES 484 CALL HOF1 494 GO TO HOFEXT 504 HOFYES, DATA=LINE 514 CALL PUT 524 DATA=START1 534 CALL PUT 544 PGE=PGECTR+1 554 DATA=PAGE1 564 CALL PUT 574 DATA=START1 584 CALL PUT 594 CALL HOF1 604 DATA=START1 614 CALL PUT 624 DATA=PAGE1 634 CALL PUT 644 DATA=START1 654 CALL PUT 664 LNECTR=LNECTR+3 674 LBLFIX='!' 684 HOFEXT, RETURN 694 704 ;... START ;HOF1 ROUTINE 714 ;... HOF1, DISK ;OUTPUT NEW PAGE INDICATOR 724 ;... PROC ;INCREMENT PAGE NUMBER 734 ;... DISK ;OUTPUT TITLE 744 ;... DISK ;OUTPUT SUBTITLE 754 ;... DISK ;OUTPUT A BLANK RECORD 764 ;... PROC ;FIX LINE COUNT & LBLFIX 774 ;... STOP ;RETURN 784 HOF1, XMIT(2,"$HOF') ;OUTPUT PASS 2 HOF COMMAND 794 INCR PGECTR 804 PAGENO=PGECTR 814 XMIT(2,TTLREC) 824 XMIT(2,SUBREC) 834 XMIT(2," ') 844 LNECTR=3 854 LBLFIX= 864 RETURN 874 884 ;... START ;PRINT LABEL 894 ;... LABCHK, IF NO:NOLAB ;IS THERE A LABEL? 904 ;... DISK ;OUTPUT THE LABEL 914 ;... PROC ;FIX LINE COUNT 924 ;... DISK ;OUTPUT ENTRY TO '$KREF' FILE 934 ;... GOTO LABEXT 944 ;... NOLAB, IF YES:NOLINE ;IS THIS A NEW PAGE? 954 ;... DISK ;OUTPUT A LINE 964 ;... PROC ;FIX LINE COUNT 974 ;... NOLINE, PROC ;FIX LBLFIX 984 ;... LABEXT, STOP ;RETURN 994 LABCHK, IF(LABEL.EQ.SPACES)GO TO NOLAB 1004 LBLDTA=LBL1 1014 CALL PUT 1024 LBLDTA=LBL2 1034 CALL PUT 1044 LBLFIX='!' 1054 LBLDTA=LBL1 1064 CALL PUT 1074 LNECTR=LNECTR+3 1084 SRTLBL=LABEL 1094 DEFREF='#' 1104 XMIT(3,SRTREC) 1114 DEFREF= 1124 GO TO LABEXT 1134 NOLAB, IF(LBLFIX.EQ.SPACES)GO TO NOLINE 1144 DATA=LINE 1154 CALL PUT 1164 INCR LNECTR 1174 NOLINE, LBLFIX='!' 1184 LABEXT, RETURN 1194 1204 ;... START ;GET TEXT 1214 ;... GETTXT, PROC ;GET THE NEXT LINE 1224 ;... STOP ;RETURN 1234 GETTXT, INCR LNE 1244 TXT=LN(LNE) 1254 RETURN 1264 1274 ;... START ;CENTER TEXT 1284 ;... CENTER, PROC ;CENTER TEXT IN BUFFER 1294 ;... STOP ;RETURN 1304 CENTER, TEXT= 1314 BGNLN= 1324 IF(END.GE.LAST)GO TO LNAGN 1334 TEXT=CHR(END+1,LAST) 1344 LNAGN, LNE= 1354 LNMX= 1364 LNLP1, INCR LNE 1374 LN(LNE)= 1384 IF(XMAX(LNE).EQ.0)GO TO NOLN 1394 INCR LNMX 1404 IF(LNE.LT.5)GO TO LNLP1 1414 NOLN, LNE=BGNLN 1424 K=1 1434 LNLP2, INCR LNE 1444 MAX=XMAX(LNE) 1454 TXT= 1464 GETLP, IF(TEXT(K+MAX,K+MAX).EQ.SPACES)GO TO OK 1474 MAX=MAX-1 1484 IF(MAX.GT.1)GO TO GETLP 1494 MAX=XMAX(LNE) 1504 OK, TXT=TEXT(K,K+MAX-1) 1514 K=K+MAX+1 1524 IF(TXT.EQ.SPACES)GO TO GTTEXT 1534 MAX=XMAX(LNE) 1544 GETLP2, IF(TXT(1,1).NE.SPACES)GO TO LEFT 1554 TXT(1,MAX-1)=TXT(2,MAX) 1564 TXT(MAX,MAX)= 1574 GO TO GETLP2 1584 LEFT, IF(TXT(MAX-1,MAX).NE.SPACES)GO TO GTTEXT 1594 LN(LNE)=TXT(1,MAX-2) 1604 TXT(1,1)= 1614 TXT(2,MAX-1)=LN(LNE) 1624 MAX=MAX-1 1634 IF(MAX.GT.0)GO TO LEFT 1644 GTTEXT, LN(LNE)=TXT 1654 IF(LNE.LT.LNMX)GO TO LNLP2 1664 GO TO (CENEXT,CENEXT,LN3,LN4,LN5),LNMX 1674 GO TO CENEXT 1684 LN3, IF(LN(2).NE.SPACES)GO TO CENEXT 1694 GO TO AGN 1704 LN4, IF(LN(3).NE.SPACES)GO TO CENEXT 1714 AGN, INCR BGNLN 1724 IF(BGNLN.GE.LNMX)GO TO CENEXT 1734 GO TO LNAGN 1744 LN5, IF(LN(4).NE.SPACES)GO TO CENEXT 1754 IF(LN(1).NE.SPACES)GO TO AGN 1764 IF(LN(2).NE.SPACES)GO TO AGN 1774 CENEXT, LNE= 1784 RETURN 1794 1804 ;... START ;GET FIELD 1814 ;... GETFLD, PROC ;GET NEXT FIELD IN INPUT LINE 1824 ;... STOP ;RETURN 1834 GETFLD, TXT= 1844 END=BGN 1854 GTLP, INCR END 1864 IF(CHR(END).EQ.DELIM1)GO TO GETFND 1874 IF(CHR(END).EQ.DELIM2)GO TO GETFND 1884 IF(CHR(END).EQ.DELIM3)GO TO GETFND 1894 IF(END.LT.LAST)GO TO GTLP 1904 END=BGN 1914 GETFND, IF(END-1.LE.BGN)GO TO GTLP2 1924 TXT=CHR(BGN+1,END-1) 1934 GTLP2, IF(END.GE.LAST)GO TO GTEXT 1944 INCR END 1954 IF(CHR(END).EQ.SPACES)GO TO GTLP2 1964 IF(CHR(END).EQ.TAB)GO TO GTLP2 1974 IF(CHR(END).EQ.COMDLM)GO TO GTLP2 1984 GTEXT, END=END-1 1994 BGN=END 2004 RETURN 2014 2024 ;... START ;OUTPUT LINE 2034 ;... PUT, PROC ;GET THE RECORD SIZE 2044 ;... DISK ;OUTPUT THE RECORD 2054 ;... PROC ;CLEAR THE RECORD 2064 ;... STOP ;RETURN 2074 PUT, RSIZE=62 2084 IF(AREA3.NE.SPACES)GO TO SIZEXT 2094 RSIZE=47 2104 IF(AREA2.NE.SPACES)GO TO SIZEXT 2114 RSIZE=40 2124 IF(AREA1.NE.SPACES)GO TO SIZEXT 2134 RSIZE=1 2144 SIZEXT, RSIZE=RSIZE+2 2154 XMIT(2,OUTREC(1,RSIZE)) ;OUTPUT THE RECORD 2164 OUTDTA= 2174 RETURN