         TITLE 'IFDOLT16 GETCONFIG'                                     00010000
         TITLE 'IFDOLT16 GETCONFIG'                          /*X03906*/ 00020000
         LCLA  &T,&SPN                                            0002  00030000
.@001    ANOP                                                     0002  00040000
IFDOLT16 CSECT ,                                                  0002  00050000
         BC    15,24(0,@F)                                              00060000
         DC    C'IFDOLT16 17 SEP 73'                             0002  00070000
         ST    @E,12(0,@D)                                        0002  00080000
         STM   @0,@C,20(@D)                                       0002  00090000
         BALR  @B,0                                               0002  00100000
@PSTART  DS    0H                                                 0002  00110000
         USING @PSTART+00000,@B                                   0002  00120000
         ST    @D,@SAV001+4                                       0002  00130000
         LA    @F,@SAV001                                         0002  00140000
         ST    @F,8(0,@D)                                         0002  00150000
         LR    @D,@F                                              0002  00160000
*         GEN( USING CHASCT,2);                                         00170000
          USING CHASCT,2                                                00180000
         DS    0H                                                       00190000
*         GENERATE DATA;                                                00200000
*         DCL CESWT3 CHAR(1) GENERATED;     /*OLTEP SWITCHES*/          00210000
*         DCL 1 SWITCHES CHAR(1) BASED(ADDR(CESWT3)),                   00220000
*           2 * BIT(6),                                                 00230000
*           2 CDSEXIST BIT(1),                                          00240000
*           2 * BIT(1);                                                 00250000
*         DCL PRIDVPTR PTR GENERATED;     /*PRIMARY DEVICE PTR*/        00260000
*         DCL 1 * BASED(PRIDVPTR),  /* PRIMARY DEVICE TABLE STRUCT21051 00270000
*           3 * CHAR(1),            /* DEVICE NAME IN EBCDIC     21051* 00280000
*           3 EBNAME CHAR(7),       /* DEVICE MAME IN EBCDIC.    21051* 00290000
*           3 * CHAR(24),           /* CDS IN DEVTABLE           21051* 00300000
*           3 DVTABCDS CHAR(20),    /*CDS ENTRY IN DEVTABLE.     21051* 00310000
*             5 * CHAR(9),                                              00320000
*             5   DVCDSFLG CHAR(1), /* CDS FLAG BYTE.            21051* 00330000
*               7 * BIT(4),                                             00340000
*               7 SYMEXIST BIT(1),  /* SET IF SYM NAME EXISTS    21051* 00350000
*               7 * BIT(1),                                             00360000
*               7 REMCDS BIT(1),    /* SET IF CDS IS IN REMOTE FIL21051 00370000
*             5 * CHAR(2),                                              00380000
*             5 DEVSYMNM CHAR(8);   /* SYMBOLIC NAME OF DEVICE.  21051* 00390000
*         DCL 1 * BASED(ADDR(NAME)) CHAR(8),                            00400000
*           2 PFIRST CHAR(1),                                           00410000
*           2 PRIMENM CHAR(7);                                          00420000
*         DCL CESWT7 CHAR(1) GENERATED;  /*---CESWT7 FORMAT------21050* 00430000
*         DCL  1 OLTEPSW7 BASED(ADDR(CESWT7)), /* C E SWT FORMAT.21050* 00440000
*               3 INCLST BIT(1),   /* INCLUSIVE SERIES OF DEVICES21050* 00450000
*           3 RETTO31 BIT(1),      /* NEED TO RET TO IFDOLT31.   21050* 00460000
*               3 REMOTE BIT(1),   /* REMOTE TERMINAL IN SYSTEM. 21051* 00470000
*           3 LOADCDS BIT(1);            /* LOAD CDS FROM REM FILE21050 00480000
*         PARMFLGS='60'X;               /* CDS LOAD,COMPUTE     X02008* 00490000
         MVI   LOADLIST+12,X'60'                                  0038  00500000
*         PARMPTR=R1;                   /*PUT PTR TO PARMLIST IN REG 5* 00510000
         LR    @5,@1                                              0039  00520000
*         IF MACROLEV < '02'X THEN      /* CHECK MACRO LEVEL*/          00530000
         CLI   1(@5),X'02'                                        0040  00540000
         BC    10,@9FF                                            0040  00550000
