1MI 
          IDENT  1MI,HST
          PERIPH
          BASE   MIXED
          SST 
          SYSCOM
*COMMENT  1MI - TERMINAL I/O DRIVER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 HST      TITLE  1MI - TERMINAL I/O DRIVER. 
 HST      SPACE  4,10 
***       1MI - TERMINAL I/O DRIVER.
* 
*         R. V. SAMORA.  82/05/30.
 HST      SPACE  4,10 
***              *1MI* HIGH SPEED TERMINAL SUPPORT (HSTS) IMPROVES THE
*         INTERACTIVE I/O PERFORMANCE OF IAF BY REMOVING QUEUING DELAYS 
*         AND ALLOWING INTERACTIVE I/O TO PROCEED WITHOUT MANDATORY 
*         ROLLOUT OF THE INTERACTIVE USER PROGRAM.  THIS FEATURE, 
*         ALTHOUGH INTENDED FOR HIGH SPEED TERMINALS PRIMARILY, 
*         IMPROVES SYSTEM PERFORMANCE NOT ONLY IN THE AREA OF CHARACTER 
*         THROUGHPUT BUT REDUCES SYSTEM OVERHEAD BY KEEPING INTERACTIVE 
*         JOB MOVEMENT AT A MINIMUM.
 HST      SPACE  4,10 
