         TITLE 'IEFJJCLS JCL TO JCLS CONVERTER                       '  00001000
IEFJJCLS CSECT ,                                                   0001 00002000
@MAINENT DS    0H                                                  0001 00003000
         USING *,@15                                               0001 00004000
         B     @PROLOG                                             0001 00005000
         DC    AL1(16)                                             0001 00006000
         DC    C'IEFJJCLS  72.323'                                 0001 00007000
         DROP  @15                                                      00008000
@PROLOG  STM   @14,@12,12(@13)                                     0001 00009000
         BALR  @12,0                                               0001 00010000
@PSTART  DS    0H                                                  0001 00011000
         USING @PSTART,@12                                         0001 00012000
         L     @00,@SIZDATD                                        0001 00013000
         GETMAIN R,LV=(0)                                               00014000
         LR    @11,@01                                             0001 00015000
         USING @DATD,@11                                           0001 00016000
         LM    @00,@01,20(@13)                                     0001 00017000
         MVC   @PC00001(8),0(@01)                                  0001 00018000
*                                                                  0003 00019000
*   /*****************************************************************/ 00020000
*   /*                                                               */ 00021000
*   /* TEST THE CONTENTS OF INJCL                                    */ 00022000
*   /*                                                               */ 00023000
*   /*****************************************************************/ 00024000
*                                                                  0003 00025000
*   IF INJCL=0 THEN                 /* CHECK FOR ZERO PARM           */ 00026000
         L     @10,@PC00001                                        0003 00027000
         ICM   @00,15,INJCL(@10)                                   0003 00028000
         BNZ   @RF00003                                            0003 00029000
*     GEN(ABEND 177,,,SYSTEM);      /* IF ZERO THEN ABEND            */ 00030000
         ABEND 177,,,SYSTEM                                             00031000
*   OUTJCLS=0;                      /* ZERO OUT PTR TO JCLS          */ 00032000
@RF00003 SR    @10,@10                                             0005 00033000
         L     @05,@PC00001+4                                      0005 00034000
         ST    @10,OUTJCLS(,@05)                                   0005 00035000
*   FRSTPASS=ON;                    /* INDICATE FIRST PASS           */ 00036000
         OI    FRSTPASS,B'10000000'                                0006 00037000
*   RETCD=0;                        /* SET RETURN CODE=0             */ 00038000
         LR    RETCD,@10                                           0007 00039000
*   WORKPTR=INJCL;                  /* SET WORKPTR TO SCAN THRU THE     00040000
*                                      JCL DATA SET                  */ 00041000
*                                                                  0008 00042000
         L     @10,@PC00001                                        0008 00043000
         L     WORKPTR,INJCL(,@10)                                 0008 00044000
*   /*****************************************************************/ 00045000
*   /*                                                               */ 00046000
*   /* START TO BUILD THE JCLS AS LONG AS YOU DON'T HIT A EOF NULL   */ 00047000
*   /* CARD AND AS LONG AS THE FIRST TWO CHARS OF THE JCL ARE "//"   */ 00048000
*   /* (VALID JCL STARTS WITH A "//")                                */ 00049000
*   /*                                                               */ 00050000
*   /*****************************************************************/ 00051000
*                                                                  0009 00052000
*   DO WHILE(JCLMSG(1:72)^=EOF1)&(JCLMSG(1:72)^=EOF2)&(JCLMSG(1:2)=SS); 00053000
         B     @DE00009                                            0009 00054000
@DL00009 DS    0H                                                  0010 00055000
*     GEN(GETMAIN R,LV=88,SP=253);  /* GET 88 BYTES FOR JCLS         */ 00056000
         GETMAIN R,LV=88,SP=253                                         00057000
*     GETMNADD=R1;                  /* SAVE ADDR OF GOTTEN CORE      */ 00058000
         LR    GETMNADD,R1                                         0011 00059000
*     FILLER=0;                     /* ZERO OUT FRST 8 BYTES         */ 00060000
         SR    @10,@10                                             0012 00061000
         ST    @10,FILLER(,GETMNADD)                               0012 00062000
