/* ALP LISTING POST-PROCESSOR - VERSION 3.0 - 11/13/80 */ 00001000 00002000 POSTALP: PROC OPTIONS(MAIN) REORDER; 00003000 00009000 /* ALP LISTING FILE DEFINITION */ 00010000 00011000 DECLARE 00012000 ALPPRINT INTERNAL FILE RECORD INPUT ENV(FB,RECSIZE(133),TOTAL), 00013000 ALP_LINE CHAR(133) STATIC INIT('+'), 00014000 ALP_CC CHAR(1) POS(1) DEF(ALP_LINE), 00015000 ALP_TEXT CHAR(132) POS(2) DEF(ALP_LINE), 00016000 ALP_NUM CHAR(8) POS(8) DEF(ALP_LINE), 00017000 ALP_EOF BIT(1) STATIC ALIGNED INIT('0'B), 00018000 NOFLAGGED CHAR(132) STATIC INIT('NO ALP STATEMENTS FLAGGED.'); 00019000 00020000 /* ASSEMBLER LISTING FILE DEFINITION */ 00021000 00022000 DECLARE 00023000 ASMPRINT INTERNAL FILE RECORD INPUT ENV(FB,RECSIZE(121),TOTAL), 00024000 ASM_EOF BIT(1) INIT('0'B) STATIC ALIGNED, 00025000 ASM_LINE CHAR(121) STATIC INIT('1'), 00026000 ASM_CC CHAR(1) POS(1) DEF(ASM_LINE), 00027000 ASM_TEXT CHAR(120) POS(2) DEF(ASM_LINE), 00028000 ASM_LOC CHAR(6) POS(2) DEF(ASM_LINE), 00029000 ASM_PLUS CHAR(1) POS(41) DEF(ASM_LINE), 00031000 ASM_NUM CHAR(8) POS(114) DEF(ASM_LINE), 00033000 ASM_SUBHEAD CHAR(56) POS(4) DEF(ASM_LINE), 00034000 ASM_ERROR CHAR(13) POS(13) DEF(ASM_LINE), 00035000 ASM_LASTCC CHAR(1) STATIC INIT('1'), 00038000 SUBHEAD CHAR(56) STATIC 00039000 INIT('LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT'), 00040000 ERROR_FLAG CHAR(13) STATIC INIT('*** ERROR ***'), 00041000 MNOTE_FLAG CHAR(13) STATIC INIT('*** MNOTE ***'), 00042000 WARNING_FLAG CHAR(13) STATIC INIT('** WARNING **'), 00042100 FLAGGED CHAR(35) STATIC INIT(' FLAGGED IN THIS ASSEMBLY'); 00043000 1 00044000 /* COMPOSITE LISTING FILE DEFINITION */ 00045000 00046000 DECLARE 00047000 NEWPRINT INT FILE RECORD OUTPUT ENV(FB,RECSIZE(140),CTLASA,TOTAL), 00048000 NEW_PTR POINTER STATIC, 00049000 NEW_LINE CHAR(140) BASED(NEW_PTR), 00050000 NEW_LOC CHAR(6) STATIC INIT(' '), 00051000 NEW_NUM CHAR(8) STATIC INIT(' '); 00052000 00053000 /* ALTERNATE ASSEMBLY LISTING FILE DEFINITION */ 00054000 00055000 DECLARE 00056000 ALTPRINT INT FILE RECORD OUTPUT ENV(FB,RECSIZE(121),CTL360,TOTAL), 00057000 ALT_PTR POINTER STATIC INIT(NULL()), 00058000 ALT_LINE CHAR(121) BASED(ALT_PTR), 00059000 ALT_CC CHAR(1) BASED(ALT_PTR), 00060000 ALT_SW BIT(1) STATIC ALIGNED INIT('1'B), 00061000 CC CHAR(5) STATIC INIT(' 10-+'), 00062000 CCMC(5) BIT(8) INIT('00001001'B,'10001001'B,'00010001'B, 00063000 '00011001'B,'00000001'B) STATIC ALIGNED, 00064000 CCMCNP(5) BIT(8) INIT('00001011'B,'10001011'B,'00010011'B, 00065000 '00011011'B,'00000011'B) STATIC ALIGNED; 00066000 1 00078000 OPEN FILE(SYSPRINT) TITLE('POSTERR'); 00079000 00087000 OPEN FILE(ALPPRINT) TITLE('SYSPRINT'); 00088000 ON ENDFILE(ALPPRINT) BEGIN; 00089000 ALP_EOF='1'B; 00090000 GO TO NO_ALP; 00091000 END; 00092000 00093000 OPEN FILE(ASMPRINT); 00094000 ON ENDFILE(ASMPRINT) BEGIN; 00095000 ASM_EOF='1'B; 00096000 NEW_LOC=''; 00097000 GO TO FINISH_ALP; 00098000 END; 00099000 00100000 OPEN FILE(NEWPRINT); 00101000 00112000 ON UNDEFINEDFILE(ALTPRINT) ALT_SW='0'B; 00113000 OPEN FILE(ALTPRINT); 00114000 1 00115000 /* GET INITIAL POSITION IN ALP LISTING */ 00116000 00117000 READ FILE(ALPPRINT) INTO(ALP_LINE); 00118000 IF (ALP_CC='1') THEN DO; 00119000 LOCATE NEW_LINE FILE(NEWPRINT); 00120000 NEW_LINE = ALP_LINE; 00121000 READ FILE(ALPPRINT) INTO(ALP_LINE); 00122000 END; 00123000 LOCATE NEW_LINE FILE(NEWPRINT); 00124000 NEW_LINE = ALP_LINE; 00125000 00126000 NO_ALP: 00127000 1 00128000 /* GET INITIAL POSITION IN ASSEMBLY LISTING */ 00129000 00130000 DO WHILE(ASM_CC='1' | UNSPEC(ASM_CC)='10001001'B 00131000 | UNSPEC(ASM_CC)='10001011'B); 00132000 DO WHILE(ASM_SUBHEAD^=SUBHEAD | UNSPEC(ASM_CC)='10001001'B 00133000 | UNSPEC(ASM_CC)='10001011'B); 00134000 ASM_LASTCC=ASM_CC; 00135000 READ FILE(ASMPRINT) INTO(ASM_LINE); 00136000 IF ALT_SW THEN DO; 00137000 IF INDEX(CC,ASM_CC)>0 THEN DO; 00138000 IF ALT_PTR=NULL() THEN DO; 00139000 LOCATE ALT_LINE FILE(ALTPRINT); 00140000 ALT_LINE=''; 00141000 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC)); 00142000 END; 00143000 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC)); 00144000 END; 00145000 LOCATE ALT_LINE FILE(ALTPRINT); 00146000 ALT_LINE = ASM_LINE; 00147000 END; 00148000 END; 00152000 ASM_LASTCC=ASM_CC; 00153000 READ FILE(ASMPRINT) INTO(ASM_LINE); 00154000 IF ALT_SW THEN DO; 00155000 IF INDEX(CC,ASM_CC)>0 THEN DO; 00156000 IF ALT_PTR=NULL() THEN DO; 00157000 LOCATE ALT_LINE FILE(ALTPRINT); 00158000 ALT_LINE=''; 00159000 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC)); 00160000 END; 00161000 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC)); 00162000 END; 00163000 LOCATE ALT_LINE FILE(ALTPRINT); 00164000 ALT_LINE = ASM_LINE; 00165000 END; 00166000 END; 00170000 00204000 ON ENDFILE(ALPPRINT) BEGIN; 00205000 ALP_EOF='1'B; 00206000 GO TO EOF_ALP; 00207000 END; 00208000 00209000 IF ALP_EOF THEN GO TO EOF_ALP; 00210000 1 00211000 DO WHILE('1'B); 00212000 00213000 /* READ A LINE FROM THE ALP LISTING */ 00214000 00215000 NEXT_ALP: 00216000 READ FILE(ALPPRINT) INTO(ALP_LINE); 00217000 00218000 /* SKIP BLANK LINES, ETC. */ 00219000 00220000 IF (ALP_TEXT='') THEN DO; 00221000 LOCATE NEW_LINE FILE(NEWPRINT); 00222000 NEW_LINE = ALP_LINE; 00223000 GO TO NEXT_ALP; 00224000 END; 00225000 00226000 /* TEST FOR END OF ALP STATEMENTS */ 00227000 00228000 IF (ALP_TEXT=NOFLAGGED) THEN DO; 00229000 GO TO FINAL_ALP; 00230000 END; 00231000 00232000 /* SKIP TITLES */ 00233000 00234000 IF (ALP_CC='1') THEN DO; 00235000 LOCATE NEW_LINE FILE(NEWPRINT); 00236000 NEW_LINE=ALP_LINE; 00237000 READ FILE(ALPPRINT) INTO(ALP_LINE); /* SUBTITLE */ 00238000 LOCATE NEW_LINE FILE(NEWPRINT); 00239000 NEW_LINE=ALP_LINE; 00240000 GO TO NEXT_ALP; 00241000 END; 00242000 1 00243000 /* FIND SAME LINE NUMBER IN ASSEMBLER LISTING */ 00244000 00245000 IF (ALP_NUM>NEW_NUM) THEN NEW_LOC=''; 00246000 DO WHILE(ALP_NUM>NEW_NUM | NEW_NUM='' | NEW_LOC=''); 00247000 00248000 /* READ ANOTHER LINE FROM THE ASSEMBLY LISTING */ 00249000 00250000 READ FILE(ASMPRINT) INTO(ASM_LINE); 00251000 IF ALT_SW THEN DO; 00252000 IF INDEX(CC,ASM_CC)>0 THEN DO; 00253000 IF ALT_PTR=NULL() THEN DO; 00254000 LOCATE ALT_LINE FILE(ALTPRINT); 00255000 ALT_LINE=''; 00256000 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC)); 00257000 END; 00258000 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC)); 00259000 END; 00260000 LOCATE ALT_LINE FILE(ALTPRINT); 00261000 ALT_LINE = ASM_LINE; 00262000 END; 00263000 1 00264000 /* SKIP HEADINGS IN LISTING WITH ASA CARRIAGE CONTROL */ 00265000 00266000 DO WHILE(ASM_CC='1'); 00267000 DO WHILE(ASM_SUBHEAD^=SUBHEAD); 00268000 READ FILE(ASMPRINT) INTO(ASM_LINE); 00273000 IF ALT_SW THEN DO; 00274000 IF INDEX(CC,ASM_CC)>0 THEN DO; 00275000 IF ALT_PTR=NULL() THEN DO; 00276000 LOCATE ALT_LINE FILE(ALTPRINT); 00277000 ALT_LINE=''; 00278000 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC)); 00279000 END; 00280000 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC)); 00281000 END; 00282000 LOCATE ALT_LINE FILE(ALTPRINT); 00283000 ALT_LINE = ASM_LINE; 00284000 END; 00285000 END; 00286000 READ FILE(ASMPRINT) INTO(ASM_LINE); 00291000 IF ALT_SW THEN DO; 00292000 IF INDEX(CC,ASM_CC)>0 THEN DO; 00293000 IF ALT_PTR=NULL() THEN DO; 00294000 LOCATE ALT_LINE FILE(ALTPRINT); 00295000 ALT_LINE=''; 00296000 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC)); 00297000 END; 00298000 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC)); 00299000 END; 00300000 LOCATE ALT_LINE FILE(ALTPRINT); 00301000 ALT_LINE = ASM_LINE; 00302000 END; 00303000 END; 00304000 1 00338000 /* CHECK IF VALID LOCATION COUNTER VALUE IS PRESENT */ 00339000 00340000 IF (ASM_PLUS^='+') & (ASM_NUM^='') & (ASM_NUM^='00000000') 00341000 & (ASM_ERROR^=ERROR_FLAG) & (ASM_ERROR^=MNOTE_FLAG) 00342000 & (ASM_ERROR^=WARNING_FLAG) THEN NEW_NUM=ASM_NUM; 00343000 IF ASM_LOC^='' & (ALP_NUM<=NEW_NUM | NEW_NUM='') 00344000 & (ASM_ERROR^=ERROR_FLAG) & (ASM_ERROR^=MNOTE_FLAG) 00345000 & (ASM_ERROR^=WARNING_FLAG) THEN NEW_LOC=ASM_LOC; 00346000 00347000 /* SKIP HEADINGS IN LISTING WITH MACHINE CARRIAGE CONTROL */ 00348000 00349000 DO WHILE(UNSPEC(ASM_CC)='10001001'B|UNSPEC(ASM_CC)='10001011'B); 00350000 DO WHILE(ASM_SUBHEAD^=SUBHEAD | UNSPEC(ASM_CC)='10001001'B 00351000 | UNSPEC(ASM_CC)='10001011'B); 00352000 READ FILE(ASMPRINT) INTO(ASM_LINE); 00357000 IF ALT_SW THEN DO; 00358000 IF INDEX(CC,ASM_CC)>0 THEN DO; 00359000 IF ALT_PTR=NULL() THEN DO; 00360000 LOCATE ALT_LINE FILE(ALTPRINT); 00361000 ALT_LINE=''; 00362000 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC)); 00363000 END; 00364000 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC)); 00365000 END; 00366000 LOCATE ALT_LINE FILE(ALTPRINT); 00367000 ALT_LINE = ASM_LINE; 00368000 END; 00369000 END; 00370000 END; 00371000 00372000 /* IF WE HAVE A GOOD LOCATION COUNTER VALUE, PRINT ALP LINE */ 00373000 00374000 IF (ALP_NUM<=NEW_NUM & NEW_NUM^='' & NEW_LOC^='') 00375000 THEN GO TO OUTPUT; 00376000 END; 00377000 00378000 /* WRITE NEW LISTING LINE */ 00379000 00380000 OUTPUT: 00381000 LOCATE NEW_LINE FILE(NEWPRINT); 00382000 NEW_LINE = ALP_CC||NEW_LOC||' '||ALP_TEXT; 00383000 END; 00384000 1 00385000 /* PROCESS REMAINDER OF ALP LISTING */ 00386000 00387000 FINISH_ALP: 00388000 00389000 IF ALP_EOF THEN GO TO EOF_ALP; 00390000 00391000 IF ALP_LINE='+' THEN READ FILE(ALPPRINT) INTO(ALP_LINE); 00392000 DO WHILE(ALP_TEXT^=NOFLAGGED); 00393000 LOCATE NEW_LINE FILE(NEWPRINT); 00394000 NEW_LINE = ALP_CC||NEW_LOC||' '||ALP_TEXT; 00395000 READ FILE(ALPPRINT) INTO(ALP_LINE); 00396000 END; 00397000 00398000 FINAL_ALP: 00399000 00400000 IF ALP_EOF THEN GO TO EOF_ALP; 00401000 00402000 DO WHILE('1'B); 00403000 LOCATE NEW_LINE FILE(NEWPRINT); 00404000 NEW_LINE = ALP_LINE; 00405000 READ FILE(ALPPRINT) INTO(ALP_LINE); 00406000 END; 00407000 00408000 EOF_ALP: 00409000 1 00410000 /* PROCESS REMAINDER OF ASSEMBLY LISTING */ 00411000 00412000 IF ALT_SW & ^ASM_EOF THEN DO; 00413000 ON ENDFILE(ASMPRINT) GO TO EOF_ASM; 00414000 DO WHILE('1'B); 00415000 READ FILE(ASMPRINT) INTO(ASM_LINE); 00416000 IF ALT_SW THEN DO; 00417000 IF INDEX(CC,ASM_CC)>0 THEN DO; 00418000 IF ALT_PTR=NULL() THEN DO; 00419000 LOCATE ALT_LINE FILE(ALTPRINT); 00420000 ALT_LINE=''; 00421000 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC)); 00422000 END; 00423000 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC)); 00424000 END; 00425000 LOCATE ALT_LINE FILE(ALTPRINT); 00426000 ALT_LINE = ASM_LINE; 00427000 END; 00428000 END; 00532000 END; 00533000 1 00534000 EOF_ASM: 00535000 00536000 /* RETURN TO CALLER */ 00537000 00538000 CLOSE FILE(ALPPRINT),FILE(ASMPRINT),FILE(NEWPRINT); 00539000 IF ALT_SW THEN DO; 00541000 IF ALT_PTR^=NULL() THEN IF INDEX(CC,ALT_CC)>0 THEN DO; 00542000 UNSPEC(ALT_CC)='00000001'B; 00543000 END; 00544000 CLOSE FILE(ALTPRINT); 00545000 END; 00546000 00547000 CALL PLIRETC(0); 00548000 END POSTALP; 00549000