 TITLE   'IGG019KE - BDAM RELATIVE BLOCK CONVERSION MODULE'             00040002
IGG019KE CSECT                                                          00042002
*MODULE NAME - IGG019KE                                               * 00050002
*                                                                     * 00052002
*DESCRIPTIVE NAME - BDAM RELATIVE BLOCK CONVERSION, NON TRK OVERFLOW  * 00054002
*                                                                     * 00056002
*COPYRIGHT - NONE                                                     * 00058002
*                                                                     * 00058402
*CHANGE ACTIVITY                                                      * 00058802
*                                                                     * 00060000
*        OS REL 21 CHANGES/DELETIONS                                    00070002
*        VS 1-1 CHANGES/DELETIONS                                       00072002
*        VS 2-1 CHANGES/DELETIONS                                       00074002
*        VS 1-2 CHANGES/DELETIONS                                       00076002
*        VS 2-2 CHANGES/DELETIONS                                       00078002
*                                                                Y02072 00078402
*                                                                YM3029 00078802
*STATUS- CHANGE LEVEL 1                                               * 00080002
*                                                                     * 00090002
*FUNCTION/OPERATION- THIS MODULE IS ENTERED TO CONVERT THE USER'S     * 00100000
*   RELATIVE BLOCK ADDRESS TO AN ACTUAL TRACK ADDRESS OF THE FORM     * 00120000
*   MBBCCHHR. THIS IS ACCOMPLISHED BY OBTAINING THE RELATIVE BLOCK    * 00140000
*   NUMBER FROM THE BLKREF FIELD ASSOCIATED WITH THIS REQUEST AND     * 00160000
*   CONVERTING TO A TTR (RELATIVE TRACK AND ID) VALUE, USING THE      * 00180000
*   RELATIVE EXTENTS WHICH WERE ADDED TO THE DEB AT OPEN TIME. THE    * 00200000
*   TTR VALUE IS THEN PASSED TO THE RESIDENT ROUTINE WHICH CONVERTS   * 00220000
*   TTR TO AN ACTUAL ADDRESS.                                         * 00240000
*                                                                     * 00260000
*ENTRY POINT- 'IGG019KE' (RRSTART) IS THE ENTRY POINT TO THIS ROUTINE * 00280000
*   FROM THE BDAM FOUNDATION MODULE (IGG019KA) AND FROM THE READ      * 00312002
*   EXCLUSIVE SVC.  THE CALLING SEQUENCES ARE AS FOLLOWS:             * 00314002
*            L    15,4(FOUNDATION BASE)                               * 00320002
*            BALR 14,15 - IF 19KA                                     * 00340002
*         OR SYNCH (15) - IF SVC 53                                   * 00350002
*                                                                     * 00360000
*INPUT- THE REGISTERS HAVE BEEN LOADED AS FOLLOWS,                    * 00380000
*   3 - ADDRESS OF THE DEB                                            * 00400000
*   4 - ADDRESS OF THE DCB                                            * 00420000
*   5 - ADDRESS OF THE DECB FOR THIS REQUEST                          * 00440000
*   7 - ADDRESS OF THE IOB FOR THIS REQUEST                           * 00460000
*   11- BASE ADDRESS OF THE FOUNDATION MODULE                         * 00480000
*   THE RELATIVE BLOCK NUMBER IS OBTAINED BY LOADING THE ADDRESS OF   * 00500000
*   BLKREF FROM THE DECB (DECRECPT) AND MOVING THE CONTENTS OF BLKREF * 00520000
*   TO THE IOB FOR ALLIGNMENT.                                        * 00540000
*                                                                     * 00560000
*OUTPUT- THE ACTUAL ADDRESS WILL BE DEVELOPED AND STORED INTO THE IOB * 00580000
*   AT THE LOCATION 'IOBSEEK'. THE REGISTERS DESCRIBED AS INPUT WILL  * 00600000
*   BE UNCHANGED WHEN THIS MODULE RETURNS TO THE FOUNDATION MODULE.   * 00620000
*                                                                     * 00640000
*EXTERNAL ROUTINE- 'IECPCNVT' IS USED TO CONVERT TTR TO AN ACTUAL     * 00660000
*   ADDRESS AND STORE IT IN THE IOB.                                  * 00680000
*                                                                     * 00700000
*EXIT-NORMAL- 'EXITFDN' IS THE EXIT TO RETURN TO THE CALLING          * 00720002
*   MODULE AFTER CONVERSION HAS BEEN SUCCESSFULLY COMPLETED.          * 00740000
*                                                                     * 00760000
*    -ERROR- 'EXITERR' IS THE EXIT TO THE INVALID REQUEST ERROR       * 00780000
*   ROUTINE IN THE FOUNDATION MODULE. AN ERROR CODE IS PASSED IN      * 00800000
*   REGISTER 12 AND WILL BE PLACED IN THE ECB WHEN THE ERROR ROUTINE  * 00820000
*   ISSUES A POST. THE CAUSE OF THE INVALID REQUEST IS A RELATIVE     * 00840000
*   BLOCK NUMBER GREATER THAN THE TOTAL BLOCKS IN THE DATA SET.       * 00860000
*                                                                     * 00880000
*TABLES/WORK AREAS- THE COMMUNICATION VECTOR TABLE IS REFERENCED      * 00900000
*   TO LOCATE THE RESIDENT TTR TO ACTUAL CONVERSION ROUTINE.          * 00920000
*                                                                     * 00940000
*ATTRIBUTES- THIS MODULE IS REENTRANT AND EXECUTED ENABLED.           * 00960000
*   IT EXECUTES IN PROBLEM PROGRAM STATE, USER KEY.                   * 00970002
*                                                                     * 00980000
*NOTES- THE REGISTER USAGE IN THIS MODULE MUST REMAIN CONSISTENT      * 01000000
*   WITH THE MODULES IGG019KA, IECPCNVT.                              * 01020000
*                                                                       01040000
         USING IGG019KE,BASE                                            01100000
         USING IOBSTDRD,IOBREG                                          01120002
         USING DEBDEF,DEBREG                                            01140000
         USING IHADCB,DCBREG                                            01160000
         USING DECBDEF,DECBREG                                          01180000
