home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / ibmtsonih / tsnpst.pli < prev    next >
Text File  |  2020-01-01  |  26KB  |  326 lines

  1.  /* ALP LISTING POST-PROCESSOR - VERSION 3.0 - 11/13/80 */              00001000
  2.                                                                         00002000
  3.  POSTALP: PROC OPTIONS(MAIN) REORDER;                                   00003000
  4.                                                                         00009000
  5.  /*  ALP LISTING FILE DEFINITION */                                     00010000
  6.                                                                         00011000
  7.  DECLARE                                                                00012000
  8.     ALPPRINT INTERNAL FILE RECORD INPUT ENV(FB,RECSIZE(133),TOTAL),     00013000
  9.     ALP_LINE CHAR(133) STATIC INIT('+'),                                00014000
  10.        ALP_CC CHAR(1) POS(1) DEF(ALP_LINE),                             00015000
  11.        ALP_TEXT CHAR(132) POS(2) DEF(ALP_LINE),                         00016000
  12.           ALP_NUM CHAR(8) POS(8) DEF(ALP_LINE),                         00017000
  13.     ALP_EOF BIT(1) STATIC ALIGNED INIT('0'B),                           00018000
  14.     NOFLAGGED CHAR(132) STATIC INIT('NO ALP STATEMENTS FLAGGED.');      00019000
  15.                                                                         00020000
  16.  /*  ASSEMBLER LISTING FILE DEFINITION */                               00021000
  17.                                                                         00022000
  18.  DECLARE                                                                00023000
  19.     ASMPRINT INTERNAL FILE RECORD INPUT ENV(FB,RECSIZE(121),TOTAL),     00024000
  20.     ASM_EOF BIT(1) INIT('0'B) STATIC ALIGNED,                           00025000
  21.     ASM_LINE CHAR(121) STATIC INIT('1'),                                00026000
  22.        ASM_CC CHAR(1) POS(1) DEF(ASM_LINE),                             00027000
  23.        ASM_TEXT CHAR(120) POS(2) DEF(ASM_LINE),                         00028000
  24.        ASM_LOC CHAR(6) POS(2) DEF(ASM_LINE),                            00029000
  25.        ASM_PLUS CHAR(1) POS(41) DEF(ASM_LINE),                          00031000
  26.        ASM_NUM CHAR(8) POS(114) DEF(ASM_LINE),                          00033000
  27.        ASM_SUBHEAD CHAR(56) POS(4) DEF(ASM_LINE),                       00034000
  28.        ASM_ERROR CHAR(13) POS(13) DEF(ASM_LINE),                        00035000
  29.     ASM_LASTCC CHAR(1) STATIC INIT('1'),                                00038000
  30.     SUBHEAD CHAR(56) STATIC                                             00039000
  31.     INIT('LOC  OBJECT CODE    ADDR1 ADDR2  STMT   SOURCE STATEMENT'),   00040000
  32.     ERROR_FLAG CHAR(13) STATIC INIT('*** ERROR ***'),                   00041000
  33.     MNOTE_FLAG CHAR(13) STATIC INIT('*** MNOTE ***'),                   00042000
  34.     WARNING_FLAG CHAR(13) STATIC INIT('** WARNING **'),                 00042100
  35.     FLAGGED CHAR(35) STATIC INIT(' FLAGGED IN THIS ASSEMBLY');          00043000
  36. 1                                                                       00044000
  37.  /*  COMPOSITE LISTING FILE DEFINITION */                               00045000
  38.                                                                         00046000
  39.  DECLARE                                                                00047000
  40.     NEWPRINT INT FILE RECORD OUTPUT ENV(FB,RECSIZE(140),CTLASA,TOTAL),  00048000
  41.     NEW_PTR POINTER STATIC,                                             00049000
  42.     NEW_LINE CHAR(140) BASED(NEW_PTR),                                  00050000
  43.     NEW_LOC CHAR(6) STATIC INIT(' '),                                   00051000
  44.     NEW_NUM CHAR(8) STATIC INIT(' ');                                   00052000
  45.                                                                         00053000
  46.  /*  ALTERNATE ASSEMBLY LISTING FILE DEFINITION  */                     00054000
  47.                                                                         00055000
  48.  DECLARE                                                                00056000
  49.     ALTPRINT INT FILE RECORD OUTPUT ENV(FB,RECSIZE(121),CTL360,TOTAL),  00057000
  50.     ALT_PTR POINTER STATIC INIT(NULL()),                                00058000
  51.     ALT_LINE CHAR(121) BASED(ALT_PTR),                                  00059000
  52.     ALT_CC CHAR(1) BASED(ALT_PTR),                                      00060000
  53.     ALT_SW BIT(1) STATIC ALIGNED INIT('1'B),                            00061000
  54.     CC CHAR(5) STATIC INIT(' 10-+'),                                    00062000
  55.     CCMC(5) BIT(8) INIT('00001001'B,'10001001'B,'00010001'B,            00063000
  56.        '00011001'B,'00000001'B) STATIC ALIGNED,                         00064000
  57.     CCMCNP(5) BIT(8) INIT('00001011'B,'10001011'B,'00010011'B,          00065000
  58.        '00011011'B,'00000011'B) STATIC ALIGNED;                         00066000
  59. 1                                                                       00078000
  60.  OPEN FILE(SYSPRINT) TITLE('POSTERR');                                  00079000
  61.                                                                         00087000
  62.  OPEN FILE(ALPPRINT) TITLE('SYSPRINT');                                 00088000
  63.  ON ENDFILE(ALPPRINT) BEGIN;                                            00089000
  64.     ALP_EOF='1'B;                                                       00090000
  65.     GO TO NO_ALP;                                                       00091000
  66.     END;                                                                00092000
  67.                                                                         00093000
  68.  OPEN FILE(ASMPRINT);                                                   00094000
  69.  ON ENDFILE(ASMPRINT) BEGIN;                                            00095000
  70.     ASM_EOF='1'B;                                                       00096000
  71.     NEW_LOC='';                                                         00097000
  72.     GO TO FINISH_ALP;                                                   00098000
  73.     END;                                                                00099000
  74.                                                                         00100000
  75.  OPEN FILE(NEWPRINT);                                                   00101000
  76.                                                                         00112000
  77.  ON UNDEFINEDFILE(ALTPRINT) ALT_SW='0'B;                                00113000
  78.  OPEN FILE(ALTPRINT);                                                   00114000
  79. 1                                                                       00115000
  80.  /*  GET INITIAL POSITION IN ALP LISTING  */                            00116000
  81.                                                                         00117000
  82.  READ FILE(ALPPRINT) INTO(ALP_LINE);                                    00118000
  83.  IF (ALP_CC='1') THEN DO;                                               00119000
  84.     LOCATE NEW_LINE FILE(NEWPRINT);                                     00120000
  85.     NEW_LINE = ALP_LINE;                                                00121000
  86.     READ FILE(ALPPRINT) INTO(ALP_LINE);                                 00122000
  87.     END;                                                                00123000
  88.  LOCATE NEW_LINE FILE(NEWPRINT);                                        00124000
  89.  NEW_LINE = ALP_LINE;                                                   00125000
  90.                                                                         00126000
  91.  NO_ALP:                                                                00127000
  92. 1                                                                       00128000
  93.  /*  GET INITIAL POSITION IN ASSEMBLY LISTING */                        00129000
  94.                                                                         00130000
  95.  DO WHILE(ASM_CC='1' | UNSPEC(ASM_CC)='10001001'B                       00131000
  96.  | UNSPEC(ASM_CC)='10001011'B);                                         00132000
  97.     DO WHILE(ASM_SUBHEAD^=SUBHEAD | UNSPEC(ASM_CC)='10001001'B          00133000
  98.        | UNSPEC(ASM_CC)='10001011'B);                                   00134000
  99.        ASM_LASTCC=ASM_CC;                                               00135000
  100.        READ FILE(ASMPRINT) INTO(ASM_LINE);                              00136000
  101.        IF ALT_SW THEN DO;                                               00137000
  102.           IF INDEX(CC,ASM_CC)>0 THEN DO;                                00138000
  103.              IF ALT_PTR=NULL() THEN DO;                                 00139000
  104.                 LOCATE ALT_LINE FILE(ALTPRINT);                         00140000
  105.                 ALT_LINE='';                                            00141000
  106.                 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC));                00142000
  107.                 END;                                                    00143000
  108.              ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC));                00144000
  109.              END;                                                       00145000
  110.           LOCATE ALT_LINE FILE(ALTPRINT);                               00146000
  111.           ALT_LINE = ASM_LINE;                                          00147000
  112.           END;                                                          00148000
  113.        END;                                                             00152000
  114.     ASM_LASTCC=ASM_CC;                                                  00153000
  115.     READ FILE(ASMPRINT) INTO(ASM_LINE);                                 00154000
  116.     IF ALT_SW THEN DO;                                                  00155000
  117.        IF INDEX(CC,ASM_CC)>0 THEN DO;                                   00156000
  118.           IF ALT_PTR=NULL() THEN DO;                                    00157000
  119.              LOCATE ALT_LINE FILE(ALTPRINT);                            00158000
  120.              ALT_LINE='';                                               00159000
  121.              UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC));                   00160000
  122.              END;                                                       00161000
  123.           ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC));                   00162000
  124.           END;                                                          00163000
  125.        LOCATE ALT_LINE FILE(ALTPRINT);                                  00164000
  126.        ALT_LINE = ASM_LINE;                                             00165000
  127.        END;                                                             00166000
  128.     END;                                                                00170000
  129.                                                                         00204000
  130.  ON ENDFILE(ALPPRINT) BEGIN;                                            00205000
  131.     ALP_EOF='1'B;                                                       00206000
  132.     GO TO EOF_ALP;                                                      00207000
  133.     END;                                                                00208000
  134.                                                                         00209000
  135.  IF ALP_EOF THEN GO TO EOF_ALP;                                         00210000
  136. 1                                                                       00211000
  137.  DO WHILE('1'B);                                                        00212000
  138.                                                                         00213000
  139.     /*  READ A LINE FROM THE ALP LISTING  */                            00214000
  140.                                                                         00215000
  141.     NEXT_ALP:                                                           00216000
  142.     READ FILE(ALPPRINT) INTO(ALP_LINE);                                 00217000
  143.                                                                         00218000
  144.     /*  SKIP BLANK LINES, ETC. */                                       00219000
  145.                                                                         00220000
  146.     IF (ALP_TEXT='') THEN DO;                                           00221000
  147.        LOCATE NEW_LINE FILE(NEWPRINT);                                  00222000
  148.        NEW_LINE = ALP_LINE;                                             00223000
  149.        GO TO NEXT_ALP;                                                  00224000
  150.        END;                                                             00225000
  151.                                                                         00226000
  152.     /*  TEST FOR END OF ALP STATEMENTS  */                              00227000
  153.                                                                         00228000
  154.     IF (ALP_TEXT=NOFLAGGED) THEN DO;                                    00229000
  155.        GO TO FINAL_ALP;                                                 00230000
  156.        END;                                                             00231000
  157.                                                                         00232000
  158.     /*  SKIP TITLES  */                                                 00233000
  159.                                                                         00234000
  160.     IF (ALP_CC='1') THEN DO;                                            00235000
  161.        LOCATE NEW_LINE FILE(NEWPRINT);                                  00236000
  162.        NEW_LINE=ALP_LINE;                                               00237000
  163.        READ FILE(ALPPRINT) INTO(ALP_LINE);  /* SUBTITLE */              00238000
  164.        LOCATE NEW_LINE FILE(NEWPRINT);                                  00239000
  165.        NEW_LINE=ALP_LINE;                                               00240000
  166.        GO TO NEXT_ALP;                                                  00241000
  167.        END;                                                             00242000
  168. 1                                                                       00243000
  169.     /*  FIND SAME LINE NUMBER IN ASSEMBLER LISTING  */                  00244000
  170.                                                                         00245000
  171.     IF (ALP_NUM>NEW_NUM) THEN NEW_LOC='';                               00246000
  172.     DO WHILE(ALP_NUM>NEW_NUM | NEW_NUM='' | NEW_LOC='');                00247000
  173.                                                                         00248000
  174.        /*  READ ANOTHER LINE FROM THE ASSEMBLY LISTING  */              00249000
  175.                                                                         00250000
  176.        READ FILE(ASMPRINT) INTO(ASM_LINE);                              00251000
  177.        IF ALT_SW THEN DO;                                               00252000
  178.           IF INDEX(CC,ASM_CC)>0 THEN DO;                                00253000
  179.              IF ALT_PTR=NULL() THEN DO;                                 00254000
  180.                 LOCATE ALT_LINE FILE(ALTPRINT);                         00255000
  181.                 ALT_LINE='';                                            00256000
  182.                 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC));                00257000
  183.                 END;                                                    00258000
  184.              ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC));                00259000
  185.              END;                                                       00260000
  186.           LOCATE ALT_LINE FILE(ALTPRINT);                               00261000
  187.           ALT_LINE = ASM_LINE;                                          00262000
  188.           END;                                                          00263000
  189. 1                                                                       00264000
  190.        /*  SKIP HEADINGS IN LISTING WITH ASA CARRIAGE CONTROL  */       00265000
  191.                                                                         00266000
  192.        DO WHILE(ASM_CC='1');                                            00267000
  193.           DO WHILE(ASM_SUBHEAD^=SUBHEAD);                               00268000
  194.              READ FILE(ASMPRINT) INTO(ASM_LINE);                        00273000
  195.              IF ALT_SW THEN DO;                                         00274000
  196.                 IF INDEX(CC,ASM_CC)>0 THEN DO;                          00275000
  197.                    IF ALT_PTR=NULL() THEN DO;                           00276000
  198.                       LOCATE ALT_LINE FILE(ALTPRINT);                   00277000
  199.                       ALT_LINE='';                                      00278000
  200.                       UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC));          00279000
  201.                       END;                                              00280000
  202.                    ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC));          00281000
  203.                    END;                                                 00282000
  204.                 LOCATE ALT_LINE FILE(ALTPRINT);                         00283000
  205.                 ALT_LINE = ASM_LINE;                                    00284000
  206.                 END;                                                    00285000
  207.              END;                                                       00286000
  208.           READ FILE(ASMPRINT) INTO(ASM_LINE);                           00291000
  209.           IF ALT_SW THEN DO;                                            00292000
  210.              IF INDEX(CC,ASM_CC)>0 THEN DO;                             00293000
  211.                 IF ALT_PTR=NULL() THEN DO;                              00294000
  212.                    LOCATE ALT_LINE FILE(ALTPRINT);                      00295000
  213.                    ALT_LINE='';                                         00296000
  214.                    UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC));             00297000
  215.                    END;                                                 00298000
  216.                 ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC));             00299000
  217.                 END;                                                    00300000
  218.              LOCATE ALT_LINE FILE(ALTPRINT);                            00301000
  219.              ALT_LINE = ASM_LINE;                                       00302000
  220.              END;                                                       00303000
  221.           END;                                                          00304000
  222. 1                                                                       00338000
  223.        /*  CHECK IF VALID LOCATION COUNTER VALUE IS PRESENT  */         00339000
  224.                                                                         00340000
  225.        IF (ASM_PLUS^='+') & (ASM_NUM^='') & (ASM_NUM^='00000000')       00341000
  226.        & (ASM_ERROR^=ERROR_FLAG) & (ASM_ERROR^=MNOTE_FLAG)              00342000
  227.        & (ASM_ERROR^=WARNING_FLAG) THEN NEW_NUM=ASM_NUM;                00343000
  228.        IF ASM_LOC^='' & (ALP_NUM<=NEW_NUM | NEW_NUM='')                 00344000
  229.        & (ASM_ERROR^=ERROR_FLAG) & (ASM_ERROR^=MNOTE_FLAG)              00345000
  230.        & (ASM_ERROR^=WARNING_FLAG) THEN NEW_LOC=ASM_LOC;                00346000
  231.                                                                         00347000
  232.        /*  SKIP HEADINGS IN LISTING WITH MACHINE CARRIAGE CONTROL  */   00348000
  233.                                                                         00349000
  234.        DO WHILE(UNSPEC(ASM_CC)='10001001'B|UNSPEC(ASM_CC)='10001011'B); 00350000
  235.           DO WHILE(ASM_SUBHEAD^=SUBHEAD | UNSPEC(ASM_CC)='10001001'B    00351000
  236.              | UNSPEC(ASM_CC)='10001011'B);                             00352000
  237.              READ FILE(ASMPRINT) INTO(ASM_LINE);                        00357000
  238.              IF ALT_SW THEN DO;                                         00358000
  239.                 IF INDEX(CC,ASM_CC)>0 THEN DO;                          00359000
  240.                    IF ALT_PTR=NULL() THEN DO;                           00360000
  241.                       LOCATE ALT_LINE FILE(ALTPRINT);                   00361000
  242.                       ALT_LINE='';                                      00362000
  243.                       UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC));          00363000
  244.                       END;                                              00364000
  245.                    ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC));          00365000
  246.                    END;                                                 00366000
  247.                 LOCATE ALT_LINE FILE(ALTPRINT);                         00367000
  248.                 ALT_LINE = ASM_LINE;                                    00368000
  249.                 END;                                                    00369000
  250.              END;                                                       00370000
  251.           END;                                                          00371000
  252.                                                                         00372000
  253.        /*  IF WE HAVE A GOOD LOCATION COUNTER VALUE, PRINT ALP LINE  */ 00373000
  254.                                                                         00374000
  255.        IF (ALP_NUM<=NEW_NUM & NEW_NUM^='' & NEW_LOC^='')                00375000
  256.        THEN GO TO OUTPUT;                                               00376000
  257.        END;                                                             00377000
  258.                                                                         00378000
  259.     /*  WRITE NEW LISTING LINE  */                                      00379000
  260.                                                                         00380000
  261.     OUTPUT:                                                             00381000
  262.     LOCATE NEW_LINE FILE(NEWPRINT);                                     00382000
  263.     NEW_LINE = ALP_CC||NEW_LOC||' '||ALP_TEXT;                          00383000
  264.     END;                                                                00384000
  265. 1                                                                       00385000
  266.  /*  PROCESS REMAINDER OF ALP LISTING  */                               00386000
  267.                                                                         00387000
  268.  FINISH_ALP:                                                            00388000
  269.                                                                         00389000
  270.  IF ALP_EOF THEN GO TO EOF_ALP;                                         00390000
  271.                                                                         00391000
  272.  IF ALP_LINE='+' THEN READ FILE(ALPPRINT) INTO(ALP_LINE);               00392000
  273.  DO WHILE(ALP_TEXT^=NOFLAGGED);                                         00393000
  274.     LOCATE NEW_LINE FILE(NEWPRINT);                                     00394000
  275.     NEW_LINE = ALP_CC||NEW_LOC||' '||ALP_TEXT;                          00395000
  276.     READ FILE(ALPPRINT) INTO(ALP_LINE);                                 00396000
  277.     END;                                                                00397000
  278.                                                                         00398000
  279.  FINAL_ALP:                                                             00399000
  280.                                                                         00400000
  281.  IF ALP_EOF THEN GO TO EOF_ALP;                                         00401000
  282.                                                                         00402000
  283.  DO WHILE('1'B);                                                        00403000
  284.     LOCATE NEW_LINE FILE(NEWPRINT);                                     00404000
  285.     NEW_LINE = ALP_LINE;                                                00405000
  286.     READ FILE(ALPPRINT) INTO(ALP_LINE);                                 00406000
  287.     END;                                                                00407000
  288.                                                                         00408000
  289.  EOF_ALP:                                                               00409000
  290. 1                                                                       00410000
  291.  /*  PROCESS REMAINDER OF ASSEMBLY LISTING */                           00411000
  292.                                                                         00412000
  293.  IF ALT_SW & ^ASM_EOF THEN DO;                                          00413000
  294.     ON ENDFILE(ASMPRINT) GO TO EOF_ASM;                                 00414000
  295.     DO WHILE('1'B);                                                     00415000
  296.        READ FILE(ASMPRINT) INTO(ASM_LINE);                              00416000
  297.        IF ALT_SW THEN DO;                                               00417000
  298.           IF INDEX(CC,ASM_CC)>0 THEN DO;                                00418000
  299.              IF ALT_PTR=NULL() THEN DO;                                 00419000
  300.                 LOCATE ALT_LINE FILE(ALTPRINT);                         00420000
  301.                 ALT_LINE='';                                            00421000
  302.                 UNSPEC(ALT_CC)=CCMCNP(INDEX(CC,ASM_CC));                00422000
  303.                 END;                                                    00423000
  304.              ELSE UNSPEC(ALT_CC)=CCMC(INDEX(CC,ASM_CC));                00424000
  305.              END;                                                       00425000
  306.           LOCATE ALT_LINE FILE(ALTPRINT);                               00426000
  307.           ALT_LINE = ASM_LINE;                                          00427000
  308.           END;                                                          00428000
  309.        END;                                                             00532000
  310.     END;                                                                00533000
  311. 1                                                                       00534000
  312.  EOF_ASM:                                                               00535000
  313.                                                                         00536000
  314.  /*  RETURN TO CALLER  */                                               00537000
  315.                                                                         00538000
  316.  CLOSE FILE(ALPPRINT),FILE(ASMPRINT),FILE(NEWPRINT);                    00539000
  317.  IF ALT_SW THEN DO;                                                     00541000
  318.     IF ALT_PTR^=NULL() THEN IF INDEX(CC,ALT_CC)>0 THEN DO;              00542000
  319.        UNSPEC(ALT_CC)='00000001'B;                                      00543000
  320.        END;                                                             00544000
  321.     CLOSE FILE(ALTPRINT);                                               00545000
  322.     END;                                                                00546000
  323.                                                                         00547000
  324.  CALL PLIRETC(0);                                                       00548000
  325.  END POSTALP;                                                           00549000
  326.