*COMDECK COMNADIO 
          SPACE  4,10 
**        COMNADIO - NAD COMMUNICATION DEFINITIONS. 
  
  
**        DEVICE INTERFACE FUNCTION CODES.
  
  
 FCIB     EQU    0                 INPUT BITSTRING
 FCI6     EQU    1                 INPUT 8 TO 6 
 FCI8     EQU    2                 INPUT 8 TO 12
 FCIW     EQU    3                 INPUT 16 TO 12 
 FCOB     EQU    10B               OUTPUT BITSTRING 
 FCO6     EQU    11B               OUTPUT 6 TO 8
 FCO8     EQU    12B               OUTPUT 12 TO 8 
 FCOW     EQU    13B               OUTPUT 12 TO 16
 FCHS     EQU    200B              HARDWARE STATUS
 FCCS     EQU    201B              CONTROLWARE STATUS 
 FCSA     EQU    202B              SET ADDRESS
 FCCE     EQU    204B              CLEAR PARITY ERROR 
 FCMC     EQU    277B              INTERFACE MASTER CLEAR 
 FCEC     EQU    300B              ECHO CHECK 
 FCSE     EQU    301B              PROCESSOR STEP EXECUTION 
 FCGO     EQU    302B              PROCESSOR GO 
 FCPC     EQU    304B              PROCESSOR MASTER CLEAR 
  
  
**        CONTROLWARE FUNCTION CODES (FLAG FUNCTIONS).
  
  
 FCGS     EQU    1                 NAD GENERAL STATUS 
 FCUT     EQU    2                 UTILITY
 FCAB     EQU    3                 ABORT
 FCSC     EQU    4                 SEND CONTROL MESSAGE 
 FCCP     EQU    5                 CONNECT PATH 
 FCRY     EQU    10B               READY
 FCAC     EQU    11B               ACCEPT 
 FCRJ     EQU    12B               REJECT 
 FCIC     EQU    14B               INQUIRE SELECTED CONTROL MESSAGE 
 FCIP     EQU    16B               INQUIRE SELECTED PATH
 FCIR     EQU    17B               INQUIRE REJECTED CONTROL MESSAGE 
 FCPS     EQU    20B               PATH STATUS
 FCDP     EQU    21B               DISCONNECT PATH
 FCPP     EQU    22B               PURGE PATH 
 FCTD     EQU    23B               TRANSMIT DATA
 FCWD     EQU    24B               WRITE DATA 
 FCWC     EQU    25B               WRITE CODE 
 FCRC     EQU    26B               READ CODE
 FCRD     EQU    27B               READ DATA
 FCSF     EQU    32B               SEND FLUSH CONTROL STATEMENT 
 FCTM     EQU    33B               TRANSMIT DATA WITH MARK
 FCSN     EQU    34B               SELECT PATH BY NAME
 FCST     EQU    35B               READ PATH STATUS TABLE 
 FCSR     EQU    36B               INPUT SELECTED REJECTED CONT. MESS.
 FCRE     EQU    37B               SEND RESET CONTROL STATEMENT 
 FCCM     EQU    40B               CONNECT MAINTENANCE PATH 
 FCMF     EQU    41B               MAINTENANCE FUNCTION 
 FCMI     EQU    42B               MAINTENANCE INPUT
 FCRS     EQU    43B               READ SHORT CODE
 FCDF     EQU    44B               DISCONNECT AND FLUSH PATH
 FCDA     EQU    45B               DISCONNECT NAMED PATHS 
 FCRR     EQU    46B               REMOTE STATUS REQUEST
 FCRT     EQU    50B               RESET TRANSFER 
 FCBM     EQU    51B               BINARY MODE
 FCAM     EQU    52B               ASCII MODE 
 FCUC     EQU    53B               UNIVERSAL COMMAND
 SFCC     EQU    1                 CONVERT MODE CONTROL 
 SFSC     EQU    2                 CONVERT MODE SELECT
 SFWC     EQU    3                 WRITE DATA USING CONVERT MODE
 SFRC     EQU    4                 READ DATA USING CONVERT MODE 
 FCWS     EQU    140B              WRITE SHORT CODE 
 FCSP     EQU    200B              SELECT PATH
 FCFF     EQU    400B              FLAG FUNCTION BIT
  
  
