         TITLE 'IFDOLT21 GRAB MODULE'                                   00010000
         TITLE 'IFDOLT21 GRAB MODULE'                                   00020000
         MACRO                                                          00030000
&NAME    GRAB  &CTRL=,&CLASS=,&TYPE=,&CDSADR=,&MAP=NO,&LSTNAME=,&MF=    00040000
.*                                                                      00050000
         GBLB  &EXECUTV,&E536454                                        00060000
         LCLA  &FLAGS,&COUNT,&A                                         00070000
         LCLC  &C,&T,&F,&Z,&CHAR                                        00080000
.*                                                                      00090000
         AIF   ('&MAP' EQ 'YES').MAP1                                   00100000
         AGO   .EXIT                                                    00110000
.MAP1    ANOP                                                           00120000
GRABMAP  DSECT                                                          00130000
&Z       SETC  '$'                                                      00140000
         AIF   (&E536454).ZIPPER                                        00150000
           DC  XL1'0' .            CONTROL PROGRAM FLAGS                00160000
           DC  XL1'0' .            MACRO LEVEL                          00170000
           DC  XL2'0' .            MACRO ID                             00180000
         AGO   .ZIPPED                                                  00190000
.ZIPPER  ANOP                                                           00200000
&Z.GRBTRMG DC  XL1'0' .            CONTROL PROGRAM FLAGS                00210000
&Z.GRBLEVL DC  XL1'0' .            MACRO LEVEL                          00220000
&Z.GRBIDNT DC  XL2'0' .            MACRO ID                             00230000
.ZIPPED  ANOP                                                           00240000
&Z.GRABCDS DC  A(0) .              ADDRESS OF AREA TO RECEIVE CDS INFO  00250000
&Z.GRABFLG DC  XL1'0' .            FLAGS                                00260000
&Z.GRABCLS DC  XL1'0' .            CLASS                                00270000
&Z.GRABTYP DC  XL1'0' .            TYPE                                 00280000
&Z.GRABCNT DC  XL1'0' .            # OF CDS BYTES.                      00290000
.EXIT    MEND                                                           00300000
         EJECT                                                          00310000
         LCLA  &T,&SPN                                            0003  00320000
.@001    ANOP                                                     0003  00330000
IFDOLT21 CSECT ,                                                  0003  00340000
         BC    15,24(0,@F)                                              00350000
         DC    C'IFDOLT21 29 MAR 74'                             0003  00360000
         ST    @E,12(0,@D)                                        0003  00370000
         STM   @0,@C,20(@D)                                       0003  00380000
         BALR  @B,0                                               0003  00390000
@PSTART  DS    0H                                                 0003  00400000
         USING @PSTART+00000,@B                                   0003  00410000
         ST    @D,@SAV001+4                                       0003  00420000
         LA    @F,@SAV001                                         0003  00430000
         ST    @F,8(0,@D)                                         0003  00440000
         LR    @D,@F                                              0003  00450000
         USING GRABMAP,1                                                00460000
         USING CHASCT,2                                                 00470000
         DS    0H                                                       00480000
*  GRBCTL='1'B;                          /* GRAB ACTIVE          M4506* 00490000
         OI    A00008,B'00010000'                                 0059  00500000
*         GRAB10=ADDR(GRAB10A);          /* ADDRESS IN PROGRAM   M4506* 00510000
         LA    @9,GRAB10A                                         0060  00520000
*         DUMMYCTR=UNICTR;          /* FIND NUMBER OF DEVICES */        00530000
         MVC   UNITCTR+3(1),UNICTR                                0061  00540000
*                                   /* IN DEVTABLE.           */        00550000
*         R4=PRIDVPTR;              /* GET PRIMARY DEVICE POINTER. */   00560000
         L     @4,PRIDVPTR                                        0062  00570000
*         IF MACROLVL^='02'X|       /* FACILITY DOES NOT EXIST IN */    00580000
*             CDSPTR=0|                                        /*21051* 00590000
*               NDR='1'B THEN       /* THIS OPERATING ENVIRONMENT */    00600000
         CLI   MACROLVL,X'02'                                     0063  00610000
         BC    07,@9FF                                            0063  00620000
         SR    @F,@F                                              0063  00630000
         C     @F,CDSPTR                                          0063  00640000
         BC    08,@9FE                                            0063  00650000
         TM    OLTEPSW2,B'00000100'                               0063  00660000
         BC    12,@9FD                                            0063  00670000
*           DO;                     /* RETURN TO CALLER WITH      */    00680000
@9FE     EQU   *                                                  0064  00690000
*           RC=4;                   /* RETURN CODE 04.            */    00700000
@9FF     LA    @F,4                                               0065  00710000
*           GO TO GRAB28;                                               00720000
         BC    15,GRAB28                                          0066  00730000
*           END;                                                        00740000
*         IF UNICTR='01'X THEN      /* ENTRY LIST CONTAINED ONLY */     00750000
@9FD     CLI   UNICTR,X'01'                                       0068  00760000
         BC    07,@9FC                                            0068  00770000
*           DO;                     /* ONE DEVICE. RETURN TO     */     00780000
*           RC=12;                  /* CALLER WITH RETURN CODE 0C*/     00790000
         LA    @F,12                                              0070  00800000
*           GO TO GRAB28;                                               00810000
         BC    15,GRAB28                                          0071  00820000
