*********************************************************************** 00020000
*                                                                     * 00040000
* NAME                                                                * 00060000
*                                                                     * 00080000
*    IEHMVSSD CSECT FOR IEHMOVE PROGRAM                               * 00100000
*                                                                     * 00120000
*********************************************************************** 00140000
*                                                                     * 00160000
* FUNCTION/OPERATION                                                  * 00180000
*                                                                     * 00200000
*    THIS IS THE ROOT SEGMENT FOR IEHMOVE, THE SYSTEM UTILITY THAT    * 00220000
*  MOVES AND COPIES LOGICAL COLLECTIONS OF OPERATING SYSTEM/360 DATA. * 00240000
*  ITS FUNCTIONS ARE AS FOLLOWS                                       * 00260000
*                                                                     * 00280000
*      1.  IT SAVES THE REGISTERS OF THE CALLING PROGRAM              * 00300000
*      2.  GETS CORE FOR THE COMMUNICATION REGION OF IEHMOVE          * 00320000
*      3.  SETS THE TRACE INDICATORS FOR THE OVERLAY SEGMENTS         * 00340000
*      4.  LINKS TO THE FIRST OVERLAY SEGMENT (ENTRY = IEHMVXSE)      * 00360000
*      5.  RETURNS CONTROL TO THE CALLING PROGRAM                     * 00380000
*                                                                     * 00400000
*********************************************************************** 00420000
*                                                                     * 00440000
* ENTRY POINTS                                                        * 00460000
*                                                                     * 00480000
*    THE ONLY ENTRY POINT TO THE ROOT SEGMENT IS IEHMVSSD, THE CSECT  * 00500000
*  NAME, OR IEHMVESD, THE SAME INSTRUCTION.  THIS ENTRY POINT IS THE  * 00520000
*  POINT WHERE THE CALLING PROGRAM ENTERS IEHMOVE.                    * 00540000
*                                                                     * 00560000
*********************************************************************** 00580000
*                                                                     * 00600000
* INPUT                                                               * 00620000
*                                                                     * 00640000
*    THE ONLY INPUT TO THE ROOT SEGMENT IS THE ADDRESS OF THE         * 00660000
*  PARAMETER LIST PASSED TO IT BY THE CALLING PROGRAM.                * 00680000
*                                                                     * 00700000
*********************************************************************** 00720000
*                                                                     * 00740000
* OUTPUT                                                              * 00760000
*                                                                     * 00780000
*    THE OUTPUT TO THE FIRST OVERLAY SEGMENT IS TWOFOLD.  FIRST,      * 00800000
*  THE PARAMETER LIST ADDRESS FROM THE CALLING PROGRAM IS PASSED TO   * 00820000
*  THE OVERLAY SEGMENT IN REGISTER 6, AND THE ADDRESS OF THE          * 00840000
*  COMMUNICATION REGION IS PASSED IN REGISTER 13.                     * 00860000
*                                                                     * 00880000
*********************************************************************** 00900000
*                                                                     * 00920000
* EXTERNAL ROUTINES                                                   * 00940000
*                                                                     * 00960000
*    AS FAR AS THE ROOT SEGMENT IS CONCERNED THE ONLY EXTERNAL        * 00980000
*  ROUTINE IS THE FIRST OVERLAY SEGMENT, IEHMVXSE.                    * 01000000
*                                                                     * 01020000
*********************************************************************** 01040000
         EJECT                                                          01060000
**********************************************************************  01080000
*                                                                     * 01100000
* EXITS                                                               * 01120000
*                                                                     * 01140000
*    THE ONLY EXIT IS A RETURN TO THE CALLING PROGRAM.                * 01160000
*                                                                     * 01180000
*********************************************************************** 01200000
*                                                                     * 01220000
* TABLES/WORK AREAS                                                   * 01240000
*                                                                     * 01260000
*    THE ONLY WORK AREA USED IS THE COMMUNICATION REGION ITSELF.      * 01280000
*  THERE IS NO SYMBOLIC NAME FOR THIS REGION SINCE THE AREA IS        * 01300000
*  OBTAINED BY A GETMAIN MACRO INSTRUCTION.                           * 01320000
*                                                                     * 01340000
*********************************************************************** 01360000
*                                                                     * 01380000
* ATTRIBUTES                                                          * 01400000
*                                                                     * 01420000
*    REENTRANT AND REUSEABLE                                          * 01440000
*                                                                     * 01460000
*********************************************************************** 01480000
IEHMVSSD CSECT                                                          01486004
*A031649                                                       @ZA06531 01492004
         EJECT                                                          01500000