*           DO;                                                         00560000
*           CODE=4;                     /*RETURN CODE FOR WRONG MACRO   00570000
*                                         LEVEL*/                       00580000
         LA    @4,4                                               0042  00590000
*           GOTO RTRN;                                                  00600000
         BC    15,RTRN                                            0043  00610000
*           END;                                                        00620000
*         IF MODLEV < MACROLEV THEN     /*COMPARE MACRO LEVEL WITH      00630000
*                                         MODULE LEVEL*/                00640000
@9FF     CLC   MODLEV(1),1(@5)                                    0045  00650000
         BC    10,@9FE                                            0045  00660000
*           DO;                                                         00670000
*           CODE=4;                     /*RETURN CODE FOR WRONG MACRO   00680000
*                                         LEVEL*/                       00690000
         LA    @4,4                                               0047  00700000
*           GOTO RTRN;                                                  00710000
         BC    15,RTRN                                            0048  00720000
*           END;                                                        00730000
*         IF CDSEXIST='0'B THEN         /*IS CDS AVAILABLE?*/           00740000
@9FE     TM    SWITCHES,B'00000010'                               0050  00750000
         BC    05,@9FD                                            0050  00760000
*           DO;                                                         00770000
*           CODE=4;                     /*RETURN CODE FOR CDS NOT       00780000
*                                         AVAILABLE*/                   00790000
         LA    @4,4                                               0052  00800000
*           GOTO RTRN;                  /*BRANCH IF CDS NOT AVAILABLE*/ 00810000
         BC    15,RTRN                                            0053  00820000
*           END;                                                        00830000
*         IF SIZE=0 THEN                /* IS SIZE 0           OX01385* 00840000
@9FD     CLI   12(@5),0                                           0055  00850000
         BC    07,@9FC                                            0055  00860000
*           DO;                         /* YES,                OX01385* 00870000
*           CODE=8;                     /* RETURN CODE 8       OX01385* 00880000
         LA    @4,8                                               0057  00890000
*           GO TO RTRN;                 /* EXIT                OX01385* 00900000
         BC    15,RTRN                                            0058  00910000
*           END;                        /*                     OX01385* 00920000
*         IF CDSADR=0 THEN                                              00930000
@9FC     SR    @F,@F                                              0060  00940000
         C     @F,4(0,@5)                                         0060  00950000
         BC    07,@9FB                                            0060  00960000
*           DO;                         /*PRIMARY DEVICE */             00970000
*           IF SYMEXIST='1'B THEN  /* IS A SYMBOLIC NAME FOR THES21050* 00980000
         L     @1,PRIDVPTR                                        0062  00990000
         TM    41(@1),B'00001000'                                 0062  01000000
         BC    12,@9FA                                            0062  01010000
*             DO;                  /* DEVICE EXIST IN  THE SCT?  21050* 01020000
*       NAME=DEVSYMNM;              /* PREPARE TO LOAD SYM ENTRY 21051* 01030000
         MVC   NAME(8),44(@1)                                     0064  01040000
*         IF REMCDS='1'B THEN      /* CDS IN REMOTE FILE?        21051* 01050000
         TM    41(@1),B'00000010'                                 0065  01060000
*             GO TO CHEKFILE;      /* LOAD IN CDS ENTRY.         21051* 01070000
         BC    01,CHEKFILE                                        0066  01080000
*         GO TO LOADENT;           /* LOAD ENTRY FROM LOCAL FILE.21051* 01090000
         BC    15,LOADENT                                         0067  01100000
*             END;                 /*                            21050* 01110000
*          PFIRST='G';                                                  01120000
@9FA     MVI   A00018,C'G'                                        0069  01130000
*           PRIMENM=EBNAME;                                             01140000
         L     @1,PRIDVPTR                                        0070  01150000
         MVC   A00018+1(7),1(@1)                                  0070  01160000
*           GOTO LOADENT;                                               01170000
         BC    15,LOADENT                                         0071  01180000
*           END;                                                        01190000
*         IF NAMEBIT='1'B THEN                                          01200000
@9FB     L     @1,4(0,@5)                                         0073  01210000
         TM    9(@1),B'00001000'                                  0073  01220000
         BC    12,@9F9                                            0073  01230000
*           DO;                                                         01240000
*           NAME=SYMNAME;                /*USE SYMBOLIC NAME          * 01250000
         MVC   NAME(8),12(@1)                                     0075  01260000
*         IF REMFILE='1'B THEN                                          01270000
         TM    9(@1),B'00000010'                                  0076  01280000
*             GO TO CHEKFILE;      /* LOAD IN CDS ENTRY.         21051* 01290000
         BC    01,CHEKFILE                                        0077  01300000
*         GO TO LOADENT;           /* LOAD ENTRY FROM LOCAL FILE.21051* 01310000
         BC    15,LOADENT                                         0078  01320000
*           END;                                                        01330000
*     /* THE FOLLOWING SECTION OF CODE TRANSLATES THE DEVICE ADDRESS    01340000
*        FROM HEX TO EBCDIC*/                                           01350000
*         WORK2=UNITAD;                  /*PUT DEV ADDR IN REG */       01360000
@9F9     L     @1,4(0,@5)                                         0080  01370000
         MVC   @TEMP4(4),0(@1)                                    0080  01380000
         L     @9,@TEMP4                                          0080  01390000