*           END;                                                        00830000
*         ENDOFTAB=DEVTBPTR+(UNITCTR-1)*TABLNGTH;  /* ESTABLISH X03008* 00840000
@9FC     L     @F,UNITCTR                                         0073  00850000
         BCTR  @F,0                                               0073  00860000
         MH    @F,TABLNGTH                                        0073  00870000
         A     @F,DEVTBPTR                                        0073  00880000
         ST    @F,ENDOFTAB                                        0073  00890000
*                                                 /* DEVTABLE ADDRESS * 00900000
*         IF SECDVPTR=0 THEN        /* IS THIS THE INITIAL GRAB. */     00910000
         SR    @F,@F                                              0074  00920000
         C     @F,SECDVPTR                                        0074  00930000
         BC    07,@9FB                                            0074  00940000
*           DO;                                                         00950000
*         R5=PRIDVPTR+TABLNGTH;    /* YES, SET POINTER TO ENTRY X03008* 00960000
         LH    @5,TABLNGTH                                        0076  00970000
         A     @5,PRIDVPTR                                        0076  00980000
*           GO TO GRAB01;           /* FOLLOWING PRIMARY ENTRY */       00990000
         BC    15,GRAB01                                          0077  01000000
*           END;                                                        01010000
*         R5=SECDVPTR+TABLNGTH;    /* NO, SET POINTER TO ENTRY  X03008* 01020000
@9FB     LH    @5,TABLNGTH                                        0079  01030000
         A     @5,SECDVPTR                                        0079  01040000
*                                   /* FOLLOWING LAST ACTIVE    */      01050000
*                                   /*    SECONDARY ENTRY       */      01060000
* GRAB01:                                                               01070000
*         /************************************************************ 01080000
*         /*                START SEARCH FOR DEVICE                   * 01090000
*         /************************************************************ 01100000
*         SEARCHED=0;               /* INITIALIZE SEARCHED COUNTER. */  01110000
GRAB01   SR    @3,@3                                              0080  01120000
* GRAB02:                                                               01130000
*         /************************************************************ 01140000
*         /*   LOOK AT EACH DEVICE IN DEVTABLE UNTIL DEVICE FOUND     * 01150000
*         /************************************************************ 01160000
*         DO COUNTER=1 TO UNITCTR;                                      01170000
GRAB02   LA    @6,1                                               0081  01180000
         BC    15,@DO9F9                                          0081  01190000
*           IF R5>ENDOFTAB THEN     /* HAS THE END OF THE TABLE BEEN */ 01200000
@DO9FA   C     @5,ENDOFTAB                                        0082  01210000
         BC    12,@9F6                                            0082  01220000
*         R5=DEVTBPTR;              /* REACHED. YES, SEARCH FROM 21051* 01230000
         L     @5,DEVTBPTR                                        0083  01240000
*                                   /* BEGINNING OF THE DEVTABLE */     01250000
*           SEARCHED=SEARCHED+1;    /* INCREMENT SEARCHED COUNTER */    01260000
@9F6     LA    @3,1(0,@3)                                         0084  01270000
*         IF SOSPRUN='SOSP' THEN                                        01280000
         CLC   SOSPRUN(4),@C4                                     0085  01290000
*           GO TO GRAB02A;         /* SOSP UTILITY IS IN SYSTEM  21051* 01300000
         BC    08,GRAB02A                                         0086  01310000
*           IF GRABBED='1'B |       /* HAS THE DEVICE ALREADY BEEN  */  01320000
*             PRIMARY='1'B THEN     /* GRABBED OR IS IT THE PRIMARY   * 01330000
         TM    12(@5),B'00000100'                                 0087  01340000
         BC    01,@9F5                                            0087  01350000
         TM    12(@5),B'01000000'                                 0087  01360000
         BC    12,@9F4                                            0087  01370000
*                                                             /*X03008* 01380000
*             GO TO GRAB10;         /* DEVICE. YES, UPDATE AND TRY  */  01390000
@9F5     BCR   15,@9                                              0088  01400000
*                                   /* ANOTHER DEVICE.              */  01410000
* GRAB02A:                                                              01420000
* GRAB02B:                                                    /*XM0099* 01430000
*         IF FLAGS='03'X THEN           /* GRAB FOR NEXT DEVICE XM0099* 01440000
@9F4     EQU   *                                                  0089  01450000
GRAB02A  EQU   *                                                  0089  01460000
GRAB02B  CLI   FLAGS,X'03'                                        0089  01470000
*             GO TO GRAB20;         /* DEVICE ON THE LIST. YES, GO */   01480000
         BC    08,GRAB20                                          0090  01490000
*                                   /* AND DO DATA PROTECTION */        01500000
*           IF FLAGS<'03'X THEN     /* IS THE GRAB ACCORDING TO */      01510000
         CLI   FLAGS,X'03'                                        0091  01520000
*             GO TO GRAB08;         /* CLASS AND OR TYPE ONLY */        01530000
         BC    04,GRAB08                                          0092  01540000
*                                   /* YES, GO TO CLASS DECODE */       01550000
*         /************************************************************ 01560000
*         /*                                                          * 01570000
*         /*                     CHANNEL DECODE                       * 01580000
*         /*                                                          * 01590000
*         /************************************************************ 01600000
*           IF CHANCODE='00'B THEN  /* DOES USER CARE ABOUT THE CHAN */ 01610000
         TM    FLAGS,B'11000000'                                  0093  01620000
*             GO TO GRAB04;         /* NO, GO TO CONTROL UNIT DECODE.*/ 01630000
         BC    08,GRAB04                                          0094  01640000