**        CONTROLWARE STATUS AND RESPONSE CODES.
  
  
 M.RESPCD EQU    37B               RESPONSE CODE
 RCAK     EQU    1                 ACKNOWLEDGMENT 
 RCNK     EQU    2                 NEGATIVE ACKNOWLEDGEMENT 
 RCDM     EQU    3                 DATA MARK
 RCUA     EQU    5                 UNIVERSAL COMMAND ACK
 RCMI     EQU    6                 MAINTENANCE INPUT AVAILABLE
 RCBT     EQU    15B               BAD PATH TCU 
 RCIN     EQU    16B               INITIATING WITH REMOTE HOST
 RCTN     EQU    17B               TRANSFER NOT READY 
 RCCP     EQU    21B               CONNECT IN PROGRESS
 RCDC     EQU    22B               LOCALLY REQUESTED DISCONNECT IN PROG 
 RCAB     EQU    23B               PATH ABORTED 
 RCUC     EQU    24B               UNDEFINED COMMAND
 RCIC     EQU    25B               INVALID COMMAND
 RCFL     EQU    27B               FLUSH IN PROGRESS
 RCCE     EQU    32B               CONVERT MODE EXITING 
 RCCA     EQU    33B               CONVERT MODE ACTIVE
 RCNP     EQU    34B               NON-PRU BLOCK
 RCCN     EQU    35B               CONVERT MODE NOT ACTIVE
 RCRN     EQU    36B               RESOURCES NOT AVAILABLE
 RCBE     EQU    37B               BLOCK ERROR
  
 S.CSTOA  EQU    5                 OUTPUT BELOW THRESHOLD 
 M.CSTOA  EQU    40B               OUTPUT BELOW THRESHOLD MASK
 S.CSTIA  EQU    6                 INPUT AVAILABLE
 M.CSTIA  EQU    100B              INPUT AVAILABLE MASK 
 S.CSTSP  EQU    7                 SELECTED PATH RESPONSE 
 S.CSTFLG EQU    8                 FLAG INDICATOR 
 S.CSTPRM EQU    9                 PRIMED 
 S.CSTFLT EQU    10                FAULT
 M.CSTFLT BIT    S.CSTFLT          FAULT MASK 
  
 S.HSTCPE EQU    0                 CHANNEL PARITY ERROR 
 S.HSTHLT EQU    1                 PROCESSOR NOT RUNNING
 S.HSTPPE EQU    2                 PROCESSOR DETECTED PARITY ERROR
 S.HSTMPE EQU    3                 DI DETECTED PARITY ERROR 
 S.HSTILF EQU    4                 ILLEGAL FUNCTION 
 S.HSTENB EQU    5                 DEVICE ENABLE SWITCH OFF 
 S.HSTCSE EQU    6                 CHANNEL SEQUENCE ERROR 
 S.HSTASM EQU    7                 ASSEMBLY/DISASSEMBLY ERROR 
 S.HSTRSD EQU    8                 RESIDUE DATA 
 S.HSTDIE EQU    9                 DI ERROR 
  
 M.HSTCPE BIT    S.HSTCPE          CHANNEL PARITY ERROR MASK
 M.HSTHLT BIT    S.HSTHLT          PROCESSOR NOT RUNNING MASK 
 M.HSTPPE BIT    S.HSTPPE          PROCESSOR DETECTED PARITY ERROR MASK 
 M.HSTMPE BIT    S.HSTMPE          DI DETECTED PARITY ERROR MASK
 M.HSTILF BIT    S.HSTILF          ILLEGAL FUNCTION MASK
 M.HSTENB BIT    S.HSTENB          DEVICE ENABLE SWITCH OFF MASK
 M.HSTCSE EQU    S.HSTCSE          CHANNEL SEQUENCE ERROR MASK
 M.HSTASM EQU    S.HSTASM          ASSEMBLY/DISASSEMBLY ERROR MASK
 M.HSTRSD EQU    S.HSTRSD          RESIDUE DATA MASK
 M.HSTDIE EQU    S.HSTDIE          DI ERROR MASK
  
  
**        NAD CONSTANTS.
  
  
 PSLN     EQU    23D*2             PATH STATUS (PCT) LENGTH (8/12)
 PSLNB    EQU    21D*4/3           PATH STATUS LENGTH (BIT STRING)
 CMPSLN   EQU    27D*2             CONVERT MODE PCT LENGTH (8/12) 
 CMGL     EQU    24B               CONTROL MESSAGE LENGTH 
 CNPL     EQU    34B               CONNECT PATH LENGTH (8-BIT BYTES)
  
  
