         TITLE '     IFDOLT13--CECOM  WTO/R INTERFACE.'                 00010000
         TITLE '        IFDOLT13--CECOM  WTO/R INTERFACE.'              00020000
         LCLA  &T,&SPN                                            0002  00030000
.@001    ANOP                                                     0002  00040000
IFDOLT13 CSECT ,                                                  0002  00050000
         BC    15,24(0,@F)                                              00060000
         DC    C'IFDOLT13 14 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
*         RESTRICT(2,5);                 /* REGISTERS USED BY PROGRAM * 00210000
*         DCL R0 REG(0) PTR;                                            00220000
*         DCL R1 REG(1) PTR;             /* ADDRESS OF PARAMETER LIST * 00230000
*         DCL R5 REG(5) PTR;             /* ADDRESS OF IN MSG.        * 00240000
*         DCL R14 REG(14) PTR;           /* RETURN REGISTER           * 00250000
*         DCL R15 REG(15) PTR;           /* RETURN CODE REGISTER      * 00260000
*   GEN(EJECT);                                                         00270000
         EJECT                                                          00280000
         DS    0H                                                       00290000
*         /************************************************************ 00300000
*         /* THE FOLLOWING MAP DESCRIBES THE PARAMETER LIST PASSED    * 00310000
*         /* TO IFDOLT13. REGISTER 1 WILL CONTAIN THE LIST ADDRESS.   * 00320000
*         /************************************************************ 00330000
*         DECLARE                                                       00340000
*             1 * BASED(R1),                                            00350000
*               2 OUTMSGAD PTR,          /* ADDRESS OF OUT MESSAGE    * 00360000
*               2 OUTCNTAD PTR,          /* ADDRESS OF OUT MESSAGE    * 00370000
*                                        /* COUNT                     * 00380000
*               2 INMSGAD PTR,           /* ADDRESS OF IN MESSAGE     * 00390000
*               2 INCNTAD PTR;           /* ADDRESS OF IN MESSAGE     * 00400000
*                                        /* COUNT                     * 00410000
*   GEN(EJECT);                                                         00420000
         EJECT                                                          00430000
         DS    0H                                                       00440000
*         /************************************************************ 00450000
*         /* THE FOLLOWING MAPS DESCRIBE THE AREAS USED DURING THE    * 00460000
*         /* PROCESSING OF MESSAGES.                                  * 00470000
*         /************************************************************ 00480000
*         DCL OUTCNT CHAR(1) BASED(OUTCNTAD);    /* OUT MESSAGE COUNT * 00490000
*         DCL INCNT CHAR(1) BASED(INCNTAD);      /* IN MESSAGE COUNT  * 00500000
*         DCL OUTMSG CHAR(61) BASED(OUTMSGAD);   /* OUT MESSAGE       * 00510000
*         DCL INBUFR CHAR(72) GENERATED; /* WTOR REPLY BUFFER         * 00520000
*         DCL ECB13 FIXED INIT(0);       /* ECB USED BY WTOR AND WAIT * 00530000
*         DCL IFDMSG13 EXT ENTRY;       /* IFDOLT13'S MESSAGE MODULE  * 00540000
*         DCL MSGMOD13 PTR INIT(ADDR(IFDMSG13));       /* ADDRESS OF  * 00550000
*                                                      /* IFDMSG13    * 00560000
*  /* THE FOLLOWING BITS ARE OLTEP'S ROUTING & DESCRIPTOR CODES       * 00570000
*         DCL ROUTCD BIT(32) INIT('00000010000000000000000001000000'B); 00580000
*   GEN(EJECT);                                                         00590000
         EJECT                                                          00600000
         DS    0H                                                       00610000
*         /************************************************************ 00620000
*         /* THE FOLLOWING MAP DESCRIBES THE POINTERS TO THE LIST     * 00630000
*         /* FORM OF MESSAGES IN MODULE IFDMSG13.                     * 00640000
*         /************************************************************ 00650000
*         DECLARE                                                       00660000
*             1 * BASED(MSGMOD13),                                      00670000
*               2 WTOPTR PTR,            /* ADDRESS OF WTO IFD100I    * 00680000
*               2 WTORPTR PTR;           /* ADDRESS OF WTOR IFD101D   * 00690000
*   GEN(EJECT);                                                         00700000
         EJECT                                                          00710000
         DS    0H                                                       00720000
*         /************************************************************ 00730000
*         /* THE FOLLOWING MAP DESCRIBES THE AREAS CONTAINED WITHIN   * 00740000
*         /* THE LIST FORM OF THE MESSAGES IN MODULE IFDMSG13.        * 00750000
*         /************************************************************ 00760000
*         DECLARE                                                       00770000
*             1 * BASED(WTOPTR),         /* LIST FORM OF WTO          * 00780000
*               2 WTOLEN PTR(15),        /* MESSAGE LENGTH            * 00790000
*               2 * CHAR(10),            /* MESSAGE ID                * 00800000
*               2 MSAGE CHAR(63);        /* MESSAGE AREA              * 00810000
*         DECLARE                                                       00820000
*             1 * BASED(WTORPTR),        /* LIST FORM OF WTOR         * 00830000
*               2 REPLYCNT CHAR(1),      /* WTOR REPLY COUNT          * 00840000
*               2 INBUFRAD PTR(24),      /* ADDRESS OF REPLY BUFFER   * 00850000
*               2 ECB13ADR PTR,          /* ADDRESS OF WTOR ECB       * 00860000
*               2 WTORLEN PTR(15),       /* MESSAGE LENGTH            * 00870000
*               2 * CHAR(10),            /* MESSAGE ID                * 00880000
*               2 WRMSAGE CHAR(63);      /* WTOR MESSAGE AREA         * 00890000
*         DCL OLTBUF CHAR(61) BASED(R5);         /* OLT REPLY BUFFER  * 00900000
*         DCL OUTCNT13 CHAR(1);          /* THE OUT MESSAGE LENGTH    * 00910000
*         DCL INCNT13 CHAR(1);           /* THE IN MESSAGE LENGTH     * 00920000
*   GEN(EJECT);                                                         00930000
         EJECT                                                          00940000
         DS    0H                                                       00950000
*         /************************************************************ 00960000
*         /* THE FOLLOWING CODE WILL PERFORM THE FUNCTIONS PROVIDED   * 00970000
*         /* BY CECOM (IFDOLT13).                                     * 00980000
*         /************************************************************ 00990000
*         IF OUTCNT = '00'X THEN        /* IF COUNT IS ZERO           * 01000000
         L     @3,4(0,@1)                                         0031  01010000
         CLI   0(@3),X'00'                                        0031  01020000
         BC    07,@9FF                                            0031  01030000
*           DO;                         /* DO THE FOLLOWING:          * 01040000
*           OUTCNT13 = '01'X;           /* SET COUNT TO 1             * 01050000
         MVI   OUTCNT13,X'01'                                     0033  01060000
*           GO TO CHKWTOR;              /* BRANCH TO WTOR CHECK       * 01070000
         BC    15,CHKWTOR                                         0034  01080000
*           END;                        /* END OUT COUNT TEST         * 01090000
*         IF OUTCNT > '3D'X THEN         /* SET LIMIT ON LENGTH OF    * 01100000
@9FF     L     @3,4(0,@1)                                         0036  01110000
         CLI   0(@3),X'3D'                                        0036  01120000
         BC    12,@9FE                                            0036  01130000
*           OUTCNT13 = '3D'X;            /* OUT MESSAGE TO 61         * 01140000
         MVI   OUTCNT13,X'3D'                                     0037  01150000
         BC    15,@9FD                                            0038  01160000
*         ELSE                           /* HONOR ALL REQUESTS THAT   * 01170000
*           OUTCNT13 = OUTCNT;           /* ARE LESS THAN 61          * 01180000
@9FE     MVC   OUTCNT13(1),0(@3)                                  0038  01190000
* CHKWTOR:                                                              01200000
*         IF R0 = '000001E6'X THEN       /* IF TWO-WAY COMMUNICATIONS * 01210000
@9FD     EQU   *                                                  0039  01220000
CHKWTOR  C     @0,@X4                                             0039  01230000
*           GO TO SETWTO;                /* IS NOT REQUESTED BRANCH   * 01240000
         BC    08,SETWTO                                          0040  01250000
*                                        /* TO SETUP FOR ONE-WAY      * 01260000
*                                        /* COMMUNICATIONS.           * 01270000
*         ELSE                           /* ELSE-SETUP FOR TWO-WAY    * 01280000
*           DO;                          /* COMMUNICATIONS.           * 01290000
*         R5 = INMSGAD;                  /* SET REG 5 TO OLTBUF ADDR  * 01300000
         L     @5,8(0,@1)                                         0042  01310000
*           IF INCNT = '00'X THEN       /* IF REPLY COUNT IS ZERO     * 01320000
         L     @3,12(0,@1)                                        0043  01330000
         CLI   0(@3),X'00'                                        0043  01340000
         BC    07,@9FC                                            0043  01350000
*             DO;                       /* DO THE FOLLOWING:          * 01360000
*             INCNT13 = '01'X;          /* SET CECOM IN COUNT TO 1    * 01370000
         MVI   INCNT13,X'01'                                      0045  01380000
*             REPLYCNT = '01'X;         /* SET WTOR REPLY COUNT TO 1  * 01390000
         L     @4,MSGMOD13                                        0046  01400000
         L     @4,4(0,@4)          A00001                         0046  01410000
         MVI   0(@4),X'01'                                        0046  01420000
*             GO TO SETUP;              /* BRANCH TO SETUP            * 01430000
         BC    15,SETUP                                           0047  01440000
*             END;                      /* END OF COUNT ZERO CHECK    * 01450000
*           IF INCNT > '3D'X THEN        /* SET LIMIT OF REPLY LENGTH * 01460000
@9FC     L     @3,12(0,@1)                                        0049  01470000
         CLI   0(@3),X'3D'                                        0049  01480000
         BC    12,@9FB                                            0049  01490000
*             DO;                        /* TO 61                     * 01500000
*             REPLYCNT = '3D'X;          /* SET REPLY LENGTH IN WTOR  * 01510000
         L     @4,MSGMOD13                                        0051  01520000
         L     @4,4(0,@4)          A00001                         0051  01530000
         MVI   0(@4),X'3D'                                        0051  01540000
*                                        /* PARAMETER LIST            * 01550000
*             INCNT13 = '3D'X;           /* RECORD LENGTH IN CECOM.   * 01560000
         MVI   INCNT13,X'3D'                                      0052  01570000
         BC    15,@9FA                                            0054  01580000
*             END;                                                      01590000
*           ELSE                         /* ELSE- SET REPLY LENGTH IN * 01600000
*             DO;                        /* WTOR PARAMETER LIST TO    * 01610000
*             INCNT13 = INCNT;           /* REQUESTED LENGTH, AND     * 01620000
@9FB     L     @3,12(0,@1)                                        0055  01630000
         MVC   INCNT13(1),0(@3)                                   0055  01640000
*             REPLYCNT = INCNT;          /* RECORD LENGTH IN CECOM.   * 01650000
         L     @4,MSGMOD13                                        0056  01660000
         L     @4,4(0,@4)          A00001                         0056  01670000
         MVC   0(1,@4),0(@3)                                      0056  01680000
*             END;                                                      01690000
*           END;                                                        01700000
@9FA     EQU   *                                                  0058  01710000
* SETUP:                                                                01720000
*         ECB13ADR = ADDR(ECB13);        /* SET WTOR PARAMETER LIST   * 01730000
SETUP    LA    @F,ECB13                                           0059  01740000
         L     @3,MSGMOD13                                        0059  01750000
         L     @3,4(0,@3)          A00001                         0059  01760000
         ST    @F,4(0,@3)                                         0059  01770000
*                                        /* ECB ADDRESS               * 01780000
*         INBUFRAD = ADDR(INBUFR);       /* SET WTOR PARAMETER LIST   * 01790000
         LA    @F,INBUFR                                          0060  01800000
         ST    @F,@TEMP4                                          0060  01810000
         MVC   1(3,@3),@TEMP4+1                                   0060  01820000
*                                        /* REPLY BUFFER ADDRESS      * 01830000
*         WRMSAGE(1:OUTCNT13) = OUTMSG(1:OUTCNT13);     /* MOVE WTOR  * 01840000
         L     @4,0(0,@1)                                         0061  01850000
         LR    @E,@4                                              0061  01860000
         SR    @C,@C                                              0061  01870000
         IC    @C,OUTCNT13                                        0061  01880000
         BCTR  @C,0                                               0061  01890000
         LA    @A,20(0,@3)                                        0061  01900000
         EX    @C,@MVC                                            0061  01910000
*                                        /* MESSAGE INTO WTOR LIST    * 01920000
*         WRMSAGE(OUTCNT13+1:OUTCNT13+5)=ROUTCD; /* SET ROUT & DESC   * 01930000
         LA    @E,ROUTCD                                          0062  01940000
         LA    @C,5                                               0062  01950000
         SR    @0,@0                                              0062  01960000
         IC    @0,OUTCNT13                                        0062  01970000
         AR    @C,@0                                              0062  01980000
         LA    @8,1                                               0062  01990000
         IC    @0,OUTCNT13                                        0062  02000000
         AR    @8,@0                                              0062  02010000
         SR    @C,@8                                              0062  02020000
         LA    @A,19(@8,@3)                                       0062  02030000
         EX    @C,@MVC                                            0062  02040000
*         WTORLEN = OUTCNT13 + 12;       /* SET WTOR OUT MESSAGE LEN. * 02050000
         LA    @F,12                                              0063  02060000
         IC    @0,OUTCNT13                                        0063  02070000
         AR    @F,@0                                              0063  02080000
         STH   @F,8(0,@3)                                         0063  02090000
*         INBUFR = INBUFR && INBUFR;     /* SET REPLY BUFFER TO ZERO  * 02100000
         XC    INBUFR(72),INBUFR                                  0064  02110000
*         ECB13 = 0 ;                    /* SET ECB TO ZERO           * 02120000
         SR    @F,@F                                              0065  02130000
         ST    @F,ECB13                                           0065  02140000
*         R1 = WTORPTR;                  /* SET REG.1 TO ADDRESS OF   * 02150000
         L     @9,MSGMOD13                                        0066  02160000
         L     @1,4(0,@9)                                         0066  02170000
*                                        /* WTOR                      * 02180000
*   GEN(  PWTOR REG=(1),WAIT=YES); /* INVOKE PARALLEL PRINT ROUTINE   * 02190000
           PWTOR REG=(1),WAIT=YES                                       02200000
         DS    0H                                                       02210000
*         OLTBUF(1:INCNT13) = INBUFR(1:INCNT13);   /* MOVE REPLY TO   * 02220000
         LA    @E,INBUFR                                          0068  02230000
         SR    @4,@4                                              0068  02240000
         IC    @4,INCNT13                                         0068  02250000
         BCTR  @4,0                                               0068  02260000
         LR    @A,@5                                              0068  02270000
         EX    @4,@MVC                                            0068  02280000
*                                                  /* OLT AREA        * 02290000
*         GO TO FINISH;                  /* BRANCH TO END ROUTINE     * 02300000
         BC    15,FINISH                                          0069  02310000
*   GEN(EJECT);                                                         02320000
         EJECT                                                          02330000
         DS    0H                                                       02340000
*         /************************************************************ 02350000
*         /* THE FOLLOWING CODE WILL PROVIDE ONE-WAY COMMUNICATION.   * 02360000
*         /************************************************************ 02370000
* SETWTO:                                                               02380000
*         WTOLEN = OUTCNT13 + 12 ;       /* SET OUT MESSAGE LENGTH IN * 02390000
SETWTO   LA    @F,12                                              0071  02400000
         SR    @0,@0                                              0071  02410000
         IC    @0,OUTCNT13                                        0071  02420000
         AR    @F,@0                                              0071  02430000
         L     @3,MSGMOD13                                        0071  02440000
         L     @3,0(0,@3)          A00001                         0071  02450000
         STH   @F,0(0,@3)                                         0071  02460000
*                                        /* WTO PARAMETER LIST        * 02470000
*         MSAGE(1:OUTCNT13) = OUTMSG(1:OUTCNT13);  /* MOVE OUT MESSAGE* 02480000
         L     @4,0(0,@1)                                         0072  02490000
         LR    @E,@4                                              0072  02500000
         SR    @C,@C                                              0072  02510000
         IC    @C,OUTCNT13                                        0072  02520000
         BCTR  @C,0                                               0072  02530000
         LA    @A,12(0,@3)                                        0072  02540000
         EX    @C,@MVC                                            0072  02550000
*                                        /* INTO WTO PARAMETER LIST   * 02560000
*           MSAGE(OUTCNT13+1:OUTCNT13+5)=ROUTCD; /* SET ROUT & DESC   * 02570000
         LA    @E,ROUTCD                                          0073  02580000
         LA    @C,5                                               0073  02590000
         IC    @0,OUTCNT13                                        0073  02600000
         AR    @C,@0                                              0073  02610000
         LA    @8,1                                               0073  02620000
         IC    @0,OUTCNT13                                        0073  02630000
         AR    @8,@0                                              0073  02640000
         SR    @C,@8                                              0073  02650000
         LA    @A,11(@8,@3)                                       0073  02660000
         EX    @C,@MVC                                            0073  02670000
*         R1 = WTOPTR;                   /* SET REG.1 TO WTO ADDRESS  * 02680000
         L     @9,MSGMOD13                                        0074  02690000
         L     @1,0(0,@9)                                         0074  02700000
*   GEN(  PWTO  REG=(1));           /* INVOKE PARALLEL PRINT ROUTINE  * 02710000
           PWTO  REG=(1)                                                02720000
         DS    0H                                                       02730000
* FINISH:                                /* END ROUTINE               * 02740000
*         R15 = '00'X;                   /* SET REG.15 TO ZERO        * 02750000
FINISH   LA    @F,X'00'                                           0076  02760000
*         RETURN;                        /* RETURN TO CALLER          * 02770000
*         END   IFDOLT13;                /* END OF IFDOLT13 MODULE    * 02780000
@EL01    L     @D,4(0,@D)                                         0078  02790000
         L     @E,12(0,@D)                                        0078  02800000
         LM    @0,@C,20(@D)                                       0078  02810000
         BCR   15,@E                                              0078  02820000
@DATA1   EQU   *                                                        02830000
@0       EQU   00                  EQUATES FOR REGISTERS 0-15           02840000
@1       EQU   01                                                       02850000
@2       EQU   02                                                       02860000
@3       EQU   03                                                       02870000
@4       EQU   04                                                       02880000
@5       EQU   05                                                       02890000
@6       EQU   06                                                       02900000
@7       EQU   07                                                       02910000
@8       EQU   08                                                       02920000
@9       EQU   09                                                       02930000
@A       EQU   10                                                       02940000
@B       EQU   11                                                       02950000
@C       EQU   12                                                       02960000
@D       EQU   13                                                       02970000
@E       EQU   14                                                       02980000
@F       EQU   15                                                       02990000
@MVC     MVC   0(1,@A),0(@E)                                            03000000
         DS    0F                                                       03010000
@X4      DC    X'000001E6'                                              03020000
         DS    0D                                                       03030000
@DATA    EQU   *                                                        03040000
@SAV001  EQU   @DATA+00000000      72 BYTE(S) ON WORD                   03050000
X        EQU   00000000            FULLWORD INTEGER                     03060000
R0       EQU   00000000            FULLWORD POINTER REGISTER            03070000
R1       EQU   00000001            FULLWORD POINTER REGISTER            03080000
R5       EQU   00000005            FULLWORD POINTER REGISTER            03090000
R14      EQU   00000014            FULLWORD POINTER REGISTER            03100000
R15      EQU   00000015            FULLWORD POINTER REGISTER            03110000
A00000   EQU   00000000            16 BYTE(S) ON WORD                   03120000
OUTMSGAD EQU   A00000+00000000     FULLWORD POINTER                     03130000
OUTCNTAD EQU   A00000+00000004     FULLWORD POINTER                     03140000
INMSGAD  EQU   A00000+00000008     FULLWORD POINTER                     03150000
INCNTAD  EQU   A00000+00000012     FULLWORD POINTER                     03160000
OUTCNT   EQU   00000000            1 BYTE(S)                            03170000
INCNT    EQU   00000000            1 BYTE(S)                            03180000
OUTMSG   EQU   00000000            61 BYTE(S)                           03190000
         ORG   @DATA+00000072                                           03200000
ECB13    EQU   *                   FULLWORD INTEGER                     03210000
         DC    FL4'0'                                                   03220000
MSGMOD13 EQU   *                   FULLWORD POINTER                     03230000
         DC    VL4(IFDMSG13)                                            03240000
ROUTCD   EQU   *                   32 BIT(S) ON BYTE                    03250000
         DC    B'00000010000000000000000001000000'                      03260000
A00001   EQU   00000000            8 BYTE(S) ON WORD                    03270000
WTOPTR   EQU   A00001+00000000     FULLWORD POINTER                     03280000
WTORPTR  EQU   A00001+00000004     FULLWORD POINTER                     03290000
A00002   EQU   00000000            75 BYTE(S) ON WORD                   03300000
WTOLEN   EQU   A00002+00000000     HALFWORD POINTER                     03310000
A00003   EQU   A00002+00000002     10 BYTE(S)                           03320000
MSAGE    EQU   A00002+00000012     63 BYTE(S)                           03330000
A00004   EQU   00000000            83 BYTE(S) ON WORD                   03340000
REPLYCNT EQU   A00004+00000000     1 BYTE(S)                            03350000
INBUFRAD EQU   A00004+00000001     3  BYTE  POINTER ON WORD+1           03360000
ECB13ADR EQU   A00004+00000004     FULLWORD POINTER                     03370000
WTORLEN  EQU   A00004+00000008     HALFWORD POINTER                     03380000
A00005   EQU   A00004+00000010     10 BYTE(S)                           03390000
WRMSAGE  EQU   A00004+00000020     63 BYTE(S)                           03400000
OLTBUF   EQU   00000000            61 BYTE(S)                           03410000
OUTCNT13 EQU   @DATA+00000084      1 BYTE(S)                            03420000
INCNT13  EQU   @DATA+00000085      1 BYTE(S)                            03430000
         ORG   @DATA                                                    03440000
         DS    00000086C                                                03450000
@TEMPS   DS    0F                                                       03460000
@TEMP4   DC    F'0'                                                     03470000
DSECT13  IFDCOM                                                         03480000
@DATEND  EQU   *                                                        03490000
         END   IFDOLT13                                                 03500000
