home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / ibm370 / ikxtrn.asm < prev    next >
Assembly Source File  |  2020-01-01  |  40KB  |  493 lines

  1. *********************************************************************** 00001000
  2. *                                                                     * 00002000
  3. *    VSE KERMIT UPDATE CONVERTOR                                      * 00003000
  4. *                                                                     * 00004000
  5. *    Author: Jeff Huestis, Washington University Libraries            * 00005000
  6. *                                                                     * 00006000
  7. *    Purpose: Read sequential file of updates in GUPI format and      * 00007000
  8. *             submit a job via POWER to update Kermit sources.        * 00008000
  9. *                                                                     * 00009000
  10. *    Method: Read update file from SYSIPT and create LIBR control     * 00010000
  11. *        sequences for individual library members based on a table    * 00011000
  12. *        of starting sequence numbers for the Kermit source.  Write   * 00012000
  13. *        the output to SYSPCH along with LIBR directives for copying  * 00013000
  14. *        the Kermit source library members to a work library.  The    * 00014000
  15. *        updates are then applied to the work library.  Any errors    * 00015000
  16. *        are noted on SYSLST for the conversion process.  Bad syntax  * 00016000
  17. *        in the input file will cause the program to abort.           * 00017000
  18. *                                                                     * 00018000
  19. *    IKXTRN parameters are entered is the first lines in the input    * 00019000
  20. *        file.  Parameter lines are recognized by a keyword or all    * 00020000
  21. *        numeric string in columns 1 through 8, and "=" in column 9.  * 00021000
  22. *                                                                     * 00022000
  23. *    REQUIRED Parameters:                                             * 00023000
  24. *  1. BASELIBR= specify a 'library.sublibrary' string indicating where* 00024000
  25. *     unmodified KERMIT source is kept.                               * 00025000
  26. *  2. WORKLIBR= specify a 'library.sublibrary' string for the library * 00026000
  27. *     where modified, working copies of KERMIT source are to be kept. * 00027000
  28. *  3. LOCALLST= specify the text you want for the * $$ LST card for   * 00028000
  29. *     the job which IKXTRN will punch to the POWER internal reader.   * 00029000
  30. *                                                                     * 00030000
  31. *    OPTIONAL Parameters:                                             * 00031000
  32. *  4. LOCALSLI= parameter is optional.  Use it to specify the name of * 00032000
  33. *     a library member containing label information not in the        * 00033000
  34. *     standard label area.  This member will be copied into the       * 00034000
  35. *     generated job by a POWER SLI statement.  The generated SLI will * 00035000
  36. *     use the "MEM=" format, so the member name qualifier should be   * 00036000
  37. *     included.  Example:  LOCALSLI=KERMSLIS.P                        * 00037000
  38. *  5. nnnnnnnn= Future releases of CICS Kermit (or local re-packaging)* 00038000
  39. *     may alter the sequence of module names included in the table    * 00039000
  40. *     starting at label STARTNUM.  For this reason, it is possible to * 00040000
  41. *     replace this table with a series of lines giving the starting   * 00041000
  42. *     line number for each module in columns 1 through 8 and the name * 00042000
  43. *     of the module in the 12 columns from column 10 onwards.  If this* 00043000
  44. *     option is used, the entire table must be replaced, and the      * 00044000
  45. *     parameter cards must be in ascending order by line sequence #.  * 00045000
  46. *                                                                     * 00046000
  47. *    Update history:                                                  * 00047000
  48. *    1.0 - 1991 January - Implementation complete, except for the     * 00048000
  49. *                         resequence command "./ S".                  * 00049000
  50. *    1.1 - 1991 January - Updated by Jeff Huestis and John Chandler.  * 00050000
  51. *                         Libraries specified via PARM                * 00051000
  52. *    1.2 - 1991 March   - Updated by Jeff Huestis.                    * 00052000
  53. *                         Libraries and other parameters specified    * 00053000
  54. *                         via SYSIPT.                                 * 00054000
  55. *    1.3 - 1991 July    - Updated by John Chandler.                   * 00054300
  56. *                         Input line number in error messages.        * 00054600
  57. *    1.4 - 1992 May     - Updated by John Chandler. Ignore blank lines* 00054800
  58. *                                                                     * 00055000
  59. *********************************************************************** 00056000
  60. *                                                                       00057000
  61. *    REGISTER EQUATES                                                   00058000
  62. R0       EQU   0                                                        00059000
  63. R1       EQU   1                                                        00060000
  64. R2       EQU   2                                                        00061000
  65. R3       EQU   3                                                        00062000
  66. R4       EQU   4                                                        00063000
  67. R5       EQU   5                                                        00064000
  68. R6       EQU   6                                                        00065000
  69. R7       EQU   7                                                        00066000
  70. R8       EQU   8                                                        00067000
  71. R9       EQU   9                                                        00068000
  72. R10      EQU   10                                                       00069000
  73. R11      EQU   11                                                       00070000
  74. R12      EQU   12                                                       00071000
  75. R13      EQU   13                                                       00072000
  76. R14      EQU   14                                                       00073000
  77. R15      EQU   15                                                       00074000
  78. *                                                                       00075000
  79. IKXTRN   CSECT                                                          00076000
  80.          BALR  12,0              STANDARD ENTRY LINKAGE                 00077000
  81.          USING *,12                                                     00078000
  82.          LA    13,REGSAVE                                               00079000
  83.          B     A000              BRANCH AROUND PROGRAM ID & SAVE AREA   00080000
  84. PGRMNAM  DC    CL8'IKXTRN'       PROGRAM NAME                           00081000
  85.          DC    PL2'1,4'          VERSION/LEVEL                          00082000
  86. REGSAVE  DS    9D                REGISTER SAVE AREA                     00083000
  87. *                                                                       00084000
  88. *********************************************************************** 00085000
  89. *   PROCESS PARM DATA                                                   00086000
  90. *********************************************************************** 00087000
  91. A000     EQU   *                                                        00088000
  92.          XC    NRECBL,NRECBL Initialize blank count                     00088200
  93.          XC    NRECIN,NRECIN Initialize input count                     00088500
  94.          OPEN  LIST,INPFILE,OUTFILE          OPEN FILES                 00089000
  95.          MVC   MESSLINE(35),=C'FILES OPENED; PARAMETER CARDS READ:'     00090000
  96.          PUT   LIST,MESSAGE                                             00091000
  97.          L     R4,=A(STARTNUM)       POINT TO START OF MODULE TABLE     00092000
  98.          USING STARTNUM,R4                                              00093000
  99.          LA    R5,MODCOUNT       GET DEFAULT MODULE COUNT               00094000
  100.          STH   R5,NUMMOD            AND STORE WHERE IT COUNTS           00095000
  101.          LA    R5,STARTEND       GET POINTER TO LAST MODULE OF DEFAULT  00096000
  102.          ST    R5,LSTMOD            AND STORE IT FOR POSSIBLE CHANGE    00097000
  103.          XR    R5,R5             INITIALIZE MODULE NAME COUNTER         00098000
  104. NEXTPARM EQU   *                                                        00099000
  105.          LA    0,1                                                      00099200
  106.          A     0,NRECIN                                                 00099400
  107.          ST    0,NRECIN      Count input records                        00099600
  108.          GET   INPFILE            GET ANOTHER INPUT CARD                00100000
  109.          CLC   =C'./ ',INRECORD   ARE WE DONE WITH PARM CARDS?          00101000
  110.          BE    JCLPROC               YES, GO PROCESS JCL TABLE          00102000
  111.          MVC   MESSLINE(80),INRECORD NO, ECHO INPUT TO SYSLST           00103000
  112.          PUT   LIST,MESSAGE                                             00104000
  113.          CLC   BLANKS(72),INRECORD Blank card?                          00104100
  114.          BNE   NEXTPAR1      No, assume it's a parm card                00104200
  115.          LA    0,1           Yes, skip it entirely                      00104300
  116.          A     0,NRECBL                                                 00104400
  117.          ST    0,NRECBL      But count blank records                    00104500
  118.          B     NEXTPARM      Go get another record                      00104600
  119. NEXTPAR1 DS    0H                                                       00104700
  120.          CLI   INRECORD+8,C'='    DO WE HAVE A VALID CARD?              00105000
  121.          BNE   PARMEXIT           No, assume we're done with parms      00106000
  122.          CLC   =C'BASELIBR',INRECORD      SEE IF THIS IS BASE LIBRARY   00107000
  123.          BNE   NOTBASE                       NO, TRY SOMETHING ELSE     00108000
  124.          MVC   CONNECT+18(16),INRECORD+9  YES, MOVE IT INTO JCL TABLE   00109000
  125.          OI    LIBFLAG,X'01'              INDICATE IT WAS FOUND         00110000
  126.          B     NEXTPARM                   GO READ ANOTHER CARD          00111000
  127. NOTBASE  EQU   *                                                        00112000
  128.          CLC   =C'WORKLIBR',INRECORD      SEE IF THIS IS WORK LIBRARY   00113000
  129.          BNE   NOTWORK                       NO, TRY SOMETHING ELSE     00114000
  130.          MVC   CONNECT+35(16),INRECORD+9  YES, MOVE IT INTO JCL TABLE   00115000
  131.          MVC   ACCESS+17(16),INRECORD+9      IN TWO PLACES              00116000
  132.          OI    LIBFLAG,X'02'              INDICATE IT WAS FOUND         00117000
  133.          B     NEXTPARM                   GO READ ANOTHER CARD          00118000
  134. NOTWORK  EQU   *                                                        00119000
  135.          CLC   =C'LOCALSLI',INRECORD      IS THERE A POWER SLI CARD?    00120000
  136.          BNE   NOTSLI                        NO, TRY SOMETHING ELSE     00121000
  137.          MVC   SLI(13),=C'* $$ SLI MEM='  YES, CHANGE COMMENT TO SLI    00122000
  138.          MVC   SLI+13(17),INRECORD+9         AND PUT IN MEMBER NAME     00123000
  139.          B     NEXTPARM                   GO READ ANOTHER CARD          00124000
  140. NOTSLI   EQU   *                                                        00125000
  141.          CLC   =C'LOCALLST',INRECORD      IS THIS THE LOCAL LST CARD?   00126000
  142.          BNE   NOTLST                        NO, GO LOOK FOR MODNAMES   00127000
  143.          MVC   LSTCARD+9(JOBMX-9),INRECORD+9  YES, MOVE LST DATA        00128000
  144.          OI    LIBFLAG,X'04'              INDICATE LST FOUND            00129000
  145.          B     NEXTPARM            GO READ ANOTHER CARD                 00130000
  146. NOTLST   EQU   *                                                        00131000
  147.          LA    R3,INRECORD        OTHER POSSIBILITIES EXHAUSTED, THIS   00132000
  148.          LR    R2,R3                 BETTER BE A MODULE CARD            00133000
  149.          BAL   R14,DIGITVER          SO CHECK FOR START NUMBER          00134000
  150.          SR    R2,R3                                                    00135000
  151.          CH    R2,=H'8'           LENGTH 8 => PROPER NUMERIC STRING     00136000
  152.          BNE   NOPARM                NOPE                               00137000
  153.          MVC   STARTNUM,INRECORD        OKAY, MOVE START # TO TABLE     00138000
  154.          MVC   MODNAME,INRECORD+9       MOVE NAME TO TABLE              00139000
  155.          LA    R4,STTBLLEN(,R4)         POINT TO NEXT TABLE ENTRY       00140000
  156.          ST    R4,LSTMOD                UPDATE LAST-MODULE POINTER      00141000
  157.          LA    R5,1(,R5)                INCREMENT MODULE COUNTER        00142000
  158.          B     NEXTPARM                                                 00143000
  159.          DROP  R4                                                       00144000
  160. *********************************************************************** 00145000
  161. *   COPY JCL TABLE LINES TO SYSPCH                                      00146000
  162. *********************************************************************** 00147000
  163. PARMEXIT DS    0H                                                       00147200
  164.          MVI   MESSLINE,C' ' Clear message buffer                       00147260
  165.          MVC   MESSLINE+1(79),MESSLINE                                  00147320
  166.          MVC   MESSLINE(49),=C'PRECEDING INVALID CARD TERMINATES PARM P$00147400
  167.                ROCESSING'                                               00147600
  168.          PUT   LIST,MESSAGE                                             00147800
  169. JCLPROC  EQU   *                                                        00148000
  170.          TM    LIBFLAG,X'07' DID WE GET THE REQUIRED PARAMETERS?        00149000
  171.          BNO   NOPARM           NO, GO ABORT                            00150000
  172.          MVC   OUTREC,BLANKS       Clear output buffer                  00151000
  173.          LA    R3,JOBCARDS   Start of JCL table                         00152000
  174.          LTR   R5,R5         DID WE HAVE ANY MODULE CARDS IN DECK?      00153000
  175.          BZ    JCLLOOP          NO; LEAVE DEFAULT                       00154000
  176.          STH   R5,NUMMOD        YES; ADJUST COUNT                       00155000
  177. JCLLOOP  EQU   *                                                        00156000
  178.          MVC   OUTREC(JOBMX),0(R3) Copy a line to output                00157000
  179.          CLC   COPIES,OUTREC Reached list of COPY directives?           00158000
  180.          BNE   JCLWRITE      No, just write the record                  00159000
  181. *  Fill in names of modules in COPY directives                          00160000
  182.          L     R2,=A(STARTNUM)   Start of module table                  00161000
  183.          LH    R5,NUMMOD     Length of table (in entries)               00162000
  184. JCLLP1   DS    0H                                                       00163000
  185.          MVC   OUTREC+8(12),8(R2)    Copy module name                   00164000
  186.          LA    R4,OUTREC+8   Start of name                              00165000
  187.          LA    R4,1(,R4)                                                00166000
  188.          CLI   0(R4),C' '    Look for end of name                       00167000
  189.          BNE   *-8                                                      00168000
  190.          MVC   1(20,R4),=CL20'REPLACE=YES'                              00169000
  191.          PUT   OUTFILE                                                  00170000
  192.          LA    R2,STTBLLEN(,R2)                                         00171000
  193.          BCT   R5,JCLLP1                                                00172000
  194.          B     JCLLP2        Finished COPY directives                   00173000
  195. JCLWRITE DS    0H                                                       00174000
  196.          PUT   OUTFILE               PUNCH IT OUT                       00175000
  197. JCLLP2   DS    0H                                                       00176000
  198.          LA    R3,JOBMX(,R3)       Point to next line                   00177000
  199.          CLC   =C'EOD',0(R3)       CHECK FOR END OF TABLE               00178000
  200.          BNE   JCLLOOP             Not yet, keep copying                00179000
  201.          B     PROCESS             Go process first update card         00180000
  202. *                                                                       00181000
  203. *********************************************************************** 00182000
  204. *   PROCESS UPDATE LINES                                                00183000
  205. *********************************************************************** 00184000
  206. SKIPBLNK LA    0,1                                                      00184200
  207.          A     0,NRECBL                                                 00184400
  208.          ST    0,NRECBL      Count blank records                        00184600
  209. *          Main loop - read a control card                              00185000
  210. CTLP     DS    0H                                                       00186000
  211.          LA    0,1                                                      00186200
  212.          A     0,NRECIN                                                 00186400
  213.          ST    0,NRECIN      Count input records                        00186600
  214.          GET   INPFILE            READ NEXT LINE                        00187000
  215.          CLC   BLANKS(72),INRECORD Blank card?                          00187300
  216.          BE    SKIPBLNK            Yes, skip it                         00187600
  217.          CLC   =C'./ ',INRECORD    Control card?                        00188000
  218.          BNE   BADDECK             No, too bad                          00189000
  219. *                                                                       00190000
  220. *          Process an editing card                                      00191000
  221. PROCESS  EQU   *                                                        00192000
  222.          LA    R2,INRECORD+3       Start after control indicator        00193000
  223.          LA    R8,SYNTAX           Error handler for running off end    00194000
  224.          BAL   R14,BLNKSKIP        Find command code                    00195000
  225.          MVC   CMD,0(R2)           Save code                            00196000
  226.          CLI   1(R2),C' '          Should be 1 char                     00197000
  227.          BNE   SYNTAX              No, bad syntax                       00198000
  228.          CLI   CMD,C'*'            Comment?                             00199000
  229.          BE    CTLP                Yes, ignore it                       00200000
  230.          LA    R2,2(,R2)           Skip over command code               00201000
  231.          BAL   R8,ARGLOAD          Get a numeric argument               00202000
  232.           B    SYNTAX              Missing, too bad                     00203000
  233.          UNPK  FRSTLINE,ARGNO      Get zoned copy                       00204000
  234.          MVC   LASTLINE,BLANKS     Blank out last line as default       00205000
  235.          BAL   R8,ARGLOAD          Get 2nd numeric argument, if any     00206000
  236.           B    PROCES2             Just one card                        00207000
  237.          UNPK  LASTLINE,ARGNO      Get zoned copy of last line          00208000
  238.          BAL   R8,ARGLOAD          Should be followed by '$' (or end)   00209000
  239.           B    PROCES2             Ok                                   00210000
  240.          B     SYNTAX              Oops, extra number there             00211000
  241. PROCES2  DS    0H                                                       00212000
  242.          CLI   CMD,C'D'                                                 00213000
  243.          BE    NOSEQ               Done if delete                       00214000
  244.          LA    R2,1(,R2)           Skip over '$'                        00215000
  245.          BAL   R8,ARGLOAD          Get output line number, if any       00216000
  246.           B    SYNTAX              Not given, too bad                   00217000
  247.          MVC   LINENUM,ARGNO       FIRST NUMBER SHOULD BE START LINE #  00218000
  248.          BAL   R8,ARGLOAD          Get increment value, if any          00219000
  249.           B    SYNTAX              Not given, too bad                   00220000
  250.          MVC   INCRMENT,ARGNO      Ok, use it                           00221000
  251. NOSEQ    EQU   *                                                        00222000
  252.          BAL   R8,MODSRCH          GO FIND OUT NAME OF MODULE           00223000
  253.          MVC   OUTREC,BLANKS       Clear output buffer                  00224000
  254.          CLI   FRSTFLAG,X'FF'      SEE IF THIS IS FIRST TIME THROUGH    00225000
  255.          BE    FIRST               YES                                  00226000
  256.          CLC   MODOLD,MODULE       Same module?                         00227000
  257.          BNE   SWITCH              No, start new update                 00228000
  258.          CLC   LASTOLD,FRSTLINE    Later in same module?                00229000
  259.          BL    CONTINUE            Yes, keep same update                00230000
  260. SWITCH   DS    0H                                                       00231000
  261.          MVC   OUTREC(4),=C')END'  NO, TERMINATE PREVIOUS UPDATE        00232000
  262.          PUT   OUTFILE                                                  00233000
  263. FIRST    EQU   *                                                        00234000
  264.          XC    FRSTFLAG,FRSTFLAG   CLEAR LOOP TAG FOR FUTURE TESTS      00235000
  265.          MVC   OUTREC(10),=C'   UPDATE '  SET UP VSE LIBR DIRECTIVE     00236000
  266.          MVC   OUTREC+10(12),MODULE       SUPPLY MODULE NAME            00237000
  267.          MVC   OUTREC+22(14),=C',SE=FS,C=73:80'  LINE SEQUENCING INFO   00238000
  268.          PUT   OUTFILE             WRITE OUTPUT RECORD                  00239000
  269.          MVC   MODOLD,MODULE       Save for comparison next time        00240000
  270. CONTINUE DS    0H                                                       00241000
  271.          MVC   LASTOLD,FRSTLINE    Ditto                                00242000
  272.          MVC   OUTREC,BLANKS       Clear output buffer                  00243000
  273.          MVC   OUTREC+5(8),FRSTLINE   PUT IN LOCATION WHERE IT STARTS   00244000
  274. *    NOW SEE WHAT TYPE OF UPDATE IT IS                                  00245000
  275. ICHECK   EQU   *                                                        00246000
  276.          CLI   CMD,C'I'            Insert?                              00247000
  277.          BNE   DCHECK              NO, GO CHECK FOR DELETION            00248000
  278.          MVC   OUTREC(4),=C')ADD'  YES, SET UP VSE LIBR FORM            00249000
  279.          B     PUTCMND             GO WRITE IT OUT                      00250000
  280. DCHECK   EQU   *                                                        00251000
  281. *          Now must be D or R, so copy end of range                     00252000
  282.          MVI   OUTREC+13,C','      Delimiter and                        00253000
  283.          MVC   OUTREC+14(8),LASTLINE  Location of end of range          00254000
  284.          CLI   CMD,C'D'            Delete?                              00255000
  285.          BNE   RCHECK              NO, GO CHECK FOR REPLACEMENT         00256000
  286.          MVC   OUTREC(4),=C')DEL'  YES, SET UP VSE LIBR FORM            00257000
  287.          B     PUTCMND             GO WRITE IT OUT                      00258000
  288. RCHECK   EQU   *                                                        00259000
  289.          CLI   CMD,C'R'            Replace?                             00260000
  290.          BNE   SYNTAX              NO, ERROR                            00261000
  291.          MVC   OUTREC(4),=C')REP'  YES, SET UP VSE LIBR FORM            00262000
  292. PUTCMND  EQU   *                                                        00263000
  293.          PUT   OUTFILE             WRITE UPDATE DIRECTIVE OUT           00264000
  294. *    NOW GET THE UPDATE LINES THEMSELVES                                00265000
  295. LINELOOP EQU   *                                                        00266000
  296.          LA    0,1                                                      00266200
  297.          A     0,NRECIN                                                 00266400
  298.          ST    0,NRECIN      Count input records                        00266600
  299.          GET   INPFILE             GET ANOTHER INPUT LINE               00267000
  300.          CLC   =C'./ ',INRECORD    Control card?                        00268000
  301.          BE    PROCESS             YES, PREVIOUS UPDATES ARE FINISHED   00269000
  302.          CLC   BLANKS(72),INRECORD Blank card?                          00269100
  303.          BNE   LINELOO1      No, must be new data                       00269200
  304.          LA    0,1           Yes, skip it entirely                      00269300
  305.          A     0,NRECBL                                                 00269400
  306.          ST    0,NRECBL      But count blank records                    00269500
  307.          B     LINELOOP      Go get another record                      00269600
  308. LINELOO1 DS    0H                                                       00269700
  309.          UNPK  ZONEHOLD,LINENUM    NO, UNPACK CURRENT LINE NUMBER       00270000
  310.          OI    ZONEHOLD+7,X'F0'    GET RID OF ZONED DECIMAL SIGN        00271000
  311.          MVC   OUTREC,INRECORD     COPY RECORD                          00272000
  312.          MVC   OUTREC+72(8),ZONEHOLD  AND OVERLAY LINE SEQUENCE NUMBER  00273000
  313.          PUT   OUTFILE             WRITE OUTPUT RECORD                  00274000
  314.          MVC   LASTOLD,ZONEHOLD    Latest line put out                  00275000
  315.          AP    LINENUM,INCRMENT    INCREMENT LINE NUMBER FOR NEXT PASS  00276000
  316.          B     LINELOOP            GO GET ANOTHER LINE                  00277000
  317. *    END OF INPUT FILE REACHED                                          00278000
  318. A100     EQU   *                                                        00279000
  319.          MVC   OUTREC,BLANKS       Clear output buffer                  00280000
  320.          MVC   OUTREC(4),=C')END'  TERMINATE PREVIOUS UPDATE            00281000
  321.          PUT   OUTFILE                AND WRITE IT OUT                  00282000
  322.          MVC   OUTREC,BLANKS       Clear output buffer                  00283000
  323. *    WRITE TERMINATION SEQUENCE TO GENERATED JOB                        00284000
  324.          MVC   OUTREC(2),=C'/*'                                         00285000
  325.          PUT   OUTFILE                                                  00286000
  326.          MVC   OUTREC(2),=C'/&&'                                        00287000
  327.          PUT   OUTFILE                                                  00288000
  328.          MVC   OUTREC(8),=C'* $$ EOJ'                                   00289000
  329.          PUT   OUTFILE                                                  00290000
  330. EOJ      EQU   *                                                        00291000
  331.          BAL   R8,PRNTSKIP   Print number of skipped records, if any    00291500
  332.          CLOSE INPFILE,OUTFILE,LIST                                     00292000
  333.          EOJ                                                            00293000
  334. *                                                                       00294000
  335. *          Find name of module to be updated                            00295000
  336. MODSRCH  EQU   *                                                        00296000
  337.          LH    R7,NUMMOD           Number of entries in table           00297000
  338.          L     R2,LSTMOD           End of table                         00298000
  339. MODLOOP  EQU   *                                                        00299000
  340.          SH    R2,=Y(STTBLLEN)     Back up one entry                    00300000
  341.          CLC   0(8,R2),FRSTLINE     COMPARE START LINE TO CURRENT ENTRY 00301000
  342.          BNH   FOUND               ENTRY L.E. => THIS IS THE ONE        00302000
  343.          BCT   R7,MODLOOP          DECREMENT INDEX                      00303000
  344. NOTFOUND EQU   *                                                        00304000
  345.          XC    MODULE,MODULE       ZERO VALUE INDICATES ERROR           00305000
  346.          MVC   MESSLINE,BLANKS Clear message buffer                     00305500
  347.          MVC   MESSLINE(21),=C'MODULE NAME NOT FOUND'                   00306000
  348.          PUT   LIST,MESSAGE                                             00307000
  349.          MVC   MESSLINE(80),INRECORD                                    00308000
  350.          PUT   LIST,MESSAGE                                             00309000
  351.          BR    R8                  RETURN TO CALLER                     00310000
  352. FOUND    EQU   *                                                        00311000
  353.          MVC   MODULE,8(R2)        Copy module name from table          00312000
  354.          BR    R8                 RETURN TO CALLER                      00313000
  355. *          Table of starting line numbers and module names              00314000
  356. *                                                                       00315000
  357. *          Find next numeric field in card, skip if ok                  00316000
  358. *          Clobbers R3, R14.  Returns via R8.  Advances R2              00317000
  359. ARGLOAD  DS    0H                                                       00318000
  360.          BAL   R14,BLNKSKIP                                             00319000
  361.          LR    R3,R2                                                    00320000
  362.          CLI   0(R3),C'0'          Numeric?                             00321000
  363.          BLR   R8                  No, return without skipping          00322000
  364.          BAL   R14,DIGITVER                                             00323000
  365.          BCTR  R2,0                Last char                            00324000
  366.          SR    R2,R3               Count - 1                            00325000
  367.          EX    R2,PCKA                                                  00326000
  368.          OI    ARGNO+4,15          Fix sign, just in case               00327000
  369.          LA    R2,1(R2,R3)         RESTORE POINTER TO END + 1           00328000
  370.          B     4(,R8)              Return and skip                      00329000
  371. PCKA     PACK  ARGNO,0(,R3)        Get packed decimal                   00330000
  372. *          Scan R2 until it reaches a non-blank character               00331000
  373. BLNKSKIP EQU   *                                                        00332000
  374.          CLI   0(R2),C' '                                               00333000
  375.          BNER  R14                                                      00334000
  376.          LA    R2,1(,R2)                                                00335000
  377.          C     R2,=A(INRECORD+50)  Off the end?                         00336000
  378.          BNLR  R8                  Yes, go to error handler             00337000
  379.          B     BLNKSKIP                                                 00338000
  380. *          Scan R2 until it reaches a non-numeric character             00339000
  381. DIGITVER EQU   *                                                        00340000
  382.          CLI   0(R2),C'0'                                               00341000
  383.          BLR   R14                                                      00342000
  384.          CLI   0(R2),C'9'                                               00343000
  385.          BHR   R14                                                      00344000
  386.          LA    R2,1(,R2)                                                00345000
  387.          C     R2,=A(INRECORD+50)  Off the end?                         00346000
  388.          BNLR  R8                  Yes, go to error handler             00347000
  389.          B     DIGITVER                                                 00348000
  390. PRNTSKIP ICM   0,15,NRECBL   Test count of blank records                00348100
  391.          BZR   R8                                                       00348200
  392.          MVC   MESSLINE,BLANKS Clear message buffer                     00348300
  393.          MVC   MESSLINE(29),=C'BLANK INPUT RECORDS IGNORED: '           00348400
  394.          CVD   0,TEMPDW                                                 00348500
  395.          OI    TEMPDW+7,15                                              00348600
  396.          UNPK  MESSLINE+29(5),TEMPDW                                    00348700
  397.          PUT   LIST,MESSAGE                                             00348800
  398.          BR    R8                                                       00348900
  399. BADDECK  EQU   *                                                        00349000
  400.          MVC   MESSLINE,BLANKS Clear message buffer                     00349500
  401.          MVC   MESSLINE(34),=C'OUT-OF-SEQUENCE STATEMENT AT LINE '      00350000
  402.          L     0,NRECIN      Input record count                         00350100
  403.          CVD   0,TEMPDW                                                 00350200
  404.          OI    TEMPDW+7,15                                              00350300
  405.          UNPK  MESSLINE+34(5),TEMPDW                                    00350400
  406.          PUT   LIST,MESSAGE                                             00351000
  407.          MVC   MESSLINE(80),INRECORD                                    00352000
  408.          PUT   LIST,MESSAGE                                             00353000
  409.          B     EOJ                                                      00354000
  410. NOPARM   EQU   *                                                        00355000
  411.          MVC   MESSLINE,BLANKS                                          00355500
  412.          MVC   MESSLINE(26),=C'MISSING OR INVALID PARM(S)'              00356000
  413.          PUT   LIST,MESSAGE                                             00357000
  414.          B     EOJ                                                      00358000
  415. SYNTAX   DS    0H                                                       00359000
  416.          MVC   MESSLINE,BLANKS                                          00359500
  417.          MVC   MESSLINE(33),=C'INVALID UPDATE STATEMENT AT LINE '       00360000
  418.          L     0,NRECIN      Input record count                         00360100
  419.          CVD   0,TEMPDW                                                 00360200
  420.          OI    TEMPDW+7,15                                              00360300
  421.          UNPK  MESSLINE+33(5),TEMPDW                                    00360400
  422.          MVI   MESSLINE+38,C':'                                         00360500
  423.          PUT   LIST,MESSAGE                                             00361000
  424.          MVC   MESSLINE(80),INRECORD                                    00362000
  425.          PUT   LIST,MESSAGE                                             00363000
  426.          B     CTLP                                                     00364000
  427. INPERROR EQU   *                                                        00365000
  428.          MVC   MESSLINE(19),=C'ERROR ON INPUT FILE'                     00366000
  429.          PUT   LIST,MESSAGE                                             00367000
  430.          BAL   R8,PRNTSKIP   Print number of skipped records, if any    00367500
  431. ABORT    SVC   50                                                       00368000
  432. *                                                                       00369000
  433. TEMPDW   DS    D             Work area                                  00369300
  434. NRECBL   DS    F             Counter for input blank records            00369400
  435. NRECIN   DS    F             Input record counter                       00369600
  436. LSTMOD   DS    F                                                        00370000
  437. NUMMOD   DS    H                                                        00371000
  438. LIBFLAG  DC    X'00'                                                    00372000
  439. MODULE   DS    CL12         NAME OF MODULE TO WHICH UPDATE LINES APPLY  00373000
  440. ZONEHOLD DS    CL8          PLACE TO HOLD ZONED DECIMAL NUMBERS         00374000
  441. MODOLD   DS    CL12          Saved MODULE from previous control group   00375000
  442. LASTOLD  DS    CL8           Saved output line number from ditto        00376000
  443. ARGNO    DS    PL5           Number read from control card              00377000
  444. CMD      DS    C             Control command code                       00378000
  445. LINENUM  DS    PL5          STARTING LINE # FROM INPUT RECORD           00379000
  446. INCRMENT DS    PL5          INCREMENT VALUE FROM INPUT RECORD           00380000
  447. FRSTLINE DS    CL8           Line where changes start                   00381000
  448. LASTLINE DS    CL8           Last line to delete or replace             00382000
  449. INRECORD DS    CL81                                                     00383000
  450. OUTCARD  DS    0CL81                                                    00384000
  451.          DC    C'W'                                                     00385000
  452. OUTREC   DS    CL80         OUTPUT WORK AREA                            00386000
  453. FRSTFLAG DC    X'FF'                                                    00387000
  454. MESSAGE  DC    C' '                                                     00388000
  455. MESSLINE DC    CL132' '                                                 00389000
  456. BLANKS   DC    132C' '                                                  00390000
  457.          LTORG                                                          00391000
  458. JOBMX    EQU   60                  Maximum length string below          00392000
  459. JOBCARDS EQU   *                                                        00393000
  460. LSTCARD  DC    CL(JOBMX)'* $$ LST '                                     00394000
  461.          DC    CL(JOBMX)'// JOB APPLY KERMIT UPDATES'                   00395000
  462. SLI      DC    CL(JOBMX)'*'                                             00396000
  463.          DC    CL(JOBMX)'// EXEC LIBR'                                  00397000
  464. CONNECT  DC    CL(JOBMX)'   CONNECT SUBLIB=                :'           00398000
  465. COPIES   DC    CL(JOBMX)'   COPY'      This card is to be duplicated    00399000
  466.          DC    CL(JOBMX)'/*'                                            00400000
  467.          DC    CL(JOBMX)'// EXEC LIBR'                                  00401000
  468. ACCESS   DC    CL(JOBMX)'   ACCESS SUBLIB='                             00402000
  469.          DC    C'EOD'                                                   00403000
  470. *    INPUT AND OUTPUT FILES                                             00404000
  471. INPFILE  DTFDI DEVADDR=SYSIPT,IOAREA1=INRECORD,RECSIZE=81,EOFADDR=A100,X00405000
  472.                ERROPT=INPERROR                                          00406000
  473. OUTFILE  DTFDI DEVADDR=SYSPCH,IOAREA1=OUTCARD,RECSIZE=81                00407000
  474. LIST     DTFPR DEVADDR=SYSLST,CTLCHR=ASA,BLKSIZE=133,WORKA=YES,        X00408000
  475.                IOAREA1=AREA                                             00409000
  476. AREA     DS    CL133                                                    00410000
  477. IKXTMODS CSECT                                                          00411000
  478. STARTNUM DC    CL8'00001000'                                            00412000
  479. MODNAME  DC    CL12'IK0DOC.A'                                           00413000
  480. STTBLLEN EQU   *-STARTNUM          Length of one entry                  00414000
  481.          DC    CL8'00300000',CL12'IK0MAC.A'                             00415000
  482.          DC    CL8'00800000',CL12'IKXMAC.A'                             00416000
  483.          DC    CL8'01400000',CL12'IK0DEF.A'                             00417000
  484.          DC    CL8'01500000',CL12'IK0MAI.A'                             00418000
  485.          DC    CL8'01800000',CL12'IK0COM.A'                             00419000
  486.          DC    CL8'03000000',CL12'IK0CMD.A'                             00420000
  487.          DC    CL8'05000000',CL12'IKXUTL.A'                             00421000
  488.          DC    CL8'07000000',CL12'IK0PRO.A'                             00422000
  489. STARTEND EQU   *                                                        00423000
  490. MODCOUNT EQU   (*-STARTNUM)/STTBLLEN                                    00424000
  491.          DS    100CL(STTBLLEN)                                          00425000
  492.          END                                                            00426000
  493.