*         DO I = 1 TO 8;                                                01400000
         LA    @7,1                                               0081  01410000
*         WORK1=0;                       /*CLEAR INDEX REGISTER */      01420000
@DO9F8   SR    @8,@8                                              0082  01430000
*         GEN(SLDL WORK1,4);             /*PUT NUMBER IN REG */         01440000
         SLDL WORK1,4                                                   01450000
         DS    0H                                                       01460000
*         WORK1=WORK1+1;                                                01470000
         AH    @8,@D1                                             0084  01480000
*         IF I=1 THEN                                                   01490000
         CH    @7,@D1                                             0085  01500000
         BC    07,@9F4                                            0085  01510000
*           ADD(1)=TAB1(WORK1);          /*1ST CHAR*/                   01520000
         LR    @1,@8                                              0086  01530000
         LA    @E,TAB1-1(@1)                                      0086  01540000
         MVC   NAME(1),0(@E)                                      0086  01550000
         BC    15,@9F3                                            0087  01560000
*         ELSE ADD(I)=TAB(WORK1);                                       01570000
@9F4     LR    @1,@8                                              0087  01580000
         LA    @E,TAB-1(@1)                                       0087  01590000
         LR    @C,@7                                              0087  01600000
         LA    @A,NAME-1(@C)                                      0087  01610000
         MVC   0(1,@A),0(@E)                                      0087  01620000
*         END;                                                          01630000
*         GO TO LOADENT;           /* LOAD IN CDS ENTRY.         21051* 01640000
@9F3     AH    @7,@D1                                             0088  01650000
@DO9F7   CH    @7,@D2                                             0088  01660000
         BC    12,@DO9F8                                          0088  01670000
         BC    15,LOADENT                                         0089  01680000
*     /* END OF TRANSLATE ROUTINE*/                                     01690000
* CHEKFILE:                                                             01700000
*         PARMFLGS='68'X;               /* SYMBOLIC,CDS,COMPUTE X02008* 01710000
CHEKFILE MVI   LOADLIST+12,X'68'                                  0090  01720000
*  LOADENT:                                                             01730000
*         CDSNAME=NAME;                 /* NAME OF CDS TO LOAD  Y01008* 01740000
LOADENT  MVC   LOADLIST(8),NAME                                   0091  01750000
*         LOADADDR=ADDR(CDSENTRY);      /* WHERE CDS LOADED     Y01008* 01760000
         LA    @F,CDSENTRY                                        0092  01770000
         ST    @F,LOADLIST+8                                      0092  01780000
*         CDSLNGTH='FF'X;               /* LOAD 255 BYTES       Y01008* 01790000
         LA    @F,X'FF'                                           0093  01800000
         STH   @F,LOADLIST+14                                     0093  01810000
*                                                                       01820000
*         /* ISSUE CALL TO LOADER TO LOAD CDS FOR THIS DEVICE   Y01008* 01830000
*                                                                       01840000
*         GEN(IFDMOD CALL='12',LIST=LOADLIST);                          01850000
         IFDMOD CALL='12',LIST=LOADLIST                                 01860000
         DS    0H                                                       01870000
*         LOADRTRN=R15;                 /* SAVE LOADER RETURNCD X02906* 01880000
         STH   @F,LOADRTRN                                        0095  01890000
* CHEKLOAD:                                                             01900000
*         IF LOADRTRN>0 THEN            /* CDS NOT LOADED,RC>0  X02906* 01910000
CHEKLOAD SR    @F,@F                                              0096  01920000
         CH    @F,LOADRTRN                                        0096  01930000
         BC    10,@9F2                                            0096  01940000
*           DO;                                                         01950000
*  RTRN12:                                                              01960000
*           CODE=12;                    /*RETURN CODE FOR NO RECORD     01970000
*                                         FOUND*/                       01980000
RTRN12   LA    @4,12                                              0098  01990000
*           GOTO RTRN;                                                  02000000
         BC    15,RTRN                                            0099  02010000