**        NAD MEMORY LOCATIONS. 
  
  
 N=REGA   EQU    0#007             PROCESSOR *A* REGISTER 
 N=REGB1  EQU    0#008             PROCESSOR *B1* REGISTER
 N=REGB2  EQU    0#009             PROCESSOR *B2* REGISTER
 N=TCIST1 EQU    0#02E             TCI STATUS I 
 N=TCIST2 EQU    0#02F             TCI STATUS II
 N=DISTAT EQU    0#03E             DEVICE INTERFACE STATUS
 N=CWDST  EQU    0#101             C/W DETAILED STATUS (MG40X)
  
  
**        CONTROLWARE DETAILED STATUS TABLE BYTE OFFSETS (8/12).
  
  
 O=DSTLNA EQU    00D*2+0           LOCAL NAD ADDRESS (BITS 0 - 7) 
 O=DSTDTY EQU    11D*2+0           DEVICE INTERFACE TYPE (BITS 0 - 7) 
 DTYQMOD  EQU    201D              DEVICE TYPE *MG401* (170 QMOD C/W) 
 O=DSTHUI EQU    11D*2+1           HARDWARE UNIQUE ID (BITS 8 - 15) 
 O=DSTCRL EQU    13D*2+0           CONTROLWARE REVISION LEVEL (0 - 7) 
 O=DSTTCU EQU    13D*2+1           TCUS ENABLED (8-11), ACTUAL (12-15)
 O=DSTAMS EQU    22D*2+0           ACTUAL MEMORY SIZE (BITS 0 - 15) 
  
  
**        CONTROLWARE PATH CONTROL TABLE BYTE OFFSETS (8/12). 
  
  
 O=PCTSTA EQU    00D*2+0           PATH STATE (BITS 0 - 7)
 O=PCTCLA EQU    00D*2+1           PATH CLARIFIER (BITS 8 - 15) 
 O=PCTRNA EQU    04D*2+0           REMOTE NAD ADDRESS (BITS 0 - 7)
 O=PCTLTE EQU    04D*2+1           LOCAL TRUNK ENABLES (BITS 8 - 11)
 O=PCTDDV EQU    04D*2+1           DESTINATION DEVICE (BITS 12 - 15)
 O=PCTACC EQU    05D*2+0           ACCESS CODE (BITS 0 - 15)
 O=PCTNAM EQU    06D*2+0           PATH NAME (BITS 0 - 15)
 O=PCTLPN EQU    08D*2+0           LOCAL PATH NUMBER (BITS 0 - 7) 
 O=PCTRPN EQU    08D*2+1           REMOTE PATH NUMBER (BITS 8 - 15) 
 O=PCTRC1 EQU    09D*2+0           RECEIVE CODE I (BITS 0 - 15) 
 O=PCTNHP EQU    09D*2+0           NETWORK BREAK HOP COUNT (0 - 7)
 O=PCTNND EQU    09D*2+1           NETWORK BREAK NAD ADDRESS (8 - 15) 
 O=PCTRC2 EQU    10D*2+0           RECEIVE CODE II (BITS 0 - 15)
 O=PCTNET EQU    10D*2+0           NETWORK BREAK LOGICAL NET (0 - 7)
 O=PCTNRC EQU    10D*2+1           NETWORK BREAK REASON CODE (8 - 15) 
 O=PCTRHC EQU    10D*2+1           REMOTE HOST CON REJECT CODE (8 - 15) 
 O=PCTSC1 EQU    11D*2+0           SEND CODE I (BITS 0 - 15)
 O=PCTSC2 EQU    12D*2+1           SEND CODE II (BITS 0 - 15) 
 O=PCTHA1 EQU    23D*2+1           HOST ABN I (BITS 14 - 15)
 O=PCTHA2 EQU    24D*2+0           HOST ABN II (BITS 0 - 15)
 O=PCTCMF EQU    25D*2+0           CONVERT MODE FLAGS (BITS 0 - 7)
 O=PCTNA1 EQU    25D*2+1           NETWORK ABN I (BITS 14 - 15) 
 O=PCTNA2 EQU    26D*2+0           NETWORK ABN II (BITS 0 - 15) 
  
  
**        CONVERT MODE FLAG DEFINITONS (BYTE O=PCTCMF). 
*                (BITS ARE NUMBERED FROM RIGHT TO LEFT).
  
  
 S.NABNER EQU    6                 NETWORK ABN ERROR
 S.HABNER EQU    5                 HOST ABN ERROR 
 S.PBWOE  EQU    4                 PARTIAL BLOCK W/O EOR OR EOI 
 S.PBD    EQU    3                 PARTIAL BLOCK(S) DISCARDED 
 S.DHMIS  EQU    2                 DATA LENGTH/HEADER LENGTH MISMATCH 
 S.BGTFB  EQU    1                 BLOCK GREATER THAN FULL BLOCK SIZE 
 S.BNM60  EQU    0                 BLOCK NOT MULTIPLE OF 60 BITS
  
  
