IGG019KI CSECT                                                          00020020
*                                                                       00025020
*                                                                       00030020
*        RELEASE 21 DELETIONS/CHANGES                                   00045020
*        RELEASE 20 DELETIONS/CHANGES                                   00050020
*3000000400,013200,015200,019200                                 S20201 00055020
 TITLE   'IGG019KI - KEY MODULE'                                        00060020
*STATUS CHANGE LEVEL 003                                                00080020
*FUNCTION/OPERATION- THIS ROUTINE IS ENTERED FROM IGG019KA TO         * 00100020
*   CONSTRUCT A CHANNEL PROGRAM TO PERFORM A READ OR WRITE BY KEY,    * 00120020
*   (SEARCH ARGUMENT IS BLOCK KEY).                                   * 00140020
*   THE CCWS ARE CONSTRUCTED OF CONSTANTS DEFINED IN THIS MODULE AND  * 00160020
*   ADDRESSES RESOLVED AT THE TIME THIS ROUTINE IS EXECUTED.          * 00180020
*                                                                     * 00200020
*ENTRY POINT- 'IGG019KI' (BEGIN) IS ENTERED BY THE CALLING SEQUENCE,  * 00220020
*   L    15,DCBDKEY                                                   * 00240020
*   BALR 14,15                                                        * 00260020
*                                                                     * 00280020
*INPUT- THE REGISTERS ARE INPUT AS FOLLOWS,                           * 00300020
*   4 - DCB ADDRESS                                                   * 00320020
*   5 - DECB ADDRESS                                                  * 00340020
*   6 - ADDRESS OF CCW 1 (CHANNEL PROGRAM START)                      * 00360020
*   7 - IOB ADDRESS                                                   * 00380020
*   11- BASE ADDRESS OF FOUNDATION MODULE (IGG019KA)                  * 00400020
*                                                                     * 00420020
*OUTPUT- THE REQUIRED CCWS WILL BE CONSTRUCTED FOLLOWING THE IOB.     * 00440020
*   REGISTER 6 WILL CONTAIN THE ADDRESS OF THE LAST CCW.              * 00460020
*                                                                     * 00480020
*EXTERNAL ROUTINES- 'IGG019KQ' WILL BE ENTERED TO CONSTRUCT THE VERIFY* 00500020
*   CCWS IF THE REQUEST IS A READ AND THE WRITE VALIDITY CHECK OPTION * 00520020
*   HAS BEEN SPECIFIED. 'IGG019KW' WILL BE ENTERED TO CONSTRUCT THE   * 00540002
*   EXTENDED SEARCH PORTION OF THE CHANNEL PROGRAM IF SPECIFIED.      * 00542002
*                                                                     * 00560020
*EXITS-NORMAL- 'D4TOVER' IS THE EXIT TO IGG019KQ IF REQUIRED.         * 00580020
*   'NONCARN' IS THE EXIT TO IGG019KW IF REQUIRED.                    * 00590002
*   'D4EXIT' IS THE NORMAL RETURN TO THE MODULE IGG019KA.             * 00600020
*                                                                     * 00620020
*TABLES/WORK AREAS- N/A                                               * 00640020
*                                                                     * 00660020
*ATTRIBUTES- THIS ROUTINE IS REENTRANT AND EXECUTED ENABLED IN USER   * 00680002
*   KEY, PROBLEM PROGRAM STATE.                                       * 00682002
*                                                                     * 00700020
*NOTE- REGISTER USAGE IN THIS MODULE MUST REMAIN CONSISTENT WITH THE  * 00720020
*   MODULES, IGG019KA, IGG019KQ, AND IGG019KW.                        * 00740002
         EJECT                                                          00760020
         USING IGG019KI,D4EPREG                                         00780020
         USING IHADCB,DCBREG                                            00800020
         USING DECBDEF,DECBREG                                          00820020
         USING IOBDEF,IOBREG                                            00840020
