         TITLE 'IEFDSLST - DATA SET ENQ PARM LIST BUILDER            '  00001000
IEFDSLST CSECT ,                                                   0001 00002000
@MAINENT DS    0H                                                  0001 00003000
         USING *,@15                                               0001 00004000
         B     @PROLOG                                             0001 00005000
         DC    AL1(16)                                             0001 00006000
         DC    C'IEFDSLST  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
         ST    @13,@SA00001+4                                      0001 00017000
         LM    @00,@01,20(@13)                                     0001 00018000
         ST    @11,8(,@13)                                         0001 00019000
         LR    @13,@11                                             0001 00020000
*   PARMPTR=R1;                     /* SET UP PARAMETER POINTER      */ 00021000
         LR    PARMPTR,R1                                          0003 00022000
*   SAVETREE=TREEPTR;               /* SAVE THE TREE POINTER         */ 00023000
         L     @10,TREEPTR(,PARMPTR)                               0004 00024000
         LR    SAVETREE,@10                                        0004 00025000
*   INDEX=12*NUMBER;                /* INDEX CONTAINS NUMBER OF BYTES   00026000
*                                      PAST BUILD AREA TO PUT FIRST     00027000
*                                      DATA SET NAME                 */ 00028000
         L     INDEX,NUMBER(,PARMPTR)                              0005 00029000
         MH    INDEX,@CH00079                                      0005 00030000
*   INDEX=INDEX+BUILD;              /* INDEX NOW POINTS TO PAST BUILD   00031000
*                                      AREA                          */ 00032000
         A     INDEX,BUILD(,PARMPTR)                               0006 00033000
*   CURRENT=ADDR(AREA);             /* SET CURRENT TO POINT TO FIRST    00034000
*                                      ENTRY                         */ 00035000
         LA    @05,AREA(,@10)                                      0007 00036000
         ST    @05,CURRENT(,@10)                                   0007 00037000
*                                                                  0008 00038000
*/*   THIS DO LOOP INDEXES THROUGH THE TREE AND                    0008 00039000
*     BUILDS THE ENQ PARAMETER LIST FOR ALL DATA SET               0008 00040000
*     ENTRYS IN THE TREE                                             */ 00041000
*                                                                  0008 00042000
*                                                                  0008 00043000
*   DO I=1 TO NUMBER;               /* FALL THROUGH IF NOT ZERO      */ 00044000
         LA    I,1                                                 0008 00045000
         B     @DE00008                                            0008 00046000
@DL00008 DS    0H                                                  0009 00047000
*     MAJORPTR=MAJOR;               /* SET MAJOR POINTER IN ENQ LIST    00048000
*                                      ENTRY                         */ 00049000
         L     @10,BUILD(,PARMPTR)                                 0009 00050000
         MVC   MAJORPTR(4,@10),MAJOR(PARMPTR)                      0009 00051000
*     MINORPTR=INDEX;               /* SET MINOR POINTER IN ENQ LIST    00052000
*                                      ENTRY                         */ 00053000
         ST    INDEX,MINORPTR(,@10)                                0010 00054000
*     LISTEND=0;                    /* INDICATE NOT END OF ENQ LIST  */ 00055000
         SR    @15,@15                                             0011 00056000
         STC   @15,LISTEND(,@10)                                   0011 00057000
*     LMINOR=DSLGH;                 /* PUT DATA SET LENGTH IN ENQ  0012 00058000
*                                      LIST                          */ 00059000
         L     @14,TREEPTR(,PARMPTR)                               0012 00060000
         L     @09,CURRENT(,@14)                                   0012 00061000
         MVC   LMINOR(1,@10),DSLGH(@09)                            0012 00062000
*     PARMCDS=ENQ|EXSHR;            /* PUT ENQ TYPE INDICATOR IN ENQ    00063000
*                                      LIST                          */ 00064000
         MVC   PARMCDS(1,@10),ENQ                                  0013 00065000
         OC    PARMCDS(1,@10),EXSHR(@09)                           0013 00066000
*     RETURN1=0;                    /* SET OTHER FIELD TO ZERO       */ 00067000
         STC   @15,RETURN1(,@10)                                   0014 00068000
*     MINORNME(1:DSLGH)=NEW;        /* MOVE IN DATA SET NAME         */ 00069000
         L     @08,BUILD(,PARMPTR)                                 0015 00070000
         L     @08,MINORPTR(,@08)                                  0015 00071000
         L     @15,TREEPTR(,PARMPTR)                               0015 00072000
         L     @15,CURRENT(,@15)                                   0015 00073000
         SR    @07,@07                                             0015 00074000
         IC    @07,DSLGH(,@15)                                     0015 00075000
         BCTR  @07,0                                               0015 00076000
         EX    @07,@SM00083                                        0015 00077000