*           END;                                                        02020000
*  CONTIN:                                                              02030000
*         IF COUNT=<SIZE THEN           /* IS COUNT WITHIN SIZEOX01385* 02040000
@9F2     EQU   *                                                  0101  02050000
CONTIN   CLC   CDSENTRY+8(1),12(@5)                               0101  02060000
         BC    02,@9F1                                            0101  02070000
*           DO;                         /* YES, RETURN CODE 0  OX01385* 02080000
*           CODE=0;                     /*                     OX01385* 02090000
         SR    @4,@4                                              0103  02100000
*           COUNTR=COUNT;               /* USE COUNT FOR MOVE  OX01385* 02110000
         SR    @6,@6                                              0104  02120000
         IC    @6,CDSENTRY+8                                      0104  02130000
*           GO TO CONTIN1;              /* MOVE CDS INFO       OX01385* 02140000
         BC    15,CONTIN1                                         0105  02150000
*           END;                        /*                     OX01385* 02160000
*         CODE=8;                       /* COUNT > SIZE REQUESTED01385* 02170000
@9F1     LA    @4,8                                               0107  02180000
*                                       /* RETURN CODE 8.      OX01385* 02190000
*         COUNTR=SIZE;                  /* USE SIZE FOR MOVE   OX01385* 02200000
         SR    @6,@6                                              0108  02210000
         IC    @6,12(0,@5)                                        0108  02220000
* CONTIN1:                              /*                     OX01385* 02230000
*         BUFFER(1:COUNTR)=CDSENTRY(1:COUNTR);   /*MOVE ENTRY INTO      02240000
*                                                  BUFFER*/             02250000
CONTIN1  LA    @E,CDSENTRY                                        0109  02260000
         LR    @1,@6                                              0109  02270000
         BCTR  @1,0                                               0109  02280000
         L     @C,8(0,@5)                                         0109  02290000
         LR    @A,@C                                              0109  02300000
         EX    @1,@MVC                                            0109  02310000
*  DELEET:                                                              02320000
*         GEN(ANYMOD DELETE=NAME);      /*DELETE ENTRY*/                02330000
DELEET   ANYMOD DELETE=NAME                                             02340000
         DS    0H                                                       02350000
*  RTRN:                                                                02360000
*         RTRNCODE = CODE;              /*PUT RETURN CODE IN REG 15*/   02370000
RTRN     LR    @F,@4                                              0111  02380000
*  END;                                                                 02390000
@EL01    L     @D,4(0,@D)                                         0112  02400000
         L     @E,12(0,@D)                                        0112  02410000
         LM    @0,@C,20(@D)                                       0112  02420000
         BCR   15,@E                                              0112  02430000
@DATA1   EQU   *                                                        02440000
@0       EQU   00                  EQUATES FOR REGISTERS 0-15           02450000
@1       EQU   01                                                       02460000
@2       EQU   02                                                       02470000
@3       EQU   03                                                       02480000
@4       EQU   04                                                       02490000
@5       EQU   05                                                       02500000
@6       EQU   06                                                       02510000
@7       EQU   07                                                       02520000
@8       EQU   08                                                       02530000
@9       EQU   09                                                       02540000
@A       EQU   10                                                       02550000
@B       EQU   11                                                       02560000
@C       EQU   12                                                       02570000
@D       EQU   13                                                       02580000
@E       EQU   14                                                       02590000
@F       EQU   15                                                       02600000
@D1      DC    H'1'                                                     02610000
@D2      DC    H'8'                                                     02620000
@MVC     MVC   0(1,@A),0(@E)                                            02630000
         DS    0F                                                       02640000
         DS    0D                                                       02650000