*                                                                       01200000
*              REGISTER USAGE                                           01220000
*                                                                       01240000
WKREG0   EQU   0                       WORKING REGISTER                 01260000
SREG1    EQU   1                        PARAMETER REGISTER FOR BPAM     01280000
SREG2    EQU   2                        PARAMETER REGISTER FOR BPAM     01300000
DEBREG   EQU   3                       DEB ADDRESS                      01320000
DCBREG   EQU   4                       DCB ADDRESS                      01340000
DECBREG  EQU   5                       DECB ADDRESS                     01360000
WKREG1   EQU   6                       WORKING REGISTER                 01380000
IOBREG   EQU   7                        IOB ADDRESS                     01400000
WKREG2   EQU   8                       WORKING REGISTER                 01420000
SREG8    EQU   8                                                        01440000
WKREG3   EQU   9                       WORKING REGISTER                 01460000
WKREG4   EQU   10                      WORKING REGISTER                 01480000
FDNBASE  EQU   11                      BASE FOR FOUNDATION MODULE       01500000
INTREG   EQU   12                      INTERNAL RETURN FOR THIS MODULE  01520000
SREG12   EQU   12                      ERROR CONDITION REGISTER         01540000
RETREG   EQU   14                      RETURN TO FOUNDATION MODULE      01560000
SREG14   EQU   14                       PARAMETER REGISTER FOR BPAM     01580000
BASE     EQU   15                      BASE REGISTER FOR THIS MODULE    01600000
SREG15   EQU   15                       PARAMETER REGISTER FOR BPAM     01620000
*                                                                       01640000
*                                                                       01660000
RRSTART  L     WKREG3,DECRECPT          LOAD ADDR. OF RELATIVE RECORD   01680000
*                                        VALUE                          01700000
         MVC   IOBCSW(3),0(WKREG3)    MOVE VALUE TO IOB                 01720002
         L     WKREG3,IOBCSW-1          LOAD VALUE INTO REGISTER        01740002
         LA    SREG2,IOBSEEK            SET POINTER TO IOBSEEK FIELD    01760000
