*DECK NDR 
          IDENT  NDR,PPSTART
          PERIPH
          BASE   D
          SST 
          LIST   F
 NDR      TITLE  NDR - 380-170 NAD DRIVER FOR RHF.
          COMMENT  380-170 NAD DRIVER FOR RHF.
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
 NDR      SPACE  4,10 
*****     NDR - NETWORK DRIVER. 
* 
*         E.E. NELSON              11/03/80.
* 
*         NDR SERVES AS A DRIVER FOR I/O PERFORMED BETWEEN RHF (OR
*         A CONTROL POINT WHICH CALLS RHF) AND THE NETWORK ACCESS 
*         DEVICE (NAD). 
          SPACE  4,10 
***       NDR CALLING SEQUENCE. 
* 
*         18/ *NDR*,30/ 0,12/ ADDR
*         ADDR   COMMUNICATION ADDRESS. 
* 
*         PARAMETER BLOCK FOR GENERAL REQUEST.
* 
          TITLE  NDR HIERARCHY CHART (MAIN LOOP)
* 
* 
* 
*                             ********* 
*                             *  NDR  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*     * * * * * * * * * * * * * * * * * * * * * * * 
*     *          *          *          *          * 
*     *          *          *          *          * 
*     *          *          *          *          * 
* *********  *********  *********  *********  ********* 
* *  INT  *  *  NXT  *  * (XEC) *  *  CMP  *  *  LDO  * 
* *********  *********  *********  *********  ********* 
*                                      *          * 
*                                      *          * 
*                                      *          * 
*                                  *********  ********* 
*                                  *  LOG  *  *  MSG  * 
*                                  *********  ********* 
*                                      *
*                                      *
*                                      *
*                                  *********
*                                  *  LDO  *
*                                  *********
*                                      *
*                                      *
*                                      *
*                                  *********
*                                  *  CER  *
*                                  *********
* 
* 
*         NDR    NETWORK DRIVER MAIN LOOP.
*         INT    INITIALIZATION.
*         NXT    WAIT FOR NEXT FUNCTION.
*         CMP    COMPLETE THE FUNCTION. 
*         LOG    LOG MESSAGE IN CERROR FILE.
*         LDO    LOAD OVERLAY.
*         CER    DAYFILE MESSAGE IN CERROR FILE.
*         MSG    DAYFILE MESSAGE. 
          TITLE  NDR HIERARCHY CHART (EXECUTE FUNCTION) 
* 
* 
*                            *********
*                            *  XEC  *
*                            *********
*                                *
*                                *
*                                *
*                            *********
*                            *  LDO  *
*                            *********
*                                *
*                                *
*                                *
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*     *           *           *           *           *           * 
*     *           *           *           *           *           * 
*     *           *           *           *           *           * 
* *********   *********   *********   *********   *********   ********* 
* * (FET) *   * (RPD) *   * (WPD) *   * (DTW) *   * (DTM) *   * (DTN) * 
* *********   *********   *********   *********   *********   ********* 
* 
* 
*         XEC    EXECUTE FUNCTION.
*         LDO    LOAD OVERLAY.
          TITLE  NDR HIERARCHY CHART (FET I/O)
* 
* 
* 
*                             ********* 
*                             *  FET  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*     *          *          *          *          *          *
*     *          *          *          *          *          *
*     *          *          *          *          *          *
*     *      *********  *********  *********  *********  *********
*     *      * (FRD) *  * (FRC) *  * (FCL) *  * (FWC) *  *  FCP  *
*     *      *********  *********  *********  *********  *********
*     *                                                      *
*     * * * * * * * * * * * *                                *
*                *          *                                *
*            *********  *********                        *********
*            * (RCM) *  * (WCM) *                        *  RCP  *
*            *********  *********                        *********
* 
* 
*         FET    PERFORM FET I/O. 
*         FCP    COMPLETE FET.
*         RCP    READ COMPLETE. 
          TITLE  NDR HIERARCHY CHART (FET I/O)
* 
* 
* 
*                             ********* 
*                             *  FRD  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*     *     *     *           *          *          *          *
*     *     *     *           *          *          *          *
*     *     *     *           *          *          *          *
* ********* * *********   *********  *********  *********  *********
* *  RPR  * * *  IBR  *   *  ICR  *  *  UPI  *  *  CSP  *  *  WBD  *
* ********* * *********   *********  *********  *********  *********
*           *     *           *                                *
*           *     * * * * * * *                                *
*           *           *                                      *
*       *********       *                                  *********
*       *  CIB  *       *                                  *  WBB  *
*       *********       *                                  *********
*           *           * 
*           *     * * * * * * * 
*           *     *           * 
*           * *********   **********
*           * *  CUB  *   *  IBD   *
*           * *********   **********
*           *                 * 
*           *                 * 
*           *                 * 
*       *********         ********* 
*       *  CSP  *         *  CMW  * 
*       *********         ********* 
* 
* 
*         FRD    FET READ.
*         RPR    READ PRESET. 
*         CIB    CHECK INPUT BUFFER POINTERS. 
*         CSP    CHECK SPACE AVAILABLE. 
*         IBR    INPUT BINARY RECORD. 
*         ICR    INPUT CHARACTER RECORD.
*         CUB    CLEAR UNUSED BIT COUNT.
*         IBD    INPUT BINARY DATA. 
*         CMW    CALCULATE CM WORDS.
*         UPI    UPDATE IN AND ABN WITHIN UCP FET.
*         WBD    WRITE BINARY DATA. 
*         WBB    WRITE BINARY BUFFER. 
          TITLE  NDR HIERARCHY CHART (FET I/O)
* 
* 
* 
*                             ********* 
*                             *  FRC  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*     *     *     *           *          *          *          *
*     *     *     *           *          *          *          *
*     *     *     *           *          *          *          *
* ********* * *********   *********  *********  *********  *********
* *  RPR  * * *  IBR  *   *  ICR  *  *  WCW  *  *  UPI  *  *  CSP  *
* ********* * *********   *********  *********  *********  *********
*           *     *           *          *
*           *     * * * * * * *          *
*           *           *                *
*       *********       *            *********
*       *  CIB  *       *            *  WBB  *
*       *********       *            *********
*           *           * 
*           *     * * * * * * * 
*           *     *           * 
*           * *********   ********* 
*           * *  CUB  *   *  IBD  * 
*           * *********   ********* 
*           *                 * 
*           *                 * 
*           *                 * 
*       *********         ********* 
*       *  CSP  *         *  CMW  * 
*       *********         ********* 
* 
* 
*         FRC    FET READC. 
*         WCW    WRITE CONTROL WORD FORMATTED DATA. 
*         RPR    READ PRESET. 
*         CIB    CHECK INPUT BUFFER PARAMETERS. 
*         CSP    CHECK SPACE AVAILABLE. 
*         IBR    INPUR BINARY RECORD. 
*         CUB    CLEAR UNUSED BIT COUNT.
*         ICR    INPUT CHARACTER RECORD.
*         IBD    INPUT BINARY DATA. 
*         CMW    CALCULATE CM WORDS.
*         WBB    WRITE BINARY BUFFER. 
*         UPI    UPDATE IN AND ABN WITHIN UCP FET.
          TITLE  NDR HIERARCHY CHART (FET I/O)
* 
* 
* 
*                             ********* 
*                             *  FCL  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*                                 * * * * * * * * * * * * * * * * 
*                                 *                             * 
*                                 *                             * 
*                                 *                             * 
*                             *********                     ********* 
*                             *  FWR  *                     *  OBD  * 
*                             *********                     ********* 
*                                *                              * 
*                                *                              * 
*                                *                              * 
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * ********* 
*     *     *           *               *     *     *     * *  BRH  * 
*     *     *           *               *     *     *     * ********* 
*     *     *           *               *     *     *     * 
* ********* *       *********       ********* * ********* * 
* *  WPR  * *       *  RBD  *       *  OBD  * * *  UPO  * * 
* ********* *       *********       ********* * ********* * 
*           *           *               *     *           * 
*           *           *               *     *           * 
*           *           *               *     *           * 
*       *********       *               * *********   ********* 
*       *  COB  *       *               * *  OCR  *   *  CSZ  * 
*       *********       *               * *********   ********* 
*           *           *               * 
*           *     * * * * * * *         * 
*           *     *           *         * 
*           * *********   ********* ********* 
*           * *  CSZ  *   *  RBB  * *  BRH  * 
*           * *********   ********* ********* 
*           * 
*           * 
*           * 
*       ********* 
*       *  CSZ  * 
*       ********* 
* 
* 
*         FCL    FET CLOSE FUNCTION.
*         WPR    WRITE PRESET.
*         COB    CHECK OUTPUT BUFFER POINTERS.
*         CSZ    CALCULATE SIZE.
*         RBD    READ BINARY DATA.
*         RBB    READ BINARY BUFFER.
*         OBD    OUPUT BINARY DATA. 
*         BRH    BUILD RECORD HEADER. 
*         OCR    OUTPUT CHARACTER RECORD. 
*         UPO    UPDATE OUT AND ABN WITHIN UCP FET. 
          TITLE  NDR HIERARCHY CHART (FET I/0)
* 
* 
* 
*                             ********* 
*                             *  FWC  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*     *     *           *           *     *     *     *     * 
*     *     *           *           *     *     *     *     * 
*     *     *           *           *     *     *     *     * 
* ********* *       *********       * ********* * ********* * 
* *  WPR  * *       *  RCW  *       * *  OBD  * * *  UPO  * * 
* ********* *       *********       * ********* * ********* * 
*           *           *           *     *     *           * 
*           *           *           *     *     *           * 
*           *           *           *     *     *           * 
*       *********       *       ********* * *********   ********* 
*       *  COB  *       *       *  SCW  * * *  OCR  *   *  CSZ  * 
*       *********       *       ********* * *********   ********* 
*           *           *           *     * 
*           *     * * * * * * *     *     * 
*           *     *           *     *     * 
*           * *********   ********* * ********* 
*           * *  CSZ  *   *  RBB  * * *  RBH  * 
*           * *********   ********* * ********* 
*           *                       * 
*           *           * * * * * * * * * * * * * 
*           *           *           *           * 
*       *********   *********   *********   ********* 
*       *  CSZ  *   *  CSZ  *   *  AOT  *   *  RBB  * 
*       *********   *********   *********   ********* 
* 
* 
*         FWC    FET WRITEC.
*         RCW    READ CONTROL WORD FORMATTED DATA.
*         AOT    ADVANCE OUT POINTER. 
*         WPR    WRITE PRESET.
*         COB    CHECK OUTPUT BUFFER POINTERS.
*         CSZ    CALCULATE SIZE.
*         RBD    READ BINARY DATA.
*         RBB    READ BINARY BUFFER.
*         OBD    OUTPUT BINARY DATA.
*         BRH    BUILD RECORD HEADER. 
*         OCR    OUTPUT CHARACTER RECORD. 
*         UPO    UPDATE OUT AND ABN WITHIN UCP FET. 
*         SCW    SEARCH CONTROL WORD FORMATTED DATA.
          TITLE  NDR HIERARCHY CHART (READ CONVERT MODE DATA) 
* 
* 
* 
*                             ********* 
*                             *  RCM  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*             * * * * * * * * * * * * * * * * * * * * * 
*             *         *         *         *         * 
*             *         *         *         *         * 
*             *         *         *         *         * 
*         ********* ********* ********* ********* ********* 
*         *  VFP  * *  WBS  * *  RNB  * *  WDC  * *  UPI  * 
*         ********* ********* ********* ********* ********* 
*             *         *         *         * 
*             *         *         *         * * * * * * * * * 
*             *         *         *                         * 
*     * * * * * *       *     * * * * * * * * * * *         * 
*     *         *       *     *         *         *         * 
* ********* *********   * ********* ********* *********     * 
* *  RFB  * *  VFB  *   * *  IUR  * *  RDB  * *  VDB  *     * 
* ********* *********   * ********* ********* *********     * 
*                       *     *                             * 
*                       *     * * * * * *                   * 
*                       *               *                   * 
*                 * * * * * * *         *         * * * * * * 
*                 *           *         *         *         * 
*             *********   ********* ********* ********* ********* 
*             *  RVO  *   *  CSA  * *  PNR  * *  WBB  * *  WCW  * 
*             *********   ********* ********* ********* ********* 
*                                                           * 
*                                                           * 
*                                                           * 
*                                                       ********* 
*                                                       *  WBB  * 
*                                                       ********* 
* 
* 
*         RCM    READ CONVERT MODE DATA.
*         VFP    VALIDATE FET PARAMETERS. 
*         WBS    WAIT FOR BUFFER SPACE AVAILABLE. 
*         RNB    READ NETWORK BLOCK.
*         WDC    WRITE DATA TO CM BUFFER. 
*         UPI    UPDATE IN POINTER AND ABN. 
*         RFB    READ FET BUFFER POINTERS.
*         VFB    VALIDATE FET BUFFER POINTERS.
*         RVO    READ AND VALIDATE OUT POINTER. 
*         CSA    CALCULATE BUFFER SPACE AVAILABLE.
*         IUR    ISSUE UNIVERSAL COMMAND AND PROCESS RESPONSE.
*         RDB    READ DATA BLOCK FROM NAD.
*         VDB    VALIDATE DATA BLOCK. 
*         WBB    WRITE BINARY BUFFER. 
*         WCW    WRITE COTROL WORD FORMATTED DATA.
*         PNR    PROCESS NAD RESPONSE.
          TITLE  NDR HIERARCHY CHART (WRITE CONVERT MODE DATA)
* 
* 
* 
*                             ********* 
*                             *  WCM  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*             * * * * * * * * * * * * * * * * * * * * * 
*             *         *         *         *         * 
*             *         *         *         *         * 
*             *         *         *         *         * 
*         ********* ********* ********* ********* ********* 
*         *  VFP  * *  WFD  * *  WNB  * *  RDC  * *  UPO  * 
*         ********* ********* ********* ********* ********* 
*             *         *         *         * 
*             *         *         *         * * * * * * * * * 
*             *         *         *                         * 
*     * * * * * *       *     * * * * * * * * * * *         * 
*     *         *       *     *         *         *         * 
* ********* *********   * ********* ********* *********     * 
* *  RFB  * *  VFB  *   * *  BBH  * *  IUR  * *  WDB  *     * 
* ********* *********   * ********* ********* *********     * 
*                       *               *                   * 
*                       *               *                   * 
*                       *               *                   * 
*       * * * * * * * * * * * *         *         * * * * * * 
*       *         *           *         *         *         * 
*   ********* *********   ********* ********* ********* ********* 
*   *  RVI  * *  CDA  *   *  CFP  * *  PNR  * *  RBB  * *  RCW  * 
*   ********* *********   ********* ********* ********* ********* 
*                                                           * 
*                                                           * 
*                                                           * 
*                                                       ********* 
*                                                       *  RBB  * 
*                                                       ********* 
* 
* 
*         WCM    WRITE CONVERT MODE DATA. 
*         VFP    VALIDATE FET PARAMETERS. 
*         WFD    WAIT FOR DATA AVAILABLE. 
*         WNB    WRITE NETWORK BLOCK. 
*         RDC    READ DATA FROM CM BUFFER.
*         UPO    UPDATE OUT POINTER AND ABN.
*         RFB    READ FET BUFFER POINTERS.
*         VFB    VALIDATE FET BUFFER POINTERS.
*         RVI    READ AND VALIDATE IN POINTER.
*         CSA    CALCULATE BUFFER SPACE AVAILABLE.
*         CFP    CHECK FOR SHORT PRU. 
*         IUR    ISSUE UNIVERSAL COMMAND AND PROCESS RESPONSE.
*         RDB    READ DATA BLOCK FROM CM. 
*         VDB    VALIDATE DATA BLOCK. 
*         RBB    READ BINARY BUFFER.
*         RCW    READ CONTROL WORD FORMATTED DATA.
*         PNR    PROCESS NAD RESPONSE.
          TITLE  NDR HIERARCHY CHART (READ PATH DATA) 
* 
* 
* 
*                             ********* 
*                             *  RPD  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*     *     *     *           *           *           *           * 
*     *     *     *           *           *           *           * 
*     *     *     *           *           *           *           * 
* ********* * *********   *********   *********   *********   ********* 
* *  RPP  * * *  IBH  *   *  ICD  *   *  OAK  *   *  WTX  *   *  BWH  * 
* ********* * *********   *********   *********   *********   ********* 
*           *     * 
*           *     * 
*           *     * 
*       ********* * 
*       *  CUP  * * 
*       ********* * 
*                 * 
*                 * 
*                 * 
*             ********* 
*             *  CBS  * 
*             ********* 
* 
* 
*         RPD    READ PATH DATA.
*         RPP    READ PATH DATA PRESET. 
*         CUP    CHECK USER PARAMETERS. 
*         IBH    INPUT BLOCK HEADER.
*         CBS    CALCULATE BLOCK SIZE.
*         ICD    INPUT CHARACTER DATA.
*         OAK    OUTPUT ACKNOWELEDGE MESSAGE. 
*         WTX    WRITE TEXT.
*         BWH    BUILD AND WRITE BLOCK HEADER.
          TITLE  NDR HIERARCHY CHART (WRITE PATH DATA)
* 
* 
* 
*                             ********* 
*                             *  WPD  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*               * * * * * * * * * * * * * * * * * * * 
*               *           *           *           * 
*               *           *           *           * 
*               *           *           *           * 
*           *********   *********   *********   ********* 
*           *  BMG  *   *  OBH  *   *  OCD  *   *  WPP  * 
*           *********   *********   *********   ********* 
* 
* 
*         WPD    WRITE PATH DATA. 
*         BMG    BUILD NETWORK MESSAGE. 
*         OBH    OUTPUT BINARY HEADER.
*         OCD    OUTPUT CHARACTER DATA. 
*         WPP    WRITE PATH DATA PRESET.
          TITLE  NDR HIERARCHY CHART (DETERMINE 3NW ENTRY POINT)
* 
* 
* 
*                             ********* 
*                             *  DTW  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*         * * * * * * * * * * * * * * * * * * * 
*         *           *           *           * 
*         *           *           *           * 
*         *           *           *           * 
*     *********   *********   *********   ********* 
*     *  IDL  *   * (STT) *   *  DRP  *   * (SDM) * 
*     *********   *********   *********   ********* 
* 
* 
*         DTW    DETERMINE 3NW ENTRY POINT. 
*         IDL    NDR IDLE FUNCTION. 
*         DRP    DROP PP. 
          TITLE  NDR HIERARCHY CHART (STATUS) 
* 
* 
* 
*                             ********* 
*                             *  STT  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*         * * * * * * * * * * * * * * * * * * * * * * * * * 
*         *           *           *           *           * 
*         *           *           *           *           * 
*         *           *           *           *           * 
*     *********   *********   *********   *********   ********* 
*     *  ICM  *   *  MCM  *   *  EVT  *   *  MDP  *   *  GCR  * 
*     *********   *********   *********   *********   ********* 
*         *                       * 
*         *                 * * * * * * * 
*         *                 *           * 
*     *********         *********   ********* 
*     *  GCM  *         *  PTH  *   *  REV  * 
*     *********         *********   ********* 
* 
*         STT    STATUS.
*         REV    RECORD EVENT.
*         EVT    DETERMINE POSSIBLE EVENT.
*         ICM    INPUT CONTROL MESSAGE. 
*         GCM    GET CONTROL MESSAGE. 
*         MCM    MATCH CONTROL MESSAGE. 
*         PTH    READ PATH STATUS TABLE.
*         MDP    MONITOR DISCONNECT PROCESS.
          TITLE  NDR HIERARCHY CHART (SELECT/DESELECT CONVERT MODE) 
* 
* 
* 
*                             ********* 
*                             *  SDM  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*                             ********* 
*                             *  IUR  * 
*                             ********* 
*                                 * 
*                         * * * * * * * * * 
*                         *               * 
*                     *********       ********* 
*                     *  PSR  *       *  PER  * 
*                     *********       ********* 
*                                         * 
*                                         * 
*                                         * 
*                                     ********* 
*                                     *  GCS  * 
*                                     ********* 
* 
* 
*         SDM    SELECT/DESELECT CONVERT MODE.
*         IUR    ISSUE UNIVERSAL COMMAND AND WAIT FOR RESPONSE. 
*         PSR    PROCESS SELECT CONVERT MODE RESPONSE.
*         PER    PROCESS EXIT CONVERT MODE RESPONSE.
*         GCS    GET FINAL CONVERT MODE STATISTICS. 
          TITLE  NDR HIERARCHY CHART (DETERMINE 3NM ENTRY POINT)
* 
* 
* 
*                             ********* 
*                             *  DTM  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*                       * * * * * * * * * * * 
*                       *         *         * 
*                       *         *         * 
*                       *         *         * 
*                   ********* ********* ********* 
*                   * (CRQ) * * (CNT) * * (SND) * 
*                   ********* ********* ********* 
* 
* 
*         DTM    DETERMINE 3NM ENTRY POINT. 
          TITLE  NDR HIERARCHY CHART (OBTAIN CONNECT REQUEST) 
* 
* 
* 
*                             ********* 
*                             *  CRQ  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*     *         *           *           *           *         * 
*     *         *           *           *           *         * 
*     *         *           *           *           *         * 
* ********* *********   *********   *********   ********* ********* 
* *  SRA  * *  VID  *   *  CMP  *   *  GCR  *   *  REJ  * *  CRA  * 
* ********* *********   *********   *********   ********* ********* 
*               *                                   * 
*               *                                   * 
*               *                                   * 
*               *                               ********* 
*               *                               *  CRA  * 
*               *                               ********* 
*               * 
*               * 
*               * 
*           ********* 
*           *  CVT  * 
*           ********* 
* 
* 
*         CRQ    OBTAIN CONNECT REQUEST.
*         SRA    SET RHF ACTIVE.
*         VID    VALIDATE LOGICAL ID. 
*         CVT    CONVERT A CHARACTER FROM ASCII TO BINARY.
*         CMP    COMPLETE THE FUNCTION. 
*         GCR    GET CONNECT REQUEST. 
*         REJ    REJECT CONNECT REQUEST.
*         CRA    CLEAR RHF ACTIVE.
          TITLE  NDR HIERARCHY CHART (OBTAIN CONNECTION)
* 
* 
* 
*                             ********* 
*                             *  CNT  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*                     * * * * * * * * * * * * * 
*                     *                       * 
*                     *                       * 
*                     *                       * 
*                 *********               ********* 
*                 *  SRA  *               *  CRA  * 
*                 *********               ********* 
* 
* 
*         CNT    REQUEST CONNECTION.
*         SRA    SET RHF ACTIVE.
*         CRA    CLEAR RHF ACTIVE.
          TITLE  NDR HIERARCHY CHART (SEND CONTROL MESSAGE) 
* 
* 
* 
*                             ********* 
*                             *  SND  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*                     * * * * * * * * * * * * * 
*                     *           *           * 
*                     *           *           * 
*                     *           *           * 
*                 *********   *********   ********* 
*                 *  CML  *   *  PTH  *   *  DMT  * 
*                 *********   *********   ********* 
* 
* 
*         SND    SEND CONTROL MESSAGE.
*         CML    CALCULATE MESSAGE LENGTH.
*         PTH    READ PATH STATUS TABLE.
*         DMT    DETERMINE MESSAGE TYPE.
          TITLE  NDR HIERARCHY CHART (DETERMINE 3NN ENTRY POINT)
* 
* 
* 
*                             ********* 
*                             *  DTN  * 
*                             ********* 
*                                 * 
*                                 * 
*                                 * 
*                     * * * * * * * * * * * * * 
*                     *           *           * 
*                     *           *           * 
*                     *           *           * 
*                 *********   *********   ********* 
*                 *  FLS  *   *  DSC  *   *  IND  * 
*                 *********   *********   ********* 
*                     *           *           * 
*                     *           *           * * * * * * * 
*                     *           *           *           * 
*                 *********   *********   *********   ********* 
*                 *  TRM  *   *  TRM  *   *  CMC  *   *  NWL  * 
*                 *********   *********   *********   ********* 
*                                             * 
*                                             * 
*                                             * 
*                                         ********* 
*                                         *  GCL  * 
*                                         ********* 
* 
* 
*         DTN    DETERMINE 3NN ENTRY POINT. 
*         FLS    FLUSH PATH.
*         TRM    TERMINATE PATH.
*         DSC    DISCONNECT PATH. 
*         IND    INITIALIZE NAD.
*         CMC    CONVERT MODE CONTROL.
*         GCL    GET CONVERT MODE LIMITS. 
*         NWL    NAD LOAD NEEDED. 
          TITLE  NDR AND RHF INTERFACE
* 
* 
*         NDR IS INITIATED WITH FOLLOWING RA+1 REQUEST
* 
* 
*                59        41                  11      0
*                ---------------------------------------
*         RA+1  I   NDR   I         0         I  COMM   I 
*               I         I                   I ADDRESS I 
*                ---------------------------------------
          SPACE  4,10 
* 
* 
*         STANDARD COMMUNICATON BLOCK 
* 
* 
*                   59     47    44    35    29      11     5    0
*                   ----------------------------------------------
*         REQUEST  I FOR  I I I I EST I     I  QUE  I LNAD I FUNC I 
*                  I INST IDIBIAI ORD I CHN I  ADDR I ORD  I CODE I 
*                   ----------------------------------------------
*                  I           DEFINED BY EACH FUNCTION           I 
*                   ----------------------------------------------
  
*                   59                   23           11    5    0
*                   ----------------------------------------------
*         REPLY    I                    I I  RETURN  I     I FUNC I 
*                  I DEF BY EACH FUNC   ICI   CODE   I RES I COMP I 
*                   ----------------------------------------------
*                  I           DEFINED BY EACH FUNCTION           I 
*                   ----------------------------------------------
* 
*         A      NDR ACTIVE 
*         B      DEDICATED CHANNEL
*         C      PATH ERROR IF RETURN CODE = 1
*         D      REQUEST AREA BEING CHANGED 
* 
*         NDR FUNCTIONS 
*         0        NO FUNCTION. 
*         1        IDLE.
*         2        STATUS.
*         3        DROPOUT. 
*         4        REQUEST CONNECTION.
*         5        OBTAIN CONNECT REQUEST.
*         6        CONNECT REQUEST REPLY. 
*         7        SEND CONTROL MESSAGE.
*        10        READ PATH DATA AND SEND ACK. 
*        11        WRITE PATH DATA. 
*        12        DISCONNECT PATH. 
*        13        FLUSH PATH.
*        14        INITIALIZE NAD.
*        15        FET I/O READ.
*        16        FET I/O WRITE. 
*        17        FET I/O WRITER.
*        20        FET I/O WRITEF.
*        21        FET I/O CLOSE. 
*        22        FET I/O READC. 
*        23        FET I/O WRITEC.
*        24        START NDR. 
          SPACE 4,10
* 
* 
*         IDLE (FC=1) 
* 
* 
*                   59         47                        11      0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 1   I 
*                   ----------------------------------------------
*                  I STAT REC I                         I  IDLE   I 
*                  I  COUNT   I           0             I  TIME   I 
*                   ----------------------------------------------
* 
*         REPLY    STANDARD REPLY 
* 
* 
*         RETURN CODES
*         0        END OF IDLE TIME.
*         1        IDLE PP COUNT IS ZERO FOR ONE MILLISECOND. 
          SPACE  4,10 
* 
* 
*         STATUS (FC=2) 
* 
* 
*                   59         47                                0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 2   I 
*                   ----------------------------------------------
*                  I STAT REC I                                   I 
*                  I   COUNT  I                0                  I 
*                   ----------------------------------------------
* 
*                   59    51    47      35     23   17    11     0
*                   ----------------------------------------------
*         REPLY    I I I I                    I I RETURN I        I 
*                  IBIATEI         0          IFI  CODE  I FC = 2 I 
*                   ----------------------------------------------
*         EVENT    I REJ I I I I EVENT I      I    I APPLICATION  I 
*         LIST     I COD I0IDICI TYPE  I ACN  I 0  I TABLE ADDR   I 
*                   ----------------------------------------------
*                  I                                              I 
*                  I                                              I 
*                  I                      .                       I 
*                  I                      .                       I 
*                  I                      .                       I 
*                   ----------------------------------------------
* 
*         A        CONNECT REQUEST AVAILABLE. 
*         B        CONTROL MESSAGE INPUT. 
*         C        OUTPUT BELOW  THRESHOLD. 
*         D        INPUT AVAILABLE. 
*         E        EST IS OFF.
*         F        PATH ERROR IF RETURN CODE = 1. 
* 
*         EVENT TYPE
*         1        CHANGE IN INPUT AVAILABLE. 
*         2        CHANGE IN OUTPUT BELOW THRESHOLD.
*         3        CONNECTING CHANGED TO CONNECTED (CNT TO ACK).
*         4        REMOTE DISCONNECT (ABT). 
*         5        CONNECT REJECTED BY NETWORK. 
*         6        CONNECT REJECTED BY REMOTE HOST. 
* 
*         RETURN CODES
*         0        NORMAL.
*         1        HARDWARE ERROR. NAD IS OFF.
* 
*         REJECT CODES
*                  IF EVENT TYPE IS 5,
*                    REJECT CODE IS THE CONTROLWARE NETWORK BREAK 
*                    REASON CODE (REFER TO NAD REFERENCE MANUAL). 
*                  IF EVENT TYPE IS 6,
*                    REJECT CODE IS THE CONNECTION REJECT CODE
*                    SUPPLIED BY THE REMOTE HOST SOFTWARE (REFER
*                    TO THE RHF APPLICATION-TO-APPLICATION
*                    SPECIFICATION).
          SPACE  4,10 
* 
* 
*         DROPOUT (FC=3)
* 
* 
*                   59                                           0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 3   I 
*                   ----------------------------------------------
*                  I                      0                       I 
*                   ----------------------------------------------
* 
*         REPLY    STANDARD REPLY 
* 
*                  NDR DROPS OUT AFTER SETTING FUNCTION COMPLETE. 
          SPACE  4,10 
* 
* 
*         REQUEST CONNECTION (FC=4) 
* 
* 
*                   59                                           0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 4   I 
*                   ----------------------------------------------
*                  I                      0                       I 
*                   ----------------------------------------------
* 
*                   59                35       23        11      0
*                   ----------------------------------------------
*         REPLY    I                 I  PATH  I I RETURN I        I 
*                  I        0        I   ID   IAI  CODE  I FC = 4 I 
*                   ----------------------------------------------
* 
*         A        PATH ERROR IF RETURN CODE = 1. 
* 
*         RETURN CODES
*         O        LOCAL NAD ACCEPT, PATH ID RETURNED.
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        EST DOES NOT ALLOW OPERATION.
*         3        LOCAL NAD REJECT.
*         4        BAD PATH TCU.
          SPACE  4,10 
* 
* 
*         OBTAIN CONNCECT REQUEST (FC=5)
* 
* 
*                   59                                           0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 5   I 
*                   ----------------------------------------------
*                  I                      0                       I 
*                   ----------------------------------------------
* 
*         REPLY    STANDARD REPLY 
* 
*         RETURN CODES
*         0        MESSAGE OBTAINED.
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        EST DOES NOT ALLOW OPERATION.
*         3        NO MESSAGE TO OBTAIN.
*         4        INVALID LID. 
          SPACE  4,10 
* 
* 
*         CONNECT REQUEST REPLY (FC=6)
* 
* 
*                   59        47                         11      0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 6   I 
*                   ----------------------------------------------
*                  I PATH ID I            0             I  REPLY  I 
*                   ----------------------------------------------
* 
*         REPLY    STANDARD REPLY 
* 
*         REPLIES 
*         0        ACCEPT CONNECTION. 
*         NON-ZERO REPLY CODE IS THE CONNECTION REJECT CODE TO BE 
*                  SUPPLIED TO THE REMOTE HOST (REFER TO THE
*                  RHF APPLICATION-TO-APPLICATION SPECIFICATION). 
* 
*         RETURN CODES
*         0        DONE.
*         1        HARDWARE ERROR. NAD IS OFF.
* 
*         NDR SETS RHF  ACTIVE IN EST FOR AN ACCEPTED CONNECTION. 
          SPACE  4,10 
* 
* 
*         SEND CONTROL MESSAGE (FC=7) 
* 
* 
*                   59        47                       11        0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 7   I 
*                   ----------------------------------------------
*                  I PATH 1D I            0           I TEXT LGTH I 
*                   ----------------------------------------------
* 
*         REPLY    STANDARD REPLY 
* 
*         RETURN CODES
*         0        DONE.
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        REISSUE. NO BUFFERS AVAILABLE. 
*         3        PATH HAS BEEN ABORTED BY REMOTE SIDE.
          SPACE  4,10 
* 
* 
*         READ PATH DATA AND SEND ACK (FC=10) 
* 
* 
*                   59       47      35    29            11      0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 10  I 
*                   ----------------------------------------------
*                  I  PATH  I  EJT  I     I  ACK QUEUE  I         I 
*                  I   ID   I  ORD  I ACT I  ENTRY ADD  I   ACN   I 
*                   ----------------------------------------------
* 
*                   59             36         23         11 
*                   ----------------------------------------------
*         REPLY    I              I USER PAR I I RETURN I         I 
*                  I      0       I ERR TYPE IAI  CODE  I FC = 10 I 
*                   ----------------------------------------------
*                  I                   EVENT LIST                 I 
*                   ----------------------------------------------
* 
*         A        PATH ERROR IF RETURN CODE = 1. 
* 
*         USER PARAMETER ERROR TYPES
*         0        HEADER ADDRESS INVALID.
*         1        TEXT ADDRESS PLUS TLMAX INVALID. 
*         2        INVALID TLMAX. 
* 
*         RETURNS CODES 
*         0        PATH DATA BLOCK READ, NO ACK.
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        PATH DATA BLOCK READ, ACK SENT.
*         3        PATH DATA BLOCK READ, QUEUE ACK. 
*         4        REISSUE. USER SWAPPED. 
*         5        USER PARAMETER ERROR.
*         6        REISSUE. NO INPUT AVAILABLE. 
          SPACE  4,10 
* 
* 
*         WRITE PATH DATA (FC=11) 
* 
* 
*                   59       47      35                  11     0 
*                   ----------------------------------------------
*         REQUEST  I         STANDARD FIRST WORD         FC = 11  I 
*                   ----------------------------------------------
*                  I  PATH  I  EJT  I                   I         I 
*                  I   ID   I  ORD  I         0         I   ACN   I 
*                   ----------------------------------------------
* 
*                   59    53         35         23         11    0
*                   ----------------------------------------------
*         REPLY    I     I          I USER PAR I I RETURN I       I 
*                  I  0  I    ABN   I ERR TYPE IAI  CODE  I FC=11 I 
*                   ----------------------------------------------
*                  I                   EVENT LIST                 I 
*                   ----------------------------------------------
* 
*         A        PATH ERROR IF RETURN CODE = 1. 
* 
*         USER PARAMETER ERROR TYPE 
*         0        HEADER ADDRESS INVALID.
*         1        ACT INVALID. 
*         2        TLC INVALID. 
*         3        ABT INVALID. 
*         4        TEXT ADDRESS INVALID.
* 
*         RETURN CODES
*         0        PATH DATA BLOCK WRITTEN. 
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        REISSUE. USER SWAPPED. 
*         3        REISSUE. NO BUFFERS AVAILABLE. 
*         4        USER PARAMETER ERROR.
*         5        PATH DATA BLOCK WRITTEN, QUEUE LOCAL ACK.
          SPACE  4,10 
* 
* 
*         DISCONNECT PATH (FC=12) 
* 
* 
*                   59        47                         11      0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 12  I 
*                   ----------------------------------------------
*                  I PATH ID I            0                       I 
*                   ----------------------------------------------
* 
*                   59    53     43  35   27    23         11  3 0
*                   ----------------------------------------------
*         REPLY    I PATH STATE/ I             I I RETURN I       I 
*                  I  CLARIFIER  I             IAI  CODE  I FC=12 I 
*                   ----------------------------------------------
*                  I   PATH RECEIVE CODE  I         0             I 
*                   ----------------------------------------------
* 
*         A        PATH ERROR IF RETURN CODE = 1. 
* 
*         RETURN CODES
*         0        PATH IS DISCONNECTED.
*         1        HARDWARE ERROR. NAD IS OFF.
* 
*         PATH STATE/CLARIFIER
*                  STATE OF PATH BEFORE DISCONNECT/FLUSH/PURGE
*                  ISSUED (REFER TO NAD REFERENCE MANUAL FOR
*                  DEFINITIONS).
* 
*         PATH RECEIVE CODE 
*                  IF STATE/CLARIFIER = 1/5 (REMOTE HOST REJECT), 
*                    RECEIVE CODE IS REMOTE HOST CONNECTION REJECT
*                    CODE.
*                  IF STATE/CLARIFIER = 1/7, 4/0, OR 4/1, 
*                    RECEIVE CODE CONTAINS NETWORK BREAK
*                    INFORMATION (IF *MG401* CONTROLWARE):  
* 
*                    0        8        16      24 
*                    ---------------------------------- 
*                   I   HOP  I  NAD   I  NET  I REASON I
*                    ---------------------------------- 
* 
*                   HOP      TOPOGRAPHICAL LOCATION OF NAD
*                            (0=HOST NAD) 
*                   NAD      PHYSICAL NAD ADDRESS OF NAD
*                            IN QUESTION
*                   NET      LOGICAL NETWORK CONTAINING 
*                            NAD IN QUESTION
*                   REASON   (REFER TO NAD REFERENCE MANUAL). 
* 
*         PATH IS PURGED INSTEAD OF DISCONNECTED IF PATH STATUS IS ABT. 
          SPACE  4,10 
* 
* 
*         FLUSH PATH (FC=13)
* 
* 
*         SAME AS DISCONNECT PATH EXCEPT FC=13. 
*         THIS FUNCTION IS USED DURING NETOFF.
          SPACE  4,10 
* 
* 
*         INITIALIZE NAD (FC=14)
* 
* 
*                   59                35     23         11       0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 14  I 
*                   ----------------------------------------------
*                  I                 I SUB- I NUMBER   I NUMBER   I 
*                  I       0         I FUNC I OF BUFFS I OF PATHS I 
*                   ----------------------------------------------
* 
*                   59       47      35      23       11  7 5 3  0
*                   ----------------------------------------------
*         REPLY    I        I BUFFS I PATHS I I RET  I     I FUNC I 
*                  I   0    I  RES  I  RES  ICI CODE I RES I COMP I 
*                   ----------------------------------------------
*                  I  NAD   I  DI   I         I REV  I M I TCUS   I 
*                  I  ADDR  I TYPE  I  HUI    I LVL  I S I E I A  I 
*                   ----------------------------------------------
* 
*                  MS        MEMORY SIZE
*                            (0 = 16KW, 1 = 32KW, 2 = 48KW, 3 = 64KW) 
* 
*         SUB-FUNCTIONS 
*         0        NORMAL INITIALIZE NAD. 
*         1        INITIALIZE NAD AND ENABLE CODE CONVERSION. 
*         2        INITIALIZE NAD AND DISABLE CODE CONVERSION.
* 
*         RETURN CODES
*         0        NAD INITIALIZED. 
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        EST DOES NOT ALLOW OPERATION.
*         3        NAD INITIALIZED AND CODE CONVERSION ENABLED. 
*         4        NAD INITIALIZED AND CODE CONVERSION NOT AVAILABLE. 
*         5        INITIAL TEST FAILED.  NAD SHOULD BE RELOADED.
* 
*         IF THE EST ENTRY INDICATES THAT THERE ARE NO OTHER ACCESSES 
*         TO THE NAD, IT WILL BE MASTER CLEARED AND ALL PATHS WILL BE 
*         RESET TO INITIAL CONDITIONS.  A SIMPLE TEST OF NAD RESPONSES
*         IS EXECUTED TO VERIFY THAT DI AND NAD ARE FUNCTIONING.
          SPACE  4,10 
* 
* 
*         PERFORM FET I/O READ (FC=15)
* 
* 
*                   59       47      35    29            11      0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 15  I 
*                   ----------------------------------------------
*                  I  PATH  I  EJT  I     I     FET     I         I 
*                  I   ID   I  ORD  I  0  I   ADDRESS   I  RETRY  I 
*                   ----------------------------------------------
* 
*                   59       47                23                0
*                   ----------------------------------------------
*         REPLY    I           STANDARD FIRST WORD       FC = 15  I 
*                   ----------------------------------------------
*                  I   0    I   BLOCKS READ   I  BLOCKS WRITTEN   I 
*                   ----------------------------------------------
*                  I                   EVENT LIST                 I 
*                   ----------------------------------------------
* 
*         RETURN CODES
*         0        FET I/O COMPLETE.
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        REISSUE. USER SWAPPED. 
*         3        REISSUE. OUTPUT THRESHOLD REACHED. 
*         4        REISSUE. NO INPUT AVAILABLE. 
*         5        USER PARAMETER ERROR. INVALID FET ADDRESS OR 
*                  COMPLETE BIT SET.
          SPACE  4,10 
* 
* 
*         PERFORM FET I/O WRITE (FC=16) 
* 
* 
*         SAME AS FET I/O READ EXCEPT FC=16.
          SPACE  4,10 
* 
* 
*         PERFORM FET I/O WRITER (FC=17)
* 
* 
*         SAME AS FET I/O READ EXCEPT FC=17.
          SPACE  4,10 
* 
* 
*         PERFORM FET I/O WRITEF (FC=20)
* 
* 
*         SAME AS FET I/O READ EXCEPT FC=20.
          SPACE  4,10 
* 
* 
*         PERFORM FET I/O CLOSE (FC=21) 
* 
* 
*         SAME AS FET I/O READ EXCEPT FC=21.
          SPACE  4,10 
* 
* 
*         PERFORM FET I/O READC (FC=22) 
* 
* 
*         SAME AS FET I/O READ EXCEPT FC=22.
          SPACE  4,10 
* 
* 
*         PERFORM FET I/O WRITEC (FC=23)
* 
* 
*         SAME AS FET I/O READ EXCEPT FC=23.
          SPACE  4,10 
* 
* 
*         SELECT CONVERT MODE (FC=24) 
* 
* 
*                   59       47                          11      0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 24  I 
*                   ----------------------------------------------
*                  I  PATH  I                           I CONVERT I 
*                  I   ID   I          0                I  MODE   I 
*                   ----------------------------------------------
* 
*                   59                                           0
*                   ----------------------------------------------
*         REPLY    I           STANDARD FIRST WORD       FC = 24  I 
*                   ----------------------------------------------
*                  I               EVENT LIST ENTRY               I 
*                   ----------------------------------------------
* 
*         RETURN CODES
*         0        CONVERT MODE SELECTED. 
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        CONVERT MODE NOT SELECTED. (SEE EVENT ENTRY) 
          SPACE  4,10 
* 
* 
*         EXIT CONVERT MODE (FC=25) 
* 
* 
*                   59       47                                  0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 25  I 
*                   ----------------------------------------------
*                  I  PATH  I                                     I 
*                  I   ID   I               0                     I 
*                   ----------------------------------------------
* 
*                   59       47       35           17            0
*                   ----------------------------------------------
*         REPLY    I           STANDARD FIRST WORD       FC = 25  I 
*                   ----------------------------------------------
*                  I   0    I STATUS I NETWORK ABN I   HOST ABN   I 
*                   ----------------------------------------------
*                  I               EVENT LIST ENTRY               I 
*                   ----------------------------------------------
* 
*         RETURN CODES
*         0        SUCCESSFUL CONVERT MODE EXIT.
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        CONVERT MODE EXITING.
*         3        CONVERT MODE NOT EXITED. (SEE EVENT ENTRY) 
          SPACE  4,10 
* 
* 
*         READ DATA IN CONVERT MODE (FC=26) 
* 
* 
*                   59       47      35    29            11      0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 26  I 
*                   ----------------------------------------------
*                  I  PATH  I  EJT  I FET I     FET     I         I 
*                  I   ID   I  ORD  I CODEI   ADDRESS   I  RETRY  I 
*                   ----------------------------------------------
* 
*                   59       47                23                0
*                   ----------------------------------------------
*         REPLY    I           STANDARD FIRST WORD       FC = 26  I 
*                   ----------------------------------------------
*                  I   0    I   BLOCKS READ   I  BLOCKS WRITTEN   I 
*                   ----------------------------------------------
*                  I                   EVENT LIST                 I 
*                   ----------------------------------------------
* 
*         RETURN CODES
*         0        FET I/O COMPLETE.
*         1        HARDWARE ERROR. NAD IS OFF.
*         2        REISSUE. USER SWAPPED. 
*         3        REISSUE. OUTPUT THRESHOLD REACHED. 
*         4        REISSUE. NO INPUT AVAILABLE. 
*         5        USER PARAMETER ERROR. INVALID FET ADDRESS OR 
*                  COMPLETE BIT SET.
          SPACE  4,10 
* 
* 
*         WRITE DATA IN CONVERT MODE (FC=27)
* 
* 
*         SAME AS READ CONVERT MODE EXCEPT FC=27. 
          SPACE  4,10 
* 
* 
*         START NDR (FC=30) 
* 
* 
*                   59                                           0
*                   ----------------------------------------------
*         REQUEST  I           STANDARD FIRST WORD       FC = 30  I 
*                   ----------------------------------------------
* 
*         REPLY    STANDARD REPLY 
* 
*         THIS FUNCTION IS USED AS THE FIRST FUNCTION ALONG WITH
*         AN RA+1 REQUEST FOR NDR.
*CALL COMNOSDEF 
          SPACE  4,10 
**        DIRECT CELL DEFINITIONS 
* 
*         A SUMMARY OF DIRECT CELLS AS USED BY NDR. 
* 
* 
*         CELLS  DESCRIPTION
* 
*         1-14   SCRATCH
* 
*         15-35  UNIQUELY DEFINED BY EACH FUNCTION
* 
*         36-42  WORD THREE (REPLY) OF RHF/NDR COMMUNICATION AREA 
* 
*         43-47  WORD ONE (REQUEST) OF RHF/NDR COMMUNICATION AREA 
* 
*         50-54  WORD TWO (REQUEST) OF RHF/NDR COMMUNICATION AREA 
* 
*         55     D.RA  (DEFINED BY SYSTEM)
* 
*         56     D.FL  (DEFINED BY SYSTEM)
* 
*         57-73  MISCELLANEOUS VARIABLES AS DESCRIBED BELOW 
* 
*         74     D.PPIR (DEFINED BY SYSTEM) 
* 
*         75     D.PPMES1 (DEFINED BY SYSTEM) 
* 
*         76     D.CPAD (DEFINED BY SYSTEM) 
* 
*         77     D.PPSTAT (DEFINED BY SYSTEM) 
* 
          SPACE  4,10 
          SPACE  4,10 
**        DIRECT CELL EQUATES AND RELATED DEFINITIONS 
* 
* 
*         CELLS  17-23 AS USED FOR CONNECTION ENTRY BY STATUS FUNCTION
* 
  
 D.CON    EQU    17B               CONNECTION ENTRY (FIRST WORD)
 C.CONFLG EQU    0                 CONNECTION FLAGS 
 S.CONINT EQU    11                CONNECTION INITIALIZED 
 S.CONIA  EQU    10                INPUT AVAILABLE
 S.CONOA  EQU    9                 OUTPUT BELOW THRESHOLD 
 S.CONBRK EQU    8                 CONNECTION BROKEN
 C.CONNAD EQU    3                 NAD ORDINAL (LOWER 6 BITS) 
 C.CONPTH EQU    4                 PATH ID
  
* 
*         CELLS  24-30 AS USED FOR APPLICATION TABLE POINTERS 
*                      BY STATUS FUNCTION 
  
 D.PNT    EQU    24B               APPLICATION TABLE POINTER WORD 
 C.LAPL   EQU    1                 LAST APPLICATION TABLE ADDRESS 
 C.FAPL   EQU    3                 FIRST APPLICATION TABLE ADDRESS
 CMAVL    EQU    24B               CONTROL MESSAGE AVAILABLE
  
* 
*         CELLS  31-35 AS USED IN REPORTING AN EVENT TO RHF 
* 
  
 D.EVENT  EQU    31B               EVENT WORD 
 C.STATUS EQU    0                 STATUS BYTE
 C.EVENT  EQU    1                 EVENT TYPE 
 EVTIN    EQU    1                 CHANGE IN INPUT AVAILABLE
 EVTOUT   EQU    2                 CHANGE IN OUTPUT BELOW THRESHOLD 
 EVTCON   EQU    3                 PATH CONNECTED 
 EVTABT   EQU    4                 PATH ABORTED 
 EVTNREJ  EQU    5                 CONNECT REJECTED BY NETWORK
 EVTHREJ  EQU    6                 CONNECT REJECTED BY REMOTE HOST
 C.EACN   EQU    2                 ACN
 C.APLADR EQU    3                 APPLICATION TABLE ADDRESS (18 BITS)
  
* 
*         CELLS  15-35 AS USED BY FET I/O 
* 
  
 BUFSIZE  EQU    15B               WORD SIZE FOR ONE NAD RECORD 
 BUFBYTES EQU    16B               BYTES IN PP BUFFER 
 REMWORDS EQU    17B               WORDS REMAINING
 FUNCTION EQU    20B               FET I/O FUNCTION 
 EVENT    EQU    21B               EVENT TO REPORT TO RHF 
 UBC      EQU    22B               UNUSED BIT COUNT 
 DBC      EQU    23B               DATA BLOCK CLARIFIER 
 DD       EQU    24B               DATA DECLARATION 
 RESET    EQU    25B               RESET FLAG 
 FIRST    EQU    26B               FIRST
 INPNT    EQU    30B               IN 
 OUTPNT   EQU    32B               OUT
 LIMIT    EQU    34B               LIMIT
  
* 
*         CELLS  15-35 AS USED BY NETGET/NETPUT 
* 
  
 ACT      EQU    30B               APPLICATION CHARACTER TYPE 
 D.CALLP  EQU    31B               NETGET/NETPUT CALL PARAMETERS
 C.HA     EQU    0                 HEADER ADDRESS (18 BITS) 
 C.TLMAX  EQU    2                 MAXIMUM TEXT LENGTH
 C.TA     EQU    3                 TEXT ADDRESS (18 BITS) 
  
* 
*         CELLS  20-21 AS USED IN EST MANIPULATION
* 
  
 RHFACT   EQU    20B               RHF SET ACTIVE IN EST
 NOS      IF     -DEF,NOS 
 ESTADR   EQU    21B               NAD EST ADDRESS
 NOS      ENDIF 
  
* 
*         CELLS  36-42 AS USED IN COMPLETING AN RHF FUNCTION
* 
  
 D.REQ3   EQU    36B               WORD THREE (REPLY) OF RHF/NDR COMM.
 C.STFLG  EQU    0                 STATUS FLAG BYTE 
 M.ESTOFF EQU    1000B             EST OFF MASK 
 S.ESTOFF EQU    9                 EST OFF BIT POSITION 
 M.CONREQ EQU    2000B             CONNECT REQUEST AVAILABLE MASK 
 M.CTLMSG EQU    4000B             CONTROL MESSAGE INPUT MASK 
 C.ABN    EQU    0                 ABN (WRITE)
 C.STCL1  EQU    0                 STATE/CLARIFIER (UPPER 12 BITS)
 C.STCL2  EQU    1                 STATE/CLARIFIER (LOWER 4 BITS) 
 C.CXSTAT EQU    1                 CONVERT MODE EXIT STATUS 
 CX.PBD   EQU    1                 PARTIAL DISCARDED ON EXIT CM 
 C.CMBUFF EQU    1                 CONVERT MODE BUFFERS ALLOCATED 
 C.RPATH  EQU    2                 RETURN PATH ID 
 C.ERRTYP EQU    2                 USER PARAMETER ERROR TYPE
 ET.RHA   EQU    0                 HEADER ADDRESS INVALID (READ)
 ET.RTA   EQU    1                 TEXT ADDRESS + TLMAX INVALID (READ)
 ET.RTL   EQU    2                 TLMAX INVALID (READ) 
 ET.WHA   EQU    0                 HEADER ADDRESS INVALID (WRITE) 
 ET.WACT  EQU    1                 ACT INVALID (WRITE)
 ET.WTLC  EQU    2                 TLC INVALID (WRITE)
 ET.WABT  EQU    3                 ABT INVALID (WRITE)
 ET.WTA   EQU    4                 TEXT ADDRESS INVALID (WRITE) 
 C.NNABN  EQU    2                 LAST NAD NETWORK ABN USED
 C.CMPATH EQU    2                 CONVERT MODE PATHS ALLOWED 
 C.RC     EQU    3                 RETURN CODE
 M.PTHERR EQU    4000B             PATH ERROR MASK
 RC.NOPP  EQU    1                 NO PPS AVAILABLE 
 RC.HRWDE EQU    1                 HARDWARE ERROR 
 RC.EST   EQU    2                 OPERATION DISALLOWED BY EST
 RC.NADRJ EQU    3                 LOCAL NAD REJECT (OF CONNECT REQ.) 
 RC.BPTCU EQU    4                 BAD PATH TCU (OF CONNECT REQ.) 
 RC.NOMSG EQU    3                 NO MESSAGE TO OBTAIN 
 RC.INLID EQU    4                 INVALID LID
 RC.SNDRE EQU    2                 SEND CONTROL MESSAGE REISSUE 
 RC.SNDAB EQU    3                 CANT SEND DATA, PATH ABORTED 
 RC.RACK  EQU    2                 DATA READ AND ACK SENT 
 RC.RQACK EQU    3                 DATA READ AND QUEUE ACK
 RC.RSWP  EQU    4                 USER SWAPPED (READ)
 RC.RPARM EQU    5                 USER PARAMETER ERROR (READ)
 RC.RNOIA EQU    6                 NO INPUT AVAILABLE (READ)
 RC.WSWP  EQU    2                 USER SWAPPED (WRITE) 
 RC.WNOBF EQU    3                 NO BUFFERS (WRITE) 
 RC.WPARM EQU    4                 USER PARAMETER ERROR (WRITE) 
 RC.WLACK EQU    5                 PATH DATA BLOCK WRITTEN, 
*                                  QUEUE LOCAL ACK (WRITE)
 RC.FSWP  EQU    2                 USER SWAPPED (FET I/O) 
 RC.FNOBF EQU    3                 NO BUFFERS (FET I/O) 
 RC.FNOIA EQU    4                 NO INPUT AVAILABLE (FET I/O) 
 RC.FPARM EQU    5                 USER PARAMETER ERROR (FET I/O) 
 RC.CMS   EQU    0                 CONVERT MODE SELECTED
 RC.CMSF  EQU    2                 CONVERT MODE SELECT FAILED 
 RC.CMSE  EQU    0                 CONVERT MODE EXITED
 RC.CME   EQU    2                 CONVERT MODE EXITING 
 RC.CMEF  EQU    3                 CONVERT MODE EXIT FAILED 
 RC.CCE   EQU    3                 CODE CONVERSION ENABLED
 RC.CCNA  EQU    4                 CODE CONVERSION NOT AVAILABLE
 RC.INIF  EQU    5                 INITIALIZE FAILED
 C.NHABN  EQU    3                 LAST NAD HOST ABN USED 
 C.FCOMP  EQU    4                 FUNCTION COMPLETE BYTE 
  
* 
*         CELLS  43-47 AS USED IN REQUESTING A NDR FUNCTION 
* 
  
 D.REQ1   EQU    43B               WORD ONE (REQUEST) OF RHF/NDR COMM.
 C.INS    EQU    0                 RESERVED FOR INSTALLATION
 C.REQFLG EQU    1                 REQUEST FLAGS
 S.RQCHG  EQU    11                REQUEST AREA BEING CHANGED 
 S.CHNDED EQU    10                CHANNEL DEDICATED FLAG 
 C.ESTORD EQU    1                 EST ORDINAL (LOWER 9 BITS) 
 C.CH     EQU    2                 CHANNEL NUMBER (UPPER 6 BITS)
 C.QADDR  EQU    2                 QUEUE ENTRY ADDRESS (18 BITS)
 C.NADORD EQU    4                 LOCAL NAD ORDINAL (UPPER 6 BITS) 
 C.FUNC   EQU    4                 FUNCTION REQUESTED (LOWER 6 BITS)
 IDLE     EQU    1                 IDLE FUNCTION
 STATUSF  EQU    2                 STATUS FUNCTION
 DROPOUT  EQU    3                 DROPOUT FUNCTION 
 CONNECT  EQU    4                 REQUEST CONNECTION 
 OCONREQ  EQU    5                 OBTAIN CONNECT REQUEST 
 REQREPLY EQU    6                 CONNECT REQUEST REPLY
 SNDCONM  EQU    7                 SEND CONTROL MESSAGE 
 DSCPATH  EQU    12B               DISCONNECT PATH
 FLSPATH  EQU    13B               FLUSH PATH 
 INTNAD   EQU    14B               INITIALIZE NAD 
 WRITE    EQU    16B               FET I/O WRITE
 CLOSE    EQU    21B               FET I/O CLOSE
 SELCM    EQU    24B               SELECT A CONVERT MODE
 EXITCM   EQU    25B               EXIT A CONVERT MODE
 STARTNDR EQU    30B               START NDR FUNCTION 
  
* 
*         CELLS  50-54 AS USED IN REQUESTING A NDR FUNCTION 
* 
  
 D.REQ2   EQU    50B               WORD TWO (REQUEST) OF RHF/NDR COMM.
 C.PATH   EQU    0                 PATH IDENTIFIER
 C.RECALL EQU    0                 RECALL COUNT 
 C.RJDT   EQU    1                 JDT ORDINAL
 C.ACT    EQU    2                 ACT (UPPER 6 BITS) 
 ACBM     EQU    1                 BINARY 
 ACAS     EQU    2                 ASCII (PACKED) 
 ACA5     EQU    3                 ASCII (8 BITS IN 12 BITS)
 ACDC     EQU    4                 DISPLAY CODE 
 C.QACK   EQU    2                 ACK QUEUE ENTRY ADDRESS (18 BITS)
 C.FETADR EQU    2                 FET ADDRESS (18 BITS)
 C.FETCD  EQU    2                 ENCODED FET I/O FUNCTION 
 FFREAD   EQU    0                 READ 
 FFREADC  EQU    1                 READC
 FFCLOSE  EQU    3                 CLOSE
 FFWRITEC EQU    4                 WRITEC 
 C.CCCSF  EQU    2                 CODE CONVERSION CONTROL SUB-FUNC 
 CCCECM   EQU    1                 ENABLE CODE CONVERSION 
 C.BUFFS  EQU    3                 CONVERT MODE BUFFERS TO RESERVE
 C.PATHS  EQU    4                 CONVERT MODE PATHS TO ALLOW
 C.CMSF   EQU    4                 CONVERT MODE SELECT FUNCTION 
 C.IDLE   EQU    4                 IDLE TIME
 C.REPLY  EQU    4                 REPLY CODE (CONNECT REQUEST) 
 C.ACN    EQU    4                 ACN
 C.RETRY  EQU    4                 RETRY COUNTER
 C.LGTH   EQU    4                 LENGTH OF CONTROL MESSAGE TEXT 
  
* 
*         CELLS  55-77 AS USED FOR MISCELLANEOUS VARIABLES
* 
* D.RA    EQU    55B               RA/100B
* D.FL    EQU    56B               FL/100B
 CHNRES   EQU    57B               CHANNEL RESERVED 
 TWO      EQU    60B               CONSTANT TWO 
 RECSIZE  EQU    61B               CONSTANT 600 (OCTAL) 
 ERROR    EQU    62B               LAST ERROR CODE
 COMMADR  EQU    63B               RHF/NDR COMMUNICATION ADDRESS
 NXTPNT   EQU    64B               NEXT FLAG FUNCTION POINTER 
 FLUSH    EQU    65B               INPUT FLUSH FLAG 
 STATUS   EQU    66B               CONTROLWARE STATUS 
 TRACE    EQU    67B               TRACE IDENTIFIER 
 TRACEFAN EQU    1B                FAN TRACE IDENTIFIER 
 TRACEFAW EQU    2B                FAW TRACE IDENTIFIER 
 TRACEINP EQU    4B                INP TRACE IDENTIFIER 
 TRACEOUT EQU    10B               OUT TRACE IDENTIFIER 
 NDRERR   EQU    67B               ERROR CAUSING NDR TO ABORT CP
 ONE      EQU    70B               CONSTANT ONE 
 D.PPIR   EQU    D.PPIR            CM ADDRESS OF PP INPUT REGISTER
 D.PPMES1 EQU    D.PPMES1          CM ADDRESS OF PP COMMUNICATION WORD 1
 D.CPAD   EQU    D.CPAD            CM ADDRESS OF CONTROL POINT AREA 
*                                    CURRENTLY USED BY THIS PP
* D.PPSTAT EQU   77B               CM ADDRESS OF PP STATUS WORD 
          SPACE  4,10 
**        OFFSETS DEFINED FOR INFORMATION WITHIN BUFFERS
* 
* 
*         APPLICATION BLOCK HEADER WORD 
* 
  
 C.HABT   EQU    0                 HEADER ABT (UPPER 6 BITS)
 ABTBLK   EQU    1                 ABT BLOCK
 ABTMSG   EQU    2                 ABT MESSAGE
 C.HACN   EQU    0                 HEADER ACN (SPLIT 12 BITS) 
 C.HABN   EQU    1                 HEADER ABN (18 BITS) 
 C.HACT   EQU    3                 HEADER ACT (UPPER 4 BITS)
 C.HFLGS  EQU    3                 HEADER FLAGS (LOWER 8 BITS)
 M.IBU    EQU    200B              INPUT BLOCK UNDELIVERABLE
 S.LACK   EQU    6                 GENERATE LOCAL BACK FLAG 
 C.HTLC   EQU    4                 HEADER TLC 
  
* 
*         NETWORK BLOCK HEADER IN PACKED FORMAT (8 PP WORDS)
* 
  
 HDRLEN   EQU    8                 PACKED HEADER LENGTH 
 R.PTXTLN EQU    0                 TEXT LENGTH (16 BITS)
 R.PCN    EQU    4                 CONNECTION NUMBER (UPPER 8 BITS) 
 R.PBT    EQU    5                 BLOCK TYPE (BITS 8 THRU 10)
 S.PBT    EQU    8                 BLOCK TYPE BOTTOM BIT POSITION 
 M.PBT    EQU    7B                BLOCK TYPE MASK
 BTBLK    EQU    1                 BLOCK
 BTMSG    EQU    2                 MESSAGE
 BTACK    EQU    3                 ACKNOWLEDGE
 BTCMD    EQU    4                 COMMAND
 R.PDBC   EQU    5                 DATA BLOCK CLARIFIER (LOWER 8 BITS)
 BTQBK    EQU    6                 Q-BLOCK
 BTQMS    EQU    7                 Q-MESSAGE
 M.PRU    EQU    200B              PRU BLOCK MASK 
 S.PRU    EQU    7                 PRU BLOCK SHIFT
 M.EOI    EQU    100B              EOI MASK 
 S.EOI    EQU    6                 EOI SHIFT
 M.EOR    EQU    40B               EOR MASK 
 S.EOR    EQU    5                 EOR SHIFT
 M.LVL    EQU    17B               LEVEL NUMBER MASK
 R.PABN   EQU    6                 BLOCK ABN (18 BITS)
  
* 
*         CONTROL MESSAGE FORMAT
* 
  
 NBHDLN   EQU    8                 NETWORK BLOCK HEADER LENGTH
 THDRLN   EQU    HDRLEN+NBHDLN     TOTAL HEADER LENGTH
 R.FTYPE  EQU    0                 FUNCTION TYPE
 FC       EQU    203B              FUNCTION CODE IS BEING SENT
 BREAK    EQU    0                 BREAK FUNCTION 
 RST      EQU    1                 RESET FUNCTION 
  
* 
*         CONTROL MESSAGE HEADER IN PACKED FORMAT (8 PP WORDS)
* 
  
 R.MNAD   EQU    0                 REMOTE NAD (UPPER 8 BITS)
 R.MLTE   EQU    0                 LOCAL TRUNK ENABLES (LOWER 4 BITS) 
 R.DEST   EQU    1                 DESTINATION (UPPER 4 BITS) 
 R.MAC    EQU    1                 ACCESS CODE (16 BITS)
 R.NAME   EQU    2                 NAME (16 BITS) 
  
* 
*         RHF/NDR COMMUNICATION AREA OFFSETS
* 
  
 W.REQ1   EQU    0                 REQUEST WORD 1 (REQUEST) 
 W.REQ2   EQU    1                 REQUEST WORD 2 (REQUEST) 
 W.REQ3   EQU    2                 REQUEST WORD 3 (REPLY) 
 W.REQ4   EQU    3                 REQUEST WORD 4 (REPLY) 
 W.REQ5   EQU    4                 REQUEST WORD 5 (REPLY) 
 W.REQ6   EQU    5                 REQUEST WORD 6 (REPLY) 
 W.REQ7   EQU    6                 REQUEST WORD 7 (REPLY) 
 W.REQ8   EQU    7                 REQUEST WORD 8 (REPLY) 
 MAXEVNTS EQU    W.REQ8-W.REQ4+1   MAXIMUM STATUS EVENTS ALLOWED
  
* 
*         RHF CONTROL POINT OFFSETS 
* 
  
 P.APLADR EQU    71B               APPLICATION TABLE POINTER WORD 
  
* 
*         APPLICATION TABLE DEFINITIONS 
* 
  
 APLLEN   EQU    5                 LENGTH OF APPLICATION HEADER 
 W.JOBORD EQU    1                 JOB ORDINAL WORD 
 C.JOBORD EQU    4                 JOB ORDINAL BYTE 
 W.NUMCON EQU    2                 NUMBER OF CONNECTIONS WORD 
 C.NUMCON EQU    0                 NUMBER OF CONNECTIONS BYTE 
 W.MINACN EQU    2                 MINIMUN ACN
 C.MINACN EQU    1                 MINIMUN ACN
 CONLEN   EQU    3                 LENGTH OF CONNECTION ENTRY 
  
* 
*         RHF QUEUE ENTRY OFFSETS 
* 
  
 W.WD1    EQU    1                 WORD ONE OF QUEUE ENTRY
 C.REJCMG EQU    0                 REJECTED CONTROL MESSAGE FLAG BYTE 
 M.REJCMG EQU    4000B             REJECTED CONTROL MESSAGE MASK
 C.CACN   EQU    1                 ACN
 C.CBYTES EQU    2                 BYTE COUNT BEYOND HEADER 
 C.MSGADR EQU    3                 MESSAGE ADDRESS (18 BITS)
 W.WD2    EQU    2                 START WORD FOR CONTROL MESSAGE 
 W.CALLP  EQU    5                 WORD CONTAINING NETGET/NETPUT PARAM. 
  
**        FET I/O DEFINITIONS.
* 
*         MISCELLANEOUS DEFINITIONS.
* 
  
 NPRU     EQU    6*500B            BASIC NETWORK BLOCK SIZE IN PP BYTES 
 MAXRETRY EQU    4                 MAXIMUM FET I/O RETRYS 
 NOS      IF     DEF,NOS
 BUFR     EQU    10000B-NPRU-5     START PP BUFFER FOR READ 
 NOS      ELSE
 BUFR     EQU    10000B-NPRU       START OF PP BUFFER FOR READ
 NOS      ENDIF 
 BUFW     EQU    BUFR              START OF PP BUFFER FOR WRITE 
 HDR      EQU    BUFR-HDRLEN       START OF PACKED NETWORK BLOCK HEADER 
 OVLB     EQU    HDR-2             START OF OVERLAY AREA B
 BLKCNT   EQU    OVLB-5            BLOCK COUNTERS WORD
 C.READ   EQU    1                 NETWORK BLOCKS READ
 C.WRITE  EQU    3                 NETWORK BLOCKS WRITTEN 
 FETWD5   EQU    BLKCNT-5          FET WORD 5 
 C.DD     EQU    0                 FET DATA DECLARATION 
 C.UBC    EQU    1                 FET UNUSED BIT COUNT 
 C.FNABN  EQU    2                 FET NETWORK ABN
 C.FABN   EQU    3                 FET ABN
 LSTFETWD EQU    FETWD5            LAST WORD OF FET OVERLAYS
 RECSIZEK EQU    600B              RECORD SIZE
  
* 
*         UNIVERSAL COMMAND FUNCTION BLOCK DESCRIPTION (FOR FET I/O)
* 
  
* 
*         WARNING - THE UNIVERSAL COMMAND BUFFER THAT IS SENT TO THE
*                   NAD WILL ALWAYS BE 12 PP WORDS LONG.  TO SAVE 
*                   SPACE IN THE DRIVER SOME OF THE COMMAND BUFFERS 
*                   ARE LESS THAN 12 WORDS AND ONLY THE WORDS THAT
*                   ARE LOOKED AT BY THE NAD ARE PLUGGED.  THIS MEANS 
*                   THAT NAD INTERFACE CHANGES MAY REQUIRE PP CHANGES.
  
 UNVCB    EQU    OVLB              UNIVERSAL FUNCTION BLOCK 
 UNVCBS   EQU    12                UNIVERSAL FUNCTION BLOCK SIZE
 UC.SFC   EQU    0                 SUB-FUNCTION CODE
 UC.PATH  EQU    1                 PATH ID
 UC.CMSF  EQU    3                 CONVERT MODE SELECT FUNCTION 
 CMSFECM  EQU    5                 EXIT CONVERT MODE
 UC.CMCF  EQU    1                 CONVERT MODE CONTROL FUCNTION
 CCFDCM   EQU    0                 DISABLE CODE CONVERSION
 CCFECM   EQU    1                 ENABLE CODE CONVERSION 
 UC.PATHS EQU    3                 CONVERT MODE PATHS TO ALLOW
 UC.BUFFS EQU    5                 CONVERT MODE BUFFERS TO ALLOCATE 
  
* 
*         DD DEFINITIONS
* 
  
 DDDC     EQU    2                 DISPLAY CODE MODE
 DDAS     EQU    3                 ASCII 8/12 MODE
  
* 
*         FET OFFSETS 
* 
  
 C.COMP   EQU    4                 COMPLETE BIT 
 C.ERRCOD EQU    3                 ERROR CODE 
 FETEOI   EQU    1                 END OF INFORMATION 
 FETPERR  EQU    2                 FET PARAMETER ERROR
 FETNTPRU EQU    3                 NEXT INPUT BLOCK IS NOT A PRU BLOCK
 FETBABN  EQU    4                 ABN MISCOMPARE ON NEXT INPUT BLOCK 
 FETBLKSZ EQU    5                 LAST BLOCK EXCEEDED ALLOWED BLOCK SIZ
 FETCWER  EQU    6                 CONTROL WORD FORMAT ERROR
 FETNOBUF EQU    7                 NO OUTPUT BUFFER AVAILABLE 
 FETDHMIS EQU    10B               DATA LENGTH/HEADER LENGTH MISMATCH 
 FETPBWE  EQU    11B               PARTIAL BLOCK W/O EOR OR EOI 
 FETBNABN EQU    12B               BAD NETWORK ABN
 FETBNM60 EQU    13B               BLOCK NOT MULTIPLE OF 60 BITS
 FETBBLK  EQU    14B               UNDETERMINED BAD BLOCK 
 C.LVL    EQU    3                 RECORD LEVEL 
 C.PT     EQU    3                 FET POINTER ADDRESS
 C.FETLTH EQU    3                 FET LENGTH (-5)
  
**        READ/WRITE PATH DATA DEFINITIONS. 
* 
*         MISCELLANEOUS DEFINITIONS 
* 
  
 BUFPD    EQU    10000B-2044       START OF PP BUFFER FOR PATH DATA 
 HDRP     EQU    BUFPD-HDRLEN      START OF PACKED NETWORK BLOCK HEADER 
 CMGL     EQU    24B               CONTROL MESSAGE LENGTH 
 AMGL     EQU    20B               ACK MESSAGE LENGTH 
 ACKMSG   EQU    HDRP-AMGL         START OF ACKNOWLEDGE MESSAGE 
 LSTPTHWD EQU    ACKMSG            LAST WORD IN PATH DATA OVERLAYS
  
*         MISCELLANEOUS DEFINITIONS 
* 
  
 R.LID    EQU    26                BYTE OFFSET OF LID IN BUFF 
 C.LID    EQU    3                 BYTE OFFSET OF LID IN ID TABLE 
 CH       EQU    15B               DUMMY CHANNEL DEFINITION 
 LSTOVLB  SET    0                 MAX OVERLAY LENGTH COUNTER 
 DELRTY   EQU    30                NUMBER OF DELAY RETRIES
 DELTIM   EQU    1000              DELAY TIME = 1 MIL ON 2XPP 
 MSBEFRC  EQU    40                MIN SPACE/SIZE BEFORE RCL (PRUS) 
 DEBUG    EQU    0                 DO NOT ASSEMBLE BRK
* 
*         INSTRUCTION EQUATES 
* 
  
 .ADC.    EQU    2100B
 .LDN.    EQU    1400B             VALUE OF #LDN# INSTRUCTION 
 .SHN.    EQU    1000B             VALUE OF #SHN# INSTRUCTION 
          TITLE  MACRO DEFINITIONS
  
**        MACRO DEFINITIONS 
  
* 
*         LOAD FET ADDRESS
* 
  
 FETREL   MACRO  OFFSET 
          LDK    OFFSET            LOAD OFFSET
          RJM    LFT               ADD FET ADDRESS
          ENDM
  
  
          SPACE  4,10 
* 
*         DEFINE SCHEDULER MASKS
* 
  
          IF     -DEF,NOS,4 
 M.CPROP  BIT    S.CPROP-48 
 M.CPSIP  BIT    S.CPSIP-48 
 M.CPSOP  BIT    S.CPSOP-48 
 M.CPSWC  BIT    S.CPSWC-48 
  
* 
*         DEFINE EST MASKS
* 
  
 M.ESTRHF BIT    S.ESTRHF 
 M.ESTON  BIT    S.ESTON
NDR       TITLE  MAIN PROGRAM.
**        MAIN PROGRAM. 
* 
*         INITIALIZE NDR BY CALLING SUBROUTINE INT. 
*         IF ERROR THEN ABORT CP AND EXIT TO IDLE.
*         WAIT FOR NEXT FUNCTION BY CALLING SUBROUTINE NXT. 
*         IF ADDRESS ERROR THEN ISSUE MESSAGE,ABORT CP,EXIT TO IDLE.
*         IF CP ERROR FLAG SET THEN DROP PP AND EXIT TO IDLE. 
*         EXECUTE FUNCTION BY CALLING SUBROUTINE XEC. 
*         IF ERROR THEN ISSUE MESSAGE,ABORT CP, AND EXIT TO IDLE. 
*         COMPLETE THE FUNCTION BY CALLING SUBROUTINE CMP.
*         IF DROP FUNCTION THEN DROP PP AND EXIT TO IDLE. 
*         IF ADDRESS ERROR THEN ISSUE MESSAGE,ABORT CP,EXIT TO IDLE.
*         LOOP TO GET NEXT FUNCTION.
* 
*         ENTRY  PP CALL AS DEFINED BY EXTERNAL INTERFACE.
* 
*         EXIT   PP COMPLETE. 
* 
*         USES   D.T0 - D.T4, D.T7. 
* 
*         CALLS  INT, NXT, XEC, CMP, LDO, MSG, R.MTR, R.IDLE. 
  
  
          ORG    PPSTART
 NDR      EQU    *                 ENTRY
          RJM    /PRESET/INT       INITIALIZE NDR 
          NJN    NDR3              IF ERROR DURING INITIALIZATION 
 NDR1     RJM    NXT               WAIT FOR NEXT FUNCTION 
          MJN    NDR2              IF ADDRESS ERROR 
          NJN    NDR4              IF CP ERROR FLAG SET 
          RJM    XEC               EXECUTE FUNCTION 
          NJN    NDR2              IF ERROR 
          RJM    CMP               COMPLETE THE FUNCTION
          ZJN    NDR4              IF DROP FUNCTION 
          PJN    NDR1              IF NOT ADDRESS ERROR 
 NDR2     ADN    1
          STD    NDRERR            SAVE ERROR TYPE
          LDN    MSGID             DAYFILE ERROR MESSAGE
          RJM    LDX               LOAD AND EXECUTE OVERLAY 
 NDR3     LDK    M.ABORT           ABORT CP 
          UJN    NDR5 
  
 NDR4     LDK    M.DPP             DROP PP
 NDR5     RJM    R.MTR             CALL MONITOR 
          LJM    R.IDLE            EXIT TO IDLE 
NXT       TITLE  NXT - WAIT FOR NEXT FUNCTION.
**        NXT - WAIT FOR NEXT FUNCTION. 
* 
*         SET RECALL-CPU DELAY
*         RECALL CP.
*         READ REPLY WORD.
*         READ REQUEST AREA.
*         IF NEXT FUNCTION AVAILABLE THEN RETURN. 
*         RELEASE FIELD ACCESS. 
*         DELAY.
*         REQUEST FIELD ACCESS. 
*         IF CP ERROR FLAG SET THEN RETURN. 
*         IF RECALL-CPU DELAY NOT EXPIRED 
*           LOOP TO READ REPLY WORD 
*         ELSE
*           RESET RECALL-CPU DELAY
*           LOOP TO RECALL CP.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NEXT FUNCTION AVAILABLE.
*                         D.REQ1 CONTAINS NEXT REQUEST. 
*                    .GT. 0, CP ERROR FLAG SET. 
*                    .LT. 0, ADDRESS ERROR. 
* 
*         USES   D.T0 - D.T4, D.T5, COMMADR.
* 
*         CALLS  R.MTR, R.RAFL, R.TAFL. 
  
  
 NXT      ENM    X                 ENTRY/EXIT 
          LDN    1                 SET RECALL-CPU DELAY 
          STD    D.T5 
 NXTA     LDC    .LDN.+1           SET DELAY INCREASE 
*         LDC    .LDN.+2 OR +4     RESET FOR 2X OR 4X PP SPEED
          STM    NXTB 
 NXT1     LDK    M.RCLCP
          RJM    R.MTR             RECALL CP
 NXT1.2   LDD    COMMADR
          SHN    3
          ADN    W.REQ3 
          ADDRA  OK=NXT2
          LCN    1                 ADDRESS ERROR
 NXT1.5   UJN    NXTX 
  
 NXT2     CRD    D.T0              READ REPLY WORD
          SBN    W.REQ3 
          CRM    D.REQ1,TWO        READ REQUEST AREA
          LDD    D.REQ1+C.REQFLG
          SHN    17-S.RQCHG 
          MJN    NXT2.5            IF REQUEST AREA BEING CHANGED
          LDD    D.T0+C.FCOMP 
          ZJN    NXTX              IF NEXT FUNCTION AVAILABLE 
 NXT2.5   BSS    0
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          LDC    500
 NXT3     SBN    1                 DELAY
          PJN    NXT3              IF DELAY NOT DONE
 NOS      IF     DEF,NOS
          LDN    0
          RJM    R.MTR             PAUSE FOR RELOCATION 
          LDD    D.CPAD 
          ADK    W.STS
          CRD    D.T0              READ STATUS WORD 
          LDD    D.T0+C.CPEF
 NOS      ELSE
          RJM    R.RAFL            REQUEST FIELD ACCESS 
          LDD    D.T0+C.CPEF
 NOS      ENDIF 
          NJN    NXT1.5            IF CP ERROR FLAG SET 
          SOD    D.T5              DECREMENT RECALL-CPU DELAY 
          NJN    NXT1.2            IF NOT TIME TO RECALL CPU
 NXTB     LDN    **                FORM NEXT RECALL-CPU DELAY 
*         LDN    1 OR 2 OR 4       1X/2X/4X PP SPEED
          STD    D.T5              RESET RECALL-CPU DELAY 
 NXTC     LPN    7                 RESTRICT INCREASE
*         LPN    16B OR 34B        RESET FOR 2X OR 4X PP SPEED
          RAM    NXTB              ADJUST DELAY FOR NEXT PASS 
          LJM    NXT1              RECALL CPU 
  
XEC       TITLE  XEC - EXECUTE FUNCTION.
**        XEC - EXECUTE FUNCTION. 
* 
*         IF ILLEGAL FUNCTION THEN RETURN ERROR.
*         CALL LDX TO LOAD AND EXECUTE OVERLAY
*         IF ADDRESS ERROR THEN RETURN ERROR. 
*         RETURN. 
* 
*         ENTRY  (A) = 0. 
* 
*         EXIT   (A) = 0, NORMAL COMPLETION.
*                    .GT. 0, ILLEGAL FUNCTION.
*                    .LT. 0, ADDRESS ERROR. 
* 
*         USES   D.REQ1 - D.REQ3, COMADR, FUNCTION, TWO.
* 
*         CALLS  CNT, CRQ, DRP, DSC, FET, FLS, IDL, IND,
*                LDO, RPD, SND, STT, WPD. 
  
  
 XEC      ENM    X                 ENTRY/EXIT 
          STD    D.REQ3+C.RC       ZERO RETURN CODE 
          LDD    D.REQ1+C.FUNC
          LPN    77B
          STD    FUNCTION          SAVE FUNCTION
          ZJN    XEC3              IF ILLEGAL FUNCTION
          SBN    REQREPLY 
          ZJN    XEC3              IF ILLEGAL FUNCTION
          SBN    STARTNDR-REQREPLY
          MJN    XEC4              IF LEGAL FUNCTION
 XEC3     LDN    1                 ILLEGAL FUNCTION 
          UJN    XECX 
  
 XEC4     LDD    FUNCTION          FUNCTION TO BE EXECUTED
          RJM    LDX               LOAD AND EXECUTE OVERLAY 
  
*         UPON RETURN FROM ANY OVERLAY
*                (A) = 0, ADDRESS ERROR.
*                    = 1, NORMAL RETURN.
  
          SBN    1                 NORMAL RETURN
          UJN    XECX 
LDX       SPACE  4,10 
**        LDX - LOAD AND EXECUTE OVERLAY. 
* 
*         IF OVERLAY NOT PREVIOUSLY LOADED THEN LOAD OVERLAY. 
*         RETURN JUMP TO LOAD ADDRESS PLUS SIX. 
*         RETURN. 
* 
*         ENTRY  (A) = OVERLAY LOAD IDENTIFIER. 
* 
*         EXIT   RETURNS CONTROL TO CALLING ROUTINE.
* 
*         USES   D.T0 - D.T7. 
* 
*         CALLS  R.OVL. 
  
  
 LDX      ENM    X
          STD    D.T0              SAVE OVERLAY IDENTIFIER
          LDM    LDXB,D.T0
          STD    D.T7              SAVE LAST CHARACTER OF OVERLAY 
          LPN    7
          STD    D.T1              SAVE OVERLAY INDEX 
          LDM    LDXA 
          STD    D.T2              SAVE PREVIOUS ENTRY POINT
          LDM    LDXC,D.T1
          STD    D.T5              SAVE OVERLAY ADDRESS 
          ADN    6
          STM    LDXA              SAVE NEW ENTRY POINT ADDRESS 
          LDD    D.T2 
          SBM    LDXA 
          MJN    LDX1              IF OVERLAY OVERWRITTEN 
          LDD    D.T7 
          SHN    17-5 
          MJN    LDX1              IF NO PREVIOUS LOAD POSSIBLE 
          LDM    1,D.T5 
          LMD    D.T7 
          SCN    77B
          ZJN    LDX2              IF OVERLAY ALREADY LOADED
 NOS      IF     DEF,NOS
 LDX1     LDD    D.T7 
          SCN    77B
          ADC    1RN*10000B+1R2 
          ADD    D.T1              CHANGE TO 2N, 3N, OR 4N
          SHN    12                (A) = OVERLAY TO BE LOADED 
          RJM    R.OVL             LOAD AND EXECUTE OVERLAY 
          UJN    LDX3 
 NOS      ELSE
 LDX1     LDC    3RN 2
          ADD    D.T1              CHANGE TO 2N, 3N, OR 4N
          SHN    6
          STD    D.T6              SET UP FIRST TO CHARACTERS 
          LDD    D.T5              LOAD OVERLAY ADDRESS 
          RJM    R.OVL             LOAD OVERLAY 
 NOS      ENDIF 
  
 LDX2     RJM    *
 LDXA     EQU    *-1               ENTRY POINT ADDRESS
 LDX3     LJM    LDXX              RETURN 
  
 LDXB     BSS    0                 NAME, PREVIOUS FLAG, OVELAY INDEX
          LOC    0
          VFD    12/0              ILLEGAL FUNCTION 
          VFD    6/1RW,1/0,5/1     IDLE 
          VFD    6/1RW,1/0,5/1     STATUS 
          VFD    6/1RW,1/0,5/1     DROPOUT
          VFD    6/1RM,1/0,5/1     REQUEST CONNECTION 
          VFD    6/1RM,1/0,5/1     OBTAIN CONNECT REQUEST 
          VFD    12/0              CONNECT REQUEST REPLY (SEE CRQ)
          VFD    6/1RM,1/0,5/1     SEND CONTROL MESSAGE 
          VFD    6/1RR,1/0,5/0     READ PATH DATA 
          VFD    6/1RW,1/0,5/0     WRITE PATH DATA
          VFD    6/1RN,1/0,5/1     DISCONNECT PATH
          VFD    6/1RN,1/0,5/1     FLUSH PATH 
          VFD    6/1RN,1/0,5/1     INITIALIZE NAD 
          VFD    6/1RQ,1/0,5/0     FET I/O READ 
          VFD    6/1RS,1/0,5/0     FET I/O WRITE
          VFD    6/1RS,1/0,5/0     FET I/O WRITER 
          VFD    6/1RS,1/0,5/0     FET I/O WRITEF 
          VFD    6/1RS,1/0,5/0     FET I/O CLOSE
          VFD    6/1RX,1/0,5/0     FET I/O READC
          VFD    6/1RY,1/0,5/0     FET I/O WRITEC 
          VFD    6/1RW,1/0,5/1     SELECT CONVERT MODE
          VFD    6/1RW,1/0,5/1     EXIT CONVERT MODE
          VFD    6/1RT,1/0,5/0     READ CONVERT MODE
          VFD    6/1RU,1/0,5/0     WRITE CONVERT MODE 
          LOC    *O 
 MSGID    EQU    *-LDXB            MESSAGE OVERLAY ID 
          VFD    6/1RM,1/1,5/2
  
 LDXC     BSS    0                 OVERLAY ADDRESSES
          CON    OVLA 
          CON    OVLB 
          CON    OVLC 
CMP       TITLE  CMP - COMPLETE FUNCTION. 
**        CMP - COMPLETE FUNCTION.
* 
*         IF NETWORK ERROR ENCOUNTERED THEN CALL LOG. 
*         IF IDLE FUNCTION CHANGE THEN RETURN.
*         OBTAIN FIELD ACCESS.
*         WRITE FUNCTION REPLY WORD.
*         IF DROP FUNCTION THEN RETURN ZERO ELSE RETURN NONZERO.
* 
*         ENTRY  (D.REQ3+C.RC) = RETURN CODE. 
*                (ERROR) = 0, IF NO ERROR.
*                       .NE. 0, IF ERROR. 
*                (D.Z7) = IDLE FUNCTION CHANGE FLAG.
* 
*         EXIT   (A) = 0, DROP FUNCTION COMPLETE. 
*                    .GT. 0, NOT DROP FUNCTION. 
*                    .LT. 0, ADDRESS ERROR. 
* 
*         USES   D.Z7 - D.T7, D.REQ1, D.REQ3. 
* 
*         CALLS  LOG, R.RAFL. 
  
  
 CMP      ENM    X                 ENTRY/EXIT 
          LDD    ERROR
          ZJN    CMP1              IF NO ERROR ENCOUNTERED
          RJM    LOG               LOG ERROR
 CMP1     LDD    D.REQ1+C.FUNC
          LPN    77B
          STD    D.REQ3+C.FCOMP    SET FUNCTION COMPLETE
          SBN    IDLE 
          NJN    CMP2              IF NOT IDLE FUNCTION 
          LDD    D.Z7 
          NJN    CMPX              IF IDLE FUNCTION CHANGED 
 NOS      IF     DEF,NOS
 CMP2     BSS    0
 NOS      ELSE
 CMP2     RJM    R.RAFL            OBTAIN FIELD ACCESS
 NOS      ENDIF 
          LDD    COMMADR
          SHN    3
          ADN    W.REQ3 
          ADDRA  ER=CMP3
          CWD    D.REQ3            WRITE FUNCTION REPLY WORD
          LDD    D.REQ3+C.FCOMP 
          SBN    DROPOUT           CHECK DROPOUT FUNCTION 
          ZJN    CMPX              IF DROP FUNCTION 
          LDN    1                 NOT DROP FUNCTION
          UJN    CMPX 
  
 CMP3     LCN    1                 ADDRESS ERROR
          UJN    CMPX 
*CALL COMNADIO
LOG       SPACE  4,10 
**        LOG - LOG ERROR.
* 
*         SAVE D.T5-D.TW1 IN DCSAVE.
*         IF CONVERT MODE BLOCK ERROR 
*         THEN
*           CALL LBE TO LOG THE BLOCK ERROR.
*         CALL CER TO LOG CERFILE MESSAGE.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (ERROR) = 0, ERROR LOGGED. 
* 
*         USES   D.T5, DCSAVE, PPMES1.
* 
*         CALLS  CER, LDO.
  
  
 LOG      ENM    X                 ENTRY/EXIT 
          LDD    D.PPMES1 
          CWD    D.T5              MOVE D.T5-D.TW1 TO DCSAVE VIA PPMES1 
          CRM    DCSAVE,ONE 
          LDD    ERROR
          SHN    17-SBERR 
          PJN    LOG1              IF NOT CM BLOCK ERROR
 NOS      IF     DEF,NOS
          LDK    OVLC 
          STD    D.T5              (D.T5) = OVERLAY LOAD ADDRESS
          LDK    3R4NB             (A) = OVERLAY NAME 
          RJM    R.OVL             LOAD AND EXECUTE *4NB* 
 NOS      ELSE
          LDK    3RB4N
          STD    D.T6              (D.T6) = *4N*
          SHN    -12
          SHN    6
          STD    D.T7              (D.T7) = *D:*
          LDK    OVLC              (A) = OVERLAY LOAD ADDRESS 
          RJM    R.OVL             LOAD *4NB* 
          RJM    /4NB/LBE          LOG BLOCK ERROR
 NOS      ENDIF 
 LOG1     BSS    0
 NOS      IF     DEF,NOS
          LDK    OVLC 
          STD    D.T5              SAVE OVERLAY ADDRESS 
          LDK    3R4NC             (A) = OVERLAY NAME 
          RJM    R.OVL             LOAD AND EXECUTE OVERLAY 
 NOS      ELSE
          LDK    3RC4N
          STD    D.T6              SAVE UPPER TWO LETTERS OF OV. NAME 
          SHN    -12
          SHN    6
          STD    D.T7              SAVE LAST LETTER OF OV. NAME 
          LDK    OVLC              (A) = OVERLAY ADDRESS
          RJM    R.OVL             LOAD OVERLAY 
          RJM    /4NC/CER          CALL CER TO LOG MESSAGE
 NOS      ENDIF 
          UJK    LOGX 
*CALL COMCHNRES 
RHF       SPACE  4,10 
**        RHF - SWITCH TO RHF CP. 
* 
*         IF NETWORK ERROR ENCOUNTERED THEN CALL LOG. 
*         IF ALREADY AT RHF CP THEN RETURN. 
*         RELEASE UCP FIELD ACCESS. 
*         SWITCH TO RHF CP. 
*         OBTAIN RHF FIELD ACCESS.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   D.T0 - D.T4, D.CPAD, RHFCP.
* 
*         CALLS  R.MTR, R.RAFL, R.TAFL. 
  
  
 RHF      ENM    X                 ENTRY/EXIT 
          LDD    ERROR
          ZJN    RHF1              IF NO ERROR ENCOUNTERED
          RJM    LOG               LOG ERROR
 RHF1     LDN    0                 RHF CONTROL POINT
 RHFA     EQU    *-1               CONTROL POINT IS PLUGGED BY INIT 
          SHN    7
          LMD    D.CPAD 
          ZJN    RHF2              IF ALREADY AT RHF CP 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE UCP FIELD ACCESS 
          LDN    0                 RHF CONTROL POINT
 RHFB     EQU    *-1               CONTROL POINT IS PLUGGED BY INIT 
 NOS      IF     DEF,NOS
          STD    D.T1 
 NOS      ELSE
          STD    D.T4 
 NOS      ENDIF 
          SHN    7
          STD    D.CPAD            CHANGE TO RHF CP 
          LDN    M.CCPA 
          RJM    R.MTR
 NOS      IF     DEF,NOS
 RHF2     BSS    0
 NOS      ELSE
 RHF2     RJM    R.RAFL            OBTAIN FIELD ACCESS
 NOS      ENDIF 
          UJN    RHFX 
UCP       SPACE  4,10 
**        UCP - SWITCH TO UCP.
* 
*         RELEASE RHF FIELD ACCESS. 
*         VALIDATE JDT ORDINAL. 
*         SWITCH TO UCP CP. 
*         VALIDATE JOB IS AT CONTROL POINT AND IS NOT SWAPPING. 
*         IF ANY PROBLEMS THEN CALL RHF AND RETURN SWAPPED CODE.
*         OBTAIN UCP FIELD ACCESS.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, SUCCESSFUL SWITCH.
*                    = RC.FSWP, UNSUCCESSFUL SWITCH.
* 
*         USES   D.Z1 - D.T4, D.CPAD, D.REQ2. 
* 
*         CALLS  RHF, R.MTR, R.RAFL, R.TAFL.
  
  
 UCP      ENM    X                 ENTRY/EXIT 
 NOS      IF     DEF,NOS
          LDC    0                 FWA OF EJT SET BY INT
 UCPA     EQU    *-1
          DUP    L.EJTE,1 
          ADD    D.REQ2+C.RJDT     CALCULATE WORD WITHIN EJT
          ADK    E.SCH
          CRD    D.T0              READ SCHEDULER WORD OF EJT 
          LDD    D.T0+C.CPN 
          LPN    37B               MASK OUT CONTROL POINT NUMBER
          ZJN    UCP2              IF JOB NOT AT CONTROL POINT
          SBN    0                 MAXIMUM NUMBER OF CONTROL POINTS + 1 
 UCPB     EQU    *-1               SET BY INT 
          PJN    UCP2              IF JOB NOT AT CONTROL POINT
          ADN    0                 RESET TO CONTROL POINT NUMBER
 UCPC     EQU    *-1               SET BY INT 
          STD    D.T1 
          SHN    7
          LMD    D.CPAD 
          ZJN    UCP2              IF SWAPPING TO RHFS CONTROL POINT
          LMD    D.CPAD            RESET NEW CP ADDRESS 
          STD    D.CPAD            SAVE USER CONTROL POINT ADDRESS
          LDK    M.CCPA 
          RJM    R.MTR             CALL MONITOR TO CHANGE CP ASSIGNMENT 
          LDD    D.T1 
          NJN    UCP1              IF NO JOB AT CONTROL POINT 
          LDD    D.CPAD 
          ADK    W.FST
          CRD    D.T0              READ FST POINTERS
          LDD    D.T0+C.EJTO
          LMD    D.REQ2+C.RJDT
          ZJN    UCP3              IF SWAP WAS SUCCESSFUL 
          RJM    RHF               SWITCH BACK TO RHF 
          UJN    UCP2 
  
 UCP1     LDN    0                 RHF CONTROL POINT
 UCPD     EQU    *-1               CONTROL POINT NUMBER IS SET BY INT 
          SHN    7
          STD    D.CPAD            RESTORE RHF AS ASSIGNED CP 
          LDK    M.PRL
          RJM    R.MTR             PAUSE FOR RELOCATION (RA AND FL RESET
 UCP2     LDK    RC.FSWP           RETURN USER SWAPPED
 UCP3     LJM    UCPX 
 NOS      ELSE
          RJM    R.TAFL            RELEASE RHF FIELD ACCESS 
          LDN    P.NCP
          CRD    D.T0              READ NUMBER OF CPS 
          LDD    D.REQ2+C.RJDT
          ZJN    UCP2              IF ILLEGAL JDT ORDINAL 
          SBD    D.T0+C.NCP 
          SBN    1
          MJN    UCP3              IF CP NUMBER ALREADY 
          STD    D.Z1              INDEX TO ENTRY IN JDT
          LDN    P.SCH
          CRD    D.T0              READ JDT SIZES AND ADDRESS 
          LDN    0
          STD    D.Z2 
          LDD    D.T0+C.LEJDT 
          LPN    77B               CLEAR UPPER BITS OF LENGTH 
          STD    D.T0+C.LEJDT 
 UCP1     LDD    D.Z1              MULTIPLY INDEX BY JDT ENTY LENGTH
          RAD    D.Z2 
          SOD    D.T0+C.LEJDT 
          NJN    UCP1              IF NOT DONE MULTIPLYING
          LDD    D.Z2 
          SBD    D.T0+C.LJDT
          PJN    UCP2              IF INDEX NOT WITHIN JDT
          LDD    D.T0+C.JDT        T.JDT/10B
          SHN    3
          ADD    D.Z2              JDT ADDRESS
          ADK    W.JDDSD
          CRD    D.T0              READ WORD OF CP NUMBER 
          LDD    D.T0+C.JDCPN 
          SHN    -6 
          NJN    UCP4              IF VALID CP NUMBER 
 UCP2     RJM    RHF               MAKE SURE OF RHF CP
          LDK    RC.FSWP           RETURN USER SWAPPED
          UJN    UCP5 
  
 UCP3     LDD    D.REQ2+C.RJDT
 UCP4     STD    D.T4 
          SHN    7
          STD    D.CPAD            CHANGE TO NEW CP ADDRESS 
          LDN    M.CCPA 
          RJM    R.MTR             CHANGE TO UCP
          LDD    D.CPAD 
          ADK    W.CPSCH
          CRD    D.T0              READ CP SCHEDULER WORD 
          LDD    D.T0+C.CPFLG 
          LPK    M.CPROP+M.CPSIP+M.CPSOP+M.CPSWC
          NJN    UCP2              IF ANY SWAP IS OCCURRING 
          LDD    D.CPAD 
          ADK    W.CPJNAM 
          CRD    D.T0              READ JDT ORDINAL IN CP AREA
          LDD    D.T0+4 
          LMD    D.REQ2+C.RJDT
          NJN    UCP2              IF WRONG JDT 
          RJM    R.RAFL            OBTAIN UCP FIELD ACCESS
          LDN    0
 UCP5     LJM    UCPX 
 NOS      ENDIF 
*CALL COMTFL
*CALL COMCHNTBL 
*CALL COMBRK
          SPACE  4,10 
 OVLA     EQU    *                 OVERLAY A AREA 
          BSSZ   2                 NO OVERLAY LOADED AFTER START
          SPACE  4,10 
          USE    PRESET            TERMINATE BLOCKS 
          QUAL   PRESET 
INT       TITLE  INT - INITIALIZE NDR.
**        INT - INITIALIZE NDR. 
* 
*         INITIALIZE MISCELLANEOUS DIRECT CELLS.
*         INITIALIZE CHANNEL STATUS TABLE POINTER.
*         INITIALIZE IDLE LOOP INSTRUCTIONS FOR 2X/4XPP SPEED 
*         IF INVALID COMMUNICATION ADDRESS THEN DAYFILE MESSAGE 
*           AND RETURN ERROR. 
*         IF INVALID JOB ORIGIN THEN DAYFILE MESSAGE AND RETURN ERROR.
*         IF NOT START FUNCTION THEN DAYFILE MESSAGE AND RETURN ERROR.
*         COMPLETE INITIALIZATION FUNCTION BY CALLING CMP.
*         IF ADDRESS ERROR DAYFILE MESSAGE AND RETURN ERROR.
*         RETURN. 
* 
*         ENTRY  (D.PPIRB) = INPUT REGISTER CONTENTS
* 
*         EXIT   (A) = 0, NORMAL INITIALIZATION.
*                    .NE. 0, ABORT CP.
* 
*         USES   D.T0 - D.T4, D.CPAD, D.PPIRB, CHNRES, COMMADR, ERROR,
*                HSTATUS, NXTPNT, ONE, RECSIZE, RHFCP, STATUS, TRACE, 
*                TWO. 
* 
*         CALLS  R.DFM, R.MTR.
  
  
 INT      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          PPENTRY D.PPIRB,D.T0
          LDN    0
          STD    TRACE             ZERO TRACE IDENTIFIER
          STD    NXTPNT            ZERO NEXT FLAG FUNCTION POINTER
          STD    STATUS            ZERO CONTROLWARE STATUS
          STM    HSTATUS           ZERO HARDWARE STATUS 
          STD    ERROR             ZERO LAST ERROR
          STD    CHNRES            ZERO CHANNEL RESERVED
          LDN    1
          STD    ONE               CONSTANT ONE 
          LDN    2
          STD    TWO               CONSTANT TWO 
          LDC    RECSIZEK 
          STD    RECSIZE           CONSTANT 600 (OCTAL) 
          LDK    T.2XPP            CHECK PP SPEED 
          CRD    D.T0 
          LDD    D.T0+C.2XPP
          LPN    3
          ZJN    INT02             IF 1X PP SPEED 
          LMN    1
          ZJN    INT01             IF 2X PP SPEED 
          LDN    34B-16B
 INT01    ADN    16B-7             RESET IDLE LOOP INSTRUCTIONS 
          RAM    NXTC              = LPN 16B OR 34B 
          LPN    3
          LMN    3
          RAM    NXTA+1            = LDN  2  OR  4
 INT02    BSS    0
          IF     -DEF,NOS,4 
          LDN    P.CST
          CRD    D.T0              INTIALIZE CHANNEL STATUS TABLE 
          LDD    D.T0+C.CST        POINTER
          STM    RESA 
          LDD    D.CPAD 
          SHN    -7 
          STD    D.T0              PLUG RHF CONTROL POINT NUMBER
          RAM    RHFA 
          LDD    D.T0 
          RAM    RHFB 
 NOS      IF     DEF,NOS
          LDD    D.T0 
          RAM    UCPD 
          LDK    P.CHT
          CRD    D.T0              READ CHT POINTER WORD
          LDD    D.T0+C.CHT        SET FWA OF CHT FOR #RES# 
          LPN    77B
          RAM    RESA-1 
          LDD    D.T0+C.CHT+1 
          STM    RESA 
          LDK    P.EJT
          CRD    D.T0              READ EJT POINTER WORD
          LDD    D.T0+C.EJT        SET FWA OF EJT FOR #UCP# 
          LPN    77B
          RAM    UCPA-1 
          LDD    D.T0+C.EJT+1 
          STM    UCPA 
          LDK    T.NCP
          CRD    D.T0              READ NUMBER OF CONTROL POINTS
          LDD    D.T0+C.NCP        SET MAXIMUM NCP FOR #UCP#
          LPN    37B
          ADN    1                 MAXIMUM NUMBER OF CPS + 1
          RAM    UCPB 
          LDD    D.T0+C.NCP 
          LPN    37B
          ADN    1
          RAM    UCPC 
 NOS      ENDIF 
          LDD    D.PPIRB+4
          STD    COMMADR           RHF COMMUNICATION ADDRESS
          ZJN    INT1              IF ILLEGAL ADDRESS 
          SHN    3
          ADN    W.REQ8 
          ADDRA  OK=INT2
 NOS      IF     DEF,NOS
 INT1     LDC    INTA+CPON         DAYFILE ILLEGAL COMM ADDR
 NOS      ELSE
 INT1     LDC    INTA              DAYFILE ILLEGAL COMM ADDR
 NOS      ENDIF 
          UJN    INT3 
  
 INT2     SBN    W.REQ8 
          CRM    D.REQ1,TWO        REQUEST AREA 
          LDD    D.CPAD 
 NOS      IF     DEF,NOS
          ADK    W.JCI
          CRD    D.T0              READ JOB CONTROL IDENTIFIERS 
          LDD    D.T0+C.SSID
          LMK    RFSI 
          ZJN    INT4              IF CALLED BY RHF 
          LDC    INTB+CPON         DAYFILE ILLEGAL JOB ORIGIN 
 NOS      ELSE
          ADK    W.CPLDR1 
          CRD    D.T0              READ LOADER FLAGS
          LDD    D.T0+C.CPLP
          SHN    17-S.CPLP
          PJN    INT4              IF LOADED FROM SYSTEM LIBRARY
          LDC    INTB              INVALID JOB ORIGIN 
 NOS      ENDIF 
 INT3     RJM    R.DFM             DAYFILE MESSAGE
          LDN    1                 ABORT CP RETURN
          LJM    INTX 
  
 INT4     LDD    D.REQ1+C.FUNC
          LPK    77B
          SBN    STARTNDR 
          ZJN    INT5              IF START NDR FUNCTION
 NOS      IF     DEF,NOS
          LDC    INTC+CPON         DAYFILE ILLEGAL FUNCTION 
 NOS      ELSE
          LDC    INTC              DAYFILE ILLEGAL FUNCTION 
 NOS      ENDIF 
          UJN    INT3 
  
 INT5     RJM    CMP               COMPLETE THIS FUNCTION 
          PJN    INT6              IF NO ERROR
          LJM    INT1              ADDRESS ERROR
  
 INT6     LDN    0                 NORMAL RETURN
          LJM    INTX 
  
 INTA     DATA   C* NDR - ADDRESS ERROR.* 
 INTB     DATA   C* NDR - ILLEGAL CALLER.*
 INTC     DATA   C* NDR - ILLEGAL FUNCTION.*
  
          USE    OVERFLOW 
          QUAL   *
          TTL    NDR/2NQ - FET I/O READ.
          TITLE 
          QUAL   2NQ
          IDENT  2NQ,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - FET I/O READ.
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
 FREAD    EQU    1
*CALL COMFETIO
FRD       TITLE  FRD - FET READ.
**        FET - FET READ. 
* 
*         CALL RPR FOR READ PRESET. 
*         IF ERROR THEN RETURN. 
*         CALL CIB TO CHECK BUFFER POINTERS AND CALCULATE 
*           AVAILABLE SPACE.
*         IF ERROR THEN RETURN. 
*         IF NOT ENOUGH SPACE FOR FULL SIZE RECORD
*         THEN
*           RETURN FET COMPLETE CODE. 
*         CALL SEL TO SELECT PATH.
*         IF ERROR THEN RETURN. 
*         IF INPUT NOT AVAILABLE
*         THEN
*           SET INPUT CHANGE EVENT. 
*           IF RETRYS EXHAUSTED 
*           THEN
*             RETURN FET COMPLETE CODE. 
*           ELSE
*             SET NO INPUT AVAILABLE REISSUE. 
*             RETURN NO FET COMPLETE CODE.
*         IF BINARY DATA TYPE 
*         THEN
*           CALL IBR TO INPUT BINARY RECORD.
*         ELSE
*           CALL ICR TO INPUT CHARACTER RECORD. 
*         IF ERROR THEN RETURN. 
*         IF NO DATA INPUT THEN LOOP TO INPUT NOT AVAILABLE.
*         OBTAIN UCP FIELD ACCESS.
*         IF INPUT RESET THEN LOOP TO RPR CALL. 
*         CALL WBD TO WRITE BINARY DATA.
*         IF ERROR THEN RETURN. 
*         IF RECORD NOT COMPLETE THEN LOOP TO CALL ICR. 
*         CLEAR OUT REMAINING WORD COUNT. 
*         INCREMENT BLOCKS READ COUNTER.
*         INCREMENT ABN.
*         UPDATE IN AND ABN WITHIN UCP FET. 
*         IF ERROR THEN RETURN. 
*         IF MORE THAN ONE HALF OF BUFFER FULL
*         THEN
*           RECALL UCP. 
*         IF EOI READ 
*         THEN
*           RETURN EOI FET COMPLETE CODE. 
*         LOOP TO CIB CALL. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NO FET COMPLETE CODE. 
*                    .GT. 0, EXPLICIT FET COMPLETE CODE.
*                    .LT. 0, COMPLETE FET WITH NO ERROR.
* 
*         USES   D.REQ2 - D.REQ3, BUFSIZE, DD, DBC, EVENT, FUNCTION,
*                LIMIT, STATUS, WDSUSED.
* 
*         CALLS  ACK, CIB, IBR, ICR, RPR, R.MTR, R.RAFL, SEL, UPI,
*                WBD, CSP.
  
  
 FRD      ENM    X                 ENTRY/EXIT 
 FRD01    RJM    RPR               READ PRESET
          NJN    FRDX              IF ERROR 
 FRD01.5  LDK    DELRTY 
          STM    DELA              RESET RETRY COUNT
 FRD02    RJM    CIB               CHECK BUFFER POINTERS
          PJN    FRD03             IF NO ERROR
          LDN    FETPERR           FET PARAMETER ERROR
          UJN    FRDX 
  
 FRD03    SBD    BUFSIZE           SUBTRACT REQUIRED BUFFER SIZE
          PJN    FRD03.4           IF ENOUGH SPACE AVAILABLE
          RJM    DEL               DELAY FOR A WHILE
          MJN    FRDX              IF RETRIES EXHAUSTED 
          UJN    FRD02
  
 FRD03.4  LDK    DELRTY 
          STM    DELA              RESET RETRY COUNT
 FRD03.6  BSS    0
          RJM    SEL               SELECT PATH
          MJN    FRD05             IF ERROR 
          LDD    STATUS 
          SHN    17-S.CSTIA 
          MJN    FRD06             IF INPUT AVAILABLE 
 FRD03.7  RJM    DEL               DELAY FOR A WHILE
          PJN    FRD03.6           IF RETRIES NOT EXHAUSTED 
 FRD04    LDN    EVTIN
          STD    EVENT             SET CHANGE IN PNPUT AVAILABLE
          LDK    MAXRETRY 
          SBD    D.REQ2+C.RETRY 
          MJN    FRD05             IF RETRIES EXHAUSTED 
          LDK    RC.FNOIA          NO INPUT AVAILABLE REISSUE 
          STD    D.REQ3+C.RC
          LDN    0                 NO FET COMPLETE CODE 
 FRD05    LJM    FRDX 
  
 FRD06    LDD    DD 
          SBN    DDAS 
          ZJN    FRD07             IF ASCII DATA
          RJM    IBR               INPUT BINARY RECORD
          UJN    FRD08
  
 FRD07    RJM    ICR               INPUT CHARACTER RECORD 
 FRD08    NJN    FRD05             IF ERROR 
          LDD    DBC
          ZJN    FRD03.7           IF NO DATA INPUT 
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDD    RESET
          ZJN    FRD09             IF NO RESET REQUIRED 
          LJM    FRD01
  
 FRD09    RJM    WBD               WRITE BINARY DATA
          MJN    FRD13             IF ADDRESS ERROR 
          NJN    FRD07             IF RECORD NOT COMPLETE 
          STD    REMWORDS          INDICATE NO REMAINING WORDS
          AOM    BLKCNT+C.READ+1   INCREMENT BLOCKS READ COUNTER
          SHN    -12
          RAM    BLKCNT+C.READ
          AOM    FETWD5+C.FABN+1
          SHN    -12               ADVANCE ABN
          RAM    FETWD5+C.FABN
          RJM    UPI               UPDATE IN AND ABN WITHIN UCP FET 
          NJN    FRD12             IF ERROR 
          RJM    CSP               CHECK SPACE AVAILABLE
          SHN    -6                CONVERT WORDS TO PRUS
          SBK    MSBEFRC           SUBTRACT MINIMUM BUFFER SPACE
          PJN    FRD10             IF NO RECALL REQUIRED
          LDK    M.RCLCP
          RJM    R.MTR             RECALL UCP 
 FRD10    LDD    DBC
          SHN    17-S.EOI 
          PJN    FRD14             IF NOT EOI 
  
 FRD11    LDK    FETEOI            FET EOI CODE 
 FRD12    LJM    FRDX 
  
 FRD13    LDN    FETPERR           ADDRESS ERROR
          UJN    FRD12
  
 FRD14    SHN    17-S.EOR-17+S.EOI
          MJN    FRD12             IF EOR 
          LJM    FRD01.5           PROCESS NEXT BLOCK 
RPR       SPACE  4,10 
**        RPR - READ PRESET.
* 
*         VALIDATE DD.
*         DETERMINE MINIMUM BUFFER SIZE.
*         READ AND VALIDATE FIRST AND LIMIT.
*         VALIDATE BUFFER LARGE ENOUGH FOR FULL SIZE RECORD.
*         READ AND CALIDATE IN POINTER
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .GT. 0, ERROR CODE RETURN. 
* 
*         USES   D.T0 - D.T4, BUFSIZE, DD, FIRST, FUNCTION, INPNT,
*                LIMIT, RECSIZE.
* 
*         CALLS  NONE.
  
  
 RPR      ENM    X                 ENTRY/EXIT 
          LDD    RECSIZE
          STD    BUFSIZE           ASSUME STANDARD BUFFER SIZE
          LDM    FETWD5+C.DD
          STD    DD                SET DATA DECLARATION 
          SBK    DDDC 
          MJN    RPR1              IF BINARY DATA 
          SBK    DDAS-DDDC
          NJN    RPR2              IF NOT ASCII DATA
          LDD    BUFSIZE
          RAD    BUFSIZE           DOUBLE BUFFER SIZE 
 RPR1     BSS    0
          FETREL 4
          ZJN    RPR2              IF ADDRESS ERROR 
          CRD    D.T0              READ LIMIT 
          LDD    D.T0+C.PT
          LPN    77B
          STD    LIMIT             SAVE LIMIT 
          SHN    12 
          LMD    D.T0+C.PT+1
          STD    LIMIT+1
          NJN    RPR3              IF GOOD LIMIT
 RPR2     LDN    FETPERR           FET PARAMETER ERROR
          LJM    RPRX 
  
 RPR3     ADDRA  ER=RPR2
          FETREL 1
          ZJN    RPR2              IF ADDRESS ERROR 
          CRD    D.T0              READ FIRST 
          LDD    D.T0+C.PT
          LPN    77B
          STD    FIRST             SAVE FIRST 
          LDD    D.T0+C.PT+1
          STD    FIRST+1
          LDD    LIMIT             CALCULATE LIMIT - FIRST -1 
          SBD    FIRST
          SHN    12 
          ADD    LIMIT+1
          SBD    FIRST+1
          SBN    1
          MJN    RPR2              IF FIRST NOT .LT. LIMIT
          SBD    BUFSIZE
          MJN    RPR2              IF BUFFER NOT LARGE ENOUGH 
          FETREL 2
          ZJN    RPR4              IF ADDRESS ERROR 
          CRD    D.T0              READ IN
          LDD    D.T0+C.PT+1
          STD    INPNT+1
          LDD    D.T0+C.PT
          LPN    77B
          STD    INPNT             SAVE IN
          SBD    LIMIT             CALCULATE IN - LIMIT 
          SHN    12 
          ADD    INPNT+1
          SBD    LIMIT+1
          PJN    RPR4              IF IN IS PAST LIMIT
          LDD    INPNT
          SBD    FIRST             CALCUALTE IN - FIRST 
          SHN    12 
          ADD    INPNT+1
          SBD    FIRST+1
          MJN    RPR4              IF IN LESS THAN FIRST
          LDN    0
          STD    RESET             ZERO INPUT RESET FLAG
          STD    REMWORDS          ZERO REMAINING WORDS 
          LJM    RPRX              NORMAL RETURN
  
 RPR4     LJM    RPR2 
WBD       SPACE  4,10 
**        WBD - WRITE BINARY DATA.
* 
*         POINT TO START OF PP BUFFER.
*         IF REMWORDS LARGER THAN ONE PP BUFFER 
*         THEN
*           CALL WBB TO WRITE ONE BUFFER. 
*           SUBTRACT BUFFER SIZE FROM REMWORDS. 
*           RETURN MORE DATA TO INPUT.
*         ELSE
*           CALL WBB TO WRITE REMWORDS. 
*           SAVE UBC IN FET WORD 5. 
*           RETURN NO MORE TO INPUT.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NO MORE NAD DATA TO INPUT.
*                    .GT. 0, MORE NAD DATA TO INPUT.
*                    .LT. 0, ADDRESS ERROR. 
* 
*         USES   D.T0, RECSIZE, REMWORDS, UBC, WDSUSED. 
* 
*         CALLS  WBB. 
  
  
 WBD      ENM    X                 ENTRY/EXIT 
          LDC    BUFR 
          STD    D.T0              POINT TO START OF PP BUFFER
          LDD    RECSIZE
          SBD    REMWORDS 
          PJN    WBD1              IF ONLY ONE BUFFER 
          LDD    RECSIZE
          RJM    WBB               WRITE BUFFER 
          ZJN    WBD2              IF ADDRESS ERROR 
          LDC    -RECSIZEK
          RAD    REMWORDS          CALCULATE REMAINING WORDS
          UJN    WBDX 
  
 WBD1     LDD    REMWORDS 
          RJM    WBB               WRITE REMAINING WORDS
          ZJN    WBD2              IF ADDRESS ERROR 
          LDD    UBC
          STM    FETWD5+C.UBC      SAVE UBC 
          LDN    0                 SET NO MORE DATA 
          UJN    WBDX 
  
 WBD2     LCN    0                 ADDRESS ERROR RETURN 
          UJN    WBDX 
RCP       SPACE  4,10 
**        RCP - READ COMPLETE.
* 
*         INSERT LEVEL NUMBER.
*         INSERT END OF RECORD OR END OF PARTITION. 
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   D.T0 - D.T4, DBC.
* 
*         CALLS  NONE.
  
  
 RCP      ENM    X                 ENTRY/EXIT 
          LDD    D.T0+C.COMP
          SCN    30B               CLEAR LEVEL BITS 
          STD    D.T0+C.COMP
          LDD    DBC
          SHN    17-S.EOI 
          PJN    RCP2              IF NOT EOI 
          LDN    74B
          RAD    D.T0+C.LVL        SET LEVEL 17 
 RCP1     LDN    30B
          RAD    D.T0+C.COMP       SET END OF PARTITION 
          UJN    RCPX 
  
 RCP2     SHN    S.EOI-S.EOR
          PJN    RCPX              IF NOT EOR 
          LDD    DBC
          LPN    M.LVL
          SHN    2
          RAD    D.T0+C.LVL        INSERT LEVEL 
          LDD    DBC
          LPN    M.LVL
          LMN    17B
          ZJN    RCP1              IF END OF PARTITION
          LDN    20B
          RAD    D.T0+C.COMP       SET END OF RECORD
          UJN    RCPX 
*CALL COM2NQ
*CALL COMSEL
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTFETWD-* 
          TTL    NDR/2NX - FET I/O READC. 
          TITLE 
          QUAL   2NX
          IDENT  2NX,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - FET I/O READC. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
 FREADC   EQU    1
*CALL COMFETIO
FRC       TITLE  FRC - FET READC. 
**        FET - FET READC.
* 
*         CALL RPR FOR READ PRESET. 
*         IF ERROR THEN RETURN. 
*         CALL CIB TO CHECK BUFFER POINTERS AND CALCULATE 
*           AVAILABLE SPACE.
*         IF ERROR THEN RETURN. 
*         IF NOT ENOUGH SPACE FOR FULL SIZE RECORD
*         THEN
*           RETURN FET COMPLETE CODE. 
*         CALL SEL TO SELECT PATH.
*         IF ERROR THEN RETURN. 
*         IF INPUT NOT AVAILABLE
*         THEN
*           SET INPUT CHANGE EVENT. 
*           IF RETRYS EXHAUSTED 
*           THEN
*             RETURN FET COMPLETE CODE. 
*           ELSE
*             SET NO INPUT AVAILABLE REISSUE. 
*             RETURN NO FET COMPLETE CODE.
*         IF BINARY DATA TYPE 
*         THEN
*           CALL IBR TO INPUT BINARY RECORD.
*         ELSE
*           CALL ICR TO INPUT CHARACTER RECORD. 
*         IF ERROR THEN RETURN. 
*         IF NO DATA INPUT THEN LOOP TO INPUT NOT AVAILABLE.
*         OBTAIN UCP FIELD ACCESS.
*         IF INPUT RESET THEN LOOP TO RPR CALL. 
*         CALL WCW TO WRITE CONTROL WORD FORMATTED DATA.
*         IF ERROR THEN RETURN. 
*         IF RECORD NOT COMPLETE THEN LOOP TO CALL ICR. 
*         INCREMENT BLOCKS READ COUNTER.
*         INCREMENT ABN.
*         UPDATE IN AND ABN WITHIN UCP FET. 
*         IF ERROR THEN RETURN. 
*         IF MORE THAN ONE HALF OF BUFFER FULL
*         THEN
*           RECALL UCP. 
*         IF EOI READ 
*         THEN
*           RETURN EOI FET COMPLETE CODE. 
*         LOOP TO CIB CALL. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NO FET COMPLETE CODE. 
*                    .GT. 0, EXPLICIT FET COMPLETE CODE.
*                    .LT. 0, COMPLETE FET WITH NO ERROR.
* 
*         USES   D.REQ2 - D.REQ3, BUFSIZE, DD, DBC, EVENT, FUNCTION,
*                LIMIT, STATUS, WDSUSED.
* 
*         CALLS  ACK, CIB, IBR, ICR, RPR, R.MTR, R.RAFL, SEL, UPI,
*                WCW, CSP.
  
  
 FRC      ENM    X                 ENTRY/EXIT 
 FRC01    RJM    RPR               READ PRESET
          NJN    FRCX              IF ERROR 
 FRC01.5  LDK    DELRTY 
          STM    DELA              RESET RETRY COUNTER
 FRC02    RJM    CIB               CHECK BUFFER POINTERS
          PJN    FRC03             IF NO ERROR
          LDN    FETPERR           FET PARAMETER ERROR
 FRC02.5  UJN    FRCX 
  
 FRC03    SBD    BUFSIZE           SUBTRACT REQUIRED BUFFER SIZE
          PJN    FRC03.4           IF ENOUGH SPACE AVAILABLE
          RJM    DEL               DELAY FOR A WHILE
          MJN    FRCX              IF RETRIES EXHAUSTED 
          UJN    FRC02
  
 FRC03.4  LDK    DELRTY 
          STM    DELA              RESET RETRY COUNTER
 FRC03.6  BSS    0
          RJM    SEL               SELECT PATH
          MJN    FRCX              IF ERROR 
          LDD    STATUS 
          SHN    17-S.CSTIA 
          MJN    FRC06             IF INPUT AVAILABLE 
 FRC03.7  RJM    DEL               DELAY FOR A WHILE
          PJN    FRC03.6           IF RETRIES NOT EXHAUSTED 
 FRC04    LDN    EVTIN
          STD    EVENT             SET CHANGE IN INPUT AVAILABLE
          LDK    MAXRETRY 
          SBD    D.REQ2+C.RETRY 
          MJN    FRC02.5           IF RETRIES EXHAUSTED 
          LDK    RC.FNOIA          NO INPUT AVAILABLE REISSUE 
          STD    D.REQ3+C.RC
          LDN    0                 NO FET COMPLETE CODE 
 FRC05    UJN    FRC02.5
  
 FRC06    LDD    DD 
          SBN    DDAS 
          ZJN    FRC07             IF ASCII DATA
          RJM    IBR               INPUT BINARY RECORD
          UJN    FRC08
  
 FRC07    RJM    ICR               INPUT CHARACTER RECORD 
 FRC08    NJN    FRC05             IF ERROR 
          LDD    DBC
          ZJN    FRC03.7           IF NO DATA INPUT 
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDD    RESET
          ZJN    FRC09             IF NO RESET REQUIRED 
          LJM    FRC01
  
 FRC09    RJM    WCW               WRITE CONTROL WORD FORMATTED DATA
          MJN    FRC13             IF ADDRESS ERROR 
          NJN    FRC07             IF RECORD NOT COMPLETE 
          AOM    BLKCNT+C.READ+1   INCREMENT BLOCKS READ COUNTER
          SHN    -12
          RAM    BLKCNT+C.READ
          AOM    FETWD5+C.FABN+1
          SHN    -12               ADVANCE ABN
          RAM    FETWD5+C.FABN
          RJM    UPI               UPDATE IN AND ABN WITHIN UCP FET 
          NJN    FRC12             IF ADDRESS ERROR 
          RJM    CSP               CHECK SPACE AVAILABLE
          SHN    -6 
          SBK    MSBEFRC           SUBTRACT MINIMUM SPACE AVAIL.
          PJN    FRC10             IF NO RECALL REQUIRED
          LDK    M.RCLCP
          RJM    R.MTR             RECALL UCP 
 FRC10    LDD    DBC
          SHN    17-S.EOI 
          MJN    FRC11             IF EOI INPUT 
          LJM    FRC01.5           LOOP FOR NEXT BLOCK
  
 FRC11    LDK    FETEOI            FET EOI CODE 
 FRC12    LJM    FRCX 
  
 FRC13    LDN    FETPERR           ADDRESS ERROR
          UJN    FRC12
RPR       SPACE  4,10 
**        RPR - READ PRESET.
* 
*         VALIDATE DD.
*         DETERMINE MINIMUM BUFFER SIZE.
*         READ AND VALIDATE FIRST AND LIMIT.
*         VALIDATE BUFFER LARGE ENOUGH FOR FULL SIZE RECORD.
*         READ AND VALIDATE IN POINTER. 
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .GT. 0, ERROR CODE RETURN. 
* 
*         USES   D.T0 - D.T4, BUFSIZE, DD, FIRST, FUNCTION, INPNT,
*                LIMIT, RECSIZE.
* 
*         CALLS  NONE.
  
  
 RPR      ENM    X                 ENTRY/EXIT 
          LDD    RECSIZE           ASSUME STANDARD BUFFER SIZE
 NOS      IF     DEF,NOS
          ADN    6+6               PLUS CONTROL WORDS AND LEVEL WORDS 
 NOS      ELSE
          ADN    6                 PLUS CONTROL WORDS 
 NOS      ENDIF 
          STD    BUFSIZE
          LDM    FETWD5+C.DD
          STD    DD                SET DATA DECLARATION 
          SBK    DDDC 
          MJN    RPR2              IF BINARY DATA 
          SBK    DDAS-DDDC
          NJN    RPR3              IF NOT ASCII DATA
          LDD    BUFSIZE
          RAD    BUFSIZE           DOUBLE BUFFER SIZE 
 RPR2     BSS    0
 NOS      IF     DEF,NOS
          LDK    2                 ALLOW FOR FULL BLOCK WITH EOR SET
 NOS      ELSE
          LDK    101B              ALLOW FOR FULL BLOCK WITH EOR SET
 NOS      ENDIF 
          RAD    BUFSIZE
          FETREL 4
          ZJN    RPR3              IF ADDRESS ERROR 
          CRD    D.T0              READ LIMIT 
          LDD    D.T0+C.PT
          LPN    77B
          STD    LIMIT             SAVE LIMIT 
          SHN    12 
          LMD    D.T0+C.PT+1
          STD    LIMIT+1
          NJN    RPR4              IF GOOD LIMIT
 RPR3     LDN    FETPERR           FET PARAMETER ERROR
          LJM    RPRX 
  
 RPR4     ADDRA  ER=RPR3
          FETREL 1
          ZJN    RPR3              IF ADDRESS ERROR 
          CRD    D.T0              READ FIRST 
          LDD    D.T0+C.PT
          LPN    77B
          STD    FIRST             SAVE FIRST 
          LDD    D.T0+C.PT+1
          STD    FIRST+1
          LDD    LIMIT             CALCULATE LIMIT - FIRST -1 
          SBD    FIRST
          SHN    12 
          ADD    LIMIT+1
          SBD    FIRST+1
          SBN    1
          MJN    RPR3              IF FIRST NOT .LT. LIMIT
          SBD    BUFSIZE
          MJN    RPR3              IF BUFFER NOT LARGE ENOUGH 
          FETREL 2
          ZJN    RPR5              IF ADDRESS ERROR 
          CRD    D.T0              READ IN
          LDD    D.T0+C.PT+1
          STD    INPNT+1
          LDD    D.T0+C.PT
          LPN    77B
          STD    INPNT             SAVE IN
          SBD    LIMIT             CALCULATE IN - LIMIT 
          SHN    12 
          ADD    INPNT+1
          SBD    LIMIT+1
          PJN    RPR5              IF IN IS PAST LIMIT
          LDD    INPNT
          SBD    FIRST             CALCUALTE IN - FIRST 
          SHN    12 
          ADD    INPNT+1
          SBD    FIRST+1
          MJN    RPR5              IF IN LESS THAN FIRST
          LDN    0
          STD    RESET             ZERO INPUT RESET FLAG
          STD    REMWORDS          ZERO REMAINING WORDS 
          LJM    RPRX              NORMAL RETURN
  
 RPR5     LJM    RPR3 
WCW       SPACE  4,10 
**        WCW - WRITE CONTROL WORD FORMATTED DATA.
* 
*         POINT TO START OF PP BUFFER.
*         IF ZERO WORDS AND NOT EOR THEN RETURN.
*         BUILD CONTROL WORD. 
*         IF NOT FULL PRU THEN INSERT LEVEL.
*         CALL WBB TO WRITE PRU TO CM.
*         ADVANCE PP BUFFER ADDRESS.
*         DECREMENT BYTES REMAINING IN PP BUFFER. 
*         IF BYTES REMAINING IN PP BUFFER THEN LOOP TO BUILD CONTROL WD.
*         DECREMENT WORDS REMAINING IN NAD BLOCK. 
*         IF WORDS REMAINING IN NAD BLOCK THEN RETURN.
*         IF LAST PRU FULL AND EOR REQUIRED 
*         THEN
*           LOOP TO BUILD CONTROL WORD. 
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NO MORE NAD DATA TO INPUT.
*                    .GT. 0, MORE NAD DATA TO INPUT.
*                    .LT. 0, ADDRESS ERROR. 
* 
*         USES   D.T0 - D.T1, BUFBYTES, DBC, REMWORDS, UBC, WDSUSED.
  
*         CALLS  WBB. 
  
  
 WCW      ENM    X                 ENTRY/EXIT 
          LDC    BUFR-5 
          STD    D.T0              INITIALIZE PP BUFFER ADDRESS 
          IF     DEF,NOS,2
          LDK    P.ZERO 
          CRD    D.Z1              USED FOR NOS LEVEL NUMBERS 
          LDD    DBC
          SHN    17-S.EOR 
          MJN    WCW1              IF EOR 
          LDD    REMWORDS 
          ZJN    WCWX              IF NO DATA TO WRITE
 WCW1     LDN    0
          STI    D.T0              BUILD CONTROL WORD 
          STM    2,D.T0 
          STM    3,D.T0 
          LDC    100B 
          STM    1,D.T0            PRU SIZE 
          LDC    500B 
          STM    4,D.T0            DEFAULT BYTE COUNT 
          LDK    RECSIZEK 
          SBD    REMWORDS 
 NOS      IF     DEF,NOS
          MJN    WCW1.5            IF FULL PRU LEFT 
 NOS      ELSE
          MJN    WCW3              IF FULL PRU LEFT 
 NOS      ENDIF 
          LDD    BUFBYTES 
          ADC    -501B
 NOS      IF     DEF,NOS
          MJN    WCW2              IF NOT FULL PRU
 WCW1.5   LDC    101B              WRITE FULL PRU 
          UJN    WCW3 
  
 WCW2     LDD    UBC
          STM    2,D.T0            UNUSED BIT COUNT 
          LDD    DBC
          LPN    M.LVL
          STD    D.Z1              INSERT LEVEL NUMBER
          LDD    BUFBYTES 
          STM    4,D.T0            BYTE COUNT 
          ADN    5+4               ADD HEADER LENGTH AND ROUND UP 
          STD    D.Z6              DIVIDE BY FIVE 
          SHN    1                 2*VALUE
          ADD    D.Z6              3*VALUE
          SHN    2                 12*VALUE 
          ADD    D.Z6              13*VALUE 
          SHN    12                (13*VALUE)/64
          STD    D.Z7 
          SHN    8                 4*13*VALUE 
          SBD    D.Z6              51*VALUE 
          ADD    D.Z7              51*VALUE+(13*VALUE)/64 
          SHN    -8                (51*VALUE+(13*VALUE)/64)/256 
 WCW3     RJM    WBB               WRITE BINARY BUFFER
          ZJN    WCW5              IF ADDRESS ERROR 
          LDD    D.T0 
          STD    D.Z7              SAVE BUFFER POINTER
          LDN    D.Z1 
          STD    D.T0              POINT TO LEVEL NUMBER
          LDN    1
          RJM    WBB               WRITE LEVEL NUMBER 
          ZJN    WCW5              IF ADDRESS ERROR 
          LDD    D.Z7 
          STD    D.T0              RESTORE BUFFER POINTER 
 NOS      ELSE
          PJN    WCW3              IF FULL PRU LEFT 
          LDD    UBC
          STM    2,D.T0            UNUSED BIT COUNT 
          LDD    BUFBYTES 
          STM    4,D.T0            BYTE COUNT 
          ADD    D.T0 
          ADN    5
          STD    D.T1              POINT BEYOND LAST GOOD BYTE
          LDD    DBC
          LPN    M.LVL
          STI    D.T1              INSERT LEVEL NUMBER
 WCW3     LDC    101B 
          RJM    WBB               WRITE PRU TO CM
          ZJN    WCW5              IF ADDRESS ERROR 
 NOS      ENDIF 
          LDC    500B 
          RAD    D.T0              ADVANCE PP BUFFER ADDRESS
          LDC    -500B
          RAD    BUFBYTES          DECREMENT REMAINING BYTE COUNT 
          SBN    1
          MJN    WCW6              IF NO BYTES REMAINING
 WCW4     LJM    WCW1 
  
 WCW5     LCN    0                 ADDRESS ERROR
          UJN    WCW8 
  
 WCW6     LDC    -RECSIZEK
          RAD    REMWORDS          DECREMENT REMAINING NAD WORDS
          SBN    1
          PJN    WCW7              IF NAD WORDS REMAINING 
          LDN    0
          STD    REMWORDS          INDICATE ZERO WORDS REMAINING
          LDD    DBC
          SHN    17-S.EOR 
          PJN    WCW9              IF NO EOR
          LDD    BUFBYTES 
          NJN    WCW9              IF LAST PRU NOT FULL 
          LDC    -500B
          RAD    D.T0              BACK UP PP BUFFER ADDRESS
          LDN    0
          STD    UBC               ZERO UNUSED BIT COUNT
          UJN    WCW4              WRITE EOR TO CM
  
 WCW7     LDN    1                 INDICATE MORE TO READ
 WCW8     LJM    WCWX 
  
 WCW9     LDN    0                 NO MORE DATA TO READ 
          UJN    WCW8 
*CALL COM2NQ
*CALL COMSEL
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTFETWD-* 
          TTL    NDR/2NS - FET I/O WRITE. 
          TITLE 
          QUAL   2NS
          IDENT  2NS,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - FET I/O WRITE. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
 FWRITE   EQU    1
*CALL COMFETIO
FCL       TITLE  FCL - FET I/O CLOSE. 
**        FCL - FET I/O CLOSE.
* 
*         IF NOT CLOSE THEN CALL FWC. 
*         SET DBC TO EOI AND PRU. 
*         SET BUFBYTES TO ZERO. 
*         CALL OBD TO OUTPUT BINARY DATA. 
*         IF ERROR THEN RETURN. 
*         INCREMENT BLOCKS WRITTEN. 
*         RETURN FET I/O COMPLETE.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NO FET COMPLETE CODE. 
*                    .GT. 0, EXPLICIT FET COMPLETE CODE.
*                    .LT. 0, COMPLETE FET WITH NO ERROR.
* 
*         USES   BUFBYTES, DBC, FUNCTION. 
* 
*         CALLS  FWR, OBD.
  
  
 FCL      ENM    X                 ENTRY/EXIT 
          LDD    FUNCTION 
          SBN    CLOSE
          ZJN    FCL1              IF CLOSE FUNCTION
          RJM    FWR               PERFORM WRITE FUNCTION 
          UJN    FCLX 
  
 FCL1     LDN    0
          STD    BUFBYTES          SET NO BYTES IN PP BUFFER
          LMK    M.EOI+M.PRU       SET EOI AND PRU
          STD    DBC
          RJM    OBD               OUTPUT BINARY DATA 
          NJN    FCLX              IF ERROR 
          LDD    DBC
          ZJN    FCLX 
          AOM    BLKCNT+C.WRITE+1  INCREMENT BLOCKS WRITTEN 
          LCN    0                 COMPLETE FET I/O 
          UJN    FCLX 
FWR       TITLE  FWR - FET WRITE/WRITER/WRITEF. 
**        FWR - FET WRITE/WRITER/WRITEF.
* 
*         CALL WPR FOR WRITE PRESET.
*         IF ERROR THEN RETURN. 
*         CALL COB TO CHECK BUFFER POINTERS ANC CALCULATE 
*           AVAILABLE DATA. 
*         IF ERROR THEN RETURN. 
*         IF MINIMUM DATA SIZE NOT AVAILABLE THEN RETURN. 
*         CALL RBD TO READ BINARY DATA. 
*         IF ERROR THEN RETURN. 
*         CALL OBD TO OUTPUT BINARY DATA. 
*         IF ERROR THEN RETURN. 
*         IF NO DATA OUTPUT THEN RETURN NO FET COMPLETE.
*         IF CHARACTER DATA 
*         THEN
*           CALL OCR TO OUTPUT CHARACTER RECORD.
*           IF ERROR THEN RETURN. 
*         OBTAIN UCP FIELD ACCESS.
*         IF OUTPUT RESET THEN LOOP TO CALL WPR.
*         IF REMWORDS NON-ZERO
*         THEN
*           CALL RBD TO READ BINARY DATA. 
*           IF ERROR OR NO DATA TO OUTPUT 
*           THEN
*             ABORT OUTPUT. 
*             RETURN FET CONTROL WORD ERROR.
*           LOOP TO CALL OCR. 
*         INCREMENT BLOCKS WRITTEN COUNTER. 
*         INCREMENT ABN.
*         UPDATE OUT AND ABN WITHIN UCP FET.
*         IF ERROR THEN RETURN. 
*         IF MORE THAN ONE HALF OF BUFFER EMPTY 
*         THEN
*           RECALL UCP. 
*         IF WRITER OR WRITEF AND EOR BLOCK WRITTEN 
*         THEN
*           RETURN FET I/O COMPLETE.
*         LOOP TO CALL COB. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NO FET COMPLETE CODE. 
*                    .GT. 0, EXPLICIT FET COMPLETE CODE.
*                    .LT. 0, COMPLETE FET WITH NO ERROR.
* 
*         USES   BUFSIZE, DBC, DD, FUNCTION, LIMIT, REMWORDS, WDSUSED.
* 
*         CALLS  COB, ERR, FFN, OBD, OCR, RBD, CSZ, SEL, UPO, 
*                WPR. 
  
  
 FWR      ENM    X                 ENTRY/EXIT 
 FWR01    RJM    WPR               WRITE PRESET 
          NJN    FWRX              IF ERROR 
 FWR01.5  LDK    DELRTY 
          STM    DELA              RESET RETRY COUNTER
 FWR02    RJM    COB               CHECK BUFFER POINTERS
          PJN    FWR03             IF NO ERROR
          LDN    FETPERR           FET PARAMETER ERROR
 FWR02.5  UJN    FWRX 
  
 FWR03    SBD    BUFSIZE           SUBTRACT MINIMUM REQUIRED DATA SIZE
          PJN    FWR03.5           IF ENOUGH DATA IN BUFFER 
          RJM    DEL               DELAY FOR A WHILE
          MJN    FWRX              IF RETRIES EXHAUSTED 
          UJN    FWR02
  
 FWR03.5  BSS    0
          RJM    RBD               READ BINARY DATA 
          NJN    FWR02.5           IF ERROR 
          RJM    OBD               OUTPUT BINARY DATA 
          NJN    FWR02.5           IF ERROR 
          LDD    DBC
          ZJN    FWR02.5           IF OUTPUT NOT POSSIBLE 
          LDD    DD 
          SBN    DDAS 
          NJN    FWR05             IF NOT ASCII DATA
 FWR04    RJM    OCR               OUTPUT CHARACTER RECORD
          NJN    FWR09             IF ERROR 
 NOS      IF     DEF,NOS
 FWR05    BSS    0
 NOS      ELSE
 FWR05    RJM    R.RAFL            OBTAIN FIELD ACCESS
 NOS      ENDIF 
          LDD    RESET
          ZJN    FWR06             IF NO RESET REQUIRED 
          LJM    FWR01
  
 FWR06    LDD    REMWORDS 
          ZJN    FWR10             IF NO REMAINING WORDS
          RJM    RBD               READ BINARY DATA 
          ZJN    FWR04             IF NO ADDRESS ERROR
          RJM    SEL               SELECT PATH
          MJN    FWR09             IF ERROR 
 FWR07    LDK    FCAB              ABORT TRANSACTION
          RJM    FFN
          PJN    FWR08             IF NO HARDWARE ERROR 
          RJM    ERR               REPORT ERROR 
          MJN    FWR09             IF FIRM HARDWARE ERROR 
          UJN    FWR07             RETRY
  
 FWR08    LDN    FETPERR           ADDRESS ERROR
 FWR09    LJM    FWRX 
  
 FWR10    AOM    BLKCNT+C.WRITE+1 
          SHN    -12               INCREMENT BLOCKS WRITTEN COUNTER 
          RAM    BLKCNT+C.WRITE 
          AOM    FETWD5+C.FABN+1
          SHN    -12               ADVANCE ABN
          RAM    FETWD5+C.FABN
          RJM    UPO               UPDATE OUT AND ABN WITHIN UCP FET
          NJN    FWR09             IF ADDRESS ERROR 
          RJM    CSZ               CHECK DATA AVAILABLE 
          SHN    -6                CONVERT WORDS TO PRUS
          SBK    MSBEFRC           SUBTRACT MINIMUM DATA AVAILABLE
          PJN    FWR11             IF NO RECALL REQUIRED
          LDK    M.RCLCP
          RJM    R.MTR             RECALL UCP 
 FWR11    LDD    DBC
          SHN    17-S.EOR 
          PJN    FWR12             IF EOR BLOCK NOT WRITTEN 
          LDD    FUNCTION 
          LMN    WRITE
          ZJN    FWR12             IF WRITE 
          LCN    0                 COMPLETE FET RETURN CODE 
          LJM    FWRX 
  
 FWR12    LJM    FWR01.5           ATTEMPT TO WRITE ANOTHER BLOCK 
WPR       SPACE  4,10 
**        WPR - WRITE PRESET. 
* 
*         VALIDATE DD.
*         COMPUTE MINIMUM REQUIRED BUFFER SIZE. 
*         READ AND VALIDATE FIRST AND LIMIT.
*         VALIDATE BUFFER LARGE ENOUGH FOR MINIMUM SIZE RECORD. 
*         READ AND VALIDATE OUT POINTER.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .GT. 0, ERROR RETURN.
* 
*         USES   D.T0 - D.T4, BUFSIZE, DD, FIRST, FUNCTION, LIMIT,
*                OUTPNT, RECSIZE, REMWORDS. 
* 
*         CALLS  NONE.
  
  
 WPR      ENM    X                 ENTRY/EXIT 
          LDD    RECSIZE
          STD    BUFSIZE           ASSUME STANDARD BUFFER SIZE
          LDM    FETWD5+C.DD
          STD    DD                SET DATA DECLARATION 
          SBK    DDDC 
          MJN    WPR0              IF BINARY DATA 
          SBK    DDAS-DDDC
          NJN    WPR2              IF NOT ASCII DATA
          LDD    BUFSIZE
          RAD    BUFSIZE           DOUBLE BUFFER SIZE 
 WPR0     LDD    FUNCTION 
          LMN    WRITE
          ZJN    WPR1              IF WRITE FUNCTION
          LDN    0
          STD    BUFSIZE           SET MINIMUM BUFFER FOR WRITER/F
 WPR1     BSS    0
          FETREL 4
          ZJN    WPR2              IF ADDRESS ERROR 
          CRD    D.T0              READ LIMIT 
          LDD    D.T0+C.PT
          LPN    77B
          STD    LIMIT             SAVE LIMIT 
          SHN    12 
          LMD    D.T0+C.PT+1
          STD    LIMIT+1
          ZJN    WPR2              IF BAD LIMIT 
          ADDRA  OK=WPR3
 WPR2     LDN    FETPERR           FET PARAMETER ERROR
          LJM    WPRX 
  
 WPR3     FETREL 1
          ZJN    WPR2              IF ADDRESS ERROR 
          CRD    D.T0              READ FIRST 
          LDD    D.T0+C.PT
          LPN    77B
          STD    FIRST             SAVE FIRST 
          LDD    D.T0+C.PT+1
          STD    FIRST+1
          LDD    LIMIT             CALCULATE LIMIT - FIRST - 1
          SBD    FIRST
          SHN    12 
          ADD    LIMIT+1
          SBD    FIRST+1
          SBN    1
          MJN    WPR2              IF FIRST NOT .LT. LIMIT
          SBD    BUFSIZE
          MJN    WPR2              IF BUFFER NOT LARGE ENOUGH 
          FETREL 3
          ZJN    WPR4              IF ADDRESS ERROR 
          CRD    D.T0              READ OUT 
          LDD    D.T0+C.PT+1
          STD    OUTPNT+1 
          LDD    D.T0+C.PT
          LPN    77B
          STD    OUTPNT            SAVE OUT 
          SBD    LIMIT             CALCULATE OUT - LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          PJN    WPR4              IF OUT IS PAST LIMIT 
          LDD    OUTPNT 
          SBD    FIRST             CALCULATE OUT - FIRST
          SHN    12 
          ADD    OUTPNT+1 
          SBD    FIRST+1
          MJN    WPR4              IF OUT LESS THAN FIRST 
          LDN    0
          STD    RESET             ZERO OUTPUT RESET FLAG 
          STD    REMWORDS          ZERO REMAINING WORDS 
          LJM    WPRX              NORMAL RETURN
  
 WPR4     LJM    WPR2 
RBD       SPACE  4,10 
**        RBD - READ BINARY DATA. 
* 
*         ZERO UBC. 
*         SET TO PRU BLOCK. 
*         POINT TO START OF BUFFER. 
*         IF REMWORDS IS NON-ZERO 
*         THEN
*           CALL RBB TO READ REMAINING WORDS. 
*           ZERO REMAINING WORDS. 
*           CALCULATE PP BYTES AVAILABLE. 
*           RETURN. 
*         ELSE
*           IF ASCII (8 IN 12)
*           THEN
*             CALL CSZ TO OBTAIN DATA SIZE AVAILABLE. 
*             IF FULL ASCII RECORD
*             THEN
*               SET FULL REMAINING WORD COUNT.
*               GO TO READ FULL PP BUFFER.
*             ELSE
*               SET REMAINING WORD COUNT. 
*               GO TO READ PARTIAL PP BUFFER. 
*           ELSE
*             CALL CSZ TO OBTAIN DATA SIZE AVAILABLE. 
*             IF FULL RECORD
*             THEN
*               READ FULL PP BUFFER.
*               SET PP BUFFER FULL. 
*               RETURN. 
*             ELSE
*               READ PARTIAL PP BUFFER. 
*               SET EOR AND PRU BLOCK WITH LEVEL. 
*               IF WRITER/WRITEF AND BINARY MODE
*               THEN
*                 SAVE UBC. 
*                 IF BAD UBC THEN RETURN FET PARAMETER ERROR. 
*               LOOP TO CALCULATE PP BYTES AVAILABLE. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    = FETPERR, IF BAD UBC. 
* 
*         USES   D.T7 - D.T4, BUFBYTES, DBC, DD, RECSIZE, REMWORDS, UBC.
* 
*         CALLS  CSZ, RBB.
  
  
 RBD      ENM    X                 ENTRY/EXIT 
          LDN    0
          STD    UBC               ZERO UBC 
          LMK    M.PRU
          STD    DBC               PRESET PRU BLOCK 
          LDC    BUFW 
          STD    D.T0              POINT TO START OF PP BUFFER
          LDD    REMWORDS 
          ZJN    RBD04             IF NO REMAINING WORDS
          STD    D.Z7 
          RJM    RBB               READ REMAINING WORDS 
          ZJN    RBD03             IF ADDRESS ERROR 
          LDN    0
          STD    REMWORDS          ZERO REMAINING WORDS 
 RBD01    LDD    D.Z7              CALCULATE BYTES IN PP BUFFER 
          SHN    2
          ADD    D.Z7 
 RBD02    STD    BUFBYTES 
          LDN    0                 NORMAL RETURN
          UJN    RBDX 
  
 RBD03    UJN    RBD08
  
 RBD04    LDD    DD 
          SBN    DDAS 
          NJN    RBD06             IF NOT ASCII (8 IN 12) 
          RJM    CSZ               OBTAIN AVAILABLE DATA SIZE 
          SBD    RECSIZE
          SBD    RECSIZE
          MJN    RBD05             IF PARTIAL BLOCK READ
          LDD    RECSIZE
          STD    REMWORDS          SET FULL REMAINING WORDS 
          UJN    RBD07
  
 RBD05    ADD    RECSIZE
          MJN    RBD09             IF NO REMAINING WORDS
          STD    REMWORDS          SAVE REMAINING WORDS 
          LDN    0                 SET FULL PP BUFFER 
          UJN    RBD09
  
 RBD06    RJM    CSZ               OBTAIN AVAILABLE DATA SIZE 
          SBD    RECSIZE
          MJN    RBD09             IF PARTIAL RECORD
 RBD07    LDD    RECSIZE
          RJM    RBB               READ FULL PP BUFFER
 RBD08    ZJN    RBD10             IF ADDRESS ERROR 
          LDK    NPRU              SET FULL PP BUFFER 
          LJM    RBD02
  
 RBD09    ADD    RECSIZE           MUST BE WRITER/WRITEF TO GET HERE
          STD    D.Z7              SAVE WORDS IN PARTIAL READ 
          RJM    RBB               READ PARTIAL PP BUFFER.
          ZJN    RBD10             IF ADDRESS ERROR 
          FETREL 0
          ZJN    RBD10             IF ADDRESS ERROR 
          CRD    D.T0              READ FET WORD ZERO 
          LDD    D.T0+C.LVL 
          SHN    -2 
          LPN    M.LVL
          LMK    M.EOR+M.PRU       SET PRU AND EOR WITH LEVEL 
          STD    DBC
          LDD    DD 
          SBN    DDAS 
          ZJN    RBD11             IF ASCII DATA
          LDM    FETWD5+C.UBC 
          STD    UBC               SAVE UBC 
          SBN    60 
          MJN    RBD11             IF GOOD UBC
 RBD10    LDN    FETPERR           FET PARAMETER ERROR
          LJM    RBDX 
  
 RBD11    LJM    RBD01
*CALL COM2NS
*CALL COMSEL
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTFETWD-* 
          TTL    NDR/2NY - FET I/O WRITEC.
          TITLE 
          QUAL   2NY
          IDENT  2NY,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - FET I/O WRITEC.
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
 FWRITEC  EQU    1
*CALL COMFETIO
FWC       TITLE  FWC - FET WRITEC.
**        FWC - FET WRITEC. 
* 
*         CALL WPR FOR WRITE PRESET.
*         IF ERROR THEN RETURN. 
*         CALL COB TO CHECK BUFFER POINTERS ANC CALCULATE 
*           AVAILABLE DATA. 
*         IF ERROR THEN RETURN. 
*         IF MINIMUM DATA SIZE NOT AVAILABLE THEN RETURN. 
*         CALL RCW TO READ CONTROL WORD FORMATTED DATA. 
*         IF ERROR THEN RETURN. 
*         IF NO BLOCK TO OUTPUT THEN RETURN COMPLETE FET. 
*         IF ASCII MODE AND EOR NOT SET 
*         THEN
*           CALL SCW TO SEARCH CONTROL WORDS. 
*           IF ERROR THEN RETURN. 
*           IF NO BLOCK TO OUTPUT THEN RETURN COMPLETE FET. 
*         CALL OBD TO OUTPUT BINARY DATA. 
*         IF ERROR THEN RETURN. 
*         IF NO DATA OUTPUT THEN RETURN NO FET COMPLETE.
*         IF CHARACTER DATA 
*         THEN
*           CALL OCR TO OUTPUT CHARACTER RECORD.
*           IF ERROR THEN RETURN. 
*         OBTAIN UCP FIELD ACCESS.
*         IF OUTPUT RESET THEN LOOP TO CALL WPR.
*         IF REMWORDS NON-ZERO
*         THEN
*           CALL RCW TO READ CONTROL WORD FORMATTED DATA. 
*           IF ERROR OR NO DATA TO OUTPUT 
*           THEN
*             ABORT OUTPUT. 
*             RETURN FET CONTROL WORD ERROR.
*           LOOP TO CALL OCR. 
*         INCREMENT BLOCKS WRITTEN COUNTER. 
*         INCREMENT ABN.
*         UPDATE OUT AND ABN WITHIN UCP FET.
*         IF ERROR THEN RETURN. 
*         IF MORE THAN ONE HALF OF BUFFER EMPTY 
*         THEN
*           RECALL UCP. 
*         LOOP TO CALL COB. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NO FET COMPLETE CODE. 
*                    .GT. 0, EXPLICIT FET COMPLETE CODE.
*                    .LT. 0, COMPLETE FET WITH NO ERROR.
* 
*         USES   BUFSIZE, DBC, DD, FUNCTION, LIMIT, REMWORDS, WDSUSED.
* 
*         CALLS  COB, ERR, FFN, OBD, OCR, RBD, RCW, SCW, SEL, UPO,
*                WPR. 
  
  
 FWC      ENM    X                 ENTRY/EXIT 
 FWC01    RJM    WPR               WRITE PRESET 
          NJN    FWCX              IF ERROR 
 FWC01.5  LDK    DELRTY 
          STM    DELA              RESET RETRY COUNTER
 FWC02    RJM    COB               CHECK BUFFER POINTERS
          PJN    FWC03             IF NO ERROR
          LDN    FETPERR           FET PARAMETER ERROR
          UJN    FWCX 
  
 FWC03    SBD    BUFSIZE           SUBTRACT MINIMUM REQUIRED DATA SIZE
          MJN    FWC03.5           IF NOT ENOUGH DATA FOR INPUT 
          RJM    RCW               READ CONTROL WORD FORMATTED DATA 
          NJN    FWCX              IF ERROR 
          LDD    DBC
          NJN    FWC06             IF BLOCK TO OUTPUT 
 FWC03.5  RJM    WPR               RESET POINTERS 
          RJM    DEL               DELAY FOR A WHILE
          PJN    FWC02             IF RETRIES NOT EXHAUSTED 
 FWC05    UJN    FWCX 
  
 FWC06    SHN    17-S.EOR 
          MJN    FWC07             IF END OF RECORD FOUND 
          LDD    DD 
          SBN    DDAS 
          NJN    FWC07             IF NOT ASCII (8 IN 12) 
          RJM    SCW               SEARCH CONTROL WORDS 
          NJN    FWC05             IF ERROR 
          LDD    DBC
          ZJN    FWC03.5           IF NO BLOCK TO OUTPUT
 FWC07    RJM    OBD               OUTPUT BINARY DATA 
          NJN    FWC05             IF ERROR 
          LDD    DBC
          ZJN    FWC05             IF OUTPUT NOT POSSIBLE 
          LDD    DD 
          SBN    DDAS 
          NJN    FWC09             IF NOT ASCII DATA
 FWC08    RJM    OCR               OUTPUT CHARACTER RECORD
          NJN    FWC05             IF ERROR 
 NOS      IF     DEF,NOS
 FWC09    BSS    0
 NOS      ELSE
 FWC09    RJM    R.RAFL            OBTAIN FIELD ACCESS
 NOS      ENDIF 
          LDD    RESET
          ZJN    FWC10             IF NO RESET REQUIRED 
          LJM    FWC01
  
 FWC10    LDD    REMWORDS 
          ZJN    FWC15             IF NO REMAINING WORDS
          RJM    RCW               READ CONTROL WORD FORMATTED DATA 
          NJN    FWC11             IF ERROR 
          LDD    DBC
          NJN    FWC08             IF BLOCK TO OUTPUT 
 FWC11    RJM    SEL               SELECT PATH
          MJN    FWC14             IF ERROR 
 FWC12    LDK    FCAB              ABORT TRANSACTION
          RJM    FFN
          PJN    FWC13             IF NO HARDWARE ERROR 
          RJM    ERR               REPORT ERROR 
          MJN    FWC14             IF FIRM HARDWARE ERROR 
          UJN    FWC12             RETRY
  
 FWC13    LDN    FETCWER           FET CONTROL WORD ERROR 
 FWC14    LJM    FWCX 
  
 FWC15    AOM    BLKCNT+C.WRITE+1 
          SHN    -12               INCREMENT BLOCKS WRITTEN COUNTER 
          RAM    BLKCNT+C.WRITE 
          AOM    FETWD5+C.FABN+1
          SHN    -12               ADVANCE ABN
          RAM    FETWD5+C.FABN
          RJM    UPO               UPDATE OUT AND ABN WITHIN UCP FET
          NJN    FWC14             IF ADDRESS ERROR 
          RJM    CSZ               CHECK DATA AVAILABLE 
          SHN    -6 
          SBK    MSBEFRC           SUBTRACT MINIMUM DATA AVAIL. 
          PJN    FWC16             IF NO RECALL REQUIRED
          LDK    M.RCLCP
          RJM    R.MTR             RECALL UCP 
 FWC16    LJM    FWC01.5           LOOP FOR NEXT BLOCK
WPR       SPACE  4,10 
**        WPR - WRITE PRESET. 
* 
*         VALIDATE DD.
*         COMPUTE MINIMUM REQUIRED BUFFER SIZE. 
*         READ AND VALIDATE FIRST AND LIMIT.
*         VALIDATE BUFFER LARGE ENOUGH FOR MINIMUM SIZE RECORD. 
*         READ AND VALIDATE OUT POINTER.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .GT. 0, ERROR RETURN.
* 
*         USES   D.T0 - D.T4, BUFSIZE, DD, FIRST, FUNCTION, LIMIT,
*                OUTPNT, RECSIZE, REMWORDS. 
* 
*         CALLS  NONE.
  
  
 WPR      ENM    X                 ENTRY/EXIT 
          LDM    FETWD5+C.DD
          STD    DD                SET DATA DECLARATION 
          SBN    DDAS+1 
          PJN    WPR1              IF BAD DD
          SBK    DDDC-DDAS-1
          ZJN    WPR1              IF BAD DD (C6 NOT ALLOWED) 
 NOS      IF     DEF,NOS
          LDN    2
 NOS      ELSE
          LDC    101B 
 NOS      ENDIF 
          STD    BUFSIZE           SET ONE PRU REQUIRED 
          FETREL 4
          ZJN    WPR1              IF ADDRESS ERROR 
          CRD    D.T0              READ LIMIT 
          LDD    D.T0+C.PT
          LPN    77B
          STD    LIMIT             SAVE LIMIT 
          SHN    12 
          LMD    D.T0+C.PT+1
          STD    LIMIT+1
          ZJN    WPR1              IF BAD LIMIT 
          ADDRA  OK=WPR2
 WPR1     LDN    FETPERR           FET PARAMETER ERROR
          LJM    WPRX 
  
 WPR2     FETREL 1
          ZJN    WPR1              IF ADDRESS ERROR 
          CRD    D.T0              READ FIRST 
          LDD    D.T0+C.PT
          LPN    77B
          STD    FIRST             SAVE FIRST 
          LDD    D.T0+C.PT+1
          STD    FIRST+1
          LDD    LIMIT             CALCULATE LIMIT - FIRST - 1
          SBD    FIRST
          SHN    12 
          ADD    LIMIT+1
          SBD    FIRST+1
          SBN    1
          MJN    WPR1              IF FIRST NOT .LT. LIMIT
          SBD    BUFSIZE
          MJN    WPR1              IF BUFFER NOT LARGE ENOUGH 
          FETREL 3
          ZJN    WPR3              IF ADDRESS ERROR 
          CRD    D.T0              READ OUT 
          LDD    D.T0+C.PT+1
          STD    OUTPNT+1 
          LDD    D.T0+C.PT
          LPN    77B
          STD    OUTPNT            SAVE OUT 
          SBD    LIMIT             CALCULATE OUT - LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          PJN    WPR3              IF OUT IS PAST LIMIT 
          LDD    OUTPNT 
          SBD    FIRST             CALCULATE OUT - FIRST
          SHN    12 
          ADD    OUTPNT+1 
          SBD    FIRST+1
          MJN    WPR3              IF OUT LESS THAN FIRST 
          LDN    0
          STD    RESET             ZERO OUTPUT RESET FLAG 
          STD    REMWORDS          ZERO REMAINING WORDS 
          LJM    WPRX              NORMAL RETURN
  
 WPR3     LJM    WPR1 
RCW       SPACE  4,10 
**        RCW - READ CONTROL WORD FORMATTED DATA. 
* 
*         POINT TO START OF PP BUFFER.
*         ZERO NUMBER OF BYTES IN BUFFER. 
*         ZERO DBC TO INDICATE NO BLOCK TO OUTPUT.
*         CALL CSZ TO CHECK DATA SIZE.
*         IF PRU NOT AVAILABLE THEN RETURN. 
*         CALL RBB TO READ CONTROL WORD.
*         IF BAD UBC OR BYTE COUNT THEN RETURN. 
*         CALL RBB TO READ PRU. 
*         IF SHORT PRU
*         THEN
*           SET LEVEL, EOR, AND PRU WITHIN DBC. 
*           RETURN. 
*         ADVANCE PP BUFFER ADDRESS.
*         ADVANCE BYTES IN BUFFER.
*         IF PP BUFFER FULL 
*         THEN
*           SET PRU WITHIN DBC. 
*           RETURN. 
*         LOOP TO CALL RBB. 
* 
*         ENTRY  NONE 
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    = FETCWER, IF CONTROL WORD ERROR.
*                    = FETPERR, IF ADDRESS ERROR. 
*                (DBC) .NE. 0, IF RECORD TO OUTPUT. 
* 
*         USES   D.Z7, D.T0,  BUFBYTES, DBC, REMWORDS, UBC. 
* 
*         CALLS  RBB, CSZ.
  
  
 RCW      ENM    X                 ENTRY/EXIT 
          LDC    BUFW              POINT TO START OF PP BUFFER
          STD    D.T0                (ALLOW FOR CONTROL WORD) 
          LDN    0
          STD    REMWORDS          ZERO REMAINING WORDS 
          STD    BUFBYTES          ZERO NUMBER OF BYTES IN BUFFER 
          STD    DBC               ZERO DBC TO INDICATE NO RECORD 
 RCW1     RJM    CSZ               OBTAIN DATA SIZE 
 NOS      IF     DEF,NOS
          ADK    -2 
 NOS      ELSE
          ADC    -101B
 NOS      ENDIF 
          PJN    RCW3              IF PRU AVAILABLE 
          LDN    0                 NORMAL RETURN
          UJN    RCWX 
  
 RCW2     LDN    FETPERR           IF ADDRESS ERROR 
          UJN    RCWX 
  
 RCW3     LDN    1
          RJM    RBB               GET CONTROL WORD 
          ZJN    RCW2              IF ADDRESS ERROR 
          LDM    2,D.T0 
          STD    UBC               SAVE UNUSED BIT COUNT
          LDN    59 
          SBD    UBC
          MJN    RCW6              IF BAD UBC 
          LDM    4,D.T0 
          STD    D.Z7              SAVE BYTE COUNT
          LDC    500B 
          SBD    D.Z7 
          MJN    RCW6              IF BAD PRU SIZE
 NOS      IF     DEF,NOS
          LDD    D.Z7 
          ADN    5+4               ADD LEVEL WORD AND ROUND UP
          RJM    DV5               DIVIDE BY FIVE 
 NOS      ELSE
          LDC    100B 
 NOS      ENDIF 
          RJM    RBB               READ DATA
          ZJN    RCW2              IF ADDRESS ERROR 
          LDC    500B 
          SBD    D.Z7 
          ZJN    RCW7              IF FULL PRU
          LDD    D.Z7 
          RAD    D.T0 
          LDI    D.T0              OBTAIN RECORD LEVEL
          LPK    M.LVL
          LMK    M.EOR+M.PRU       SET RECORD AND PRU INDICATORS
          STD    DBC
          LDD    D.Z7 
          RAD    BUFBYTES          ADVANCE BYTES IN BUFFER
 RCW4     LDN    0                 NORMAL RETURN
 RCW5     LJM    RCWX 
  
 RCW6     LDK    FETCWER           CONTROL WORD ERROR 
          UJN    RCW5 
  
 RCW7     LDC    500B 
          RAD    D.T0              ADVANCE PP BUFFER
          LDC    500B 
          RAD    BUFBYTES          ADVANCE BYTES IN PP BUFFER 
          LDD    UBC
          NJN    RCW7.5            IF NOT FULL PRU
          LDD    BUFBYTES 
          ADC    -NPRU
          PJN    RCW8              IF BUFFER FULL 
          LJM    RCW1              LOOP FOR MORE DATA 
  
 RCW7.5   LDN    D.Z1 
          STD    D.T0              USE D.Z1 - D.Z5 FOR BUFFER 
          RJM    GZP               GET ZERO LENGTH PRU
          PJN    RCW5              IF ERROR OR NO PRU 
          LDD    D.Z1+0            LOAD LEVEL NUMBER
          LPK    M.LVL
          LMK    M.EOR+M.PRU       SET RECORD AND PRU INDICATORS
 RCW7.7   STD    DBC
          UJN    RCW4 
  
 RCW8     LDK    M.PRU
          UJN    RCW7.7            SET PRU INDICATOR
GZP       SPACE  4,10 
**        GZP - GET ZERO LENGTH PRU.
* 
*         OBTAIN DATA SIZE. 
*         IF PRU NOT AVAILABLE THEN RETURN (A) = 0. 
*         GET NEXT CONTROL WORD.
*         IF ADDRESS ERROR THEN RETURN (A) = FETPERR. 
*         IF NOT ZERO LENGTH PRU
*         THEN
*           RETURN (A) = FETCWER. 
*         READ LEVEL NUMBER WORD. 
*         IF ADDRESS ERROR THEN RETURN (A) = FETPERR. 
*         SET OUTPNT TO NEXT PRU. 
*         RETURN (A) = -1.
* 
*         ENTRY - (D.T0) = LOC(D.Z1). 
*                 (OUTPNT) = POSITION OF CONTROL WORD.
* 
*         EXIT  - (A) .GT. 0, ERROR ENCOUNTERED.
*                      =   0, NO PRU AVAILABLE. 
*                     .LT. 0, NEXT PRU ZERO LENGTH AND
*                           (OUTPNT) = NEXT PRU.
*                           (D.Z1) = LEVEL NUMBER.
* 
*         USES  - D.Z1 - D.Z5.
* 
*         CALLS - AOT, CSZ, RBB.
  
  
 GZP      ENM    X
          RJM    CSZ               OBTAIN DATA SIZE 
 NOS      IF     DEF,NOS
          ADK    -2 
 NOS      ELSE
          ADK    -101B
 NOS      ENDIF 
          MJN    GZP1              IF PRU NOT AVAILABLE 
          LDN    1
          RJM    RBB               READ NEXT CONTROL WORD 
          ZJN    GZP2              IF ADDRESS ERROR 
          LDD    D.Z1+4 
          NJN    GZP3              IF NOT ZERO LENGTH PRU 
          LDN    1
          RJM    RBB               READ LEVEL NUMBER WORD 
          ZJN    GZP2              IF ADDRESS ERROR 
 NOS      IF     DEF,NOS
          BSS    0                 ALREADY AT NEXT PRU
 NOS      ELSE
          LDK    77B               ADVANCE TO NEXT PRU
          RJM    AOT               ADVANCE OUT POINTER
 NOS      ENDIF 
          LCN    1                 ZERO LENGTH PRU FOUND
          UJN    GZPX 
  
 GZP1     LDN    0                 NEXT PRU UNAVAILABLE 
          UJN    GZPX 
  
 GZP2     LDN    FETPERR           ADDRESS ERROR
          UJN    GZPX 
  
 GZP3     LDN    FETCWER           FET CONTROL WORD ERROR 
          UJN    GZPX 
SCW       SPACE  4,10 
**        SCW - SEARCH CONTROL WORDS. 
* 
*         COPY OUT POINTER. 
*         ZERO DBC TO INDICATE NO BLOCK TO OUTPUT.
*         IF NEXT PRU NOT AVAILABLE THEN RETURN.
*         READ CONTROL WORD.
*         IF BAD UBC OR BYTE COUNT THEN RETURN ERROR. 
*         IF SHORT PRU
*         THEN
*           READ LEVEL. 
*           SET LEVEL, EOR, AND PRU WITHIN DBC. 
*           ADVANCE REMWORDS. 
*           RESTORE OUT POINTER.
*           RETURN. 
*         ADVANCE REMWORDS. 
*         IF MAXIMUM SIZE RECORD
*         THEN
*           SET PRU WITHIN DBC. 
*           RESTORE OUT POINTER.
*           RETURN. 
*         LOOP TO EXAMINE NEXT PRU. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .GT. 0, FET CONTROL WORD ERROR CODE. 
*                            OR ADDRESS ERROR.
* 
*         USES   D.Z1 - D.T0, DBC, OUTPNT, RECSIZE, REMWORDS, UBC.
* 
*         CALLS  AOT, CSZ, RBB. 
  
  
 SCW      ENM    X                 ENTRY/EXIT 
          LDD    OUTPNT 
          STD    D.Z6              COPY OUT POINTER 
          LDD    OUTPNT+1 
          STD    D.Z7 
          LDK    D.Z1 
          STD    D.T0              SET BUFFER TO D.Z1 - D.Z5
          LDN    0
          STD    DBC               SET NO BLOCK TO OUTPUT 
 SCW1     RJM    CSZ               OBTAIN DATA SIZE 
 NOS      IF     DEF,NOS
          ADK    -2 
 NOS      ELSE
          ADC    -101B
 NOS      ENDIF 
          PJN    SCW2              IF NEXT PRU AVAILABLE
          LDN    0                 NORMAL RETURN
          UJN    SCWX 
  
 SCW2     LDN    1
          RJM    RBB               READ CONTROL WORD
          ZJN    SCW6              IF ADDRESS ERROR 
          LDD    D.Z1+2 
          STD    UBC               SAVE UNUSED BIT COUNT
          LDN    59 
          SBD    UBC
          PJN    SCW4              IF GOOD UBC
 SCW3     LDN    FETCWER           FET CONTROL WORD FORMAT ERROR
          UJN    SCWX 
  
 SCW4     LDD    D.Z1+4 
          ADC    -501B
          PJN    SCW3              IF BAD PRU SIZE
          ADN    1
          MJN    SCW7              IF SHORT PRU 
 NOS      IF     DEF,NOS
          LDC    101B 
 NOS      ELSE
          LDC    100B 
 NOS      ENDIF 
          RJM    AOT               ADVANCE OUT POINTER
          LDC    100B 
          RAD    REMWORDS          ADVANCE REMAINING WORDS
          LDD    UBC
          NJN    SCW6.5            IF NOT FULL PRU
          LDD    REMWORDS 
          SBD    RECSIZE
          MJN    SCW5              IF NOT MAXIMUM RECORD SIZE 
          LDK    M.PRU             INDICATE FULL PRU
          UJN    SCW8 
 SCW5     LJM    SCW1 
  
 SCW6     LDN    FETPERR           ADDRESS ERROR
          LJM    SCWX 
  
 SCW6.5   RJM    GZP               GET ZERO LENGTH PRU
          MJN    SCW7.5            IF ZERO LENGTH PRU 
          UJN    SCW10             IF ERROR OR NO PRU 
  
 SCW7     LDD    D.Z1+4            CALCULATE WORDS IN PRU 
          RJM    DV5               DIVIDE BY FIVE 
          STD    D.Z1 
          RJM    AOT               ADVANCE OUT POINTER
          LDD    D.Z1 
          RAD    REMWORDS          ADVANCE WORDS REMAINING
          LDN    1
          RJM    RBB               READ LEVEL WORD
          ZJN    SCW6              IF ADDRESS ERROR 
 SCW7.5   LDD    D.Z1+0            OBTAIN LEVEL NUMBER
          LPK    M.LVL
          LMK    M.EOR+M.PRU       SET RECORD AND PRU INDICATORS
 SCW8     STD    DBC
          LDD    D.Z6 
          STD    OUTPNT            RESTORE OUT POINTER
          LDD    D.Z7 
          STD    OUTPNT+1 
          LDD    REMWORDS 
          NJN    SCW9              IF SECOND HALF NOT ZERO LENGTH 
 NOS      IF     DEF,NOS
          LDN    2                 ADVANCE PAST ZERO LENGTH PRU 
 NOS      ELSE
          LDC    101B              ADVANCE PAST ZERO LENGTH PRU 
 NOS      ENDIF 
          RJM    AOT               ADVANCE OUT POINTER
 SCW9     LDN    0                 NORMAL RETURN
 SCW10    LJM    SCWX 
DV5       SPACE  4,10 
**        DV5 - DIVIDE BY FIVE
* 
*         ENTRY  (A) = NUMBER TO BE DIVIDED.
* 
*         EXIT   (A) = NUMBER DIVIDED BY FIVE.
* 
*         USES   D.T1, D.T2.
* 
*         CALLS  NONE.
  
  
 DV5      ENM    X
          STD    D.T1 
          SHN    1                 2*VALUE
          ADD    D.T1              3*VALUE
          SHN    2                 12*VALUE 
          ADD    D.T1              13*VALUE 
          SHN    12                (13*VALUE)/64
          STD    D.T2 
          SHN    8                 4*13*VALUE 
          SBD    D.T1              51*VALUE 
          ADD    D.T2              51*VALUE+(13*VALUE)/64 
          SHN    -8                (51*VALUE+(13*VALUE)/64)/256 
          UJN    DV5X 
AOT       SPACE  4,10 
**        AOT - ADVANCE OUT POINTER.
* 
*         ENTRY  (A) = AMOUNT TO ADVANCE. 
* 
*         EXIT   NONE.
* 
*         USES   FIRST, OUTPNT, LIMIT.
* 
*         CALLS  NONE.
  
  
 AOT      ENM    X                 ENTRY/EXIT 
          RAD    OUTPNT+1          ADVANCE OUT POINTER
          SHN    -12
          RAD    OUTPNT 
          SBD    LIMIT             CALCULATE OUT - LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          MJN    AOTX              IF NOT AT LIMIT
          ADD    FIRST+1
          STD    OUTPNT+1          WRAP OUT POINTER PAST FIRST
          SHN    -12
          ADD    FIRST
          STD    OUTPNT 
          UJN    AOTX 
*CALL COM2NS
*CALL COMSEL
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTFETWD-* 
          TTL    NDR/2NT - FET I/O CONVERT MODE READ. 
          TITLE 
          QUAL   2NT
          IDENT  2NT,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - READ CONVERT MODE DATA.
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION. 1983.
 CMREAD   EQU    1
 CONMODE  EQU    1
*CALL COMFETIO
RCM       TITLE  RCM - READ CONVERT MODE DATA.
**        RCM - READ CONVERT MODE DATA. 
* 
*         VALIDATE FET PARAMETERS.
*         IF FET PARAMETERS VALID 
*         THEN
*           ASLONGAS DATA AVAILABLE 
*             AND BUFFER SPACE AVAILABLE
*             AND NOT (EOI OR (READ AND EOR)) 
*             AND NO ERRORS 
*           DO
*             WAIT FOR BUFFER SPACE.
*             IF SPACE AVAILABLE
*             THEN
*               READ NETWORK BLOCK. 
*               IF BLOCK SUCCESSFULLY READ
*               THEN
*                 WRITE DATA TO UCP#S BUFFER. 
*                 IF BLOCK WRITTEN TO CM BUFFER 
*                 THEN
*                   UPDATE IN POINTER AND ABN.
*         IF EOI
*         THEN
*           RETURN FET REPLY CODE OF EOI. 
* 
*         ENTRY - REQUEST BLOCK READ INTO D.REQ1 AND D.REQ2.
*                 FET WORD 5 READ INTO FETWD5.
*                 EVENT WORD AND BLOCK COUNT WORD ZEROED. 
*                 IF NOS/BE THEN MUST HAVE FIELD ACCESS.
* 
*         EXIT  - (A) > 0, SET FET COMPLETE WITH (A) = FET REPLY CODE.
*                     = 0, NO INPUT AVAILABLE. DO NOT SET FET COMP. 
*                     < 0, NAD ERROR OR TIMED OUT WAITING FOR 
*                          DATA OR BUFFER SPACE. SET FET COMPLETE.
  
  
 RCM      ENM    X                 ENTRY/EXIT 
          RJM    VFP               VALIDATE FET PARAMETERS
          NJN    RCMX              IF FET PARAMETER ERROR 
 RCM1     RJM    WBS               WAIT FOR BUFFER SPACE
          NJN    RCMX              IF ERROR OR NO SPACE AVAILABLE 
          RJM    RNB               READ NETWORK BLOCK 
          NJN    RCMX              IF NAD ERROR OR RETRIES EXHAUSTED
          LDD    DBC
          ZJN    RCMX              IF NO INPUT AVAILABLE
          RJM    WDC               WRITE DATA TO CM BUFFER
          NJN    RCMX              IF BUFFER POINTER ERROR
          RJM    UPI               UPDATE IN POINTER AND ABN
          NJN    RCMX              IF FET ERROR 
          LDD    DBC
          SHN    17-S.EOI 
          MJN    RCM2              IF EOI 
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          LMK    FFREAD 
          NJN    RCM1              IF NOT FET I/O READ
          LDD    DBC
          SHN    17-S.EOR 
          MJN    RCMX              IF READ AND EOR/EOF
          UJN    RCM1 
  
 RCM2     LDK    FETEOI            RETURN EOI TO FET
          UJK    RCMX 
VFP       SPACE  4,10 
**        VFP - VALIDATE FET PARAMETERS.
* 
*         IF VALID DD 
*         THEN
*           SET MINIMUM BUFFER SIZE.
*           READ FET BUFFER POINTERS. 
*           IF NO ADDRESS ERRORS
*           THEN
*             VALIDATE FET BUFFER POINTERS. 
*         ELSE
*           RETURN FET PARAMETER ERROR. 
* 
*         ENTRY - FET WORD 5 READ INTO FETWD5.
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, FIRST, LIMIT, IN AND BUFSIZE ARE SAVED.
  
  
 VFP      ENM    X                 ENTRY/EXIT 
          LDM    FETWD5+C.DD
          SBK    DDAS+1 
          PJN    VFP1              IF INVALID DD
          ADK    DDAS-DDDC+1
          MJN    VFP1              IF NOT ASCII OR DISPLAY CODE 
          STD    DD                (0=DISPLAY CODE) AND (1=ASCII) 
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          STD    D.T1 
          LDM    MINBUFS,D.T1 
          STD    BUFSIZE           SET MINIMUM BUFFER SIZE
          RJM    RFB               READ FET BUFFER POINTERS 
          NJN    VFPX              IF ADDRESS ERROR 
          RJM    VFB               VALIDATE FET BUFFER POINTERS 
          UJK    VFPX 
  
 VFP1     LDN    FETPERR
          UJK    VFPX 
 MINBUFS  BSS    0                 MINIMUM BUFFER SIZES 
          CON    RECSIZEK          FOR READ 
 NOS      IF     DEF,NOS
          CON    RECSIZEK/100B+RECSIZEK/100B+RECSIZEK     (FOR READC) 
 NOS      ELSE
          CON    RECSIZEK/100B+RECSIZEK                   (FOR READC) 
 NOS      ENDIF 
RFB       SPACE  4,10 
**        RFB - READ FET BUFFER POINTERS. 
* 
*         READ FIRST. 
*         IF ADDRESS ERROR
*         THEN
*           RETURN FET PARAMETER ERROR. 
*         ELSE
*           READ IN POINTER.
*           IF ADDRESS ERROR
*           THEN
*             RETURN FET PARAMETER ERROR. 
*           ELSE
*             READ LIMIT. 
*             IF ADDRESS ERROR OR LIMIT INVALID 
*             THEN
*               RETURN FET PARAMETER ERROR. 
*             ELSE
*               RETURN (A) = 0. 
* 
*         ENTRY - NONE. 
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, LIMIT, FIRST, AND IN SAVED.
  
  
 RFB      ENM    X                 ENTRY/EXIT 
          FETREL 1
          ZJN    RFB1              IF ADDRESS ERROR 
          CRD    D.T0              READ FIRST 
          LDD    D.T0+C.PT
          LPN    77B
          STD    FIRST             SAVE FIRST 
          LDD    D.T0+C.PT+1
          STD    FIRST+1
          FETREL 2
          ZJN    RFB1              IF ADDRESS ERROR 
          CRD    D.T0              READ IN POINTER
          LDD    D.T0+C.PT
          LPN    77B
          STD    INPNT             SAVE IN POINTER
          LDD    D.T0+C.PT+1
          STD    INPNT+1
          FETREL 4
          ZJN    RFB1              IF ADDRESS ERROR 
          CRD    D.T0              READ LIMIT 
          LDD    D.T0+C.PT
          LPN    77B
          STD    LIMIT             SAVE LIMIT 
          SHN    12 
          LMD    D.T0+C.PT+1
          STD    LIMIT+1
          NJN    RFB2              IF LIMIT NE 0
 RFB1     LDN    FETPERR
          UJK    RFBX 
  
 RFB2     ADDRA  ER=RFB1           IF LIMIT NOT WITHIN FL 
          LDN    0
          UJK    RFBX 
VFB       SPACE  4,10 
**        VFB - VALIDATE FET BUFFER POINTERS. 
* 
*         IF FIRST NOT LT LIMIT 
*         THEN
*           RETURN FET PARAMETER ERROR. 
*         ELSE
*           IF BUFFER NOT LARGE ENOUGH
*           THEN
*             RETURN FET PARAMETER ERROR. 
*           ELSE
*             IF IN LT FIRST OR IN GE LIMIT 
*             THEN
*               RETURN FET PARAMETER ERROR. 
*             ELSE
*               RETURN (A) = 0. 
* 
*         ENTRY - FIRST, INPNT, LIMIT, AND BUFSIZE SET UP.
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, FET BUFFER PARAMETERS ARE VALID. 
  
  
 VFB      ENM    X                 ENTRY/EXIT 
          LDD    LIMIT             CALCULATE LIMIT-FIRST-1
          SBD    FIRST
          SHN    12 
          ADD    LIMIT+1
          SBD    FIRST+1
          SBN    1
          MJN    VFB1              IF FIRST NOT LT LIMIT
          SBD    BUFSIZE
          MJN    VFB1              IF BUFFER NOT LARGE ENOUGH 
          LDD    INPNT             CALCULATE IN - LIMIT 
          SBD    LIMIT
          SHN    12 
          ADD    INPNT+1
          SBD    LIMIT+1
          PJN    VFB1              IF IN NOT LT LIMIT 
          LDD    INPNT             CALCULATE IN - FIRST 
          SBD    FIRST
          SHN    12 
          ADD    INPNT+1
          SBD    FIRST+1
          MJN    VFB1              IF IN NOT GE FIRST 
          LDN    0                 PARAMETERS VALID 
          UJK    VFBX 
  
 VFB1     LDK    FETPERR
          UJK    VFBX 
WSA       SPACE  4,10 
**        WBS - WAIT FOR BUFFER SPACE.
* 
*         ASLONGAS BUFFER SPACE NOT AVAILABLE 
*           AND NO ERRORS 
*           AND RETRIES NOT EXHAUSTED 
*         DO
*           READ OUT POINTER. 
*           IF OUT POINTER VALID
*           THEN
*             CALCULATE BUFFER SPACE AVAILABLE. 
*             IF NOT ENOUGH SPACE AVAILABLE 
*             THEN
*               DELAY A WHILE.
* 
*         ENTRY - FIRST, INPNT, LIMIT, AND BUFSIZE SET UP.
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, ENOUGH BUFFER SPACE FOR BLOCK AVAILABLE. 
*                     < 0, TIMED OUT WAITING FOR SPACE. 
  
  
 WBS      ENM    X                 ENTRY/EXIT 
          LDK    DELRTY 
          STM    DELA              INITIALIZE RETRY COUNTER 
 WBS1     RJM    RVO               READ AND VALIDATE OUT POINTER
          NJN    WBSX              IF ERROR 
          RJM    CSA               CALCULATE SPACE AVAILABLE
          SBD    BUFSIZE
          PJN    WBS2              IF ENOUGH SPACE AVAILABLE
          RJM    DEL               DELAY A WHILE
          PJN    WBS1              IF RETRIES NOT EXHAUSTED 
          UJN    WBSX 
  
 WBS2     LDN    0
          UJN    WBSX 
RVO       SPACE  4,10 
**        RVO - READ AND VALIDATE OUT POINTER.
* 
*         READ OUT POINTER. 
*         IF ADDRESS ERROR
*         THEN
*           RETURN FET PARAMETER ERROR. 
*         ELSE
*           IF OUT POINTER NOT VALID
*           THEN
*             RETURN FET PARAMETER ERROR. 
*           ELSE
*             RETURN (A) = 0. 
* 
*         ENTRY - LIMIT AND FIRST SET UP. 
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, OUT POINTER VALID. 
  
  
 RVO      ENM    X                 ENTRY/EXIT 
          FETREL 3
          ZJN    RVO1              IF ADDRESS ERROR 
          CRD    D.T0              READ OUT POINTER 
          LDD    D.T0+C.PT+1
          STD    OUTPNT+1          SAVE OUT POINTER 
          LDD    D.T0+C.PT
          LPN    77B
          STD    OUTPNT            CALCULATE OUT - LIMIT
          SBD    LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          PJN    RVO1              IF OUT NOT LT LIMIT
          LDD    OUTPNT            CALCULATE OUT - FIRST
          SBD    FIRST
          SHN    12 
          ADD    OUTPNT+1 
          SBD    FIRST+1
          MJN    RVO1              IF OUT NOT GE FIRST
          LDN    0                 OUT POINTER VALID
          UJK    RVOX 
  
 RVO1     LDK    FETPERR
          UJK    RVOX 
CSA       SPACE  4,10 
**        CSA - CALCULATE BUFFER SPACE AVAILABLE. 
* 
*         CALCULATE SPACE FROM IN TO OUT. 
*         IF SPACE NOT IN ONE PIECE 
*         THEN
*           SPACE IS TOTAL BUFFER SIZE - SPACE FROM IN TO OUT.
* 
*         ENTRY - FIRST, INPNT, OUTPNT, AND LIMIT SET UP. 
* 
*         EXIT  - (A) = AMOUNT OF SPACE AVAILABLE.
  
  
 CSA      ENM    X                 ENTRY/EXIT 
          LDD    OUTPNT            CALCULATE OUT - IN - 1 
          SBD    INPNT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    INPNT+1
          SBN    1
          PJN    CSAX              IF SPACE IN ONE PIECE
          ADD    LIMIT+1           CALCULATE OUT-IN-1+LIMIT-FIRST 
          SBD    FIRST+1
          SHN    6
          ADD    LIMIT
          SBD    FIRST
          SHN    12 
          UJN    CSAX 
RNB       SPACE  4,10 
**        RNB - READ NETWORK BLOCK. 
* 
*         IF NOS/BE THEN TERMINATE FIELD ACCESS.
*         RESERVE CHANNEL.
*         ASLONGAS NON-FATAL ERROR
*           AND BLOCK NOT SUCCESSFULLY READ 
*         DO
*           SET UP UNVC CALL BLOCK. 
*           ISSUE UNVC AND CHECK RESPONSE.
*           IF DATA AVAILABLE 
*           THEN
*             GET BLOCK FROM NAD. 
*             IF BLOCK SUCCESSFULLY READ
*             THEN
*               VALIDATE DATA BLOCK.
*         IF BLOCK VALID
*         THEN
*           TEMPORARILY RELEASE CHANNEL.
*           RETURN (A) = 0. 
* 
*         ENTRY - NONE. 
* 
*         EXIT  - (A) > 0, SPECIFIC FET REPLY CODE. 
*                     = 0 AND (DBC) = 0 NO DATA AVAILABLE.
*                     = 0 AND (DBC) " 0 SUCCESSFUL READ INTO PP.
*                     < 0, FATAL NAD ERROR OR RETRIES EXHAUSTED.
*                 IF NOS/BE THEN FIELD ACCESS TERMINATED. 
  
  
 RNB      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            TERMINATE FIELD ACCESS 
          RJM    RES               RESERVE NAD CHANNEL
 RNB1     LDD    D.REQ2+C.PATH
          STM    UNVCB+UC.PATH
          LDK    SFRC 
          STM    UNVCB+UC.SFC 
          RJM    IUR               ISSUE UNVC AND CHECK RESPONSE
          NJN    RNBX              IF FATAL ERROR 
          LDD    DBC
          ZJN    RNBX              IF NO DATA AVAILABLE 
          RJM    RDB               READ DATA BLOCK
          MJN    RNBX              IF FATAL NAD ERROR 
          ZJN    RNB1              IF NON-FATAL ERROR, RETRY
          RJM    VDB               VALIDATE DATA BLOCK
          NJN    RNBX              IF FATAL ERROR 
          LDD    DBC
          ZJN    RNB1              IF NON FATAL ERROR 
          LDN    1
          RJM    REL               TEMPORARILY RELEASE CHANNEL
          LDN    0
          UJN    RNBX 
IUR       SPACE  4,10 
**        IUR - ISSUE UNVC AND PROCESS RESPONSE.
* 
*         ISSUE UNIVERSAL COMMAND.
*         SEND UNVC SUB-FUNCTION BLOCK. 
*         WAIT FOR NAD RESPONSE.
*         PROCESS NAD RESPONSE. 
* 
*         ENTRY - UNVC SUB-FUNCTION BLOCK SET UP. 
* 
*         EXIT  - (A) > 0, FET REPLY CODE.
*                     = 0 AND (DBC) = 0, NO DATA AVAILABLE. 
*                     = 0 AND (DBC) " 0, BLOCK READY FOR INPUT. 
*                     < 0, FATAL NAD ERROR OR RETRIES EXHAUSTED.
  
  
 IUR      ENM    X                 ENTRY/EXIT 
 IUR1     LDK    FCUC 
          RJM    FFN               ISSUE UNIVERSAL COMMAND
          MJN    IUR2              IF NAD ERROR 
          LMK    RCUA&RCAK
          ZJN    IUR3              IF UNIVERSAL ACK 
          LCN    NADERRH           ABNORMAL RESPONSE
 IUR2     RJM    ERR               PROCESS NAD ERROR
          PJN    IUR1              IF NOT FATAL ERROR 
          UJK    IURX 
  
 IUR3     RJM    WFP               WAIT FOR PRIMED
          MJN    IUR2              IF NAD ERROR 
          LDK    FCO8 
          RJM    FAN               OUTPUT 12 TO 8 
          MJN    IUR2              IF NAD ERROR 
          LDK    UNVCB
          STM    OUTA              SAVE FWA OF OUT BUFFER 
          LDK    UNVCBS            AMOUNT TO OUTPUT 
          RJM    OUT               OUTPUT BLOCK 
          ZJN    IUR4              IF SUCCESSFUL OUTPUT 
          MJN    IUR2              IF NAD ERROR 
          LCN    NADERRK           TRANSFER LENGTH ERROR
          UJK    IUR2 
  
 IUR4     RJM    WFR               WAIT FOR NAD RESPONSE
          MJN    IUR2              IF NAD ERROR 
          RJM    PNR               PROCESS NAD RESPONSE 
          NJN    IUR5              IF NAD ERROR OR NO RETRY 
          LDD    D.T0 
          ZJN    IUR5              IF NO ERRORS 
          LMC    777777B
          UJK    IUR2 
  
 IUR5     UJK    IURX 
WFR       SPACE  4,10 
**        WFR - WAIT FOR NAD RESPONSE.
* 
*         ASLONGAS NAD HAS NOT RESPONDED
*           AND NO NAD ERRORS 
*         DO
*           GET CONTROLWARE STATUS. 
* 
*         ENTRY - UNVC FUNCTION BLOCK SENT TO NAD.
* 
*         EXIT  - (A) > 0, NAD HAS RESPONDED AND
*                          (STATUS) = RESPONSE CODE.
*                     < 0, NAD ERROR. 
  
  
 WFR      ENM    X                 ENTRY/EXIT 
          LCN    0
          STD    D.T0              SET RETRY COUNT
 WFR1     RJM    CST               GET CONTROLWARE STATUS 
          MJN    WFRX              IF NAD ERROR 
          LPN    M.RESPCD 
          LMN    RCUA 
          NJN    WFRX              IF NAD HAS RESPONDED 
          SOD    D.T0 
          PJN    WFR1              IF RETRIES NOT EXHAUSTED 
          LCN    NADERRE           TIME-OUT WAITING NAD RESPONSE
          UJN    WFRX 
PNR       SPACE  4,10 
**        PNR - PROCESS NAD RESPONSE. 
* 
*         IF PATH ABORTED 
*         THEN
*           RETURN PATH ABORTED EVENT.
*         IF NEXT BLOCK IS A NON-PRU BLOCK
*         THEN
*           RETURN NON-PRU BLOCK FET CODE.
*         IF BLOCK ERROR
*         THEN
*           ISSUE NAD ERROR LOG MESSAGE.
*           SET DBC TO PRU BLOCK AVAILABLE. 
*         IF BLOCK READY TO BE INPUT
*         THEN
*           SET DBC TO PRU BLOCK AVAILABLE. 
*         IF NO DATA AVAILABLE
*         THEN
*           INCREMENT RETRY COUNT.
*           IF RETRIES EXHAUSTED
*           THEN
*             RETURN (A) < 0 TO GET COMPLETE BIT SET. 
*           ELSE
*             TELL RHF TO REISSUE THE REQUEST.
* 
*         ENTRY - (STATUS) = UNVC FUNCTION BLOCK RESPONSE.
* 
*         EXIT  - (A) > 0, EXPLICIT FET RETURN CODE.
*                     = 0, AND (D.T0) " 0, (D.T0) = NAD ERROR.
*                     = 0, AND (DBC) = 0, NO BLOCK, RETRY.
*                     = 0, AND (DBC) " 0, BLOCK READY TO READ.
*                     < 0, NOT RETRYABLE OR RETRIES EXHAUSTED.
  
  
 PNR      ENM    X                 ENTRY/EXIT 
          LDN    0
          STD    DBC               INITIALIZE RETURN PARAMETERS 
          STD    D.T0 
          LDD    STATUS 
          LPK    M.RESPCD 
          LMK    RCAK 
          ZJN    PNR2              IF GOOD BLOCK AVAILABLE
          LMK    RCBE&RCAK
          ZJN    PNR1              IF BLOCK ERROR 
          LMK    RCNK&RCBE
          ZJN    PNR3              IF PATH NOT AVAILABLE
          LMK    RCAB&RCNK
          ZJN    PNR3              IF PATH NOT AVAILABLE
          LMK    RCFL&RCAB
          ZJN    PNR4              IF PATH IN A FLUSH STATE 
          LMK    RCNP&RCFL
          ZJN    PNR5              IF NEXT BLOCK IS NON-PRU 
          LMK    RCCE&RCNP
          ZJN    PNR4              IF CONVERT MODE NOT ACTIVE 
          LMK    RCCN&RCCE
          ZJN    PNR4              IF CONVERT MODE NOT ACTIVE 
          LMK    RCTN&RCCN
          ZJN    PNR6              IF NO DATA AVAILABLE 
          LDK    NADERRG           PATH STATUS ERROR
          STD    D.T0              SAVE NAD ERROR CODE
          LDN    0
          UJK    PNRX 
  
 PNR1     LDK    -NADRRER          NAD RECEIVED BAD BLOCK FROM NETWORK
          RJM    ERR               PROCESS NAD ERROR
 PNR2     LDK    M.PRU
          STD    DBC               FLAG PRU BLOCK AVAILABLE 
          LDN    0
          UJK    PNRX 
  
 PNR3     LDN    EVTABT 
          STD    EVENT             FLAG PATH ABORTED
 PNR4     LCN    0                 SET FET COMPLETE 
          UJK    PNRX 
  
 PNR5     LDK    FETNTPRU          NON-PRU BLOCK
          UJK    PNRX 
  
 PNR6     LDN    EVTIN
          STD    EVENT             SET NO INPUT AVAILABLE 
          LDK    MAXRETRY 
          SBD    D.REQ2+C.RETRY 
          MJN    PNR7              IF RETRIES EXHAUSTED 
          LDK    RC.FNOIA 
          STD    D.REQ3+C.RC       SET RETRY FLAG 
          LDN    0
 PNR7     UJK    PNRX 
RDB       SPACE  4,10 
**        RDB - READ DATA BLOCK FROM NAD. 
* 
*         WAIT FOR PRIMED.
*         IF NO ERROR 
*         THEN
*           SELECT DI INPUT.
*           IF NO ERROR 
*           THEN
*             INPUT DATA BLOCK. 
*             IF NO ERROR 
*             THEN
*               RETURN BLOCK SIZE.
*             ELSE
*               CALL ERROR PROCESSOR. 
*               RESET NAD POINTERS. 
*           ELSE
*             CALL ERROR PROCESSOR. 
*             RESET NAD POINTERS. 
*         ELSE
*           CALL ERROR PROCESSOR. 
*           RESET NAD POINTERS. 
* 
*         ENTRY - NAD HAS BEEN FUNCTIONED FOR SENDING A BLOCK.
* 
*         EXIT  - (A) > 0, BLOCK HAS BEEN INPUT.
*                     = 0, REISSUE READ REQUEST.
*                     < 0, FATAL NAD ERROR. 
  
  
 RDB      ENM    X                 ENTRY/EXIT 
          RJM    WFP               WAIT FOR PRIMED
          MJN    RDB1              IF NAD ERROR 
          LDM    DIFC,DD
          RJM    FAN               SELECT DI INPUT CONVERSION 
          MJN    RDB1              IF NAD ERROR 
          LDK    HDR
          STM    INPA              SET FWA OF BUFFER
          LDK    HDRLEN+NPRU       LENGTH TO INPUT
          STD    FLUSH             BE SURE TO FLUSH BUFFER
          RJM    INP               INPUT BLOCK
          MJN    RDB1              IF NAD ERROR 
          SBK    HDRLEN 
          PJN    RDB2              IF BLOCK MINIMUM SIZE
          LCN    NADERRK
 RDB1     RJM    ERR               PROCESS NAD ERROR
          MJN    RDBX              IF FATAL ERROR 
          LDK    FCRT 
          RJM    FFN               RESET BLOCK POINTER
          MJN    RDB1              IF NAD ERROR 
          ZJN    RDBX              IF POINTER RESET 
          LCN    NADERRH           ABNORMAL NAD RESPONSE
          UJN    RDB1 
  
 RDB2     STD    BUFBYTES          SAVE BLOCK SIZE
          LDN    1                 SET FOR GOOD BLOCK INPUT 
          UJK    RDBX 
  
 DIFC     BSS    0                 DI INPUT SELECT
          CON    FCI6              INPUT 8 TO 6 
          CON    FCIW              INPUT 16 TO 12 
VDB       SPACE  4,10 
**        VDB - VALIDATE DATA BLOCK.
* 
*         IF BAD HOST ABN 
*         THEN
*           ISSUE NAD ERROR.
*           RESET NAD BLOCK POINTERS. 
*         ELSE
*           VALIDATE BLOCK SIZE.
*           IF INVALID BLOCK
*           THEN
*             ISSUE NAD ERROR.
*             RESET NAD BLOCK POINTERS. 
* 
*         ENTRY - BLOCK HEADER AND DATA IN BUFFER.
* 
*         EXIT  - (A) > 0, SPECIFIC FET REPLY CODE. 
*                     = 0 AND (DBC) = 0, RETRY INPUT. 
*                         AND (DBC) " 0, VALID BLOCK. 
*                     < 0, FATAL NAD ERROR. 
  
 VDB      ENM    X                 ENTRY/EXIT 
          LDN    0
          STM    VDBA              INITIALIZE FET ERROR CODE RETURN 
          LDM    HDR+R.PABN 
          LMM    FETWD5+C.FABN
          LPN    77B
          NJN    VDB1              IF HOST ABN MISCOMPARE 
          LDM    HDR+R.PABN+1 
          LMM    FETWD5+C.FABN+1
          ZJN    VDB4              IF VALID ABN 
 VDB1     LDK    -NADLRE1          BAD HOST ABN 
          UJN    VDB3 
  
 VDB2     LDK    FCRT 
          RJM    FFN               RESET BLOCK POINTER
          ZJN    VDB5              IF BLOCK RESET 
          MJN    VDB3              IF NAD ERROR 
          LCN    NADERRH           ABNORMAL RESPONSE
 VDB3     RJM    ERR               PROCESS NAD ERROR
          MJN    VDBX              IF FATAL NAD ERROR 
          UJN    VDB2 
  
 VDB4     RJM    VBS               VALIDATE BLOCK SIZE
          MJN    VDB3              IF NAD ERROR 
          ZJN    VDB6              IF BLOCK VALID 
          STM    VDBA              SAVE FET REPLY CODE
          UJK    VDB2 
  
 VDB5     STD    DBC               MUST RETRY TRANSFER
          LDC    0
 VDBA     EQU    *-1               NON-ZERO IF RETURNING FET CODE 
 VDB6     UJK    VDBX 
VBS       SPACE  4,10 
**        VBS - VALIDATE BLOCK SIZE.
* 
*         EXTRACT TEXT LENGTH FROM HEADER.
*         CONVERT BITS TO CM WORDS. 
*         IF BLOCK SIZE NOT A MULTIPLE OF CM WORDS. 
*         THEN
*           RETURN NAD ERROR. 
*         IF DATA INPUT < TEXT LENGTH 
*         THEN
*           RETURN NAD ERROR. 
*         IF BLOCK > MAXIMUM BLOCK SIZE 
*         THEN
*           RETURN NAD ERROR. 
*         IF NOT PRU BLOCK
*         THEN
*           RETURN FET CODE OF NEXT BLOCK IS A NON-PRU BLOCK. 
*         IF SHORT BLOCK WITHOUT EOR/EOI
*         THEN
*           RETURN NAD ERROR. 
* 
*         ENTRY - (HDR) = BLOCK HEADER FOR CURRENT BLOCK. 
*                 (BUFBYTES) = PP BYTES OF DATA INPUT (DISCLUDING 
*                              HEADER)
* 
*         EXIT  - (A) > 0, SPECIFIC FET REPLY CODE. 
*                     = 0, BLOCK VALID AND
*                          (REMWORDS) = DATA INPUT IN CM WORDS. 
*                          (BUFBYTES) = REMWORDS*5. (PP BYTES)
*                          (DBC) = CORRESPONDING DATA BLOCK CLARIFIER.
*                     < 0, NAD ERROR. 
* 
*         NOTE  - WHEN RECEIVING DATA FROM THE NAD THE PP WILL BE 
*                 MAPPING 16 NAD BITS INTO 12 PP BITS.  THEREFORE THE 
*                 NUMBER OF PP BITS THAT WILL ACTUALLY BE RECEIVED WILL 
*                 BE 3/4 TIMES THE NUMBER OF BITS IN THE BLOCK HEADER.
*                 THE ACTUAL NUMBER OF CM WORDS WILL ACTUALLY BE THE
*                 THE BIT COUNT DIVIDED BY 80.
  
  
 VBS      ENM    X                 ENTRY/EXIT 
          LDM    HDR+R.PTXTLN+1 
          SHN    -8 
          SHN    14 
          LMM    HDR+R.PTXTLN 
          SHN    4                 NUMBER OF BITS IN BLOCKS 
          STD    D.T4              SAVE TEXT LENGTH 
          SHN    -12
          STD    D.T3 
          SHN    12 
          LMD    D.T4 
          SHN    -4                BITS/16
          STD    D.T0              SAVE THE NUMBER OF PP WORDS
          RJM    DV5               DIVIDE BY 5
          STD    REMWORDS          WORDS = BITS/80
          SHN    3                 (MAY OVERFLOW DO NOT USE W * 16) 
          STD    D.T1              CMWORDS*8
          SHN    3                 CMWORDS*64 
          ADD    D.T1              CMWORDS*72 
          ADD    D.T1              CMWORDS*80 
          SBD    D.T4              CALCULATE COUNT - ACTUAL COUNT 
          SHN    6
          SBD    D.T3 
          ZJN    VBS3              IF INPUT WAS A MULTIPLE OF CM WORDS
 VBS1     LDK    -NADLRE6          BLOCK WAS NOT A MULTIPLE OF CM WORDS 
          UJK    VBSX 
  
 VBS2     LDK    -NADLRE3          DATA LENGTH/HEADER LENGTH MISMATCH 
          UJK    VBSX 
  
 VBS3     LDD    BUFBYTES          CALCULATE BYTES INPUT - ACTUAL LGTH
          SBD    D.T0 
          MJN    VBS2              IF NOT ENOUGH DATA INPUT 
          LDD    D.T0 
          STD    BUFBYTES          RESET BUFBYTES TO ACTUAL SIZE
          LDM    HDR+R.PDBC 
          STD    DBC               EXTRACT DATA BLOCK CLARIFIER 
          SHN    17-S.PRU 
          MJN    VBS4              IF PRU BLOCK 
          LDN    FETNTPRU          BLOCK IS NOT PRU BLOCK 
          UJK    VBSX 
  
 VBS4     LDC    NPRU/5            CALCULATE  MAX SIZE - SIZE 
          SBD    REMWORDS 
          ZJN    VBS6              IF FULL BLOCK
          PJN    VBS5              IF SHORT BLOCK 
          LDK    -NADLRE2          BLOCK GREATER THAN FULL BLOCK SIZE 
          UJK    VBSX 
  
 VBS5     LDD    DBC
          SHN    17-S.EOI 
          MJN    VBS6              IF EOI 
          SHN    S.EOI-S.EOR
          MJN    VBS6              IF EOR 
          LDK    -NADLRE4 
          UJK    VBSX 
  
 VBS6     LDN    0                 VALID BLOCK
          UJK    VBSX 
DV5       SPACE  4,10 
**        DV5 - DIVIDE BY FIVE
* 
*         ENTRY  (A) = NUMBER TO BE DIVIDED.
* 
*         EXIT   (A) = NUMBER DIVIDED BY FIVE.
  
  
 DV5      ENM    X
          STD    D.T1 
          SHN    1                 2*VALUE
          ADD    D.T1              3*VALUE
          SHN    2                 12*VALUE 
          ADD    D.T1              13*VALUE 
          SHN    12                (13*VALUE)/64
          STD    D.T2 
          SHN    8                 4*13*VALUE 
          SBD    D.T1              51*VALUE 
          ADD    D.T2              51*VALUE+(13*VALUE)/64 
          SHN    -8                (51*VALUE+(13*VALUE)/64)/256 
          UJN    DV5X 
WDC       SPACE  4,10 
**        WDC - WRITE DATA INTO CM. 
* 
*         IF NOS/BE THEN OBTAIN FIELD ACCESS. 
*         IF READC FUNCTION 
*         THEN
*           CALL WCW ROUTINE TO WRITE CONTROL WORD FORMATTED DATA.
*         ELSE
*           SET UP BUFFER POINTER.
*           WRITE BUFFER TO CM. 
*           IF ADDRESS ERROR
*           THEN
*             RETURN FET PARAMETER ERROR. 
* 
*         ENTRY - PP BUFFER CONTAINS (REMWORDS) OF DATA.
* 
*         EXIT  - (A) = 0, SUCCESSFUL WRITE.
*                     > 0, FET ERROR CODE.
  
  
 WDC      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          RJM    R.RAFL            MUST OBTAIN FIELD ACCESS 
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          SBK    FFREAD 
          ZJN    WDC1              IF FET I/O READ
          RJM    WCW               WRITE CONTROL WORD FORMATTED DATA
          UJN    WDCX 
  
 WDC1     LDC    BUFR 
          STD    D.T0              WARNING (D.TO) CONTAINS BUFFER PTR 
          LDD    REMWORDS 
          RJM    WBB               WRITE BINARY BUFFER
          ZJN    WDC2              IF ADDRESS ERROR 
          LDN    0                 SUCCESSFUL WRITE 
          UJN    WDCX 
  
 WDC2     LDN    FETPERR
          UJN    WDCX 
WBB       SPACE  4,10 
**        WBB - WRITE BINARY BUFFER.
* 
*         FILL BUFFER FROM IN TO LIMIT. 
*         UPDATE IN POINTER.
*         IF IN EQ LIMIT
*         THEN
*           SET IN = FIRST. 
*         IF MORE DATA TO SEND
*         THEN
*           WRITE REMAINDER OF DATA TO BUFFER.
*           UPDATE IN POINTER.
* 
*         ENTRY  (A) = CM WORD COUNT. 
*                (D.T0) = PP BUFFER ADDRESS.
* 
*         EXIT   (A) .NE. 0, NORMAL RETURN. 
*                    = 0, ADDRESS ERROR.
  
  
 WBB      ENM    X                 ENTRY/EXIT 
          STD    D.T2              SET FIRST PART WORD COUNT
          STD    D.T1              SAVE CM WORD COUNT 
          SBN    1
          MJN    WBBX              IF NO DATA TO WRITE
          LDD    D.T0 
          STM    WBBA              SET WRITE ADDRESS
          LDD    INPNT
          SBD    LIMIT             CALCULATE IN - LIMIT + WORD COUNT
          SHN    12 
          ADD    INPNT+1
          SBD    LIMIT+1
          ADD    D.T1 
          MJN    WBB1              IF NO WRAP AROUND
          STD    D.T3              SET SECOND PART WORD COUNT 
          LDD    D.T1 
          SBD    D.T3 
          STD    D.T2              SET FIRST PART WORD COUNT
 WBB1     LDD    INPNT
          SHN    12 
          LMD    INPNT+1
          ADD    D.T2              VALIDATE LAST WORD BEING WRITTEN 
          ADDRA  ER=WBBX
          SBD    D.T2 
          CWM    *,D.T2            WRITE CM BUFFER
 WBBA     EQU    *-1
          LDD    D.T2 
          RAD    INPNT+1           ADVANCE IN POINTER 
          SHN    -12
          RAD    INPNT
          SBD    LIMIT             CALCULATE IN - LIMIT 
          SHN    12 
          ADD    INPNT+1
          SBD    LIMIT+1
          NJN    WBB2              IF NOT AT LIMIT
          LDD    FIRST
          STD    INPNT             RESET IN POINTER TO FIRST
          LDD    FIRST+1
          STD    INPNT+1
          LDD    D.T2              ADVANCE PP BUFFER ADDRESS
          SHN    2                 *4 
          ADD    D.T2              *5 
          RAM    WBBA 
          LDD    D.T3 
          ZJN    WBB2              IF NO SECOND PART
          STD    D.T2              SET WORD COUNT 
          LDN    0
          STD    D.T3              CLEAR SECOND PART WORD COUNT 
          LJM    WBB1 
  
 WBB2     LDN    1                 NORMAL RETURN
          LJM    WBBX 
WCW       SPACE  4,10 
**        WCW - WRITE CONTROL WORD FORMATTED DATA.
* 
*         ASLONGAS NO ERRORS
*           AND (DATA LEFT OR (SHORT BLOCK AND EOR NOT WRITTEN))
*         DO
*           BUILD CONTROL WORD. 
*           IF SHORT PRU
*           THEN
*             PUT ACTUAL BYTE COUNT IN CONTROL WORD.
*             INSERT LEVEL NUMBER.
*           WRITE PRU TO CM.
* 
*         ENTRY - (BUFR) POINTS TO A BUFFER OF (REMWORDS) OF DATA.
*                 (BUFBYTES) = LENGTH OF DATA IN PP BYTES.
*                 (DBC) = DATA BLOCK CLARIFIER. 
* 
*         EXIT  - (A) = 0, SUCCESSFUL WRITE TO CM.
*                     > 0, FET PARAMETER ERROR. 
  
  
 WCW      ENM    X                 ENTRY/EXIT 
          LDC    BUFR-5            INITIALIZE BUFFER POINTER
          STD    D.T0              WARNING (D.T0) IS BUFFER POINTER 
          LDD    DBC
          SHN    17-S.EOR 
          MJN    WCW1              IF END OF RECORD 
          LDD    REMWORDS 
          ZJN    WCWX              IF NO DATA TO WRITE
 WCW1     LDN    0
          STI    D.T0              BUILD CONTROL WORD 
          STM    2,D.T0 
          STM    3,D.T0 
          LDC    100B 
          STM    1,D.T0            PRU SIZE 
          LDC    500B 
          STM    4,D.T0            DEFAULT BYTE COUNT 
          LDC    -500B
          RAD    BUFBYTES 
          PJN    WCW2              IF FULL PRU OF DATA LEFT 
          ADC    500B 
          STM    4,D.T0            ACTUAL BYTE COUNT
          ADD    D.T0 
          ADN    5
          STD    D.T1              FIRST BYTE BEYOND DATA 
          LDD    DBC
          LPN    M.LVL
          STI    D.T1              INSERT LEVEL NUMBER
 NOS      IF     DEF,NOS
          LDD    REMWORDS          WORDS REMAINING
          ADN    2                 PLUS HDR AND LEVEL NUM WORDS 
          UJN    WCW3 
  
 WCW2     LDC    102B              FULL PRU SIZE
 WCW3     BSS    0
 NOS      ELSE
 WCW2     LDC    101B              PRU SIZE 
 NOS      ENDIF 
          RJM    WBB               WRITE PRU TO CM
          ZJN    WCW7              IF ADDRESS ERROR 
          LDC    -100B
          RAD    REMWORDS          UPDATE WORD COUNT
          MJN    WCW6              IF NO DATA LEFT AND EOR WRITTEN
          ZJN    WCW5              IF NO DATA LEFT
          LDC    500B 
          RAD    D.T0              ADVANCE BUFFER POINTER 
 WCW4     LJM    WCW1 
  
 WCW5     LDD    DBC
          SHN    17-S.EOR 
          MJN    WCW4              IF EOR TO BE WRITTEN 
 WCW6     LDN    0                 SUCCESSFUL WRITE 
          UJK    WCWX 
  
 WCW7     LDN    FETPERR           FET PARAMETER ERROR
          UJK    WCWX 
UPI       SPACE  4,10 
**        UPI - UPDATE IN AND ABN WITHIN UCP FET. 
* 
*         UPDATE BLOCK COUNT AND ABN. 
*         REWRITE FET WORD FIVE. (ABN,UBC,DD) 
*         REWRITE FET IN POINTER. 
*         IF FET BUFFER GETTING FULL
*         THEN
*           RECALL UCP TO UPDATE POINTERS.
* 
*         ENTRY  (BLKERR) = STATUS OF BLOCK BEING INPUT.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    = FETPERR, ADDRESS ERROR.
  
  
 UPI      ENM    X                 ENTRY/EXIT 
          AOM    BLKCNT+C.READ+1  INCREMENT BLOCKS READ 
          SHN    -12
          RAM    BLKCNT+C.READ
          AOM    FETWD5+C.FABN+1   ADVANCE ABN
          SHN    -12
          RAM    FETWD5+C.FABN
          FETREL 5
          ZJN    UPI2              IF ADDRESS ERROR 
          CWM    FETWD5,ONE        WRITE ABN, UBC, AND DD.
          LDK    P.ZERO 
          CRD    D.T0 
          LDD    INPNT
          STD    D.T0+C.PT         SET UP IN POINTER
          LDD    INPNT+1
          STD    D.T0+C.PT+1
          FETREL 2
          ZJN    UPI2              IF ADDRESS ERROR 
          CWD    D.T0              WRITE IN 
          RJM    CSA               CALCULATE SPACE AVAILABLE
          SHN    -6 
          SBK    MSBEFRC           MINIMUM BUFFER SPACE 
          PJN    UPI1              IF PLENTY OF SPACE AVAILABLE 
          LDK    M.RCLCP
          RJM    R.MTR             WAKE UP UCP TO MOVE POINTERS 
 UPI1     LDM    BLKERR 
          UJK    UPIX 
  
 UPI2     LDN    FETPERR           FET PARAMETER ERROR
          UJK    UPIX 
RCP       SPACE  4,10 
**        RCP - READ COMPLETE.
* 
*         IF READ FUNCTION
*           AND (EOR OR EOI)
*         THEN
*           INSERT LEVEL NUMBER IN FET. 
*           INSERT END OF RECORD OR PARTITION IN FET. 
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
  
  
 RCP      ENM    X                 ENTRY/EXIT 
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          LMK    FFREAD 
          NJN    RCPX              IF NOT READ FUNCTION 
          LDD    D.T0+C.COMP
          SCN    30B               CLEAR LEVEL BITS 
          STD    D.T0+C.COMP
          LDD    DBC
          SHN    17-S.EOI 
          PJN    RCP2              IF NOT EOI 
          LDN    74B
          RAD    D.T0+C.LVL        SET LEVEL 17 
 RCP1     LDN    30B
          RAD    D.T0+C.COMP       SET END OF PARTITION 
          UJN    RCPX 
  
 RCP2     SHN    S.EOI-S.EOR
          PJN    RCPX              IF NOT EOR 
          LDD    DBC
          LPN    M.LVL
          SHN    2
          RAD    D.T0+C.LVL        INSERT LEVEL 
          LDD    DBC
          LPN    M.LVL
          LMN    17B
          ZJN    RCP1              IF END OF PARTITION
          LDN    20B
          RAD    D.T0+C.COMP       SET END OF RECORD
          UJN    RCPX 
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTFETWD-* 
          TTL    NDR/2NU - FET I/O WRITE CONVERT MODE.
          TITLE 
          QUAL   2NU
          IDENT  2NU,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - WRITE CONVERT MODE DATA. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION. 1983.
 CMWRITE  EQU    1
 CONMODE  EQU    1
*CALL COMFETIO
WCM       TITLE  WCM - WRITE DATA IN CONVERT MODE.
**        WCM - WRITE DATA IN CONVERT MODE. 
* 
*         VALIDATE FET PARAMETERS.
*         IF FET PARAMETERS VALID 
*         THEN
*           ASLONGAS DATA AVAILABLE 
*             AND NAD BUFFERS AVAILABLE 
*             AND NOT FUNCTION COMPLETE 
*             AND NO ERRORS 
*           DO
*             WAIT FOR DATA.
*             IF DATA AVAILABLE 
*               AND NO ERRORS 
*             THEN
*               READ BLOCK FROM CM BUFFER.
*               IF NO ERRORS
*               THEN
*                 WRITE BLOCK TO NAD. 
*                 IF SUCCESSFUL WRITE 
*                 THEN
*                   UPDATE OUT POINTER AND ABN. 
* 
*         ENTRY - REQUEST BLOCK READ INTO D.REQ1 AND D.REQ2.
*                 FET WORD 5 READ INTO FETWD5.
*                 EVENT WORD AND BLOCK COUNT WORD ZEROED. 
*                 IF NOS/BE THEN MUST HAVE FIELD ACCESS.
* 
*         EXIT  - (A) > 0, SET FET COMPLETE WITH (A) = FET REPLY CODE.
*                     = 0, NO OUTPUT BUFFERS. DO NOT SET FET COMPLETE.
*                     < 0, NAD ERROR OR TIMEOUT WHILE WAITING FOR DATA
*                          OR NAD BUFFERS. SET FET COMPLETE.
  
  
 WCM      ENM    X                 ENTRY/EXIT 
          RJM    VFP               VALIDATE FET PARAMETERS
          NJN    WCMX              IF FET PARAMETER ERROR 
 WCM1     RJM    WFD               WAIT FOR DATA
          NJN    WCMX              IF ERROR OR NO DATA AVAILABLE
          RJM    RBC               READ BLOCK FROM CM BUFFER
          NJN    WCMX              IF BUFFER POINTER ERROR
          RJM    WNB               WRITE NETWORK BLOCK
          NJN    WCMX              IF ERROR OR RETRIES EXHAUSTED
          LDD    DBC
          ZJN    WCMX              NO BUFFERS, TELL RHF TO RE-ISSUE 
          RJM    UPO               UPDATE OUT POINTER AND ABN 
          NJN    WCMX              IF ERROR OR FUNCTION COMPLETE
          UJN    WCM1 
VFP       SPACE  4,10 
**        VFP - VALIDATE FET PARAMETERS.
* 
*         IF INVALID DD 
*         THEN
*           RETURN FET PARAMETER ERROR. 
*         ELSE
*           SET MINIMUM BUFFER SIZE.
*           READ FET BUFFER POINTERS. 
*           IF NO ADDRESS ERRORS
*           THEN
*             VALIDATE FET BUFFER POINTERS. 
* 
*         ENTRY - FET WORD 5 READ INTO FETWD5.
* 
*         EXIT  - (A) = 0, FIRST, LIMIT, AND OUT ARE SAVED AND VALID. 
*                     > 0, FET PARAMETER ERROR. 
  
  
 VFP      ENM    X                 ENTRY/EXIT 
          LDM    FETWD5+C.DD
          SBK    DDAS+1 
          PJN    VFP1              IF INVALID DD
          ADK    DDAS-DDDC+1
          MJN    VFP1              IF NOT ASCII OR DISPLAY CODE 
          STD    DD                (0=DISPLAY CODE) AND (1=ASCII) 
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          STD    D.T1 
          LDM    MINBUFS,D.T1 
          STD    BUFSIZE
          RJM    RFB               READ FET BUFFER POINTERS 
          NJN    VFPX              IF ADDRESS ERROR 
          RJM    VFB               VALIDATE FET BUFFER POINTERS 
          UJK    VFBX 
  
 VFP1     LDN    FETPERR
          UJK    VFPX 
  
 MINBUFS  BSS    0                 MINIMUM BUFFER SIZES 
          CON    RECSIZEK          FOR WRITE
          CON    0                 FOR WRITER 
          CON    0                 FOR WRITEF 
          CON    0                 FOR CLOSE
 NOS      IF     DEF,NOS
          CON    RECSIZEK/100B+RECSIZEK/100B+RECSIZEK    (FOR WRITEC) 
 NOS      ELSE
          CON    RECSIZEK/100B+RECSIZEK                  (FOR WRITEC) 
 NOS      ENDIF 
RFB       SPACE  4,10 
**        RFB - READ FET BUFFER POINTERS. 
* 
*         READ FIRST. 
*         IF ADDRESS ERROR
*         THEN
*           RETURN FET PARAMETER ERROR. 
*         ELSE
*           READ OUT. 
*           IF ADDRESS ERROR
*           THEN
*             RETURN FET PARAMETER ERROR. 
*           ELSE
*             READ LIMIT. 
*             IF ADDRESS ERROR OR LIMIT INVALID 
*             THEN
*               RETURN FET PARAMETER ERROR. 
*             ELSE
*               RETURN (A) = 0. 
* 
*         ENTRY - NONE. 
* 
*         EXIT  - (A) = 0, LIMIT,FIRST, AND OUT SAVED.
*                     > 0, FET PARAMETER ERROR. 
  
  
 RFB      ENM    X                 ENTRY/EXIT 
          FETREL 1
          ZJN    RFB1              IF ADDRESS ERROR 
          CRD    D.T0              READ FIRST 
          LDD    D.T0+C.PT
          LPN    77B
          STD    FIRST             SAVE FIRST 
          LDD    D.T0+C.PT+1
          STD    FIRST+1
          FETREL 3
          ZJN    RFB1              IF ADDRESS ERROR 
          CRD    D.T0              READ OUT 
          LDD    D.T0+C.PT
          LPN    77B
          STD    OUTPNT            SAVE OUT 
          LDD    D.T0+C.PT+1
          STD    OUTPNT+1 
          FETREL 4
          ZJN    RFB1              IF ADDRESS ERROR 
          CRD    D.T0              READ LIMIT 
          LDD    D.T0+C.PT
          LPN    77B
          STD    LIMIT             SAVE LIMIT 
          SHN    12 
          LMD    D.T0+C.PT+1
          STD    LIMIT+1
          NJN    RFB2              IF LIMIT NE 0
 RFB1     LDN    FETPERR
          UJK    RFBX 
  
 RFB2     ADDRA  ER=RFB1           IF LIMIT NOT WITHIN FL 
          LDN    0
          UJK    RFBX 
VFB       SPACE  4,10 
**        VFB - VALIDATE FET BUFFER POINTERS. 
* 
*         IF FIRST NOT LT LIMIT 
*         THEN
*           RETURN FET PARAMETER ERROR. 
*         ELSE
*           IF BUFFER NOT LARGE ENOUGH
*           THEN
*             RETURN FET PARAMETER ERROR. 
*           ELSE
*             IF OUT LT FIRST OR OUT GE LIMIT 
*             THEN
*               RETURN FET PARAMETER ERROR. 
*             ELSE
*               RETURN (A) = 0. 
* 
*         ENTRY - FIRST, OUTPNT, LIMIT, AND BUFSIZE SET UP. 
* 
*         EXIT  - (A) = 0, FET BUFFER PARAMETERS ARE VALID. 
*                     > 0, FET PARAMETER ERROR. 
  
  
 VFB      ENM    X                 ENTRY/EXIT 
          LDD    LIMIT             CALCULATE LIMIT - FIRST - 1
          SBD    FIRST
          SHN    12 
          ADD    LIMIT+1
          SBD    FIRST+1
          SBN    1
          MJN    VFB1              IF FIRST NOT LT LIMIT
          SBD    BUFSIZE
          MJN    VFB1              IF BUFFER TOO SMALL
          LDD    OUTPNT            CALCULATE OUT - LIMIT
          SBD    LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          PJN    VFB1              IF OUT NOT LT LIMIT
          LDD    OUTPNT            CALCULATE OUT - FIRST
          SBD    FIRST
          SHN    12 
          ADD    OUTPNT+1 
          SBD    FIRST+1
          MJN    VFB1              IF OUT NOT GE FIRST
          LDN    0                 PARAMETERS VALID 
          UJK    VFPX 
  
 VFB1     LDN    FETPERR
          UJK    VFBX 
WFD       SPACE  4,10 
**        WFD -  WAIT FOR DATA TO WRITE.
* 
*         ASLONGAS MINIMUM DATA REQUIRED NOT AVAILABLE
*           AND NO ERRORS 
*           AND RETRIES NOT EXHAUSTED 
*         DO
*           READ IN POINTER.
*           IF IN POINTER VALID 
*           THEN
*             CALCULATE DATA AVAILABLE. 
*             IF NOT ENOUGH DATA AVAILABLE
*               AND FUNCTION IS WRITEC
*             THEN
*               CHECK FOR SHORT PRU.
*             IF NOT ENOUGH DATA AVAILABLE
*             THEN
*               DELAY A WHILE.
* 
*         ENTRY - FIRST, OUTPNT, LIMIT, AND BUFSIZE SET UP. 
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, ENOUGH DATA AVAILABLE TO SEND BLOCK. 
*                     < 0, TIMED OUT WAITING FOR DATA.
  
  
 WFD      ENM    X                 ENTRY/EXIT 
          LDK    DELRTY 
          STM    DELA              INITIALIZE RETRY COUNTER 
 WFD1     RJM    RVI               READ AND VALIDATE IN POINTER 
          NJN    WFDX              IF ERROR 
          RJM    CDA               CALCULATE DATA AVAILABLE 
          SBD    BUFSIZE
          PJN    WFD3              IF ENOUGH DATA AVAILABLE 
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          LMK    FFWRITEC 
          NJN    WFD2              IF NOT WRITEC
          RJM    CFP               CHECK FOR SHORT PRU
          PJN    WFDX              IF ADDRESS ERROR OR SHORT PRU
 WFD2     RJM    DEL               DELAY A WHILE
          PJN    WFD1              IF RETRIES NOT EXHAUSTED 
          UJK    WFDX 
  
 WFD3     LDN    0
          UJK    WFDX 
RVI       SPACE  4,10 
**        RVI - READ AND VALIDATE IN POINTER. 
* 
*         READ IN POINTER.
*         IF ADDRESS ERROR
*         THEN
*           RETURN FET PARAMETER ERROR. 
*         ELSE
*           IF IN POINTER NOT VALID 
*           THEN
*             RETURN FET PARAMETER ERROR. 
*           ELSE
*             RETURN (A) = 0. 
* 
*         ENTRY - LIMIT AND FIRST SET UP. 
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, IN POINTER VALID.
  
  
 RVI      ENM    X                 ENTRY/EXIT 
          FETREL 2
          ZJN    RVI1              IF ADDRESS ERROR 
          CRD    D.T0              READ IN POINTER
          LDD    D.T0+C.PT+1
          STD    INPNT+1           SAVE IN POINTER
          LDD    D.T0+C.PT
          LPN    77B
          STD    INPNT             CALCULATE OUT - LIMIT
          SBD    LIMIT
          SHN    12 
          ADD    INPNT+1
          SBD    LIMIT+1
          PJN    RVI1              IF IN NOT LT LIMIT 
          LDD    INPNT             CALCULATE IN - FIRST 
          SBD    FIRST
          SHN    12 
          ADD    INPNT+1
          SBD    FIRST+1
          MJN    RVI1              IF IN NOT GE FIRST 
          LDN    0
          UJK    RVIX 
  
 RVI1     LDN    FETPERR
          UJK    RVIX 
CDA       SPACE  4,10 
**        CDA - CALCULATE DATA AVAILABLE. 
* 
*         CALCULATE DATA FROM OUT TO IN.
*         IF DATA NOT IN ONE PIECE
*         THEN
*           DATA = TOTAL BUFFER SIZE - DATA FROM OUT TO IN. 
* 
*         ENTRY - FIRST, INPNT, OUTPNT, LIMIT, AND BUFSIZE SET UP.
* 
*         EXIT  - (A) = THE AMOUNT OF DATA AVAILABLE. 
  
  
 CDA      ENM    X                 ENTRY/EXIT 
          LDD    INPNT             CALCULATE IN - OUT 
          SBD    OUTPNT 
          SHN    12 
          ADD    INPNT+1
          SBD    OUTPNT+1 
          PJN    CDAX              IF DATA IN ONE PIECE 
          ADD    LIMIT+1           CALCULATE (OUT-IN)+(LIMIT-FIRST) 
          SBD    FIRST+1
          SHN    6
          ADD    LIMIT
          SBD    FIRST
          SHN    12 
          UJN    CDAX 
CFP       SPACE  4,10 
**        CFP - CHECK FOR SHORT PRU.
* 
*         SAVE OUT POINTER. 
*         INTIALIZE PRU COUNT, RETURN CODE, AND BUFFER POINTER. 
*         ASLONGAS DATA IN BUFFER 
*           AND SHORT PRU NOT FOUND 
*           AND FULL BLOCK NOT FOUND
*           AND NO ERRORS 
*         DO
*           READ CONTROL WORD.
*           IF THE PRU IS COMPLETELY IN THE BUFFER
*           THEN
*             ADVANCE THE OUT POINTER.
*             IF SHORT PRU
*             THEN
*               SET SHORT PRU FLAG. 
*             ELSE
*               INCREMENT FULL PRU COUNT. 
* 
*         ENTRY - NONE. 
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, FULL BLOCK OR SHORT BLOCK AVAILABLE. 
*                     < 0, NOT ENOUGH DATA FOR WRITE. 
  
  
 CFP      ENM    X                 ENTRY/EXIT 
          LDD    OUTPNT 
          STD    D.Z6              SAVE OUT POINTER 
          LDD    OUTPNT+1 
          STD    D.Z7 
          LDK    BUFW 
          STD    D.T0              INITIALIZE BUFFER POINTER
          LDN    1
          STM    CFPA              INITIALIZE DATA FOR BLOCK NOT AVAIL
          LDN    0
          STD    D.Z2              INITIALIZE FULL PRU COUNTER
 CFP1     RJM    CDA               CHECK DATA AVAILABLE 
          SBN    2
          MJN    CFP3              IF NOT ENOUGH ROOM FOR HEADER
          LDN    1
          RJM    RBB               READ HEADER WORD 
          ZJN    CFP2              IF ADDRESS ERROR 
 NOS      IF     DEF,NOS
          LDM    4,D.T0            GET PRU SIZE 
          RJM    DV5               CHANGE TO CM WORDS 
          ADN    1                 ADD IN LEVEL NUMBER WORD 
 NOS      ELSE
          LDC    100B              PRU SIZE 
 NOS      ENDIF 
          STD    D.Z1              SAVE PRU SIZE
          RJM    CDA               CALCULATE DATA AVAILABLE 
          SBD    D.Z1 
          MJN    CFP3              IF NOT ENOUGH DATA IN BUFFER 
          LDD    D.Z1 
          RJM    AOT               ADVANCE OUT POINTER
          LDM    4,D.T0 
          SBK    500B 
          MJN    CFP5              IF SHORT PRU FOUND 
          NJN    CFP6              IF INVALID PRU SIZE
          AOD    D.Z2              INCREMENT PRU COUNTER
          SBK    RECSIZEK/100B
          PJN    CFP5              IF FULL BLOCK FOUND
          UJN    CFP1 
  
 CFP2     LDN    FETPERR
          UJK    CFPX 
  
 CFP3     LDD    D.Z6 
          STD    OUTPNT 
          LDD    D.Z7 
          STD    OUTPNT+1          RESET OUT POINTER
          LDC    0
 CFPA     EQU    *-1
          ZJN    CFP4              IF ENOUGH DATA FOR BLOCK 
          LCN    0
 CFP4     UJK    CFPX 
  
 CFP5     LDN    0
          STM    CFPA              SET DATA AVAILABLE FLAG
          UJN    CFP3 
  
 CFP6     LDN    FETCWER           FET CONTROL WORD ERROR 
          UJK    CFPX 
DV5       SPACE  4,10 
**        DV5 - DIVIDE BY FIVE
* 
*         ENTRY  (A) = NUMBER TO BE DIVIDED.
* 
*         EXIT   (A) = NUMBER DIVIDED BY FIVE.
  
  
 DV5      ENM    X
          STD    D.T1 
          SHN    1                 2*VALUE
          ADD    D.T1              3*VALUE
          SHN    2                 12*VALUE 
          ADD    D.T1              13*VALUE 
          SHN    12                (13*VALUE)/64
          STD    D.T2 
          SHN    8                 4*13*VALUE 
          SBD    D.T1              51*VALUE 
          ADD    D.T2              51*VALUE+(13*VALUE)/64 
          SHN    -8                (51*VALUE+(13*VALUE)/64)/256 
          UJN    DV5X 
AOT       SPACE  4,10 
**        AOT - ADVANCE OUT POINTER.
* 
*         ENTRY  (A) = AMOUNT TO ADVANCE. 
* 
*         EXIT   NONE.
  
  
 AOT      ENM    X                 ENTRY/EXIT 
          RAD    OUTPNT+1          ADVANCE OUT POINTER
          SHN    -12
          RAD    OUTPNT 
          SBD    LIMIT             CALCULATE OUT - LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          MJN    AOTX              IF NOT AT LIMIT
          ADD    FIRST+1
          STD    OUTPNT+1          WRAP OUT POINTER PAST FIRST
          SHN    -12
          ADD    FIRST
          STD    OUTPNT 
          UJN    AOTX 
RBC       SPACE  4,10 
**        RBC - READ BLOCK FROM CM BUFFER.
* 
*         INITIALE BLOCK SIZE, BLOCK TYPE, AND BLOCK POINTER. 
*         IF CLOSE
*         THEN
*           SET BLOCK TYPE TO EOI.
*         ELSE
*           IF WRITEC 
*           THEN
*             CALL RCW TO READ UP CONTROL WORD FORMATTED DATA.
*           ELSE
*             CALCULATE DATA AVAILABLE. 
*             IF SHORT PRU
*             THEN
*               SET EOR AND LEVEL NUMBER IN DBC 
*             READ BLOCK INTO PP. 
*           CONVERT LENGTH OF BLOCK TO PP BYTES.
* 
*         ENTRY - ENOUGH DATA AVAILABLE TO CREATE A NETWORK BLOCK.
*                 IF NOS/BE THE MUST HAVE FIELD ACCESS. 
* 
*         EXIT  - (A) > 0, FET PARAMETER ERROR. 
*                     = 0, BLOCK READ INTO PP BUFFER AND
*                          (REMWORDS) = LENGTH OF BLOCK IN CM WORDS.
*                          (BUFBYTES) = PP BYTES TO OUTPUT. 
*                          (DBC) = CORRECT BLOCK ATTRIBUTES.
  
  
 RBC      ENM    X
          LDN    0
          STD    BUFBYTES 
          STD    REMWORDS          BLOCK SIZE 
          LDK    M.PRU
          STD    DBC               DATA BLOCK CLARIFIER 
          LDK    BUFW 
          STD    D.T0              FWA OF PP BUFFER 
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          LMK    FFCLOSE
          NJN    RBC1              IF NOT CLOSE 
          LDK    M.EOI
          RAD    DBC               SET FOR EOI BLOCK
          LDN    0
          UJK    RBCX 
  
 RBC1     LMK    FFWRITEC&FFCLOSE 
          NJN    RBC2              IF NOT WRITEC
          RJM    RCW               READ CONTROL WORD FORMATTED DATA 
          NJN    RBCX              IF FET ERROR 
          UJN    RBC5 
  
 RBC2     RJM    CDA               CALCULATE DATA AVAILABLE 
          SBD    RECSIZE
          PJN    RBC3              IF FULL BLOCK AVAILABLE
          ADD    RECSIZE
          STD    REMWORDS          SAVE BLOCK LENGTH
          FETREL 0
          ZJN    RBC6              IF ADDRESS ERROR 
          CRD    D.Z1              READ LEVEL NUMBER WORD 
          LDD    D.Z1+C.LVL 
          SHN    -2 
          LPN    M.LVL
          LMK    M.EOR
          RAD    DBC               SET EOR AND LEVEL NUMBER 
          LDD    REMWORDS 
          UJN    RBC4 
  
 RBC3     LDD    RECSIZE
          STD    REMWORDS          SET FULL BLOCK 
 RBC4     RJM    RBB               READ BLOCK INTO PP BUFFER
          ZJN    RBC6              IF ADDRESS ERROR 
 RBC5     LDD    REMWORDS 
          SHN    2                 WORDS*4
          ADD    REMWORDS          WORDS*5
          STD    BUFBYTES          SAVE BYTES TO OUTPUT 
          LDN    0
          UJK    RBCX 
  
 RBC6     LDN    FETPERR
          UJK    RBCX 
RBB       SPACE  4,10 
**        RBB - READ BINARY BUFFER. 
* 
*         READ DATA FROM OUT UP TO LIMIT. 
*         UPDATE OUT POINTER. 
*         IF OUT EQ LIMIT 
*         THEN
*           SET OUT = FIRST.
*         IF MORE DATA TO BE READ 
*         THEN
*           READ REMAINDER OF BLOCK.
*           UPDATE OUT POINTER. 
* 
*         ENTRY  (A) = CM WORD COUNT. 
*                (D.T0) = PP BUFFER ADDRESS.
*                IF NOS/BE THEN MUST HAVE FIELD ACCESS. 
* 
*         EXIT   (A) .NE. 0, NORMAL RETURN. 
*                    = 0, ADDRESS ERROR.
  
  
 RBB      ENM    X                 ENTRY/EXIT 
          STD    D.T2              SET FIRST PART WORD COUNT
          STD    D.T1              SAVE CM WORD COUNT 
          SBN    1
          MJN    RBBX              IF NO DATA TO READ 
          LDD    D.T0 
          STM    RBBA              SET READ ADDRESS 
          LDD    OUTPNT            CALCULATE OUT - LIMIT + WORD COUNT 
          SBD    LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          ADD    D.T1 
          MJN    RBB1              IF NO WRAP AROUND
          STD    D.T3              SET SECOND PART WORD COUNT 
          LDD    D.T1 
          SBD    D.T3 
          STD    D.T2              SET FIRST PART WORD COUNT
 RBB1     LDD    OUTPNT 
          SHN    12 
          LMD    OUTPNT+1 
          ADD    D.T2              VALIDATE LAST WORD BEING READ
          ADDRA  ER=RBBX
          SBD    D.T2 
          CRM    *,D.T2            READ CM BUFFER 
 RBBA     EQU    *-1
          LDD    D.T2 
          RAD    OUTPNT+1          ADVANCE OUT POINTER
          SHN    -12
          RAD    OUTPNT 
          SBD    LIMIT             CALCULATE OUT - LIMIT
          SHN    12 
          ADD    OUTPNT+1 
          SBD    LIMIT+1
          MJN    RBB2              IF NOT AT LIMIT
          LDD    FIRST
          STD    OUTPNT            RESET OUT POINTER TO FIRST 
          LDD    FIRST+1
          STD    OUTPNT+1 
          LDD    D.T2              ADVANCE PP BUFFER ADDRESS
          SHN    2                 *4 
          ADD    D.T2              *5 
          RAM    RBBA 
          LDD    D.T3 
          ZJN    RBB2              IF NO SECOND PART
          STD    D.T2              SET WORD COUNT 
          LDN    0
          STD    D.T3              CLEAR SECOND PART WORD COUNT 
          LJM    RBB1 
  
 RBB2     LDN    1                 NORMAL RETURN
          LJM    RBBX 
RCW       SPACE  4,10 
**        RCW - READ CONTROL WORD FORMATTED DATA. 
* 
*         ASLONGAS FULL BLOCK NOT READ
*           AND SHORT PRU NOT FOUND 
*           AND NO ERRORS 
*         DO
*           READ CONTROL WORD.
*           IF BAD PRU SIZE 
*           THEN
*             RETURN FET CONTROL WORD ERROR.
*           ELSE
*             IF FULL PRU 
*             THEN
*               READ PRU INTO PP. 
*               INCREMENT BLOCK SIZE. 
*             ELSE
*               CALCULATE PRU SIZE. 
*               READ PRU INTO PP. 
*               SET EOR AND LEVEL NUMBER. 
* 
*         ENTRY - (BUFBYTES), (REMWORDS), (DBC), AND (D.T0) INITIALIZED.
*                 IF NOS/BE THEN MUST HAVE FIELD ACCESS.
* 
*         EXIT  - (A) > 0, FET ERROR. 
*                     = 0, BLOCK SUCCESSFULLY READ INTO PP AND
*                          (REMWORDS) = BLOCK LENGTH IN CM WORDS. 
*                          (DBC) = BLOCK ATTRIBUTES.
  
  
 RCW      ENM    X                 ENTRY/EXIT 
 RCW1     LDN    1
          RJM    RBB               READ CONTROL WORD
          LDM    4,D.T0 
          STD    D.Z7              SAVE BYTE COUNT
          SBK    500B 
          MJN    RCW4              IF SHORT PRU 
          ZJN    RCW2              IF FULL PRU
          LDN    FETCWER
          UJK    RCWX 
  
 RCW2     BSS    0
 NOS      IF     DEF,NOS
          LDC    101B 
 NOS      ELSE
          LDC    100B 
 NOS      ENDIF 
          RJM    RBB               READ PRU 
          ZJN    RCW3              IF ADDESS ERROR
          LDC    100B 
          RAD    REMWORDS          INCREMENT BLOCK SIZE 
          SBD    RECSIZE
          ZJN    RCWX              IF BLOCK FULL
          LDK    500B 
          RAD    D.T0              UPDATE PP BUFFER POINTER 
          UJK    RCW1 
  
 RCW3     LDN    FETPERR
          UJK    RCWX 
  
 RCW4     LDD    D.Z7 
          RJM    DV5               CHANGE BYTES TO WORDS
          STD    D.Z6              SAVE PRU SIZE (FOR NOS)
          RAD    REMWORDS          INCREMENT BLOCK SIZE 
 NOS      IF     DEF,NOS
          LDD    D.Z6              PRU SIZE 
          ADN    1                 PLUS LEVEL NUMBER WORD 
 NOS      ELSE
          LDC    100B 
 NOS      ENDIF 
          RJM    RBB               READ PRU 
          LDD    D.Z7 
          RAD    D.T0              SET BUFFER POINTER BEYOND DATA 
          LDI    D.T0 
          LPN    M.LVL
          LMK    M.EOR
          RAD    DBC               SET EOR AND LEVEL NUMBER IN DBC
          LDN    0
          UJK    RCWX 
WNB       SPACE  4,10 
**        WNB - WRITE NETWORK BLOCK TO NAD. 
* 
*         IF NOS/BE THEN RELEASE FIELD ACCESS.
*         RESERVE CHANNEL.
*         ISSUE UNIVERSAL COMMAND AND PROCESS RESPONSE. 
*         IF BUFFER AVAILAILABLE
*         THEN
*           WRITE BLOCK.
*           IF SUCESSFUL WRITE
*           THEN
*             TEMPORARILY RELEASE CHANNEL.
* 
*         ENTRY - (BUFW) - (BUFW+BUFBYTES) = BLOCK TO BE WRITTEN. 
* 
*         EXIT - (A) > 0, FET ERROR.
*                     = 0 AND (DBC) = 0, NO BUFFERS AVAILABLE.
*                     = 0 AND (DBC) " 0, SUCCESSFUL WRITE.
*                     < 0, FATAL NAD ERROR OR RETRIES EXHAUSTED.
*                 IF NOS/BE THEN FIELD ACCESS IS TERMINATED.
  
  
 WNB      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            TERMINATE FIELD ACCESS 
          RJM    BBH               BUILD BLOCK HEADER 
          RJM    RES               RESERVE CHANNEL
 WNB1     LDD    D.REQ2+C.PATH
          STM    UNVCB+UC.PATH
          LDK    SFWC 
          STM    UNVCB+UC.SFC 
          RJM    IUR               ISSUE UNVC AND CHECK RESPONSE
          NJN    WNBX              IF FATAL ERROR 
          LDD    DBC
          ZJN    WNBX              IF NO BUFFERS AVAILABLE
          RJM    WDB               WRITE BLOCK
          MJN    WNBX              IF FATAL ERROR 
          NJN    WNB1              IF NON-FATAL ERROR, RETRY
          LDN    1
          RJM    REL               TEMPORARILY RELEASE CHANNEL
          LDN    0
          UJK    WNBX 
BBH       SPACE  4,10 
**        BBH - BUILD BLOCK HEADER. 
* 
*         CONVERT CM WORDS TO BITS. 
*         STORE TEXT LENGTH.
*         STORE PATH NUMBER.
*         STORE DATA BLOCK CLARIFIER. 
*         STORE ABN.
* 
*         ENTRY - (REMWORDS) = BLOCK LENGTH IN CM WORDS.
*                 (D.REQ2) = 2ND WORD OF NDR REQUEST. 
*                 (DBC) = DATA BLOCK CLARIFIER
*                 (FETWD5) = FIFTH WORD OF FET. 
* 
*         EXIT  - (HDR) = HEADER FOR CURRENT BLOCK. 
* 
*         NOTE  - WHEN SENDING DATA TO THE NAD FOR CONVERSION 
*                 12 PP BITS WILL BE MAPPED INTO 16 NAD BITS. 
*                 THE NUMBER OF BITS THE NAD WILL RECEIVE IS
*                 4/3 TIMES THE NUMBER OF PP BITS SENT OR 16
*                 TIMES THE NUMBER OF PP WORDS. 
  
  
 BBH      ENM    X                 ENTRY/EXIT 
          LDD    BUFBYTES 
          SHN    4                 BYTES*16 
          SHN    14 
          STM    HDR+R.PTXTLN      STORE UPPER 12 BITS OF LENGTH
          SHN    -14
          SHN    8
          STM    HDR+R.PTXTLN+1    STORE LOWER 4 BITS OF LENGTH 
          LDD    D.REQ2+C.PATH
          SHN    4                 SET IN UPPER 8 BITS
          STM    HDR+R.PCN         STORE PATH NUMBER
          LDN    BTMSG             MSG BLOK TYPE
          SHN    S.PBT
          ADD    DBC
          STM    HDR+R.PDBC        STORE DATA BLOCK CLARIFIER 
          LDM    FETWD5+C.FABN
          LPN    77B
          STM    HDR+R.PABN 
          LDM    FETWD5+C.FABN+1
          STM    HDR+R.PABN+1 
          UJK    BBHX 
IUR       SPACE  4,10 
**        IUR - ISSUE UNVC AND PROCESS RESPONSE.
* 
*         ISSUE UNVC. 
*         SEND UNVC FUNCTION BLOCK. 
*         WAIT FOR NAD RESPONSE.
*         PROCESS NAD RESPONSE. 
* 
*         ENTRY - CHANNEL RESERVED. 
*                 UNVC FUNCTION BLOCK SET UP. 
* 
*         EXIT  - (A) > 0, FET REPLY CODE.
*                     = 0 AND (DBC) = 0, NO BUFFERS AVAILABLE.
*                     = 0 AND (DBC) " 0, READY TO SEND BLOCK. 
*                     < 0, FATAL ERROR. 
  
  
 IUR      ENM    X                 ENTRY/EXIT 
 IUR1     LDK    FCUC 
          RJM    FFN               ISSUE UNIVERSAL COMMAND
          MJN    IUR2              IF NAD ERROR 
          LMK    RCUA&RCAK
          ZJN    IUR3 
          LCN    NADERRH           ABNORMAL RESPONSE
 IUR2     RJM    ERR               PROCESS NAD ERROR
          PJN    IUR1              IF NON-FATAL, RETRY
          UJK    IURX 
  
 IUR3     RJM    WFP               WAIT FOR PRIMED
          MJN    IUR2              IF NAD ERROR 
          LDK    FCO8              FUNCTION OUTPUT 12/8 
          RJM    FAN
          MJN    IUR2              IF NAD ERROR 
          LDK    UNVCB
          STM    OUTA 
          LDK    UNVCBS 
          RJM    OUT               SENDUNVC FUNCTION BLOCK
          ZJN    IUR4              IF SUCCESSFUL
          MJN    IUR2              IF NAD ERROR 
          LCN    NADERRK           TRANSFER LENGTH ERROR
          UJK    IUR2 
  
 IUR4     RJM    WFR               WAIT FOR NAD RESPONSE
          MJN    IUR2              IF ERROR 
          RJM    PNR               PROCESS NAD RESPONSE 
          NJN    IUR5              IF RETRIES EXHAUSTED OR ERROR
          LDD    D.T0 
          NJN    IUR6              IF NAD ERROR 
 IUR5     UJK    IURX 
  
 IUR6     LMC    777777B
          UJK    IUR2 
WFR       SPACE  4,10 
**        WFR - WAIT FOR NAD RESPONSE.
* 
*         ASLONGAS NAD HAS NOT RESPONDED
*           AND NO NAD ERRORS 
*         DO
*           GET CONTROLWARE STATUS. 
* 
*         ENTRY - UNVC FUNCTION BLOCK SENT TO NAD.
* 
*         EXIT  - (A) > 0, NAD HAS RESPONDED AND
*                          (STATUS) = NAD RESPONSE. 
*                     < 0, NAD ERROR. 
  
  
 WFR      ENM    X                 ENTRY/EXIT 
          LCN    0
          STD    D.T0              SET RETRY COUNT
 WFR1     RJM    CST               GET CONTROLWARE STATUS 
          MJN    WFRX              IF NAD ERROR 
          LPN    M.RESPCD 
          LMN    RCUA 
          NJN    WFRX              IF NAD HAS RESPONDED 
          SOD    D.T0 
          PJN    WFR1              IF RETRIES NOT EXHAUSTED 
          LCN    NADERRE           TIMED-OUT WAITING NAD RESPONSE 
          UJN    WFRX 
PNR       SPACE  4,10 
**        PNR - PROCESS NAD RESPONSE. 
* 
*         IF ACK
*         THEN
*           RETURN. 
*         IF PATH NOT ACTIVE
*         THEN
*           RETURN PATH ABORTED EVENT.
*         IF NO BUFFERS AVAILABLE 
*         THEN
*           INCREMENT RETRY COUNT.
*           IF RETRIES NOT EXHAUSTED
*           THEN
*             TELL RHF TO RE-ISSUE. 
*           ELSE
*             RETURN FET CODE OF NO BUFFERS AVAILABLE.
* 
*         ENTRY - UNVC ISSUED AND (STATUS) = RESPONSE.
* 
*         EXIT  - (A) > 0, FET REPLY CODE.
*                     = 0 AND (D.T0) " 0, (D.T0) = NAD ERROR CODE.
*                     = 0 AND (DBC) = 0, NO BUFFERS AVAILABLE.
*                     = 0 AND (DBC) " 0, READY TO WRITE BLOCK.
*                     < 0, NAD ERROR. 
  
  
 PNR      ENM    X                 ENTRY/EXIT 
          LDN    0
          STD    D.T0              INITIALIZE NAD ERROR RETURN
          LDD    STATUS 
          LPN    M.RESPCD 
          LMK    RCAK 
          ZJN    PNRX              IF NAD READY TO RECEIVE BLOCK
          LMK    RCNK&RCAK
          ZJN    PNR1              IF PATH ABORTED
          LMK    RCAB&RCNK
          ZJN    PNR1              IF PATH ABORTED
          LMK    RCCE&RCAB
          ZJN    PNR2              IF CONVERT MODE NOT ACTIVE 
          LMK    RCCN&RCCE
          ZJN    PNR2              IF CONVERT MODE NOT ACTIVE 
          LMK    RCTN&RCCN
          ZJN    PNR3              IF NO BUFFERS AVAILABLE
          LMK    RCFL&RCTN
          ZJN    PNR2              IF PATH IN FLUSHED STATE 
          LDN    NADERRG           ILLEGAL PATH STATUS
          STD    D.T0              SAVE NAD ERROR CODE
          UJK    PNRX 
  
 PNR1     LDN    EVTABT 
          STD    EVENT             PROCESS PATH ABORTED 
 PNR2     LCN    0                 SET FET COMPLETE 
          UJK    PNRX 
  
 PNR3     LDN    EVTOUT 
          STD    EVENT             CHANGE IN OUTPUT STATUS
          LDK    MAXRETRY 
          SBD    D.REQ2+C.RETRY 
          MJN    PNR4              IF RETRIES EXHAUSTED 
          LDK    RC.FNOBF 
          STD    D.REQ3+C.RC       HAVE RHF RE-ISSUE
          LDN    0
          STD    DBC
          UJK    PNRX 
  
 PNR4     LDK    FETNOBUF 
          UJK    PNRX 
WDB       SPACE  4,10 
**        WDB - WRITE DATA BLOCK. 
* 
*         WAIT FOR PRIMED.
*         IF NO ERROR 
*         THEN
*           SELECT DI FUNCTION. 
*           IF NO ERROR 
*           THEN
*             OUTPUT BLOCK AND HEADER.
*             IF NO ERROR 
*             THEN
*               TRANSMIT BLOCK. 
*               IF SUCCESSFUL 
*               THEN
*                 RETURN (A) = 0. 
*               ELSE
*                 CALL ERROR PROCESSOR. 
*                 ABORT TRANSACTION.
*             ELSE
*               CALL ERROR PROCESSOR. 
*               ABORT TRANSACTION.
*           ELSE
*             CALL ERROR PROCESSOR. 
*             ABORT TRANSACTION.
*         ELSE
*           CALL ERROR PROCESSOR. 
*           ABORT TRANSACTION.
* 
*         ENTRY - (BUFW) - (BUFW+BUFBYTES) = DATA TO BE WRITTEN.
*                 UNVC WRITE CM SUCCESSFULLY ISSUED.
* 
*         EXIT  - (A) > 0, RE-ISSUE REQUEST.
*                     = 0, SUCCESSFUL WRITE.
*                     < 0, FATAL NAD ERROR. 
  
  
 WDB      ENM    X                 ENTRY/EXIT 
          RJM    WFP               WAIT FOR PRIMED
          MJN    WDB1              IF NAD ERROR 
          LDM    DIFC,DD
          RJM    FAN               SELECT DI OUTPUT FUNCTION
          MJN    WDB1              IF NAD ERROR 
          LDK    HDR
          STM    OUTA              SET FWA OF DATA BUFFER 
          LDK    HDRLEN 
          ADD    BUFBYTES 
          RJM    OUT               OUTPUT HEADER AND BLOCK
          MJN    WDB1              IF NAD ERROR 
          ZJN    WDB4              IF OUTPUT SUCCESSFUL 
          LCN    NADERRK
 WDB1     RJM    ERR               PROCESS NAD ERROR
          MJN    WDBX              IF FATAL NAD ERROR 
          LDK    FCAB 
          RJM    FFN               ABORT TRANSACTION
          ZJN    WDB2              IF NO ERROR
          MJN    WDB1              IF NAD ERROR 
          LCN    NADERRH
          UJN    WDB1 
  
 WDB2     LDN    1                 RE-ISSUE REQUEST 
 WDB3     UJK    WDBX 
  
 WDB4     LDK    FCTD 
          RJM    FFN               TRANSMIT DATA
          MJN    WDB1              IF NAD ERROR 
          ZJN    WDB3              IF BLOCK ACCEPTED
          LMK    RCBE&RCAK
          ZJN    WDB5              IF BLOCK ERROR 
          LCN    NADERRH           ABNORMAL RESPONSE
          UJN    WDB1 
  
 WDB5     LDK    -NADLWER          NAD RECEIVED BAD BLOCK FROM HOST 
          UJN    WDB1 
  
 DIFC     BSS    0                 DI FUNCTION CODES
          CON    FCO6              OUTPUT 6 TO 8
          CON    FCOW              OUTPUT 12 TO 16
UPO       SPACE  4,10 
**        UPO - UPDATE OUT AND ABN WITHIN UCP FET.
* 
*         UPDATE BLOCK COUNT AND ABN. 
*         REWRITE OUT POINTER.
*         REWRITE NDR STATISTICS WORD IN FET. 
*         IF FUNCTION COMPLETE
*         THEN
*           RETURN (A)=0. 
*         ELSE
*           IF BUFFER GETTING FULL
*           THEN
*             RECALL UCP TO UPDATE POINTERS.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) > 0, FET PARAMETER ERROR.
*                    = 0, CONTINUE PROCESSING.
*                    < 0, SET FET COMPLETE (FUNCTION DONE). 
*                IF NOS/BE THEN FIELD ACCESS IS OBTAINED. 
  
  
 UPO      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          AOM    BLKCNT+C.WRITE+1  INCREMENT BLOCK COUNTER
          SHN    -12
          RAM    BLKCNT+C.WRITE 
          AOM    FETWD5+C.FABN+1   UPDATE ABN 
          SHN    -12
          RAM    FETWD5+C.FABN
          LDK    P.ZERO 
          CRD    D.T0 
          LDD    OUTPNT 
          STD    D.T0+C.PT         SET UP OUT POINTER 
          LDD    OUTPNT+1 
          STD    D.T0+C.PT+1
          FETREL 5
          ZJN    UPO3              IF ADDRESS ERROR 
          SBN    2
          CWD    D.T0              WRITE OUT
          ADN    2
          CWM    FETWD5,ONE        WRITE ABN, UBC, AND DD.
          LDD    D.REQ2+C.FETCD 
          SHN    -6 
          LMK    FFCLOSE
          ZJN    UPO4              IF CLOSE FUNCTION
          LMK    FFWRITEC&FFCLOSE 
          ZJN    UPO1              IF WRITEC FUNCTION 
          LDD    DBC
          SHN    17-S.EOR 
          MJN    UPO4              IF EOR WRITTEN 
 UPO1     RJM    CDA               CALCULATE DATA AVAILABLE 
          SHN    -6 
          SBK    MSBEFRC           MINIMUM DATA AVAILABLE 
          PJN    UPO2              IF ENOUGH DATA AVAILABLE 
          LDK    M.RCLCP
          RJM    R.MTR             RECALL UCP 
 UPO2     LDN    0                 NORMAL RETURN
          UJK    UPOX 
  
 UPO3     LDN    FETPERR           ADDRESS ERROR
          UJK    UPOX 
  
 UPO4     LCN    0                 SET FET COMPLETE 
          UJK    UPOX 
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTFETWD-* 
          TTL    NDR/2NR - READ PATH DATA.
          TITLE 
          QUAL   2NR
          IDENT  2NR,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - READ PATH DATA.
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
RPD       TITLE  RPD - READ PATH DATA.
**        RPD - READ PATH DATA. 
* 
*         CALL RPP TO OBTAIN HEADER ADDRESS, TEXT ADDRESS, TEXT 
*           LENGTH, AND ACK MESSAGE.
*         ZERO TERMINATION STATUS INDICATORS. 
*         SWITCH TO UCP.
*         CALL CUP TO CHECK HEADER ADDRESS, TEXT ADDRESS, AND 
*           TEXT LENGTH.
*         CALL SEL TO SELECT PATH.
*         IF INPUT NOT AVAILABLE
*         THEN
*           SET INPUT CHANGE EVENT. 
*           SET REISSUE FOR INPUT NOT AVAILABLE.
*           RETURN. 
*         CALL IBH TO INPUT BLOCK HEADER. 
*         IF ERROR THEN RETURN. 
*         IF BLOCK TOO BIG THEN GO TO BUILD HEADER. 
*         IF NO BLOCK INPUT THEN GO TO INPUT CHANGE EVENT.
*         IF NOT BINARY DATA AND DATA EXISTS THEN CALL ICD TO 
*           INPUT CHARACTER DATA. 
*         IF RETRY I/O THEN LOOP TO CALL IBH. 
*         CALL OAK TO OUTPUT ACKNOWLEDGE. 
*         CALL WTX TO WRITE TEXT. 
*         CALL BWH TO BUILD AND WRITE BLOCK HEADER. 
*         RELEASE CHANNEL.
*         SWITCH TO RHF.
*         WRITE EVENT AND ACK QUEUE ENTRY.
*         RETURN. 
* 
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                      0, ADDRESS ERROR.
* 
*         USES   D.T0 - D.T5, D.REQ2, D.REQ3, ACT, COMMADR, EVENT,
*                OVLBGONE, STATUS.
* 
*         CALLS  BWH, CUP, IBH, ICD, OAK, REL, RHF, RPP, SEL, UCP, WTX. 
  
  
 RPD      ENM    X                 ENTRY/EXIT 
          RJM    RPP               READ PATH PRESET 
          ZJN    RPDX              IF ADDRESS ERROR 
          LDN    0
          STD    EVENT             PRESET NO EVENT
          RJM    UCP               SWITCH TO UCP
          ZJN    RPD03             IF SUCCESSFUL SWITCH 
          LDK    RC.RSWP           USER SWAPPED 
 RPD01    STD    D.REQ3+C.RC       SAVE RHF RETURN CODE 
 RPD02    LJM    RPD08
  
 RPD03    RJM    CUP               CHECK USER PARAMETERS
          NJN    RPD01             IF USER PARAMETER ERROR
          RJM    SEL               SELECT PATH
          MJN    RPD02             IF PATH ERROR
          LDD    STATUS 
          SHN    17-S.CSTIA 
          MJN    RPD05             IF INPUT AVAILABLE 
 RPD04    LDN    EVTIN             SET INPUT CHANGE EVENT 
          STD    EVENT
          LDK    RC.RNOIA          NO INPUT AVAILABLE 
          UJN    RPD01
  
 RPD05    RJM    IBH               INPUT BLOCK HEADER 
          MJN    RPD02             IF ERROR 
          ZJN    RPD04             IF NO BLOCK INPUT
          SBN    2
          NJN    RPD07             IF BLOCK TOO BIG 
          LDD    ACT
          SBN    ACA5 
          MJN    RPD06             IF BINARY MODE 
          LDD    REMWORDS 
          ZJN    RPD06             IF NO DATA TO INPUT
          RJM    ICD               INPUT CHARACTER DATA 
          MJN    RPD08             IF ERROR 
          ZJN    RPD05             IF RETRY I/O 
 RPD06    RJM    OAK               OUTPUT ACKNOWLEDGE 
          MJN    RPD08             IF ERROR 
          RJM    WTX               WRITE TEXT 
          NJN    RPD08             IF ERROR 
 RPD07    RJM    BWH               BUILD AND WRITE BLOCK HEADER 
 RPD08    LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          RJM    RHF               SWITCH TO RHF
 RPD09    LDN    P.ZERO 
          CRD    D.T0 
          LDD    EVENT
          ZJN    RPD10             IF NO EVENT
          STD    D.T0+C.EVENT      SET EVENT
          LDD    STATUS 
          SHN    -S.CSTOA 
          LPN    3
          STD    D.T0+C.STATUS     SET PATH STATUS
 RPD10    LDD    COMMADR
          SHN    3
          ADN    W.REQ4 
          ADDRA  ER=RPD11 
          CWD    D.T0              WRITE EVENT TO RHF COMM. AREA
          LDN    AMGL/5+1 
          STD    D.T5 
          LDCA   D.REQ2+C.QACK,ER=RPD11 
          ADN    W.WD2
          CWM    ACKMSG,D.T5       WRITE ACK MESSAGE
          LDN    1                 NORMAL RETURN
 RPD11    LJM    RPDX 
RPP       SPACE  4,10 
**        RPP - READ PATH DATA PRESET.
* 
*         READ WORD FROM QUEUE ENTRY WHICH CONTAINS HEADER ADDRESS, 
*           TEXT ADDRESS, AND TEXT LENGTH.
*         READ ACK MESSAGE. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                      0, ADDRESS ERROR.
* 
*         USES   D.T5, D.REQ1, D.REQ2, D.CALLP
* 
*         CALLS  NONE.
  
  
 RPP      ENM    X                 ENTRY/EXIT 
          LDD    D.REQ1+C.QADDR 
          LPN    77B
          SHN    12 
          LMD    D.REQ1+C.QADDR+1 
          ZJN    RPPX              IF ADDRESS ERROR 
          ADN    W.CALLP
          ADDRA  ER=RPPX
          CRD    D.CALLP           READ CALL PARAMETERS 
          LDN    AMGL/5+1 
          STD    D.T5 
          LDD    D.REQ2+C.QACK
          LPN    77B
          SHN    12 
          LMD    D.REQ2+C.QACK+1
          ZJN    RPPX              IF ADDRESS ERROR 
          ADN    W.WD2
          ADDRA  ER=RPPX
          CRM    ACKMSG,D.T5       READ ACK MESSAGE 
          LDN    1                 NORMAL RETURN
          UJN    RPPX 
CUP       SPACE  4,10 
**        CUP - CHECK USER PARAMETERS.
* 
*         VALIDATE HEADER ADDRESS, TEXT ADDRESS, AND TEXT LENGTH. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN 
*                    = RC.RPARM, USER PARAMETER ERROR.
* 
*         USES   D.CALLP, D.REQ2 - D.REQ3, ACT. 
* 
*         CALLS  NONE.
  
  
 CUP      ENM    X                 ENTRY/EXIT 
          LDN    ET.RHA            PRESET HEADER ADDRESS ERROR
          STD    D.REQ3+C.ERRTYP
          LDD    D.CALLP+C.HA 
          LPN    77B
          STD    D.CALLP+C.HA      VALIDATE HEADER ADDRESS
          SHN    12 
          LMD    D.CALLP+C.HA+1 
          ZJN    CUP1              IF ADDRESS ERROR 
          ADDRA  ER=CUP1
          LDN    ET.RTA            PRESET TEXT ADDRESS ERROR
          STD    D.REQ3+C.ERRTYP
          LDD    D.CALLP+C.TA 
          LPN    77B
          STD    D.CALLP+C.TA      VALIDATE TEXT ADDRESS
          SHN    12 
          LMD    D.CALLP+C.TA+1 
          ZJN    CUP1              IF ADDRESS ERROR 
          ADD    D.CALLP+C.TLMAX   ALSO VALIDATE TLMAX OFFSET 
          ADDRA  OK=CUP2
 CUP1     LDK    RC.RPARM          USER PARAMETER ERROR 
          UJN    CUPX 
  
 CUP2     LDD    D.REQ2+C.ACT 
          SHN    -6 
          STD    ACT               SET UP APPLICATION CHARACTER TYPE
          LDN    ET.RTL            PRESET TLMAX ERROR 
          STD    D.REQ3+C.ERRTYP
          LDM    CUPA,ACT 
          SBD    D.CALLP+C.TLMAX
          MJN    CUP1              IF TLMAX TOO LARGE 
          LDN    0                 NORMAL RETURN
          LJM    CUPX 
  
 CUPA     EQU    *-1
          CON    384               BINARY MODE
          CON    273               CHARACTER BINARY MODE
          CON    410               ASCII MODE 
          CON    205               DISPLAY CODE MODE
IBH       SPACE  4,10 
**        IBH - INPUT BLOCK HEADER. 
* 
*         IF BINARY DATA
*         THEN
*           SET TO INPUT HEADER AND TEXT. 
*         ELSE
*           SET TO INPUT HEADER.
*         INPUT BINARY DATA.
*         IF ERROR THEN RETURN. 
*         VALIDATE HEADER INPUT.
*         CALL CBS TO CALCULATE BLOCK SIZE. 
*         IF BLOCK DOES NOT FIT IN TEXT AREA
*         THEN
*           RESET TRANSFER. 
*           RETURN IBH FLAG.
*         RETURN. 
* 
*         ENTRY NONE. 
* 
*         EXIT   (A) = 0, IF NO BLOCK INPUT.
*                    = 1, IF BLOCK TOO BIG. 
*                    = 2, IF GOOD INPUT.
*                    .LT. 0, IF ERROR.
* 
*         USES   D.T5, ACT, BUFBUTES, D.CALLP, FLUSH, OVLBGONE. 
* 
*         CALLS  CBS, ERR, FAN, FFN, INP, REL, WFP. 
  
  
 IBH      ENM    X                 ENTRY/EXIT 
          LDN    HDRLEN 
          STD    D.T5              PRESET TO INPUT HEADER 
          LDC    HDRP 
          STM    INPA 
          LDN    0
          STD    FLUSH             NO FLUSH 
          LDD    ACT
          SBN    ACA5 
          PJN    IBH01             IF CHARACTER MODE
          LDK    NPRU+HDRLEN       INPUT FULL BLOCK 
          STD    D.T5 
          STD    FLUSH             FLUSH ON INPUT 
 IBH01    LDN    FCRD              READ DATA
          RJM    FFN
          ZJN    IBH04             IF ACK RESPONSE
          MJN    IBH03             IF HARDWARE ERROR
          LMN    RCTN&RCAK
          ZJN    IBHX              IF INPUT BLOCK DISAPPEARED 
          LMN    RCFL&RCTN
          ZJN    IBHX              IF PATH FLUSHED
          LMN    RCCA&RCFL
          ZJN    IBHX              IF CONVERT MODE ACTIVE 
          LMN    RCAB&RCCA
          NJN    IBH02             IF NOT PATH ABORTED
          LDN    EVTABT 
          STD    EVENT             SAVE EVENT PATH ABORTED
          LCN    0
 IBH01.5  UJK    IBHX 
  
 IBH02    LCN    NADERRH           ABNORMAL RESPONSE CODE 
 IBH03    RJM    ERR               REPORT ERROR 
          MJN    IBH01.5           IF FIRM HARDWARE ERROR 
          LDK    FCRT              RESET TRANSFER 
          RJM    FFN
          MJN    IBH03             IF HARDWARE ERROR
          UJN    IBH01             RESTART TRANSFER 
  
 IBH04    LDK    FCBM              SELECT BINARY MODE 
          RJM    FFN
          MJN    IBH03             IF HARDWARE ERROR
          NJN    IBH02             IF RESPONSE ERROR
          RJM    WFP               WAIT FOR PRIMED
          MJN    IBH03             IF ERROR 
          LDK    FCIB              INPUT BIT STRING 
          RJM    FAN
          MJN    IBH03             IF ERROR 
          LDD    D.T5 
          RJM    INP               INPUT DATA 
          MJN    IBH03             IF HARDWARE ERROR
          SBN    HDRLEN 
          PJN    IBH05             IF HEADER INPUT
          LCN    NADERRP           HEADER LENGTH ERROR
          UJN    IBH03
  
 IBH05    STD    BUFBYTES          BYTES IN DATA BUFFER 
          RJM    CBS               CALCULATE BLOCK SIZE 
          SBD    D.CALLP+C.TLMAX
          SBN    1
          PJN    IBH08             IF BLOCK DOES NOT FIT
          LDD    D.CALLP+C.TLMAX
          ZJN    IBH08             IF TLMAX NOT SPECIFIED 
          LDN    2                 GOOD INPUT 
 IBH07    LJM    IBHX 
  
 IBH08    LDK    FCRT              RESET TRANSFER 
          RJM    FFN
          PJN    IBH09             IF NO HARDWARE ERROR 
          RJM    ERR               REPORT ERROR 
          MJN    IBH07             IF FIRM HARDWARE ERROR 
          UJN    IBH08             RETRY
  
 IBH09    LDN    1                 IBU FLAG 
          UJN    IBH07
CBS       SPACE  4,10 
**        CBS - CALCULATE BLOCK SIZE. 
* 
*         CONVERT TEXT LENGTH BIT COUNT INTO CM WORDS 
*           AND UNUSED BIT COUNT. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = LENGTH OF BLOCK IN CM WORDS. 
* 
*         USES   D.T0 - D.T4, ACT, REMWORDS, UBC. 
* 
*         CALLS  NONE.
* 
*         NOTES  A NON-PRU BLOCK IS COMPOSED OF A BLOCK HEADER AND
*                OPTIONAL TEXT.  THE BLOCK HEADER CONTAINS THE TEXT 
*                LENGTH IN BITS, THE PATH ID OF THE TRANSMITTER,
*                THE DATA BLOCK CLARIFIER, AND THE ABN.  THE TEXT 
*                IS IN EITHER BINARY OR CHARACTER MODE.  A FULL BLOCK 
*                CONTAINS 2880 8-BIT BYTES IF IN BINARY MODE OR 
*                2043 8-BIT BYTES IF IN CHARACTER MODE. 
* 
*                A BINARY BLOCK IS TRANSFERED BETWEEN THE NAD, PP,
*                AND CM WITHOUT DATA CONVERSION.  A FULL BINARY BLOCK 
*                FILLS 1920 12-BIT BYTES, 384 60-BIT WORDS, OR 6 64-WORD
*                BLOCKS (6 DISK PRUS).
* 
*                A PACKED ASCII CHARACTER BLOCK IS TRANSFERED BETWEEN 
*                THE NAD, PP, AND CM WITHOUT DATA CONVERSION.  A FULL 
*                PACKED ASCII BLOCK FILLS 1362 12-BIT BYTES, OR 272.4 
*                (273) 60-BIT WORDS.
* 
*                A CHARACTER BLOCK MAY BE CONVERTED TO DISPLAY CODE 
*                BETWEEN THE NAD AND PP.  NO CONVERSION IS PERFORMED
*                BETWEEN THE PP AND CM.  A FULL DISPLAY CODE CONVERTED
*                BLOCK FILLS 1021.5 (1022) 12-BIT BYTES, OR 204.3 
*                (205) 60-BIT WORDS.
* 
*                A CHARACTER BLOCK MAY BE CONVERTED TO ASCII (8-BITS
*                WITHIN 12-BITS) BETWEEN THE NAD AND PP.  NO CONVERSION 
*                IS PERFORMED BETWEEN THE PP AND CM.  A FULL CONVERTED
*                ASCII BLOCK FILLS 2043 12-BIT BYTES, OR 408.6 (409)
*                60-BIT WORDS.
* 
*                THE TEXT LENGTH IS FIRST CONVERTED BASED ON
*                APPLICATION CHARACTER TYPE.  NO CONVERSION IS
*                REQUIRED FOR BINARY DATA OR PACKED ASCII.
*                TEXT LENGTH IS MULTIPLIED BY 3/4 FOR DISPLAY CODE. 
*                TEXT LENGTH IS MULTIPLIED BY 3/2 FOR (8 IN 12) ASCII.
* 
*                THE TEXT LENGTH IS THEN CONVERTED TO THE 60-BIT
*                CM WORD COUNT AND UNUSED BIT COUNT USED WITHIN CM. 
*                THE CM WORD COUNT IS FIRST APPROXIMATED BY THE 
*                FORMULA: 
* 
*                  LENGTH/64 + (17*(LENGTH/64))/256 
* 
*                THIS YIELDS A RESULT AT MOST TWO LESS THAN THE ACTUAL
*                RESULT IN A RANGE OF ZERO TO 246,994.
  
  
 CBS      ENM    X                 ENTRY/EXIT 
          LDN    0
          STD    UBC               ZERO UNUSED BIT COUNT
          LDM    CBSC,ACT 
          STM    CBSA              INITIALIZE FOR FIRST CONVERSION
          LDM    CBSD,ACT 
          STM    CBSB 
          LDM    HDRP+R.PTXTLN+1   PICK UP BIT COUNT
          SHN    -8 
          SHN    14 
          LMM    HDRP+R.PTXTLN
          SHN    4
          STD    D.T1              SAVE BIT COUNT 
          SHN    -12
          STD    D.T0 
 CBSA     UJN    CBS1              BINARY OR PACKED ASCII 
*         SHN    1                 DISPLAY CODE OR 8/12 ASCII 
          ADD    D.T0              COUNT * 3
          SHN    12 
          ADD    D.T1 
          ADD    D.T1 
          ADD    D.T1 
 CBSB     SHN    -2                DISPLAY CODE DIVIDE BY 4 
*         SHN    -1                8/12 ASCII DIVIDE BY 2 
          STD    D.T1 
          SHN    -12               SAVE CONVERTED BIT COUNT 
          STD    D.T0 
 CBS1     SHN    12                PICK UP BIT COUNT
          ADD    D.T1 
          SHN    -6                COUNT/64 
          STD    REMWORDS 
          SHN    4                 16*(COUNT/64)
          ADD    REMWORDS          17*(COUNT/64)
          SHN    -8                (17*(COUNT/64))/256
          RAD    REMWORDS          COUNT/64 + (17*(COUNT/64))/256 
          SHN    1                 2*CMWORDS (BE CAREFUL OF OVERFLOW) 
          STD    D.T2 
          SHN    5                 64*CMWORDS 
          SBD    D.T2              62*CMWORDS 
          SBD    D.T2              60*CMWORDS 
          STD    D.T3 
          SHN    -12               SAVE 60*CMWORDS
          STD    D.T2 
          LDD    D.T0              CALCULATE COUNT - APPROX. COUNT
          SBD    D.T2 
          SHN    12 
          ADD    D.T1 
          SBD    D.T3 
 CBS2     ZJN    CBS4              IF NO CORRECTION REQUIRED
          SBN    60 
          MJN    CBS3              IF UBC LESS THAN 60
          STD    D.T4 
          AOD    REMWORDS          CORRECT APPROXIMATE WORD COUNT 
          LDD    D.T4 
          UJN    CBS2 
  
 CBS3     LMC    777777B           ADJUST UBC TO POSITIVE 
          STD    UBC               SAVE UNUSED BIT COUNT
          AOD    REMWORDS          INCLUDE WORD WITH UBC
 CBS4     LDM    CBSE,ACT          LOAD ALLOWED CM WORD SIZE
          SBD    REMWORDS 
          PJN    CBS5              IF BLOCK NOT TOO BIG 
          LDM    CBSE,ACT          SET BLOCK TO MAXIMUM SIZE
          STD    REMWORDS 
          LDN    0
          STD    UBC
 CBS5     LDD    REMWORDS          RETURN BLOCK SIZE
          LJM    CBSX 
  
 CBSC     EQU    *-1
          LOC    CBSA 
          UJN    CBS1              BINARY MODE
          LOC    CBSA 
          UJN    CBS1              PACKED ASCII 
          LOC    *O 
          SHN    1                 8/12 ASCII 
          SHN    1                 DISPLAY CODE 
  
 CBSD     EQU    *-3               FIRST TWO DO NOT EXECUTE 
          SHN    -1                8/12 ASCII 
          SHN    -2                DISPLAY CODE 
  
 CBSE     EQU    *-1
          CON    384               BINARY 
          CON    273               PACKED ASCII 
          CON    409               8/12 ASCII 
          CON    205               DISPLAY CODE 
ICD       SPACE  4,10 
**        ICD - INPUT CHARACTER DATA. 
* 
*         INPUT CHARACTER DATA. 
*         IF ERROR THEN SET RETRY AND RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                      0, RETRY I/O.
*                    .LT. 0, ERROR. 
* 
*         USES   ACT, BUFBYTES, FLUSH, OVLBGONE.
* 
*         CALLS  ERR, FAN, FFN, INP, REL, SEL, WFP. 
  
  
 ICD      ENM    X                 ENTRY/EXIT 
          LDN    FCRD              READ DATA
          RJM    FFN
          ZJN    ICD3              IF ACK RESPONSE
          LMN    RCFL&RCAK
          ZJN    ICDX              IF PATH FLUSHED
          LMN    RCAB&RCFL
          NJN    ICD1              IF NOT PATH ABORTED
          LDN    EVTABT 
          STD    EVENT             SAVE EVENT PATH ABORTED
          LCN    0
          UJN    ICDX 
  
 ICD1     MJN    ICD2              IF HARDWARE ERROR
          LCN    NADERRH           ABNORMAL RESPONSE CODE 
 ICD2     RJM    ERR               REPORT ERROR 
          MJN    ICDX              IF FIRM HARDWARE ERROR 
          LDK    FCRT              RESET TRANSACTION
          RJM    FFN
          MJN    ICD2              IF HARDWARE ERROR
          LDK    FCRT              RESET TO START OF BLOCK
          RJM    FFN
          MJN    ICD2 
          LDN    0                 RETRY I/O
          UJN    ICDX 
  
 ICD3     LDM    ICDA,ACT          BINARY FOR ASCII (AS CII FOR CODED)
          RJM    FFN
          NJN    ICD1              IF ERROR 
          RJM    WFP               WAIT FOR PRIMED
          MJN    ICD2              IF ERROR 
          LDM    ICDB,ACT          FCI8 FOR ASCII (FCI6 FOR CODED)
          RJM    FAN
 ICD4     MJN    ICD2              IF ERROR 
          LDC    BUFPD
          STM    INPA              SET INPUT BUFFER ADDRESS 
          STD    FLUSH             SET INPUT FLUSH
          LDM    ICDC,ACT 
          RJM    INP               INPUT DATA 
          MJN    ICD4              IF ERROR 
          STD    BUFBYTES          SAVE BYTES INPUT 
          LDN    1                 GOOD RETURN
          LJM    ICDX 
  
 ICDA     EQU    *-3
          CON    FCBM              8/12 ASCII 
          CON    FCAM              CODED
  
 ICDB     EQU    *-3
          CON    FCI8              8/12 ASCII 
          CON    FCI6              CODED (8 TO 6) 
  
 ICDC     EQU    *-3
          CON    2043              8/12 ASCII 
          CON    1022              CODED
OAK       SPACE  4,10 
**        OAK - OUTPUT ACKNOWLEDGE MESSAGE. 
* 
*         IF REMOTE BACK IS NOT TO BE SENT
*         THEN
*           RELEASE CHANNEL 
*           RETURN. 
*         INSERT REMOTE PATH ID IN NAME OF ACK MESSAGE. 
*         INSERT ABN IN ACK MESSAGE.
*         OUTPUT ACK MESSAGE. 
*         IF NO BUFFER AVAILABLE
*         THEN
*           SET TO REISSUE ACK
*         ELSE
*           SET ACK SENT. 
*         RELEASE CHANNEL.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .LT. 0, HARDWARE ERROR.
* 
*         USES   D.REQ3.
* 
*         CALLS  ERR, FAN, FFN, REL, RES, OUT, WFP. 
  
  
 OAK      ENM    X                 ENTRY/EXIT 
          LDM    HDRP+R.PDBC
          SHN    17-S.PRU 
          PJN    OAK01             IF REMOTE BACK IS TO BE SENT 
          LJM    OAK12
  
 OAK01    LDM    HDRP+R.PCN        GET PATH ID OF TRANSMITTER 
          SHN    -4 
          RAM    ACKMSG+R.NAME+1   INSERT WITHIN NAME 
          LDM    HDRP+R.PABN
          LPN    77B               INSERT ABN 
          STM    ACKMSG+HDRLEN+R.PABN 
          LDM    HDRP+R.PABN+1
          STM    ACKMSG+HDRLEN+R.PABN+1 
          LDC    ACKMSG 
          STM    OUTA              SET UP OUTPUT BUFFER ADDRESS 
 OAK02    LDK    FCSC              SEND CONTROL MESSAGE 
          RJM    FFN
          ZJN    OAK07             IF ACK RESPONSE
          MJN    OAK04             IF HARDWARE ERROR
          LMM    RCNK&RCAK
          NJN    OAK06             IF NOT NAK RESPONSE
 OAK03    LJM    OAK13             NO BUFFER AVAILABLE
  
 OAK04    RJM    ERR               REPORT ERROR 
          MJN    OAK03             IF FIRM HARDWARE ERROR 
          LDK    FCAB              ABORT TRANSACTION
          RJM    FFN
          MJN    OAK04             IF HARDWARE ERROR
          UJN    OAK02             RESTART TRANSACTION
 OAK05    MJN    OAK04             IF ERROR 
 OAK06    LCN    NADERRH           ABNORMAL RESPONSE CODE 
          UJN    OAK04
  
 OAK07    LDK    FCBM              SELECT BINARY
          RJM    FFN
          NJN    OAK05             IF ERROR 
          RJM    WFP               WAIT FOR PRIMED
          MJN    OAK04             IF ERROR 
          LDK    FCOB              OUTPUT BINARY
          RJM    FAN
          MJN    OAK04             IF ERROR 
          LDN    AMGL 
          RJM    OUT               OUTPUT ACK MESSAGE 
          ZJN    OAK08             IF NO ERROR
          MJN    OAK04             IF HARDWARE ERROR
          LCN    NADERRI           CONTROL MESSAGE LENGTH ERROR 
          UJN    OAK04
  
 OAK08    LDK    FCRY              SEND READY 
          RJM    FFN
          ZJN    OAK10             IF MESSAGE ACCEPTED
          MJN    OAK09             IF HARDWARE ERROR
          LMN    RCNK&RCAK
          ZJN    OAK13             IF REMOTE BUSY 
          LCN    NADERRH           ABNORMAL RESPONSE CODE 
 OAK09    LJM    OAK04
  
 OAK10    LDK    RC.RACK           ACK SENT 
 OAK11    STD    D.REQ3+C.RC
 OAK12    LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LJM    OAKX 
  
 OAK13    LDK    RC.RQACK          QUEUE ACK
          UJN    OAK11
WTX       SPACE  4,10 
**        WTX - WRITE TEXT. 
* 
*         IF NO DATA THEN RETURN. 
*         CLEAR UNUSED BIT COUNT. 
*         VALIDATE THAT SUFFICIENT DATA HAS BEEN INPUT. 
*         OBTAIN FIELD ACCESS.
*         WRITE TEXT. 
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .NE. 0, BAD DATA BLOCK LENGTH
*                            OR TEXT ADDRESS ERROR. 
* 
*         USES   D.T0 - D.T3, D.CALLP, D.REQ2 - D.REQ3, BUFBYTES, 
*                REMWORDS, UBC. 
* 
*         CALLS  ERR, R.RAFL. 
  
  
 WTX      ENM    X                 ENTRY/EXIT 
          LDD    REMWORDS 
          ZJN    WTXX              IF NO DATA 
          SHN    2                 *4 
          ADD    REMWORDS          *5 
          STD    D.T0 
          ADC    BUFPD-1
          STD    D.T1              END OF BUFFER POINTER
          LDN    0
          STD    D.T2              UNUSED BYTES 
          LDD    UBC
          STD    D.T3              SAVE UBC FOR MODIFICATION
 WTX1     LCN    12 
          RAD    D.T3              DECREMENT UBC
          MJN    WTX2              IF FULL BYTE NOT UNUSED
          LDN    0
          STI    D.T1              ZERO UNUSED BYTE 
          SOD    D.T1              POINT TO PREVIOUS BYTE 
          AOD    D.T2              INCREMENT UNUSED BYTES 
          UJN    WTX1 
  
 WTX2     LDD    BUFBYTES          BYTES INPUT
          ADD    D.T2              UNUSED BYTES 
          SBD    D.T0              5*REMWORDS (BYTES REQUIRED)
          PJN    WTX4              IF ENOUGH BYTES INPUT
          LCN    NADERRQ           BAD DATA BLOCK LENGTH
          RJM    ERR               REPORT ERROR 
 WTX3     UJN    WTXX 
  
 NOS      IF     DEF,NOS
 WTX4     BSS    0
 NOS      ELSE
 WTX4     RJM    R.RAFL            OBTAIN FIELD ACCESS
 NOS      ENDIF 
          LDD    D.CALLP+C.TA 
          SHN    12 
          LMD    D.CALLP+C.TA+1 
          ADD    REMWORDS 
          ADDRA  ER=WTX5           VALIDATE TEXT AREA 
          SBD    REMWORDS 
          CWM    BUFPD,REMWORDS    WRITE TEXT 
          LDN    0
          UJN    WTX3 
  
 WTX5     LDN    ET.RTA 
          STD    D.REQ3+C.ERRTYP   TEXT ADDRESS ERROR 
          LDK    RC.RPARM          USER PARAMETER ERROR 
          STD    D.REQ2+C.RC
          UJN    WTX3 
BWH       SPACE  4,10 
**        BWH - BUILD AND WRITE BLOCK HEADER. 
* 
*         ENTRY  (A) = IBU FLAG.
* 
*         EXIT   NONE.
* 
*         USES   D.T0 - D.T5, D.CALLP, D.REQ2 - D.REQ3, ACT, REMWORDS.
* 
*         CALLS  R.RAFL.
  
  
 BWH      ENM    X                 ENTRY/EXIT 
          STD    D.T5              SAVE IBU FLAG
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDN    P.ZERO 
          CRD    D.T0              ZERO BLOCK HEADER
          LDM    HDRP+R.PBT 
          SHN    -S.PBT 
          LPN    M.PBT             INSERT BLOCK TYPE
          SHN    6
          STD    D.T0+C.HABT
          LDD    D.REQ2+C.ACN 
          SHN    -6 
          RAD    D.T0+C.HACN
          LDD    D.REQ2+C.ACN      INSERT ACN 
          SHN    6
          STD    D.T0+C.HACN+1
          LDM    HDRP+R.PABN
          LPN    77B
          RAD    D.T0+C.HABN       INSERT ABN 
          LDM    HDRP+R.PABN+1
          STD    D.T0+C.HABN+1
          LDD    ACT
          SHN    8
          STD    D.T0+C.HACT       INSERT ACT 
          LDD    D.T5 
          ZJN    BWH1              IF IBU FLAG NOT SET
          LDK    M.IBU
          RAD    D.T0+C.HFLGS      SET IBU
 BWH1     LDD    ACT
          SBN    ACBM 
          NJN    BWH2              IF NOT BINARY MODE 
          LDD    REMWORDS 
          STD    D.T0+C.HTLC       INSERT WORD COUNT
          UJN    BWH3 
  
 BWH2     LDM    HDRP+R.PTXTLN+1
          SHN    -8                PICK UP BIT COUNT
          SHN    14 
          LMM    HDRP+R.PTXTLN
          SHN    4
          SHN    -3                DIVIDE BY 8 TO CHARACTER COUNT 
          STD    D.T0+C.HTLC       INSERT CHARACTER COUNT 
          ADC    -2044
          MJN    BWH3              IF CHARACTER COUNT IN RANGE
          LDC    2043 
          STD    D.T0+C.HTLC       INSERT MAX. CHARACTER COUNT
 BWH3     LDCA   D.CALLP+C.HA,ER=BWH5 
          CWD    D.T0              WRITE HEADER 
 BWH4     LJM    BWHX 
  
 BWH5     LDN    ET.RHA            HEADER ADDRESS ERROR 
          STD    D.REQ3+C.ERRTYP
          LDK    RC.RPARM          USER PARAMETER ERROR 
          STD    D.REQ3+C.RC
          UJN    BWH4 
*CALL COMSEL
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTPTHWD-* 
          TTL    NDR/2NW - WRITE PATH DATA. 
          TITLE 
          QUAL   2NW
          IDENT  2NW,OVLA+5 
          ORG    OVLA+5 
          COMMENT  NDR OVERLAY - WRITE PATH DATA. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
WPD       TITLE  WPD - WRITE PATH DATA. 
**        WPD - WRITE PATH DATA.
* 
*         CALL WPP TO OBTAIN HEADER ADDRESS AND TEXT ADDRESS. 
*         ZERO TERMINATION STATUS INDICATORS. 
*         SWITCH TO UCP.
*         CALL BMG TO BUILD NETWORK MESSAGE.
*         SELECT PATH.
*         IF OUTPUT NOT BELOW THRESHOLD 
*         THEN
*           SET OUTPUT CHANGE EVENT.
*           SET REISSUE FOR BUFFER NOT AVAILABLE
*           RETURN. 
*         CALL 0BH TO OUTPUT BINARY HEADER. 
*         IF ERROR THEN RETURN. 
*         IF NO BLOCK OUTPUT THEN GO TO OUTPUT CHANGE EVENT.
*         IF NOT BINARY DATA
*         THEN
*           CALL OCD TO OUTPUT CHARACTER DATA.
*           IF RETRY I/O THEN LOOP TO OBH CALL. 
*         RELEASE CHANNEL.
*         SWITCH TO RHF.
*         WRITE EVENT.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                      0, ADDRESS ERROR.
* 
*         USES   D.T0 - D.T4, ACT, COMMADR, D.REQ3, EVENT,
*                OVLBGONE, STATUS.
* 
*         CALLS  BMG, OBH, OCD, REL, RHF, SEL, UCP, WPP.
  
  
 WPD      ENM    X                 ENTRY/EXIT 
          RJM    WPP               WRITE PATH DATA PRESET 
          ZJN    WPDX              IF ADDRESS ERROR 
          LDN    0
          STD    EVENT             PRESET NO EVENT
          RJM    UCP               SWITCH TO UCP
          ZJN    WPD3              IF SUCCESSFUL SWITCH 
          LDK    RC.WSWP           USER SWAPPED 
 WPD1     STD    D.REQ3+C.RC       SAVE RHF RETURN CODE 
 WPD2     LJM    WPD6 
  
 WPD3     RJM    BMG               BUILD NETWORK MESSAGE
          NJN    WPD1              IF USER PARAMETER ERROR
          RJM    SEL               SELECT PATH
          MJN    WPD2              IF PATH ERROR
          LDD    STATUS 
          SHN    17-S.CSTOA 
          MJN    WPD5              IF OUTPUT IS BELOW THRESHOLD 
 WPD4     LDN    EVTOUT            SET OUTPUT CHANGE EVENT
          STD    EVENT
          LDK    RC.WNOBF          NO BUFFERS 
          UJN    WPD1 
  
 WPD5     RJM    OBH               OUTPUT BINARY HEADER 
          MJN    WPD2              IF ERROR 
          ZJN    WPD4              IF NO BLOCK OUTPUT 
          LDD    ACT
          SBN    ACA5 
          MJN    WPD6              IF BINARY MODE 
          RJM    OCD               OUTPUT CHARACTER DATA
          MJN    WPD6              IF ERROR 
          ZJN    WPD5              IF RETRY I/O 
 WPD6     LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          RJM    RHF               SWITCH TO RHF
 WPD7     LDN    P.ZERO 
          CRD    D.T0 
          LDD    EVENT
          ZJN    WPD8              IF NO EVENT
          STD    D.T0+C.EVENT      SET EVENT
          LDD    STATUS 
          SHN    -S.CSTOA 
          LPN    3
          STD    D.T0+C.STATUS     SET PATH STATUS
 WPD8     LDD    COMMADR
          SHN    3
          ADN    W.REQ4 
          ADDRA  ER=WPD9
          CWD    D.T0              WRITE EVENT TO RHF COMM. AREA
          LDN    1                 NORMAL RETURN
 WPD9     LJM    WPDX 
WPP       SPACE  4,10 
**        WPP - WRITE PATH DATA PRESET. 
* 
*         READ HEADER ADDRESS AND TEXT ADDRESS FROM QUEUE ENTRY.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ADDRESS ERROR.
* 
*         USES   D.REQ1, D.CALLP. 
* 
*         CALLS  NONE.
  
  
 WPP      ENM    X                 ENTRY/EXIT 
          LDD    D.REQ1+C.QADDR 
          LPN    77B
          SHN    12 
          LMD    D.REQ1+C.QADDR+1 
          ZJN    WPPX              IF ADDRESS ERROR 
          ADN    W.CALLP
          ADDRA  ER=WPPX
          CRD    D.CALLP           READ CALL PARAMETERS 
          LDN    1                 NORMAL RETURN
          UJN    WPPX 
BMG       SPACE  4,10 
**        BMG - BUILD NETWORK MESSAGE.
* 
*         READ AND VALIDATE HEADER. 
*         INSERT BIT COUNT IN NETWORK HEADER. 
*         INSERT BLOCK TYPE IN NETWORK HEADER.
*         IF LOCAL ACK IS TO BE SENT
*         THEN
*           SET PRU BIT IN NETWORK HEADER 
*           SEND RC.WLACK BACK TO RHF.
*         INSERT ABN IN NETWORK HEADER. 
*         INSERT PATH ID IN NETWORK HEADER. 
*         READ TEXT.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    = RC.WPARM, USER PARAMETER ERROR.
* 
*         USES   D.Z7 - D.T4, ACT, BUFBYTES, D.CALLP, D.REQ2 - D.REQ3,
*                OVLBGONE, REMWORDS.
* 
*         CALLS  NONE.
* 
*         NOTES  SEE NOTES FOR SUBROUTINE CBS.
* 
*                THE WORD COUNT IS CONVERTED TO A PP BYTE COUNT AND 
*                THE BYTE COUNT IS CONVERTED TO A BIT COUNT (*12) 
*                FOR BINARY MODE. 
* 
*                THE CHARACTER COUNT IS CONVERTED TO A BIT COUNT (*8) 
*                FOR ALL CHARACTER MODES. 
* 
*                THE CHARACTER COUNT IS CONVERTED TO A PP BYTE COUNT
*                (*5/7.5) BY THE FORMULAE:  
* 
*                  (21 * COUNT)/32 + (5 * COUNT)/512 (WITHIN 4) 
* 
*                FOR PACKED ASCII MODE. 
* 
*                THE CHARACTER COUNT IS CONVERTED TO A PP BYTE COUNT
*                (COUNT/2) FOR DISPLAY CODE MODE. 
* 
*                NO CONVERSION IS PERFORMED FOR 8/12 ASCII MODE.
  
  
 BMG      ENM    X                 ENTRY/EXIT 
          LDN    ET.WHA            PRESET HEADER ADDRESS ERROR
          STD    D.REQ3+C.ERRTYP
          LDD    D.CALLP+C.HA 
          LPN    77B
          SHN    12 
          LMD    D.CALLP+C.HA+1 
          ZJN    BMG01             IF ADDRESS ERROR 
          ADDRA  OK=BMG02 
 BMG01    LDK    RC.WPARM          USER PARAMETER ERROR 
          UJN    BMGX 
  
 BMG02    CRD    D.T0              READ BLOCK HEADER
          LDN    ET.WACT           PRESET ACT ERROR 
          STD    D.REQ3+C.ERRTYP
          LDD    D.T0+C.HACT
          SHN    -8 
          STD    ACT               SAVE ACT 
          ZJN    BMG01             IF BAD ACT 
          SBN    ACDC+1 
          PJN    BMG01             IF BAD ACT 
          LDN    ET.WTLC           PRESET TLC ERROR 
          STD    D.REQ3+C.ERRTYP
          LDD    ACT
          SBN    ACBM 
          NJN    BMG04             IF NOT BINARY MODE 
          LDC    410
          SBD    D.T0+C.HTLC
 BMG03    MJN    BMG01             IF WORD COUNT TOO BIG
          LDD    D.T0+C.HTLC
          SHN    2                 WC*4 
          ADD    D.T0+C.HTLC       WC*5 
          STD    BUFBYTES          SET PP BYTES TO OUTPUT 
          SHN    1                 COUNT * 2   (BE CAREFUL OF OVERFLOW) 
          STD    D.Z7 
          SHN    2                 COUNT * 8
          ADD    D.Z7              COUNT * 10 
          ADD    D.Z7              COUNT * 12 = BIT COUNT 
          LJM    BMG08
  
 BMG04    LDC    2043 
          SBD    D.T0+C.HTLC
          MJN    BMG03             IF CHARACTER COUNT TOO LARGE 
          LDD    D.T0+C.HTLC
          STD    BUFBYTES          ASSUME ASCII (8 IN 12) MODE
          LDD    ACT
          SBN    ACA5 
          MJN    BMG05             IF PACKED ASCII
          ZJN    BMG07             IF ASCII (8 IN 12) MODE
          LDD    D.T0+C.HTLC       DISPLAY CODE 
          ADN    1
          SHN    -1                DIVIDE BY 2 TO GET PP BYTES
          STD    BUFBYTES 
          UJN    BMG07
  
 BMG05    LDD    D.T0+C.HTLC
          SHN    1
          STD    D.Z7              2*COUNT  (CAREFUL OF 12 BIT OVERFLOW)
          SHN    3                 16*COUNT 
          ADD    D.Z7              18*COUNT 
          ADD    D.Z7              20*COUNT 
          ADD    D.T0+C.HTLC       21*COUNT 
          SHN    -5                (21*COUNT)/32
          STD    BUFBYTES 
          LDD    D.T0+C.HTLC
          SHN    2                 4*COUNT
          ADD    D.T0+C.HTLC       5*COUNT
          SHN    -9                (5*COUNT)/512
          RAD    BUFBYTES          (5*COUNT)/512 + (21*COUNT)/32
          SHN    1                 2*BYTES
          ADD    BUFBYTES          3*BYTES
          SHN    -1                (3*BYTES)/2
          STD    D.Z7 
          LDD    D.T0+C.HTLC       COUNT - APPROX BYTES * 3/2 
          SBD    D.Z7 
          STD    D.Z7 
 BMG06    SOD    D.Z7 
          MJN    BMG07             IF NO MORE CORRECTION REQUIRED 
          AOD    BUFBYTES          CORRECT PP BYTE COUNT
          UJN    BMG06
  
 BMG07    LDD    D.T0+C.HTLC
          SHN    3                 CALCULATE BIT COUNT
 BMG08    SHN    18-4 
          STM    HDRP+R.PTXTLN     INSERT BIT COUNT 
          SHN    -6 
          LPC    7400B
          STM    HDRP+R.PTXTLN+1
          LDD    D.T0+C.HABT
          SHN    -6 
          LMK    BTQBK
          NJN    BMG08.1           IF NOT Q-BLOCK BLOCK TYPE
          LDK    BTBLK             CONVERT Q-BLOCK TO BLOCK 
          UJN    BMG08.3           SAVE BLOCK TYPE
  
 BMG08.1  LMK    BTQMS&BTQBK
          NJN    BMG08.2           IF NOT Q-MESSAGE BLOCK TYPE
          LDK    BTMSG             CONVERT Q-MESSAGE TO MESSAGE 
          UJN    BMG08.3           SAVE BLOCK TYPE
  
 BMG08.2  LDD    D.T0+C.HABT       GET BLOCK TYPE 
          SHN    -6 
 BMG08.3  SHN    S.PBT
          STM    HDRP+R.PBT        INSERT BLOCK TYPE
          NJN    BMG10             IF NON ZERO ABT
 BMG09    LDN    ET.WABT           ABT ERROR
          STD    D.REQ3+C.ERRTYP
          LJM    BMG01
  
 BMG10    SHN    -S.PBT 
          SBN    ABTMSG+1 
          PJN    BMG09             IF BAD ABT 
          LDD    D.T0+C.HFLGS 
          SHN    17-S.LACK
          PJN    BMG11             IF LOCAL ACK IS NOT TO BE SENT 
          LDK    M.PRU+M.EOR
          RAM    HDRP+R.PDBC       SET PRU BIT IN HEADER
          LDK    RC.WLACK 
          STD    D.REQ3+C.RC       SEND LOCAL ACK 
 BMG11    LDD    D.T0+C.HABN
          LPN    77B
          STM    HDRP+R.PABN       INSERT ABN 
          STD    D.REQ3+C.ABN 
          LDD    D.T0+C.HABN+1
          STM    HDRP+R.PABN+1
          STD    D.REQ3+C.ABN+1 
          LDD    D.REQ2+C.PATH
          SHN    4
          STM    HDRP+R.PCN        INSERT PATH ID 
          LDD    BUFBYTES 
          ADN    4
          STD    D.Z0 
          SHN    1                 2 * VALUE
          ADD    D.Z0              3 * VALUE
          SHN    2                 12 * VALUE 
          ADD    D.Z0              13 * VALUE 
          SHN    12                (13 * VALUE)/64
          STD    D.Z1 
          SHN    8                 4 * 13 * VALUE 
          SBD    D.Z0              51 * VALUE 
          ADD    D.Z1              51 * VALUE + (13 * VALUE)/64 
          SHN    -8                (51 * VALUE + (13 * VALUE)/64)/256 
          STD    REMWORDS 
          ZJN    BMG14             IF NO TEXT TO BE READ
          LDD    D.CALLP+C.TA 
          LPN    77B
          SHN    12 
          LMD    D.CALLP+C.TA+1 
          NJN    BMG13             IF NO ADDRESS ERROR
 BMG12    LDN    ET.WTA            TEXT ADDRESS ERROR 
          STD    D.REQ3+C.ERRTYP
          LJM    BMG01
  
 BMG13    ADD    REMWORDS 
          ADDRA  ER=BMG12 
          SBD    REMWORDS 
          CRM    BUFPD,REMWORDS    READ TEXT
 BMG14    LDN    0                 NORMAL RETURN
          LJM    BMGX 
OBH       SPACE  4,10 
**        OBH - OUTPUT BINARY HEADER. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, NO BLOCK OUTPUT.
*                    .LT. 0, HARDWARE ERROR.
* 
*         USES   ACT, BUFBYTES. 
* 
*         CALLS  ERR, FAN, FFN, OUT, REL, WFP.
  
  
 OBH      ENM    X                 ENTRY/EXIT 
 OBH01    LDK    FCWD              WRITE DATA FUNCTION
          RJM    FFN
          ZJN    OBH04             IF ACK RESPONSE
          MJN    OBH03             IF HARDWARE ERROR
          LMN    RCTN&RCAK
          ZJN    OBHX              IF TNR RESPONSE
          LMN    RCFL&RCTN
          ZJN    OBHX              IF PATH IN FLUSH STATE 
          LMN    RCCA&RCFL
          ZJN    OBHX              IF CONVERT MODE ACTIVE 
          LMN    RCAB&RCCA
          NJN    OBH02             IF NOT PATH ABORTED
          LDN    EVTABT 
          STD    EVENT             SAVE EVENT PATH ABORTED
          LCN    0
          UJN    OBHX 
  
 OBH02    LCN    NADERRH           ABNORMAL RESPONSE CODE 
 OBH03    RJM    ERR               REPORT ERROR 
          MJN    OBHX              IF FIRM HARDWARE ERROR 
          LDK    FCAB              ABORT OUTPUT 
          RJM    FFN
          MJN    OBH03             IF HARDWARE ERROR
          UJN    OBH01             RESTART OUTPUT 
  
 OBH04    LDK    FCBM              SELECT BINARY MODE 
          RJM    FFN
 OBH05    MJN    OBH03             IF HARDWARE ERROR
          NJN    OBH02             IF RESPONSE ERROR
          RJM    WFP               WAIT FOR PRIMED
          MJN    OBH03             IF ERROR 
          LDK    FCOB              OUTPUT BIT STRING
          RJM    FAN
          MJN    OBH03             IF ERROR 
          LDC    HDRP 
          STM    OUTA              SET OUTPUT BUFFER ADDRESS
          LDD    ACT
          SBN    ACA5 
          MJN    OBH06             IF BINARY MODE 
          LDN    HDRLEN            OUTPUT HEADER ONLY 
          UJN    OBH07
  
 OBH06    LDD    BUFBYTES          OUTPUT HEADER AND TEXT 
          ADN    3
          SCN    3
          STD    BUFBYTES          BUFBYTES IS NOW A MULTIPLE OF 4
          ADN    HDRLEN 
 OBH07    RJM    OUT               OUTPUT DATA
          ZJN    OBH08             IF OUTPUT COMPLETE 
          MJN    OBH05             IF HARDWARE ERROR
          LCN    NADERRK           TRANSFER LENGTH ERROR
          UJN    OBH05
  
 OBH08    LDD    ACT
          SBN    ACA5 
          PJN    OBH10             IF NOT BINARY DATA 
 OBH09    LDK    FCTD              TRANSMIT DATA
          RJM    FFN
          PJN    OBH10             IF NO HARDWARE ERROR 
          RJM    ERR               REPORT ERROR 
          MJN    OBH11             IF FIRM HARDWARE ERROR 
          UJN    OBH09             RETRY
  
 OBH10    LDN    1                 NORMAL RETURN
 OBH11    LJM    OBHX 
OCD       SPACE  4,10 
**        OCD - OUTPUT CHARACTER DATA.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, RETRY WRITE.
*                    .LT. 0, HARDWARE ERROR.
* 
*         USES   ACT, BUFBYTES. 
* 
*         CALLS  ERR, FAN, FFN, OUT, REL, WFP.
  
  
 OCD      ENM    X                 ENTRY/EXIT 
          LDD    REMWORDS 
          NJN    OCD0              IF DATA TO BE TRANSFERRED
          LJM    OCD4              TRANSMIT THE DATA BLOCK
  
 OCD0     LDK    FCWD              WRITE DATA 
          RJM    FFN
          ZJN    OCD3              IF ACK RESPONSE
          LMN    RCFL&RCAK
          ZJN    OCD3              IF PATH IN FLUSH STATE 
          LMN    RCAB&RCFL
          NJN    OCD1              IF NOT PATH ABORTED
          LDN    EVTABT 
          STD    EVENT             SAVE EVENT PATH ABORTED
          LCN    0
          UJN    OCDX 
  
 OCD1     MJN    OCD2              IF HARDWARE ERROR
          LCN    NADERRH           ABNORMAL RESPONSE CODE 
 OCD2     RJM    ERR               REPORT ERROR 
          MJN    OCDX              IF FIRM HARDWARE ERROR 
          LDK    FCAB              ABORT TRANSACTION
          RJM    FFN
          MJN    OCD2              IF HARDWARE ERROR
          LDN    0
          UJN    OCDX              RETRY WRITE RETURN 
  
 OCD3     LDM    OCDA,ACT          SELECT NAD CONVERSION MODE 
          RJM    FFN
          NJN    OCD1              IF ERROR 
          RJM    WFP               WAIT FOR PRIMED
          MJN    OCD2              IF ERROR 
          LDM    OCDB,ACT          SELECT DI CONVERSION 
          RJM    FAN
          MJN    OCD2              IF ERROR 
          LDC    BUFPD
          STM    OUTA              SET OUTPUT BUFFER ADDRESS
          LDN    ACAS 
          SBD    ACT
          PJN    OCD3.5            IF NOT ASC II
          AOD    BUFBYTES 
          SCN    1
          STD    BUFBYTES          BUFBYTES IS NOW A MULTIPLE OF 2
 OCD3.5   LDD    BUFBYTES 
          RJM    OUT               OUTPUT CHARACTER DATA
          ZJN    OCD4              IF OUTPUT COMPLETE 
          MJN    OCD3.7            IF HARDWARE ERROR
          LCN    NADERRK           TRANSFER LENGTH ERROR
 OCD3.7   LJM    OCD2 
  
 OCD4     LDK    FCTD              TRANSMIT DATA
          RJM    FFN
          PJN    OCD5              IF NO HARDWARE ERROR 
          RJM    ERR               REPORT ERROR 
          MJN    OCD6              IF FIRM HARDWARE ERROR 
          UJN    OCD4              RETRY
  
 OCD5     LDN    1                 NORMAL RETURN
 OCD6     LJM    OCDX 
  
 OCDA     EQU    *-3
          CON    FCBM              ASCII (8 IN 12)
          CON    FCAM              DISPLAY CODE 
  
 OCDB     EQU    *-3
          CON    FCO8              ASCII (8 IN 12)
          CON    FCO6              DISPLAY CODE 
*CALL COMSEL
          SPACE  4,10 
          USE    OVERFLOW 
          QUAL   *
          ERRMI  LSTPTHWD-* 
          TTL    NDR/3NW - STATUS/IDLE/DROP/CONMODE FUNCTIONS.
          TITLE 
          QUAL   3NW
          IDENT  3NW,OVLB+5 
          ORG    OVLB+5 
          COMMENT  NDR OVERLAY - STATUS/IDLE/DROP/CONMODE FUNCTIONS.
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
DTW       TITLE  DTW - DETERMINE 3NW FUNCTION ENTRY.
**        DTW - DETERMINE 3NW FUNCTION ENTRY. 
* 
*         ENTRY  (FUNCTION) = FUNCTION CALLED.
* 
*         EXIT   (A) = 0, ERROR.
*                    = 1, NORMAL RETURN.
* 
*         USES   FUNCTION.
* 
*         CALLS  DRP, IDL, STT. 
  
  
 DTW      ENM    X
          LDD    FUNCTION 
          LMK    IDLE 
          ZJN    DTW1              IF IDLE FUNCTION 
          LMK    STATUSF&IDLE 
          ZJN    DTW2              IF STATUS FUNCTION 
          LMK    DROPOUT&STATUSF
          ZJN    DTW3              IF DROPOUT FUNCTION
          LMK    SELCM&DROPOUT
          ZJN    DTW4              IF SELECT CONVERT MODE 
          LMK    EXITCM&SELCM 
          ZJN    DTW4              IF EXIT CONVERT MODE 
          LDN    0                 ERROR
          UJN    DTWX 
  
 DTW1     RJM    IDL               CALL FUNCTION IDLE 
          UJN    DTWX 
  
 DTW2     RJM    STT               CALL FUNCTION STATUS 
          UJN    DTWX 
  
 DTW3     RJM    DRP               CALL FUNCTION DROPOUT
          UJN    DTWX 
  
 DTW4     RJM    SDM               SELECT/DESELECT CONVERT MODE 
          UJN    DTWX 
IDL       TITLE  IDL - IDLE.
**        IDL - IDLE. 
* 
*         READ MILLISECOND CLOCK. 
*         RELEASE FIELD ACCESS. 
*         DELAY.
*         REQUEST FIELD ACCESS. 
*         READ REQUEST AREA.
*         IF NOT IDLE FUNCTION THEN RETURN. 
*         READ MILLISECOND CLOCK. 
*         IF NEXT MILLISECOND NOT ELAPSED THEN LOOP TO DELAY. 
*         IF IDLE TIME EXPIRED THEN RETURN. 
*         IF TEN MILLISECONDS NOT ELAPSED THEN LOOP TO DELAY. 
*         IF FOUR CONSECUTIVE CHECKS SHOW NO PPS THEN RETURN. 
*         LOOP TO DELAY.
* 
*         ENTRY  (D.REQ2+C.IDLE) = NUMBER OF MILLISECONDS TO
*                                  REMAIN IDLE. 
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ADDRESS ERROR.
*                (D.Z7) = 0, NO IDLE FUNCTION CHANGE. 
*                       = 1, IDLE FUNCTION CHANGE.
* 
*         USES   D.Z7 - D.T7. 
* 
*         CALLS  R.RAFL, R.TAFL.
  
  
 IDL      ENM    X                 ENTRY/EXIT 
          LDK    T.MSC
          CRD    D.T3              READ MILLISECOND CLOCK INTO D.T7 
          LDN    0
          STD    D.T5              ZERO COUNT OF TIMES ZERO PPS AVAIL 
          STD    D.T6              ZERO MILLISECONDS ELAPSED
          STD    D.Z7              SET NO IDLE CHANGE FLAG
 NOS      IF     DEF,NOS
 IDL1     BSS    0
 NOS      ELSE
 IDL1     RJM    R.TAFL            RELEASE FIELD ACCESS 
 NOS      ENDIF 
          LDN    77B
 IDL2     SBN    1                 DELAY
          PJN    IDL2              IF DELAY NOT COMPLETE
 NOS      IF     DEF,NOS
          LDN    0
          RJM    R.MTR             PAUSE FOR RELOCATION 
 NOS      ELSE
          RJM    R.RAFL            REQUEST FIELD ACCESS 
 NOS      ENDIF 
          LDD    COMMADR
          SHN    3
          ADDRA  ER=IDLX
          CRD    D.T0              READ REQUEST AREA
          LDD    D.T0+C.FUNC
          LPN    77B
          SBN    IDLE 
          ZJN    IDL5              IF STILL IDLE FUNCTION 
          AOD    D.Z7              SET IDLE FUNCTION CHANGE FLAG
 IDL3     LDN    0                 NORMAL RETURN CODE 
 IDL4     STD    D.REQ3+C.RC
          LDN    1                 NORMAL RETURN
          UJN    IDLX 
  
 IDL5     LDK    T.MSC
          CRD    D.T0              READ MILLISECOND CLOCK 
          LDD    D.T4 
          SBD    D.T7 
 NOS      IF     DEF,NOS
          ZJN    IDL1              IF A MILLISECOND HAS NOT ELLAPSED
 NOS      ELSE
          MJN    IDL6              IF WRAP AROUND (COUNT AS ONE MILL) 
          SBN    4
          MJN    IDL1              IF NOT NEXT MILLISECOND
 NOS      ENDIF 
 IDL6     AOD    D.T6              INCREMENT MILLISECONDS ELAPSED 
          SBD    D.REQ2+C.IDLE
          PJN    IDL3              IF IDLE TIME EXPIRED 
          LDD    D.T4 
          STD    D.T7              REPLACE START TIME 
          LDD    D.T6 
          SBN    10 
          MJN    IDL8              IF TEN MILLISECONDS NOT GONE 
 NOS      IF     DEF,NOS
          LDK    PPAL 
          CRD    D.T0              READ PP AVAILABLE WORD 
          LDD    D.T0+4 
 NOS      ELSE
          LDD    D.T1 
 NOS      ENDIF 
          NJN    IDL7              IF IDLE PPS AVAILABLE
          AOD    D.T5              INCREMENT IDLE PPS NOT AVAIL COUNT 
          SBN    4
          MJN    IDL8              IF STILL NOT 4 MILL WITH NO PPS
          LDN    RC.NOPP           TERMINATE WITH NO PPS AVAIL
          UJN    IDL4 
 IDL7     LDN    0
          STD    D.T5              RESET IDLE PPS NOT AVAIL COUNT 
 IDL8     LJM    IDL1 
DRP       TITLE  DRP - DROPOUT. 
**        DRP - DROPOUT.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
* 
*         USES   NONE.
* 
*         CALLS  NONE.
  
  
 DRP      ENM    X                 ENTRY/EXIT 
          LDN    1
          UJN    DRPX 
STT       TITLE  STT - STATUS.
**        STT - STATUS. 
* 
*         INITIALIZE FOR APPLICATION TABLE SEARCH.
*         DETERMINE EST STATUS. 
*         RESERVE CHANNEL.
*         INPUT A CONTROL MESSAGE.
*         FOR EACH APPLICATION TABLE HEADER.
*           READ APPLICATION TABLE HEADER.
*           IF NOT USED THEN CYCLE. 
*           FOR EACH CONNECTION.
*             READ CONNECTION ENTRY.
*             IF PATH ID IS ZERO THEN CYCLE.
*             IF DIFFERENT LOCAL NAD THEN CYCLE.
*             IF CONNECTION BROKEN THEN CYCLE.
*             SEE IF CONTROL MESSAGE IS FOR THIS CONNECTION.
*             IF EVENT LIST NOT FULL AND NO HARDWARE ERRORS 
*             THEN
*               CALL EVT TO DETERMINE POSSIBLE EVENT. 
*             IF EVENT LIST FULL AND NO CONTROL MESSAGE THEN RETURN.
*         IF CONNECTION INACTIVE
*         THEN
*           CALL MDP TO MONITOR DISCONNECT PROCESS
*         ELSE
*           CALL GCR TO DETERMINE AVAILABILITY OF CONNECT REQUEST.
*         RELEASE CHANNEL.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ADDRESS ERROR, ABORT CP.
* 
*         USES   D.T0 - D.T7, D.CON, D.PNT, D.EVENT, D.REQ1, D.REQ3.
* 
*         CALLS  ERR, EVT, FFN, GCR, ICM, MCM, MDP, REL, RES, 
*                R.RAFL.
  
  
 STT      ENM    X                 ENTRY/EXIT 
          LDK    P.ZERO 
          CRD    D.T0 
          LDD    COMMADR
          SHN    3
          ADN    W.REQ4 
          ADDRA  ER=STTX
          CWD    D.T0              WRITE ZERO LIST TERMINATOR 
          LDK    P.APLADR 
          ADDRA  ER=STTX
          CRD    D.PNT             OBTAIN APPLICATION TABLE ADDRESSES 
          LDN    0
          STD    D.REQ3+C.STFLG    ZERO STATUS RETURN FLAGS 
          STD    D.T6              ZERO STATUS OFFSET 
          STD    CMAVL             ZERO CONTROL MESSAGE AVAILABLE 
          STM    STTA              CLEAR EVENT TABLE FULL 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
 NOS      IF     -DEF,NOS 
          LDN    P.EST
          CRD    D.T0              OBTAIN EST ADDRESS 
 NOS      ENDIF 
          LDD    D.REQ1+C.ESTORD
          LPC    777B 
 NOS      IF     DEF,NOS
          RJM    .EST              CONVERT EST ORDINAL TO EST ADDRESS 
          ADK    EQDE 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTAT 
          SHN    17-S.ESTDSO
 NOS      ELSE
          ADD    D.T0+C.EST 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTMNE
          SHN    17-S.ESTON 
 NOS      ENDIF 
          PJN    STT01             IF EST IS ON 
          LDK    M.ESTOFF 
          STD    D.REQ3+C.STFLG    SET EST OFF FLAG 
 STT01    RJM    RES               RESERVE CHANNEL
          RJM    ICM               INPUT A CONTROL MESSAGE
          ZJN    STT02             IF ADDRESS ERROR 
          PJN    STT03             IF NORMAL RETURN 
          LDN    1                 HARDWARE ERROR 
 STT02    LJM    STT20
  
 STT03    LDN    APLLEN 
          STD    D.T0 
          LDCA   D.PNT+C.FAPL,ER=STT06
          CRM    APBF,D.T0         READ APPLICATION HEADER
          LDM    APBF+W.MINACN*5+C.MINACN 
          STD    D.EVENT+C.EACN    INITIALIZE ACN FOR EVENT 
          LDD    D.PNT+C.FAPL 
          STD    D.EVENT+C.APLADR  INITIALIZE APL ADDRESS FOR EVENT 
          LDD    D.PNT+C.FAPL+1 
          STD    D.EVENT+C.APLADR+1 
          LDN    APLLEN 
 STT04    RAD    D.PNT+C.FAPL+1    POINT TO NEXT CONNECTION 
          SHN    -12
          RAD    D.PNT+C.FAPL 
          LDM    APBF+W.JOBORD*5+C.JOBORD 
          NJN    STT05             IF APPLICATION TABLE BEING USED
          LJM    STT13
  
 STT05    LDCA   D.PNT+C.FAPL,OK=STT07
 STT06    LJM    STT20             ADDRESS ERROR
 STT07    CRD    D.CON             READ CONNECTION ENTRY
          LDD    D.CON+C.CONPTH 
          ZJN    STT11             IF NO PATH ESTABLISHED 
          LDD    D.REQ1+C.NADORD
          SHN    -6 
          LMD    D.CON+C.CONNAD 
          LPN    77B
          NJN    STT11             IF NOT CORRECT NAD 
          LDD    D.CON+C.CONFLG 
          SHN    17-S.CONBRK
          MJN    STT11             IF CONNECTION BROKEN 
          RJM    MCM               MATCH CONTROL MESSAGE
          ZJN    STT08             IF ADDRESS ERROR 
          LDC    0                 RECORD EVENT STATUS
 STTA     EQU    *-1
          NJN    STT10             IF NOT ABLE TO RECORD EVENTS 
          RJM    EVT               DETERMINE POSSIBLE EVENTS
          MJN    STT09             IF ERROR OR EVENT LIST FULL
          NJN    STT11             IF MORE STATUS ALLOWED 
 STT08    LJM    STT20             ADDRESS ERROR
  
 STT09    AOM    STTA              SET STATUS ERROR FLAG
 STT10    LDD    CMAVL
          NJN    STT11             IF CONTROL MESSAGE AVAILABLE 
          LJM    STT19             NORMAL RETURN
  
 NOS      IF     DEF,NOS
 STT11    BSS    0
 NOS      ELSE
 STT11    RJM    R.RAFL            OBTAIN FIELD ACCESS
 NOS      ENDIF 
          SOM    APBF+W.NUMCON*5+C.NUMCON 
          ZJN    STT12             IF NO MORE CONNECTIONS 
          AOD    D.EVENT+C.EACN 
          LDN    CONLEN 
          LJM    STT04             LOOP FOR NEXT CONNECTION 
  
 STT12    AOM    APBF+W.NUMCON*5+C.NUMCON 
 STT13    LDM    APBF+W.NUMCON*5+C.NUMCON 
          ERRNZ  CONLEN-3 
          SHN    1
          ADM    APBF+W.NUMCON*5+C.NUMCON 
          RAD    D.PNT+C.FAPL+1    POINT TO NEXT APPLICATION HEADER 
          SHN    -12
          RAD    D.PNT+C.FAPL 
          SBD    D.PNT+C.LAPL 
          MJN    STT14             IF MORE APPLICATION HEADERS
          NJN    STT15             IF DONE
          LDD    D.PNT+C.LAPL+1 
          SBD    D.PNT+C.FAPL+1 
          MJN    STT15             IF NO MORE APPLICATION HEADERS 
 STT14    LJM    STT03
 STT15    LDM    STTA 
          NJN    STT19             IF ERROR OR EVENT LIST FULL
          LDD    D.T6 
          NJN    STT16             IF EVENTS REPORTED 
          LDD    D.REQ2+C.RECALL
          SBN    10 
          MJN    STT16             IF IN FREQUENT STATUS MODE 
          RJM    MDP               MONITOR DISCONNECT PROGRESS
          MJN    STT19             IF ERROR 
 STT16    LDD    D.REQ3+C.STFLG 
          SHN    17-S.ESTOFF
          MJN    STT19             IF EST IS OFF
  
**        DETERMINE IF CONNECTION REQUEST AVAILABLE 
  
          RJM    GCR               GET CONNECT REQUEST
          NJN    STT19             IF NO CONNECT MESSAGE INPUT
 STT17    LDK    FCAB              ABORT TRANSACTION
          RJM    FFN
          PJN    STT18             IF NO HARDWARE ERROR 
          RJM    ERR               REPORT ERROR 
          MJN    STT18             IF FIRM HARDWARE ERROR 
          UJN    STT17
  
 STT18    LDK    M.CONREQ 
          RAD    D.REQ3+C.STFLG    SET REQUEST AVAILABLE
 STT19    LDN    1                 SET NORMAL RETURN
 STT20    STD    D.T5              SAVE RETURN FLAG 
          LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LDD    D.T5 
          LJM    STTX              RETURN 
EVT       SPACE  4,10 
**        EVT - DETERMINE POSSIBLE EVENT. 
* 
*         SELECT PATH AND OBTAIN STATUS.
*         IF ACK STATUS THEN
*           IF CONNECTION NOT INITIALIZED THEN GENERATE EVENT.
*           IF CHANGE IN INPUT THEN GENERATE EVENT. 
*           IF CHANGE IN OUTPUT THEN GENERATE EVENT.
*           IF ABT STATUS THEN GENERATE EVENT.
*         RETURN. 
* 
*         ENTRY  (D.CON) = CONNECTION STATUS FROM RFH.
*                (D.T6) = STATUS OFFSET.
*                (D.EVENT) = EVENT WORD INITIALIZED.
*                (D.REQ3) = RETURN STATUS FLAGS INITIALIZED.
* 
*         EXIT   (A) = 1, NORMAL RETURN 
*                    .LT. 0, HARDWARE ERROR.
*                    = 0, ADDRESS ERROR.
* 
*         USES   D.CON, STATUS. 
* 
*         CALLS  ERR, FFN, PTH, REV, R.TAFL.
  
  
 EVT      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
 EVT01    LDD    D.CON+C.CONPTH 
          LMC    FCSP              SELECT PATH
          RJM    FFN
          PJN    EVT03             IF NO HARDWARE ERROR 
 EVT02    RJM    ERR               REPORT ERROR 
          PJN    EVT01             IF RETRY POSSIBLE
          UJN    EVTX              RETURN 
  
 EVT03    NJN    EVT07             IF NOT ACK RESPONSE
          LDD    D.CON+C.CONFLG 
          SHN    17-S.CONINT
          MJN    EVT04             IF CONNECTION ALREADY INITIALIZED
          LDN    EVTCON 
          RJM    REV               RECORD EVENT 
          ZJN    EVTX              IF ADDRESS ERROR 
          MJN    EVTX              IF EVENT LIST FULL 
 EVT04    LDD    STATUS 
          SHN    S.CONIA-S.CSTIA
          LMD    D.CON+C.CONFLG 
          SHN    17-S.CONIA 
          PJN    EVT05             IF NO CHANGE IN INPUT STATUS 
          LDN    EVTIN
          RJM    REV               RECORD EVENT 
          ZJN    EVT09             IF ADDRESS ERROR 
          MJN    EVT09             IF EVENT LIST FULL 
 EVT05    LDD    STATUS 
          SHN    S.CONOA-S.CSTOA
          LMD    D.CON+C.CONFLG 
          SHN    17-S.CONOA 
          PJN    EVT08             IF NO CHANGE IN OUTPUT BELOW THRESHD 
          LDN    EVTOUT 
 EVT06    RJM    REV               RECORD EVENT 
          ZJN    EVT09             IF ADDRESS ERROR 
          MJN    EVT09             IF EVENT LIST FULL 
          UJN    EVT08
  
 EVT07    LMN    RCAB&RCAK
          ZJN    EVT10             IF PATH ABORTED
          LMN    RCCP&RCAB
          ZJN    EVT08             IF CONNECT IN PROGRESS 
          LMN    RCNK&RCCP
          ZJN    EVT10
          LMN    RCDC&RCNK
          ZJN    EVT08             IF DISCONNECT IN PROGRESS
          LMN    RCFL&RCDC
          ZJN    EVT08             IF FLUSH IN PROGRESS 
          LCN    NADERRG           PATH STATUS ERROR
          LJM    EVT02
 EVT08    LDN    1                 NORMAL RETURN
 EVT09    LJM    EVTX 
  
 EVT10    RJM    PTH               OBTAIN PATH STATUS TABLE 
          MJN    EVT09             IF ERROR 
          LDM    BUFF+O=PCTSTA
          LMN    1
          NJN    EVT12             IF NOT SOME CONNECT REJECT 
          LDM    BUFF+O=PCTCLA
          LMN    5
          NJN    EVT11             IF NOT REMOTE HOST REJECT (1/5)
          LDN    EVTHREJ           CONNECT REJECTED BY REMOTE HOST
          UJN    EVT13
  
 EVT11    LMN    7&5
          NJN    EVT12             IF NOT NETWORK REJECT (1/7)
          LDN    EVTNREJ           CONNECT REJECTED BY NETWORK
          UJN    EVT13
  
 EVT12    LDN    EVTABT            PATH ABORTED 
 EVT13    LJM    EVT06
REV       SPACE  4,10 
**        REV - RECORD EVENT. 
* 
*         SAVE EVENT. 
*         INITIALIZE RETURN STATUS. 
*         WRITE EVENT.
*         INCREMENT EVENTS RECORDED.
*         IF MAXIMUM EVENTS RECORDED THEN SET EXIT. 
*         RETURN. 
* 
*         ENTRY  (D.T6) = STATUS OFFSET.
*                (D.EVENT) = EVENT WORD.
*                (A) = EVENT NUMBER.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ADDRESS ERROR.
*                    = -1, EVENT LIST FULL. 
* 
*         USES   D.T0 - D.T6, COMMADR, STATUS, D.EVENT. 
* 
*         CALLS  R.RAFL.
  
  
 REV      ENM    X                 ENTRY/EXIT 
          STD    D.EVENT+C.EVENT   SAVE EVENT TYPE
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDD    STATUS 
          SHN    -S.CSTOA 
          LPN    3B 
          STD    D.EVENT+C.STATUS  INITIALIZE INPUT/OUTPUT STATUS 
          LDM    BUFF+O=PCTRHC
          ERRNZ  O=PCTRHC-O=PCTNRC CODE DEPENDS ON VALUE
          SHN    4
          RAD    D.EVENT+C.STATUS  INSERT REJECT CODE 
          LDD    COMMADR
          SHN    3
          ADN    W.REQ4 
          ADD    D.T6 
          ADDRA  ER=REVX
          CWD    D.EVENT           WRITE EVENT INTO REQUEST AREA
          AOD    D.T6              INCREMENT EVENTS RECORDED
          SBN    MAXEVNTS 
          PJN    REV1              IF MAXIMUM EVENTS REACHED
          LDK    P.ZERO 
          CRD    D.T0 
          LDD    COMMADR
          SHN    3
          ADN    W.REQ4 
          ADD    D.T6 
          ADDRA  ER=REV2
          CWD    D.T0              WRITE ZERO LIST TERMINATOR 
          LDN    1
          UJN    REV2              NORMAL RETURN
  
 REV1     LCN    0                 EVENT LIST FULL
 REV2     LJM    REVX 
ICM       SPACE  4,10 
**        ICM - INPUT CONTROL MESSAGE.
* 
*         INPUT SELECTED CONTROL MESSAGE. 
*         IF NO MESSAGE TO INPUT
*         THEN
*           INPUT SELECTED REJECTED CONTROL MESSAGE 
*           IF NO MESSAGE TO INPUT THEN RETURN. 
*         WRITE CONTROL MESSAGE IN RHF QUEUE ENTRY. 
*         RETURN. 
* 
*         ENTRY  (D.CON) - CONNECTION FROM RHF. 
*                (D.REQ3) - RETURN STATUS FLAGS INITIALIZED.
*                (CMAVL) = 0. 
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ADDRESS ERROR.
*                    .LT. 0, HARDWARE ERROR.
*                    (CMAVL) = 0, NO MESSAGE AVAILABLE. 
*                                    .NE. 0, PATH ID OF CONNECTION. 
* 
*         USES   D.CON, CMAVL, D.REQ1, D.REQ3, ONE, D.T0 - D.T7.
* 
*         CALLS  GCM, R.RAFL, R.TAFL. 
  
  
 ICM      ENM    X
          LDK    FCIC 
          STD    D.T0              INPUT SELECTED CONTROL MESSAGE 
          LDN    1                 MATCH ON FIRST CHARACTER 
          SHN    12 
*         ADK    0                 SECOND CHARACTER NOT USED. 
          RJM    GCM               GET CONTROL MESSAGE
          MJN    ICMX              IF HARDWARE ERROR
          NJN    ICM1              IF NO MESSAGE TO OBTAIN
          STD    D.T7              CLEAR REJECTED FLAG BIT
          UJN    ICM2 
  
 ICM1     LDK    FCSR 
          STD    D.T0              INPUT SELECTED REJECTED CON. MESS. 
          LDN    1                 MATCH ON FIRST CHARACTER 
          SHN    12 
*         ADK    0                 SECOND CHARACTER NOT USED
          RJM    GCM               GET CONTROL MESSAGE
 NOS      IF     DEF,NOS
          NJN    ICMX              IF HARDWARE ERROR OR NO MESSAGE
 NOS      ELSE
          MJN    ICMX              IF HARDWARE ERROR
          ZJN    ICM1.5            IF REJECT MESSAGE FOUND
          RJM    R.RAFL            REQUEST FIELD ACCESS 
          LDN    1                 NORMAL RETURN
          UJN    ICMX 
  
 ICM1.5   BSS    0
 NOS      ENDIF 
          LDK    M.REJCMG 
          STD    D.T7              SET REJECTED CONTROL MESSAGE FLAG
  
*         WRITE MESSAGE TO RHF QUEUE ENTRY. 
  
 ICM2     BSS    0
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDK    P.ZERO 
          CRD    D.T0 
          LDD    D.T7 
          STD    D.T0+C.REJCMG     SET REJECT CONTROL MESSAGE FLAG
          LDD    D.T5 
          STD    D.T0+C.CBYTES     SET BYTE COUNT BEYOND BLOCK HEADER 
          LDN    CMGL/5 
          STD    D.Z7 
          LDD    D.REQ1+C.QADDR 
          LPN    77B
          SHN    12 
          LMD    D.REQ1+C.QADDR+1  VALIDATE LAST WORD OF QUEUE ENTRY
          ZJN    ICM3              IF INVALID ADDRESS 
          ADN    CMGL/5+W.WD2 
          ADDRA  ER=ICM3
          SBN    CMGL/5+W.WD2-W.WD1 
          CWM    D.T0,ONE          WRITE CONTROL WORD 
          CWM    BUFF,D.Z7         WRITE CONTROL MESSAGE
          LDK    M.CTLMSG 
          RAD    D.REQ3+C.STFLG    SET CONTROL MESSAGE INPUT
          LDM    BUFF+R.NAME+1+1   GET LOCAL PATH ID
          SHN    -1*4 
          NJN    ICM2.5            IF PATH-RELATED CONTROL MSG
          LDM    BUFF+R.NAME+1     USE LOWER BYTE OF NAME FIELD 
          LPK    377B 
 ICM2.5   STD    CMAVL             PATH ID OF CONTROL MESSAGE 
          LDN    1
 ICM3     LJM    ICMX 
MCM       SPACE  4,10 
**        MCM - MATCH CONTROL MESSAGE WITH THIS CONNECTION. 
* 
*         IF MESSAGE NOT FOR THIS CONNECTION THEN RETURN. 
*         COMPLETE RHF QUEUE ENTRY. 
*         CLEAR CONTROL MESSAGE AVAILABLE BYTE. 
*         RETURN. 
* 
*         ENTRY  (D.CON) - CONNECTION FROM RHF. 
*                (D.EVENT) - EVENT WORD INITIALIZED.
*                (CMAVL) = 0, NO MESSAGE AVAILABLE. 
*                                .NE. 0, PATH ID OF CONTROL MESSAGE.
* 
*         EXIT   (A) = 0, ADDRESS ERROR.
*                    .NE. 0, NORMAL RETURN. 
* 
*         USES   D.Z6 - D.Z7, D.T0 - D.T4, CMAVL, D.CON, D.EVENT, 
*                D.REQ1.
* 
*         CALLS  R.RAFL, R.TAFL.
  
  
 MCM      ENM    X
          LDD    CMAVL
          LMD    D.CON+C.CONPTH 
          NJN    MCMX              IF MESSAGE NOT FOR THIS CONNECTION 
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDD    D.REQ1+C.QADDR 
          LPN    77B
          SHN    12 
          LMD    D.REQ1+C.QADDR+1 
          ZJN    MCMX              IF ADDRESS ERROR 
          ADN    W.WD1
          ADDRA  ER=MCMX
          CRD    D.T0              READ QUEUE CONTROL WORD
          STD    D.Z7              SAVE QUEUE ADDRESS 
          SHN    -12
          STD    D.Z6 
          LDD    D.EVENT+C.EACN 
          STD    D.T0+C.CACN       SET ACN
          LDD    D.EVENT+C.APLADR 
          STD    D.T0+C.APLADR     SET APPLICATION ADDRESS
          LDD    D.EVENT+C.APLADR+1 
          STD    D.T0+C.APLADR+1
          LDD    D.Z6 
          SHN    12 
          LMD    D.Z7 
          CWD    D.T0              REWRITE RHF QUEUE CONTROL WORD 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          LDN    0
          STD    CMAVL             CLEAR CONTROL MESSAGE AVAILABLE
          LDN    1                 NORMAL RETURN
          LJM    MCMX 
*CALL COM3NW
MDP       SPACE  4,10 
**        MDP - MONITOR DISCONNECT PROGRESS.
* 
*         THIS ROUTINE CAUSES THE NAD INTERRUPTS REQUIRED 
*         FOR A LOGICAL PATH DISCONNECT.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .LT. 0, ERROR RETURN.
* 
*         USES   D.Z5, D.Z6, STATUS.
* 
*         CALLS  ERR, FAN, FFN, OUT, WFP. 
  
  
 MDP      ENM    X                 ENTRY/EXIT 
          LDN    0
          STD    D.Z5              ZERO PATH COUNT
          STD    D.Z6              ZERO FIRST PATH ID 
          LDC    MDPA 
          STM    OUTA              OUTPUT BUFFER ADDRESS
 MDP1     LDK    FCSN              SELECT PATH BY NAME
          RJM    FFN
          ZJN    MDP3              IF ACK RESPONSE
          MJN    MDP2              IF HARDWARE ERROR
          LCN    NADERRH           ABNORMAL RESPONSE CODE 
 MDP2     RJM    ERR               REPORT ERROR 
          MJN    MDPX              IF FIRM HARDWARE ERROR 
          UJN    MDP1              RETRY
  
 MDP3     RJM    WFP               WAIT FOR PRIMED
          MJN    MDP2              IF ERROR 
          LDN    FCO8              OUTPUT 8/12
          RJM    FAN
          MJN    MDP2              IF ERROR 
          LDN    MDPAL
          RJM    OUT               OUTPUT SELECT VALUE
          ZJN    MDP4              IF NO ERROR AND NO LENGTH ERROR
          MJN    MDP2              IF HARDWARE ERROR
          LCN    NADERRJ           PARAMETER LENGTH ERROR 
          UJN    MDP2 
  
 MDP4     LDK    FCRY              SEND READY 
          RJM    FFN
          MJN    MDP2              IF HARDWARE ERROR
          LDD    STATUS 
          SHN    17-S.CSTSP 
          PJN    MDP7              IF PATH NOT RETURNED 
          AOD    D.Z5              INCREMENT PATH COUNT 
          LMC    177B 
          ZJN    MDP7              IF MAXIMUM PATHS 
          LDD    D.Z6 
          ZJN    MDP8              IF FIRST PATH
          LMD    STATUS 
          LPC    177B 
          ZJN    MDP7              IF FIRST PATH AGAIN
 MDP5     LDN    FCPS              PATH STATUS
          RJM    FFN
          MJN    MDP6              IF HARDWARE ERROR
          LJM    MDP1 
  
 MDP6     LJM    MDP2 
  
 MDP7     LDN    0                 NORMAL RETURN
          LJM    MDPX 
  
 MDP8     LDD    STATUS 
          LPC    177B 
          STD    D.Z6              SAVE FIRST PATH ID 
          UJN    MDP5 
  
 MDPA     VFD    4/0,8/1RR+100B 
          VFD    4/0,8/1RH+100B 
 MDPAL    EQU    *-MDPA 
SCM       TITLE  SDM - SELECT/DESELECT CONVERT MODE.
**        SDM - SELECT/DESELECT CONVERT MODE. 
* 
*         IF NOS/BE THEN RELEASE FIELD ACCESS.
*         RESERVE CHANNEL.
*         BUILD UNVC FUNCTION BLOCK.
*         ISSUE UNVC AND PROCESS NAD RESPONSE.
*         RELEASE CHANNEL.
* 
*         ENTRY - (D.REQ1) AND (D.REQ2) CONTAIN RHF REQUEST.
* 
*         EXIT  - (A) = 0, ADDRESS ERROR. 
*                     = 1, FUNCTION COMPLETED.
* 
*         NOTE  - SELECT CONVERT MODE FUNCTIONS FOR THE NAD 
*                 CORRESPOND TO THE CODE GIVEN TO NDR BY RHF. 
  
  
 SDM      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          RJM    RES               RESERVE CHANNEL
          LDD    D.REQ2+C.PATH
          STM    UNCB+UC.PATH       STORE PATH NUMBER 
          LDK    SFSC 
          STM    UNCB+UC.SFC        STORE UNVC SUB FUNCTION 
          LDD    FUNCTION 
          LMK    EXITCM 
          NJN    SDM1              IF NOT EXIT CONVERT MODE 
          LDK    CMSFECM
          UJN    SDM2 
  
 SDM1     LDD    D.REQ2+C.CMSF
 SDM2     STM    UNCB+UC.CMSF      STORE SELECT/DESELECT TYPE 
          RJM    IUR               ISSUE UNVC AND PROCESS RESPONSE
          ZJN    SDM3              IF ADDRESS ERROR 
          LDN    0
          RJM    REL               COMPLETELY RELEASE CHANNEL 
          LDN    1                 FUNCTION COMPLETE
          UJK    SDMX 
  
 SDM3     RJM    REL               COMPLETELY RELEASE CHANNEL 
          LDN    0                 ADDRESS ERROR
          UJK    SDMX 
IUR       SPACE  4,10 
**        IUR - ISSUE UNIVERSAL COMMAND AND PROCESS RESPONSE. 
* 
*         ASLONGAS FUNCTION NOT COMPLETED 
*           AND FUNCTION IS RETRIABLE 
*         DO
*           ISSUE UNIVERSAL COMMAND.
*           IF NO ERRORS
*           THEN
*             SEND UNVC FUNCTION BLOCK. 
*             IF NO ERRORS
*             THEN
*               WAIT FOR NAD RESPONSE.
*               IF NAD HAS RESPONDED
*               THEN
*                 PROCESS NAD RESPONSE. 
*                 IF VALID RESPONSE 
*                 THEN
*                   SET FUNCTION COMPLETE.
* 
*         ENTRY - CHANNEL RESERVED AND UNVC FUNCTION BLOCK SET UP.
* 
*         EXIT  - (A) > 0, FUNCTION COMPLETE. 
*                     = 0, ADDRESS ERROR. 
*                     < 0, FATAL NAD ERROR. 
  
  
 IUR      ENM    X                 ENTRY/EXIT 
 IUR1     LDK    FCUC 
          RJM    FFN               ISSUE UNVC 
          MJN    IUR2              IF NAD ERROR 
          LMK    RCUA&RCAK
          ZJN    IUR3              IF COMMAND ACCEPTED
          LCN    NADERRH           INVALID RESPONSE 
 IUR2     RJM    ERR               PROCESS NAD ERROR
          PJN    IUR1              IF RETRIABLE 
          UJK    IURX 
  
 IUR3     RJM    WFP               WAIT FOR PRIMED
          MJN    IUR2              IF NAD ERROR 
          LDK    FCO8              OUTPUT 12 TO 8 
          RJM    FAN
          MJN    IUR2              IF NAD ERROR 
          LDK    UNCB 
          STM    OUTA              FWA OF OUT BUFFER
          LDK    UNVCBS            LENGTH TO OUTPUT 
          RJM    OUT               SEND UNVC FUNCTION BLOCK 
          ZJN    IUR4              IF SUCCESSFUL OUTPUT 
          MJN    IUR2              IF NAD ERROR 
          LCN    NADERRK           TRANSFER LENGTH ERROR
          UJK    IUR2 
  
 IUR4     RJM    WFR               WAIT FOR NAD RESPONSE
          MJN    IUR2              IF NAD ERROR 
          LDD    FUNCTION 
          LMK    EXITCM 
          ZJN    IUR6              IF EXIT CONVERT MODE 
          RJM    PSR               PROCESS SELECT CONVERT RESPONSE
          PJN    IUR7              IF NO NAD ERRORS 
 IUR5     UJK    IUR2 
  
 IUR6     RJM    PER               PROCESS EXIT CONVER RESPONSE 
          MJN    IUR5              IF NAD ERROR 
 IUR7     UJK    IURX 
  
 UNCB     BSSZ   12                UNIVERSAL COMMAND BUFFER 
WFR       SPACE  4,10 
**        WFR - WAIT FOR NAD RESPONSE.
* 
*         ASLONGAS NAD HAS NOT RESPONDED
*           AND NO NAD ERRORS 
*         DO
*           GET CONTROLWARE STATUS. 
* 
*         ENTRY - UNVC FUNCTION BLOCK HAS BEEN SEND TO NAD. 
* 
*         EXIT  - (A) > 0, NAD HAS RESPONDED AND
*                          (STATUS) = NAD RESPONSE CODE.
*                     < 0, NAD ERROR. 
  
  
 WFR      ENM    X                 ENTRY/EXIT 
          LCN    0
          STD    D.T0              SET RETRY COUNT
 WFR1     RJM    CST               GET CONTROLWARE STATUS 
          MJN    WFRX              IF NAD ERROR 
          LPN    M.RESPCD 
          LMN    RCUA 
          NJN    WFRX              IF NAD HAS RESPONDED 
          SOD    D.T0 
          PJN    WFR1              IF RETRIES NOT EXHAUSED
          LCN    NADERRE           TIMED-OUT WAITING FOR NAD RESPONSE 
          UJN    WFRX 
PSR       SPACE  4,10 
**        PSR - PROCESS SELECT CONVERT MODE RESPONSE. 
* 
*         IF SUCCESSFUL CONVERT MODE SELECT 
*         THEN
*           SET CONVERT MODE SELECTED RESPONSE. 
*         ELSE
*           IF PATH ABORTED 
*           THEN
*             WRITE EVENT IN RHF REPLY BUFFER.
*             SET CONVERT MODE NOT SELECTED RESPONSE. 
*           ELSE
*             RETURN NAD RESPONSE ERROR.
* 
*         ENTRY - (STATUS) = UNVC FUNCTION BLOCK RESPONSE.
* 
*         EXIT  - (A) > 0, FUNCTION COMPLETED.
*                     = 0, ADDRESS ERROR. 
*                     < 0, NAD RESPONSE ERROR.
  
  
 PSR      ENM    X                 ENTRY/EXIT 
          LDD    STATUS 
          LPN    M.RESPCD 
          LMK    RCAK 
          ZJN    PSR1              IF SUCCESSFUL CM SELECT
          LMK    RCNK&RCAK
          ZJN    PSR4              IF PATH ABORTED
          LMK    RCAB&RCNK
          ZJN    PSR4              IF PATH ABORTED
          LCN    NADERRG           PATH NOT IN CORRECT STATE
          UJK    PSRX 
  
 PSR1     LDN    RC.CMS            CONVERT MODE SELECTED
 PSR2     STD    D.REQ3+C.RC       SAVE RHF REPLY CODE
          LDN    1
 PSR3     UJK    PSRX 
  
 PSR4     BSS    0
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDK    P.ZERO 
          CRD    D.T0 
          LDK    EVTABT 
          STD    D.T0+C.EVENT      RETURN PATH ABORTED EVENT
          LDD    COMMADR
          SHN    3
          ADN    W.REQ4 
          ADDRA  ER=PSR3
          CWD    D.T0              WRITE EVENT TO RHF REPLY AREA
          LDN    RC.CMSF           CONVERT SELECT FAILED
          UJN    PSR2 
PER       SPACE  4,10 
**        PER - PROCESS EXIT CONVERT MODE RESPONSE. 
* 
*         IF PATH ABORTED 
*         THEN
*           WRITE ABORT EVENT TO RHF REPLY BUFFER.
*           SET CONVERT MODE EXIT FAILED RESPONSE.
*         ELSE
*           IF PATH IN EXITING CONVERT MODE STATE 
*           THEN
*             SET REPLY CODE FOR RHF TO RE-ISSUE. 
*           ELSE
*             IF CONVERT MODE NOT ACTIVE (EXITED) 
*             THEN
*               WRITE CONVERT MODE STATISTICS IN RHF REPLY AREA.
*               SET REPLY CODE TO CONVERT MODE EXITED.
*             ELSE
*               RETURN NAD ERROR. 
* 
* 
*         ENTRY - (STATUS) = UNVC FUNCTION BLOCK RESPONSE.
* 
*         EXIT  - (A) > 0, FUNCTION COMPLETED.
*                     = 0, ADDRESS ERROR. 
*                     < 0, NAD ERROR. 
  
  
 PER      ENM    X                 ENTRY/EXIT 
          LDD    STATUS 
          LPN    M.RESPCD 
          LMK    RCAB 
          ZJN    PER2              IF PATH ABORTED
          LMK    RCNK&RCAB
          ZJN    PER2              IF PATH ABORTED
          LMK    RCCE&RCNK
          ZJN    PER3              IF PATH IN EXIT CM STATE 
          LMK    RCCN&RCCE
          ZJN    PER6              IF CONVERT MODE EXITED 
          LCN    NADERRG           PATH IN INVALID STATE
 PER1     UJK    PERX 
  
 PER2     BSS    0
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          LDK    P.ZERO 
          CRD    D.T0 
          LDK    EVTABT 
          STD    D.T0+C.EVENT      RETURN PATH ABORTED EVENT
          LDD    COMMADR
          SHN    3
          ADN    W.REQ5 
          ADDRA  ER=PER1
          CWD    D.T0              WRITE EVENT TO RHF REPLY AREA
          LDK    RC.CMEF           CONVERT MODE EXIT FAILED 
          UJN    PER4 
  
 PER3     LDN    RC.CME            PATH EXITING CM, RE-ISSUE
 PER4     STD    D.REQ3+C.RC
          LDN    1
 PER5     UJK    PERX 
  
 PER6     RJM    GCS               GET CONVERT MODE STATISTS
          MJN    PER5              IF NAD ERROR 
          LDN    RC.CMSE           SUCCESSFUL CONVERT MODE EXIT 
          UJN    PER4 
GCS       SPACE  4,10 
**        GCS - GET CONVERT MODE STATISTICS.
* 
*         READ PATH STATUS TABLE FROM NAD.
*         IF NO ERRORS
*         THEN
*           IF PARTIALS WERE DISCARDED BY THE NAD 
*           THEN
*             RETURN STATUS OF PARTIALS DISCARDED.
*           GET HOST ABN. 
*           GET NETWORK ABN.
*           WRITE STATISTICS TO RHF REPLY AREA. 
* 
*         ENTRY - NAD PRIMED TO READ THE PATH STATUS TABLE. 
* 
*         EXIT  - (A) > 0, STATISTICS WRITTEN TO RHF REPLY AREA.
*                     = 0, ADDRESS ERROR. 
*                     < 0, NAD ERROR. 
  
  
 GCS      ENM    X                 ENTRY/EXIT 
          RJM    WFP               WAIT FOR PRIMED
          MJN    GCSX              IF NAD ERROR 
          LDK    FCI8              INPUT 8 TO 12
          RJM    FAN
          MJN    GCSX              IF NAD ERROR 
          LDK    BUFF 
          STM    INPA              FWA OF STATUS BUFFER 
          LDK    CMPSLN 
          STD    FLUSH             BE SURE TO FLUSH BUFFER
          RJM    INP               INPUT PATH STATUS
          MJN    GCSX              IF NAD ERROR 
          SBK    CMPSLN 
          ZJN    GCS1              IF SUCCESSFUL INPUT
          LCN    NADERRK           TRANSFER LENGTH ERROR
          UJK    GCSX 
  
 GCS1     BSS    0
          IF     -DEF,NOS,1 
          RJM    R.RAFL            REQUEST FIELD ACCESS 
          LDK    P.ZERO 
          CRD    D.T0              CLEAR STATISTICS WORD
          LDM    BUFF+O=PCTCMF
          SHN    17-S.PBD 
          PJN    GCS2              IF PARTIALS NOT DISCARDED
          LDK    CX.PBD            PARTIALS DISCARDED AT CM EXIT
          STD    D.T0+C.CXSTAT
 GCS2     LDM    BUFF+O=PCTHA2     EXTRACT HOST ABN 
          SHN    -4 
          SHN    14 
          LMM    BUFF+O=PCTHA1
          SHN    4
          LPN    77B
          STD    D.T0+C.NHABN      UPPER 6 BITS OF HOST ABN 
          LDM    BUFF+O=PCTHA2
          LPN    17B
          SHN    8
          LMM    BUFF+O=PCTHA2+1
          STD    D.T0+C.NHABN+1    LOWER 12 BITS OF HOST ABN
          LDM    BUFF+O=PCTNA2+1   EXTRACT NETWORK ABN
          LPN    77B
          SHN    6
          RAD    D.T0+C.NNABN+1    LOWER 6 BITS OF NETWORK ABN
          LDM    BUFF+O=PCTNA1
          LPN    3
          SHN    8
          LMM    BUFF+O=PCTNA2
          STD    D.Z7              SAVE UPPER 10 BITS OF NETWORK ABN
          LDM    BUFF+O=PCTNA2+1
          SHN    -6 
          SHN    16 
          LMD    D.Z7 
          SHN    2
          STD    D.T0+C.NNABN      UPPER 12 BITS OF NETWORK ABN 
          LDD    COMMADR
          SHN    3
          ADN    W.REQ4 
          ADDRA  ER=GCS3
          CWD    D.T0              WRITE CONVERT MODE STATS TO BUFF 
          LDN    1                 NORMAL RETURN
 GCS3     UJK    GCSX 
          SPACE  4,10 
          QUAL   *
 LST3NW   EQU    *
 LSTOVLB  MAX    LST3NW,LSTOVLB 
          USE    OVERFLOW 
          ERRNZ  LST3NW-*          TEST *3NW* OVERFLOW ASSUMPTION 
          TTL    NDR/3NM - MISCELLANEOUS FUNCTIONS. 
          TITLE 
          QUAL   3NM
          IDENT  3NM,OVLB+5 
          ORG    OVLB+5 
          COMMENT  NDR OVERLAY - MISCELLANEOUS FUNCTIONS. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
DTM       TITLE  DTM - DETERMINE 3NM FUNCTION ENTRY.
**        DTM - DETERMINE 3NM FUNCTION ENTRY. 
* 
*         ENTRY  (FUNCTION) = FUNCTION BEING CALLED.
* 
*         EXIT   (A) = 0, ERROR.
*                    = 1, NORMAL RETURN.
* 
*         USES   FUNCTION.
* 
*         CALLS  CNT, CRQ, SND. 
  
  
 DTM      ENM    X
          LDD    FUNCTION 
          LMK    CONNECT
          ZJN    DTM1              IF OBTAIN CONNECTION 
          LMK    OCONREQ&CONNECT
          ZJN    DTM2              IF OBTAIN CONNECT REQUEST
          LMK    SNDCONM&OCONREQ
          ZJN    DTM3              IF SEND CONTROL MESSAGE
          LDN    0                 ERROR
          UJN    DTM7 
  
 DTM1     RJM    CNT               CALL OBTAIN CONNECTION 
          UJN    DTM7 
  
 DTM2     RJM    CRQ               CALL OBTAIN CONNECT REQUEST
          UJN    DTM7 
  
 DTM3     RJM    SND               CALL SEND CONTROL MESSAGE
 DTM7     LJM    DTMX 
CNT       TITLE  CNT - REQUEST CONNECTION.
**        CNT - REQUEST CONNECTION. 
* 
*         READ CONNECTION MESSAGE FROM RHF. 
*         VALIDATE EST. 
*         RESERVE CHANNEL.
*         OUTPUT CONNECTION MESSAGE.
*         RELEASE CHANNEL.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ADDRESS ERROR.
* 
*         USES   D.T0 - D.T7, D.REQ1, D.REQ3, RHFACT, STATUS. 
* 
*         CALLS  CRA, ERR, FAN, FFN, OUT, REL, RES, 
*                R.TAFL, SRA, WFP.
  
  
 CNT      ENM    X                 ENTRY/EXIT 
          LDD    D.REQ1+C.QADDR 
          LPN    77B
          SHN    12 
          LMD    D.REQ1+C.QADDR+1 
          ZJN    CNTX              IF INVALID ADDRESS 
          ADN    W.WD1
          ADDRA  ER=CNTX
          CRD    D.T0              READ FIRST WORD OF QUEUE ENTRY 
          LDK    CNPL/5+1 
          STD    D.T5 
          LDD    D.T0+C.MSGADR
          LPN    77B
          SHN    12 
          LMD    D.T0+C.MSGADR+1
          ZJN    CNTX              IF INVALID ADDRES
          ADDRA  ER=CNTX
          CRM    BUFF,D.T5         READ CONNECT MESSAGE FROM RHF
          RJM    SRA               SET RHF ACTIVE BIT IN EST
          ZJN    CNT01             IF RHF ACTIVE
          STD    D.REQ3+C.RC       SAVE RETURN CODE 
          LDN    1                 NORMAL RETURN
          UJN    CNTX 
  
 NOS      IF     DEF,NOS
 CNT01    BSS    0
 NOS      ELSE
 CNT01    RJM    R.TAFL            RELEASE FIELD ACCESS 
 NOS      ENDIF 
          RJM    RES               RESERVE CHANNEL
          LDC    BUFF 
          STM    OUTA              SET UP OUTPUT BUFFER ADDRESS 
 CNT02    LDK    FCCP              CONNECT PATH 
          RJM    FFN
          ZJN    CNT07             IF ACK RESPONSE
          LMN    RCNK&RCAK
          NJN    CNT06             IF NOT NAK RESPONSE
 CNT03    LDN    RC.NADRJ          LOCAL NAD REJECT 
          LJM    CNT12
  
 CNT04    RJM    ERR               REPORT ERROR 
          MJN    CNT03             IF FIRM HARDWARE ERROR 
          LDK    FCAB              ABORT TRANSACTION
          RJM    FFN
          MJN    CNT04             IF HARDWARE ERROR
          UJN    CNT02             RESTART TRANSACTION
 CNT05    MJN    CNT04             IF ERROR 
 CNT06    LCN    NADERRH           ABNORMAL RESPONSE CODE 
          UJN    CNT04
  
 CNT07    LDK    FCBM              SELECT BINARY
          RJM    FFN
          NJN    CNT05             IF ERROR 
          RJM    WFP               WAIT FOR PRIMED
          MJN    CNT04             IF ERROR 
          LDK    FCOB              OUTPUT BINARY
          RJM    FAN
          MJN    CNT04              IF ERROR
          LDN    CNPL 
          RJM    OUT               OUTPUT CONNECTION MESSAGE
          ZJN    CNT08             IF NO ERROR
          MJN    CNT04             IF ERROR 
          LCN    NADERRI           CONTROL MESSAGE LENGTH ERROR 
          UJN    CNT04
  
 CNT08    LDK    FCRY              SEND READY 
          RJM    FFN
          MJN    CNT10             IF ERROR 
          LDD    STATUS 
          SHN    17-S.CSTSP 
          MJN    CNT11             IF SELECTED PATH INPUT 
          LDD    STATUS 
          LPK    M.RESPCD 
          LMN    RCBT 
          NJN    CNT09             IF NOT BAD PATH TCU
          LDN    RC.BPTCU          BAD PATH TCU 
          UJN    CNT12
  
 CNT09    LCN    NADERRH           ABNORMAL RESPONSE CODE 
 CNT10    LJM    CNT04
  
 CNT11    LDD    STATUS 
          LPC    177B 
          STD    D.REQ3+C.RPATH    RETURN PATH ID 
          LDN    0                 NORMAL RETURN CODE 
          STD    D.REQ3+C.RC
          UJN    CNT13
  
 CNT12    STD    D.REQ3+C.RC
          LDD    RHFACT 
          ZJN    CNT13             IF RHF ALREADY ACTIVE
          RJM    CRA               CLEAR RHF ACTIVE BIT IN EST
  
 CNT13    LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LDN    1                 NORMAL RETURN
          LJM    CNTX 
CRQ       TITLE  CRQ - OBTAIN CONNECT REQUEST.
**        CRQ - OBTAIN CONNECT REQUEST. 
* 
*         VALIDATE EST. 
*         RESERVE CHANNEL.
*         READ CONNECT REQUEST MESSAGE. 
*         IF NO REQUEST THEN SET RETURN CODE, RELEASE CHANNEL,
*           AND RETURN. 
*         WRITE MESSAGE TO RHF. 
*         IF INVALID LID THEN SET RETURN CODE.
*         COMPLETE THE FUNCTION BY CALLING CMP. 
*         WAIT FOR NEXT FUNCTION BY CALLING NXT.
*         IF NOT CONNECT REQUEST REPLY THEN REJECT CONNECTION,
*           DAYFILE ERROR MESSAGE, AND RETURN ABORT CODE. 
*         REPLY TO CONNECT REQUEST. 
*         RELEASE CHANNEL.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ABORT CP. 
* 
*         USES   D.T0 - D.T5, D.REQ1 - D.REQ3, RHFACT.
* 
*         CALLS  CMP, CRA, ERR, FFN, GCR, NXR, REL, RES,
*                R.DFM, R.RAFL, R.TAFL, SRA, VID. 
  
  
 CRQ      ENM    X                 ENTRY/EXIT 
          RJM    SRA               SET RHF ACTIVE BIT IN EST
          NJN    CRQ01             IF EST NOT ON
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          RJM    RES               RESERVE CHANNEL
          RJM    GCR               GET CONNECT REQUEST
          ZJN    CRQ02             IF CONNECT REQUEST INPUT 
          LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LDN    RC.NOMSG          SET NO MESSAGE TO OBTAIN 
 CRQ01    STD    D.REQ3+C.RC
          LDN    1                 NORMAL RETURN
          UJN    CRQX 
  
*         WRITE MESSAGE TO RHF. 
  
 NOS      IF     DEF,NOS
 CRQ02    BSS    0
 NOS      ELSE
 CRQ02    RJM    R.RAFL            OBTAIN FIELD ACCESS
 NOS      ENDIF 
          LDD    D.REQ1+C.QADDR 
          LPN    77B
          SHN    12 
          LMD    D.REQ1+C.QADDR+1 
          ZJN    CRQ03             IF INVALID ADDRESS 
          ADN    W.WD1
          ADDRA  OK=CRQ04 
 CRQ03    LJM    CRQ15             ADDRESS ERROR
  
 CRQ04    CRD    D.T0              READ FIRST WORD OF QUEUE ENTRY 
          LDK    CNPL/5+1 
          STD    D.T5 
          LDD    D.T0+C.MSGADR
          LPN    77B
          SHN    12 
          LMD    D.T0+C.MSGADR+1
          ZJN    CRQ03             IF INVALID ADDRESS 
          ADDRA  ER=CRQ03 
          CWM    BUFF,D.T5         WRITE CONNECT REQUEST TO RHF 
          LDN    0
          STD    D.REQ3+C.RC       SET NORMAL RETURN CODE 
          RJM    VID               VALIDATE LOGICAL ID
          ZJN    CRQ05             IF VALID LOGICAL ID
          LDN    RC.INLID          INVALID LOGICAL ID 
          STD    D.REQ3+C.RC
 CRQ05    RJM    CMP               COMPLETE THIS FUNCTION 
          RJM    NXT               WAIT FOR NEXT FUNCTION 
          MJN    CRQ06             IF ADDRESS ERROR 
          ZJN    CRQ07             IF NEXT FUNCTION READ UP 
          LDN    2                 HOST SHUTDOWN
          UJN    CRQ09
  
 CRQ06    LJM    CRQ15
  
 CRQ07    BSS    0
          LDD    D.REQ1+C.FUNC
          LPN    77B
          SBN    REQREPLY 
          NJN    CRQ12             IF NOT CORRECT RESPONSE
          LDD    D.REQ2+C.REPLY 
          NJN    CRQ09             IF REJECT
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
 CRQ08    LDK    FCAC              ACCEPT PATH
          RJM    FFN
          PJN    CRQ11             IF NO HARDWARE ERROR 
          RJM    ERR               REPORT ERROR 
          MJN    CRQ14             IF FIRM HARDWARE ERROR 
          UJN    CRQ08             RETRY
  
 CRQ09    RJM    REJ               REJECT PATH
 CRQ11    LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LDN    1                 NORMAL RETURN
          LJM    CRQX 
  
 CRQ12    LDN    2                 HOST SHUTDOWN
          RJM    REJ               REJECT PATH
          LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
 NOS      IF     DEF,NOS
          LDC    CRQA+CPON         DAYFILE INVALID RESPONSE MESSAGE 
 NOS      ELSE
          LDC    CRQA 
 NOS      ENDIF 
          RJM    R.DFM             DAYFILE INVALID RESPONSE MESSAGE 
          LDN    0                 ABORT CP 
 CRQ13    LJM    CRQX 
  
 CRQ14    LDD    RHFACT 
          ZJN    CRQ11             IF RHF ALREADY ACTIVE
          RJM    CRA               CLEAR RHF ACTIVE BIT IN EST
          LJM    CRQ11
  
 CRQ15    LDN    2                 HOST SHUTDOWN
          RJM    REJ               REJECT PATH
          LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LDN    0                 INVALID ADDRESS RETURN 
          UJN    CRQ13
  
 CRQA     DATA   C* NDR - INVALID CONNECT REQUEST REPLY.* 
REJ       SPACE  4,10 
**        REJ - REJECT CONNECT REQUEST. 
* 
*         ENTRY  (A) = REJECT CODE. 
* 
*         EXIT   (A) = 0, IF CONNECT REQUEST REJECTED.
*                    .LT. 0, IF HARDWARE ERROR. 
* 
*         USES   NONE.
* 
*         CALLS  CRA, ERR, FAN, FFN, OUT, WFP.
  
  
 REJ      ENM    X                 ENTRY/EXIT 
          STM    REJB              SAVE REJECT CODE 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          LDC    REJA              SET OUTPUT BUFFER ADDRESS TO 
          STM    OUTA                REJECT PARAMETERS
          LDD    RHFACT 
          ZJN    REJ01             IF RHF ALREADY ACTIVE
          RJM    CRA               CLEAR RHF ACTIVE BIT IN EST
 REJ01    LDK    FCRJ              REJECT PATH
          RJM    FFN
          PJN    REJ03             IF NO HARDWARE ERROR 
 REJ02    RJM    ERR               REPORT ERROR 
          MJN    REJX              IF FIRM HARDWARE ERROR 
          UJN    REJ01             RETRY REJECT 
  
 REJ03    RJM    WFP               WAIT FOR PRIMED
          MJN    REJ05             IF ERROR 
          LDN    FCO8              OUTPUT 8/12
          RJM    FAN
          MJN    REJ05             IF ERROR 
          LDN    REJAL
          RJM    OUT               OUTPUT REJECT PARAMETERS 
          ZJN    REJ06             IF NO ERROR
 REJ04    MJN    REJ05             IF HARDWARE ERROR
          LCN    NADERRJ           PARAMETER LENGTH ERROR 
 REJ05    RJM    ERR               REPORT ERROR 
          MJN    REJ08             IF FIRM HARDWARE ERROR 
          LDK    FCRT              RESET TRANSFER 
          RJM    FFN
          ZJN    REJ03             IF MAY RESTART TRANSFER
          UJN    REJ04
  
 REJ06    LDK    FCRY              SEND READY 
          RJM    FFN
          PJN    REJ07             IF READY ACCEPTED
          RJM    ERR               REPORT ERROR 
          MJN    REJ08             IF FIRM HARDWARE ERROR 
          UJN    REJ06             RETRY READY
  
 REJ07    LDN    0                 NORMAL RETURN
 REJ08    LJM    REJX 
  
 REJA     VFD    4/0,8/0
          VFD    4/0,8/0
          VFD    4/0,8/0
 REJB     VFD    4/0,8/0           REJECT CODE
 REJAL    EQU    *-REJA 
SRA       SPACE  4,10 
**        SRA - SET RHF ACTIVE BIT IN EST.
* 
*         READ EST ENTRY. 
*         IF RHF ALREADY ACTIVE THEN RETURN.
*         IF EST IS OFF 
*         THEN
*           LOAD RC.EST INTO A-REGISTER 
*           RETURN
*         ELSE
*           SET RHF ACTIVE IN EST 
*           RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 0, RHF ACTIVE BIT IS SET.
*                    = RC.EST, EST IS OFF.
* 
*         USES   D.T0 - D.T4, RHFACT, ESTADR, D.REQ1. 
* 
*         CALLS  R.RCH, R.DCH, R.MTR. 
  
  
 SRA      ENM    X
 NOS      IF     -DEF,NOS 
          LDK    P.EST
          CRD    D.T0 
 NOS      ENDIF 
          LDD    D.REQ1+C.ESTORD
          LPC    777B 
 NOS      IF     DEF,NOS
          RJM    .EST              CONVERT EST ORDINAL TO EST ADDRESS 
          ADK    EQDE 
 NOS      ELSE
          ADD    D.T0+C.EST 
          STD    ESTADR            SAVE EST ADDRESS 
 NOS      ENDIF 
          CRD    D.T0              READ EST ENTRY 
          LDN    0
          STD    RHFACT            INDICATE RHF ALREADY SET ACTIVE
          LDD    D.T0+C.ESTDA 
          SHN    17-S.ESTRHF
          PJN    SRA1              IF RHF NOT ACTIVE
          LDN    0                 RHF ACTIVE 
          UJN    SRAX 
  
 NOS      IF     DEF,NOS
 SRA1     LDD    D.T0+C.ESTAT 
          SHN    17-S.ESTDSO
 NOS      ELSE
 SRA1     LDN    CH.EST 
          RJM    R.RCH             RESERVE EST CHANNEL
          LDD    ESTADR 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTMNE
          SHN    17-S.ESTON 
 NOS      ENDIF 
          PJN    SRA2              IF EST IS ON 
          IF     -DEF,NOS,2 
          LDN    CH.EST 
          RJM    R.DCH             RELEASE EST CHANNEL
          LDK    RC.EST            OPERATION DISALLOWED BY EST
          LJM    SRAX 
  
 NOS      IF     DEF,NOS
 SRA2     LDD    D.REQ1+C.ESTORD
          LPC    777B 
          STD    D.T1              STORE EQUIPMENT NUMBER 
          LDK    C.ESTDA+4
          STD    D.T2              SUBFUNCTION TO STORE INTO BYTE C.ESTD
          LDK    -M.ESTRHF
          STD    D.T3              STORE MASK 
          LDK    M.ESTRHF 
          STD    D.T4              STORE VALUE TO BE ADDED
          LDN    M.SEQ             FUNCTION TO STORE EQUIPMENT VALUE
          RJM    R.MTR             CALL MONITOR TO PROCESS FUNCTION 
          AOD    RHFACT            INDICATE RHF ACTIVE
 NOS      ELSE
 SRA2     LDD    D.T0+C.ESTDA 
          SCK    M.ESTRHF 
          ADK    M.ESTRHF          SET RHF ACTIVE 
          STD    D.T0+C.ESTDA 
          AOD    RHFACT            INDICATE RHF SET ACTIVE
          LDD    ESTADR 
          CWD    D.T0              WRITE EST ENTRY
          LDN    CH.EST 
          RJM    R.DCH             RELEASE EST CHANNEL
 NOS      ENDIF 
          LDN    0                 RHF IS SET ACTIVE IN EST 
          LJM    SRAX 
CRA       SPACE  4,10 
**        CRA - CLEAR RHF ACTIVE IN EST.
* 
*         READ EST ENTRY. 
*         CLEAR RHF ACTIVE. 
*         WRITE EST ENTRY.
* 
*         ENTRY  (ESTADR) = ADDRESS OF EST ENTRY. 
* 
*         EXIT   RHF ACTIVE BIT CLEARED.
* 
*         USES   D.T0 - D.T4, ESTADR. 
* 
*         CALLS  R.RCH, R.DCH, R.MTR. 
  
  
 CRA      ENM    X
 NOS      IF     DEF,NOS
          LDD    D.REQ1+C.ESTORD
          LPC    777B 
          STD    D.T1              STORE EQUIPMENT NUMBER 
          LDK    C.ESTDA+4
          STD    D.T2              SUBFUNCTION TO STORE INTO BYTE C.ESTD
          LDK    -M.ESTRHF
          STD    D.T3              STORE MASK 
          LDK    0
          STD    D.T4              STORE VALUE TO BE ADDED
          LDN    M.SEQ             FUNCTION TO STORE EQUIPMENT VALUE
          RJM    R.MTR             CALL MONITOR TO PROCESS FUNCTION 
 NOS      ELSE
          LDN    CH.EST 
          RJM    R.RCH             RESERVE EST CHANNEL
          LDD    ESTADR 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTDA 
          SCK    M.ESTRHF          CLEAR RHF ACTIVE 
          STD    D.T0+C.ESTDA 
          LDD    ESTADR 
          CWD    D.T0              WRITE EST ENTRY
          LDN    CH.EST 
          RJM    R.DCH             RELEASE EST CHANNEL
 NOS      ENDIF 
          UJN    CRAX 
VID       SPACE  4,10 
**        VID - VALIDATE LOGICAL ID.
* 
*         CONVERT ASCII LID TO BINARY LID.
*         IF ILLEGAL CHARACTER IN LID THEN RETURN.
*         COMPARE REQUESTED LID TO LIDS THAT ARE DEFINED IN THIS
*           MAINFRAMES ID TABLE.
*         RETURN. 
* 
*         ENTRY  (BUFF) = CONNECT REQUEST.
* 
*         EXIT   (A) = 0, LID IS VALID. 
*                    = 1, LID IS INVALID. 
* 
*         USES   D.Z0 - D.Z7, D.T0 - D.T4.
* 
*         CALLS  CVT. 
  
  
 VID      ENM    X
          LDM    BUFF+R.LID 
          SHN    -4 
          RJM    CVT               CONVERT ASCII CHAR. TO BINARY CHAR.
          MJN    VID1              IF INVALID CHARACTER 
          STD    D.Z1              STORE FIRST CHARACTER OF LID 
          LDM    BUFF+R.LID 
          LPK    17B
          SHN    12 
          ADM    BUFF+R.LID+1 
          SHN    -8 
          RJM    CVT               CONVERT ASCII CHAR. TO BINARY CHAR.
          MJN    VID1              IF INVALID CHARACTER 
          SHN    6
          STD    D.Z2              STORE 2ND CHARACTER OF LID 
          LDM    BUFF+R.LID+1 
          LPK    377B 
          RJM    CVT               CONVERT ASCII CHAR. TO BINARY CHAR.
          PJN    VID2              IF VALID CHARACTER 
 VID1     LDN    1                 RETURN (A) = 1 FOR INVALID CHARACTER 
          UJN    VIDX              EXIT 
  
 VID2     RAD    D.Z2              STORE 3RD CHAR. OF LID WITH THE 2ND
          LDK    P.IDT
 NOS      IF     DEF,NOS
          CRD    D.Z3              READ LID TABLE POINTER WORD
          LDN    1                 INITIALIZE PID OFFSET
          STD    D.Z0 
  
*         SEARCH LDT FOR ENABLED PIDS.
  
 VID3     LDD    D.Z3              READ FIRST WORD OF PID ENTRY 
          SHN    12 
          LMD    D.Z4 
          ADD    D.Z0 
          CRD    D.Z5 
          ADN    1                 READ SECOND WORD OF PID ENTRY
          CRD    D.T0 
          LDD    D.T4              SAVE NEXT PID OFFSET 
          STM    VIDA 
          LDD    D.Z6 
          SHN    17-5 
          PJN    VID3.1            IF NOT HOST PID
          SHN    17-4-17+5
          MJN    VID5              IF ENABLED PID 
 VID3.1   LDM    VIDA              POINT TO NEXT PID ENTRY
          RAD    D.Z0 
  
*         CHECK IF ALL PIDS HAVE BEEN PROCESSED.
  
 VID4     LDM    VIDA 
          NJN    VID3              IF MORE PIDS TO PROCESS
          UJN    VID1              RETURN, NO MATCH FOUND 
  
 VID5     LDN    2                 OFFSET TO LID SLOT COUNT 
          RAD    D.Z0 
          LDD    D.Z3              READ LID SLOT COUNT
          SHN    12 
          LMD    D.Z4 
          ADD    D.Z0 
          CRD    D.T0 
  
*         SEARCH FOR A MATCHING ENABLED LID.  IF A MATCH IS FOUND 
*         UNDER THE HOST PID, EXIT AS A MATCH 
*         FOUND.  OTHERWISE, CONTINUE CHECKING THE REMAINING LID
*         SLOTS UNTIL THE LID POINTER POINTS TO THE NEXT PID. 
  
 VID6     AOD    D.Z0              INCREMENT LID POINTER
          SOD    D.T4              DECREMENT LID SLOT COUNT 
          MJN    VID4              IF ALL LID SLOTS PROCESSED 
          LDD    D.Z3              READ LID ENTRY 
          SHN    12 
          LMD    D.Z4 
          ADD    D.Z0 
          CRD    D.Z5 
          LDD    D.Z6 
          ZJN    VID6              IF HOLE IN LDT 
          SHN    6
          LMD    D.Z5 
          SHN    6
          LMD    D.Z2 
          SHN    6
          LMD    D.Z1 
          NJN    VID6              IF NO MATCH ON LID 
          LDD    D.Z7 
          SHN    17-11
          PJN    VID6              IF LID NOT ENABLED 
          LDN    0
          LJM    VIDX              RETURN, MATCH FOUND
  
 VIDA     CON    0                 NEXT PID OFFSET POINTER
 NOS      ELSE
          CRD    D.T0 
          LDD    D.T0+C.IDT 
          STD    D.Z3              SAVE FWA/10B OF THE ID TABLE 
          SHN    3
          CRD    D.T0 
          LDD    D.T0+C.LID 
          LPK    77B
          LMD    D.Z1 
          NJN    VID3              IF ID DOES NOT MATCH PID 
          LDD    D.T0+C.LID+1 
          LMD    D.Z2 
          NJN    VID3              IF ID DOES NOT MATCH PID 
          LJM    VIDX              RETURN (A) = 0 FOR VALID ID
  
 VID3     LDD    D.T0+C.IDTFLL
          SHN    12 
          STD    D.Z4              SAVE FIRST LID ORDINAL 
          SHN    -12
          STD    D.Z5              SAVE LAST LID ORDINAL
  
 VID4     LDD    D.Z5              LOAD LAST LID ORDINAL
          SBD    D.Z4              SUBTRACT CURRENT LID ORDINAL 
          MJN    VID1              IF LID TABLE HAS BEEN EXHAUSTED
          LDD    D.Z3              FWA/10B OF ID TABLE
          SHN    3
          ADD    D.Z4              ADD CURRENT LID ORDINAL
          CRD    D.T0 
          LDD    D.T0+C.LID 
          LPK    77B
          LMD    D.Z1              COMPARE 1ST CHAR. OF LID 
          NJN    VID5              IF NOT A MATCH 
          LDD    D.T0+C.LID+1 
          LMD    D.Z2              COMPARE 2ND AND 3RD CHARS OF LID 
          ZJN    VID6              IF MATCHING LID WAS FOUND
 VID5     AOD    D.Z4              TRY MATCHING WITH NEXT LID IN TABLE
          UJN    VID4 
  
 VID6     LJM    VIDX              RETURN (A) = 0 FOR VALID ID
 NOS      ENDIF 
CVT       SPACE  4,10 
**        CVT - CONVERT A CHARACTER FROM ASCII TO BINARY
* 
*         IF CHARACTER TO BE CONVERTED IS A LETTER
*         THEN
*           SUBTRACT 100B FROM ASCII LETTER TO CONVERT TO BINARY
*           RETURN
*         ELSE
*           IF CHARACTER TO BE CONVERTED IS A DIGIT 
*           THEN
*             SUBTRACT 25B FROM ASCII DIGIT TO CONVERT TO BINARY
*             RETURN
*           ELSE
*             SET ERROR 
*             RETURN. 
* 
*         ENTRY  (A) = ASCII CHARACTER TO BE CONVERTED. 
* 
*         EXIT   (A) .GT. 0, CHARACTER WAS CONVERTED TO BINARY
*                            WITH THE CONVERTED CHARACTER IN #A#. 
*                    .LT. 0, NO CONVERSION WAS DONE.
* 
*         USES   D.T0.
* 
*         CALLS  NONE.
  
  
 CVT      ENM    X
          STD    D.T0              SAVE CHARACTER TO BE CONVERTED 
          ADK    -1RA-100B
          MJN    CVT1              IF NOT A LETTER
          LDK    1RZ+100B 
          SBD    D.T0 
          MJN    CVTX              IF INVALID CHARACTER 
          LDD    D.T0 
          ADK    -100B
          UJN    CVTX              RETURN CONVERTED LETTER
  
 CVT1     LDD    D.T0 
          ADK    -1R0-25B 
          MJN    CVTX              IF INVALID CHARACTER 
          LDK    1R9+25B
          SBD    D.T0 
          MJN    CVTX              IF INVALID CHARACTER 
          LDD    D.T0 
          ADK    -25B 
          UJN    CVTX              RETURN CONVERTED DIGIT 
SND       TITLE  SND - SEND CONTROL MESSAGE.
**        SND - SEND CONTROL MESSAGE. 
* 
*         CALCULATE MESSAGE LENGTH. 
*         SELECT PATH ON PATH ID. 
*         READ PATH STATUS TABLE. 
*         SAVE REMOTE PATH ID.
*         READ CONTROL MESSAGE FROM RHF.
*         INSERT REMOTE PATH ID IN CONTROL MESSAGE. 
*         DETERMINE MESSAGE TYPE AND FUNCTION CONTROLWARE.
*         RESERVE CHANNEL.
*         OUTPUT CONTROL MESSAGE. 
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
*                    = 0, ADDRESS ERROR.
* 
*         USES   D.T5, D.T6, D.REQ1, BUFF.
* 
*         CALLS  CML, DMT, ERR, FAN, FFN, PTH, REL, R.RAFL, 
*                R.TAFL, OUT, WFP.
  
  
 SND      ENM    X                 ENTRY/EXIT 
          RJM    CML               CALCULATE MESSAGE LENGTH 
          RJM    SEL               SELECT PATH ON PATH ID 
          MJN    SND01             IF FIRM HARDWARE ERROR 
          RJM    PTH               READ PATH STATUS TABLE 
          PJN    SND02             IF NOT FIRM HARDWARE ERROR 
 SND01    LDN    RC.SNDAB          RETURN PATH ABORTED
          LJM    SND12
  
 SND02    LDM    BUFF+O=PCTRPN
          STD    D.T6              SAVE REMOTE PATH ID
          IF     -DEF,NOS,1 
          RJM    R.RAFL            RESERVE FIELD ACCESS 
          LDD    D.REQ1+C.QADDR 
          LPN    77B
          SHN    12 
          ADD    D.REQ1+C.QADDR+1 
          ZJN    SNDX              IF INVALID ADDRESS 
          ADN    W.WD2
          ADDRA  ER=SNDX
          CRM    BUFF,D.T5         READ CONTROL MESSAGE FROM RHF
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          LDC    BUFF 
          STM    OUTA              SET UP OUTPUT BUFFER ADDRESS 
          LDM    BUFF+R.NAME+1
          LPK    7400B
          ADD    D.T6 
          STM    BUFF+R.NAME+1     PLUG PATH ID IN NAME FIELD 
          RJM    DMT               DETERMINE MESSAGE TYPE 
 SND03    LDC    0
 SNDA     EQU    *-1               CONTROLWARE FUNCTION SET BY DMT
          RJM    FFN
          ZJN    SND08             IF ACK RESPONSE
          MJN    SND05             IF HARDWARE ERROR
          LMN    RCNK&RCAK
          ZJN    SND04             IF NAK RESPONSE
          LMN    RCTN&RCNK
          NJN    SND07             IF NOT BUFFERS UNAVAILABLE 
 SND04    LJM    SND13             NO BUFFER AVAILABLE
  
 SND05    RJM    ERR
          MJN    SND04             IF FIRM HARDWARE ERROR 
          LDK    FCAB              ABORT TRANSACTION
          RJM    FFN
          MJN    SND05             IF HARDWARE ERROR
          UJN    SND03             RESTART TRANSACTION
 SND06    MJN    SND05             IF ERROR 
 SND07    LCN    NADERRH           ABNORMAL RESPONSE CODE 
          UJN    SND05
  
 SND08    LDK    FCBM              SELECT BINARY
          RJM    FFN
          NJN    SND06             IF ERROR 
          RJM    WFP               WAIT FOR PRIMED
          MJN    SND05             IF ERROR 
          LDK    FCOB              OUTPUT BINARY
          RJM    FAN
          MJN    SND05             IF ERROR 
          LDC    0
 SNDB     EQU    *-1               MESSAGE LENGTH SET BY CML
          RJM    OUT               OUTPUT CONTROL MESSAGE 
          ZJN    SND09             IF NO ERROR
          MJN    SND05             IF HARDWARE ERROR
          LCN    NADERRI           CONTROL MESSAGE LENGTH ERROR 
          UJN    SND05
  
 SND09    LDK    FCRY              SEND READY 
          RJM    FFN
          ZJN    SND11             IF MESSAGE ACCEPTED
          MJN    SND10             IF HARDWARE ERROR
          LMN    RCNK&RCAK
          ZJN    SND13             IF REMOTE BUSY 
          LMN    RCAB&RCNK
          ZJN    SND14             IF PATH ABORTED (REMOTE) 
          LCN    NADERRH           ABNORMAL RESPONSE CODE 
 SND10    LJM    SND05
  
 SND11    LDN    0                 SUCCESSFUL RETURN CODE 
 SND12    STD    D.REQ3+C.RC
          LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LDN    1                 NORMAL RETURN
          LJM    SNDX 
  
 SND13    LDN    RC.SNDRE          REISSUE
          UJN    SND12
  
 SND14    LDN    RC.SNDAB          PATH ABORTED 
          UJN    SND12
CML       SPACE  4,10 
**        CML - CALCULATE MESSAGE LENGTH. 
* 
*         ENTRY  (D.REQ2) = SECOND WORD OF REQUEST. 
* 
*         EXIT   (D.T5) = NUMBER OF CM WORDS TO BE READ.
*                (SNDB) = NUMBER OF BYTES TO BE WRITTEN.
* 
*         USES   D.T5, D.T6.
* 
*         CALLS  NONE.
  
  
 CML      ENM    X
          LDK    THDRLN            HEADER LENGTH
          ADD    D.REQ2+C.LGTH     TEXT LENGTH
          STD    D.T5              SAVE TOTAL LENGTH
          ADN    3
          SCN    3                 MAKE SURE NUMBER IS MULTIPLE OF 4
          STM    SNDB              NUMBER OF BYTES TO WRITE 
          LDN    4
          RAD    D.T5              ROUND UP TO NEXT WHOLE WORD
          SHN    1                 2*VALUE
          ADD    D.T5              3*VALUE
          SHN    2                 12*VALUE 
          ADD    D.T5              13*VALUE 
          SHN    12                (13*VALUE)/64
          STD    D.T6 
          SHN    8                 4*13*VALUE 
          SBD    D.T5              51*VALUE 
          ADD    D.T6              51*VALUE+(13*VALUE)/64 
          SHN    -8                (51*VALUE+(13*VALUE)/64)/256 
          STD    D.T5              NUMBER OF CM WORDS TO READ 
          UJN    CMLX 
DMT       SPACE  4,10 
**        DMT - DETERMINE MESSAGE TYPE. 
* 
*         ENTRY  (BUFF) = CONTROL MESSAGE.
* 
*         EXIT   (SNDA) = FCSC, SEND CONTROL MESSAGE. 
*                       = FCSF, SEND FLUSH CONTROL STATEMENT. 
*                       = FCRE, SEND RESET CONTROL STATEMENT. 
* 
*         USES   BUFF.
* 
*         CALLS  NONE.
  
  
 DMT      ENM    X
          LDD    D.REQ2+C.LGTH
          NJN    DMT3              IF NOT ACK FUNCTION
 DMT1     LDK    FCSC              SEND CONTROL MESSAGE 
 DMT2     STM    SNDA              SAVE FUNCTION TYPE 
          UJN    DMTX 
  
 DMT3     LDM    BUFF+THDRLN+R.FTYPE
          SHN    -4 
          LMK    FC 
          NJN    DMT1              IF NOT A FUNCTION CODE 
          LDM    BUFF+THDRLN+R.FTYPE+1
          SHN    -8 
          SHN    14 
          ADM    BUFF+THDRLN+R.FTYPE
          SHN    4
          LPK    377B 
          LMK    BREAK
          ZJN    DMT4              IF BREAK FUNCTION
          LMK    RST&BREAK
          NJN    DMT1              IF NOT RESET FUNCTION
          LDK    FCRE              SEND RESET CONTROL MESSAGE 
          UJN    DMT2 
  
 DMT4     LDK    FCSF              SEND FLUSH CONTROL STATEMENT 
          UJN    DMT2 
*CALL COM3NW
*CALL COMSEL
          QUAL   *
 LST3NM   EQU    *
 LSTOVLB  MAX    LST3NM,LSTOVLB 
          USE    OVERFLOW 
          ERRNZ  LST3NM-*          TEST *3NM* OVERFLOW ASSUMPTION 
          TTL    NDR/3NN - DISCONNECT/PURGE/INITIALIZE FUNCTIONS. 
          TITLE 
          QUAL   3NN
          IDENT  3NN,OVLB+5 
          ORG    OVLB+5 
          COMMENT  NDR OVERLAY - DISCONNECT/PURGE/INITIALIZE FUNCTIONS. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1984. 
DTN       TITLE  DTN - DETERMINE 3NN FUNCTION ENTRY.
**        DTM - DETERMINE 3NN FUNCTION ENTRY. 
* 
*         ENTRY  (FUNCTION) = FUNCTION BEING CALLED.
* 
*         EXIT   (A) = 0, ERROR.
*                    = 1, NORMAL RETURN.
* 
*         USES   FUNCTION.
* 
*         CALLS  FLS, DSC, IND. 
  
  
 DTN      ENM    X
          LDD    FUNCTION 
          LMK    INTNAD 
          ZJN    DTN1              IF INITIALIZE NAD
          LMK    DSCPATH&INTNAD 
          ZJN    DTN2              IF DISCONNECT PATH 
          LMK    FLSPATH&DSCPATH
          ZJN    DTN3              IF FLUSH PATH
          LDN    0                 ERROR
          UJN    DTN9 
  
 DTN1     RJM    IND               CALL INITIALIZE NAD
          UJN    DTN9 
  
 DTN2     RJM    DSC               CALL DISCONNECT PATH 
          UJN    DTN9 
  
 DTN3     RJM    FLS               CALL FLUSH PATH
 DTN9     LJM    DTNX 
DSC       TITLE  DSC - DISCONNECT PATH. 
**        DSC - DISCONNECT PATH.
* 
*         CALL TRM TO TERMINATE PATH WITH DISCONNECT. 
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
* 
*         USES   NONE...
* 
*         CALLS  TRM. 
  
 DSC      ENM    X                 ENTRY/EXIT 
          LDK    FCDP 
          RJM    TRM               TERMINATE PATH WITH DISCONNECT 
          LDN    1                 NORMAL RETURN
          UJN    DSCX 
TRM       SPACE  4,10 
**        TRM - TERMINATE PATH. 
* 
*         SAVE TERMINATION FUNCTION.
*         RESERVE CHANNEL.
*         CALL PTB TO READ PACKED PATH CONTROL TABLE. 
*         CALL PSC TO PROCESS PATH STATE AND REPLY TO RHF.
*         IF PCT STATE/CLARIFIER = 0107, 0400, OR 0401
*         THEN
*           CALL RPM TO ISSUE CONNECTION ERROR MAINTENANCE LOG. 
*         SELECT AND TERMINATE PATH.
*         RELEASE CHANNEL.
*         RETURN. 
* 
*         ENTRY  (A) = TERMINATION FUNCTION.
* 
*         EXIT   NONE.
* 
*         USES   NONE.
* 
*         CALLS  ERR, FFN, PSC, PTB, REL, RES, RPM. 
  
  
 TRM      ENM    X                 ENTRY/EXIT 
          STM    TRMA              SAVE TERMINATION FUNCTION. 
          LDN    1
          STM    TRMB              SET RETRY COUNTER
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          RJM    RES               RESERVE CHANNEL
          RJM    PTB               READ A PACKED PATH CONTROL TABLE 
          MJN    TRM1              IF ERROR IN READING PCT
          RJM    PSC               PROCESS PATH STATE/CLARIFIER 
          NJN    TRM1              IF NOT NETWORK BREAK 
          RJM    RPM               ISSUE MAINTENANCE LOG
 TRM1     LDD    D.REQ2+C.PATH
          LMC    FCSP              SELECT PATH
          RJM    FFN
          ZJN    TRM4              IF ACK RESPONSE
          MJN    TRM2              IF HARDWARE ERROR
          LMN    RCAB&RCAK
          ZJN    TRM3              IF PATH ABORTED
          LMN    RCCP&RCAB
          ZJN    TRM4              IF CONNECT IN PROCESS
          LMN    RCFL&RCCP
          ZJN    TRM4              IF FLUSH IN PROGRESS 
          LMN    RCNK&RCFL
          ZJN    TRM5              IF PATH DOES NOT EXIST 
          LCN    NADERRG           ABNORMAL PATH STATUS 
 TRM2     RJM    ERR               REPORT ERROR 
          MJN    TRM5              IF FIRM HARDWARE ERROR 
          UJN    TRM1              RETRY
  
 TRM3     LDN    FCPP              PURGE PATH 
          STM    TRMA 
  
 TRM4     LDC    0                 TERMINATION FUNCTION 
 TRMA     EQU    *-1
          RJM    FFN
          ZJN    TRM5              IF FUNCTION ACCEPTED 
          MJN    TRM2              IF HARDWARE ERROR
          LMN    RCCA&RCAK
          ZJN    TRM4.5            CONVERT MODE ACTIVE (PURGE PATH) 
          LMN    RCCE&RCCA
          ZJN    TRM4.5            CONVERT MODE EXITING (PURGE PATH)
          LMN    RCNK&RCCE
          NJN    TRM5              IF PATH TERMINATED 
 TRM4.5   BSS    0
          SOM    TRMB              DECREMENT RETRY COUNT
          PJN    TRM3              IF NOT RETRIED YET 
 TRM5     LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LJM    TRMX 
  
 TRMB     BSS    1                 RETRY COUNTER
FLS       TITLE  FLS - FLUSH PATH.
**        FLS - FLUSH PATH. 
* 
*         CALL TRM TO TERMINATE PATH WITH FLUSH.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
* 
*         USES   NONE.
* 
*         CALLS  TRM. 
  
  
 FLS      ENM    X                 ENTRY/EXIT 
          LDK    FCDF 
          RJM    TRM               TERMINATE PATH WITH FLUSH
          LDN    1                 NORMAL RETURN
          UJN    FLSX 
 PTB      SPACE  4,10 
**        PTB - READ PACKED PATH CONTROL TABLE. 
* 
*         SELECT PATH.
*         FUNCTION TO READ PATH CONTROL TABLE.
*         SELECT BINARY MODE. 
*         WAIT FOR PRIMED.
*         INPUT BIT STRING. 
*         INPUT PATH CONTROL TABLE. 
* 
*         ENTRY - CHANNEL RESERVED. 
* 
*         EXIT  - (A) < 0, IF NAD ERROR.
  
  
 PTB      ENM    X
          LDD    D.REQ2+C.PATH     PATH TO SELECT 
          LMC    FCSP              ADD IN FUNCTION CODE 
          RJM    FFN               ISSUE SELECT PATH FUNCTION 
          MJN    PTBX              IF HARDWARE ERROR
          LDK    FCST 
          RJM    FFN               FUNCTION TO READ PATH STATUS 
          MJN    PTBX              IF PATH STATUS UNAVAILABLE 
          LDK    FCBM 
          RJM    FFN               READ IN BINARY MODE
          MJN    PTBX              IF NAD ERROR 
          RJM    WFP               WAIT FOR PRIMED
          MJN    PTBX              IF NAD ERROR 
          LDK    FCIB 
          RJM    FAN               INPUT BIT STIRUNG
          LDK    CFLA 
          STM    INPA              SET STATUS BUFFER
          LDK    PSLNB             PACKED MODE STATUS LENGTH
          STD    FLUSH             FLUSH BUFFER 
          RJM    INP               INPUT PATH STATUS TABLE
          MJN    PTB1              IF NAD ERROR 
          SBK    PSLNB
          PJN    PTB1              IF INPUT SUCCESSFUL
          LCN    NADERRK           TRANSFER LENGTH ERROR
 PTB1     UJK    PTBX 
 PSC      SPACE  4,10 
**        PSC - PROCESS PATH STATE/CLARIFIER. 
* 
*         ENTRY  PATH CONTROL TABLE STARTS AT *CFLA*. 
* 
*         EXIT   (A) = 0, IF CONNECTION FAILED MESSAGE SHOULD 
*                         BE ISSUED.
  
  
 PSC      ENM    X
  
 PSCA     EQU    O=PCTRC1*2/3      FWA OF RECEIVE CODE
          ERRNZ  O=PCTRC1/2-PSCA*3/4  NOT ON PP WORD BOUNDARY 
          ERRNZ  O=PCTRC2-O=PCTRC1-2  CODE DEPENDS ON VALUE 
 PSCB     EQU    O=PCTSTA*2/3      FWA OF PATH STATE
          ERRNZ  O=PCTSTA/2-PSCB*3/4  NOT ON PP WORD BOUNDARY 
          ERRNZ  O=PCTCLA-O=PCTSTA-1  CODE DEPENDS ON VALUE 
  
          IF     -DEF,NOS,1 
          RJM    R.RAFL            REQUEST FIELD ACCESS 
          LDM    CFLA+PSCA         GET BITS 0-11 OF RECEIVE CODE
          STD    D.T0              STORE IN REPLY WORD 1
          LDM    CFLA+PSCA+1       GET BITS 12-23 OF RECEIVE CODE 
          STD    D.T0+1            STORE IN REPLY WORD 1
          LDM    CFLA+PSCA+2       GET BITS 24-32 OF RECEIVE CODE 
          SCN    0#F
          STD    D.T0+2            STORE IN REPLY WORD 1
          LDN    0
          STD    D.T0+3 
          STD    D.T0+4 
          LDD    COMMADR
          SHN    3                 GET COMMAND BUFFER ADDRESS 
          ADN    W.REQ4 
          ADDRA  ER=PSC1
          CWD    D.T0              WRITE REPLY WORD 1 
          LDM    CFLA+PSCB+1
          LPK    0#F00             Z04XX -> Z0400 
          STD    D.REQ3+C.STCL2 
          SHN    1*4+2             Z0400 -> 4Z000 
          LMM    CFLA+PSCB         4Z000 -> 4Z123 
          STD    D.REQ3+C.STCL1 
          SHN    1*4               4Z123 -> Z1234 
          LMK    0#0107            CONNECT REJECTED BY NETWORK
          ZJN    PSC1              IF NETWORK BREAK CODE PRESENT
          LMK    0#0401&0#0107     PATH ABORTED BY RECEIVE
          ZJN    PSC1              IF NETWORK BREAK CODE PRESENT
          LMK    0#0400&0#0401     PATH ABORTED BY SEND 
 PSC1     UJK    PSCX              (A) = 0 IF BREAK CODE PRESENT
 RPM      SPACE  4,10 
**        RPM - ISSUE CONNECTION FAILED MAINTENANCE LOG.
* 
*         CALL CPS TO PRESET COMMON MAINTENANCE LOG ENTRIES.
*         CALL GLN TO GET LOCAL NAD ADDRESS.
*         CALL IML TO ISSUE MAINTENACE LOG MESSAGE. 
*         ENTRY  THE PATH CONTROL TABLE HAS BEEN READ UP. 
* 
*         EXIT   (A) = 0, NORMAL RETURN.
*                    .LT. 0, ERROR RETURN.
  
  
 RPMC     EQU    O=PCTLTE*2/3      FWA OF LOCAL TCU ENABLES 
  
 RPM      ENM    X                 ENTRY/EXIT 
  
 NOS      IF     DEF,NOS
          LDN    0
          STD    ERROR
          RJM    CPS               PRESET COMMON ENTRIES
          LDM    CFLA+RPMC         GET LOCAL TCU ENABLES
          SHN    -8 
          STM    CERL 
          RJM    GLN               GET LOCAL NAD ADDRESS
          SHN    4
          RAM    CERL 
 NOS      ELSE
          LDN    77B
          STD    ERROR
          RJM    CPS               PRESET COMMON ENTRIES
          LDM    CERMSG+CFLAL-2    SAVE BYTE 3 OF CERFILE WORD 7
          STM    RPMB 
          LDM    CFLA+RPMC         GET LOCAL TCU ENABLES
          SHN    -8 
          STM    CERMSG+CFLAL-2 
          RJM    GLN               GET LOCAL NAD ADDRESS
          SHN    4
          RAM    CERMSG+CFLAL-2 
 NOS      ENDIF 
  
          LDN    0
          STD    ERROR
          RJM    REL               RELEASE CHANNEL
          LDN    CFLAL/5           LENGTH OF MESSAGE IN CM WORDS
          RJM    IML               ISSUE MAINTENANCE LOG
  
 NBE      IF     -DEF,NOS 
          LDC    2000B             SECOND PART FLAG 
          STM    CERC+1 
          LDC    **                RESTORE BYTE 3 OF CERFILE WORD 7 
 RPMB     EQU    *-1
          STM    CERMSG+CFLAL-2 
          LDD    D.PPMES1 
          CWM    CERA,ONE          HEADER FOR FIRST MSG 
          SBN    1
          CRM    CFLB,ONE          COPY HEADER FOR SECOND MSG 
          LDM    IMLA              NORMAL FWA OF MESSAGE
          STM    RPMA 
          LDC    CFLB              FWA OF SECOND MESSAGE
          STM    IMLA 
          LDN    CFLBL/5           LENGTH OF SECOND PART
          RJM    IML               ISSUE MAINTENANCE LOG
          LDC    ** 
 RPMA     EQU    *-1
          STM    IMLA              RESTORE NORMAL FWA 
 NBE      ENDIF 
  
          RJM    RES               RESERVE CHANNEL
          UJK    RPMX 
  
*CALL COMNCES 
IND       TITLE  IND - INITIALIZE NAD.
**        IND - INITIALIZE NAD. 
* 
*         VALIDATE NAD IS UP AND ON IN EST. 
*         RESERVE CHANNEL.
*         DISCONNECT NAMED PATHS. 
*         IF ENABLING OR DISABLING CODE CONVERSION
*         THEN
*           CALL CONVERT MODE CONTROL ROUTINE.
*         RELEASE CHANNEL.
*         RETURN. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = 1, NORMAL RETURN.
* 
*         USES   D.T0 - D.T6, D.REQ1, D.REQ3, ESTADR, FLUSH.
* 
*         CALLS  ERR, FAN, FFN, OUT, REL, RES, WFP. 
  
  
 IND      ENM    X                 ENTRY/EXIT 
 NOS      IF     -DEF,NOS 
          LDN    P.EST
          CRD    D.T0              OBTAIN EST ADDRESS 
 NOS      ENDIF 
          LDD    D.REQ1+C.ESTORD
          LPC    777B 
 NOS      IF     DEF,NOS
          RJM    .EST              CONVERT EST ORDINAL TO EST ADDRESS 
          ADK    EQDE 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTAT 
          SHN    17-S.ESTDSO
 NOS      ELSE
          ADD    D.T0+C.EST 
          STD    ESTADR            SAVE EST ADDRESS 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTMNE
          SHN    17-S.ESTON 
 NOS      ENDIF 
          PJN    IND2              IF DEVICE IS ON
 IND1     LDK    RC.EST            OPERATION DISALLOWED BY EST
          STD    D.REQ3+C.RC
          LJM    IND8 
  
 NOS      IF     DEF,NOS
 IND2     LDD    D.T0+C.CWNL
          SHN    17-S.CWNL
 NOS      ELSE
 IND2     LDD    D.T0+C.ESTAT 
          SHN    17-S.EDN          EST ON AND DOWN
 NOS      ENDIF 
          MJN    IND3.2            IF CONTROLWARE LOAD NEEDED 
          IF     -DEF,NOS,1 
          RJM    R.TAFL            RELEASE FIELD ACCESS 
          RJM    RES               RESERVE CHANNEL
 NOS      IF     DEF,NOS
          LDD    D.REQ1+C.ESTORD
          LPC    777B 
          RJM    .EST              CONVERT EST ORDINAL TO EST ADDRESS 
          ADK    EQDE 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTAT 
          SHN    17-S.ESTDSO
 NOS      ELSE
          LDD    ESTADR 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTMNE
          SHN    17-S.ESTON 
 NOS      ENDIF 
          MJN    IND1              IF DEVICE TURNED OFF 
          RJM    CST               GET CONTROLWARE STATUS 
          MJN    IND3.1            IF FAULT 
 IND3     LDN    FCDA              DISCONNECT ALL RHF PATHS 
          RJM    FFN
          ZJN    IND6              IF ACK RESPONSE
 IND3.1   RJM    NWL               MARK NAD LOAD NEEDED IN EST
 IND3.2   LDK    RC.INIF           INITIALIZATION FAILED
          STD    D.REQ3+C.RC
          LJM    IND8 
  
 IND4     MJN    IND5              IF HARDWARE ERROR
          LCN    NADERRH           ABNORMAL RESPONSE CODE 
 IND5     RJM    ERR               REPORT ERROR 
          MJN    IND8              IF FIRM HARDWARE ERROR 
          UJN    IND3 
  
 IND6     RJM    WFP               WAIT FOR PRIMED
          MJN    IND5              IF ERROR 
          LDN    FCO8              OUTPUT 8/12
          RJM    FAN
          MJN    IND5              IF ERROR 
          LDC    INDA 
          STM    OUTA              SET OUTPUT BUFFER ADDRESS
          LDN    INDAL
          RJM    OUT               OUTPUT PATH NAME 
          MJN    IND5              IF ERROR 
          ZJN    IND7              IF NO LENGTH ERROR 
          LCN    NADERRJ           PARAMETER LENGTH ERROR 
          UJN    IND5 
  
 IND7     LDK    FCRY              SEND READY 
          RJM    FFN
          NJN    IND4              IF ERROR 
          LDD    D.REQ2+C.CCCSF 
          ZJN    IND7.1            IF NOT USING CONVERT MODE
          RJM    CMC               CONVERT MODE CONTROL 
 IND7.1   RJM    DST               READ NAD DETAILED STATUS TABLE 
 IND8     LDN    0                 COMPLETELY 
          RJM    REL               RELEASE CHANNEL
          LDN    1                 NORMAL RETURN
          LJM    INDX 
  
 INDA     VFD    4/0,8/1RR+100B    RH PATH NAME 
          VFD    4/0,8/1RH+100B 
 INDAL    EQU    *-INDA 
 NWL      SPACE  4,10 
**        NWL - NAD LOAD NEEDED.
* 
*         COMPLETELY RELEASE CHANNEL. 
*         IF NOS
*         THEN
*           CALL MTR TO SET NAD LOAD NEEDED FLAG IN EST ENTRY 
*         IF NBE
*         THEN
*           SET *DOWN* FLAG IN EST
* 
*         ENTRY - (ESTADR) = EST ADDRESS, IF NBE. 
* 
*         EXIT  - EST UPDATED,
*                 CHANNEL RELEASED. 
  
  
 NWL      ENM    X
          LDN    0
          RJM    REL               COMPLETELY RELEASE CHANNEL 
  
 NOS      IF     DEF,NOS
          LDD    D.REQ1+C.ESTORD
          LPC    777B 
          STD    D.T1              EST ORDINAL
          LDK    C.CWNL+4 
          STD    D.T2              FUNCTION CODE
          LDK    -M.CWNL
          STD    D.T3              MASK 
          LDK    M.CWNL 
          STD    D.T4              NEW VALUE
          LDK    M.SEQ
          RJM    R.MTR             SET CWNL FLAG IN EST ENTRY 
 NOS      ELSE
          LDK    CH.EST 
          RJM    R.RCH             RESERVE EST CHANNEL
          LDD    ESTADR 
          CRD    D.T0              READ EST ENTRY 
          LDD    D.T0+C.ESTAT 
          SCK    M.EDN
          LMK    M.EDN             SET DOWN FLAG
          STD    D.T0+C.ESTAT 
          LDD    ESTADR 
          CWD    D.T0              WRITE EST ENTRY
          LDK    CH.EST 
          RJM    R.DCH             RELEASE EST CHANNEL
 NOS      ENDIF 
  
          UJK    NWLX 
 DST      SPACE  4,10 
**        DST - READ NAD DETAILED STATUS TABLE. 
* 
*         FUNCTION TO READ DETAILED STATUS TABLE. 
*         SELECT BINARY MODE. 
*         WAIT FOR PRIMED.
*         INPUT 8/12. 
*         INPUT DST.
*         RETURN SELECTED FIELDS TO COMMUNICATION AREA. 
* 
*         ENTRY - CHANNEL RESERVED. 
* 
*         EXIT  - REPLY WORD 2 WRITTEN, IF NO ERROR.
  
  
 DST      ENM    X
 DST1     LDK    FCGS              NAD DETAILED STATUS
          RJM    FFN               ISSUE FUNCTION 
          MJN    DSTX              IF HARDWARE ERROR
          LDK    FCBM 
          RJM    FFN               READ IN BINARY MODE
          PJN    DST4              IF NO ERROR
 DST2     MJN    DST3              IF HARDWARE ERROR
          LCN    NADERRH           INVALID RESPONSE 
 DST3     RJM    ERR
          PJN    DST1              IF RETRY 
          UJN    DSTX              RETURN 
 DST4     RJM    WFP               WAIT FOR PRIMED
          MJN    DST3              IF NAD ERROR 
          LDK    FCI8 
          RJM    FAN               INPUT 8/12 
          LDK    BUFF 
          STM    INPA              SET STATUS BUFFER
 DSTA     MAX    O=DSTLNA,O=DSTDTY,O=DSTHUI,O=DSTCRL,O=DSTTCU,O=DSTAMS
 DSTB     EQU    DSTA/2+1          NUMBER OF NAD WORDS TO READ
          LDK    DSTB*4            NUMBER OF BYTES TO READ
          RJM    INP               INPUT PATH STATUS TABLE
          MJN    DST3              IF NAD ERROR 
          SBK    DSTB*4 
          MJN    DST2              IF INPUT ERROR 
          LDM    BUFF+O=DSTLNA     LOCAL NAD ADDRESS
          STD    D.T0 
          LDM    BUFF+O=DSTDTY     DEVICE INTERFACE TYPE
          STD    D.T1 
          LDM    BUFF+O=DSTHUI     HARDWARE UNIQUE IDENTIFIER 
          STD    D.T2 
          LDM    BUFF+O=DSTCRL     CONTROLWARE REVISION LEVEL 
          STD    D.T3 
          LDM    BUFF+O=DSTAMS     ACTUAL MEMORY SIZE 
          SCN    77B               RETAIN TWO HIGH-ORDER BITS 
          SHN    8-6               4/MS,8/0 
          LMM    BUFF+O=DSTTCU     4/MS,4/TCUS ENABLED,4/ACTUAL 
          STD    D.T4 
          IF     -DEF,NOS,1 
          RJM    R.RAFL            REQUEST FIELD LENGTH ACCESS
          LDD    COMMADR
          SHN    3
          ADN    W.REQ4            REQUEST WORD 4 ADDRESS 
          ADDRA  ER=DST5
          CWD    D.T0              WRITE REPLY WORD 2 
 DST5     UJK    DSTX 
CMC       SPACE  4,10 
**        CMC - CONVERT MODE CONTROL. 
* 
*         BUILD UNIVERSAL COMMAND FUNCTION BLOCK. 
*         ASLONGAS NOT SUCCESSFUL 
*           AND NO FATAL ERRORS ENCOUNTERED 
*         DO
*           ISSUE UNIVERSAL COMMAND.
*           IF ILLEGAL COMMAND RESPONSE 
*             AND ATTEMPTING TO ENABLE CODE CONVERSION
*           THEN
*             RETURN CODE CONVERSION NOT AVAILABLE. 
*           IF NO ERRORS
*           THEN
*             WAIT FOR RESPONSE.
*             IF NAD HAS RESPONDED
*             THEN
*               PROCESS NAD RESPONSE. 
* 
*         ENTRY - ALL PATHS PURGED. 
* 
*         EXIT  - (D.REQ3+C.RC) = RESULTS OF FUNCTION.
  
  
 CMC      ENM    X                 ENTRY/EXIT 
          LDK    P.ZERO 
          CRM    BUFF,ONE 
          LDD    D.REQ2+C.CCCSF 
          LMK    CCCECM 
          ZJN    CMC1              IF ENABLING CODE CONVERSION
          LDK    CCFDCM            DISABLE CODE CONVERSION
          UJN    CMC2 
  
 CMC1     LDD    D.REQ2+C.BUFFS 
          STM    BUFF+UC.BUFFS     CONVERT MODE BUFFERS TO RESERVE
          LDD    D.REQ2+C.PATHS 
          STM    BUFF+UC.PATHS     CONVERT MODE PATHS TO ALLOW
          LDK    CCFECM            ENABLE CODE CONVERSION 
 CMC2     STM    BUFF+UC.CMCF 
          LDK    SFCC 
          STM    BUFF+UC.SFC       CONVERT MODE CONTROL SUB-FUNCTION
 CMC3     LDK    FCUC 
          RJM    FFN               ISSUE UNVC 
          MJN    CMC4              IF NAD ERROR 
          LMK    RCUA&RCAK
          ZJN    CMC6              IF COMMAND ACCEPTED
          LMK    RCUC&RCUA
          ZJN    CMC5              IF CONVERT MODE NOT AVAILABLE
          LCN    NADERRH           INVALID RESPONSE 
 CMC4     RJM    ERR               PROCESS NAD ERROR
          PJN    CMC3              IF RETRIABLE 
          UJK    CMCX 
  
 CMC5     LDN    RC.CCNA           CODE CONVERSION NOT AVAILABLE
          STD    D.REQ3+C.RC
          UJK    CMCX 
  
 CMC6     RJM    WFP               WAIT FOR PRIMED
          MJN    CMC4              IF NAD ERROR 
          LDK    FCO8              OUTPUT 12 TO 8 
          RJM    FAN
          MJN    CMC4              IF NAD ERROR 
          LDK    BUFF 
          STM    OUTA              FWA OF OUT BUFFER
          LDK    UNVCBS            LENGTH TO OUTPUT 
          RJM    OUT               SEND UNVC FUNCTION BLOCK 
          ZJN    CMC8              IF SUCCESSFUL OUTPUT 
          MJN    CMC4              IF NAD ERROR 
          LCN    NADERRK           TRANSFER LENGTH ERROR
 CMC7     UJK    CMC4 
  
 CMC8     RJM    WFR               WAIT FOR NAD RESPONSE
          MJN    CMC7              IF NAD ERROR 
          RJM    PNR               PROCESS NAD RESPONSE 
          MJN    CMC7              IF NAD ERROR 
          UJK    CMCX 
WFR       SPACE  4,10 
**        WFR - WAIT FOR NAD RESPONSE.
* 
*         ASLONGAS NAD HAS NOT RESPONDED
*           AND NO NAD ERRORS 
*         DO
*           GET CONTROLWARE STATUS. 
* 
*         ENTRY - UNVC FUNCTION BLOCK HAS BEEN SEND TO NAD. 
* 
*         EXIT  - (A) > 0, NAD HAS RESPONDED AND
*                          (STATUS) = NAD RESPONSE CODE.
*                     < 0, NAD ERROR. 
  
  
 WFR      ENM    X                 ENTRY/EXIT 
          LCN    0
          STD    D.T0              SET RETRY COUNT
 WFR1     RJM    CST               GET CONTROLWARE STATUS 
          MJN    WFRX              IF NAD ERROR 
          LPN    M.RESPCD 
          LMN    RCUA 
          NJN    WFRX              IF NAD HAS RESPONDED 
          SOD    D.T0 
          PJN    WFR1              IF RETRIES NOT EXHAUSED
          LCN    NADERRE           TIMED-OUT WAITING FOR NAD RESPONSE 
          UJN    WFRX 
PNR       SPACE  4,10 
**        PNR - PROCESS NAD RESPONSE TO CONVERT MODE CONTROL. 
* 
*         IF ENABLING CONVERT MODE
*         THEN
*           IF ACK RESPONSE 
*           THEN
*             GET CONVERT MODE LIMITS.
*           ELSE
*             IF RESOURCES NOT AVAILABLE
*             THEN
*               RETURN CODE CONVERSION NOT AVAILABLE. 
*             ELSE
*               RETRUN NAD RESPONSE ERROR.
*         ELSE
*           IF NOT ACK RESPONSE 
*           THEN
*             RETURN NAD RESPONSE ERROR.
* 
*         ENTRY - (STATUS) = NAD RESPONSE TO CONVERT MODE CONTROL FUNC. 
*                 (D.REQ2+C.CCCSF) = TYPE OF CONVERT MODE CONTROL.
* 
*         EXIT  - (A) > 0, PROPER RESPONSE FOUND AND
*                          (D.REQ3+C.RC) = RHF RESPONSE CODE. 
*                 (A) < 0, NAD RESPONSE ERROR.
  
  
 PNR      ENM    X
          LDD    D.REQ2+C.CCCSF 
          LMK    CCCECM 
          NJN    PNR2              IF NOT ENABLING CODE CONVERSION
          LDD    STATUS 
          LPN    M.RESPCD 
          LMK    RCAK 
          ZJN    PNR3              IF CONVERT MODE ENABLED
          LMK    RCRN&RCAK
          ZJN    PNR4              IF RESOURCES NOT AVAILABLE 
 PNR1     LCN    NADERRH           ABNORMAL NAD RESPONSE
          UJK    PNRX 
  
 PNR2     LDD    STATUS 
          LPN    M.RESPCD 
          LMK    RCAK 
          NJN    PNR1              IF ABNORMAL NAD RESPONSE 
          LDN    1                 NORMAL RETURN
          UJK    PNRX 
  
 PNR3     RJM    GCL               GET CONVERT MODE LIMITS
          MJN    PNRX 
          LDK    RC.CCE            CODE CONVERSION ENABLED
          UJN    PNR5 
  
 PNR4     LDK    RC.CCNA           CODE CONVERSION NOT AVAILABLE
 PNR5     STD    D.REQ3+C.RC
          LDN    1                 NORMAL RETURN
          UJK    PNRX 
GCL       SPACE  4,10 
**        GCL - GET CONVERT MODE LIMITS.
* 
*         READ CONVERT MODE LIMITS FROM NAD.
*         IF NO ERRORS
*         THEN
*           PLACE LIMITS IN RHF REPLY BUFFER. 
* 
*         ENTRY - ENABLE CONVERT MODE SUCCESSFULLY ISSUED TO NAD. 
* 
*         EXIT  - (A) > 0, PARAMETERS STORED IN RHF REPLY BUFFER. 
*                     < 0, NAD ERROR. 
  
  
 GCL      ENM    X                 ENTRY/EXIT 
          RJM    WFP               WAIT FOR PRIMED
          MJN    GCLX              IF NAD ERROR 
          LDK    FCI8 
          RJM    FAN               INPUT 8 TO 12
          MJN    GCLX              IF NAD ERROR 
          LDK    GCLA 
          STM    INPA              SET FWA OF INPUT BUFFER
          LDK    GCLC              LENGTH TO INPUT
          STD    FLUSH             BE SURE TO FLUSH BUFFER
          RJM    INP               INPUT CONVERT MODE LIMITS
          MJN    GCLX              IF NAD ERROR 
          SBN    GCLC 
          PJN    GCL1              IF SUCCESSFUL INPUT
          LCN    NADERRK           TRANSFER LENGTH ERROR
          UJK    GCLX 
  
 GCL1     LDM    GCLA 
          STM    D.REQ3+C.CMPATH
          LDM    GCLB 
          STM    D.REQ3+C.CMBUFF
          LDN    1
          UJK    GCLX 
  
 GCLA     CON    0                 CONVERT MODE BUFFERS 
 GCLB     CON    0                 CONVERT MODE PATHS 
 GCLC     EQU    *-GCLA 
          SPACE  4,10 
          QUAL   *
 LST3NN   EQU    *
 LSTOVLB  MAX    LST3NN,LSTOVLB 
          USE    OVERFLOW 
          ERRNZ  LST3NN-*          TEST *3NN* OVERFLOW ASSUMPTION 
 DCSAVE   EQU    LSTOVLB+1         DIRECT CELL SAVE AREA
 OVLC     EQU    DCSAVE+5          ORIGIN FOR 4NX OVERLAYS
 APBF     EQU    OVLC              APPLICATION HEADER FOR 3NM 
 BUFF     EQU    APLLEN*5+APBF     BUFFER FOR 3NM 
          TTL    NDR/4NB - LOG CONVERT MODE BLOCK ERRORS. 
          TITLE 
          QUAL   4NB
          IDENT  4NB,OVLC+5 
          ORG    OVLC+5 
          COMMENT  NDR OVERLAY - LOG CONVERT MODE BLOCK ERRORS. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION. 1983.
LBE       TITLE  LBE - LOG CONVERT MODE BLOCK ERRORS. 
**        LBE - LOG CONVERT MODE BLOCK ERRORS.
* 
*         IF BLOCK ERROR REPONSE WAS RECEIVED FROM NAD
*         THEN
*           GET PATH STATUS.
*           IF PATH STATUS AVAILABLE
*           THEN
*             MAP ERROR FLAG INTO NAD ERROR CODE. 
*         DETERMINE FET ERROR CODE. 
*         IF LOCAL ERROR
*         THEN
*           PLACE BLOCK HEADER INTO FET.
*         MOVE BLOCK LENGTH IN BYTES INTO FET.
* 
*         ENTRY - (ERROR) = NAD ERROR CODE. 
* 
*         EXIT  - (ERROR) = SPECIFIC NAD ERROR CODE FOR BML.
*                 (BLKERR) = FET REPLY CODE.
*                 USERS FET CONTAINS BLOCK HEADER AND TEXT LENGTH.
  
  
 LBE      ENM    X                 ENTRY/EXIT 
          LDD    ERROR
          LPC    -MBERR 
          STD    ERROR             REMOVE BLOCK ERROR FLAG
          LMK    NADLWER-MBERR
          ZJN    LBE1              IF LOCAL WRITE *BE* RESPONSE 
          LMK    NADRRER&NADLWER
          NJN    LBE2              IF NOT REMOTE READ *BE* REPONSE
 LBE1     RJM    GPS               GET PATH STATUS
          NJN    LBE2              IF PATH STATUS UNAVAILABLE 
          RJM    MER               MAP ERROR FLAG INTO ERROR CODE 
 LBE2     LDD    ERROR
          LPN    7
          STD    D.T0 
          LDM    FETERR,D.T0
          STM    BLKERR 
          RJM    SBH               STORE BLOCK HEADER INTO FET
          UJK    LBEX 
  
 FETERR   BSS    0                 FET REPLY CODES
          LOC    0
          CON    FETBBLK
          CON    FETBABN
          CON    FETBLKSZ 
          CON    FETDHMIS 
          CON    FETPBWE
          CON    FETBNABN 
          CON    FETBNM60 
          LOC    *O 
GPS       SPACE  4,10 
**        GPS - GET PATH STATUS.
* 
*         SAVE CHANNEL RESERVED FLAG. 
*         SELECT PATH.
*         FUNCTION TO READ PATH STATUS TABLE. 
*         SELECT BINARY MODE. 
*         WAIT FOR PRIMED.
*         INPUT 8 TO 12.
*         INPUT PATH STATUS TABLE.
* 
*         ENTRY - NONE. 
* 
*         EXIT  - (A) = 0, IF STATUS AVAILABLE. 
*                     " 0, IF NAD ERROR.
  
  
 GPS      ENM    X                 ENTRY/EXIT 
          LDN    0
          STM    GPSB              INITIALIZE FOR NORMAL RETURN 
          LDD    CHNRES 
          STM    GPSA              SAVE CHANNEL RESERVATION FLAG. 
          RJM    SEL               SELECT PATH
          MJN    GPS1              IF PATH UNAVAILABLE
          LDK    FCST 
          RJM    FFN               FUNCTION TO READ PATH STATUS 
          NJN    GPS1              IF PATH STATUS UNAVAILABLE 
          LDK    FCBM 
          RJM    FFN               READ IN BINARY MODE
          NJN    GPS1              IF NAD ERROR 
          RJM    WFP               WAIT FOR PRIMED
          MJN    GPS1              IF NAD ERROR 
          LDK    FCI8 
          RJM    FAN               INPUT 8 TO 12
          LDK    PTHBUF 
          STM    INPA              SET STATUS BUFFER
          LDK    CMPSLN            CONVERT MODE STATUS LENGTH 
          STD    FLUSH             FLUSH BUFFER 
          RJM    INP               INPUT PATH STATUS TABLE
          MJN    GPS1              IF NAD ERROR 
          SBK    CMPSLN 
          PJN    GPS2              IF INPUT SUCCESSFUL
          LCN    NADERRK           TRANSFER LENGTH ERROR
 GPS1     LMC    777777B
          STM    GPSB              SET PATH STATUS UNAVAILABLE
 GPS2     LDC    0
 GPSA     EQU    *-1               CHANNEL RESERVATION FLAG 
          NJN    GPS3              IF CHANNEL WAS ALREADY RESERVED
          RJM    REL               COMPLETELY RELEASE CHANNEL 
 GPS3     LDC    0
 GPSB     EQU    *-1               RETURN FLAG
          UJK    GPSX 
  
 PTHBUF   BSSZ   CMPSLN            PATH STATUS BUFFER 
MER       SPACE  4,10 
**        MER - MAP ERROR FLAG INTO NAD ERROR CODE. 
* 
*         IF CONVERT MODE STATUS FLAG = A KNOWN NAD ERROR 
*         THEN
*           RETURN SPECIFIC NAD ERROR CODE. 
*         ELSE
*           RETURN GENERAL ERROR CODE.
* 
*         ENTRY - (PTHBUF) = PATH STATUS TABLE. 
*                 (ERROR) = GENERAL NAD ERROR CODE. 
* 
*         EXIT  - (ERROR) = ERROR CODE TO SEND TO BML.
  
  
 MER      ENM    X                 ENTRY/EXIT 
          LDM    PTHBUF+O=PCTCMF
          SHN    17-S.NABNER
          MJN    MER1              IF NETWORK ABN ERROR 
          SHN    17-S.HABNER-17+S.NABNER
          MJN    MER2              IF HOST ABN ERROR
          SHN    17-S.PBWOE-17+S.HABNER 
          MJN    MER3              IF PARTIAL BLOCK W/O EOR OR EOI
          SHN    17-S.DHMIS-17+S.PBWOE
          MJN    MER4              IF DATA LENGTH/HEADER LENGTH MISMATCH
          SHN    17-S.BGTFB-17+S.DHMIS
          MJN    MER5              IF BLOCK GREATER THAN FULL BLOCK 
          SHN    17-S.BNM60-17+S.BGTFB
          MJN    MER6              IF BLOCK NOT MULTIPLE OF 60 BITS 
          UJK    MERX              RETURN WITH GENERAL NAD ERROR
  
 MER1     LDK    NABNERR           NETWORK ABN ERROR
          UJN    MER7 
  
 MER2     LDK    HABNERR           HOST ABN ERROR 
          UJN    MER7 
  
 MER3     LDK    PBWOE             PARTIAL BLOCK W/O EOR OR EOI 
          UJN    MER7 
  
 MER4     LDK    DHMIS             DATA LENGTH/HEADER LENGTH MISMATCH 
          UJN    MER7 
  
 MER5     LDK    BGTFB             BLOCK GREATER THAN FULL BLOCK
          UJN    MER7 
  
 MER6     LDK    BNM60             BLOCK NOT MULTIPLE OF 60 BITS
 MER7     RAD    ERROR             SET SPECIFIC ERROR CODE
          UJK    MERX 
SBH       SPACE  4,10 
**        SBH - STORE BLOCK HEADER IN  FET. 
* 
*         IF NOS/BE THEN OBTAIN FIELD ACCESS. 
*         SAVE NETWORK ABN. 
*         GET FET LENGTH. 
*         IF ROOM FOR BLOCK HEADER AT END OF FET
*         THEN
*           PLACE BLOCK LENGTH AT END OF HEADER.
*           WRITE BLOCK HEADER AND LENGTH INTO FET. 
* 
*         ENTRY - (HDR) = BLOCK HEADER. 
*                 (DCSAVE) = DIRECT CELLS 15B - 21B.
* 
*         EXIT  - NONE. 
  
  
 SBH      ENM    X                 ENTRY/EXIT 
          IF     -DEF,NOS,1 
          RJM    R.RAFL            OBTAIN FIELD ACCESS
          RJM    SNA               SAVE NETWORK ABN 
          LDD    D.REQ2+C.FETADR   LOAD FET ADDRESS 
          LPN    77B
          SHN    12 
          LMD    D.REQ2+C.FETADR+1
          ADN    1
          ADDRA  ER=SBHX
          CRD    D.T0              READ FET LENGTH WORD 
          LDD    D.T0+C.FETLTH
          SHN    -6 
          SBN    3
          MJN    SBHX              IF FET NOT BIG ENOUGH
          LDM    DCSAVE+1          BUFBYTES IS IN DC 16B
          STM    HDR+9             SAVE LENGTH BEYOND HEADER
          LDD    D.REQ2+C.FETADR
          LPN    77B
          SHN    12 
          LMD    D.REQ2+C.FETADR+1
          ADN    7
          ADDRA  ER=SBHX
          SBN    1
          CWM    HDR,TWO           WRITE BLOCK HEADER INTO FET
          UJK    SBHX 
SNA       SPACE  4,10 
**        SNA - SAVE NETWORK ABN. 
* 
*         GET NETWORK ABN FROM PATH STATUS TABLE. 
*         PLUG ABN INTO FETWD5. 
*         RE-WRITE FET WORD 5.
* 
*         ENTRY - (PTHBUF) = PATH STATUS TABLE. 
* 
*         EXIT  - NONE. 
  
  
 SNA      ENM    X                 ENTRY/EXIT 
          LDD    D.REQ2+C.FETADR   LOAD FET ADDRESS 
          LPN    77B
          SHN    12 
          LMD    D.REQ2+C.FETADR+1
          ADN    5
          ADDRA  ER=SNAX
          CRD    D.T0              READ NDR STATISTICS WORD 
          LDD    D.T0+C.NNABN+1 
          LPN    77B               SAVE UPPER HALF OF HOST ABN
          SHN    12 
          LMM    PTHBUF+O=PCTNA2+1
          SHN    6
          STD    D.T0+C.NNABN+1    STORE IN LOWER SIX BITS OF NET ABN 
          LDM    PTHBUF+O=PCTNA1
          LPN    3
          SHN    8
          LMM    PTHBUF+O=PCTNA2
          STD    D.Z7              SAVE UPPER 10 BITS OF NETWORK ABN
          LDM    PTHBUF+O=PCTNA2+1
          SHN    -6 
          SHN    16 
          LMD    D.Z7 
          SHN    2
          STD    D.T0+C.NNABN      UPPER 12 BITS OF NETWORK ABN 
          LDD    D.REQ2+C.FETADR   LOAD FET ADDRESS 
          LPN    77B
          SHN    12 
          LMD    D.REQ2+C.FETADR+1
          ADN    5
          ADDRA  ER=SNA1
          CWD    D.T0              WRITE NDR STATISTICS WORD
 SNA1     UJK    SNAX 
*CALL COMSEL
  
          USE    OVERFLOW 
          QUAL   *
 NOS      IF     DEF,NOS
          OVERFLOW OVLC+5 
 NOS      ENDIF 
          ERRMI  7773B-*           4NB TOO LARGE
          TTL    NDR/4NC - LOG OVERLAY. 
          TITLE 
          QUAL   4NC
          IDENT  4NC,OVLC+5 
          ORG    OVLC+5 
          COMMENT  NDR OVERLAY - ISSUE MAINTENANCE LOG. 
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
*CALL COMNCER 
*CALL COMNCES 
*CALL COMSEL
  
          USE    OVERFLOW 
          QUAL   *
 NOS      IF     DEF,NOS
          OVERFLOW OVLC+5 
 NOS      ENDIF 
          ERRMI  7773B-*           4NC TOO LARGE
          TTL    NDR/4NM - MESSAGE DAYFILE. 
          TITLE 
          QUAL   4NM
          IDENT  4NM,OVLC+5 
          ORG    OVLC+5 
          COMMENT  NDR OVERLAY - PROCESS INCORRECT REQUESTS.
          COMMENT  COPYRIGHT CONTROL DATA CORPORATION.  1980. 
MSG       TITLE  MSG - MESSAGE DAYFILE. 
**        MSG - MESSAGE DAYFILE.
* 
*         IF ILLEGAL FUNCTION 
*         THEN
*           DAYFILE ILLEGAL FUNCTION MESSAGE. 
*         ELSE
*           DAYFILE ADDRESS ERROR MESSAGE.
*         RETURN. 
* 
*         ENTRY  (NDRERR) = 0, ILLEGAL ADDRESS. 
*                         .GT. 0, ILLEGAL FUNCTION. 
* 
*         EXIT   (A) = 1, ABORT CP. 
* 
*         USES   NONE 
* 
*         CALLS  R.DFM
  
  
 MSG      ENM    X                 ENTRY/EXIT 
          LDD    NDRERR 
          ZJN    MSG1              IF ADDRESS ERROR 
 NOS      IF     DEF,NOS
          LDC    MSGA+CPON         DAYFILE ILLEGAL FUNCTION 
 NOS      ELSE
          LDC    MSGA              ILLEGAL FUNCTION 
 NOS      ENDIF 
          UJN    MSG2 
  
 NOS      IF     DEF,NOS
 MSG1     LDC    MSGB+CPON         DAYFILE ADDRESS ERROR
 NOS      ELSE
 MSG1     LDC    MSGB              ILLEGAL ADDRESS
 NOS      ENDIF 
 MSG2     RJM    R.DFM             DAYFILE MESSAGE
          LDN    1                 SET TO ABORT CP
          UJN    MSGX 
  
 MSGA     DATA   C* NDR - ILLEGAL FUNCTION.*
 MSGB     DATA   C* NDR - ADDRESS ERROR.* 
  
          USE    OVERFLOW 
          QUAL   *
 NOS      IF     DEF,NOS
          OVERFLOW OVLC+5 
 NOS      ENDIF 
          ERRMI  7773B-*           4NM TOO LARGE
          END    NDR