*     INDEX=INDEX+DSLGH;            /* SET INDEX TO NEXT MINOR NAME     00078000
*                                      AREA                          */ 00079000
         SR    @08,@08                                             0016 00080000
         IC    @08,DSLGH(,@09)                                     0016 00081000
         AR    INDEX,@08                                           0016 00082000
*     BUILD=BUILD+12;               /* INDEX BUILD TO NEXT DATA SET     00083000
*                                      ENQ BUILD AREA                */ 00084000
         AH    @10,@CH00079                                        0017 00085000
         ST    @10,BUILD(,PARMPTR)                                 0017 00086000
*     CURRENT=CURRENT+7+DSLGH;      /* UPDATE CURRENT TO NEXT ENTRY     00087000
*                                      TO TREE                       */ 00088000
*                                                                  0018 00089000
         AH    @09,@CH00082                                        0018 00090000
         AR    @09,@08                                             0018 00091000
         ST    @09,CURRENT(,@14)                                   0018 00092000
*     /***************************************************************/ 00093000
*     /*                                                             */ 00094000
*     /* IF FOXES THEN END OF TREE SEGMENT                           */ 00095000
*     /*                                                             */ 00096000
*     /***************************************************************/ 00097000
*                                                                  0019 00098000
*     IF SVA=FOXES THEN                                            0019 00099000
         CLC   SVA(4,@09),FOXES                                    0019 00100000
         BNE   @RF00019                                            0019 00101000
*       DO;                                                        0020 00102000
*         TREEPTR=TREE2;            /* REBASE THE TREE TO NEXT     0021 00103000
*                                      SEGMENT                       */ 00104000
         L     @10,TREE2(,@14)                                     0021 00105000
         ST    @10,TREEPTR(,PARMPTR)                               0021 00106000
*         CURRENT=ADDR(AREA);       /* SET CURRENT TO POINT TO FIRST    00107000
*                                      ENTRY IN THIS SEGMENT         */ 00108000
         LA    @00,AREA(,@10)                                      0022 00109000
         ST    @00,CURRENT(,@10)                                   0022 00110000
*       END;                                                       0023 00111000
*   END;                                                           0024 00112000
@RF00019 AH    I,@CH00043                                          0024 00113000
@DE00008 C     I,NUMBER(,PARMPTR)                                  0024 00114000
         BNH   @DL00008                                            0024 00115000
*   BUILD=BUILD-12;                 /* SET BUILD TO POINT TO LAST  0025 00116000
*                                      ENTRY IN ENQ LIST             */ 00117000
         L     @10,BUILD(,PARMPTR)                                 0025 00118000
         SH    @10,@CH00079                                        0025 00119000
         ST    @10,BUILD(,PARMPTR)                                 0025 00120000
*   LISTEND=FOXFOX;                 /* SET END OF ENQ LIST INDICATOR */ 00121000
         MVC   LISTEND(1,@10),FOXFOX                               0026 00122000
*   TREEPTR=SAVETREE;               /* SET TREE POINTER TO FIRST   0027 00123000
*                                      SEGMENT                       */ 00124000
         ST    SAVETREE,TREEPTR(,PARMPTR)                          0027 00125000
*   SAVETREE=TREE2;                 /* SAVE THE POINTER TO NEXT    0028 00126000
*                                      SEGMENT                       */ 00127000
*                                                                  0028 00128000
         L     @10,TREEPTR(,PARMPTR)                               0028 00129000
         L     SAVETREE,TREE2(,@10)                                0028 00130000
*/*   FREE THE TREE WITH THIS DO WHILE LOOP.  A FREEMAIN           0029 00131000
*     IS ISSUED FOR EACH 1024 BYTE SEGMENT UNTIL ALL               0029 00132000
*     THE SEGMENTS ARE FREED. THEN THE CONTROL RETURNS             0029 00133000
*     TO THE CALLER OF IEFDSLST                                      */ 00134000
*                                                                  0029 00135000
*                                                                  0029 00136000
*   DO WHILE TREEPTR^=0;                                           0029 00137000
         B     @DE00029                                            0029 00138000
@DL00029 DS    0H                                                  0030 00139000
*     SAVETREE=TREE2;               /* SAVETREE POINTS TO NEXT     0030 00140000
*                                      SEGMENT                       */ 00141000
         L     @10,TREEPTR(,PARMPTR)                               0030 00142000
         L     SAVETREE,TREE2(,@10)                                0030 00143000
*     R1=TREEPTR;                   /* POINT TO SEGMENT TO BE FREED  */ 00144000
         LR    R1,@10                                              0031 00145000
*     GEN(FREEMAIN  R,LV=1024,A=(1),SP=0);                         0032 00146000
         FREEMAIN  R,LV=1024,A=(1),SP=0                                 00147000