*     NXTPTR=0;                     /* TO INDICATE LAST REC          */ 00063000
         ST    @10,NXTPTR(,GETMNADD)                               0013 00064000
*     IF FRSTPASS=ON THEN           /* CHECK FOR FRST PASS           */ 00065000
         TM    FRSTPASS,B'10000000'                                0014 00066000
         BNO   @RF00014                                            0014 00067000
*       DO;                         /* FOR THE FIRST PASS            */ 00068000
*         FRSTPASS=OFF;             /* TURN OFF SWITCH               */ 00069000
         NI    FRSTPASS,B'01111111'                                0016 00070000
*         PTRSAVE=GETMNADD;         /* SAVE THE ADDR OF THE GOTTEN 0017 00071000
*                                      AREA FOR CHAIN- ING THE JCLS  */ 00072000
         ST    GETMNADD,PTRSAVE                                    0017 00073000
*         OUTJCLS=GETMNADD;         /* SET THE 2ND WORD OF THE PARM     00074000
*                                      LIST TO THE ADDR OF THE GOTTEN   00075000
*                                      AREA                          */ 00076000
         L     @10,@PC00001+4                                      0018 00077000
         ST    GETMNADD,OUTJCLS(,@10)                              0018 00078000
*       END;                                                       0019 00079000
*     ELSE                          /* ON ALL OTHER PASSES           */ 00080000
*       DO;                                                        0020 00081000
         B     @RC00014                                            0020 00082000
@RF00014 DS    0H                                                  0021 00083000
*         FWDPTR=GETMNADD;          /* CHAIN NEW WITH LAST           */ 00084000
         L     @10,PTRSAVE                                         0021 00085000
         ST    GETMNADD,FWDPTR(,@10)                               0021 00086000
*         PTRSAVE=GETMNADD;         /* UPDATE SAVE AREA FOR          */ 00087000
         ST    GETMNADD,PTRSAVE                                    0022 00088000
*       END;                        /* CHAINING OF NEXT REC          */ 00089000
*     OUTJCL=JCLMSG;                /* MOVE JCL TO GOTTEN AREA       */ 00090000
@RC00014 MVC   OUTJCL(80,GETMNADD),JCLMSG(WORKPTR)                 0024 00091000
*     WORKPTR=WORKPTR+80;           /* POINT TO NEXT REC IN THE JCL     00092000
*                                      DATA SET                      */ 00093000
         AH    WORKPTR,@CH00037                                    0025 00094000
*   END;                                                           0026 00095000
*                                                                  0026 00096000
@DE00009 CLC   JCLMSG(72,WORKPTR),EOF1                             0026 00097000
         BE    @DC00009                                            0026 00098000
         CLC   JCLMSG(72,WORKPTR),EOF2                             0026 00099000
         BE    @DC00009                                            0026 00100000
         CLC   JCLMSG(2,WORKPTR),SS                                0026 00101000
         BE    @DL00009                                            0026 00102000
@DC00009 DS    0H                                                  0027 00103000
*   /*****************************************************************/ 00104000
*   /*                                                               */ 00105000
*   /* TEST WHY PROCESSING STOPPED. IF IT WAS BECAUSE THE FIRST TWO  */ 00106000
*   /* CHARS OF THE JCL WERE NOT "//" THEN BREAK THE JCLS CHAIN AND  */ 00107000
*   /* CHANGE THE RETURN CODE TO FOUR.                               */ 00108000
*   /*                                                               */ 00109000
*   /*****************************************************************/ 00110000
*                                                                  0027 00111000
*   IF(JCLMSG(1:72)^=EOF1)&(JCLMSG(1:72)^=EOF2)THEN                0027 00112000
         CLC   JCLMSG(72,WORKPTR),EOF1                             0027 00113000
         BE    @RF00027                                            0027 00114000
         CLC   JCLMSG(72,WORKPTR),EOF2                             0027 00115000
         BE    @RF00027                                            0027 00116000
*     DO;                                                          0028 00117000
*       OUTJCLS=0;                  /* BREAK THE JCLS CHAIN BY     0029 00118000
*                                      ZEROING THE FRSTPTR           */ 00119000
         L     @10,@PC00001+4                                      0029 00120000
         SR    @05,@05                                             0029 00121000
         ST    @05,OUTJCLS(,@10)                                   0029 00122000