*           IF DCH='1'B THEN        /* IS IT A REQUEST FOR A DIFF.CH.*/ 01650000
         TM    FLAGS,B'10000000'                                  0095  01660000
*             GO TO GRAB03;         /* YES, GET DIFFERENT CHANNEL.*/    01670000
         BC    01,GRAB03                                          0096  01680000
*           IF PRICHAN=SECCHAN THEN /* NO, FIND DEV.AD WITH SAME CHAN * 01690000
         CLC   5(1,@4),5(@5)                                      0097  01700000
*             GO TO GRAB04;         /* FOUND, GO LOOK AT CU REQUEST.*/  01710000
         BC    08,GRAB04                                          0098  01720000
*           GO TO GRAB10;           /* LOOK AT NEXT ENTRY IN DEVTABLE.* 01730000
         BCR   15,@9                                              0099  01740000
* GRAB03:                                                               01750000
*         /************************************************************ 01760000
*         /*             REQUEST FOR DIFFERENT CHANNEL                * 01770000
*         /************************************************************ 01780000
*           IF PRICHAN=SECCHAN THEN /* IS IT A DIFFERENT CHANNEL.*/     01790000
GRAB03   CLC   5(1,@4),5(@5)                                      0100  01800000
*             GO TO GRAB10;         /* YES, LOOK AT CU REQUEST. NO, */  01810000
         BCR   08,@9                                              0101  01820000
*                                   /* LOOK AT NEXT ENTRY IN DEVTABLE * 01830000
* GRAB04:                                                               01840000
*         /************************************************************ 01850000
*         /*                                                          * 01860000
*         /*                  CONTROL UNIT DECODE                     * 01870000
*         /*                                                          * 01880000
*         /************************************************************ 01890000
*           IF CUCODE='00'B THEN    /* DOES USER CARE ABOUT THE CU.*/   01900000
GRAB04   TM    FLAGS,B'00110000'                                  0102  01910000
*             GO TO GRAB06;         /* NO, GO TO DEVICE DECODE. */      01920000
         BC    08,GRAB06                                          0103  01930000
*           IF DCU='1'B THEN        /* IS IT A REQUEST FOR A DIFF.CU. * 01940000
         TM    FLAGS,B'00100000'                                  0104  01950000
*           GO TO GRAB05;           /* YES, GET DIFFERENT CU. */        01960000
         BC    01,GRAB05                                          0105  01970000
*           IF PRICU=SECCU THEN     /* NO, FIND DEV.AD WITH SAME CU */  01980000
         CLC   6(1,@4),6(@5)                                      0106  01990000
*             GO TO GRAB06;         /* FOUND, GO LOOK AT DEV REQUEST.*/ 02000000
         BC    08,GRAB06                                          0107  02010000
*           GO TO GRAB10;           /* LOOK AT NEXT ENTRY IN DEVTABLE.* 02020000
         BCR   15,@9                                              0108  02030000
* GRAB05:                                                               02040000
*         /************************************************************ 02050000
*         /*           REQUEST FOR DIFFERENT CONTROL UNIT             * 02060000
*         /************************************************************ 02070000
*           IF PRICU=SECCU THEN     /* IS IT A DIFFERENT CU. */         02080000
GRAB05   CLC   6(1,@4),6(@5)                                      0109  02090000
*             GO TO GRAB10;         /* YES, LOOK AT DEVICE REQUEST. NO* 02100000
         BCR   08,@9                                              0110  02110000
*                                   /* LOOK AT NEXT ENTRY IN DEVTABLE * 02120000
* GRAB06:                                                               02130000
*         /************************************************************ 02140000
*         /*                                                          * 02150000
*         /*                      DEVICE DECODE                       * 02160000
*         /*                                                          * 02170000
*         /************************************************************ 02180000
*           IF DEVCODE='00'B THEN   /* DOES USER CARE ABOUT DEVICE. */  02190000
GRAB06   TM    FLAGS,B'00001100'                                  0111  02200000
*             GO TO GRAB08;         /* NO, GO TO CLASS DECODE. */       02210000
         BC    08,GRAB08                                          0112  02220000
*           IF DDV='1'B THEN        /* IS IT A REQUEST FOR A DIFF.DEV.* 02230000
         TM    FLAGS,B'00001000'                                  0113  02240000
*             GO TO GRAB07;         /* YES, GET DIFFERENT DEVICE. */    02250000
         BC    01,GRAB07                                          0114  02260000
*           IF PRIDEV=SECDEV THEN   /* NO,FIND DEV.AD WITH SAME DEVICE* 02270000
         CLC   7(1,@4),7(@5)                                      0115  02280000
*             GO TO GRAB08;         /* FOUND, GO LOOK AT CLASS REQUEST* 02290000
         BC    08,GRAB08                                          0116  02300000
*           GO TO GRAB10;           /* LOOK AT NEXT ENTRY IN DEVTABLE.* 02310000
         BCR   15,@9                                              0117  02320000
* GRAB07:                                                               02330000
*         /************************************************************ 02340000
*         /*              REQUEST FOR DIFFERENT DEVICE                * 02350000
*         /************************************************************ 02360000
*           IF PRIDEV=SECDEV THEN   /* IS IT A DIFFERENT DEVICE. */     02370000
GRAB07   CLC   7(1,@4),7(@5)                                      0118  02380000
*             GO TO GRAB10;         /* YES, LOOK AT CLASS REQUEST. NO,* 02390000
         BCR   08,@9                                              0119  02400000
*                                   /* LOOK AT NEXT ENTRY IN DEVTABLE * 02410000
* GRAB08:                                                               02420000
*         /************************************************************ 02430000
*         /*                                                          * 02440000
*         /*                      CLASS DECODE                        * 02450000
*         /*                                                          * 02460000
*         /************************************************************ 02470000
*           IF CLAS='1'B THEN       /* IS CLASS APPLICABLE. */          02480000
GRAB08   TM    FLAGS,B'00000010'                                  0120  02490000
*             GO TO GRAB09;         /* NO, GO TO TYPE DECODE. */        02500000
         BC    01,GRAB09                                          0121  02510000