**        CONVERT MODE BLOCK ERROR DEFINITIONS. 
  
  
 SBERR    EQU    11                CONVERT MODE BLOCK ERROR FLAG
 MBERR    BIT    SBERR
 HABNERR  EQU    1                 HOST ABN ERROR 
 BGTFB    EQU    2                 BLOCK GREATER THAN FULL BLOCK
 DHMIS    EQU    3                 DATA LENGTH/HEADER LENGTH MISMATCH 
 PBWOE    EQU    4                 PARTIAL BLOCK W/O EOR OR EOI 
 NABNERR  EQU    5                 NETWORK ABN ERROR
 BNM60    EQU    6                 BLOCK NOT MULTIPLE OF 60 BITS
  
  
**        NAD AND REMOTE SUBSYSTEM ERROR CODES. 
  
  
 NADERFL  EQU    01B               FAULT (SEE HARDWARE STATUS)
 NADERDH  EQU    02B               CONTROLWARE DISASTER HALT (DEAD) 
 NADERRA  EQU    10B               FUNCTION TIMEOUT 
 NADERRB  EQU    11B               CHANNEL INACTIVE AFTER ACTIVATE
 NADERRC  EQU    12B               DATA TIMEOUT 
 NADERRD  EQU    13B               PRIME TIMEOUT
 NADERRE  EQU    14B               FLAG TIMEOUT 
 NADERRF  EQU    15B               TRANSFER ERROR 
 NADERRG  EQU    16B               ABNORMAL PATH STATUS 
 NADERRH  EQU    17B               ABNORMAL RESPONSE CODE 
 NADERRI  EQU    20B               CONTROL MESSAGE LENGTH ERROR 
 NADERRJ  EQU    21B               PARAMETER LENGTH ERROR 
 NADERRK  EQU    22B               TRANSFER LENGTH ERROR
 NADLRER  EQU    40B+MBERR         LOCAL READ CONVERT MODE BLOCK ERROR
 NADLRE1  EQU    NADLRER+HABNERR
 NADLRE2  EQU    NADLRER+BGTFB
 NADLRE3  EQU    NADLRER+DHMIS
 NADLRE4  EQU    NADLRER+PBWOE
 NADLRE5  EQU    NADLRER+NABNERR
 NADLRE6  EQU    NADLRER+BNM60
 NADLWER  EQU    50B+MBERR         LOCAL WRITE CONVERT MODE BLOCK ERROR 
 NADLWE1  EQU    NADLWER+HABNERR
 NADLWE2  EQU    NADLWER+BGTFB
 NADLWE3  EQU    NADLWER+DHMIS
 NADLWE4  EQU    NADLWER+PBWOE
 NADLWE5  EQU    NADLWER+NABNERR
 NADLWE6  EQU    NADLWER+BNM60
 NADERRP  EQU    60B               HEADER LENGTH ERROR (REMOTE) 
 NADERRQ  EQU    61B               BAD DATA BLOCK LENGTH (REMOTE) 
 NADERRR  EQU    62B               BAD PRU DATA BLOCK (REMOTE)
 NADERRS  EQU    63B               ABNORMAL RESPONSE (REMOTE) 
 NADERRT  EQU    64B               CONNECT-IN-PROGRESS-TIMEOUT (REMOTE) 
 NADRRER  EQU    70B+MBERR         REMOTE READ CONVERT MODE BLOCK ERROR 
 NADRRE1  EQU    NADRRER+HABNERR
 NADRRE2  EQU    NADRRER+BGTFB
 NADRRE3  EQU    NADRRER+DHMIS
 NADRRE4  EQU    NADRRER+PBWOE
 NADRRE5  EQU    NADRRER+NABNERR
 NADRRE6  EQU    NADRRER+BNM60
 HRDRETRY EQU    8                 NUMBER OF HARDWARE RETRIES 
  
**        NAD EST OFFSETS.
  
 NOS      IF     DEF,NOS
 M.CWNL   BIT    S.CWNL            CONTROLWARE NOT LOADED MASK
 NOS      ELSE
 M.EDN    BIT    S.EDN             DEVICE DOWN MASK 
 M.ESTCVL BIT    S.ESTCVL          CVL-RESERVED FLAG
 NOS      ENDIF 
 M.ESTRHF BIT    S.ESTRHF          RHF ACTIVE MASK
 M.ESTNLG BIT    S.ESTNLG 
 M.ESTON  BIT    S.ESTON           DEVICE OFF/ON FLAG 
  