*C031637                                                       @ZA03372 01520103
*A031637                                                       @ZA00101 01520402
*D031637-031644,031679-031685,031707-031713,031880-031888      @ZA00101 01520802
*D031918-031925                                                @ZA00101 01521202
*C031946                                                       @ZA00101 01521602
*                                                                A50932 01522100
*D023606,023630,023631                                           A99999 01524500
* 023631-023954,030212-030460,032007-065007                      A44303 01526600
* 032008-032012                                                  I30905 01528700
*                                                                A30471 01530800
* 030480                                                           I276 01532900
* 030600,031600                                                  A29758 01535019
* 031890                                                         A36041 01536020
* 031491,031617-031624,031736,031771-031778,031813-031827,031862 A36113 01538021
* 032016,032032-032132                                           A38736 01538121
*C031533,031547,031568,031575,031603,031610,031642,031644,031652,A46081 01538322
*C031677,031680,031685,031687,031705,031708,031713,031715,031730,A46081 01538522
*C031734,031736,031771,031785,031813,031882,032002               A46081 01538722
*D031540,031608,031631,031635,031643,031645,031686,031714,031722,A46081 01538922
*D031737-031750,031792,031799,031890-031903                      A46081 01539122
*A031535-031545,031605,031607,031615-031630,031646-031650,031654,A46081 01539322
*A031656,031689,031691,031717-031723,031741-031751,031789-031801,A46081 01539522
*A036002-060002                                                  A46081 01539722
*                             REGISTER NOTATION AND USAGE               01540000
R0       EQU   0                                                        01560000
R1       EQU   1                                                        01580000
R2       EQU   2                                                        01600000
R6       EQU   6                                                        01620000
R7       EQU   7                                                        01640000
R13      EQU   13                       SAVE  REG                       01680000
R14      EQU   14                       RETURN REG                      01700000
R15      EQU   15                       ENTRY POINT REG                 01720000
R3       EQU   3                                                 A20878 01722018
R4       EQU   4                                                 A20878 01724018
R5       EQU   5                                                 A20878 01726018
R8       EQU   8                                                 A20878 01728018
R9       EQU   9                                                 A20878 01730018
R10      EQU   10                                                A20878 01732018
R11      EQU   11                                                A20878 01734018
R12      EQU   12                                                A20878 01736018
*                                                                       01740000
*                             ENTRY AND EXTRN STATEMENTS                01760000
         ENTRY IEHMVESD                                                 01780000
*                                                                       01800000
*                             USING STATEMENTS                          01820000
         USING IEHMVESD,R11                                      A20878 01840018
*                                                                       01860000
*                                                                       01880000
IEHMVESD SAVE  (14,12),T,IEHMOVE                                        01900000
         LR    R11,R15       SET UP ADDRESSABILITY               A20878 01920018
         LR    R6,R1                    SAVE POINTER TO CALLING         01940000
*                                       PROGRAMS PARAMETER LIST         01960000
       GETMAIN R,LV=440                                                 01980000
*                             ON RETURN FROM GETMAIN, REG 1 CONTAINS    02000000
*                             POINTER TO 440 BYTE SAVE AREA  TO BE      02020000
*                             USED BY THE MOVE/COPY PROGRAM. REG 13     02040000
*                             WILL SUBSEQUENTLY POINT TO THE NEXT       02060000
*                             AVAILABLE SAVE AREA WITHIN THIS           02080000
*                             440 BYTE EXTENT. CONSEQUENTLY NO          02100000
*                             MODULE WITHIN THE MOVE/COPY PROGRAM       02120000
*                             SHOULD ALLOCATE ITS OWN SAVE              02140000
*                             AREA. 440 BYTES HAS BEEN COMPUTED         02160000
*                             AS THE MAXIMUM EXTENT REQUIRED            02180000
*                             FOR SAVING REGISTERS WITHIN ANY           02200000
*                             GIVEN PATH OF THE MOVE/COPY PROGRAM.      02220000
*                                                                       02240000
*                                                                       02260000
         ST    R1,8(R0,R13)             SET UP FORWARD AND BACKWARD     02280000
         ST    R13,4(R0,R1)             CHAINING TO THE SAVE AREA       02300000
         LR    R13,R1                                                   02320000
         MVI   12(R13),X'00'           SET TRACE INDICATORS             02340000
         MVI   8(R13),X'FF'                                             02360000
         LA    R10,80(R13)        CHAIN SAVE AREAS               A20878 02361218
         ST    R10,8(R13)                                        A20878 02361818
         ST    R13,4(R10)                                        A20878 02362418
         L     R14,12(R13)              RESET REG 14             A20878 02396018
         LA    R1,STAEEXIT             PASS EXIT ROUTINE ON      A30471 02396319
         LINK  EP=IEHMVXSE    GO TO NEXT MODULE                  A20878 02396618
         EJECT                                                          02400000