*           IF CLASS^=CDSCLASS THEN /* IS IT SAME CLASS AS SPECIFIED.*/ 02520000
         CLC   CLASS(1),38(@5)                                    0122  02530000
*             GO TO GRAB10;         /* NO, LOOK AT NEXT ENTRY */        02540000
         BCR   07,@9                                              0123  02550000
*                                   /* IN DEVTABLE.           */        02560000
* GRAB09:                                                               02570000
*         /************************************************************ 02580000
*         /*                                                          * 02590000
*         /*                      TYPE DECODE                         * 02600000
*         /*                                                          * 02610000
*         /************************************************************ 02620000
*           IF TYP='1'B THEN        /* IS TYPE APPLICABLE. */           02630000
GRAB09   TM    FLAGS,B'00000001'                                  0124  02640000
*             GO TO GRAB20;         /* NO, GO TO DATA PROTECTION. */    02650000
         BC    01,GRAB20                                          0125  02660000
*           IF TYPE=CDSTYPE THEN    /* IS IT SAME TYPE AS SPECIFIED */  02670000
         CLC   TYPE(1),39(@5)                                     0126  02680000
*             GO TO GRAB20;         /* YES, GO TO DATA PROTECTION. */   02690000
         BC    08,GRAB20                                          0127  02700000