**        REDEF MACRO 
* 
*         THE REDEF MACRO IS USED TO REDEFINE ALL CHANNEL INSTRUCTIONS
*         SO THEY WILL GENERATE A CERTAIN SYMBOL ( CH#NNNN WHERE NNNN IS
*         GENEREATED SEQUENTIALLY).  THIS ENABLES US LATER TO GENERATE
*         THE CHANNEL-PLUG TABLE AUTOMATICALLY. 
  
          MACRO  REDEF,OP,EM
#_OP      OPSYN  OP                SAVE OLD DEFINITION
          PURGMAC OP
OP        MACRO  EM 
#CTC      SET    #CTC+1 
#CTM      DECMIC #CTC,4 
CH#"#CTM" #_OP   EM 
OP        ENDM
REDEF     ENDM
* 
#CTC      SET    0                 INITIALIZE COUNT FOR CREATED SYMBOLS.
  
ACN       REDEF  D
DCN       REDEF  D
AJM       REDEF  (AIM,D)
IJM       REDEF  (AIM,D)
EJM       REDEF  (AIM,D)
FJM       REDEF  (AIM,D)
FAN       REDEF  D
FNC       REDEF  (AIM,D)
IAM       REDEF  (AIM,D)
OAM       REDEF  (AIM,D)
IAN       REDEF  D
OAN       REDEF  D
          SPACE  4,10 
**        CHTE MACRO. 
* 
*         THE CHTE MACRO IS USED TO INSERT AN ENTRY INTO
*         THE CHANNEL PLUG TABLE. 
  
  
 CHTE     MACRO  LOC
#CTC      SET    #CTC+1 
#CTM      DECMIC #CTC,4 
CH#"#CTM" SET    LOC
CHTE      ENDM
          TITLE  RESIDENT NETWORK ACCESS SUBROUTINES. 
FAN       SPACE  4,10 
**        FAN - FUNCTION AND TIME OUT A CHANNEL FULL CONDITION. 
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         EXIT   (A) = 0, FUNCTION ISSUED, NORMAL COMPLETION. 
*                    = -NADERRA, FUNCTION TIMEOUT.
* 
*         USES   TRACE. 
* 
*         CALLS  NONE.
  
  
 FAN      ENM    X                 ENTRY/EXIT 
          STM    FANA              SAVE FUNCTION CODE 
          AOD    TRACE             INDICATE RESIDENCY OF FAN
          FNC    **,CH+40B         ISSUE FUNCTION 
 FANA     EQU    *-1
          LCN    0
 FAN1     IJM    FAN2,CH           IF FUNCTION ACCEPTED 
          SBN    1
          NJN    FAN1              IF NOT TIMED OUT 
          SOD    TRACE
          LCN    NADERRA           FUNCTION TIMEOUT 
          UJN    FANX 
  
 FAN2     SOD    TRACE
          LDN    0                 FUNCTION ACCEPTED
          UJN    FANX 
FAW       SPACE  4,10 
**        FAW - FUNCTION THE CHANNEL AND WAIT FOR DATA. 
* 
*         ENTRY  (A) = FUNCTION CODE. 
* 
*         EXIT   (A) .GE. 0, NORMAL COMPLETION - FUNCTION IS ISSUED,
*                            CHANNEL IS ACTIVE AND FULL.
*                    = -NADERRA, FUNCTION TIMEOUT.
*                    = -NADERRB, CHANNEL INACTIVE AFTER ACTIVATE. 
*                    = -NADERRC, DATA TIMEOUT.
* 
*         USES   TRACE. 
* 
*         CALLS  FAN. 
  
  
 FAW      ENM    X                 ENTRY/EXIT 
          RJM    FAN               ISSUE FUNCTION 
          MJN    FAWX              RETURN IF FUNCTION TIMEOUT 
          LDK    TRACEFAW 
          RAD    TRACE             INDICATE RESIDENCY OF FAW
          ACN    CH+40B 
          LCN    0
 FAW1     FJM    FAW3,CH           IF DATA AVAILABLE
          SBN    1
          NJN    FAW1              IF NOT TIMED OUT 
          LCN    TRACEFAW 
          RAD    TRACE
          IJM    FAW2,CH           IF INACTIVE
          LCN    NADERRC           DATA TIMEOUT 
          UJN    FAWX 
  
 FAW2     LCN    NADERRB           CHANNEL INACTIVE AFTER ACTIVATE
          UJN    FAWX 
  
 FAW3     LCN    TRACEFAW 
          RAD    TRACE
          UJN    FAWX 