*                                                                       00860020
*                                                                       00880020
*  REGISTER USAGE                                                       00900020
*                                                                       00920020
D4WKREG  EQU   0         WORK REGISTER                                  00940020
D4VERR   EQU   1         POINTER TO A SEARCH CCW FOR VERIFY             00960020
DEBREG   EQU   3         DEB ADDRESS                                    00980020
DCBREG   EQU   4         DCB ADDRESS                                    01000020
DECBREG  EQU   5         DECB ADDRESS                                   01020020
D4CCWIND EQU   6         CHANNEL COMMAND INDEX                          01040020
IOBREG   EQU   7         IOB ADDRESS                                    01060020
SECTOR   EQU   8         POINTER TO SECTOR1                      S20201 01070020
VERBASE  EQU   10        BASE FOR THE VERIFY MODULE                     01080020
FDNBASE  EQU   11        BASE FOR THE FOUNDATION MODULE                 01100020
D4       EQU   12        RETURN FOR INTERNAL BAL                        01120020
RETREG   EQU   14        RETURN TO FOUNDATION MODULE                    01140020
D4EPREG  EQU   15        BASE FOR THIS MODULE                           01160020
*                                                                       01180020
*                                                                       01200020
*                                                                       01220020
BEGIN    B     D4ENTRY            BRANCH TO THE BEGINNING OF THE CODE   01240020
D4EKAD   DC    V(IGG019KW)        ADDR OF KEY-EXTENDED SRCH MOD  Y02072 01260002
*                                                                       01280020
*                                                                       01300020
D4ENTRY  EQU   *                                                 S20201 01310020
         LA    D4WKREG,IOBDNRCF+D2      GET AND STORE ADDR OF    S20201 01320020
         ST    D4WKREG,0(D4CCWIND)       NEW RECORD COUNT FIELD IN CCW1 01340020
         MVI   0(D4CCWIND),D4RDCNT      MOVE READ COUNT OP CODE TO CCW1 01360020
         MVC   4(5,D4CCWIND),D4CON1     MOVE FLAGS,COUNT AND SEARCH OP. 01380020
         MVC   9(3,D4CCWIND),DECKYADR+1 MOVE KEY ADDRESS FROM DECB      01400020
         MVI   12(D4CCWIND),D4CCHN+SILI SET COMMAND CHAIN+SILI FLAGS    01420020
         MVC   15(1,D4CCWIND),DCBKEYLE MOVE KEY LENGTH AS COUNT         01440020
         LR    D4WKREG,D4CCWIND        MOVE TO A COMMON LOCATION        01460020
         TM    IOBDTYPE,EXSCH           AND USE AS TIC ADDRESS          01480020
         BC    8,*+8                     UNLESS THIS IS EXTENDED        01500020
         LA    D4WKREG,IOBCP+D96                   SEARCH        S20201 01520020
         ST    D4WKREG,16(D4CCWIND)    STORE TIC ADDRESS                01540020
         MVI   16(D4CCWIND),D4TIC       MOVE TIC OP CODE                01560020
         MVI   24(D4CCWIND),RDDOP      MOVE READ DATA OP-CODE           01580020
         MVC   25(3,D4CCWIND),DECAREA+1 MOVE AREA ADDRESS FROM DECB     01600020
         MVC   30(2,D4CCWIND),DECLNGTH  MOVE DECB LENGTH AS COUNT       01620020
         TM    IOBDTYPE,EXSCH          IF THIS IS EXTENDED SEARCH       01640020
         BC    1,D4EXSCH                GO TO THAT MODULE               01660020
         LA    D4CCWIND,24(D4CCWIND)   INCREMENT TO LAST CCW            01680020
         TM    IOBDTYPE+1,READ         TEST FOR READ OR WRITE           01700020
         BCR   1,RETREG                EXIT IF THIS WAS A READ REQUEST  01720020
         MVI   0(D4CCWIND),D4WRITE     CHANGE READ OP  TO WRITE DATA OP 01740020
         TM    IOBDTYPE,VERIFY          TEST FOR VERIFY OPTION          01760020
         BCR   8,RETREG                  IF NOT GO EXIT                 01780020
         LA    D4VERR,IOBCP+8           SET A POINTER TO THE SEARCH CCW 01800020
         TM    IOBDCPND,YESCARN         IS RPS FEATURED          S20201 01801020
         BNO   NOTCARN                  NO, THEN TEST FOR READ   S20201 01802020
*                                       OR WRIT                  S20201 01803020
         L     SECTOR,IOBDCPND          GET SECTOR ADDR IF RPS   S20201 01804020
         MVI   HALFCCW(D4CCWIND),CCHN   COMMAND CHAIN THE READ   S20201 01805020
*                                       SECTOR                   S20201 01806020
         LA    SECTOR,ONEBYTE(0,SECTOR) POINT TO SECTOR2         S20201 01807020
         ST    SECTOR,FULLCCW(0,D4CCWIND)  PUT PT IN RD SECT     S20201 01808020
*                                       ADDR AREA                S20201 01809020
         MVI   FULLCCW(D4CCWIND),RDSECT PUT IN RD SECT COMMAND   S20201 01810020
*                                       CODE                     S20201 01811020
         MVC   CARN12(HALFCCW,D4CCWIND),FLGCNT  PUT IN           S20201 01812020