DEBPT    LR    WKREG1,DEBREG            LOAD ADDR. OF DEB               01780000
         LA    WKREG1,EXT1(0,WKREG1)    SET POINTER TO FIRST EXTENT     01800000
         LR    WKREG2,WKREG1            SET UP TO DETERMINE ADDRESS OF  01820000
         SR    WKREG4,WKREG4             FIRST RELATIVE RECORD EXTENT   01840000
         IC    WKREG4,DEBNMEXT          LOAD NUMBER OF EXTENTS          01860000
RREXT    LA    WKREG2,EXTSN(0,WKREG2)   ADD EXTENT SIZE TO RELATIVE     01880000
*                                        RECORD EXTENT POINTER          01900000
         BCT   WKREG4,RREXT             WAS THIS THE LAST EXTENT        01920000
*                                       NO-INCREMENT POINTER            01940000
*                                       YES-WKREG2 NOW POINTS TO FIRST  01960000
*                                        RELATIVE RECORD EXTENT         01980000
         IC    WKREG4,DEBNMEXT          LOAD NUMBER OF EXTENTS          02000000
         SR    WKREG0,WKREG0            CLEAR REGISTER                  02020000
RELTRK   EQU   *                                                        02040000
         MVC   IOBCSW(3),1(WKREG2)      MOVE NO. OF RECORDS IN THIS     02060002
*                                        EXTENT TO ALIGN VALUE          02080000
         S     WKREG3,IOBCSW-1          SUBTRACT VALUE FROM GIVEN       02100002
*                                        RELATIVE RECORD ADDRESS        02120000
         BC    4,OVER                   ADDRESS IN THIS EXTENT          02140000
         AH    WKREG0,TRK(0,WKREG1)     NO-ADD NO. OF TRACKS IN THIS    02160000
*                                        EXTENT TO RESULT REG.          02180000
         LA    WKREG1,EXTSN(0,WKREG1)   INCREMENT NORMAL EXTENT POINTER 02200000
         LA    WKREG2,EXTSR(0,WKREG2)   INCREMENT REL. REC. EXTENT PTR. 02220000
         BCT   WKREG4,RELTRK            WAS THIS THE LAST EXTENT        02240000
*                                       NO CONTINUE  CALCULATION        02260000
         SR    SREG12,SREG12            YES-ERROR,REL. REC. NOT IN DATA 02280000
         IC    SREG12,ERRCODE            SET                            02300000
         TM    IOBSTAT1,IOBSYNCH        MODULE ENTERED BY SYNCH? Y02072 02310002
*                                       ENTRY FROM EXCL CNTROL   Y02072 02310402
         BOR   RETREG                   RETURN ON R14            Y02072 02312002
         L     RETREG,20(0,FDNBASE)    LOAD ADDRESS OF ERROR RETURN     02320000
EXITERR  BR    RETREG                   AND GO TO ERROR ROUTINE         02340000
*                                                                       02360000
OVER     EQU   *                                                        02380000
         A     WKREG3,IOBCSW-1          ADD NO. OF RECORDS IN THIS      02400002
*                                        EXTENT BACK TO REL. REC. VALUE 02420000
         IC    WKREG4,0(0,WKREG2)       LOAD NO. OF RECORDS PER TRACK   02440000
         SR    WKREG2,WKREG2            CLEAR REG                       02460000
         DR    WKREG2,WKREG4            DIVIDE NO. OF RELATIVE RECORDS  02480000
*                                        WITHIN THE EXTENT BY THE NO.   02500000
*                                        OF RECORDS PER TRACK           02520000
*                                        QUOTIENT=TRACKS WITHIN EXTENT  02540000
*                                        REMAINDER=RECORD ID-1          02560000
         AR    WKREG0,WKREG3            ADD QUOTIENT TO TRACKS IN PRIOR 02580000