CST       SPACE  4,10 
**        CST - GET CONTROLWARE STATUS. 
* 
*         ENTRY  (CSTA) = SHN 17-S.CSTLFT.
*                       = 0, IF FAULT CHECK DISABLED. 
* 
*         EXIT   (A) = STATUS (GUARANTEED POSITIVE).
*                    = -NADERFL, IF FAULT (AND CHECK NOT DISABLED). 
*                    .LT. 0 FOR HARDWARE ERROR, SEE FAW.
*                (STATUS) = STATUS. 
*                         = 7777B FOR HARDWARE ERROR. 
* 
*         USES   STATUS.
* 
*         CALLS  FAW. 
* 
*         NOTE - *CST* SHOULD NOT BE USED WITH CONTROLWARE VERSIONS 
*                MG101-A01 THROUGH -A05.  THESE VERSIONS CAN GENERATE 
*                SPURIOUS ASSEMBLY/DISASSEMBLY FAULT CONDITIONS.
*                LATER VERSIONS (I.E MG401-XXX) PREVENT THESE FAULTS
*                BY ENSURING THAT THE DATA LENGTH TO BE TRANSFERRED 
*                FROM THE NAD TO THE PP IS ALWAYS A MULTIPLE OF 48 BITS.
  
  
 CST      ENM    X                 ENTRY/EXIT 
          LCN    0
          STD    STATUS            PRESET INVALID STATUS
          LDK    FCCS 
          RJM    FAW               FUNCTION FOR CONTROLWARE STATUS
          MJN    CSTX              IF HARDWARE ERROR
          IAN    CH+40B            INPUT STATUS 
          DCN    CH+40B 
          STD    STATUS 
          SHN    17-S.CSTFLT       TEST FOR FAULT CONDITION 
*         PSN                      (DISABLE CHECK WHEN PROCESSOR HALTED)
 CSTA     EQU    *-1               MODIFIED IN *NLD* AND *CONNADCER*
          PJN    CST1              IF NO FAULT
          LCN    NADERFL           HARDWARE FAULT 
          UJN    CSTX 
  
 CST1     LDD    STATUS 
          UJN    CSTX 
WFP       SPACE  4,10 
**        WFP - WAIT FOR PRIMED STATUS. 
* 
*         ENTRY  (STATUS) = CONTROLWARE STATUS. 
* 
*         EXIT   (A) = 0, NAD PRIMED. 
*                    .LT. 0 FOR HARDWARE ERROR, SEE CST.
*                    = -NADERRD, PRIME TIMEOUT. 
* 
*         USES   D.TO, STATUS.
* 
*         CALLS  CST. 
  
  
 WFP      ENM    X                 ENTRY/EXIT 
          LDD    STATUS 
          SHN    17-S.CSTPRM
          MJN    WFP2              IF PRIMED
          LCN    0
          STD    D.T0              WAIT LOOP COUNT
 WFP1     RJM    CST               GET CONTROLWARE STATUS 
          MJN    WFPX              IF HARDWARE ERROR
          SHN    17-S.CSTPRM
          MJN    WFP2              IF PRIMED
          SOD    D.T0 
          PJN    WFP1              IF NOT TIMED OUT 
          LCN    NADERRD           PRIME TIMEOUT
          UJN    WFPX 
  
 WFP2     LDN    0                 PRIMED 
          UJN    WFPX 
FFN       SPACE  4,10 
**        FFN - ISSUE FLAG FUNCTION.
* 
*         ENTRY  (A) = FLAG FUNCTION CODE.
* 
*         EXIT   (A) = 0, IF ACKNOWLEDGE RECEIVED.
*                    .LT. 0 FOR HARDWARE ERROR. 
*                    = CODED RESPONSE LOGICAL MINUS ACK IF NOT
*                      HARDWARE ERROR.
*                    = -NADERRE, FLAG TIMEOUT.
* 
*         USES   D.T0, NXTPNT, STATUS.
* 
*         CALLS  CST, FAN.
  
  
 FFN      ENM    X                 ENTRY/EXIT 
          LMC    FCFF              SET FLAG BIT 
          STM    FFNA,NXTPNT       SAVE FLAG FUNCTION 
          RJM    FAN               ISSUE FLAG FUNCTION
          MJN    FFNX              IF HARDWARE ERROR
          AOD    NXTPNT 
          LPN    3                 POSITION FOR NEXT FLAG FUNCTION
          STD    NXTPNT 
          LCN    0
          STD    D.T0              WAIT LOOP COUNT
 FFN1     RJM    CST               GET CONTROLWARE STATUS 
          MJN    FFNX              IF HARDWARE ERROR
          SHN    17-S.CSTFLG
          PJN    FFN2              IF FLAG FUNCTION PROCESSED 
          SOD    D.T0 
          PJN    FFN1              IF NOT TIMED OUT 
          LCN    NADERRE           FLAG TIMEOUT 
          UJN    FFNX 
  
 FFN2     LDD    STATUS 
          LPN    M.RESPCD          CODED RESPONSE 
          LMN    RCAK              *ACK*
          UJN    FFNX 
  
 FFNA     BSSZ   4                 FLAG FUNCTION HISTORY TABLE