*********************************************************************** 02420000
*    ON RETURN FROM PROCESSING A MOVE/COPY REQUEST, THE FOLLOWING CODE* 02440000
* TESTS IEHMVV41+13, THE RETURN CODE BYTE, AND SETS THE CORRECT CODE  * 02460000
* IN REGISTER 15 PRIOR TO RETURNING TO THE INVOKING PROGRAM.          * 02480000
*                                                                     * 02500000
* THE FORMAT OF IEHMVV41+13 IS AS FOLLOWS                             * 02520000
*                                                                     * 02540000
*        BITS 0-3  UNUSED                                             * 02560000
*        BIT  4    RETURN CODE 16 SHOULD BE RETURNED                  * 02580000
*        BIT  5    RETURN CODE 12 SHOULD BE RETURNED                  * 02600000
*        BIT  6    RETURN CODE  8 SHOULD BE RETURNED                  * 02620000
*        BIT  7    RETURN CODE  4 SHOULD BE RETURNED                  * 02640000
*        BITS 4-7 OFF MEANS RETURN CODE ZERO                          * 02660000
*                                                                     * 02680000
*    PRIOR TO RETURNING TO THIS POINT, IEHMVESK, THE WRAP UP ROUTINE, * 02700000
* INSERTS INTO REGISTER 15 THE CONTENTS OF IEHMVV41+13.               * 02720000
*********************************************************************** 02740000
*                                                                       02760000
*                                                                       02780000
         BALR  R11,R0                                            A20878 02800018
         USING *,R11                                             A20878 02820018
         LA    R7,4                                                     02840000
         LR    R6,R15                  PUT RETURN CODE IN REG 6         02860000
         SLL   R6,28                   SHIFT BITS 4-7 TO HIGH ORDER     02880000
*                                      BIT POSITIONS                    02900000
         LA    R15,16                  SET RETURN CODE AT 16            02920000
CHKCODE  LTR   R6,R6                   CHECK HIGH ORDER BIT             02940000
         BM    RETURN                  EXIT IF HIGH ORDER BIT ON        02960000
         SLL   R6,1                    SET UP TO CHECK NEXT BIT         02980000
         SR    R15,R7                  REDUCE RETURN CODE BY 4          03000000
         BP    CHKCODE                 CHECK NEXT BIT IF CODE NOT ZERO  03020000
RETURN   LR    R9,R15                  SAVE RETURN CODE          A29758 03020619
FINISH   DELETE EP=DEVMASKT            DELETE DEVICE MASK TABLE    I276 03050019
         L     R6,4(R0,R13)            LOAD SAVE AREA ADDRESS      I276 03054019
         LA    R0,440                  RELEASE STORAGE ACQUIRED FOR     03080000
*                                      SAVE AREA                        03100000
         FREEMAIN R,LV=(0),A=(13)                                       03120000
         STAE  0                                                 A30471 03130019
         LR     R13,R6       LOAD SAVE AREA ADDRESS                     03140019
         LR     R15,R9  LOAD RETURN CODE                                03140119
         RETURN  (14,12),T,RC=(15)     RETURN TO INVOKING PROGRAMA30471 03141419
**********************************************************************  03142119
*       THIS ROUTINE IS ENTERED ONLY WHEN AN ABEND OCCURS IN IEHMOVE.*  03142819
*  REGISTER 12 POINTS TO THE IEHMVV DSECT.  THE DSECT IS USED FOR    *  03143519
*  OBTAINING THE SYSUT1 DCB ADDRESS AND DETERMINING IF A TEMPORARY   *  03144219
*  DATA SET NAME WAS USED ON A MOVE OPERATION.  THE ROUTINE SCRATCHES*  03144919
*  THE WORKFILE AND TEMPORARY DATA SETS ON MOVE.                     *  03145619
**********************************************************************  03146319
STAEEXIT EQU   *                                                 A30471 03147019
         BALR  R10,0                                             A30471 03147719
         USING *,R10                                             A30471 03148419
         LA    R3,12                                             A36113 03148821
         CR    R0,R3                   IS STAE WORK AREA IN CORE A36113 03148921
         BNE   IEHSTA01                YES- GET POINTER TO       A30471 03149819