*                                        EXTENTS                        02600000
         LA    WKREG2,1(0,WKREG2)       ADD ONE TO REMAINDER            02620000
         SLL   WKREG0,8                 SHIFT TT REG ONE BYTE TO LEFT   02640000
         OR    WKREG0,WKREG2            PLACE REC. ID IN TT REG         02660000
CONVERT  SLL   WKREG0,8                 SHIFT TTR REG ONE BYTE TO LEFT  02680000
*                                        REG IS NOW IN FORMAT REQUIRED  02700000
*                                        BY BPAM                        02720000
*              SAVE REGISTERS                                           02740000
         STM   SREG8,SREG15,IOBDNCRF    SAVE REGISTERS 8-15             02760002
         LR    SREG1,DEBREG             SET POINTER TO DEB              02780000
         L     SREG15,CVTPTR(0,0)       LOAD ADDR. OF COMM.VECTOR TABLE 02800000
         L     SREG15,CVTPCNVT-CVTDEF(0,SREG15)  LOAD ADDRESS OF        02820000
*                                            CONVERSION ROUTINE         02840000
         BALR  SREG14,SREG15            GO TO CONVERT ROUTINE           02860000
*              RESTORE REGISTERS                                        02880000
RETURN   EQU   *                                                        02900000
         LM    SREG8,SREG15,IOBDNCRF    RESTORE REGISTERS 8-15          02920002
         TM    IOBSTAT1,IOBSYNCH        MODULE ENTERED BY SYNCH? Y02072 02930002
*                                       ENTRY FROM EXCL CNTROL   Y02072 02930402
         BZ    TSTEXSCH                 BRANCH NO                Y02072 02932002
         SR    SREG12,SREG12            ZERO RETURN CODE         Y02072 02934002
         BR    RETREG                   RETURN                   Y02072 02936002
TSTEXSCH TM    IOBDTYPE,IOBEXTSC        IS EXTENDED SEARCH OPTION USED  02940002
         BCR   8,RETREG                 NO-RETURN TO FOUNDATION MODULE  02960000
RREXTS1  TM    IOBSTAT1,IOBPASS2        FIRST PASS FOR THIS IOB         02980002
         BC    1,CLEANUP                NO                              03000000
         L     WKREG3,DECRECPT          YES-MOVE STARTING RELATIVE      03020000
         MVC   IOBCSW(3),0(WKREG3)       RECORD VALUE TO IOB            03040002
         LA    SREG2,IOBUPLIM           SET POINTER FOR CONVERT ROUTINE 03060000
         OI    IOBSTAT1,IOBPASS2        SET FIRST PASS INDICATOR        03080002
         L     WKREG3,DCBLIMCT-1       GET LIMCT INTO REG3              03100000
         LA    WKREG3,0(0,WKREG3)      CLEAR THE HI ORDER BYTE OF REG 3 03120000
*                FIX FOR APAR 7035                                      03140000
         LTR   WKREG3,WKREG3      IS LIMCT ZERO                         03160000
         BZ    AROUND        YES, BRANCH AROUND DECREMENT               03180000
         BCTR  WKREG3,0                                                 03200000
AROUND   EQU   *                                                        03220000
         AR    WKREG3,WKREG4           ADD ON RECORDS/TRACK             03240000
         L     WKREG4,DCBKEYLE         GET THE DATA SET SIZE            03260000
         LA    WKREG4,0(0,WKREG4)      CLEAR THE HI ORDER BYTE          03280000
         CR    WKREG3,WKREG4           COMPARE LIMCT +RECORDS/TRACK TO  03300000
*                                      DATA SET SIZE                    03320000
         BL    ADDSTART                SET. IF LOW BRANCH               03340000
         MVC   IOBUPLIM,IOBSEEK         YES-SET ENDING ADDRESS EQUAL TO 03360002
*                                        START ADDRESS                  03380000
CLEANUP  NI    IOBSTAT1,X'FF'-IOBPASS2  CLEAR FIRST PASS INDICATOR      03400002
         MVI   IOBUPLIM+7,X'00'         SET R IN UPLIM TO ZERO          03420000
         CLC   IOBUPLIM(1),IOBSEEK      IS EXTENDED SEARCH LIMIT IN     03440000