INP       SPACE  4,10 
**        INP - INPUT CHANNEL DATA AND CHECK FOR ERROR. 
* 
*         ENTRY  (A) = BYTE COUNT TO INPUT. 
*                (INPA) = INPUT BUFFER ADDRESS. 
*                (FLUSH) = FLUSH FLAG.
* 
*         EXIT   (A) = BYTE COUNT INPUT.
*                    .LT. 0 FOR HARDWARE ERROR. 
* 
*         USES   D.Z1 - D.Z5, D.T1 - D.T2, TRACE. 
* 
*         CALLS  CST. 
  
  
 INP      ENM    X                 ENTRY/EXIT 
          STD    D.T1              SAVE BYTE COUNT TO INPUT 
          LDK    TRACEINP 
          RAD    TRACE             INDICATE RESIDENCY OF INPUT
          ACN    CH+40B 
          LCN    0
 INP1     FJM    INP4,CH           IF DATA AVAILABLE
          SBN    1
          NJN    INP1              IF NOT TIMED OUT 
          LCN    TRACEINP 
          RAD    TRACE
          IJM    INP2,CH           IF INACTIVE
          LCN    NADERRC           DATA TIMEOUT 
          UJN    INPX 
  
 INP2     LCN    NADERRB           CHANNEL INACTIVE AFTER ACTIVATE
 INP3     UJN    INPX 
  
 INP4     LDD    D.T1 
          IAM    **,CH             INPUT DATA BLOCK 
 INPA     EQU    *-1               INPUT BUFFER ADDRESS 
          STD    D.T2              SAVE BYTES REMAINING TO BE READ
          NJN    INP6              IF NO BYTES TO FLUSH 
          LDD    FLUSH
          ZJN    INP6              IF NO TERMINATION FLUSH
 INP5     LDN    5
          IAM    D.Z1,CH           FLUSH EXTRA BYTES AT END OF TRANSFER 
          ZJN    INP5              IF COULD BE MORE BYTES TO FLUSH
 INP6     DCN    CH+40B            DISCONNECT CHANNEL 
          LCN    TRACEINP 
          RAD    TRACE
          RJM    CST               GET CONTROLWARE STATUS 
          MJN    INP3              IF HARDWARE ERROR
          LDD    D.T1 
          SBD    D.T2              COMPUTE BYTES INPUT
          UJN    INP3 
OUT       SPACE  4,10 
**        OUT - OUTPUT CHANNEL DATA AND CHECK FOR ERROR.
* 
*         ENTRY  (A) = BYTE COUNT TO OUTPUT.
*                (OUTA) = OUTPUT BUFFER ADDRESS.
* 
*         EXIT   (A) = BYTE COUNT REMAINING.
*                    .LT. 0 FOR HARDWARE ERROR. 
* 
*         USES   D.T1 - D.T2, TRACE.
* 
*         CALLS  CST. 
  
  
 OUT      ENM    X                 ENTRY/EXIT 
          STD    D.T1              SAVE BYTE COUNT TO OUTPUT
          LDK    TRACEOUT 
          RAD    TRACE             INDICATE RESIDENCY OF OUTPUT 
          ACN    CH+40B 
          LDD    D.T1 
          OAM    **,CH             OUTPUT DATA BLOCK
 OUTA     EQU    *-1               OUTPUT BUFFER ADDRESS
          STD    D.T2              SAVE BYTES REMAINING TO OUTPUT 
          FJM    *,CH 
          DCN    CH+40B            DISCONNECT CHANNEL 
          LCN    TRACEOUT 
          RAD    TRACE
          RJM    CST               GET CONTROLWARE STATUS 
          MJN    OUTX              IF HARDWARE ERROR
          LDD    D.T2              BYTE COUNT REMAINING 
          UJN    OUTX 