@DATA    EQU   *                                                        02660000
@SAV001  EQU   @DATA+00000000      72 BYTE(S) ON WORD                   02670000
R1       EQU   00000001            FULLWORD POINTER REGISTER            02680000
P        EQU   00000002            FULLWORD POINTER REGISTER            02690000
ADENTRY  EQU   00000003            FULLWORD POINTER REGISTER            02700000
CODE     EQU   00000004            FULLWORD INTEGER REGISTER            02710000
PARMPTR  EQU   00000005            FULLWORD POINTER REGISTER            02720000
LOADRTRN EQU   @DATA+00000072      HALFWORD INTEGER                     02730000
COUNTR   EQU   00000006            FULLWORD INTEGER REGISTER            02740000
I        EQU   00000007            FULLWORD INTEGER REGISTER            02750000
WORK1    EQU   00000008            FULLWORD INTEGER REGISTER            02760000
WORK2    EQU   00000009            FULLWORD INTEGER REGISTER            02770000
R14      EQU   00000014            FULLWORD INTEGER REGISTER            02780000
R15      EQU   00000015            FULLWORD INTEGER REGISTER            02790000
RTRNCODE EQU   00000015            FULLWORD INTEGER REGISTER            02800000
         ORG   @DATA+00000074                                           02810000
MODLEV   EQU   *                   1 BYTE(S)                            02820000
         DC    X'02'                                                    02830000
PARMLIST EQU   00000000            13 BYTE(S) ON WORD                   02840000
A00000   EQU   PARMLIST+00000000   1 BYTE(S)                            02850000
MACROLEV EQU   PARMLIST+00000001   1 BYTE(S)                            02860000
A00001   EQU   PARMLIST+00000002   2 BYTE(S)                            02870000
CDSADR   EQU   PARMLIST+00000004   FULLWORD POINTER                     02880000
ADBUF    EQU   PARMLIST+00000008   FULLWORD POINTER                     02890000
SIZE     EQU   PARMLIST+00000012   1 BYTE(S)                            02900000
LOADLIST EQU   @DATA+00000076      16 BYTE(S) ON WORD                   02910000
CDSNAME  EQU   LOADLIST+00000000   8 BYTE(S)                            02920000
LOADADDR EQU   LOADLIST+00000008   FULLWORD POINTER                     02930000
PARMFLGS EQU   LOADLIST+00000012   1 BYTE(S)                            02940000
A00002   EQU   LOADLIST+00000013   1 BYTE(S)                            02950000
CDSLNGTH EQU   LOADLIST+00000014   HALFWORD INTEGER                     02960000
BUFFER   EQU   00000000            256 BYTE(S)                          02970000
CDSENTRY EQU   @DATA+00000092      256 BYTE(S)                          02980000
A00003   EQU   CDSENTRY+00000000   8 BYTE(S)                            02990000
COUNT    EQU   CDSENTRY+00000008   1 BYTE(S)                            03000000
A00004   EQU   CDSENTRY+00000009   247 BYTE(S)                          03010000
NAME     EQU   @DATA+00000348      8 BYTE(S)                            03020000
ADD      EQU   NAME+00000000       8*1 BYTE(S)                          03030000
CDSDATA  EQU   00000000            20 BYTE(S)                           03040000
UNITAD   EQU   CDSDATA+00000000    4 BYTE(S)                            03050000
DEVDESC  EQU   CDSDATA+00000004    4 BYTE(S)                            03060000
A00005   EQU   CDSDATA+00000008    1 BYTE(S)                            03070000
FLGBYTE  EQU   CDSDATA+00000009    1 BYTE(S)                            03080000
A00006   EQU   CDSDATA+00000009    4 BIT(S)                             03090000
NAMEBIT  EQU   CDSDATA+00000009    1 BIT(S)                             03100000
A00007   EQU   CDSDATA+00000009    1 BIT(S)                             03110000
REMFILE  EQU   CDSDATA+00000009    1 BIT(S)                             03120000
A00008   EQU   CDSDATA+00000010    2 BYTE(S)                            03130000
SYMNAME  EQU   CDSDATA+00000012    8 BYTE(S)                            03140000
         ORG   @DATA+00000356                                           03150000