*                                        SAME EXTENT AS START ADDRESS   03460000
         BC    6,DUMMYID                NO                              03480000
         CLC   IOBSEEK+3(4),IOBUPLIM+3  DOES SEARCH WRAP AROUND         03500000
         BCR   4,RETREG                 NO-RETURN TO FOUNDATION MODULE  03520000
DUMMYID  MVI   IOBUPLIM+7,X'FE'         SET RECORD ID IN UPLIM TO 255   03540000
EXITFDN  EQU   *                                                        03560000
         BCR   15,RETREG                RETURN TO FOUNDATION MODULE     03580000
*                                                                       03600000
*                                                                       03620000
ADDSTART EQU   *                                                        03640000
         A     WKREG3,IOBCSW-1          ADD STARTING RELATIVE RECORD TO 03660002
*                                        EXTENDED SEARCH VALUE          03680000
         MVC   IOBCSW(3),DCBREL         ALIGN SIZE OF DATA SET          03700002
         CL    WKREG3,IOBCSW-1          COMPARE RESULT WITH SIZE OF     03720002
*                                        DATA SET                       03740000
         BL    DEBPT                    BRANCH IF SEARCH DOES NOT WRAP  03760000
*                                        AROUND TO START OF DATA SET    03780000
         S     WKREG3,IOBCSW-1          ADJUST ENDING ADDRESS SO THAT   03800002
*                                        IT FALLS WITHIN DATA SET       03820000
         B     DEBPT                    GO TO CONVERT ENDING ADDRESS    03840000
*                                                                       03860000
*                                                                       03880000
*                                                                       03900000
EXT1     EQU   32             OFFSET OF FIRST EXTENT FROM START OF DEB  03920000
EXTSN    EQU   16             SIZE OF NORMAL EXTENT FOR DIRECT ACCESS   03940000
TRK      EQU   14             NO. OF TRACKS OFFSET FROM START OF EXTENT 03960000
EXTSR    EQU   4              SIZE OF RELATIVE RECORD EXTENT            03980000
TONE     DC    H'256'                                                   04040000
ERRCODE  DC    FL1'16'                                                  04060000
*              EXCEPTION CODES                                          04080000
NOREC    EQU   X'80'                                                    04100000
LGNCK    EQU   X'40'                                                    04120000
NOSPA    EQU   X'20'                                                    04140000
INVAL    EQU   X'10'                                                    04160000
UNCOR    EQU   X'08'                                                    04180000
ENDOD    EQU   X'04'                                                    04200000
UNREL    EQU   X'02'                                                    04220000
*              OPTIONS AND TYPE                                         04240000
VERIFY   EQU   X'80'                                                    04260000
OFLOW    EQU   X'40'                                                    04280000
FEEDB    EQU   X'10'                                                    04320000
ACTAD    EQU   X'08'                                                    04340000
DYNBF    EQU   X'04'                                                    04360000
READX    EQU   X'02'                                                    04380000
RELRD    EQU   X'01'                                                    04400000
KEYOP    EQU   X'80'                                                    04420000
LGNOP    EQU   X'40'                                                    04440000
READ     EQU   X'08'                                                    04460000
KEY      EQU   X'04'                                                    04480000
ADD      EQU   X'02'                                                    04500000
MODID    DC    C'IGG019KE'              MODULE ID                Y02072 04510002
PATCH    DC    XL50'0'                  PATCH AREA               Y02072 04550002
         EJECT                                                          04560002
*********************************************************************** 04570002
*                         DSECTS                                        04572002
*********************************************************************** 04574002
CVTDEF   DSECT                                                          04580000
         CVT                                                            04600000
         EJECT                                                          04620000
*      DATA CONTROL BLOCK (DCB) DEFINITION                              04640000
*                                                                       04660000
         DCBD  DSORG=DA                                                 04680000
         EJECT                                                          04700000
*      DATA EVENT CONTROL BLOCK (DECB) DEFINITION                       04720000
         DS    0F                                                       04740000