***       CALL. 
* 
* 
*T IR     18/*1MI*, 1/A, 5/CP, 1/T, 17/, 18/FET 
*         A      SET IF AUTO RECALL DESIRED.
*         CP     CONTROL POINT OF REQUESTOR.
*         T      ZERO IF THIS PP HAS THE TINW/TIOW INTERLOCK. 
*         FET    FET ADDRESS. 
* 
*T MB     1/S, 5/, 6/CP, 6/RC, 18/, 12/FP, 1/A, 1/, 4/IF, 3/, 3/RT
*         S      SET BY *CPUMTR* IF *1MI* STARTED FROM RECALL STACK.
*         CP     UNUSED  (WARNING - SOMETIMES SET BY *CPUMTR*). 
*         RC     REASON CODE WHY *1MI* ENTERED RECALL.
*         FP     FIRST POT IN CHAIN PRIOR TO RECALL.
*         A      SET IF MONITOR FUNCTION REJECTED BECAUSE IAF ABORTED.
*         IF     *CIO* INTERNAL FUNCTION CODE (SEE *COMSCIO*).
*         RT     MONITOR FUNCTION REJECTION COUNT.
* 
*T MB+1   12/0, 24/IN, 24/OUT 
*T MB+2   6/0, 6/FETL, 24/FIRST, 24/LIMIT 
*         FETL   FET LENGTH IN CM WORDS.
*         FET POINTERS ARE TRANSFERED ONLY ON INITIAL *1MI* CALL. 
 HST      SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         * FET ADDRESS OUT OF RANGE AT NNN.* 
*                FET ADDRESS .LE. 1 OR FET EXCEEDS FIELD LENGTH.
* 
*         * BUFFER ARGUMENT ERROR ON FFF AT NNN.* 
*                A BUFFER POINTER DOES NOT CONFORM TO CONSTRAINTS-
*                            - FIRST POINTER .LE. IN POINTER. 
*                            - FIRST POINTER .LE. OUT POINTER.
*                            - OUT POINTER .LT. BUFFER LIMIT. 
*                            - IN POINTER .LT. BUFFER LIMIT.
*                            - BUFFER LENGTH .LE. FIELD LENGTH. 
* 
*         * INCORRECT I/O REQUEST ON FILE FFF AT NNN.*
*                I/O WAS REQUESTED ON A DETACHED INTERACTIVE
*                JOB WITH JOB TERMINATION OPTION SET TO COMPLETION. 
* 
*         FFF REPRESENTS FILE NAME AS GIVEN IN THE FET. 
*         NNN REPRESENTS THE FILE FET ADDRESS.
 HST      SPACE  4,10 
***       HANG CONDITIONS.
* 
*         *1MI* WILL HANG WITH THE *HNGM* MONITOR FUNCTION IF-
*                - INCORRECT ERROR CODE IS DETECTED DURING ERROR
*                  PROCESSING.
*                - AN INCORRECT NETWORK BLOCKSIZE IS DETECTED FROM IAF. 
* 
*         HANG CONDITIONS ARE SOFT IN THAT BY CLEARING THE APPROPRIATE
*         PPU OUTPUT REGISTER, *1MI* WILL ATTEMPT TO RECOVER ITS
*         CURRENT PROCESS AS GRACEFULLY AS POSSIBLE.
 HST      SPACE  4,10 
***       PROGRAMMING CONSIDERATIONS- 
* 
*         *1MI* IN THE PROCESS OF HANDLING TERMINAL I/O WILL- 
* 
*                1) READ PROCESS- 
* 
*                   - ATTEMPT TO FLUSH *LOFW* OR RA+2 LIST OF FILE
*                     ENTRIES BEFORE PROCESSING THE READ REQUEST. 
* 
*                2) WRITE PROCESS-
* 
*                   - *1MI* WILL TRANSFER THE MAXIMUM AMOUNT OF OUTPUT
*                     DATA SPECIFIC TO EACH TERMINALS DOWNLINE BLOCK
*                     LIMIT WHICH IS CHARACTERISTIC OF ITS LINE SPEED.
*                   - PPU RECALL IS USED BETWEEN *VADO* OUTPUT DOWNLINE 
*                     *TSEM* FUNCTION REQUESTS TO IAF.
*                   - IN THE EVENT THE USER JOB SHOULD ROLL FROM THE
*                     CONTROL POINT WHILE *1MI* IS IN PPU RECALL, 
*                     ROUTINE *1RO* WILL CONTINUE THE OUTPUT PROCESS
*                     STARTED BY *1MI* WHETHER EXPLICIT OR IMPLICIT 
*                     OUTPUT REQUEST VIA LIST OF FILES PROCESSING.
*                   - BUFFERED WRITE ON A FULL OUTPUT BUFFER
*                     WITH NO *EOL* BYTE RESULTS IN A ROLL OF 
*                     THE USER JOB TO ALLOW *1RO* TO ASSURE 
*                     OUTPUT BUFFER FLUSH COMPLETION. 
* 
*                3) MONITOR FUNCTION REJECTION PROCESSING-
* 
*                   - IF A *TGPM* OR *TSEM* MONITOR FUNCTION IS 
*                     REJECTED BECAUSE IAF IS BUSY, *1MI* WILL GO INTO
*                     PP RECALL.  WHEN RESTARTED, *1MI* WILL THEN 
*                     DROP ANY POTS CURRENTLY HELD AND START OVER.
*                   - IAF INACCESSIBILITY DETECTED THROUGH EITHER 
*                     FUNCTION REJECTION OR *1MI* PRESET FORCES 
*                     SUSPENSION ROLLOUT OF THE USER JOB CAUSING
*                     JOB DETACHMENT TO ALLOW SUBSEQUENT USER 
*                     RECOVERY. 
* 
*                4) MULTIPLEXOR TERMINAL CHARACTERISTICS- 
* 
*                   - BECAUSE OF THE LACK OF TYPEAHEAD FOR MULTIPLEXOR
*                     TERMINALS, THE USER JOB STEMMING FROM TERMINALS 
*                     OF THIS TYPE WILL ALWAYS ROLL FROM THE CONTROL
*                     POINT ON I/O REQUESTS.
 HST      SPACE  4,10 
**        RECALL TIME PERIODS (MILLISECONDS)
  
 RECMS1   EQU    10D         JOB ACTIVE WITH NO READY DATA
 RECMS2   EQU    100D        IAF REQUEST QUEUE REJECTION
  
**        REASON CODES FOR WHY *1MI* MIGHT GO INTO RECALL.
  
          LOC    0
  
 TALR     BSS    1           IAF BUSY, TRY AGAIN LATER
 TDOR     BSS    1           *VADO* *TSEM* MONITOR FUNCTION REJECTED
 TPOR     BSS    1           *VDPO* *TSEM* MONITOR FUNCTION REJECTED
  
          LOC    *O 
  
**        ASSEMBLY CONSTANTS. 
  
 IAFF     EQU    4000        FUNCTION REJECTED BECAUSE IAF ABORTED
 TTB      EQU    4000        TIOW/TINW BUSY, FROM *CPUMTR* IN IR+2
 EJT$     EQU    1           ASSEMBLE EJT ADDRESSING (*COMPGFP*)
 HST      SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL,COMPMAC 
*CALL,COMSACC 
*CALL,COMSCIO 
*CALL,COMSCPS 
*CALL,COMSEJT 
*CALL     COMSJCE 
*CALL,COMSPIM 
          QUAL   REM
*CALL,COMSREM 
          QUAL
*CALL,COMSSSJ 
*CALL,COMSTCM 
 HST      SPACE  4,10 
**        DIRECT LOCATION ASSIGNMENTS.
  
  
 TT       EQU    T6 - T7     TERMINAL TABLE ADDRESS 
 NF       EQU    15          NFL/100B 
 T8       EQU    16          SCRATCH
 T9       EQU    17          SCRATCH
 PA       EQU    T8 - T9     IAF POT MEMORY ADDRESS 
 MB       EQU    20 - 24     MESSAGE BUFFER PARAMETERS FROM *PPR* 
 MB1      EQU    25 - 31     MESSAGE BUFFER + 1 
 MB2      EQU    32 - 36     MESSAGE BUFFER + 2 
 CD       EQU    MB1         SCRATCH BUFFER.
 CN       EQU    MB2         SCRATCH BUFFER 
 BS       EQU    37 - 43     BUFFER STATUS
 FN       EQU    BS          FILE NAME
 FC       EQU    44          *1MI* FUNCTION CODE
 TN       EQU    45          INTERACTIVE TERMINAL NUMBER
 TA       EQU    46          INTERACTIVE REFERENCE ADDRESS
 PP       EQU    47          CURRENT POT POINTER
 WC       EQU    57          CM TRANSFER WORD COUNT 
 FT       EQU    60 - 61     BUFFER FIRST WORD ADDRESS
 LM       EQU    62 - 63     BUFFER LAST WORD ADDRESS 
 IN       EQU    64 - 65     BUFFER IN POINTER
 OT       EQU    66 - 67     BUFFER OUT POINTER 
  
  
          ERRNZ  OT-FT-6     FET DIRECT CELLS MUST BE CONTIGUOUS
          ERRNZ  /CIO/RDF    CODE DEPENDS ON INTERNAL READ FUNCTION 
          ERRNZ  /CIO/WTF-1  CODE DEPENDS ON INTERNAL WRITE FUNCTION
  
 HST      TITLE  MACRO DEFINITIONS. 
  
**        MACRO DEFINITIONS.
HST       SPACE  4,10 
**        CFET - COMPUTE FET ADDRESS. 
*         CFET   N
* 
*         ENTRY  *N* = FET CM WORD OFFSET.
* 
*         COMPUTES ABSOLUTE FET ADDRESS USING (IR+3 - IR+4) 
* 
*         CALLS  CAF. 
  
  
          PURGMAC CFET
  
 CFET     MACRO  W
          RJM    CAF         GET ABSOLUTE ADDRESS 
          IFC    NE,$W$$,1
          ADK    W           OFFSET IF REQUESTED
          ENDM
 HST      SPACE  4,10 
**        ERROR - PROCESS *1MI* ERROR CODE. 
* 
*         ERROR  EC 
* 
*         *EC*   = *1MI* ERROR CODE.
  
  
          PURGMAC ERROR 
  
 ERROR    MACRO  EC 
          LDK    /CIOERR/EC 
          LJM    ERR         PROCESS ERROR
          ENDM
 HST      SPACE  4,10 
**        MSG - DEFINE ERROR OPTIONS AND DAYFILE MESSAGES.
* 
*ERR      MSG    (TEXT),EF,FETD 
* 
*         ENTRY  *ERR*    = *COMSCIO* ERROR CODE. 
*                *TEXT*   = DAYFILE ERROR MESSAGE.
*                *EF*     = CONTROL POINT ERROR FLAG TO SET.
*                *FETD*   = FET DUMP OPTION.
* 
*         EXIT   ERROR PROCESSING OPTIONS AND DAYFILE MESSAGE 
*                ADDRESSES GENERATED PER FORMAT OF *TEPO* TABLE 
*                DESCRIPTION. 
  
  
          PURGMAC MSG 
  
          MACRO  MSG,ERR,TEXT,EF,FETD 
          LOCAL  A
          VFD    6/EF,5//CIOERR/ERR,1/FETD
          CON    =Z*_TEXT_* 
 A        MICRO  1,,$TEXT$
 A        MICCNT A
          ERRNG  32D-A       TEXT OVERFLOW CONDITION
          ENDM
 HST      TITLE  *1MI* MAIN PROGRAM.
          ORG    PPFW 
  
  
  
 HST      RJM    PRS         PRESET *1MI* 
          LDD    FC          *1MI* FUNCTION CODE
          LMN    /CIO/WTF 
          ZJP    HST5        IF *1MI* WRITE FUNCTION
          AOM    ANRA        ANY OUTPUT SHOULD BE ENTIRELY FLUSHED
          UJN    HST5        FLUSH ANY LIST OF FILE OUTPUT
  
*         PROCESS *1MI* READ FUNCTION.
  
 HST1     RJM    CTI         CHECK FOR TERMINAL INPUT 
          ZJN    HST1.1      IF NO INPUT FOUND
          RJM    PTI         PROCESS TERMINAL INPUT 
          ZJN    HST2        IF INPUT QUEUING WITHIN IAF IN PROCESS 
          LJM    DPP         DROP PP
  
*         PROCESS NO INPUT ON A READ OPERATION. 
  
 HST1.1   RJM    GMX
          ZJN    HST3        IF MULTIPLEXOR TERMINAL
 HST2     RJM    CJA         CHECK JOB ACTIVITY 
          ZJN    HST3        IF USER JOB INACTIVE 
          LMK    ICPS 
          ZJN    HST3        IF JOB IN *I* STATUS 
          LMK    ICPS&XCPS
          NJN    HST4        IF JOB NOT IN RECALL 
 HST3     LDK    ROSR        ROLL OUT JOB 
          STD    T0 
          RJM    ROJ         ROLL USER JOB
 HST4     LDK    TALR 
          LJM    ERS         ENTER RECALL STACK 
  
*         PROCESS *1MI* WRITE FUNCTION. 
  
 HST5     RJM    CTO         CHECK FOR TERMINAL OUTPUT
          ZJN    HST10       IF NO OUTPUT 
          RJM    PTO         PROCESS TERMINAL OUTPUT
          MJN    HST2        IF IAF OUTPUT THRESHOLD REACHED
 HST10    LDD    FC          INITIAL *1MI* FUNCTION CODE
          LMK    /CIO/RDF 
          ZJP    HST1        IF OUTSTANDING READ FUNCTION 
          RJM    CFN         COMPLETE OUTPUT FET
*         UJN    DPP         DROP PPU 
 HST      SPACE  4,10 
**        DPP - DROP PPU. 
  
 DPP      BSS    0           ENTRY
          MONITOR DPPM       DROP PPU 
          LJM    PPR         EXIT TO PP RESIDENT
 HST      TITLE  GENERAL SUBROUTINES. 
 ANR      SPACE  4,10 
**        ANR - ASSURE NETWORK REQUIREMENTS.
* 
*         ENTRY  (IR+3 - IR+4) = OUTPUT FET ADDRESS.
*                (CD+3 - CD+4) = MAXIMUM OUTPUT BUFFER CONTENT. 
*                (BS - BS+4)   = OUTPUT BUFFER STATUS.
*                (FT - FT+1)   = BUFFER FIRST WORD ADDRESS. 
*                (IN - IN+1)   = BUFFER IN POINTER. 
*                (OT - OT+1)   = BUFFER OUT POINTER.
*                (LM - LM+1)   = BUFFER LAST WORD ADDRESS.
*                (CD)   = NETWORK BLOCK LIMIT CM WORD COUNT.
* 
*         EXIT   (CD+2) = ACCEPTABLE CM WORD COUNT ENCOMPASSING 
*                         COMPLETE LOGICAL LINES. 
*                (A)    = LESS THAN ZERO IF NO COMPLETE LINES ARE 
*                         ENCOUNTERED WITHIN THE OUTPUT BUFFER. 
* 
*         USES   CM - CM+4, T2 - T4, CD+1 - CD+4. 
* 
*         CALLS  RBS. 
  
  
 ANR      SUBR               ENTRY/EXIT 
  
*         BEGINNING BUFFER SCAN IS FROM NETWORK BLOCK SIZE. 
  
          LDD    CD+3        COMPARE BUFFER CONTENT TO BLOCKSIZE
          SHN    14 
          LMD    CD+4 
          SBD    CD 
          SBN    1
          PJN    ANR1        IF CONTENT GREATER THAN BLOCKSIZE
  
*         OUTPUT BUFFER IS SEARCHED FOR THE LAST *EOL* BYTE WHICH 
*         MARKS THE ACCEPTABLE CM WORD TRANSFER COUNT SATISFYING
*         NETWORK REQUIREMENTS. 
  
          LDD    CD+3        PRESET BUFFER SEARCH PARAMETERS
          STD    CD+1 
          LDD    CD+4 
          STD    CD+2 
  
*         BUFFER IS TRANSFERED AS IS IF FLUSH CONDITIONS PREVAIL. 
  
          LDC    **          BUFFER FLUSH PASS NETWORK REQUIREMENTS 
*         LDC    1
 ANRA     EQU    *-1
          NJN    ANRX        IF WRITER,WRITEF,FLUSH OR READ FUNCTION
  
*         PRESET RUNNING *IN* POINTER PRIOR TO BUFFER SCAN. 
  
          LDD    IN          CURRENT BUFFER *IN* POINTER
          STD    T3 
          LDD    IN+1 
          STD    T4 
          RJM    RBS         SCAN BUFFER FOR *EOL* WITHIN BLOCKSIZE 
          PJN    ANRX        IF EOL FOUND 
          LDM    PTOA 
          LPN    77 
          NJN    ANR0        IF BUFFER FULL 
          LDM    ANRB 
          SBN    1
          MJN    ANRX        IF SYNCHRONOUS TERMINAL AND NO EOL 
 ANR0     LDD    CD+4        SET WORD COUNT TO BUFFER CONTENTS - 1
          SBN    1
          STD    CD+2 
          STM    CODE        SET NO RECALL
          SBN    1
          LJM    ANRX        RETURN 
  
*         ADJUST BUFFER SCAN PARAMETERS TO BEGIN AT BLOCKSIZE.
  
 ANR1     LDD    CD          NETWORK BLOCKSIZE CM WORD COUNT
          STD    CD+2 
          SHN    -14
          STD    CD+1 
          LDD    OT          BUFFER *IN* IS SET TO *OUT* PLUS BLOCKSIZE 
          SHN    14 
          LMD    OT+1 
          ADD    CD+2 
          STD    T3+1        RUNNING *IN* POINTER 
          SHN    -14
          STD    T3 
          SBD    LM 
          SHN    14 
          LMD    T3+1 
          SBD    LM+1 
          MJN    ANR2        IF RUNNING *IN* IS LESS THAN *LIMIT* 
          ADD    FT+1        BUFFER WRAP RUNNING *IN* POINTER 
          STD    T3+1 
          SHN    -14
          ADD    FT 
          STD    T3 
 ANR2     RJM    RBS         SCAN BLOCKSIZE PORTION OF BUFFER 
          PJP    ANRX        IF *EOL* BYTE WITHIN BLOCKSIZE 
  
*         AT LEAST BLOCKSIZE-1 CM WORDS NEED BE TRANSFERED IF FLUSH 
*         CONDITIONS PREVAIL DUE TO WRITER,WRITEF,FLUSH OR READ 
*         FUNCTION IS OUTSTANDING.
  
          LDC    0
*         LDC    1           (IF TC .LE. 8, ASYNC LINE) 
 ANRB     EQU    *-1
          ADM    ANRA        BUFFER FLUSH CONDITIONS
          NJN    ANR3        IF FLUSH REQUIRED
  
*         BUFFERED WRITE FUNCTION REQUIRES TOTAL SCAN FOR *EOL*.
  
          LDD    IN          PRESET REST OF BUFFER SCAN 
          STD    T3 
          LDD    IN+1 
          STD    T3+1 
          LDD    CD+3        INCLUDE TOTAL BUFFER CONTENT 
          STD    CD+1 
          LDD    CD+4 
          STD    CD+2 
          RJM    RBS         SCAN MAXIMUM BUFFER CONTENT FOR *EOL*
          MJP    ANRX        IF NO *EOL* BYTE WITHIN TOTAL BUFFER 
  
*         NETWORK BLOCKSIZE-1 CM WORDS ARE TRANSMITTED TO 
*         FACILITATE MAXIMUM NETWORK TRANSFER WHILE ALLOWING FOR
*         CONTROL BYTE PROCESSING DURING CHARACTER CONVERSION 
*         WITHIN IAF. 
  
 ANR3     LDD    CD          NETWORK BLOCKSIZE CM WORD COUNT
          SBN    1
          STD    CD+2        BLOCKSIZE-1 CM TRANSFER
          UJP    ANRX        RETURN 
 CAF      SPACE  4,10 
**        CAF - COMPUTE ABSOLUTE FET ADDRESS. 
* 
*         ENTRY  (IR+3 - IR+4) = RELATIVE FET ADDRESS.
* 
*         EXIT   (A) = ABSOLUTE FET ADDRESS.
  
  
 CAF      SUBR               ENTRY/EXIT 
          LDD    IR+3        RELATIVE ADDRESS 
          LPN    37 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4        ABSOLUTE ADDRESS 
          UJN    CAFX        RETURN 
 CEF      SPACE  4,10 
**        CEF - CHECK FOR ERROR FLAG. 
* 
*         EXIT   (A) = ERROR FLAG, IF ONE EXISTS. 
*                (CM+2) = 1, IF USER BREAK ERROR FLAG AND JOB HAS 
*                            EXTENDED REPRIEVE SELECTED.
*                         0, OTHERWISE. 
* 
*         USES   CM - CM+4, T0. 
  
  
 CEF2     LDD    T0          RETURN ERROR FLAG
  
 CEF      SUBR               ENTRY/EXIT 
          LDD    CP 
          ADK    STSW        CHECK FOR ERROR FLAG 
          CRD    CM 
          LDN    0
          STD    CM+2 
          LDD    CM+1 
          ZJN    CEFX        IF NO ERROR FLAG PRESENT 
          STD    T0 
          LMK    TIET 
          ZJN    CEF1        IF USER BREAK ONE
          LMK    TAET&TIET
          NJN    CEF2        IF NOT A USER BREAK TWO
 CEF1     LDD    CP 
          ADK    EECW        CHECK FOR EXTENDED REPRIEVE
          CRD    CM 
          LDD    CM 
          SHN    0-12 
          LPN    1
          STD    CM+2 
          UJN    CEF2        RETURN 
 CFN      SPACE  4,10 
**        CFN - COMPLETE FUNCTION.
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS NEEDING COMPLETION.
*                (BS - BS+4)   = FET BUFFER STATUS. 
* 
*         EXIT   FET SET TO COMPLETION STATUS.
*                CONTROL POINT AREA FET POINTER REMOVED FROM
*                *TINW* OR *TIOW*.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  VAD. 
* 
*         MACROS MONITOR. 
  
  
 CFN      SUBR               ENTRY/EXIT 
          LDD    FC 
          LMK    /CIO/RDF 
          NJN    CFN1        IF NOT A READ FUNCTION 
          LDN    TINW        TERMINAL INPUT POINTER 
          STM    CFNC+1      *UADM* REPLACEMENT FIELD 
          LDN    18D         FIELD POSITION 
          SHN    6
          RAM    CFNC+2 
  
*         UPDATE CONTROL POINT AREA *TIOW* OR *TINW*. 
  
 CFN1     LDN    ZERL        PRESET *UADM* REQUEST WORD 
          CRD    CM 
          LDD    MA 
          CWM    CFNC,ON     WRITE REQUEST
          LDN    1           ONE *UADM* REQUEST WITH NO DROP OF PP
          STD    CM+1 
          STD    CM+2 
          MONITOR UADM       UPDATE CONTROL POINT AREA
  
*         SET FET COMPLETION STATUS.
  
          LDD    BS+4 
          SCN    1
          LMN    1
          STD    BS+4 
  
*         REVALIDATE FET+0 ADDRESS. 
  
          LDD    IR+3        FET ADDRESS
          LPN    37 
          SHN    14 
          LMD    IR+4 
          RJM    VAD         VALIDATE FET+0 PRIOR TO WRITE
          ZJN    CFN2        IF ADDRESS NOT WITHIN FL 
 CFNB     CWD    BS          REWRITE FET+0
*         PSN                INHIBIT WRITE OF FET+0 (*ERX*) 
 CFN2     UJP    CFNX        RETURN 
  
  
 CFNC     VFD    12/CSFS,12/TIOW,6/0,6/18D,24/**
 CHG      SPACE  4,10 
**        CHG - CONDITIONALLY HANG PP.
* 
*         ENTRY  (A) = ERROR FLAG.
* 
*         EXIT   (A) = ZERO.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 CHG      SUBR               ENTRY/EXIT 
          STD    CM+2        SET ERROR FLAG 
          LDM    CHG         GET ADDRESS WHERE ERROR DETECTED 
          STD    CM+1 
          MONITOR  CHGM      CONDITIONALLY HANG PP
          UJN    CHGX        RETURN 
 CID      SPACE  4,10 
**        CID - COPY INPUT DATA.
* 
*         ENTRY  (IR+3 - IR+4)  = INPUT FET ADDRESS.
*                (BS - BS+4)    = BUFFER STATUS.
*                (PP)  = INPUT AHEAD POT CHAIN POINTER. 
*                (TN)  = TERMINAL CONNECTION NUMBER.
* 
*         EXIT   INPUT AHEAD TRANSFERED TO FET. 
*                INPUT AHEAD POT CHAIN RELEASED.
* 
*         USES   BS+3 - BS+4, CM - CM+4, T1 - T4, PP, WC. 
* 
*         CALLS  CFN, CIB, MRJ, RRR, SPA, SRR, UPP, WBB.
* 
*         MACROS CFET, MONITOR. 
  
  
 CID      SUBR               ENTRY/EXIT 
          LDK    ZERL        RESET *TSEM* REQUEST 
          CRM    WDPO,ON
          LDD    PP          BEGINNING POT CHAIN POINTER
          STD    T2          POT CHAIN TRAILER
          STM    WDPO+3      SET TO DROP ENTIRE POT CHAIN 
          LDD    TN 
          STM    WDPO+4 
          LDN    /REM/VCPC   TRANSFER CM WORD COUNT 
          STD    WC 
          LDN    0           SET CM TRANSFER TALLY
          STD    T3 
  
*         EOR/EOF STATUS DEPENDS ON BUFFER CONTENT. 
  
 CID1     RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    UPP         UPDATE INPUT AHEAD POT POINTER 
          STM    CIDB 
  
*         SCAN THIS POSSIBLE LAST POT MEMORY FOR EOL BYTE.
  
          LDD    T2          RESTORE PREVIOUS POT POINTER 
          STD    PP 
          RJM    SPA         SET POT MEMORY ADDRESS 
          CRM    BUFF,WC
          RJM    RRR         RESTORE R-REGISTER 
          LDN    0
          STD    WC 
          STD    T4 
 CID2     LDM    BUFF+4,T4
          ZJN    CID3        IF EOL BYTE ENCOUNTERED
          LDD    T4          SCAN NEXT CM WORD
          ADN    5
          STD    T4 
          AOD    WC          ACCEPT NEXT CM WORD
          SBN    /REM/VCPC+1
          MJN    CID2        IF NOT FULL POT MEMORY SCAN
          SOD    WC 
          UJN    CID5        TRANSFER THIS FULL POT MEMORY
  
*         ASSURE EOF CONDITION DETECTION. 
  
 CID3     LDD    WC          LAST POT MEMORY CM WORD COUNT
          NJN    CID4        IF AT LEAST TWO CM WORDS 
          LDD    T3          CHECK EOF CONDITION
          ADM    BUFF 
          ADM    BUFF+1 
          ADM    BUFF+2 
          ADM    BUFF+3 
          ZJP    CID8        IF EOF CONDITION 
 CID4     AOD    WC 
          AOM    CIDA        LAST POT MEMORY WRITTEN
  
*         ENTER WRITE LOOP TO TRANSFER TO INPUT FET BUFFER. 
  
 CID5     LDD    T2          PREVIOUS POT CHAIN POINTER 
          STD    PP 
          RJM    CIB         CHECK INPUT BUFFER THRESHOLD 
          SBD    WC 
          PJN    CID6        IF ROOM FOR COMPLETE TRANSFER
          ADD    WC          BIAS CM WORD TRANSFER COUNT
          ZJN    CID7        IF BUFFER THRESHOLD
          STD    WC          TRANSFER MAXIMUM 
 CID6     LDD    WC 
          STD    T1          TRANSFER WORD COUNT FOR *WBB*
          RAD    T3          COMPLETE TRANSFER TALLY
          LDC    BUFF        BEGINNING READ ADDRESS 
          RJM    WBB         WRITE BINARY BUFFER
          LDN    0
 CIDA     EQU    *-1
          NJN    CID7        IF LAST POT MEMORY WRITTEN 
          LDC    **          UPDATE POT MEMORY POINTER
 CIDB     EQU    *-1
          STD    T2 
          STD    PP 
          NJP    CID1        IF NOT EOR/EOF 
  
*         FORCE EOR/EOF ON INPUT FET. 
  
          LDN    0
          STD    T3 
  
*         COMPLETE READ OPERATIONS. 
  
 CID7     LDN    ZERL        RESET ENDING *IN* POINTER
          CRD    CM 
          LDD    IN 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          CFET   2           *IN* POINTER OFFSET
          CWD    CM          REWRITE *IN* POINTER 
  
*         COMPLETE EOR/EOF BUFFER STATUS. 
  
          LDD    BS+3        RESET APPROPRIATE EOR/EOF LEVEL
          SCN    74 
          STD    BS+3 
          LDD    T3          TRANSFER TALLY 
          ZJN    CID8        IF EOF 
          LDN    4           INPUT LEVEL STATUS IS EOR
          RAD    BS+3 
          LDN    20          SET EOR
          STM    CIDC 
 CID8     LDD    BS+4        RESET BUFFER STATUS
          LPC    6002 
          LMC    30          (SET EOF TERMINATION)
*         LMC    20          (SET EOR TERMINATION)
 CIDC     EQU    *-1
          STD    BS+4 
  
*         *TINW* MUST BE CLEARED BEFORE ISSUING THE *VDPO* *TSEM* 
*         REQUEST, BECAUSE IF THE *VDPO* IS REJECTED AND THE JOB ROLLS, 
*         IAF WOULD MISTAKENLY THINK THE JOB WAS REQUESTING INPUT.
  
          RJM    CFN         COMPLETE INPUT OPERATION 
  
*         RELEASE INPUT AHEAD POT CHAIN.
  
          LDC    /REM/VDPO
          STM    WDPO 
          LDD    MA 
          CWM    WDPO,ON
          LDK    ZERL 
          CRD    CM 
          MONITOR TSEM       DROP POTS
          LDK    TPOR        CHECK FOR POSSIBLE *TSEM* REJECT 
          RJM    MRJ
          LJM    CIDX        RETURN 
 CJA      SPACE  4,10 
**        CJA - CHECK USER JOB ACTIVITY.
* 
*         EXIT   (A)  = *STSW* CPU STATUS.
* 
*         USES   CM - CM+4. 
  
  
 CJA      SUBR               ENTRY/EXIT 
          LDD    CP          CONTROL POINT ADDRESS
          ADN    STSW        STATUS CONTROL WORD
          CRD    CM 
          LDD    CM 
          SHN    -11         CP STATUS ONLY 
          UJN    CJAX        RETURN 
 COD      SPACE  4,10 
**        COD - COPY OUTPUT DATA. 
* 
*         ENTRY  (IR+3 - IR+4)  = OUTPUT FET ADDRESS. 
*                (CD+2)  = ACCEPTABLE CM WORD TRANSFER COUNT. 
*                (PP)  = DIRECT OUTPUT POT MEMORY CHAIN POINTER.
* 
*         EXIT   DIRECT OUTPUT ASSIGNED TO OUTPUT POT MEMORY CHAIN. 
*                (WC)  = LAST POT MEMORY WORD COUNT.
* 
*         USES   CD+2, PP, WC, CN - CN+4, T2 - T3.
* 
*         CALLS  COB, RBB, RRR, SPA, SRR, UPP.
  
  
 COD      SUBR               ENTRY/EXIT 
  
*         DUE TO IAF INTERNAL OUTPUT QUEUING, IT IS NECESSARY TO
*         BYPASS THE FIRST TWO POT MEMORY CM WORDS IN EVERY POT 
*         MEMORY CHAIN ALLOCATED FOR OUTPUT TO ALLOW FOR IAF
*         INTERNAL QUEUE LINKAGE CONTROL. 
  
          LDN    /REM/VCPC-2 IAF POT MEMORY LENGTH-2
          STD    WC          INITIAL CM WORD TRANSFER 
  
*         TRANSFER DIRECT OUTPUT. 
  
 COD1     LDD    CD+2        CHECK ACCEPTABLE CM TRANSFER COUNT 
          SBN    /REM/VCPC-2
 CODA     EQU    *-1
          PJN    COD2        IF AT LEAST ONE POT MEMORY TO TRANSFER 
          ADN    /REM/VCPC-2 BIAS FOR MAXIMUM TRANSFER
 CODB     EQU    *-1
          STD    WC 
 COD2     LDD    WC          SET BUFFER TRANSFER COUNT *RBB*
          STD    T3 
          LDC    BUFF        BEGINNING WRITE BUFFER ADDRESS *RBB* 
          RJM    RBB         READ BINARY BUFFER 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    SPA         SET POT MEMORY ADDRESS FOR THIS TRANSFER 
          ADN    2           ALLOW FOR LINKAGE FIRST POT ONLY 
*         PSN                IF FIRST POT MEMORY PASSED 
 CODC     EQU    *-1
          CWM    BUFF,WC     TRANSFER OUTPUT
          RJM    RRR         RESTORE R-REGISTER 
          LDD    PP          UPDATE LAST POT MEMORY WRITTEN 
          STM    WADO+2 
          AOM    WADO+1      INCREMENT POT COUNT
  
*         UPDATE ACCEPTABLE TRANSFER COUNT. 
  
          LDD    CD+2        ACCEPTABLE CM WORD TRANSFER COUNT
          SBD    WC          CURRENT TRANSFER 
          STD    CD+2 
          LDN    0           INHIBIT SUCCESSIVE POT MEMORY OFFSET 
 CODD     EQU    *-1
          NJN    COD3        IF FIRST POT MEMORY PASSED 
          LDN    2
          RAM    CODA 
          LDN    2
          RAM    CODB 
          LDN    PSNI 
          STM    CODC 
          AOM    CODD 
          AOD    WC          NEGATE LINKAGE CONTROL OFFSET COUNT
          AOD    WC 
  
*         CONTINUE UNTIL NETWORK REQUIREMENT OR FLUSH COMPLETION. 
  
 COD3     LDD    CD+2        REMAINING ACCEPTABLE CM WORD COUNT 
          ZJN    COD4        IF NETWORK REQUIREMENT MADE
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    UPP         UPDATE POT MEMORY
          RJM    RRR         RESTORE R-REGISTER 
          LDD    PP 
          NJP    COD1        IF POT MEMORY AVAILABLE
  
*         NETWORK REQUIREMENT MADE OR POT MEMORY EXHAUSTION.
  
 COD4     LDN    ZERL        COMPLETE TRANSFER PROCESS
          CRD    CN 
          LDN    2R"IB"      *0014* BYTE
          STD    CN          END OF TRANSFER PRESET 
          LDD    WC          ALLOW FOR POSSIBLE TERMINATOR
          SBN    /REM/VCPC
          ZJN    COD5        IF COMPLETE POT MEMORY WRITTEN 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    SPA         SET POT MEMORY ADDRESS 
          ADD    WC          LAST POT WORD COUNT
          CWD    CN          WRITE TRANSFER TERMINATOR
          RJM    RRR         RESTORE R-REGISTER 
  
*         PRESET OUTPUT COMPLETION. 
  
 COD5     LDK    ZERL 
          CRD    CN 
          RJM    COB         CHECK FOR REMAINING OUTPUT 
          NJN    COD6        IF BUFFER IS NOT EMPTY 
          LDM    ANRA 
          ZJN    COD7        IF NOT EOR OR EOF
          LDN    2
          STD    CN+4 
          UJN    COD7        PLACE FLAG IN WORD TWO OF THE POT HEADER 
  
 COD6     LDC    0           CHECK NO RECALL FLAG 
*         LDC    WC          (IF NO RECALL - ONE WORD LEFT IN BUFFER) 
 CODE     EQU    *-1         SET BY *ANR* 
          NJN    COD7        IF NO RECALL REQUIRED
          AOM    PTOB        ADDITIONAL OUTPUT REMAINS
 COD7     LDM    WADO+3      GET ADDRESS OF FIRST POT 
          STD    PP 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    SPA
          ADN    1
          CWD    CN 
          RJM    RRR         RESTORE R-REGISTER 
          LJM    CODX        RETURN 
 CTI      SPACE  4,15 
**        CTI - CHECK FOR TERMINAL INPUT. 
* 
*         ENTRY  (TT - TT+1)   = TERMINAL TABLE ADDRESS.
*                (TN) = TERMINAL CONNECTION NUMBER. 
* 
*         EXIT   (IR+3 - IR+4) = INPUT FET ADDRESS. 
*                (A) = TYPEAHEAD QUEUE POINTER. 
*                (A) = ZERO IF NO INPUT AHEAD.
* 
*         USES   CM - CM+4, IR - IR+4.
* 
*         CALLS  GMX, RRR, SRR. 
  
  
 CTI      SUBR               ENTRY/EXIT 
          LDD    IA          REREAD ORIGINAL INPUT REGISTER 
          CRD    IR 
          LDD    IR+3 
          LPN    37 
          ADD    IR+4 
          ZJN    CTIX        IF NO INPUT FET
  
*         CHECK FOR INPUT AHEAD QUEUE PREPROCESSED. 
  
          RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TT 
          SHN    14 
          LMD    TT+1 
          ADN    /REM/VROT   *VADI* REQUEST WORD
          CRD    CM 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    CM+1 
          ZJN    CTI1        IF QUEUE NOT PREPROCESSED
          STM    PTIA        INHIBIT UNECESSARY *VADI* FUNCTION 
          UJP    CTIX        RETURN 
  
*         READ TERMINAL INPUT TYPEAHEAD QUEUE FROM IAF. 
  
 CTI1     RJM    GMX         MULTIPLEXOR TERMINALS REQUIRE PREPROCESS 
          ZJP    CTIX        IF MULTIPLEXOR TERMINAL
          RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TA          IAF REFERENCE ADDRESS
          SHN    6
          ADN    /REM/VMST   TERMINAL STATUS MESSAGE WORD 
          CRD    CM 
          LDD    CM+1 
          SHN    6
          ADD    TA 
          SHN    6
          ADD    CM+2 
          ADD    TN 
          CRD    CM          READ TERMINAL MESSAGE WORD 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    CM+4        INPUT TYPEAHEAD QUEUE POINTER
          UJP    CTIX        RETURN 
 CTO      SPACE  4,15 
**        CTO - CHECK FOR TERMINAL OUTPUT.
* 
*         ENTRY  (TT - TT+1)    = TERMINAL TABLE ADDRESS. 
* 
*         EXIT   (IR+3 - IR+4)  = OUTPUT FET ADDRESS. 
*                (CD+3 - CD+4)  = MAXIMUM OUTPUT BUFFER CONTENT.
*                (A) = NONZERO IF TERMINAL OUTPUT.
* 
*         USES   IR+3, IR+4, CM - CM+4, CD - CD+4.
* 
*         CALLS  COB, RRR, SLF, SRR, STA, VFP.
  
  
 CTO      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CD 
  
*         *TIOW* IS OUTPUT FET ADDRESS. 
  
          LDD    CP          READ TERMINAL OUTPUT POINTER 
          ADN    TIOW 
          CRD    CM 
          LDD    CM+3 
          LPN    37 
          SHN    14 
          LMD    CM+4 
          ZJN    CTO1        IF NO OUTPUT POINTER 
          STD    IR+4 
          SHN    -14
          STD    IR+3 
          UJN    CTO2        CHECK OUTPUT BUFFER CONTENT
  
 CTO1     RJM    SLF         SEARCH LIST OF FILES 
          ZJN    CTO3        IF NO *LOFW* OR RA+2 LIST ENTRIES
  
*         RETURN OUTPUT BUFFER COUNT. 
  
 CTO2     RJM    VFP         VERIFY FET PARAMETERS
          RJM    COB         CHECK OUTPUT BUFFER CONTENT
          STD    CD+4 
          SHN    -14
          STD    CD+3 
          ADD    CD+4 
 CTO3     STM    CTOA        SAVE EXIT CONDITION
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    STA         RESTORE TERMINAL TABLE ADDRESS 
          RJM    RRR         RESTORE R-REGISTER 
          LDM    CTOA 
          UJP    CTOX        RETURN 
  
 CTOA     CON    0           EXIT CONDITION 
 DFS      SPACE  4,10 
**        DFS - DETERMINE FLUSH STATUS. 
* 
*         THE REQUIREMENTS FOR A FILE TO BE FLUSHED ARE-
*                - FET MUST BE WITHIN FL. 
*                - BUFFER MUST HAVE DATA IN IT. 
*                - FET MUST NOT BE BUSY.
*                - CODE IN FET MUST BE A VALID *CIO* REQUEST. 
*                - FILE MUST BE *OUTPUT* AND UNASSIGNED OR IT MUST BE 
*                  ASSIGNED TO TERMINAL EQUIPMENT.
* 
*         NOTE-  ROUTINES *1RO*, *1AJ* AND *1MI* OBSERVE THE ABOVE
*                CONVENTIONS. 
* 
*         ENTRY  (T8 - T9) = FET ADDRESS. 
* 
*         EXIT   (A) = ZERO, IF ENTRY NOT A FLUSH CANDIDATE.
*                (CN - CN+4) = FIRST WORD OF FET. 
* 
*         USES   T1 - T7, CM - CM+4, CN - CN+4. 
* 
*         CALLS  VAD. 
  
  
 DFS7     LDN    0           NOT A FLUSH CANDIDATE STATUS 
  
 DFS      SUBR               ENTRY/EXIT 
          LDD    T8          READ FET PARAMETERS
          LPN    37 
          SHN    14 
          LMD    T9 
          ADN    3
          RJM    VAD
          ZJN    DFSX        IF FET OUTSIDE FL
          CRD    T3          READ OUT 
          SBN    1
          CRD    T1          READ IN
          SBN    2
          CRD    CN          READ FET+0 
          LDD    CN+4 
          LPN    1
          ZJN    DFSX        IF FET BUSY
          LDD    T6 
          SBD    T4 
          SHN    14 
          ADD    T7 
          SBD    T5 
          ZJN    DFSX        IF BUFFER EMPTY
          LDN    DFSAL       CHECK ACCEPTABLE *CIO* CALLS 
          STD    T1 
          LDD    CN+3 
          LPN    77 
          NJP    DFS7        IF FET ERRORS
  
*         SCAN ACCEPTABLE *CIO* CODES.
  
 DFS1     SOD    T1 
          MJP    DFS7        IF FET CODE NOT IN LIST
          LDM    DFSA,T1
          LMD    CN+4 
          SCN    2           IGNORE BINARY BIT
          NJP    DFS1        IF NOT VALID FET CODE
          LDD    NF          SET NFL SIZE + 1 
          SHN    6
          ADN    1
          STD    T7 
  
*         SEARCH FNT ENTRIES FOR ASSIGNED FILE. 
  
          LDC    FNTN+LENF
          STD    T6 
 DFS2     NFA    T6,R        READ FNT ENTRY 
          CRD    CM 
          LDD    CM          COMPARE FILE NAMES 
          ZJN    DFS3        IF NO ENTRY
          LMD    CN 
          NJN    DFS3        IF NO MATCH
          LDD    CM+1 
          LMD    CN+1 
          NJN    DFS3        IF NO MATCH
          LDD    CM+2 
          LMD    CN+2 
          NJN    DFS3        IF NO MATCH
          LDD    CM+3 
          LMD    CN+3 
          SCN    77 
          ZJN    DFS5        IF MATCH 
 DFS3     LDN    LENF        INCREMENT TO NEXT ENTRY
          RAD    T6 
          SBD    T7 
          MJN    DFS2        IF NOT END OF FNT
          LDD    CN          CHECK FOR *OUTPUT* 
          LMC    2ROU 
          NJN    DFS4        IF NOT *OUTPUT*
          LDD    CN+1 
          LMC    2RTP 
          NJN    DFS4        IF NOT *OUTPUT*
          LDD    CN+2 
          LMC    2RUT 
          NJN    DFS4        IF NOT *OUTPUT*
          LDD    CN+3 
          SCN    77 
          ZJN    DFS6        IF *OUTPUT*
 DFS4     UJP    DFS7        FILE IS NOT A FLUSH CANDIDATE
  
*         EQUIPMENT ASSIGNMENT MUST BE *TTEQ*.
  
 DFS5     NFA    T6,R        CHECK EQUIPMENT ASSIGNMENT 
          ADN    FSTL 
          CRD    CM 
          LDD    CM 
          LPC    777
          LMN    TTEQ 
          NJN    DFS4        IF NOT ASSIGNED TO *TT*
 DFS6     LDN    1           INDICATE OUTPUT AVAILABLE
          UJP    DFSX        RETURN 
 HST      SPACE  4,10 
**        DFSA - TABLE OF CIO CODES TO FLUSH ON.
* 
*         ENTRY  ONE WORD.
* 
*T        12/*CIO* FUNCTION CODE. 
  
  
 DFSA     BSS    0
          LOC    0
  
          CON    1           FET COMPLETE STATUS
          CON    5           WRITE PRU
          CON    15          BUFFERED WRITE 
          CON    25          WRITE EOR
          CON    35          WRITE EOF
          CON    105         WRITE NO REWIND
          CON    121         OPEN ALTER 
          CON    145         OPEN WRITE REWIND
          CON    161         OPEN ALTER REWIND
  
          LOC    *O 
  
 DFSAL    EQU    *-DFSA      *DFSA* TABLE LENGTH
 ERR      SPACE  4,10 
**        ERR - PROCESS ERROR.
* 
*         ENTRY  (A) = ERROR CODE - *COMSCIO*.
* 
*         EXIT   TO *ERX* TO PROCESS ERROR RESPONSE.
*                (ERRA) = ERROR CODE ON ENTRY.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CFN, ERX.
  
  
 ERR      BSS    0           ENTRY
          STM    ERRA        SAVE ERROR CODE
          RJM    ERX         PROCESS *1MI* ERROR
          RJM    CFN         COMPLETE FUNCTION
          LJM    DPP         DROP PP
  
 ERRA     CON    0           *1MI* ERROR CODE 
 ERS      SPACE  4,10 
**        ERS - ENTER RECALL STACK. 
* 
*         ENTRY  (A) = RECALL REASON CODE.
*                      ALL OTHER PARAMETERS PRESET IN RCPW - RCPW+4.
* 
*         EXIT   TO *PPR*.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 ERS      BSS    0           ENTRY
          SHN    6
          RAM    RCPW+1      SAVE RECALL REASON CODE
          LDK    ZERL 
          CRD    CM 
          LDC    RECMS1      DEFAULT TIME PERIOD FOR RECALL 
*         LDC    RECMS2      MONITOR FUNCTION REJECT RECALL TIME PERIOD 
 ERSA     EQU    *-1
          SHN    0           BIAS RECALL PERIOD REJECTION COUNT TIMES 
 ERSE     EQU    *-1
          STD    CM+4 
          LDD    IA          STORE INPUT REGISTER 
          CRD    IR 
          LDD    MA 
          CWM    IR,ON       REWRITE INPUT REGISTER TO MESSAGE BUFFER 
          CWM    RCPW,ON     STORE RECALL PARAMETERS
          LDN    PTMF        TIMED RECALL CRITERIA
          STD    CM+1 
          MONITOR RECM       RECALL PPU 
          LJM    PPR         EXIT TO *PPR*
 ERX      SPACE  4,10 
**        ERX - ERROR EXIT PROCESSOR. 
* 
*         ENTRY  (IR+3 - IR+4)  = INPUT OR OUTPUT FET ADDRESS.
*                (BS - BS+4)    = BUFFER STATUS.
*                (ERRA)  = *CIOERR* ERROR CODE INDEX. 
*                (FC)    = *1MI* FUNCTION CODE. 
* 
*         EXIT   TO *DPP* IF INCORRECT ERROR CODE DETECTION.
*                ERROR FLAG SET IN CONTROL POINT PER ERROR OPTION.
*                DAYFILE ERROR MESSAGE RESPONSE ISSUED. 
* 
*         USES   T1, CM - CM+4, CN - CN+4.
* 
*         CALLS  CHG, IDM, VAD. 
* 
*         MACROS CFET, MONITOR. 
  
  
 ERX      SUBR               ENTRY/EXIT 
          LDC    22S9        FET ERROR STATUS = 22B 
          RAD    BS+4 
          SHN    -14
          RAD    BS+3 
          LDN    ZERL 
          CRD    CM 
          LDN    0           PRESET *TEPO* TABLE SEARCH 
          STD    T1 
  
*         SEARCH *TEPO* TABLE FOR PROCESSING PARAMETERS.
  
 ERX1     LDN    TEPOL       *TEPO* TABLE LENGTH
          SBD    T1 
          ZJN    ERX2        IF TABLE LENGTH EXCEEDED 
          LDM    TEPO,T1     PROCESSING PARAMETERS
          SHN    -1 
          LPN    37 
          SBM    ERRA 
          ZJN    ERX3        IF SELECTION FOUND 
          PJN    ERX2        IF SELECTION PASSED
          AOD    T1          ADVANCE TABLE SEARCH 
          AOD    T1 
          UJN    ERX1        CONTINUE *TEPO* SCAN 
  
*         HANG *1MI* ON INCORRECT ERROR DETECTION.
  
 ERX2     LDK    PPET        SET ERROR FLAG 
          RJM    CHG         CONDITIONALLY HANG PP
          LJM    DPP         DROP PP
  
*         ISSUE APPROPRIATE DAYFILE RESPONSE AND SET ERROR OPTIONS. 
  
 ERX3     LDM    ERRA        *CIOERR* ERROR CODE
          LMK    /CIOERR/ARG
          NJN    ERX4        IF NOT AN ARGUMENT ERROR 
          LDN    PSNI        INHIBIT WRITE OF FET+0 
          STM    CFNB 
 ERX4     AOD    T1          MESSAGE RESPONSE ADDRESS OFFSET
          LDM    TEPO,T1
          STM    IDMA 
          SOD    T1 
          LDM    TEPO,T1     READ ERROR PROCESSING OPTIONS
          SHN    -6 
          ZJN    ERX5        IF NO ERROR FLAG OPTION
  
*         SET CONTROL POINT ERROR FLAG. 
  
          STD    CM+1 
          MONITOR CEFM       SET CONTROL POINT ERROR FLAG 
  
*         SET FET DUMP OPTIONS. 
  
 ERX5     LDM    TEPO,T1
          LPN    1
          ZJN    ERX6        IF NO FET DUMP OPTION
          LDD    CP 
          ADC    PPDW        PPU DUMP CONTROL WORD
          STD    T1 
          CRD    CM 
          CFET   1           GET CURRENT FET LENGTH AND VALIDATE
          CRD    CN 
          LDD    CN+3 
          SHN    -6 
          ADN    5           INITIAL FET LENGTH 
          STD    CN+3 
          LDD    IR+3 
          SHN    14 
          LMD    IR+4 
          ADD    CN+3        CURRENT FET LENGTH 
          RJM    VAD         VALIDATE FET DUMP LENGTH 
          ZJN    ERX6        IF FET DUMP EXCEEDS FIELD LENGTH 
  
*         SET FET ADDRESS AND DUMP WORD COUNT TO *PPDW*.
  
          LDD    IR+3 
          LPN    77 
          SHN    14 
          LMD    CN+3        WORD COUNT OF DUMP 
          SHN    6
          STD    CM+3 
          LDD    IR+4 
          STD    CM+4 
          LDD    T1          REWRITE *PPDW* 
          CWD    CM 
  
*         SET UP DAYFILE ERROR MESSAGE RESPONSE.
  
 ERX6     RJM    IDM         ISSUE DAYFILE MESSAGE
          UJP    ERXX        RETURN 
 HST      SPACE  4,10 
**        TEPO - TABLE OF ERROR PROCESSING OPTIONS AND DAYFILE
*                ERROR MESSAGES.
* 
*         ENTRY  TWO WORDS ASCENDING ORDER PER *ERR* ERROR
*                CODE VALUE.
* 
*T        6/EF, 5/ERR, 1/FETD 
*T,       12/ADDR 
* 
*         EF     = CONTROL POINT ERROR FLAG OPTION. 
*         ERR    = *CIOERR* ERROR CODE. 
*         FETD   = SET IF FET DUMP DESIRED ON ERROR TERMINATION.
*         ADDR   = ADDRESS OF CORRESPONDING DAYFILE MESSAGE.
  
  
 TEPO     BSS    0
          LOC    0
  
 ARG      MSG    (FET ADDRESS OUT OF RANGE),PPET,0
 BUF      MSG    (BUFFER ARGUMENT ERROR ON ),PPET,1 
 IRQ      MSG    (INCORRECT I/O REQUEST ON FILE ),PPET,1
  
          LOC    *O 
  
 TEPOL    EQU    *-TEPO 
 GMX      SPACE  4,10 
**        GMX - GET MULTIPLEXOR STATUS. 
* 
*         ENTRY  (TA) = INTERACTIVE REFERENCE ADDRESS.
*                (TN) = TERMINAL CONNECTION NUMBER. 
* 
*         EXIT   (A)  = ZERO IF MULTIPLEXOR TERMINAL TYPE.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  RRR, SRR.
  
  
 GMX0     LDN    0           MULTIPLEXOR TERMINAL TYPE
  
 GMX      SUBR               ENTRY/EXIT 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TA          INTERACTIVE REFERENCE ADDRESS
          SHN    6
          ADN    /REM/VNTP   TERMINAL TABLE POINTER 
          CRD    CM 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    CM+2 
          ZJN    GMXX        IF NO NETWORK TERMINALS DEFINED
          SBN    1           (A) = HIGHEST MUX TERMINAL NUMBER
          SBD    TN 
          PJN    GMX0        IF A MUX TERMINAL
          UJN    GMXX        RETURN 
 IDM      SPACE  4,10 
**        IDM - SET UP AND ISSUE DAYFILE MESSAGE. 
* 
*         ENTRY  (BS - BS+4) = BUFFER STATUS. 
*                (IDMA) = DAYFILE MESSAGE ADDRESS.
* 
*         EXIT   DAYFILE MESSAGE ISSUED.
* 
*         USES   T1, CM.
* 
*         CALLS  ACS, ANS, DFM. 
  
  
 IDM      SUBR               ENTRY/EXIT 
          LDC    BUFF        SET BUFFER ADDRESS FOR *ACS*, *ANS*
          STD    T1 
          LDC    1R *100
          STI    T1 
          LDC    **          MOVE MESSAGE TO CHARACTER BUFFER 
 IDMA     EQU    *-1         MESSAGE ADDRESS (*ERX*)
          RJM    ACS         ASSEMBLE CHARACTER STRING
          LDD    BS+3 
          STD    CM          PRESERVE BUFFER STATUS 
          SCN    77 
          STD    BS+3 
          LDN    BS          MOVE FILE NAME 
          RJM    ACS         ASSEMBLE NAME
          LDD    CM          RESTORE BUFFER STATUS FIELD
          STD    BS+3 
          LDC    =Z* AT *    ADD * AT * 
          RJM    ACS         ASSEMBLE STRING
          LDD    IR+3        ADD FET ADDRESS
          LPN    77 
          SHN    14 
          LMD    IR+4 
          RJM    ANS         ASSEMBLE NUMERIC STRING
          LDC    =Z*.*       ADD TERMINATOR 
          RJM    ACS         ASSEMBLE TERMINATOR
  
*         ISSUE DAYFILE MESSAGE.
  
          LDC    BUFF        MESSAGE BUFFER ADDRESS FOR *DFM* 
          RJM    DFM         ISSUE MESSAGE
          UJP    IDMX        RETURN 
 ITA      SPACE  4,15 
**        ITA - INITIALIZE INTERACTIVE ACCESS.
* 
*         ENTRY  SUBSYSTEM CONTROL TABLE TO BE SCANNED FOR
*                IAF ACCESSIBILITY. 
* 
*         EXIT   (TA)  = IAF REFERENCE ADDRESS. 
*                (A)   = NONZERO IF IAF ACCESSIBLE. 
* 
*         USES   CM - CM+4, T1 - T5.
* 
*         CALLS  PIR. 
  
  
 ITA0     LDN    0           IAF INACESSIBLE STATUS 
  
 ITA      SUBR               ENTRY/EXIT 
          LDC    SSCP        SUBSYSTEM TABLE POINTER
          CRD    CM 
          LDD    CM+2        TABLE ADDRESS
          LPN    37 
          SHN    14 
          LMD    CM+3 
          CRD    CM          READ TABLE ENTRY 
          LDD    CM          IAF ENTRY
          SHN    21-13       ACCESSIBILITY BIT
          PJN    ITA0        IF IAF INACCESSIBLE
  
*         IF NO ERROR FLAGS, RETURN WITH IAF REFERENCE ADDRESS. 
  
          SHN    14 
          LPC    3777        MASK OFF ACCESSIBILITY BIT 
          SHN    7           BIAS CONTROL POINT ASSIGNMENT 200B 
          ADN    STSW        STATUS CONTROL WORD
          CRD    T1 
          ADN    FLSW-STSW   FIELD LENGTH CONTROL WORD
          CRD    CM 
          LDD    T1+1        ERROR FLAG FIELD 
          NJN    ITA0        IF IAF INACCESSIBLE
          LDD    CM+3 
          ZJN    ITAX        IF NO REFERENCE ADDRESS
          RJM    PIR         PRESET WITH IAF R-REGISTER 
          UJN    ITAX        RETURN 
 MRJ      SPACE  4,10 
**        MRJ - CHECK FOR MONITOR FUNCTION REJECTION. 
* 
*         *MRJ* CHECKS TO SEE IF A *TSEM* OR *TGPM* MONITOR FUNCTION
*         WAS REJECTED.  IF NOT, *MRJ* RETURNS TO THE CALLER.  IF A 
*         FUNCTION WAS REJECTED, *MRJ* SAVES ALL NECESSARY RECALL 
*         INFORMATION AND THEN CAUSES *1MI* TO ENTER PP RECALL. 
* 
*         ENTRY  (A) = RECALL REASON CODE, IF FUNCTION REJECTED.
*                (CM+1) = *CPUMTR* REPLY FROM MONITOR FUNCTION. 
*                (BS - BS+4) = CURRENT BUFFER STATUS. 
* 
*         EXIT   TO *ERS* IF FUNCTION WAS REJECTED. 
* 
*         USES   T0.
* 
*         CALLS  ROJ. 
  
  
 MRJ      SUBR               ENTRY/EXIT 
          STM    MRJA        SAVE RECALL REASON CODE
          LDD    CM+1 
          ZJN    MRJ1        IF IAF IS INACCESSIBLE 
          LMC    7777 
          ZJN    MRJ2        IF THE MONITOR FUNCTION WAS REJECTED 
          UJN    MRJX        RETURN 
  
*         ROLLOUT WITH SUSPENSION IF IAF IS INACTIVE ONLY.
  
 MRJ1     LDK    ROSU        SUSPEND ON JOB ROLLOUT 
          STD    T0 
          RJM    ROJ         ROLLOUT USER JOB 
          LDK    IAFF        SET FUNCTION REJECTED BECAUSE IAF ABORTED
          RAM    RCPW+4 
  
*         RECALL PPU ON MONITOR REJECTION FOR 100 MILLISECONDS. 
  
 MRJ2     LDK    RECMS2      100 MS RECALL PERIOD 
          STM    ERSA 
          LDM    RCRF+4      BIAS RECALL TIME PERIOD
          LPN    7
          RAM    ERSE 
          LPN    7
          RAM    RCPW+4 
          LPN    7
          SBN    4
          PJN    MRJ3        IF MAXIMUM TIME PERIOD REACHED 
          AOM    RCPW+4      INCREMENT FUNCTION REJECT COUNT
 MRJ3     LDM    WIAF+3      FIRST POT
          STM    RCPW+3 
          LDM    MRJA 
          LJM    ERS         ENTER PP RECALL
  
 MRJA     CON    0           RECALL REASON CODE 
 PTI      SPACE  4,10 
**        PTI - PROCESS TERMINAL INPUT. 
* 
*         ENTRY  (PTIA)  = PREPROCESSED INPUT AHEAD QUEUE.
*                (TN)    = TERMINAL NUMBER. 
* 
*         EXIT   INPUT AHEAD TRANSFERED TO INPUT FET. 
*                (IR+3- IR+4) = INPUT FET ADDRESS.
*                (TT - TT+1)  = TERMINAL TABLE ADDRESS. 
*                (A) = NONZERO IF TRANSFER COMPLETE.
* 
*         USES   CM - CM+4, IR - IR+4, PP, T2, T8 - T9. 
* 
*         CALLS  CID, ITA, MRJ, RRR, SRR, STA, VFP. 
* 
*         MACROS DELAY, MONITOR, PAUSE. 
  
  
 PTI      SUBR               ENTRY/EXIT 
  
*         ASSURE INPUT FET ADDRESS FOLLOWING POSSIBLE OUTPUT FLUSH. 
  
          LDD    IA          REREAD ORIGINAL INPUT REGISTER 
          CRD    IR 
          RJM    VFP         VERIFY FET PARAMETERS
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    STA         SET TERMINAL TABLE ADDRESS 
          RJM    RRR         RESTORE R-REGISTER 
          LDC    **          PREPROCESSED INPUT QUEUE POINTER (*CTI*) 
 PTIA     EQU    *-1
          NJN    PTI1        IF QUEUE PREPROCESSED
  
*         FUNCTION IAF FOR DIRECT INPUT ASSIGNMENT. 
  
 PTI0     SOM    PTIC        DECREMENT *TSEM* REQUEST COUNT 
          LDK    ZERL        RESET *TSEM* REQUEST 
          CRD    CM 
          CRM    WADI,ON
          LDC    /REM/VADI
          STM    WADI 
          LDD    TN          TERMINAL NUMBER TO FUNCTION REQUEST
          STM    WADI+4 
          LDD    MA 
          CWM    WADI,ON
          MONITOR TSEM
          LDK    TALR        PRESET POSSIBLE VADI REJECTION 
          RJM    MRJ
  
*         STATUS PREVIOUS *VADI* REQUEST. 
  
 PTI1     LDD    RA          SAVE REFERENCE ADDRESS 
          STD    T9 
  
*         DELAY THE INPUT PROCESS TO ALLOW *VADI* COMPLETION. 
  
 PTI2     RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TT          *VADI* FUNCTION REQUEST RESPONSE 
          SHN    14 
          LMD    TT+1 
          ADN    /REM/VROT
          CRD    CM 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    CM+1 
          NJP    PTI6        IF DIRECT INPUT ASSIGNED 
          LDD    CM+3 
          LPC    6000 
          NJP    PTI5        IF *TSEM* RESPONSE 
*         LDN    0           DEFINE DELAY TYPE
          STM    PTIB 
  
*         DELAY APPROXIMATLY 10 MILLISECONDS. 
  
 PTI2.1   LDN    77          DELAY CYCLE INCREMENT
          STD    T8 
 PTI3     SOD    T8 
          NJN    PTI3.1      IF DELAY CYCLE NOT EXHAUSTED 
          LDC    0           (TYPE OF DELAY)
 PTIB     EQU    *-1
          ZJP    PTI2        IF *TSEM* NOT COMPLETE 
          LJM    PTI0        REISSUE *TSEM* 
  
 PTI3.1   DELAY 
          PAUSE              ALLOW STORAGE RELOCATION 
          LDD    CM+1        ASSURE ERROR CONDITION THIS JOB
          ZJN    PTI4        IF NO ERROR FLAG AT THIS CP
          LDN    0
          UJP    PTIX        DISCONTINUE READ REQUEST 
  
*         ASSURE IAF ACCESSILILITY. 
  
 PTI4     RJM    ITA         GET IAF CURRENT STATUS 
          NJP    PTI3        IF IAF STILL ACCESSIBLE
          LDK    ZERL 
          CRD    CM 
          LDK    TALR        TREAT AS A *VADI* REJECTION
          RJM    MRJ         THIS WILL ALWAYS EXIT VIA *ERS*
  
*         *VADI* FUNCTION REJECTION IS POSSIBLE DUE TO LOW POT
*         MEMORY WITHIN IAF, NO INPUT AHEAD IN IAF, THE IAF 
*         RECEIVE BUFFER BUSY, OR OVERFLOW OCCURRED. IF THE 
*         RECEIVE BUFFER IS BUSY BUT THERE IS TYPEAHEAD DATA
*         IN IAF, DELAY AND REISSUE THE *VADI* *TSEM* REQUEST 
*         (A MAXIMUM OF EIGHT TIMES).  IN THE THREE OTHER REJECT
*         CASES, ROLL THE JOB.
  
 PTI5     STD    T2          SAVE REJECT TYPE 
          LMD    CM+3 
          STD    CM+3 
          AOM    PTIB        SET DELAY TYPE 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TT          TERMINAL TABLE ADDRESS 
          SHN    14 
          LMD    TT+1 
          ADN    /REM/VROT
          CWD    CM          CLEAR REQUEST WORD 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    T2          CHECK REJECT TYPE
          SHN    21-13
          PJN    PTI5.1      IF REJECT RESPONSE 
          LDM    PTIC        CHECK *TSEM* REQUEST COUNT 
          SHN    6
          PJP    PTI2.1      IF NOT AT LIMIT
 PTI5.1   LDN    0           INCOMPLETION STATUS
  
          UJP    PTIX        RETURN 
  
*         SATISFY READ FUNCTION REQUEST ON ACTIVE INPUT.
  
 PTI6     STD    PP          SET INPUT AHEAD POT POINTER
  
*         RESET INPUT FET POINTERS IF STORAGE RELOCATION OCCURRED.
  
          LDD    RA          CURRENT REFERENCE ADDRESS
          LMD    T9          RA PRIOR TO POSSIBLE STORAGE RELOCATION
          ZJN    PTI7        IF NO STORAGE MOVEMENT OCCURRED
          RJM    VFP         VERIFY FET PARAMETERS
          RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TT          REREAD *VROT*
          SHN    14 
          LMD    TT+1 
          ADN    /REM/VROT
          CRD    CM 
          RJM    RRR         RESTORE R-REGISTER 
 PTI7     LDN    0           CLEAR POT POINTER
          STD    CM+1 
          LDD    CM+4        CLEAR INPUT REQUESTED
          SCN    10 
          STD    CM+4 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TT 
          SHN    14 
          LMD    TT+1 
          ADN    /REM/VROT
          CWD    CM          REWRITE *VROT* 
          RJM    RRR         RESTORE R-REGISTER 
          RJM    CID         COPY INPUT DATA
          LDN    1
          LJM    PTIX        EXIT 
  
 PTIC     CON    10          *TSEM* REQUEST LIMIT 
 PTO      SPACE  4,20 
**        PTO - PROCESS TERMINAL OUTPUT.
* 
*         ENTRY  (IR+3 - IR+4)  = OUTPUT FET ADDRESS. 
*                (CD+3 - CD+4)  = MAXIMUM OUTPUT BUFFER CONTENT.
*                (BS - BS+4)    = OUTPUT BUFFER STATUS. 
*                (TN)   = TERMINAL CONNECTION NUMBER. 
* 
*         EXIT   TERMINAL OUTPUT ASSIGNED.
*                (A) .LT. 0, IF IAF OUTPUT THRESHOLD REACHED. 
*                (TT - TT+1) = TERMINAL TABLE ADDRESS.
*                TO *ERS* IF NOT ALL OUTPUT FLUSHED.
*                TO *DPP* IF FULL OUTPUT BUFFER AND NO EOL. 
* 
*         USES   CD, PP, CM - CM+4, CN - CN+4, T2 - T3. 
* 
*         CALLS  ANR, CHG, CIB, COD, GMX, MRJ, ROJ, RRR, SRR, STA.
* 
*         MACROS CFET, MONITOR. 
  
  
 PTO      SUBR               ENTRY/EXIT 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    STA         SET TERMINAL TABLE ADDRESS 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    BS+4        BUFFER STATUS
          LPN    20 
          NJN    PTO1        IF AN EOR/EOF FUNCTION 
          RJM    CIB         CHECK BUFFER INPUT STATUS
          NJN    PTO2        IF NOT A FULL BUFFER 
  
*         IN THE EVENT NETWORK REQUIREMENTS ARE NOT MET FOR 
*         A BUFFERED WRITE ON A FULL BUFFER, IT IS NECESSARY
*         TO ROLLOUT THE USER JOB TO ASSURE BUFFER FLUSH
*         COMPLETION. 
  
          AOM    PTOA        SIGNAL FULL BUFFERED WRITE 
          UJN    PTO2        ATTEMPT OUTPUT TRANSFER
  
*         IGNORE NETWORK REQUIREMENTS ON EOR/EOF FUNCTION.
  
 PTO1     AOM    ANRA        PASS NETWORK OUTPUT REQUIREMENTS 
  
*         SET NETWORK TERMINAL DOWNLINE BLOCK LIMIT.
  
 PTO2     RJM    GMX
          ZJN    PTO2.2      IF MUX 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          LDD    TA 
          SHN    6
          ADN    /REM/VMST
          CRD    CM          READ TERMINAL MESSAGE BUFFER POINTER 
          LDD    CM+1 
          SHN    6
          ADD    TA 
          SHN    6
          ADD    CM+2 
          ADD    TN 
          CRD    CM          READ TERMINAL *VMST* 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    CM+1        CHECK TERMINAL CLASS 
          LPC    377
          SBN    10+1 
          PJN    PTO2.1      IF SYNCHRONOUS TERMINAL
          AOM    ANRB 
 PTO2.1   LDD    CM+3 
          SHN    -6 
          LPN    37 
          NJN    PTO3        IF NETWORK BLOCKSIZE DEFINED 
  
*         HANG *1MI* ON INCORRECT NETWORK BLOCKSIZE.
  
*         LDN    0           SET NO ERROR FLAG
          RJM    CHG         CONDITIONALLY HANG PP
 PTO2.2   LDN    /REM/VOPL   DEFAULT BLOCKSIZE
  
*         REQUIREMENTS DEPEND ON BLOCKSIZE. 
  
 PTO3     SHN    3           CONVERT BLOCKSIZE TO CM WORD COUNT 
          STD    CD 
          RJM    ANR         ASSURE TERMINAL REQUIREMENTS 
          MJP    PTO6        IF REQUIREMENTS NOT ASSURED
          RJM    GMX
          ZJP    PTO6.1      IF MUX TERMINAL
          LDN    0           CLEAR *TSEM* POT COUNT 
          STD    T2 
          LDK    /REM/VTRP   *TSEM* QUEUE POINTER 
          STD    T3 
          SOD    T3 
          RJM    SRR         SET R-REGISTER TO IAF RA 
 PTO3.5   AOD    T3          INCREMENT POINTER
          SBK    /REM/VTSP   END OF QUEUE 
          PJN    PTO4        IF END OF *TSEM* QUEUE 
          LDD    TA          IAF REFERENCE ADDRESS
          SHN    6
          ADD    T3          ADD IN POINTER 
          CRD    CM          READ IN QUEUE ENTRY
          LDD    CM+4        CHECK TERMINAL NUMBER
          LMD    TN 
          NJN    PTO3.5      IF NOT CURRENT TERMINAL
          LDD    CM          CHECK TYPE OF *TSEM* REQUEST 
          SBK    /REM/VADO
          NJN    PTO3.5      IF NOT *VADO* *TSEM* REQUEST 
          LDD    CM+1        GET POT COUNT
          RAD    T2          ADD TO PREVIOUS POT COUNT
          UJN    PTO3.5      CONTINUE SEARCH
 PTO4     RJM    STA
          ADN    /REM/VSTT   CHECK MESSAGES QUEUED IN IAF 
          CRD    CM 
          RJM    RRR         RESTORE R-REGISTER 
          LDD    CM+2 
          LPN    77 
          ADD    T2          ADD *TSEM* QUEUE POT COUNT 
          STD    CM+2 
          LDK    /REM/VNCP   COMPARE WITH MAXIMUM ALLOWED 
          SBD    CM+2 
          MJP    PTOX        IF IAF OUTPUT THRESHOLD REACHED
  
*         SET *TSEM* POT MEMORY REQUEST.
  
          LDK    ZERL        PRESET *TGPM* SUBFUNCTION
          CRD    CM 
          CRM    WADO,ON
          LDD    CD+2        CURRENT ACCEPTABLE TRANSFER
          ADN    /REM/VCPC-1+2  ROUND UP AND ALLOW FOR HEADER 
          SHN    -3          CM WORD COUNT TO POT COUNT 
          STD    CM+1        IAF POT COUNT REQUEST
          MONITOR TGPM       GET POT MEMORY 
          LDK    TALR 
          RJM    MRJ
  
*         SET IAF *VADO* REQUEST FOR OUTPUT BUFFER FLUSH. 
  
          LDD    CM+1        GET POT POINTER
          STD    PP          CURRENT IAF POT MEMORY POINTER 
          STM    WADO+3      FIRST POT IN ASSIGN OUTPUT *VADO*
          STM    WADO+2      LAST POT IN ASSIGN OUTPUT
          LDC    /REM/VADO   PRESET ASSIGN DIRECT OUTPUT REQUEST
          STM    WADO 
          LDD    TN 
          STM    WADO+4      SET TERMINAL CONNECTION IN *VADO* REQUEST
  
*         ASSIGN TERMINAL OUTPUT. 
  
          RJM    COD         COPY OUTPUT DATA 
          LDD    MA          MESSAGE BUFFER 
          CWM    WADO,ON
          LDK    ZERL 
          CRD    CM 
          MONITOR TSEM       ASSIGN DIRECT OUTPUT *VADO*
  
*         THE OUTPUT POINTER SHOULD NOT BE UPDATED UNTIL AFTER THE
*         *VADO* *TSEM* REQUEST HAS BEEN HONORED.  OTHERWISE, IF THE
*         *VADO* WAS REJECTED AND THE JOB ROLLED, THEN *1RO* WOULD NOT
*         BE ABLE TO FLUSH THAT OUTPUT WHICH *1MI* PUT INTO POTS. 
  
          LDK    TDOR        PRESET POSSIBLE *VADO* REJECTION 
          RJM    MRJ
          LDN    ZERL        REQUEST ACCEPTED, SO UPDATE OUTPUT POINTER 
          CRD    CN 
          LDD    OT 
          STD    CN+3 
          LDD    OT+1 
          STD    CN+4 
          CFET   3
          CWD    CN 
          LDN    0
*         LDN    1
 PTOB     EQU    *-1
          ZJN    PTO7        IF ALL OUTPUT FLUSHED
          LDC    RECMS2 
          STM    ERSA 
 PTO5     LDK    TALR 
          LJM    ERS         ENTER RECALL STACK 
  
*         ROLLOUT JOB ON BUFFERED WRITE, FULL CONDITION NO *EOL*
  
 PTO6     LDN    0           FULL BUFFERED WRITE CONDITION
*         LDN    1
 PTOA     EQU    *-1
          ZJN    PTO7        IF NOT FULL OUTPUT BUFFER AND NO *EOL* 
  
*         ALLOW ROUTINE *1RO* TO COMPLETE OUTPUT REQUEST. 
  
 PTO6.1   LDK    ROSR 
          STD    T0 
          RJM    ROJ         ROLLOUT USER JOB 
          UJN    PTO5        ENTER RECALL 
  
 PTO7     LJM    PTOX        RETURN 
 RBS      SPACE  4,10 
**        RBS - REVERSE BUFFER SCAN.
* 
*         ENTRY  (CD+1 - CD+2)  = BEGINNING BUFFER SCAN CONTENT.
*                (FT - FT+1)    = BUFFER FIRST WORD ADDRESS.
*                (LM - LM+1)    = BUFFER LAST WORD ADDRESS. 
*                (T3 - T3+1)    = RUNNING BUFFER *IN* POINTER.
* 
*         EXIT   (CD+1 - CD+2)  = ACCEPTABLE BUFFER CM WORD COUNT 
*                                 ENCOMPASSING COMPLETE LOGICAL LINES.
*                (A) = LESS THAN ZERO IF NO *EOL* ENCOUNTERED.
* 
*         USES   CM - CM+4. 
  
  
*         ENTER SEARCH LOOP FOR AN EXISTING *EOL* BYTE. 
  
 RBS2     LDD    T3          BEGIN BUFFER SCAN
          SHN    6
          ADD    RA 
          SHN    6
          ADD    T3+1 
          SBN    1           BACK OFF RUNNING *IN* POINTER
          CRD    CM          READ BUFFER ENTRY
          SHN    14 
          SBD    RA 
          SHN    6
          STD    T3+1 
          SHN    -14
          STD    T3 
          LDD    CM+4 
          ZJN    RBSX        IF AN *EOL* BYTE ENCOUNTERED 
          LDD    CD+1        DECREMENT ACCEPTABLE CM WORD TRANSFER
          SHN    14 
          LMD    CD+2 
          SBN    1
          STD    CD+2 
          SHN    -14
          STD    CD+1 
          ADD    CD+2 
          NJN    RBS1        IF NOT A COMPLETE BUFFER SCAN
          LCN    0           LINE FRAGMENT STATUS 
  
 RBS      SUBR               ENTRY/EXIT 
 RBS1     LDD    T3          ASSURE BUFFER WRAP 
          SBD    FT          BUFFER FIRST WORD ADDRESS
          SHN    14 
          LMD    T3+1 
          SBD    FT+1 
          NJP    RBS2        IF *FIRST* NOT REACHED 
          LDD    LM 
          STD    T3          SET *IN = LIMIT* 
          LDD    LM+1 
          STD    T3+1 
          LJM    RBS2        CONTINUE BUFFER SCAN 
 ROJ      SPACE  4,10 
**        ROJ - ROLL USER JOB.
* 
*         ENTRY  (T0) = *COMSCPS* ROLLOUT OPTION REQUEST. 
* 
*         EXIT   CONTROL POINT ROLLOUT REQUESTED. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 ROJ      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CM 
          LDD    T0          REQUESTED OPTION 
          STD    CM+1 
          MONITOR ROCM
          UJN    ROJX        RETURN 
 SLF      SPACE  4,10 
**        SLF - SEARCH LIST OF FILE ENTRIES.
* 
*         ENTRY  SCAN LIST OF FILE *LOFW* OR RA+2 ENTRIES 
*                FOR POSSIBLE OUTPUT BUFFER FLUSH CANDIDATES. 
* 
*         EXIT   (IR+3 - IR+4)  = BUFFER OUTPUT FET ADDRESS.
*                (A)  = NONZERO IF FILE ENTRY TO BE FLUSHED.
* 
*         USES   T1 - T5, CM - T9.
* 
*         CALLS  DFS, VAD.
  
  
 SLF      SUBR               ENTRY/EXIT 
          LDD    FL 
          ZJN    SLFX        IF NO FIELD LENGTH 
  
*         PROCESS LIST OF FILE ENTRIES *LOFW*.
  
          LDD    CP          LIST OF FILES POINTER
          ADC    LOFW 
          CRD    CM 
          LDD    CM+1 
          LPN    37 
          SHN    14 
          LMD    CM+2 
          ZJN    SLF1        IF *LOFW* NOT IN USE 
          ADN    1           OFFSET INTO *LOFW* TABLE 
          RJM    VAD         VALIDATE ENTRY ADDRESS 
          ZJN    SLFX        IF INCORRECT ADDRESS 
          CRD    T8-3        READ *LOFW* ENTRY
          RJM    DFS         DETERMINE FLUSH STATUS 
          NJP    SLF3        SET UP FLUSH CANDIDATE 
          UJN    SLFX        IF NOT A FLUSH CANDIDATE 
  
*         PROCESS RA+2 LIST IF NO *LOFW*. 
  
 SLF1     AOM    SLFA        RA+2 INDEX 
          LPN    77 
          LMN    PGNR        MAXIMUM RA+2 LIST LENGTH 
          ZJN    SLFX        IF END OF LIST 
          LDD    RA          REFERENCE ADDRESS
          SHN    6
 SLFA     ADN    1           INCREMENT RA+2 INDEX 
          CRD    T8-3        READ RA+2 ENTRY
          LDD    T8-3 
          ZJP    SLFX        IF END OF LIST 
  
*         VALIDATE FET/FIT ADDRESS. 
  
          LDD    T8 
          LPN    37 
          SHN    14 
          LMD    T8+1 
          ADN    5           BIAS FET/FIT LENGTH
          RJM    VAD         VALIDATE LIST ENTRY
          ZJN    SLF1        IF FET/FIT OUTSIDE FL
          SBN    5
          CRD    T1          DETERMINE IF FET/FIT 
          LDD    T1+3 
          LPN    37 
          ADD    T1+4 
          NJN    SLF2        IF NOT A POSSIBLE FIT
  
*         VALIDATE FET POINTER WITHIN FIT TABLE.
*         NOTE.   FIT+0 RESERVED BITS (17-0) DISTINGUISH
*         FIT TABLE DESCRIPTION.
  
          LDD    T8 
          LPN    37 
          SHN    14 
          LMD    T8+1 
          ADN    1
          RJM    VAD         VALIDATE FIT ADDRESS 
          ZJP    SLF1        IF FIT ADDRESS OUTSIDE FL
          CRD    T8-3        READ FET ADDRESS WITHIN FIT
          LDD    T8 
          LPN    37 
          ADD    T8+1 
          ZJP    SLF1        IF NO FET ADDRESS WITHIN FIT 
  
*         DETERMINE FET/FIT FLUSH STATUS. 
  
 SLF2     RJM    DFS         DETERMINE FLUSH STATUS 
          ZJP    SLF1        IF NOT A FLUSH CANDIDATE 
  
*         SET UP FET ADDRESS EXIT CONDITIONS. 
  
 SLF3     LDD    T8 
          LPN    37 
          STD    IR+3        SET UP FET ADDRESS 
          LDD    T8+1 
          STD    IR+4 
          LJM    SLFX        RETURN 
 VAD      SPACE  4,10 
**        VAD - VALIDATE ADDRESS WITHIN FL. 
* 
*         ENTRY  (A)  = ADDRESS NEEDING VALIDATION. 
* 
*         EXIT   (A)  = ABSOLUTE ADDRESS WITHIN FL. 
*                (A)  = ZERO IF INCORRECT ADDRESS.
  
  
 VAD1     LDN    0           INCORRECT ADDRESS STATUS 
  
 VAD      SUBR               ENTRY/EXIT 
          SHN    14 
          SBD    FL          FIELD LENGTH 
          SHN    6
          PJN    VAD1        IF INCORRECT ADDRESS PASSED
          SHN    14 
          ADD    FL 
          ADD    RA          REFERENCE ADDRESS
          SHN    6           ABSOLUTE ADDRESS 
          UJN    VADX        RETURN 
 VFP      SPACE  4,10 
**        VFP - VERIFY FET PARAMETERS.
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   (FT - FT+1)   = BUFFER FIRST WORD ADDRESS. 
*                (IN - IN+1)   = BUFFER IN POINTER. 
*                (OT - OT+1)   = BUFFER OUT POINTER.
*                (LM - LM+1)   = BUFFER LAST WORD ADDRESS.
*                (BS - BS+4)   = BUFFER FET STATUS. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CFET, ERROR, MONITOR.
  
  
 VFP      SUBR               ENTRY/EXIT 
  
*         RESET FET BUFFER STATUS.
  
          CFET               GET BUFFER STATUS
          CRD    BS 
          LDN    3           VALIDATE ALL FET PARAMETERS
          STD    CM+1 
          LDD    IR+3        FET ADDRESS
          LPN    77 
          STD    CM+3 
          LDD    IR+4 
          STD    CM+4 
          MONITOR VFPM       VERIFY FET PARAMETERS
          LDD    CM+1        VALIDATION RESPONSE
          ZJN    VFP2        IF VALID FET 
          LPN    1
          ZJN    VFP1        IF VALID FET ADDRESS 
          ERROR  ARG         *FET ADDRESS OUT OF RANGE* 
  
 VFP1     LDD    CM+1 
          LPN    2
          ZJN    VFP2        IF NO BUFFER ERROR 
          ERROR   BUF         *BUFFER ARGUMENT ERROR* 
  
  
*         RESET VALID FET PARAMETERS. 
  
 VFP2     LDD    MA          CM MESSAGE BUFFER
          ADN    2
          CRD    IN-1        *IN* AND *OUT* 
          ADN    1
          CRD    FT-1        *FIRST* AND *LIMIT*
          LDD    BS+3        CLEAR ERROR, LEVEL AND COMPLETION
          SCN    77 
          STD    BS+3 
          LDD    BS+4 
          LPC    776
          STD    BS+4 
          UJP    VFPX        RETURN 
  
  
  
  
**        COMMON DECKS. 
  
  
*CALL,COMPACS 
*CALL,COMPANS 
*CALL,COMPCIB 
*CALL,COMPCOB 
 PIR$     EQU    1           SELECT ASSEMBLY OF *PIR* FOR IAF R-REG 
*CALL,COMPSRR 
*CALL,COMPCRS 
*CALL,COMPRBB 
*CALL,COMPSPA 
*CALL,COMPSTA 
*CALL,COMPUPP 
*CALL,COMPWBB 
 HST      TITLE  FUNCTION REQUEST AND BUFFER STORAGE. 
**        PREVIOUS PP RECALL PARAMETER WORD.
*         IF *1MI* IS STARTED FROM THE RECALL STACK, THIS WORD WILL 
*         CONTAIN INFORMATION SAVED BY THE PREVIOUS COPY OF *1MI* 
*         IN THE FOLLOWING FORMAT - 
* 
*         1/S, 5/, 6/CP, 6/RC, 18/, 12/FP, 1/A, 1/, 4/IF, 3/, 3/RT
* 
*         S      SET BY *CPUMTR* TO SHOW *1MI* STARTED FROM RECALL. 
*         CP     UNUSED  (WARNING - SOMETIMES SET BY *CPUMTR*). 
*         RC     REASON CODE WHY *1MI* ENTERED RECALL.
*         FP     FIRST POT IN CHAIN PRIOR TO RECALL.
*         A      SET IF MONITOR FUNCTION REJECTED BECAUSE IAF ABORTED.
*         IF     *CIO* INTERNAL FUNCTION CODE (SEE *COMSCIO*).
*         RT     MONITOR FUNCTION REJECTION COUNT.
  
  
 RCRF     CON    0,0,0,0,0
  
  
  
**        NEW PP RECALL PARAMETER WORD. 
*         USED IF *1MI* MUST ENTER RECALL.  IT HAS THE SAME FORMAT AS 
*         THE PREVIOUS PP RECALL PARAMETER WORD.
  
  
 RCPW     CON    0,0,0,0,0
 HST      SPACE  4,10 
**        TIAF - TABLE OF *TSEM* FUNCTION REQUEST DEFINITIONS.
* 
*         ENTRY  FIVE WORDS.  CONTENTS VARY PER *TSEM* REQUEST. 
* 
*         WADO   - ASSIGN DIRECT OUTPUT TO IAF. 
* 
*T        12//REM/VADO, 6/0, 6/PC, 12/LP, 12/FP, 12/TN
* 
*         WADI   - ASSIGN DIRECT INPUT FROM IAF.
* 
*T,       12//REM/VADI, 36/0, 12/TN 
* 
*         WDPO   - IAF DROP POT MEMORY REQUEST. 
* 
*T,       12//REM/VDPO, 12/0, 12/LP, 12/FP, 12/TN 
* 
*         PC  = POT MEMORY CHAIN COUNT PER CURRENT REQUEST. 
*         FP  = FIRST POT MEMORY POINTER PER CURRENT REQUEST. 
*         LP  = LAST POT MEMORY POINTER PER CURRENT REQUEST.
*         TN  = TERMINAL CONNECTION NUMBER. 
  
  
 TIAF     BSS    0
  
 WADO     BSS    0           ASSIGN DIRECT OUTPUT 
 WADI     BSS    0           ASSIGN DIRECT INPUT
 WDPO     BSS    0           DROP POT MEMORY REQUEST
 WIAF     CON    0,0,0,0,0   *TSEM* FUNCTION REQUEST PARMAETERS 
  
  
  
  
*         DATA TRANSFER BUFFER OVERLAYS PRESET. 
  
  
          USE    BUFFERS
  
  
  
 BUFF     EQU    *
  
 BUFFL    EQU    /REM/VCPC*2*5
          ERRNG  100000-BUFF-BUFFL
  
  
  
  
  
 PRS      TITLE  *1MI* INITIALIZATION.
**        PRS - PRESET *1MI*. 
* 
*         ENTRY  (IR - IR+4)   = *1MI* CALL.
*                (MB - MB+4)   = *1MI* MESSAGE BUFFER PARAMETERS (*PPR*)
*                (MB1 - MB1+4) = MESSAGE BUFFER + 1 PARAMETERS. 
*                (MB2 - MB2+4) = MESSAGE BUFFER + 2 PARAMETERS. 
* 
*         EXIT   (FC)          = INTERNAL *CIO* FUNCTION CODE.
*                (BS - BS+4)   = BUFFER STATUS = (FET+0)
*                (FT - FT+1)   = BUFFER FIRST WORD ADDRESS. 
*                (IN - IN+1)   = BUFFER IN POINTER. 
*                (OT - OT+1)   = BUFFER OUT POINTER.
*                (LM - LM+1)   = BUFFER LAST WORD ADDRESS.
*                (TT - TT+1)   = TERMINAL TABLE ADDRESS.
*                (RCRF - RCRF+4) = PARAMETER WORD FROM PREVIOUS IAF.
*                TO *DPP* IF USER BREAK PROCESS WITH EXTENDED REPRIEVE. 
*                TO *ERS* IF IAF INACCESSIBLE TO ALLOW USER RECOVERY. 
* 
*         USES   CM - CM+4, CN - CN+4, FT-1 - FT+3, IN-1 - IN+3,
*                BS - BS+4, FC, NF, TN, T0. 
* 
*         CALLS  CFN, CJA, CTT, ITA, REC, ROJ, STA. 
* 
*         MACROS CFET, ERROR, SFA.
  
  
 PRS      SUBR               ENTRY/EXIT 
  
*         MOVE PP RECALL PARAMETER WORDS TO LOCATIONS WHICH ARE NOT 
*         DESTROYED BY COMMON DECKS.
  
          LDD    MA          RESET FET PARAMETERS IN MESSAGE BUFFER 
          CWD    MB 
          ADN    1           PRESET BUFFER POINTERS 
          CWD    MB1
          CRD    IN-1        *IN* AND *OUT* 
          ADN    1
          CWD    MB2
          CRD    FT-1        *FIRST* AND *LIMIT*
          LDD    MB+4        INTERNAL *CIO* FUNCTION CODE 
          LPC    1700 
          STM    RCPW+4      SAVE IN CASE *1MI* GOES INTO RECALL
          SHN    -6 
          STD    FC 
          CFET               READ FET+0 
          CRD    BS 
          LDD    MB 
          SHN    21-13
          PJN    PRS1        IF INITIAL *1MI* CALL
          LDD    MA 
          CRM    RCRF,ON     READ IN PREVIOUS RECALL PARAMETER WORD 
          RJM    REC         RECOVER *TSEM* REJECT
 PRS1     RJM    CTT         CHECK TERMINAL I/O INTERLOCK 
          LDD    CP 
          ADK    TFSW 
          CRD    CM 
          LDD    CM 
          ZJN    PRS2        IF NO EJT ORDINAL
          SFA    EJT
          ADK    JSNE        CHECK JOB CONNECTION STATUS
          CRD    CM 
          LDD    CM+4 
          SHN    -7 
          LPN    17 
          STM    PRSA 
          LMK    NICS 
          ZJN    PRS2        IF NON-INTERACTIVE 
          RJM    CEF
          ZJN    PRS6        IF NO ERROR FLAG ON JOB
          LDD    FC          *1MI* FUNCTION CODE
          LMK    /CIO/WTF 
          ZJN    PRS6        IF A WRITE FUNCTION
          LDD    CM+2 
          NJN    PRS3        IF USER BREAK AND EXTENDED REPRIEVE
          LDD    BS+4        SET EOR STATUS 
          LPC    6002 
          LMN    20 
          STD    BS+4 
 PRS2     RJM    CFN         COMPLETE FUNCTION
 PRS3     LJM    DPP         DROP PP
  
 PRS6     RJM    ITA
          ZJN    PRS7        IF IAF NOT AVAILABLE 
          LDC    0           CHECK CONNECTION STATUS
 PRSA     EQU    *-1
          LMK    DTCS 
          NJN    PRS9        IF NOT DETACHED
  
*         A DETACHED JOB IS EITHER SUSPENDED OR TERMINATED BASED ON ITS 
*         END-OF-JOB OPTIONS. 
  
          LDD    CP          CHECK END-OF-JOB TERMINATION OPTIONS 
          ADN    EOJW 
          CRD    CM 
          LDD    CM 
          SHN    0-11        ISOLATE JOB TERMINATION OPTION 
          LMN    SUJT 
          ZJN    PRS7        IF DETACHED JOB IS TO BE SUSPENDED 
          ERROR  IRQ         *INCORRECT I/O REQUEST ON FILE*
  
 PRS7     LDK    IAFF 
          RAM    RCPW+4 
          LDK    ROSU        SUSPEND USER JOB 
 PRS8     STD    T0 
          RJM    ROJ         ROLL USER JOB
          LDK    TALR        TERMINAL I/O BUSY RECALL CODE
          LJM    ERS         ENTER RECALL STACK 
  
*         CONTINUE PROCESS FOR ONLINE CONNECTIONS ONLY. 
  
 PRS9     LDD    CP 
          ADN    TTNW        TERMINAL TABLE POINTER 
          CRD    CM 
          LDD    CM+1 
          STD    TN 
          RJM    SRR         SET R-REGISTER TO IAF RA 
          RJM    STA         SET TERMINAL TABLE ADDRESS (TT - TT+1) 
  
*         ROLL A USER OUT DURING LOGIN PROCESSING AND DURING DETACH 
*         PROCESSING IF THE TERMINAL TABLE IS NOT COMPLETELY SET UP.
*         THIS AVOIDS *VADO* AND *VADI* *TSEM* REQUESTS BEING SENT TO 
*         *IAF* BEFORE THE USER IS COMPLETELY LOGGED IN.
  
          ADK    /REM/VDCT   CHECK IF USER FINISHED LOGGING IN
          CRD    CM 
          ADK    /REM/VSTT-/REM/VDCT
          CRD    CN          READ *VSTT*
          RJM    RRR         RESTORE R-REGISTER 
          LDD    CM 
          SHN    21-11
          PJN    PRS9.1      IF USER NOT COMPLETELY LOGGED IN 
          LDD    CN          CHECK FOR DETACH IN PROGRESS 
          SHN    21-10
          PJN    PRS10       IF DETACH NOT IN PROGRESS
 PRS9.1   LDK    ROSR 
          UJP    PRS8        ROLLOUT USER JOB UNTIL COMPLETE RECOVERY 
  
 PRS10    LDD    CP          GET NEGATIVE FIELD LENGTH
          ADN    FLSW 
          CRD    CM 
          LDD    CM 
          STD    NF          NFL/100B 
          UJP    PRSX        RETURN 
 CTT      SPACE  4,10 
**        CTT - CHECK TIOW/TINW BUSY. 
* 
*         *CTT* CHECKS THE *TINW/TIOW* INTERLOCK FLAG FROM *CPUMTR* TO
*         DETERMINE WHETHER OR NOT THIS COPY OF *1MI* HAS THE TERMINAL
*         I/O INTERLOCK.  IF NOT, *CTT* ATTEMPTS TO GET THE INTERLOCK 
*         VIA A *UTEM* FUNCTION.  IF UNSUCCESSFUL, *1MI* MUST GO INTO 
*         RECALL AND TRY TO OBTAIN THE INTERLOCK AT A LATER TIME. 
* 
*         ENTRY  (IR+2) = TIOW/TINW BUSY FLAG FROM *CPUMTR*.
* 
*         EXIT   IF RECALL NECESSARY, TO *ERS*. 
* 
*         USES   CM - CM+4, IR+2. 
* 
*         MACROS MONITOR. 
  
  
 CTT4     LDD    IR+2        CLEAR FLAG FROM INPUT REGISTER 
          LMK    TTB
          STD    IR+2 
          LDD    IA          REWRITE INPUT REGISTER 
          CWD    IR 
  
 CTT      SUBR               ENTRY/EXIT 
          LDD    IR+2        CHECK FLAG FROM *CPUMTR* 
          LPK    TTB
          ZJN    CTTX        IF TIOW/TINW GOES WITH THIS PP 
          LDK    ZERL        TEST AND SET TIOW/TINW 
          CRD    CM 
          LDD    CP          SET WORD ADDRESS 
          ADK    TIOW 
          STD    CM+4 
          ERRNG  TINW-TIOW   CODE DEPENDS ON ORDER OF WORDS 
          LDN    3           TEST TWO FIELDS, SET ONE 
          STD    CM+1 
          LDD    FC 
          LMK    /CIO/WTF 
          ZJN    CTT1        IF WRITE FUNCTION
          LDC    18D*100B    SET TINW ADDRESS OFFSET AND FIELD
          RAM    CTTB+1 
          LDK    TINW-TIOW   SET TINW FIELD 
          SHN    6
          RAM    CTTB 
 CTT1     LDD    IR+4        MOVE FET ADDRESS 
          STM    CTTB+4 
          LDD    IR+3 
          LPN    77 
          STM    CTTB+3 
          LDD    MA 
          CWM    CTTA,TR
          MONITOR  UTEM 
          LDD    CM+1 
          ZJP    CTT4        IF TEST AND SET SUCCESSFUL 
          RJM    CEF
          LDD    CM+2 
          NJN    CTT2        IF USER BREAK WITH EXTENDED REPRIEVE 
  
*         ENTER RECALL WITH TIOW/TINW BUSY FLAG STILL SET IN THE INPUT
*         REGISTER, SO THAT WHEN *1MI* IS RESTARTED IT WILL 
*         AGAIN ATTEMPT TO GET THE *TIOW/TINW* INTERLOCK. 
  
          LDK    TALR 
          LJM    ERS         ENTER RECALL STACK 
  
*         IF BOTH A USER BREAK ERROR FLAG IS PRESENT AND EXTENDED 
*         REPRIEVE HAS BEEN SELECTED BY THE JOB, *1MI* CANNOT WAIT
*         FOR THE TERMINAL I/O INTERLOCK TO BECOME AVAILABLE.  THIS IS
*         BECAUSE THE PP WITH THE INTERLOCK MAY BE A READ REQUEST, IN 
*         WHICH CASE IT WILL DROP WITHOUT CLEARING *TINW*.
*         IF A WRITE REQUEST, *1MI* WILL COMPLETE THE FET AND DROP. 
*         IF A READ REQUEST, *1MI* WILL ATTEMPT TO SET *TINW* BEFORE
*         DROPPING SO THAT *1AJ* KNOWS THAT AN INPUT REQUEST IS 
*         OUTSTANDING.
  
 CTT2     LDD    FC 
          LMK    /CIO/WTF 
          ZJN    CTT3        IF WRITE FUNCTION
          LDK    ZERL 
          CRD    CM 
          LDD    CP 
          ADK    TIOW 
          STD    CM+4 
          LDN    2
          STD    CM+1 
          LDD    MA 
          CWM    CTTA+5,CM+1
          MONITOR  UTEM 
          LJM    DPP         DROP PP
  
 CTT3     LDD    BS+4        COMPLETE FET 
          SCN    1
          LMN    1
          STD    BS+4 
          CFET               REWRITE FIRST WORD OF FET
          CWD    BS 
          LJM    DPP         DROP PP
  
  
 CTTA     VFD    1/1,5/0,6/18D,6/0,42/0  VERIFY 0 CLEAR 
          VFD    1/1,5/TINW-TIOW,6/18D,6/18D,42/0  VERIFY TINW CLEAR
 CTTB     VFD    1/0,5/0,6/18D,6/0,42/0  SET NEW FET ADDRESS
 REC      SPACE  4,10 
**        REC - RECOVER FROM MONITOR REJECTION. 
* 
*         ENTRY  (RCRF+1) = RECALL REASON CODE. 
*                (RCRF+3) = FIRST POT CHAIN POINTER.
*                (FC)    = INITIAL *1MI* FUNCTION CODE. 
* 
*         EXIT   TO *DPP* IF *TINW/TIOW* INTERLOCK NO LONGER HELD.
*                ANY POTS FROM A PREVIOUSLY REJECTED MONITOR FUNCTION 
*                ARE DROPPED. 
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  MRJ. 
* 
*         MACROS MONITOR. 
  
  
 REC      SUBR               ENTRY/EXIT 
          LDM    RCRF+1      GET REJECTED FUNCTION
          SHN    -6 
          LMK    TDOR 
          ZJN    REC2        IF *VADO* REJECTION
          LMK    TPOR&TDOR
          NJP    RECX        IF NOT *VDPO* REJECTION
          AOM    RECA 
  
*         DROP PREVIOUS FUNCTION-S POTS UNLESS THE FUNCTION WAS 
*         REJECTED BECAUSE IAF WAS NOT AVAILABLE. 
  
 REC2     LDM    RCRF+4 
          LPK    IAFF 
          NJN    REC3        IF NEW COPY OF IAF 
          LDK    ZERL        BUILD *VDPO* *TSEM* REQUEST
          CRD    CN 
          LDK    /REM/VDPO
          STD    CN 
          LDM    RCRF+3      SET POT NUMBER OF FIRST POT IN CHAIN 
          STD    CN+3 
          LDD    CP          SET TERMINAL NUMBER
          ADK    TTNW 
          CRD    CM 
          LDD    CM+1 
          STD    CN+4 
          LDN    ZERL 
          CRD    CM 
          LDD    MA 
          CWD    CN          REWRITE REJECTED REQUEST 
          CRM    WIAF,ON     PRESET POSSIBLE FUNCTION REJECTION 
          MONITOR TSEM
          LDM    RCRF+1 
          SHN    -6 
          RJM    MRJ
 REC3     LDN    0
*         LDN    1
 RECA     EQU    *-1
          ZJP    RECX        IF INTERLOCK STILL HELD
          LJM    DPP         DROP PP
  
  
  
**        COMMON DECKS NECESSARY FOR PRESET.
  
*CALL,COMPGFP 
  
  
  
  
  
          ERRNG  7777-*+1    AVOID PPU MEMORY WRAP
          END 