*                                      DSECT FROM WORK AREA      A30471 03150519
         LR    R12,R2                  GET POINTER TO DSECT      A30471 03151219
         B     IEHSTA02                CONTINUE                  A30471 03151919
IEHSTA01 L     R12,0(R1)               GET POINTER TO DSECT      A30471 03152619
         USING IEHMVV,R12                                        A46081 03153322
IEHSTA02 L     R5,IEHMVV40             GET SYSUT1 DCB PTR        A46081 03153522
         USING IHADCB,R5                                         A46081 03153722
         STM   R13,R14,SAVEDW          SAVE SENSITIVE REGS       A46081 03153922
IEHSTA03 L     R3,CVTPTR               GET PTR TO CVT            A46081 03154122
         USING IEACVT,R3                                         A46081 03154322
         L     R3,CVTTCBP              GET PTR TO NEW/OLD TCB    A46081 03154522
         DROP  R3                                                A46081 03154722
         L     R4,4(R3)                ADDRESS OF CURRENT TCB    A30471 03155419
         L     R3,12(R4)               ADDRESS OF TIOT           A30471 03156119
         TM    DCBOFLGS,OPENED         DCB OPENED                A46081 03156822
         BZ    SKIP1                   *B IF NOT                 A46081 03157522
         LH    R4,40(R5)               OFFSET IN TIOT OF DDNAME  A30471 03158219
         AR    R3,R4                   ADDRESS IN TIOT OF DDNAME A30471 03158919
PREPARE  L     R4,16(R3)               ADDRESS OF UCB            A30471 03159619
         LA    R4,0(,R4)               CLEAR HI-BITS             A46081 03160322
         USING IEFUCBOB,R4                                       A46081 03160522
         CLI   UCBTYP+2,X'20'          DATACELL                  A46081 03160722
         BNE   FOR2321                 YES-BRANCH                A36113 03160921
         MVC   DEVAREA(4),UCBTYP       NO-PUT DEVTYPE IN LIST    A46081 03161022
         MVC   DEVAREA+4(6),SRTEVOLI   PUT VOLSER IN LIST        A46081 03161522
         CLC   DSNAME(8),TEMP          THIS PASS FOR **TEMP      A46081 03162022
         BE    SCRATCH                 *B IF YES                 A46081 03162522
         CLI   IEHMVV39+5,X'FF'        SYSUT1 ALLOCATED          A46081 03163022
         BE    SCRUT2                  NO BYPASS SCRATCH         A44331 03163621
         MVC   DSNAME+9(8),IEHMVV87    MOVE TIME TO **SYSUT1   @ZA03372 03163703
SCRATCH  TM    DCBOFLGS,OPENED         DCB OPEN                  A46081 03164622
         BZ    OVERCLOS                *B IF NOT.SKIP CLOSE      A46081 03164822
         OI    0(R12),X'80'            SET UP HIGH ORDER BIT   @ZA06531 03164904
         CLOSE ((R5)),MF=(E,(R12))     CLOSE THE DS              A46081 03165022
OVERCLOS SR    R0,R0                                             A46081 03165222
         SCRATCH DELLIST                                         A46081 03165422
         CLC   DSNAME(8),TEMP          SCRATCHED TEMPNAME        A46081 03165622
         BE    ENDIT                   FINISHED                  A30471 03165919
         CLI   DSNAME+7,X'F1'          WAS THIS SYSUT1?          A30471 03166619
         BNE   TESTUT2                 TEST SYSUT2               A30471 03167321
SCRUT2   CLI   IEHMVV39+6,X'FF'        WAS SYSUT2 ALLOCATED      A46081 03167722
         BE    SCRUT3                  NO BYPASS SCRATCH UT2     A44331 03167821
         MVI   DSNAME+7,X'F2'          MAKE NAME = **SYSUT2      A46081 03168722
         L     R5,IEHMVV41             GET SYSUT2 DCB PTR        A46081 03168922
         B     SCRATCH                 *B TO SCRATCH/CLOSE UT2   A46081 03169122
TESTUT2  CLI   DSNAME+7,X'F2'          WAS THIS SYSUT2?          A30471 03169421
         BNE   TEMPNAME                IS THERE A **TEMP?        A30471 03170119