DECBDEF  DSECT                                                          04760000
DECSDECB DS    CL4            STANDARD EVENT CONTROL BLOCK (ECB)        04780000
DECTYPE  DS    CL2            TYPE FIELD                                04800000
DECLNGTH DS    CL2            DATA LENGTH                               04820000
DECDCBAD DS    CL4            ADDRESS OF DCB                            04840000
DECAREA  DS    CL4            ADDRESS OF DATA AREA                      04860000
DECIOBPT DS    CL4            ADDRESS OF THE IOB                        04880000
DECKYADR DS    CL4            ADDRESS OF KEY                            04900000
DECRECPT DS    CL4            ADDRESS OF RECORD REFERENCE               04920000
         EJECT                                                          04940000
*                                                                       04960000
*      I/O BLOCK (IOB) DEFINITION                                       04980000
*                                                                       05000000
         IEZIOB                                                         05050002
         ORG   IOBRSV35                                                 05200002
IOBUPLIM DS    D                                                        05250002
         EJECT                                                          05840000
*                                                                       05860000
*      DATA EXTENT BLOCK (DEB) DEFINITION                               05880000
*                                                                       05900000
         DS    0F                                                       05920000
DEBDEF   DSECT                                                          05940000
*                                                                       05960000
         DS    0F                                                       05980000
DEBNMSUB DS    0CL1                    COUNT OF ROUTINES LOADED         06000000
DEBTCBAD DS    CL4                     TASK CONTROL BLOCK ADDRESS       06020000
DEBAMLNG DS    0CL1                    WORD CNT OF BDAM ADDED CORE      06040000
DEBDEBAD DS    CL4                     DEB CHAIN ADDRESS                06060000
DEBOFLGS DS    0CL1                    OPEN FLAGS                       06080000
DEBIRBAD DS    CL4                     IRB ADDRESS                      06100000
DEBOPATB DS    0CL1                    DATA SET ATTRIBUTES              06120000
DEBSYSPG DS    CL4                                                      06140000
DEBNMEXT DS    0CL1                    COUNT OF EXTENTS                 06160000
DEBUSRPG DS    CL4                                                      06180000
DEBPRIOR DS    0CL1                                                     06200000
DEBECBAD DS    CL4                                                      06220000
DEBPROTG DS    0CL1                                                     06240000
DEBDEBID DS    0CL1                                                     06260000
DEBDCBAD DS    CL4                     DCB ADDRESS                      06280000
DEBEXSCL DS    0CL1                    EXTENT SIZE SCALE                06300000
DEBAPPAD DS    CL4                     IOS APPENDAGE LIST ADDRESS       06320000
DEBDVMOD DS    0CL1                    FILE MASK CODE                   06340000
DEBUCBAD DS    CL4                     UCB ADDRESS                      06360000
DEBBINUM DS    CL2                     BIN NUMBER (BB)                  06380000
DEBSTRCC DS    CL2                     STARTING CYLINDER NUMBER         06400000
DEBSTRHH DS    CL2                     STARTING TRACK NUMBER            06420000
DEBENDCC DS    CL2                     ENDING CYLINDER NUMBER           06440000
DEBENDHH DS    CL2                     ENDING TRACK NUMBER              06460000
DEBNMTRK DS    CL2                     NO. OF TRACKS IN THIS EXTENT     06480000
DEBSUBID EQU   0         SUBROUTINE ID'S                                06500000
*                                                                       06520000
*                IO DEVICE TABLE                                        06540000
*                                                                       06560000
         DS    0F                                                       06580000
DTAB     DC    X'000814202C380000'                                      06600000
DEVSZ    DS    CL4                     DEVICE SIZE   CCHH               06620000
TRKLNGTH DS    CL2                     TRACK LENGTH                     06640000
OVERI    DS    CL1                     OVERHEAD  NOT LAST               06660000
OVERL    DS    CL1                     OVERHEAD  NLAST                  06680000
OVERK    DS    CL1                     OVERHEAD  NNON KEYED             06700000
FLAG     DS    CL1                     FLAG                             06720000
TOLER    DS    CL2                     TOLERANCE                        06740000
         END                                                            06760000