*     TREEPTR=SAVETREE;             /* ELSE SET UP TO FREE NEXT    0033 00148000
*                                      SEGMENT                       */ 00149000
         ST    SAVETREE,TREEPTR(,PARMPTR)                          0033 00150000
*     SAVETREE=TREE2;               /* SET POINTER TO NEXT SEGMENT   */ 00151000
         L     @10,TREEPTR(,PARMPTR)                               0034 00152000
         L     SAVETREE,TREE2(,@10)                                0034 00153000
*   END;                                                           0035 00154000
@DE00029 ICM   @10,15,TREEPTR(PARMPTR)                             0035 00155000
         BNZ   @DL00029                                            0035 00156000
*   END IEFDSLST;                                                  0036 00157000
@EL00001 L     @13,4(,@13)                                         0036 00158000
@EF00001 L     @00,@SIZDATD                                        0036 00159000
         LR    @01,@11                                             0036 00160000
         FREEMAIN R,LV=(0),A=(1)                                        00161000
@ER00001 LM    @14,@12,12(@13)                                     0036 00162000
         BR    @14                                                 0036 00163000
@DATA    DS    0H                                                       00164000
@CH00043 DC    H'1'                                                     00165000
@CH00082 DC    H'7'                                                     00166000
@CH00079 DC    H'12'                                                    00167000
@SM00083 MVC   MINORNME(0,@08),NEW(@09)                                 00168000
@DATD    DSECT                                                          00169000
         DS    0F                                                       00170000
@SA00001 DS    18F                                                      00171000
IEFDSLST CSECT                                                          00172000
         DS    0F                                                       00173000
@DATD    DSECT                                                          00174000
         DS    0D                                                       00175000
@ENDDATD EQU   *                                                        00176000
IEFDSLST CSECT                                                          00177000
         DS    0F                                                       00178000
@SIZDATD DC    AL1(0)                                                   00179000
         DC    AL3(@ENDDATD-@DATD)                                      00180000
         DS    0D                                                       00181000
FOXES    DC    XL4'FFFFFFFF'                                            00182000
ENQ      DC    X'44'                                                    00183000
FOXFOX   DC    X'FF'                                                    00184000
PATCH    DC    X'00'                                                    00185000
         DS    24XL1                                                    00186000
@00      EQU   00                      EQUATES FOR REGISTERS 0-15       00187000
@01      EQU   01                                                       00188000
@02      EQU   02                                                       00189000
@03      EQU   03                                                       00190000
@04      EQU   04                                                       00191000
@05      EQU   05                                                       00192000
@06      EQU   06                                                       00193000
@07      EQU   07                                                       00194000
@08      EQU   08                                                       00195000
@09      EQU   09                                                       00196000
@10      EQU   10                                                       00197000
@11      EQU   11                                                       00198000
@12      EQU   12                                                       00199000
@13      EQU   13                                                       00200000
@14      EQU   14                                                       00201000
@15      EQU   15                                                       00202000
I        EQU   @05                                                      00203000
INDEX    EQU   @04                                                      00204000
PARMPTR  EQU   @02                                                      00205000
SAVETREE EQU   @03                                                      00206000
R1       EQU   @01                                                      00207000
PARMLST  EQU   0                                                        00208000
TREEPTR  EQU   PARMLST                                                  00209000
MAJOR    EQU   PARMLST+4                                                00210000
BUILD    EQU   PARMLST+8                                                00211000
NUMBER   EQU   PARMLST+12                                               00212000
TREE     EQU   0                                                        00213000
TREE2    EQU   TREE                                                     00214000
CURRENT  EQU   TREE+12                                                  00215000
AREA     EQU   TREE+20                                                  00216000
ENQLST   EQU   0                                                        00217000
LISTEND  EQU   ENQLST                                                   00218000
LMINOR   EQU   ENQLST+1                                                 00219000
PARMCDS  EQU   ENQLST+2                                                 00220000
RETURN1  EQU   ENQLST+3                                                 00221000
MAJORPTR EQU   ENQLST+4                                                 00222000
MINORPTR EQU   ENQLST+8                                                 00223000
DATATREE EQU   0                                                        00224000
SVA      EQU   DATATREE                                                 00225000
EXSHR    EQU   DATATREE+5                                               00226000
DSLGH    EQU   DATATREE+6                                               00227000
NEW      EQU   DATATREE+7                                               00228000
MINOR    EQU   0                                                        00229000
MINORNME EQU   MINOR                                                    00230000
         AGO   .@UNREFD                START UNREFERENCED COMPONENTS    00231000
STEP     EQU   DATATREE+4                                               00232000
@NM00002 EQU   TREE+16                                                  00233000
@NM00001 EQU   TREE+4                                                   00234000
.@UNREFD ANOP                          END UNREFERENCED COMPONENTS      00235000
@ENDDATA EQU   *                                                        00236000
         END   IEFDSLST                                                 00237000