SCRUT3   CLI   IEHMVV39+7,X'FF'        WAS SYSUT3 ALLOCATED      A46081 03170522
         BE    TEMPNAME                NO BYPASS SCRATCH UT3     A44331 03170621
         MVI   DSNAME+7,X'F3'          MAKE DSN=UT3              A46081 03171522
         L     R5,IEHMVV42             GET SYSUT3 DCB PTR        A46081 03171722
         B     SCRATCH                 *B TO CLOSE/SCRATCH UT3   A46081 03171922
ENDIT    SR    R15,R15                 RET CODE FOR STAE=DUMP    A46081 03172122
         LM    R13,R14,SAVEDW          RELOAD SENSITIVE REGS     A46081 03172322
         BR    14                      RETURN TO STAE            A30471 03172919
FOR2321  MVC   DEVAREA+4(6),SRTEVOLI   PUT VOLSER IN LIST        A46081 03173022
         SR    R3,R3                                             A36113 03173121
         LH    R3,0(R4)                GET BIN NUMBER            A36113 03173221
         SLL   R3,4                    GET DISPLACEMENT          A36113 03173321
         LA    R6,56                   TO START OF UCB           A46081 03173422
         SR    R4,R3                   GET ADDRESS               A36113 03173521
         SR    R4,R6                   OF UCB                    A46081 03173622
         MVC   DEVAREA(4),UCBTYP       PUT DEVTYPE IN LIST       A46081 03174122
         B     SCRATCH                 *B TO CLOSE/SCRATCH       A46081 03174622
TEMPNAME L     R2,IEHMVV21             PTR TO 'TO' DSNAME        A46081 03175122
         CLC   0(8,R2),TEMP            IS IT **TEMP?             A30471 03175719
         BNE   ENDIT                   NO - FINISHED             A30471 03176419
         TM    IEHMVV20,X'80'          MOVE SPECIFIED ON CC      A46081 03177122
         BO    ENDIT                   YES-DO NOT SCRATCH        A36113 03177821
         L     R5,IEHMVV31             GET PTR TO 'TO' DCB       A46081 03178522
         LA    R5,0(,R5)               CLEAR HIGH BITS           A46081 03178922
         MVI   DSNAME,C' '             BLANK                     A46081 03179322
         MVC   DSNAME+1(43),DSNAME     DSNAME                    A46081 03179722
         MVC   DSNAME(8),TEMP          DSNAME FOR CAMLIST        A46081 03180122
         B     IEHSTA03                SCRATCH **TEMP            A30471 03180619
SKIP1    MVC   DDNAME(8),DCBDDNAM      GET DDNAME FOR COMPARE    A46081 03181322
         LA    R3,24(R3)               POINT TO FIRST DD ENTRY   A36113 03182021
LOOPX    CLC   4(8,R3),DDNAME          IS THIS THE DDNAME I WANT A36113 03182721
         BE    PREPARE                 YES - BRANCH              A30471 03183419
         SR    R4,R4                   PREPARE FOR INCREASE      A30471 03184119
         IC    R4,0(R3)                GET LENGTH OF TIOT ENTRY  A30471 03184819
         AR    R3,R4                   GET POINTER TO NEXT ENTRY A30471 03185519
         CLC   0(4,R3),ZEROS           CHECK END OF TIOT LIST    A36113 03186221
         BE    ENDIT                   YES - BRANCH TO CLOSE RTN.A30471 03186919
         B     LOOPX                   NO - CONTINUE SEARCH      A30471 03187619
ZEROS    DC    1F'0'                                             A30471 03190419
DDNAME   DS    2F                                                A30471 03191119
TEMP     DC    CL8'**TEMP  '                                     A30471 03193219
DELLIST  CAMLST   SCRATCH,DSNAME,,VOLIST                         A30471 03193919
DSNAME   DC    CL44'**SYSUT1.'                                 @ZA00101 03194602
         DS    0F                                                A30471 03195319
         DS    1H                      TO ALIGN ON BOUNDRY       A30471 03196019
VOLIST   DC    H'1'                    ONE VOLUME                A30471 03196719
DEVAREA  DS    10X                     VOL TYPE                  A30471 03197419
         DC    H'0'                    SEQ NO.                   A30471 03198119
SAVEDW   DS    D                                                 A46081 03200222
OPENED EQU     X'10'                                             A46081 03600222
         IEHMVV                                                         04000222
         DCBD  DSORG=BS,DEVD=DA                                         04400222
IEFUCBOB DSECT                                                          04800222
         IEFUCBOB                                                       05200222
IEACVT   DSECT                                                          05600222
         CVT                                                            06000222
         END                                                            06900721