*  GRAB10A:                                                             02710000
*         /************************************************************ 02720000
*         /*                                                          * 02730000
*         /*            UPDATE TO NEXT ENTRY IN DEVTABLE              * 02740000
*         /*                                                          * 02750000
*         /************************************************************ 02760000
*         R5=R5+TABLNGTH;           /* UPDATE DEV TAB POINTER   X03008* 02770000
GRAB10A  AH    @5,TABLNGTH                                        0128  02780000
*           IF SEARCHED=UNITCTR THEN/* HAVE ALL ENTRIES BEEN EXAMINED * 02790000
         C     @3,UNITCTR                                         0129  02800000
         BC    07,@9F3                                            0129  02810000
*             DO;                   /* YES, SET RETURN CODE OF 8 AND  * 02820000
*             RC=8;                 /*        RETURN TO CALLER.       * 02830000
         LA    @F,8                                               0131  02840000
*             GO TO GRAB28;                                             02850000
         BC    15,GRAB28                                          0132  02860000
*             END;                                                      02870000
*         END;                                                          02880000
* GRAB20:                                                               02890000
*         /************************************************************ 02900000
*         /*                                                          * 02910000
*         /* CHECK FOR GRAB OF SAME DEVICE DIFFERENT CHANNEL          * 02920000
*         /*                                                          * 02930000
*         /************************************************************ 02940000
*         LOOPPTR = DEVTBPTR;       /* POINTER TO START         YM5417* 02950000
@9F3     AH    @6,@D1                                             0134  02960000
@DO9F9   C     @6,UNITCTR                                         0134  02970000
         BC    12,@DO9FA                                          0134  02980000
GRAB20   MVC   LOOPPTR(4),DEVTBPTR                                0135  02990000
*         SUM = UNICTR;             /* NUMBER OF DEVICES        YM5417* 03000000
         MVC   SUM+1(1),UNICTR                                    0136  03010000
         MVI   SUM,X'00'                                          0136  03020000
*         DO Z=1 TO SUM BY +1;      /* SCAN ALL DEV ENTRIES     YM7636* 03030000
         LA    @F,1                                               0137  03040000
         BC    15,@DO9F1                                          0137  03050000
*           IF SECUCBAD = UCBADRX THEN /*IS UCB SAME            YM5417* 03060000
@DO9F2   L     @C,LOOPPTR                                         0138  03070000
         MVC   @TEMP4(4),8(@C)                                    0138  03080000
         L     @F,@TEMP4                                          0138  03090000
         C     @F,8(0,@5)                                         0138  03100000
         BC    07,@9EE                                            0138  03110000
*             DO;                   /* YES, IS THE DEVICE       YM5417* 03120000
*               IF PRIMX='1'B THEN       /* A PRIMARY, GO UPDATEYM7636* 03130000
         TM    12(@C),B'01000000'                                 0140  03140000
*                 GO TO GRAB10A;         /* DEVTAB PTR-TRY AGAINYM7636* 03150000
         BC    01,GRAB10A                                         0141  03160000
*               IF GRABEDX='1'B THEN     /* A GRABBED DEVICE    YM7636* 03170000
         TM    12(@C),B'00000100'                                 0142  03180000
         BC    12,@9ED                                            0142  03190000
*                 DO;                    /* YES,                YM7636* 03200000
*                 IF SOSPRUN^='SOSP' THEN /* IS THIS SOSP       YM7636* 03210000
         CLC   SOSPRUN(4),@C4                                     0144  03220000
*                   GO TO GRAB10A;       /* YES, OK. NO, GO     YM7636* 03230000
         BC    07,GRAB10A                                         0145  03240000
*                                        /* UPDATE PTR AND TRY  YM7636* 03250000
*                   END;                 /* AGAIN               YM7636* 03260000
*             END;                  /* NO, OK TO GRAB           YM5417* 03270000
@9ED     EQU   *                                                  0147  03280000
*           LOOPPTR=LOOPPTR+TABLNGTH; /* NO, CHECK NEXT DEVICE  YM5417* 03290000
@9EE     LH    @F,TABLNGTH                                        0148  03300000
         A     @F,LOOPPTR                                         0148  03310000
         ST    @F,LOOPPTR                                         0148  03320000
*         END;                      /* END OF SCAN              YM5417* 03330000
*         /************************************************************ 03340000
*         /*                                                          * 03350000
*         /*                PERFORM DATA PROTECTION                   * 03360000
*         /*                                                          * 03370000
*         /************************************************************ 03380000
*         SAVE=SECDVPTR;            /* SAVE POINTER TO LAST GRABBED   * 03390000
         MVC   @TEMP2+2(2),Z                                      0149  03400000
         L     @F,@TEMP2                                          0149  03410000
         AH    @F,@D1                                             0149  03420000
@DO9F1   STH   @F,Z                                               0149  03430000
         MVC   @TEMP2+2(2),SUM                                    0149  03440000
         C     @F,@TEMP2                                          0149  03450000
         BC    12,@DO9F2                                          0149  03460000
         MVC   SAVE(4),SECDVPTR                                   0150  03470000
*                                   /* DEVICE.                        * 03480000
*         SECDVPTR=R5;              /* PUT POINTER TO POSSIBLE        * 03490000
         ST    @5,SECDVPTR                                        0151  03500000
*                                   /* SECONDARY DEVICE IN SECDVPTR   * 03510000
*                                   /* FOR D.P. MODULE.               * 03520000
*         IF DPDONE='0'B THEN       /* HAS DATA PROTECTION BEEN DONE  * 03530000
         TM    12(@5),B'00100000'                                 0152  03540000
         BC    05,@9EC                                            0152  03550000
*                                   /* ON THIS DEVICE.                * 03560000
*           DO;                     /* NO,                            * 03570000
*           PROTECT='1'B;           /* SET FLAG TO INDICATE TO D.P.   * 03580000
         OI    OLTEPSW,B'01000000'                                0154  03590000
*                                   /* MODULE THAT THIS IS FOR A      * 03600000
*                                   /* SECONDARY DEVICE.              * 03610000
*           R15=DATPTR;             /* PUT POINTER TO D.P. MODULE IN  * 03620000
         L     @F,DATPTR                                          0155  03630000
*                                   /* REGISTER 15.                   * 03640000
*           GEN(BALR  R14,R15);     /* GO TO DATA PROTECTION.         * 03650000
         BALR  R14,R15                                                  03660000
         DS    0H                                                       03670000
*           PROTECT='0'B;           /* CLEAR TYPE OF PROTECTION FLAG. * 03680000
         NI    OLTEPSW,B'10111111'                                0157  03690000
*           IF DPDONE='0'B THEN     /* WAS DATA PROTECTION DONE       * 03700000
         TM    12(@5),B'00100000'                                 0158  03710000
         BC    05,@9EB                                            0158  03720000
*                                   /* SUCCESSFULLY.                  * 03730000
*             DO;                   /* NO,                            * 03740000
*         R5=R5+TABLNGTH;           /* UPDATE DEV TAB POINTER   X03008* 03750000
         AH    @5,TABLNGTH                                        0160  03760000
*             SECDVPTR=SAVE;        /* RESTORE ADDRESS OF LAST GRABBED* 03770000
         MVC   SECDVPTR(4),SAVE                                   0161  03780000
*                                   /* DEVICE.                        * 03790000
*             GO TO GRAB02;         /* CONTINUE SEARCH.               * 03800000
         BC    15,GRAB02                                          0162  03810000
*             END;                                                      03820000
*           END;                                                        03830000
@9EB     EQU   *                                                  0164  03840000
*         R7=CDSPTR;                /* GET POINTER TO CDS AREA WITHIN * 03850000
@9EC     L     @7,CDSPTR                                          0165  03860000
*                                   /* THE OLT.                       * 03870000
*         R8=GRABCNT;               /* GET GRAB CNT.                  * 03880000
         SR    @8,@8                                              0166  03890000
         IC    @8,GRABCNT                                         0166  03900000
*         IF CDSDSCRT=0 THEN DO;   /* ARE CDS DEV DSCRPTRS = 0?  21050* 03910000
         CLC   36(4,@5),@D2                                       0167  03920000
         BC    07,@9EA                                            0167  03930000
*         RC='10'X;                /* YES, SET RET CODE AND RETURN21050 03940000
         LA    @F,X'10'                                           0169  03950000
*           GO TO GRAB27;                                      /*21050* 03960000
         BC    15,GRAB27                                          0170  03970000
*           END;                                               /*21050* 03980000
*         RC=0;                                                         03990000
@9EA     SR    @F,@F                                              0172  04000000
*         IF GRABCNT<'0C'X &        /* DOES OLT WANT EXT SIG MASK     * 04010000
*           EXTSGMSK='1'B THEN      /* BUT SPECIFY SMALL BUFFER,      * 04020000
         CLI   GRABCNT,X'0C'                                      0173  04030000
         BC    10,@9E9                                            0173  04040000
         TM    41(@5),B'00010000'                                 0173  04050000
         BC    12,@9E8                                            0173  04060000
*           RC='14'X;               /* YES, SET RET CODE  & GO ON     * 04070000
         LA    @F,X'14'                                           0174  04080000
*         IF GRABCNT<'14'X &        /* DOES OLT WANT SYM NAME BUT     * 04090000
*           SYMNMFLG='1'B THEN      /* BUFFER TOO SMALL, YES,         * 04100000
@9E8     EQU   *                                                  0175  04110000
@9E9     CLI   GRABCNT,X'14'                                      0175  04120000
         BC    10,@9E7                                            0175  04130000
         TM    41(@5),B'00001000'                                 0175  04140000
         BC    12,@9E6                                            0175  04150000
*           RC='14'X;               /* GIVE RET CODE & GO ON.         * 04160000
         LA    @F,X'14'                                           0176  04170000
*         CDSAREA(1:R8)=SECCDS(1:R8); /* LOAD OLT CDS AREA       21050* 04180000
@9E6     EQU   *                                                  0177  04190000
@9E7     LA    @E,32(0,@5)                                        0177  04200000
         LR    @C,@8                                              0177  04210000
         BCTR  @C,0                                               0177  04220000
         LR    @A,@7                                              0177  04230000
         EX    @C,@MVC                                            0177  04240000
*         IF FPMODE='1'B THEN       /* IS DEVICE FILE PROTECTED.      * 04250000
         TM    12(@5),B'00000010'                                 0178  04260000
         BC    12,@9E5                                            0178  04270000
*           FILEPRT='1'B;           /* YES, SET FILE PROTECT FLAG ON  * 04280000
         OI    9(@7),B'10000000'                                  0179  04290000
*                                   /* IN THIS AREA.                  * 04300000
*         IF SHARED='1'B THEN       /* IS THIS A SHARED DEVICE.       * 04310000
@9E5     L     @C,8(0,@5)                                         0180  04320000
         TM    17(@C),B'00100000'                                 0180  04330000
         BC    12,@9E4                                            0180  04340000
*           UNITSHRD='1'B;          /* YES, SET SHARED DEVICE FLAG ON * 04350000
         OI    9(@7),B'01000000'                                  0181  04360000
*                                   /* IN THIS AREA.                  * 04370000
*         IF CEVOLUME='1'B THEN     /* IS THIS A C.E. VOLUME. YES, SET* 04380000
@9E4     TM    13(@5),B'00100000'                                 0182  04390000
         BC    12,@9E3                                            0182  04400000
*           UNITCEVL='1'B;          /* C.E. VOLUME FLAG ON IN THIS    * 04410000
         OI    9(@7),B'00100000'                                  0183  04420000
*                                   /* AREA.                          * 04430000
* GRAB27:                                                               04440000
*         /************************************************************ 04450000
*         /*  SUCCESSFUL COMPLETION, DEVICE DESCRIPTORS NOT AVAILABLE * 04460000
*         /************************************************************ 04470000
*         GRABBED='1'B;             /* SET GRABBED INDICATOR ON */      04480000
@9E3     EQU   *                                                  0184  04490000
GRAB27   OI    12(@5),B'00000100'                                 0184  04500000
*                                   /* IN THIS ENTRY.           */      04510000
* GRAB28:                                                               04520000
*         /************************************************************ 04530000
*         /*         RESTORE REGISTERS AND RETURN TO CALLER           * 04540000
*         /************************************************************ 04550000
*  GRBCTL='0'B;                          /* GRAB COMPLETE        M4506* 04560000
GRAB28   NI    A00008,B'11101111'                                 0185  04570000
*         RETURN;                                                       04580000
*         END;                                                          04590000
@EL01    L     @D,4(0,@D)                                         0187  04600000
         L     @E,12(0,@D)                                        0187  04610000
         LM    @0,@C,20(@D)                                       0187  04620000
         BCR   15,@E                                              0187  04630000
@DATA1   EQU   *                                                        04640000
@0       EQU   00                  EQUATES FOR REGISTERS 0-15           04650000
@1       EQU   01                                                       04660000
@2       EQU   02                                                       04670000
@3       EQU   03                                                       04680000
@4       EQU   04                                                       04690000
@5       EQU   05                                                       04700000
@6       EQU   06                                                       04710000
@7       EQU   07                                                       04720000
@8       EQU   08                                                       04730000
@9       EQU   09                                                       04740000
@A       EQU   10                                                       04750000
@B       EQU   11                                                       04760000
@C       EQU   12                                                       04770000
@D       EQU   13                                                       04780000
@E       EQU   14                                                       04790000
@F       EQU   15                                                       04800000
@D2      DC    F'0'                                                     04810000
@D1      DC    H'1'                                                     04820000
@MVC     MVC   0(1,@A),0(@E)                                            04830000
         DS    0F                                                       04840000
@C4      DC    C'SOSP'                                                  04850000
         DS    0D                                                       04860000
@DATA    EQU   *                                                        04870000
@SAV001  EQU   @DATA+00000000      72 BYTE(S) ON WORD                   04880000
PL       EQU   00000001            FULLWORD POINTER REGISTER            04890000
R1       EQU   00000001            FULLWORD POINTER REGISTER            04900000
R2       EQU   00000002            FULLWORD POINTER REGISTER            04910000
R3       EQU   00000003            FULLWORD POINTER REGISTER            04920000
SEARCHED EQU   00000003            3  BYTE  POINTER REGISTER            04930000
R4       EQU   00000004            FULLWORD POINTER REGISTER            04940000
R5       EQU   00000005            FULLWORD POINTER REGISTER            04950000
COUNTER  EQU   00000006            3  BYTE  POINTER REGISTER            04960000
R7       EQU   00000007            FULLWORD POINTER REGISTER            04970000
R8       EQU   00000008            FULLWORD POINTER REGISTER            04980000
GRAB10   EQU   00000009            FULLWORD POINTER REGISTER            04990000
R14      EQU   00000014            FULLWORD POINTER REGISTER            05000000
R15      EQU   00000015            FULLWORD POINTER REGISTER            05010000
RC       EQU   00000015            3  BYTE  POINTER REGISTER            05020000
CDS      EQU   00000000            256 BYTE(S)                          05030000
CDSAREA  EQU   00000000            20 BYTE(S) ON WORD                   05040000
A00000   EQU   CDSAREA+00000000    2 BYTE(S)                            05050000
UNITADDR EQU   CDSAREA+00000002    2 BYTE(S)                            05060000
UNITDSCP EQU   CDSAREA+00000004    4 BYTE(S)                            05070000
CDSLNGTH EQU   CDSAREA+00000008    1 BYTE(S)                            05080000
UNITFLGS EQU   CDSAREA+00000009    1 BYTE(S)                            05090000
FILEPRT  EQU   CDSAREA+00000009    1 BIT(S)                             05100000
UNITSHRD EQU   CDSAREA+00000009    1 BIT(S)                             05110000
UNITCEVL EQU   CDSAREA+00000009    1 BIT(S)                             05120000
A00001   EQU   CDSAREA+00000010    2 BYTE(S)                            05130000
CDSSYMNM EQU   CDSAREA+00000012    8 BYTE(S)                            05140000
Z        EQU   @DATA+00000072      HALFWORD POINTER                     05150000
SUM      EQU   @DATA+00000074      HALFWORD POINTER                     05160000
LOOPPTR  EQU   @DATA+00000076      FULLWORD POINTER                     05170000
A00002   EQU   00000000            56 BYTE(S)                           05180000
A00003   EQU   A00002+00000000     8 BYTE(S)                            05190000
UCBADRX  EQU   A00002+00000008     4  BYTE  POINTER                     05200000
A00004   EQU   A00002+00000012     1 BYTE(S)                            05210000
A00005   EQU   A00002+00000012     1 BIT(S)                             05220000
PRIMX    EQU   A00002+00000012     1 BIT(S)                             05230000
A00006   EQU   A00002+00000012     3 BIT(S)                             05240000
GRABEDX  EQU   A00002+00000012     1 BIT(S)                             05250000
ENDOFTAB EQU   @DATA+00000080      FULLWORD POINTER                     05260000
PRIDEV1  EQU   00000000            8 BYTE(S) ON WORD                    05270000
A00012   EQU   PRIDEV1+00000000    8 BYTE(S)                            05280000
A00013   EQU   PRIDEV1+00000000    5 BYTE(S)                            05290000
PRICHAN  EQU   PRIDEV1+00000005    1 BYTE(S)                            05300000
PRICU    EQU   PRIDEV1+00000006    1 BYTE(S)                            05310000
PRIDEV   EQU   PRIDEV1+00000007    1 BYTE(S)                            05320000
SECDEV2  EQU   00000000            52 BYTE(S) ON WORD                   05330000
A00014   EQU   SECDEV2+00000000    8 BYTE(S)                            05340000
A00015   EQU   SECDEV2+00000000    5 BYTE(S)                            05350000
SECCHAN  EQU   SECDEV2+00000005    1 BYTE(S)                            05360000
SECCU    EQU   SECDEV2+00000006    1 BYTE(S)                            05370000
SECDEV   EQU   SECDEV2+00000007    1 BYTE(S)                            05380000
SECUCBAD EQU   SECDEV2+00000008    FULLWORD POINTER                     05390000
FLG1X    EQU   SECDEV2+00000012    1 BYTE(S)                            05400000
A00016   EQU   SECDEV2+00000012    1 BIT(S)                             05410000
PRIMARY  EQU   SECDEV2+00000012    1 BIT(S)                             05420000
DPDONE   EQU   SECDEV2+00000012    1 BIT(S)                             05430000
A00017   EQU   SECDEV2+00000012    2 BIT(S)                             05440000
GRABBED  EQU   SECDEV2+00000012    1 BIT(S)                             05450000
FPMODE   EQU   SECDEV2+00000012    1 BIT(S)                             05460000
FLG2X    EQU   SECDEV2+00000013    1 BYTE(S)                            05470000
A00018   EQU   SECDEV2+00000013    1 BIT(S)                             05480000
A00019   EQU   SECDEV2+00000013    1 BIT(S)                             05490000
CEVOLUME EQU   SECDEV2+00000013    1 BIT(S)                             05500000
STDLABL  EQU   SECDEV2+00000013    1 BIT(S)                             05510000
A00020   EQU   SECDEV2+00000014    18 BYTE(S)                           05520000
SECCDS   EQU   SECDEV2+00000032    20 BYTE(S)                           05530000
SECDEVPT EQU   SECDEV2+00000032    4 BYTE(S)                            05540000
CDSDSCRT EQU   SECDEV2+00000036    4 BYTE(S)                            05550000
A00021   EQU   SECDEV2+00000036    2 BYTE(S)                            05560000
CDSCLASS EQU   SECDEV2+00000038    1 BYTE(S)                            05570000
CDSTYPE  EQU   SECDEV2+00000039    1 BYTE(S)                            05580000
CDSSIZE  EQU   SECDEV2+00000040    1 BYTE(S)                            05590000
CDSFLAGS EQU   SECDEV2+00000041    1 BYTE(S)                            05600000
A00022   EQU   SECDEV2+00000041    3 BIT(S)                             05610000
EXTSGMSK EQU   SECDEV2+00000041    1 BIT(S)                             05620000
SYMNMFLG EQU   SECDEV2+00000041    1 BIT(S)                             05630000
A00023   EQU   SECDEV2+00000041    1 BIT(S)                             05640000
REMFILE  EQU   SECDEV2+00000041    1 BIT(S)                             05650000
A00024   EQU   SECDEV2+00000042    2 BYTE(S)                            05660000
SYMNAME  EQU   SECDEV2+00000044    8 BYTE(S)                            05670000
UCBDVDSC EQU   00000016            4 BYTE(S)                            05680000
A00025   EQU   UCBDVDSC+00000000   1 BYTE(S)                            05690000
FEATURES EQU   UCBDVDSC+00000001   1 BYTE(S)                            05700000
A00026   EQU   UCBDVDSC+00000001   2 BIT(S)                             05710000
SHARED   EQU   UCBDVDSC+00000001   1 BIT(S)                             05720000
         ORG   @DATA+00000084                                           05730000
UNITCTR  EQU   *                   FULLWORD INTEGER                     05740000
         DC    FL4'0'                                                   05750000
A00027   EQU   UNITCTR+00000000    3 BYTE(S)                            05760000
DUMMYCTR EQU   UNITCTR+00000003    1 BYTE(S)                            05770000
SAVE     EQU   @DATA+00000088      FULLWORD POINTER                     05780000
MODNAME  EQU   @DATA+00000092      8 BYTE(S)                            05790000
         ORG   MODNAME+00000000                                         05800000
TCDS0    EQU   *                   5 BYTE(S)                            05810000
         DC    C'G0000'                                                 05820000
CDSDEV   EQU   MODNAME+00000005    3 BYTE(S)                            05830000
TABLEADR EQU   @DATA+00000100      FULLWORD POINTER                     05840000
GRABDEVS EQU   00000000            14 BYTE(S)                           05850000
A00028   EQU   GRABDEVS+00000000   8 BYTE(S)                            05860000
COMPUCB  EQU   GRABDEVS+00000008   4  BYTE  POINTER                     05870000
COMPFLAG EQU   GRABDEVS+00000012   8 BIT(S)                             05880000
A00029   EQU   GRABDEVS+00000012   5 BIT(S)                             05890000
A00030   EQU   GRABDEVS+00000012   1 BIT(S)                             05900000
         ORG   @DATA                                                    05910000
         DS    00000104C                                                05920000
@TEMPS   DS    0F                                                       05930000
@TEMP2   DC    F'0'                                                     05940000
@TEMP4   DC    F'0'                                                     05950000
         GLOBAL                                                         05960000
GRAB     IFDCOM                                                         05970000
         GRAB  MAP=YES                                                  05980000
CDSPTR   EQU   $GRABCDS                                                 05990000
GRABFLG  EQU   $GRABFLG                                                 06000000
CLASS    EQU   $GRABCLS                                                 06010000
TYPE     EQU   $GRABTYP                                                 06020000
MACROLVL EQU   $GRBLEVL                                                 06030000
GRABCNT  EQU   $GRABCNT                                                 06040000
SOSPRUN  EQU   SECLST+00000003     4 BYTE(S)                            06050000
FLAGS    EQU   GRABFLG+00000000    1 BYTE(S)                            06060000
CHANCODE EQU   FLAGS+00000000      2 BIT(S)                             06070000
DCH      EQU   FLAGS+00000000      1 BIT(S)                             06080000
CH       EQU   FLAGS+00000000      1 BIT(S)                             06090000
CUCODE   EQU   FLAGS+00000000      2 BIT(S)                             06100000
DCU      EQU   FLAGS+00000000      1 BIT(S)                             06110000
CU       EQU   FLAGS+00000000      1 BIT(S)                             06120000
DEVCODE  EQU   FLAGS+00000000      2 BIT(S)                             06130000
DDV      EQU   FLAGS+00000000      1 BIT(S)                             06140000
DV       EQU   FLAGS+00000000      1 BIT(S)                             06150000
CLAS     EQU   FLAGS+00000000      1 BIT(S)                             06160000
TYP      EQU   FLAGS+00000000      1 BIT(S)                             06170000
OLTEPSW2 EQU   CESWT2+00000000     1 BYTE(S)                            06180000
A00007   EQU   OLTEPSW2+00000000   5 BIT(S)                             06190000
NDR      EQU   OLTEPSW2+00000000   1 BIT(S)                             06200000
A00008   EQU   CESWT3+00000000     1 BYTE(S)                            06210000
A00009   EQU   A00008+00000000     3 BIT(S)                             06220000
GRBCTL   EQU   A00008+00000000     1 BIT(S)                             06230000
A00010   EQU   A00008+00000000     1 BIT(S)                             06240000
OLTEPSW  EQU   CESWT+00000000      1 BYTE(S)                            06250000
A00011   EQU   OLTEPSW+00000000    1 BIT(S)                             06260000
PROTECT  EQU   OLTEPSW+00000000    1 BIT(S)                             06270000
@DATEND  EQU   *                                                        06280000
         END                                                            06290000