*                                       FLAG/COUNT FIEL          S20201 01813020
         LA    D4CCWIND,FULLCCW(0,D4CCWIND) UPDATE PT TO NEXT    S20201 01814020
*                                       CCW                      S20201 01815020
NOTCARN  EQU   *                                                 S20201 01816020
         L     VERBASE,12(0,FDNBASE)   LOAD VERIFY'S ENTRY POINT/BASE   01820020
         BR    VERBASE                 GO CONSTRUCT VERIFY CCWS         01840020
*                                      VERIFY MODULE WILL RETURN TO     01860020
*                                      FOUNDATION ON REGISTER 14        01880020
*                                                                       01900020
D4EXSCH  EQU   *                                                 S20201 01905020
         TM    IOBDCPND,YESCARN         IS RPS AROUND            S20201 01910020
         BNO   NONCARN                  IF NOT, BRANCH           S20201 01915020
         MVI   IOBDCPND,SETSECT         PUT IN HEX 23 FOR KW     S20201 01920020
NONCARN  EQU   *                                                 S20201 01925020
         L     D4EPREG,D4EKAD           LOAD ADDR OF EXTENDED    S20201 01930020
*                                       SEARCH                   S20201 01935020
         BCR   15,D4EPREG            GO TO KEY-EXTENDED SEARCH MODULE   01940020
*                                                                       01960020
*                                                                       01980020
D4CON1   DC    X'6000000529'  FLAGS, COUNT, SEARCH-KEY-EQUAL OP-CODE    02000020
D4RDCNT  EQU   X'12'   OP CODE FOR READ COUNT                           02020020
D4CCHN   EQU   X'40'   COMMAND CHAIN FLAG                               02040020
SILI     EQU   X'20'                   SUPPRESS INCORRECT LENGTH        02060020
D4TIC    EQU   X'08'   TIC OP CODE                                      02080020
D4WRITE  EQU   X'05'   WRITE DATA OP CODE                               02100020
RDDOP    EQU   X'06'    READ DATA OP-CODE                               02120020
*                                                                       02140020
*                                                                       02141020
*      RPS CONSTANTS AND EQUATES                                        02142020
*                                                                       02143020
FLGCNT   DC    X'00000001'              FLAG/COUNT FIELD FOR RD  S20201 02144020
*                                       SECT                     S20201 02145020
*                                                                       02146020
ONEBYTE  EQU   1                        ONE BYTE  DISPLACEMENT   S20201 02147020
D2       EQU   2                        2 BYTE DISPLACEMENT      S20201 02148020
HALFCCW  EQU   4                        HALF CCW  DISPLACEMENT   S20201 02149020
FULLCCW  EQU   8                        FULL CCW DISPLACEMENT    S20201 02150020
CARN12   EQU   12                       1-1/2 CCW DISPLACEMENT   S20201 02151020
D96      EQU   96                       12 CCW DISPLACEMENT      S20201 02152020
*                                                                       02153020
RDSECT   EQU   X'22'                    READ SECTOR COMMAND CODE S20201 02154020
CCHN     EQU   X'40'                    COMMAND CHAINING FLAG    S20201 02155020
SETSECT  EQU   X'23'                    CODE FOR KW MODULE       S20201 02156020
YESCARN  EQU   X'FF'                   BYTE TO TEST FOR RPS      S20201 02157020
         DC    X'00'   FILLER - FILLER - FILLER                         02160020
HYGDN    DC    C'IGGR'                  THIS CONSTANT IS TO      S20201 02165020
*                                         POSITION SENSING              02170020
*                                          MODULE                       02175020
*              THE FOLLOWING CNOP MUST REMAIN ON A HALF-WORD BOUNDARY   02180020
         CNOP  0,8                 PAD MODULE TO DOUBLE WORD MULTIPLE   02200020
         EJECT                                                          02220020
*              EXCEPTION CODES                                          02240020
NOREC    EQU   X'80'                                                    02260020
LGNCK    EQU   X'40'                                                    02280020
NOSPA    EQU   X'20'                                                    02300020
INVAL    EQU   X'10'                                                    02320020
UNCOR    EQU   X'08'                                                    02340020
ENDOD    EQU   X'04'                                                    02360020
UNREL    EQU   X'02'                                                    02380020
*              OPTIONS AND TYPE                                         02400020
VERIFY   EQU   X'80'                                                    02420020
OFLOW    EQU   X'40'                                                    02440020
EXSCH    EQU   X'20'                                                    02460020
FEEDB    EQU   X'10'                                                    02480020
ACTAD    EQU   X'08'                                                    02500020
DYNBF    EQU   X'04'                                                    02520020
READX    EQU   X'02'                                                    02540020
RELRD    EQU   X'01'                                                    02560020
KEYOP    EQU   X'80'                                                    02580020
LGNOP    EQU   X'40'                                                    02600020
READ     EQU   X'08'                                                    02620020
KEY      EQU   X'04'                                                    02640020
ADD      EQU   X'02'                                                    02660020
*      DATA CONTROL BLOCK (DCB) DEFINITION                              02680020
*                                                                       02700020
         DCBD  DSORG=DA                                                 02720020