TAB      EQU   *                   16*1 BYTE(S)                         03160000
         DC    X'F0'                                                    03170000
         DC    X'F1'                                                    03180000
         DC    X'F2'                                                    03190000
         DC    X'F3'                                                    03200000
         DC    X'F4'                                                    03210000
         DC    X'F5'                                                    03220000
         DC    X'F6'                                                    03230000
         DC    X'F7'                                                    03240000
         DC    X'F8'                                                    03250000
         DC    X'F9'                                                    03260000
         DC    X'C1'                                                    03270000
         DC    X'C2'                                                    03280000
         DC    X'C3'                                                    03290000
         DC    X'C4'                                                    03300000
         DC    X'C5'                                                    03310000
         DC    X'C6'                                                    03320000
TAB1     EQU   *                   16*1 BYTE(S)                         03330000
         DC    C'G'                                                     03340000
         DC    C'H'                                                     03350000
         DC    C'I'                                                     03360000
         DC    C'J'                                                     03370000
         DC    C'K'                                                     03380000
         DC    C'L'                                                     03390000
         DC    C'M'                                                     03400000
         DC    C'N'                                                     03410000
         DC    C'O'                                                     03420000
         DC    C'P'                                                     03430000
         DC    C'Q'                                                     03440000
         DC    C'R'                                                     03450000
         DC    C'S'                                                     03460000
         DC    C'T'                                                     03470000
         DC    C'U'                                                     03480000
         DC    C'V'                                                     03490000
A00011   EQU   00000000            52 BYTE(S) ON WORD                   03500000
A00012   EQU   A00011+00000000     1 BYTE(S)                            03510000
EBNAME   EQU   A00011+00000001     7 BYTE(S)                            03520000
A00013   EQU   A00011+00000008     24 BYTE(S)                           03530000
DVTABCDS EQU   A00011+00000032     20 BYTE(S)                           03540000
A00014   EQU   A00011+00000032     9 BYTE(S)                            03550000
DVCDSFLG EQU   A00011+00000041     1 BYTE(S)                            03560000
A00015   EQU   A00011+00000041     4 BIT(S)                             03570000
SYMEXIST EQU   A00011+00000041     1 BIT(S)                             03580000
A00016   EQU   A00011+00000041     1 BIT(S)                             03590000
REMCDS   EQU   A00011+00000041     1 BIT(S)                             03600000
A00017   EQU   A00011+00000042     2 BYTE(S)                            03610000
DEVSYMNM EQU   A00011+00000044     8 BYTE(S)                            03620000
A00018   EQU   @DATA+00000348      8 BYTE(S)                            03630000
PFIRST   EQU   A00018+00000000     1 BYTE(S)                            03640000
PRIMENM  EQU   A00018+00000001     7 BYTE(S)                            03650000
         ORG   @DATA                                                    03660000
         DS    00000388C                                                03670000
@TEMPS   DS    0F                                                       03680000
@TEMP4   DC    F'0'                                                     03690000
COMAREA  IFDCOM                                                         03700000
SWITCHES EQU   CESWT3+00000000     1 BYTE(S)                            03710000
A00009   EQU   SWITCHES+00000000   6 BIT(S)                             03720000
CDSEXIST EQU   SWITCHES+00000000   1 BIT(S)                             03730000
A00010   EQU   SWITCHES+00000000   1 BIT(S)                             03740000
OLTEPSW7 EQU   CESWT7+00000000     1 BYTE(S) ON WORD                    03750000
INCLST   EQU   OLTEPSW7+00000000   1 BIT(S)                             03760000
RETTO31  EQU   OLTEPSW7+00000000   1 BIT(S)                             03770000
REMOTE   EQU   OLTEPSW7+00000000   1 BIT(S)                             03780000
LOADCDS  EQU   OLTEPSW7+00000000   1 BIT(S)                             03790000
@DATEND  EQU   *                                                        03800000
         END                                                            03810000