HST       SPACE  4,10 
**        HST - GET HARDWARE STATUS.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = STATUS (GUARANTEED POSITIVE).
*                    .LT. 0 FOR HARDWARE ERROR. 
*                (HSTATUS) = HARDWARE STATUS. 
*                          = 7777B FOR HARDWARE ERROR.
* 
*         USES   HSTATUS. 
* 
*         CALLS  FAW. 
  
  
 HST      ENM    X                 ENTRY/EXIT 
          LCN    0
          STM    HSTATUS           PRESET INVALID STATUS
          LDK    FCHS 
          RJM    FAW               FUNCTION FOR HARDWARE STATUS 
          MJN    HSTX              IF HARDWARE ERROR
          IAN    CH+40B            INPUT STATUS 
          DCN    CH+40B 
          STM    HSTATUS
          UJN    HSTX 
ERR       SPACE  4,10 
**        ERR- SAVE ERROR INFORMATION.
* 
*         IF PREVIOUS ERROR UNLOGGED
*         THEN
*           IF PATH ERROR 
*             OR CONVERT MODE BLOCK ERROR 
*           THEN
*             CALL LOG TO LOG THE ERROR 
*         IF NO PREVIOUS ERROR
*         THEN
*           SAVE INITIAL ERROR INFORMATION. 
*         RESET ANY ERROR CONDITION.
*         DETERMINE IF MORE RETRYS ARE POSSIBLE.
* 
*         ENTRY  (A) = HARDWARE ERROR CODE. 
*                (FANA) = LAST FUNCTION ISSUED. 
* 
*         EXIT   (A) .GE. 0, RETRY POSSIBLE.
*                    .LT. 0, RETRIES EXHAUSTED OR PATH ERROR. 
* 
*         USES   CERROR, D.PPMES1, ERROR, HSTATUS, NXTPNT, ONE, STATUS. 
* 
*         CALLS  CST, FAN, HST, LOG.
  
  
 ERR      ENM    X                 ENTRY/EXIT 
          LMC    777777B           CHANGE ERROR CODE TO POSITIVE
          STM    CERROR            SAVE CURRENT ERROR CODE
          DCN    CH+40B            DISCONNECT CHANNEL 
          LDD    ERROR
          ZJN    ERR1              IF NO PREVIOUS ERROR 
          LDM    CERROR 
          SBN    NADERRP
          MJN    ERR2              IF NOT PATH ERROR OR C/M BLOCK ERROR 
          RJM    LOG               LOG ERROR
 ERR1     LDM    CERROR            LOAD CURRENT ERROR CODE
          STD    ERROR             RECORD ERROR CODE
          LDM    FANA 
          STM    ERRE              SAVE FUNCTION ISSUED 
          LDD    D.PPMES1 
          CWM    FFNA,ONE          SAVE FLAG FUNCTION HISTORY 
          SBN    1
          CRM    ERRG,ONE 
          LDD    NXTPNT 
          STM    ERRH              SAVE NEXT FLAG FUNCTION POINTER
          RJM    CST               GET CONTROLWARE STATUS (IGNORE ERROR)
          LDD    STATUS 
          STM    ERRC              SAVE INITIAL CONTROLWARE STATUS
          RJM    HST               GET HARDWARE STATUS (IGNORE ERROR) 
          LDM    HSTATUS
          STM    ERRD              SAVE INITIAL HARDWARE STATUS 
  
*         RESET ANY ERROR CONDITION IF POSSIBLE.
  
 ERR2     LDK    FCMC 
          RJM    FAN               INTERFACE MASTER CLEAR 
          LDK    FCCE 
          RJM    FAN               CLEAR PARITY ERROR 
  
*         DETERMINE RETRY POSSIBLIITY 
  
          LDN    NADERRP-1
          SBD    ERROR
          MJN    ERR3              IF PATH ERROR OR CM BLOCK ERROR
          AOM    ERRF              INCREMENT RETRY COUNT
          LDK    HRDRETRY 
          SBM    ERRF              DETERMINE IF RETRY POSSIBLE
 ERR3     LJM    ERRX 
  
 ERRC     BSSZ   1                 CONTROLWARE STATUS 
 ERRD     BSSZ   1                 HARDWARE STATUS
 ERRE     BSSZ   1                 FUNCTION ISSUED
 ERRF     BSSZ   1                 RETRY COUNT
 ERRG     BSSZ   4                 FLAG FUNCTION HISTORY
 ERRH     BSSZ   1                 NEXT FLAG FUNCTION POINTER 
 HSTATUS  BSSZ   1                 CURRENT HARDWARE STATUS
 CERROR   BSSZ   1                 CURRENT ERROR CODE 
 BLKERR   BSSZ   1                 FET REPLY CODE FOR BLOCK ERROR 