*                                                                       02740020
*                                                                       02760020
*                                                                       02780020
*      DATA EVENT CONTROL BLOCK (DECB) DEFINITION                       02800020
         DS    0F                                                       02820020
DECBDEF  DSECT                                                          02840020
DECSDECB DS    CL4            STANDARD EVENT CONTROL BLOCK (ECB)        02860020
DECTYPE  DS    CL2            TYPE FIELD                                02880020
DECLNGTH DS    CL2            DATA LENGTH                               02900020
DECDCBAD DS    CL4            ADDRESS OF DCB                            02920020
DECAREA  DS    CL4            ADDRESS OF DATA AREA                      02940020
DECIOBPT DS    CL4            ADDRESS OF THE IOB                        02960020
DECKYADR DS    CL4            ADDRESS OF KEY                            02980020
DECRECPT DS    CL4            ADDRESS OF RECORD REFERENCE               03000020
         EJECT                                                          03020020
*                                                                       03040020
*      I/O BLOCK (IOB) DEFINITION                                       03060020
*                                                                       03080020
*              STANDARD IOB                                             03100020
         DS    0F                                                       03120020
IOBDEF   DSECT                                                          03140020
IOBFLAG1 DS    CL1            STATUS FLAG                               03160020
IOBFLAG2 DS    CL1            ERROR FLAG                                03180020
IOBSENSE DS    CL2            SENSE BYTES 0 AND 1                       03200020
IOBECBPT DS    CL4            ECB POINTER                               03220020
IOBCSW   DS    0CL8           CHANNEL STATUS WORD                       03240020
IOBCSWCA DS    0CL4           COMMAND ADDRESS                           03260020
         DS    CL1                                                      03280020
         DS    CL3                                                      03300020
IOBCSWST DS    CL2            STATUS BYTES                              03320020
IOBCSWCT DS    CL2            REMAINING COUNT                           03340020
IOBSTART DS    0CL4           CHANNEL PROGRAM POINTER                   03360020
IOBSIOCC DS    CL1            SIO CONDITION CODE                        03380020
         DS    CL3                                                      03400020
IOBDCBPT DS    0CL4           DCB POINTER                               03420020
IOBWGHT  DS    CL1            CHANNEL WEIGHT                            03440020
         DS    CL3                                                      03460020
IOBRESTR DS    0CL4           RESTART POINTER                           03480020
         DS    CL1                                                      03500020
         DS    CL3                                                      03520020
IOBINCAM DS    CL2            BLOCK COUNT INCREMENT AMOUNT              03540020
IOBERRCT DS    CL2            ERROR COUNTER                             03560020
IOBSEEK  DS    CL8            SEEK ADDRESS                              03580020
*        BDAM EXTENDED IOB                                              03600020
*                                                                       03620020
IOBDBYTR DS    CL2            BYTES REMAINING ON TRACK                  03640020
IOBDIOBS DS    CL2            SIZE OF THIS IOB                          03660020
IOBDPLAD DS    0CL4           IOB POOL LINK ADDRESS                     03680020
IOBDAVLI DS    CL1            IOB AVAILABILITY INDICATOR                03700020
         DS    CL3                                                      03720020
IOBDTYPE DS    CL2            TYPE FIELD                                03740020
IOBDSTAT DS    CL2            IOB STATUS                                03760020
IOBDCPND DS    CL4            CHANNEL PROGRAM NORMAL END ADDRESS        03780020
IOBDBYTN DS    CL2            BYTES NEEDED BY NEW RECORD                03800020
         DS    CL2                                                      03820020
IOBDQPTR DS    CL4            LINK FIELD FOR QUEUED IOB'S               03840020
IOBUPLIM DS    CL8            LIMIT MBBCCHHR FOR EXTENDED SEARCH        03860020
IOBDNRCF DS    CL8            COUNT FIELD FOR NEW RECORD                03880020
IOBCP    DS    CL200                   CHANNEL PROGRAM AREA             03900020
         END                                                            03920020