*       RETCD=4;                    /* RETURN WITH A RETURN CODE OF     00123000
*                                      FOUR                          */ 00124000
         LA    RETCD,4                                             0030 00125000
*     END;                                                         0031 00126000
*   RETURN CODE(RETCD);             /* SEND RETURN CODE              */ 00127000
@RF00027 L     @00,@SIZDATD                                        0032 00128000
         LR    @01,@11                                             0032 00129000
         FREEMAIN R,LV=(0),A=(1)                                        00130000
         LR    @15,@04                                             0032 00131000
         L     @14,12(,@13)                                        0032 00132000
         LM    @00,@12,20(@13)                                     0032 00133000
         BR    @14                                                 0032 00134000
*   END IEFJJCLS;                   /* END IEFJJCLS                  */ 00135000
@EL00001 DS    0H                                                  0033 00136000
@EF00001 L     @00,@SIZDATD                                        0033 00137000
         LR    @01,@11                                             0033 00138000
         FREEMAIN R,LV=(0),A=(1)                                        00139000
@ER00001 LM    @14,@12,12(@13)                                     0033 00140000
         BR    @14                                                 0033 00141000
@DATA    DS    0H                                                       00142000
@CH00037 DC    H'80'                                                    00143000
@DATD    DSECT                                                          00144000
         DS    0F                                                       00145000
@PC00001 DS    2F                                                       00146000
IEFJJCLS CSECT                                                          00147000
         DS    0F                                                       00148000
@DATD    DSECT                                                          00149000
         DS    0D                                                       00150000
PTRSAVE  DS    A                                                        00151000
FRSTPASS DS    BL1                                                      00152000
@ENDDATD EQU   *                                                        00153000
IEFJJCLS CSECT                                                          00154000
         DS    0F                                                       00155000
@SIZDATD DC    AL1(0)                                                   00156000
         DC    AL3(@ENDDATD-@DATD)                                      00157000
         DS    0D                                                       00158000
EOF1     DS    CL72                                                     00159000
         ORG   EOF1                                                     00160000
SS       DC    CL2'//'                                                  00161000
@NM00001 DC    CL70' '                                                  00162000
         ORG   EOF1+72                                                  00163000
EOF2     DS    CL72                                                     00164000
         ORG   EOF2                                                     00165000
SA       DC    CL2'/*'                                                  00166000
@NM00002 DC    CL70' '                                                  00167000
         ORG   EOF2+72                                                  00168000
PATCH    DC    X'00'                                                    00169000
         DS    15XL1                                                    00170000
@00      EQU   00                      EQUATES FOR REGISTERS 0-15       00171000
@01      EQU   01                                                       00172000
@02      EQU   02                                                       00173000
@03      EQU   03                                                       00174000
@04      EQU   04                                                       00175000
@05      EQU   05                                                       00176000
@06      EQU   06                                                       00177000
@07      EQU   07                                                       00178000
@08      EQU   08                                                       00179000
@09      EQU   09                                                       00180000
@10      EQU   10                                                       00181000
@11      EQU   11                                                       00182000
@12      EQU   12                                                       00183000
@13      EQU   13                                                       00184000
@14      EQU   14                                                       00185000
@15      EQU   15                                                       00186000
RETCD    EQU   @04                                                      00187000
GETMNADD EQU   @03                                                      00188000
WORKPTR  EQU   @02                                                      00189000
R1       EQU   @01                                                      00190000
JCLMSG   EQU   0                                                        00191000
JCLSOUT  EQU   0                                                        00192000
NXTPTR   EQU   JCLSOUT                                                  00193000
FILLER   EQU   JCLSOUT+4                                                00194000
OUTJCL   EQU   JCLSOUT+8                                                00195000
SAVEIT   EQU   0                                                        00196000
FWDPTR   EQU   SAVEIT                                                   00197000
INJCL    EQU   0                                                        00198000
OUTJCLS  EQU   0                                                        00199000
@ENDDATA EQU   *                                                        00200000
         END   IEFJJCLS                                                 00201000
