IAFEX 
*IF DEF,IAF$
          IDENT  IAFEX,/IAFINI/FWA
*ELSE 
          IDENT  RDFEX,/IAFINI/FWA
*ENDIF
          ABS 
          SST    JCTT 
*IF DEF,IAF$
          ENTRY  IAFEX
*ELSE 
          ENTRY  RDFEX
*ENDIF
          ENTRY  RFL= 
          ENTRY  SSJ= 
          SYSCOM  B1
          BASE   DECIMAL
 IAFEX    TITLE  IAFEX - IAF EXECUTIVE INITIALIZATION.
*COMMENT  IAFEX - EXECUTIVE INITIALIZATION. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 IAFEX    SPACE  4,10 
***       IAFEX - IAF EXECUTIVE INITIALIZATION. 
* 
*         R.E. TATE          70/12/20.
*         M.H. DILATUSH.     73/01/20.
*         P.D. FARRELL.      77/03/17.
          SPACE  4,10 
***              THE IAFEX INITIALIZATION OVERLAY PERFORMS THE
*         FOLLOWING FUNCTIONS:  
* 
*         (1)    LOADS THE EXECUTIVE OVERLAY. 
*         (2)    LOADS THE NETWORK INTERFACE OVERLAY AND LOADS
*                AND LINKS THE NETWORK AIP IF NETWORK TERMINALS 
*                ARE DEFINED IN THE NETWORK DESCRIPTION FILE. 
*         (3)    INITIALIZES TABLES AND POINTERS. 
*         (4)    STARTS THE EXECUTIVE PROCESSOR.
          SPACE  4,10 
***       THE COMMAND FORMAT. 
* 
*         IAFEX,OP=XX.
* 
*         THE POSSIBLE MNEMONICS FOR *OP* ARE AS FOLLOWS. 
* 
*         OP     DESCRIPTION
*         --     -----------
*         T      AIP TRACE PARAMETER. 
*                THE *T* PARAMETER IS USED FOR SELECTION OF THE AIP 
*                TRACE.  THE VALUE OF THE MESSAGE COUNT 
*                ASSIGNED TO THE *T* PARAMETER INDICATES IF THE 
*                TRACE IS SELECTED OR NOT.  IF THE TRACE IS 
*                SELECTED, THEN THE MESSAGE COUNT INDICATES HOW 
*                MANY MESSAGES WILL BE LOGGED BEFORE THE
*                TRACE FILE IS PROCESSED FOR OUTPUT.
*                T OMITTED   TRACE IS NOT SELECTED
*                T           USE DEFAULT MESSAGE COUNT OF 16200 
*                T=0         TRACE IS NOT SELECTED
*                T=NNNNNNN   USE NNNNNNN AS MESSAGE COUNT 
*                            VALID RANGE IS 5000 TO 9999999 
*                T=*         PROCESS TRACE FILE ONLY AT IAF TERMINATION 
 IAFEX    SPACE  4
***       OPERATOR MESSAGES.
* 
*         NONE. 
          SPACE  4,10 
***       ERROR MESSAGES. 
* 
*         * IAFEX INITIALIZATION ABORT.*
*                AN ERROR CONDITION HAS BEEN ENCOUNTERED WHICH MAKES
*                INITIALIZATION IMPOSSIBLE.  THE ERROR CONDITION IS 
*                GIVEN BY ONE OF THE MESSAGES LISTED BELOW: 
* 
*         * AIP LOAD ERROR.*
*                A LOADER ERROR WAS RETURNED WHILE ATTEMPTING 
*                TO LOAD THE NETWORK AIP RELOCATABLE SUBROUTINES. 
* 
*         * DRIVER STACK OVERFLOW.* 
*                SEE * POT LINK TABLE OVERFLOW.*
* 
*         * ERROR IN IAFEX ARGUMENTS.*
*                AN ERROR WAS ENCOUNTERED WHEN PROCESSING THE *IAFEX* 
*                COMMAND.  CORRECT THE ERROR AND RETRY. 
* 
*         * ERROR IN IAFEX PARAMETER - T.*
*                THE VALUE ASSIGNED TO THE *T* PARAMETER WAS NOT VALID. 
*                CORRECT THE ERROR AND RETRY. 
* 
*         * MESSAGE STATUS TABLE OVERFLOW.* 
*                SEE * POT LINK TABLE OVERFLOW.*
* 
*         * MUX TABLE OVERFLOW.*
*                A TOTAL OF MORE THAN EIGHT MULTIPLEXORS AND
*                NETWORK INTERFACES WAS DEFINED.
* 
*         * NETWORK ACTIVITY TABLE OVERFLOW.* 
*                SEE * POT LINK TABLE OVERFLOW.*
* 
*         * NO TERMINALS DEFINED.*
*                NO TERMINALS, EITHER MULTIPLEXOR OR NETWORK, 
*                ARE PRESENT IN THE EST OR NETWORK FILE.
* 
*         * MISSING AIP ENTRY POINT.* 
*                NO ENTRY POINT WAS RETURNED BY THE LOADER
*                FOR A REQUIRED AIP RELOCATABLE SUBROUTINE. 
* 
*         * NO ACTIVE DRIVERS REMAINING. *
*                ALL AVAILABLE DRIVERS, NETWORK AND MULTIPLEXOR, HAVE 
*                DROPPED.  THIS CAN BE BECAUSE OF A HARDWARE FAILURE
*                OR BECAUSE A DRIVER NEVER BECOMES ACTIVE AFTER 
*                INITIALIZATION AND THE OTHER DRIVERS DO NOT HAVE 
*                TERMINALS DEFINED (NONEXISTENT OR OFF EST ENTRY).
* 
*         * POT LINK TABLE OVERFLOW.* 
*                THE POT LINK TABLE OVERFLOWED AVAILABLE MEMORY.
*                THIS INDICATES THAT THE ORIGIN ADDRESS OF THE
*                INITIALIZER DOES NOT PROVIDE SUFFICIENT ROOM 
*                FOR IAFEX TABLES AND THAT THE INITIALIZER MUST 
*                BE ORIGINED HIGHER IN CORE.  THIS WILL REQUIRE 
*                A CORRESPONDING CHANGE TO *1TD* TO REQUEST 
*                SUFFICIENT FIELD LENGTH FOR THE INITIALIZER. 
* 
*         * REENTRY TABLE OVERFLOW.*
*                SEE * POT LINK TABLE OVERFLOW.*
* 
*         * TERMINAL TABLE OVERFLOW.* 
*                SEE * POT LINK TABLE OVERFLOW.*
* 
*         * TOO MANY TERMINALS.*
*                THE TOTAL NUMBER OF TERMINALS DEFINED IN THE 
*                EST AND ON THE NETWORK DESCRIPTION FILE EXCEEDS
*                THE MAXIMUM DEFINED BY THE ASSEMBLY VARIABLE *MAXTT*.
* 
*         * **** LOST OUTPUT MESSAGE.*
*                IAF RECEIVED MORE THAN 77B OUTPUT POTS FROM *1MI*, 
*                SO THE LAST MESSAGE WAS THROWN AWAY.  **** IS THE
*                JSN OF THE JOB THAT LOST THE OUTPUT MESSAGE. 
          SPACE  4
***       SENSE SWITCH OPTIONS. 
* 
*         THE FOLLOWING OPTIONS ARE SELECTED IF THE CORRES- 
*         PONDING SENSE SWITCH IS SET *ON*. 
* 
*         SSW1   RETAIN USERS IN EJT (DETACHED) IF IAFEX IS DROP- 
*                PED OR ABORTS.  THIS WILL RETAIN USERS ACROSS
*                A RECOVERY DEADSTART.
* 
*         SSW2   DO NOT RELOAD AFTER AN ABORT.  RELEASE OUTPUT FILE 
*                TO OUTPUT QUEUE. 
* 
*         SSW3   ABORT ON ABNORMAL CONDITIONS.  THIS WILL 
*                FORCE AN INTERNALLY GENERATED ABORT WHEN AN
*                INTERNAL ERROR SITUATION OCCURRS.  A DAYFILE 
*                MESSAGE WILL BE ISSUED GIVING THE NAME OF THE
*                SUBROUTINE BY WHICH THE ERROR WAS DETECTED.
*                THIS SWITCH IS SET AUTOMATICALLY DURING INI- 
*                TIALIZATION AND SHOULD BE CLEARED IF ABORT 
*                IS NOT DESIRED.
* 
*         SSW4   DUMP FIELD LENGTH TO THE OUTPUT FILE AFTER 
*                OPERATOR DROP. 
* 
*         SSW5   DUMP FIELD LENGTH TO THE OUTPUT FILE AFTER AN
*                 INTERNAL ABORT ON ABNORMAL CONDITIONS.  THE 
*                OUTPUT FILE WILL NOT BE RELEASED TO THE OUT- 
*                PUT QUEUE UNTIL AFTER IAFEX TERMINATION UN-
*                LESS SENSE SWITCH 6 IS SET.
* 
*         SSW6   RELEASE THE DUMP OUTPUT FILE TO THE OUT- 
*                PUT QUEUE IMMEDIATELY AFTER A DROP OR AN ABORT.
 IAFEX    SPACE  4
**        PROGRAMS CALLED BY INITIALIZER: 
* 
*         CIO - CIRCULAR INPUT/OUTPUT.
*         CPM - CONTROL POINT MANAGER.
*         LDR - LOAD OVERLAY. 
*         1MA - ISSUE DAYFILE MESSAGE.
*         1TM AND 1TN - MUX TERMINAL DRIVERS. 
          TITLE  INTERNAL DOCUMENTATION.
 QUAL     SPACE  4,10 
**        IAFEX INTERNAL DOCUMENTATION. 
* 
* 
 QUAL     SPACE  4,10 
**        DEFINE IAFEX QUALIFICATION SEQUENCE.
  
  
          QUAL
          QUAL   IAFINI 
          QUAL   IAFEX2 
          QUAL   IAFEX3 
          QUAL   IAFEX4 
          QUAL
          SPACE  4
**        TABLES. 
* 
*         IN GENERAL ALL TABLES IN *IAFEX* WILL BE DYNAMIC IN LENGTH
*         AT INITIALIZATION TIME.  THE LENGTHS OF THE VARIOUS TABLES
*         WILL BE DETERMINED BY THE MAXIMUM NUMBER OF TERMINALS 
*         TO BE SERVICED.  THUS, IT WILL BE NECESARY FOR ALL ROUTINES 
*         AT INITIALIZATION TIME TO DETERMINE THE VALUES OF TABLE 
*         POINTERS ETC.  ONCE *IAFEX* IS INITIALIZED, THE LENGTHS OF
*         TABLES WILL NOT CHANGE.  THUS, POINTERS SUCH AS FIRST AND 
*         LIMIT COULD BE READ AND SAVED BY PROGRAMS THAT ARE TIME 
*         CRITICAL.  THESE POINTERS COULD ALSO BE SAVED AS ABSOLUTE 
*         ADDRESSES BECAUSE IAFEX WILL NEVER PAUSE FOR
*         STORAGE MOVE.  IT WILL NOT BE POSSIBLE TO INCREASE THE
*         LENGTH OF *CMR* WHILE IAFEX IS IN OPERATION 
 IAFEX    SPACE  4
**        TERMINAL TABLE. 
* 
*         THE *TERMINAL TABLE* CONTAINS A GROUP OF WORDS FOR EACH 
*         POSSIBLE ACTIVE USER.  THESE WORDS CONTAIN ALL OF THE VITAL 
*         INFORMATION ABOUT THE PARTICULAR USER THAT IS CURRENTLY 
*         LOGGED IN ON A GIVEN CONNECTION.  THE ENTRIES ARE FORMATTED 
*         SUCH A WAY THAT THE AMOUNT OF INTERLOCKS NEEDED BETWEEN THE 
*         VARIOUS ROUTINES IS KEPT AT A MINIMUM.  THE ENTRIES ARE ALSO
*         FORMATTED IN SUCH A WAY THAT THE VARIOUS ROUTINES WHO HAVE
*         TO READ AND WRITE THIS TABLE ARE ABLE TO ACCESS A MINIMUM 
*         NUMBER OF CM WORDS. 
* 
* 
*         THE FORMAT OF AN ENTRY IN THE TERMINAL TABLE AND THE
*         RELATED INFORMATION CAN BE FOUND IN COMSREM.
 IAFEX    SPACE  4
**        CIRCULAR COMMAND STACKS.
* 
*         THE TTY DRIVER(S) WILL INTERFACE THROUGH
*         THE USE OF CIRCULAR COMMAND STACK(S). THE PARAMETERS FOR
*         THESE STACKS WILL BE SIMILAR TO THOSE IN A FET (I.E. THE
*         POINTER FOR A CIRCULAR STACK WILL POINT TO AN AREA AS 
*         FOLLOWS)
* 
*         WORD 1 HEADER WORD (CONTAINS NAME OF CIRCULAR STACK AND 
*         A POINTER TO THE NEXT STACK.  THE LAST STACK IN THE CHAIN 
*         HAS A ZERO POINTER.)
*         WORD 2 FIRST
*         WORD 3 IN 
*         WORD 4 OUT
*         WORD 5 LIMIT
* 
*         THE FORMAT OF A STACK ENTRY IS
* 
*T        12/ 20XX,24/  X7,12/ B3,12/ B2
*                XX = REQUEST CODE (QUAL TLX).
*                X7 = (X7). 
*                B3 = POT POINTER, (B3).
*                B2 = TERMINAL NUMBER, (B2).
* 
*         THESE STACKS WILL BE PROCESSED FULL CIRCULAR BY *IAFEX*.
*         THE UTILIZATION OF COMMAND STACKS LESSENS THE AMOUNT OF 
*         TIME THAT *IAFEX* HAS TO SPEND DETERMINING WHAT OPERATIONS
*         ARE TO BE PERFORMED.
 VDRL     SPACE  4,10 
**        VDRL - DRIVER STATUS WORD TABLE.
* 
*         THE DRIVER STATUS WORDS BEGIN AT LOCATION *VDRL* (DE- 
*         FINED IN COMMON DECK *COMSREM*).  EACH DRIVER, INCLUD-
*         ING THE NETWORK INTERFACE, HAS AN ENTRY IN THIS TABLE.
*         THE TABLE IS TERMINATED BY A NEGATIVE WORD.  THE WORDS
*         ARE USED DURING INITIALIZATION TO PASS INFORMATION BACK 
*         AND FORTH BETWEEN THE EXECUTIVE AND THE PPU DRIVER(S) 
*         AND TO SIGNAL DRIVER FAILURE AFTER INITIALIZATION.
* 
*      1. INITIAL CONDITIONS.  PPU DRIVER SETS INTERLOCK PRIOR TO 
*         STARTUP OF CPU CONTROL CARD PROCESSING: 
* 
*            12/ IL, 48/ 0. 
*                IL = POSITIVE NONZERO. 
* 
*      2. EXECUTIVE INDICATES STARTUP BY CLEARING INTERLOCK AND 
*         SETTING THE DRIVER NAME IN EACH DRIVER STATUS WORD. 
* 
*            12/ 0, 24/ DN, 24/ 0.
*                DN = DRIVER NAME.
* 
*      3. DRIVER(S) REPLY WITH TERMINAL COUNT, CM CONVERSION AND
*         ID TABLE LENGTH:  
* 
*            12/ IL, 24/ DN, 12/ TC, 12/ CL.
*                IL = POSITIVE NONZERO. 
*                DN = DRIVER NAME.
*                TC = TERMINAL COUNT. 
*                CL = CM CONVERSION AND ID TABLE LENGTH.
* 
*         NOTE - IF THERE ARE NO TERMINALS DEFINED FOR THIS MUX 
*         DRIVER, BOTH *TC* AND *CL* ARE SET TO ZERO AND THE
*         DRIVER WILL DROP AT THIS POINT. 
* 
*      4. EXECUTIVE REPLIES WITH DRIVER POINTERS TO START DRIVER: 
* 
*            12/0, 24/ SA, 12/ TC, 12/ FT.
*                SA = DRIVER CIRCULAR STACK ADDRESS.
*                TC = TERMINAL COUNT. 
*                FT = FIRST TERMINAL NUMBER.
* 
*         NOTE - IF THE DRIVER HAS NO TERMINALS DEFINED (AS IN
*         NOTE 3) THIS WORD IS SIMPLY CLEARED.
* 
*      5. IF DRIVER SUBSEQUENTLY DROPS, DRIVER INDICATES
*         FAILURE BY SETTING THE INTERLOCK PRIOR TO DROPPING: 
* 
*            11/ 0, 1/ 1, 48/ (AS ABOVE). 
* 
*      6. ALL USERS ACTIVE ON THE FAILED DRIVER WILL BE LOGGED
*         OFF IN A RECOVERABLE STATE.  WHEN ALL USERS ARE LOG-
*         GED OFF, BIT 49 WILL BE SET TO INDICATE THAT THE
*         DRIVER IS LOGICALLY *OFF*:  
* 
*            12/ 3, 48/ (AS ABOVE). 
* 
*      7. IF THE DRIVER SHOULD RECOVER, THE DRIVER INDICATES
*         ITS RESURRECTION BY CLEARING BYTE ZERO AFTER BIT 49 
*         HAS BEEN SET: 
* 
*            12/ 0, 48/ (AS ABOVE). 
*                SA = DRIVER CIRCULAR STACK ADDRESS.
*                TC = TERMINAL COUNT. 
*                FT = FIRST TERMINAL NUMBER.
          SPACE  4,20 
*         EXECUTIVE - DRIVER INTERLOCKS.
* 
*         IN ORDER FOR THE IAF EXECUTIVE AND THE MUX DRIVERS TO STAY IN 
*         SYNC, THE FOLLOWING STEPS ARE FOLLOWED WHEN A COMMAND LINE IS 
*         ENTERED.
* 
* 
*         1)     DRIVER ISSUES *CLI* REQUEST TO EXECUTIVE.
* 
*         2)     DRIVER WILL NOW IGNORE INPUT UNTIL A POT 
*         IS GIVEN BACK BY IAFEX. 
* 
*         3)     THUS, THE DRIVER CANNOT GIVE DATA TO THE EXECUTIVE 
*                UNTIL IAFEX IS READY FOR IT. 
* 
*         4)     THIS ALLOWS IAFEX TO MAKE ANY MODE CHANGES SUCH AS 
*         DATA AND COMMAND MODE BEFORE GIVING THE DRIVER A POT SO THAT
*         ADDITIONAL COMMANDS SUCH AS *STOP* MAY BE ENTERED.
* 
* 
*         THIS INTERLOCK AS WELL AS THE ONE DESCRIBED IN THE
*         DESCRIPTION OF THE *VDCT* WORD ARE THE PRIME METHODS OF 
*         INTERLOCKING. 
          SPACE  4,10 
**        OUTPUT MESSAGES.
* 
*         PPUS MAY ASSIGN OUTPUT MESSAGE POTS BY MEANS OF 
*         MONITOR *TSEM/VASO* FUNCTION REQUESTS.  REFER TO
*         THE *TSEM* DOCUMENTATION IN *COMSREM* FOR A DESCRIPTION 
*         OF THIS REQUEST.
* 
* 
*         *NOS* FORMAT MESSAGES.
* 
*         *NOS* FORMAT MESSAGES ARE MESSAGES EMPLOYING NOS
*         TIME SHARING 6-BIT, 6/12-BIT, OR 12-BIT TERMINAL
*         BINARY FORMATS.   REFER TO THE NOS TIME SHARING US- 
*         ERS REFERENCE MANUAL FOR A DESCRIPTION OF NOS FOR-
*         MAT MESSAGES. 
* 
* 
*         *NAM* FORMAT MESSAGES.
* 
*         *NAM* FORMAT MESSAGES ARE MESSAGES CONSTRUCTED AS 
*         NETWORK FORMAT MESSAGE BLOCKS.  REFER TO THE NETWORK
*         R4 EXTERNAL REFERENCE SPECIFICATIONS FOR A DESCRIP- 
*         TION OF NAM FORMAT MESSAGES.
* 
*         PROGRAMS USING NETWORK FORMAT MESSAGES SHOULD ALWAYS
*         SET THE *ADR* FIELD OF THE HEADER TO ZERO UNLESS IT 
*         IS DESIRED TO TAKE ADVANTAGE OF THE IMBEDDED REQUEST
*         CAPABILITIES ALLOWED BY THE NETWORK INTERACTIVE EXEC- 
*         UTIVE.  THE PROPER ADR FIELD WILL BE SET BY THE EXEC- 
*         UTIVE PRIOR TO TRANSMISSION TO THE NETWORK.  AS LONG
*         AS THE ADR FIELD IS ZERO, THE ABN WILL BE TRANSMITTED 
*         AS-IS, ALLOWING THE USER TO PRESET THE ABN FIELD. 
* 
*         IF THE UPPER 6 BITS OF THE STANDARD ADR FIELD ARE NON-
*         ZERO, IT INDICATES THAT THE COMBINED ADR AND ABN
*         FIELDS OF THE HEADER CONTAIN AN IMBEDDED FUNCTION 
*         REQUEST.  USING THIS FORMAT, THE HEADER IS FORMATTED
*         AS FOLLOWS: 
* 
*T,       6/ABT, 6/FC, 12/P1, 12/P2, 4/ACT, 8/BITS, 12/TLC. 
* 
*                FC  = IMBEDDED FUNCTION REQUEST IF NONZERO-
*                    = 4 - LOGOFF USER. 
*                    = 5 - REQUEST TRANSPARENT INPUT. 
*                    = 6 - REQUEST BINARY INPUT.
*                    = 16 - SEND DOWNLINE TERMINAL DEFINITIONS. 
*                P1  = BINARY INPUT CHARACTER COUNT.
*                P2  = BINARY INPUT TERMINATION CHARACTER.
*                ABT = APPLICATION BLOCK TYPE.
*                ACT = APPLICATION CHARACTER TYPE.
*                BITS = REFER TO NAM ERS. 
*                TLC = TEXT LENGTH IN UNITS SPECIFIED BY *ACT*. 
 IAFEX    SPACE  4
**        *IAFEX* REENTRY TABLE.
*         THE *IAFEX* REENTRY TABLE ALLOWS ROUTINES TO BE ABLE
*         TO GET CONTROL RETURNED TO THEM OR FUNCTIONS PERFORMED
*         FOR THEM WHEN A SET OF CONDITIONS HAVE BEEN MET.
* 
*         THE REENTRY TABLE CONSISTS OF ONE WORD FOR EACH TERMINAL
*         WHICH MAY CONTAIN ONE OF THE FOLLOWING
* 
*         1.)    0000 0000 0000 0000 0000 - NO REENTRY CONDITIONS.
* 
*         2.)    2YYY XXXX XXXX PPPP NNNN - WHERE 
*                YYY = INDEX TO TRRT (TABLE OF REENTRY PROCESSORS). 
*                XXXX XXXX = ANYTHING.
*                PPPP = POT POINTER.
*                NNNN = LINK TO NEXT ENTRY OF THIS TYPE IN THE QUEUE. 
*                SEE TSR. 
* 
*         3.)    0000 0000 00PP PPNN NNNN - WHERE 
*                NNNNNN = POT ADDRESS OF STACKED ENTRIES
*                PPPP = POT POINTER TO STACKED ENTRIES. 
          TITLE  ERROR MESSAGES.
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         *IAFEX ABNORMAL - XXX   NNN.* 
*                AN ERROR CONDITION HAS BEEN DETECTED BY ROUTINE
*                *XXX* DURING THE PROCESSING OF TERMINAL *NNN*. 
*                *NNN* IS THE POT LINK TABLE ADDRESS FOR *SPR*. 
*                REFER TO THE DESCRIPTIONS OF THE VARIOUS ERROR 
*                CODES *XXX* FOR THE DESCRIPTIONS OF THESE
*                ERROR CONDITONS. 
* 
*         * PLT INCREASE NOT POSSIBLE.* 
*                THE POT LINK TABLE IS AT ITS MAXIMUM POSSIBLE LENGTH 
*                WHEN MORE ENTRIES WERE REQUESTED DUE TO CURRENT
*                ACTIVITY.  A TEMPORARY SLOWDOWN IN RESPONSE TIME 
*                MAY BE NOTICED BY TERMINAL USERS.  IF THIS MESSAGE 
*                IS SEEN OFTEN, INFORM SITE ANALYST.
* 
*         *BLOCK LOST - NNNN* 
*                *IAFEX* HAS RECEIVED A *NAK* SUPERVISORY MESSAGE 
*                FOR ACN *NNNN* INDICATING THAT A DOWNSTREAM DATA 
*                BLOCK HAS BEEN LOST. 
* 
*         *LOGICAL ERROR XX.* 
*                LOGICAL ERROR XX HAS OCCURRED.  FOR INSTANCE,
*                A MESSAGE IS SENT TO A NON CONNECTED TERMINAL. 
*                THIS CAN HAPPEN LEGALLY IF A MESSAGE IS OUTPUT 
*                AND THE USER HANGS UP THE PHONE AT THE SAME
*                TIME.
* 
*         *INCORRECTLY FORMATTED DATA - NNN.* 
*                *NAM* HAS SENT *IAFEX* A *BREAK* CONDITION MESSAGE 
*                ON ACN *NNN* INDICATING THAT AN INCORRECTLY FORMATTED
*                MESSAGE HAS BEEN SENT BY *IAFEX* TO THAT ACN.
* 
*         *SMP INCORRECT SM = AABB, ACN =   NNNN.*
*                AN INCORRECT OR UNRECOGNIZABLE SUPERVISORY MESSAGE,
*                PRIMARY FUNCTION CODE *AA* AND SECONDARY FUNCTION
*                *BB*, HAS BEEN RECEIVED FOR ACN *NNNN*.  THE FUNCTION
*                CODE VALUES GIVEN ARE IN HEXADECIMAL.
          SPACE  4,7
**        ACCOUNT FILE MESSAGES.
* 
*         *SBSB, IAF.*       *IAFEX* INITIATED. 
*         *SESB, IAF.*       *IAFEX* TERMINATION IN PROGRESS. 
*         *SESC, IAF.*       *IAFEX* TERMINATION COMPLETE.
*         *SRSC, IAF.*       *IAFEX* RECOVERY COMPLETE. 
*         *SRSA, IAF.*       *IAFEX* RECOVERY ABORTED.
          SPACE  4,20 
**        ABNORMAL CONDITION ERROR CODES. 
* 
*         THE FOLLOWING IS A LIST OF THE ABNORMAL ERROR CODES 
*         THAT MAY BE ISSUED BY *IAFEX* AND SOME INSIGHT INTO WHAT
*         MAY CAUSE THEM.  THE THREE CHARACTER ERROR CODES CORRESPOND 
*         TO THE NAME OF THE SUBROUTINE THAT DETECTED THE ERROR.
* 
*         CODE   DESCRIPTION. 
* 
*         ADQ    THE SCREEN MANAGEMENT INTERFACE ENCOUNTERED
*                A FULL DRIVER STACK, OR WAS UNABLE TO LOCATE THE 
*                CORRECT DRIVER REQUEST WORD STARTING AT VDRL.
* 
*         ADR    THE SCREEN MANAGEMENT INTERFACE ENCOUNTERED
*                A DRIVER REQUEST EVENT WHICH WAS UNEXPECTED FOR THE
*                TERMINAL*S CURRENT SCREEN MANAGEMENT CONNECT STATE.
* 
*         ASO    THIS DOCUMENTS AN ATTEMPT TO ASSIGN OUTPUT (WHICH
*                MEANS A SYSTEM STEP COMPLETION) TO A TERMINAL TABLE
*                WHICH IS ALREADY SET COMPLETE (VROT BIT ZERO = 1). 
*                IT USUALLY MEANS A BUG IN THE COMMUNICATION BETWEEN
*                IAF AND THE SYSTEM.
* 
*         ASM    IT IS ONLY POSSIBLE TO STACK TWO MESSAGES OR ONE 
*                DRIVER REQUEST AND ONE MESSAGE FOR THE DRIVER AT ONE 
*                TIME.  IF THIS MESSAGE IS ISSUED, THEN ONE OF THESE
*                CONDITIONS WAS ENCOUNTERED WHEN *ASM* ATTEMPTED TO 
*                ASSIGN A NEW MESSAGE TO THE TERMINAL.  THIS CONDITION
*                SHOULD NOT NORMALLY OCCUR, BUT THE ONLY HARM DONE IS 
*                THAT THE PARTICULAR USER LOSES SOME OUTPUT.  IF THIS 
*                DOES OCCUR, DURING NORMAL OPERATION, AND THERE HAVE
*                BEEN NO *DIAL* COMMANDS TO THE TERMINAL THERE IS 
*                PROBABLY AN INTERLOCK PROBLEM. 
* 
*         ASR    THE SCREEN MANAGEMENT INTERFACE RECEIVED A 
*                FUNCTION CODE FROM SMFEX WHICH WAS UNEXPECTED
*                FOR THE TERMINAL*S CURRENT CONNECT STATE.
* 
*         ATL    A *TLX* PP ISSUED A *VCSM* TSEM CODE WHEN THE
*                TERMINALS *SMFEX* CONNECTION CODE DOES NOT ALLOW 
*                THAT FUNCTION CODE.
* 
*         BJB    AN ATTEMPT WAS MADE TO ENABLE A USER JOB WHILE 
*                ITS TERMINAL TABLE INTERLOCK (*VROT* BIT 0=0)
*                WAS OUTSTANDING. 
* 
*         DLP    AN ATTEMPT WAS MADE TO DELINK POT ZERO.  THIS SHOULD 
*                NEVER HAPPEN.
* 
*         DPT    THIS INDICATES A POT OR POTS WERE DROPPED THAT WERE
*                NOT RESERVED.  THIS IS IN GENERAL INDICATIVE OF IAFEX
*                AND FRIENDS TRYING TO USE ONE POT FOR TWO THINGS AT THE
*                SAME TIME.  NEEDLESS TO SAY THIS DOES NOT WORK TOO WELL
*                AND IN FACT CAN CAUSE A WIDE VARITY OF PROBLEMS.  THIS 
*                ERROR MOST OFTEN RESULTS FROM *1TD* OR IAFEX RELEASING 
*                A POT OR POTS, BUT FAILING TO NOTE IT AND THEN 
*                USING THE SAME POT AGAIN LATER IN THE CODE.
* 
*         DRI    A DRIVER REQUEST TO IAFEX CONTAINED AN INCORRECT 
*                REQUEST CODE.  THIS SHOULD NEVER OCCUR.
* 
*         EDR    A DRIVER REQUEST WAS ENTERED AND THE *VDCT* INTERLOCK
*                WAS NOT CLEARED. 
* 
*         ESE    THE SCREEN MANAGEMENT INTERFACE ENCOUNTERED
*                A COMBINATION OF TERMINAL CONNECT STATE AND
*                EVENT (FROM DRI OR SMFEX) WHICH IS UNDEFINED.
* 
*         GPL    A POT LINK WAS ATTEMPTED FOR POT ZERO. 
* 
*         GQE    THIS INDICATES THAT IAFEX FOUND A BAD ENTRY IN THE 
*                REENTRY TABLE.  THIS IS A FATAL ERROR ON WHICH IAFEX 
*                WILL ABORT BECAUSE THERE IS NO WAY TO REBUILD THE
*                REENTRY QUEUE AS IT IS A LINKED QUEUE.  THE ENTRIES
*                VALIDITY IS CHECKED AS THEY ARE PUT IN THE TABLE BY
*                *MQE* SO THIS ERROR WOULD USUALLY INDICATE THE TABLE 
*                WAS BASHED AFTER THE THE ENTRY WAS MADE OR PERHAPS A 
*                POT CONTAINING MULTIPLE ENTRIES WAS BASHED.
* 
*         IAM    INDICATES THAT EITHER AN INCORRECT ACCOUNTING MESSAGE
*                WAS REQUESTED BY THE DRIVER, WHICH SHOULD NEVER HAPPEN,
*                OR THAT SUBROUTINE *IAM* WAS UNABLE TO TO GET
*                TO GET A POT FOR STACKING MESSAGES.
* 
*         ITM    THE DRIVER GAVE *IAFEX* AN INCORRECT MESSAGE CODE. 
*                THIS SHOULD NEVER OCCUR. 
* 
*         LEP    AN ATTEMPT WAS MADE TO LINK TWO POT CHAINS AND THE 
*                FIRST POT POINTER WAS ZERO.
* 
*         MQE    THIS INDICATES EITHER A BAD QUEUE ENTRY WAS ATTEMPTED
*                OR ELSE AN ENTIRE POT FULL OF QUEUE ENTRIES WAS STACKED
*                UP.  NEITHER OF THESE SHOULD EVER OCCUR.  IF THEY DO 
*                THEY CAN USUALLY EASILY BE DEBUGGED IF ONE LETS
*                *IAFEX* ABORT ON THIS ERROR AND THEN WORKS FROM THE
*                DUMP.
* 
*         RPL    AN ATTEMPT WAS MADE TO DROP POTS AFTER POT ZERO. 
* 
*         RPT    THERE WERE NOT ENOUGH POTS AVAILABLE TO SATISIFY A 
*                REQUEST.  THIS WOULD PROBABLY INDICATE THAT THE VALUES 
*                OF *VSPL* AND *VMPL* SHOULD BE INCREASED SO AS TO
*                MAINTAIN MORE SPARE POTS.  PROBLEMS IN THIS AREA WILL
*                ALSO BE INDICATED BY THE STATISTIC IAFEX MAINTAINS ON
*                THE NUMBER OF TIMES ONLY A FEW POTS ARE LEFT.  THIS
*                ALSO COULD OCCUR BECAUSE OF A SOME SYSTEM HANG 
*                WHICH PREVENTED *IAFEX* FROM OBTAINING MORE STORAGE. 
* 
*         RMS    THE SCREEN MANAGEMENT INTERFACE RECEIVED 
*                A FUNCTION CODE FROM SMFEX WHICH IS OUT OF RANGE.
* 
*         SBS    A REQUEST WAS MADE TO SET AN INCORRECT SUBSYSTEM 
*                BY MEANS OF A MONITOR *TSEM* REQUEST.
* 
*         SDT    A PPU REQUESTED A BIT TO BE SET IN AN INCORRECT
*                TERMINAL TABLE WORD OR ELSE THE BIT VALUE WAS GREATER
*                THAN 59.  THIS SHOULD NEVER OCCUR. 
* 
*         SFC    IAF HAS RECEIVED AN ERROR RETURN FROM CPUMTR ON
*                AN *SFCALL*.  THIS MAY MEAN THAT THERE IS AN ERROR IN
*                THE SCP/UCP INTERFACE BETWEEN IAF AND SMF. 
* 
*         STR    A PPU REQUEST RECEIVED VIA A *TSEM* MONITOR
*                FUNCTION CONTAINED AN INCORRECT REQUEST CODE.
*                THIS SHOULD NEVER OCCUR. 
* 
*         TSR    THIS IS A FATAL ERROR WHICH INDICATES *IAFEX,S* REENTRY
*                QUEUE HAS BEEN SCREWED UP.  THE PLACE TO START TO DEBUG
*                THIS IS TO LOOK AT THE CONTENTS OF *SSPA* WHICH
*                CONTAINS THE QUEUE ENTRY THAT WAS BEING PROCESSED AT 
*                THE TIME OF THE ERROR. 
* 
*         UEC    UNEXPECTED ERROR CODE WAS RECEIVED FROM AN EJT MONITOR 
*                REQUEST. 
* 
*         UNQ    LINKAGE IN TYPEAHEAD POT CHAIN IS INCORRECT.  THE
*                POINTER TO THE LAST POT IN THE CHAIN IS ZERO.
* 
* 
* 
*         IAFEX NETWORK INTERFACE ABNORMAL CONDITIONS.
* 
*         THE FOLLOWING ERROR MESSAGES ARE ISSUED ONLY BY THE 
*         NETWORK INTERFACE OVERLAY:  
* 
*         CODE   DESCRIPTION
* 
*         ACK    A BLOCK ACKNOWLEDGED MESSAGE WAS RECEIVED
*                FROM THE NETWORK WHEN THE MESSAGE STATUS 
*                TABLE SHOWED NO UNACKNOWLEDGED DOWNSTREAM
*                MESSAGES OUTSTANDING.
* 
*         ERQ    SUBROUTINE *ERQ* WAS CALLED TO ENTER A 
*                DRIVER CIRCULAR REQUEST STACK REQUEST TO THE 
*                EXECUTIVE WHEN THE STACK WAS FULL. 
* 
*         NAK    A BLOCK-NOT-DELIVERED SUPERVISORY MESSAGE HAS
*                BEEN RECEIVED FROM NAM AND EITHER (1) THE TER- 
*                MINAL OUTSTANDING BLOCK COUNT WAS ZERO, OR (2) 
*                THE REASON CODE FOR THE BLOCK-NOT-DELIVERED
*                CONDITION WAS INCORRECT. 
* 
*         NWC    THIS INDICATES THAT THE NETWORK REQUESTED A CONNECTION 
*                FOR WHICH IAF DOES NOT HAVE A TERMINAL TABLE, OR 
*                ON WHICH IAF HAS NOT FINISHED LOGOFF FOR THE 
*                PREVIOUS USER. 
* 
*         RDM    A MESSAGE WITH AN UNIDENTIFIABLE BLOCK TYPE
*                OR INCORRECT ACN HAS BEEN RECEIVED FROM NAM. 
* 
*         SRE    A DRIVER REENTRY HAS BEEN OVERWRITTEN. 
* 
*         TFR    THE MAIN IAFEX EXECUTIVE HAS PASSED AN UN- 
*                IDENTIFIABLE DRIVER REQUEST TO THE NETWORK 
*                DRIVER IN BYTE 4 OF TERMINAL TABLE WORD
*                *VDCT*.
          TITLE  DEFINITION COMMON DECKS. 
          SPACE  4,10 
*CALL     COMCMAC 
*CALL     COMCCMD 
*CALL     COMSACC 
          QUAL   CPS
*CALL     COMSCPS 
          QUAL   *
*CALL     COMSNET 
*CALL     COMSPRD 
*CALL     COMSRPV 
*CALL     COMSSCP 
*CALL     COMSSFM 
*CALL     COMSSSD 
*CALL     COMSSSJ 
          LIST   F,X
*CALL     COMSEJT 
*CALL     COMSTDR 
 VXJT     SET    1           ENABLE CEJ/MEJ ERROR CHECK 
*CALL     COMSREM 
*CALL     COMSTCM 
          LIST   *           REVERSE *LIST X,F* 
          TITLE  ASSEMBLY CONSTANTS.
****      ASSEMBLY CONSTANTS. 
  
  
 QUAL$    EQU    0           SET TO INDICATE PROGRAM WILL HANDLE QUAL 
 MAXTT    EQU    1024D       MAXIMUM NUMBER OF TERMINALS
 WCQT     EQU    100         WAIT COMPLETION QUEUE DELAY TIME (MSEC.) 
 MWQT     EQU    100         MONITOR WAIT QUEUE DELAY TIME(MSEC)
 LIAA     EQU    4           LOG IN ATTEMPTS ALLOWED
 MINDL    EQU    60D         MINIMUM FL CHANGE DELAY TIME 
 MAXDL    EQU    360D        MAXIMUM FL CHANGE DELAY TIME 
 INCTO    EQU    1           FL CHANGE INCREMENT TIME 
 RESTO    EQU    60D*15D     FL CHANGE RESET TIME INTERVAL SECONDS
 RTYDL    EQU    30D         *REER* DELAY COUNTER 
  
  
  
  
**        NETWORK INTERFACE ASSEMBLY CONSTANTS. 
  
 NFCL     EQU    20D         NETWORK FUNCTION LIMIT PER CYCLE 
 NMCT     EQU    300         NETWORK MANAGER CYCLE TIME (MSECS) 
 NODT     EQU    10D         NETON DELAY TIME (SECONDS) 
 NSCT     EQU    128D        NETWORK SCAN CYCLE TIME (MSECS)
 SDTO     EQU    60D*3       SHUTDOWN TIME-OUT (SECONDS)
 AIPL     EQU    511D        AIP UPLINE DATA BUFFER LENGTH
 SNDL     EQU    VXPL*VCPC*4/3+1  SEND BUFFER LENGTH
 NTODL    EQU    30D         NETWORK TERMINAL TIMEOUT DELAY (SECONDS) 
          SPACE  4,10 
**        AIP TRACE ASSEMBLY CONSTANTS. 
  
 DMCT     EQU    16200       DEFAULT MESSAGE COUNT TO TRACE 
 MNCT     EQU    5000        MINIMUM MESSAGE COUNT TO TRACE 
 MXML     EQU    10          MAXIMUM MESSAGE LENGTH TO TRACE
  
**        AIP TRACE JOB FILE NAME DEFINITION. 
*         THE TRACE OUTPUT FILE CAN BE PROCESSED THROUGH THE USE
*         OF AN INPUT JOB.  THIS REQUIRES AN INDIRECT ACCESS FILE 
*         UNDER THE SYSTEM USER INDEX 377777 WHICH CONTAINS THE 
*         COMMANDS NECESSARY TO PROCESS THE TRACE OUTPUT FILE 
*         VIA AN INPUT JOB. 
*         THIS MICRO DEFINES THE NAME OF THAT FILE. 
  
 TJOB     MICRO  1,,*TRACIAF* 
          TITLE  FETS AND DATA STORAGE. 
          QUAL   IAFINI 
  
          ORG    55000B      SET ORIGIN 
  
 FWA      BSS    0           DEFINE FWA OF OVERLAY. 
 FETS     SPACE  4,10 
**        FETS. 
  
  
          CON    NMSG        ERROR MESSAGE BUFFER ADDRESS 
  
 NMSG     BSS    4           ERROR MESSAGE BUFFER 
  
  
 L        BSS    0           LOADER PARAMETER FILE
 ZZZZZ17  FILEB  FBUF,FBUFL 
          SPACE  4,10 
**        DATA STORAGE. 
  
  
 ATAS     CON    0           AIP TRACE PARAMETER ASSUMED VALUE
 ATPV     CON    1R+         COMMAND TRACE PARAMETER VALUE
 LWAA     CON    0           LWA+1 ALLOCATED CORE 
 NDRO     CON    0           NETWORK DRIVER ORDINAL 
 VHMP     CON    0           HIGHEST MUX PORT NUMBER
  
          TITLE  MAIN ROUTINE.
 INI      SPACE  4,10 
**        INI - IAFEX INITIALIZATION. 
* 
*         ENTRY  (R1) = 1 IF IAF RECOVERY.
*                WHERE R1 IS THE JOB CONTROL REGISTER 1.
  
  
 INI      BSS    0           ENTRY
          SB1    1           SET CONSTANT B1=1
          GETSSID INID       GET SUBSYSTEM IDENTIFICATION 
          SA1    INID 
          SX0    X1-IFSI
          ZR     X0,INI1     IF IAF SUBSYSTEM 
          SX0    X1-RDSI
          NZ     X0,INI6     IF NOT RDF SUBSYSTEM 
 INI1     GETJO  INID        GET JOB ORIGIN CODE
          SA1    INID 
          MX2    -6 
          BX1    -X2*X1 
          NZ     X1,INI6     IF NOT SYSTEM ORIGIN TYPE
          SETUI  377777B     SET SYSTEM USER INDEX
          OVERLAY (=6LIAFEX1),100B,S  LOAD EXECUTIVE
          GETSSM //LISF      GET SYSTEM SECURITY MODE 
          GETJCR INIC 
          SA1    INIC 
          LX1    59-0 
          NG     X1,INI1.1   IF RELOAD - KEEP PREVIOUS SWITCH SETTINGS
          ONSW   20B         SELECT DUMP OPTION 
 INI1.1   MOVE   //TINSTL,//TINST,TINS
          RJ     CIC         CRACK *IAFEX* COMMAND
          RJ     CPA         CLEAR POINTER AREAS
  
*         CHECK IF *IAF* RECOVERY (R1=1 IF RECOVERY)
  
          SA1    INIC 
          SX7    B1 
          BX7    X7*X1
          ZR     X7,INI2     IF NOT IAF RECOVERY
          BX7    X1-X7       CLEAR THE RECOVERY FLAG
          SA7    A1 
          SETJCR INIC        SET JOB CONTROL REGISTERS
          RTIME  VRLL        SET RECOVERY TIME IN SECONDS 
          SA1    VRLL 
          LX1    -36
          MX7    -24
          BX7    -X7*X1 
          SA7    A1+
  
*IF DEF,IAF$
*         CALL DRIVERS. 
  
 INI2     SA1    INIH 
          SB6    VDRL+VDRM
          RJ     CDR         CALL *1TM* DRIVER
          SA6    VITM        SAVE *1TM* DRIVER REQUEST WORD 
          SA1    INIB 
          SB6    VDRL+VDRN
          RJ     CDR         CALL *1TN* DRIVER
*ELSE 
*         CALL TWO PORT MUX DRIVER. 
  
 INI2     SA1    INIH 
          SB6    VDRL+VDRM
          RJ     CDR         CALL *1TM* DRIVER
          SA6    VITM        SAVE *1TM* DRIVER REQUEST WORD 
*ENDIF
          RJ     WDP         WAIT DRIVER PRESET COMPLETE
  
*         DETERMINE MAXIMUM NUMBER OF USERS.
  
          SA1    B0          SET TIMEOUT ACCORDING TO SSW1
          SX6    B1 
          LX6    6-0
          BX6    X6*X1
          SA2    INIE        SET INTO REQUEST 
          LX6    25-6 
          BX6    X6+X2
          SA6    A2          REWRITE REQUEST
          SYSTEM EJT,R,INIE  UPDATE TIME IN EJT 
          SX7    TINST
          SA7    LWAA        FWA OF ALLOCATABLE MEMORY
          SA1    VMNL        NUMBER OF MUX PORTS
          SA3    VNTP        NUMBER OF NETWORK TERMINALS
          SX2    =C* NO TERMINALS DEFINED.* 
          IX6    X3+X1       TOTAL MUX AND NETWORK TERMINALS
          SA6    A1          STORE TOTAL TERMINAL COUNT 
          ZR     X6,ABT      IF NO TERMINALS DEFINED
          SX6    X6-MAXTT-1  CHECK TOTAL TERMINAL COUNT 
          SX2    =C* TOO MANY TERMINALS.* 
          PL     X6,ABT      IF TOO MANY TERMINALS
*IF DEF,IAF$
          ZR     X3,INI3     IF NO NETWORK TERMINALS
          RJ     LNI         LOAD NETWORK INTERFACE 
*ENDIF
  
*         SET UP REPRIEVE PROCESSING. 
  
 INI3     REPRIEVE RPVB,SETUP,77B  SET REPRIEVE PROCESSING
  
*         ALLOCATE MEMORY AND TABLES. 
  
          RJ     CAM         CLEAR ALLOCATABLE MEMORY 
          RJ     ADS         ALLOCATE DRIVER STACKS 
          RJ     ATT         ALLOCATE TERMINAL TABLES 
          RJ     ATN         ALLOCATE TERMINAL NAME TABLE 
          RJ     ART         ALLOCATE REENTRY TABLES
          RJ     AMS         ALLOCATE MESSAGE STATUS TABLE
          RJ     ANA         ALLOCATE NETWORK ACTIVITY TABLE
          RJ     ABM         ALLOCATE BUFFER MEMORY 
          RJ     PMP         PRESET MISCELLANEOUS POINTERS
  
*         SET TABLE REFERENCE ADDRESSES IN INSTRUCTIONS.
  
          SB5    TINS        EXECUTIVE INSTRUCTION TABLE ADDRESS
          SB7    //TINSTL 
          RJ     SAD         SET INSTRUCTION ADDRESSES
          SA1    VNTP        CHECK IF NETWORK DEFINED 
          ZR     X1,INI4     IF NETWORK INTERFACE NOT LOADED
          SB5    TINS2       IAFEX4 INSTRUCTION TABLE ADDRESS 
          SB7    /IAFEX4/TINSTL 
          RJ     SAD         SET INSTRUCTION ADDRESSES
  
*         ENTER IAFEX EXECUTIVE.
  
 INI4     RJ     SPC         SET SUBSYSTEM PROCESSOR CALLS
          RJ     STD         START DRIVER(S)
          SB5    FBUF        SET POINTERS TO CLEAR VERSION AREA 
          SB6    FBUF+8 
          SX6    B0+
+         SA6    B5          CLEAR WORD 
          SB5    B5+B1
          LT     B5,B6,*     IF NOT COMPLETE
          VERSION INIA       GET SYSTEM NAME
          MESSAGE FBUF,,R   ISSUE DAYFILE MESSAGE 
          DATE   //DATE 
          CLOCK  //TIME 
          TIME   //CPTIME 
          RTIME  //START
          SX6    -1 
          SA6    HEDR+4 
          SYSTEM RSB,R,INIG  GET BANNER MESSAGE 
          SB6    HEDR+4 
          SB7    HEDR+7 
 INI4.1   SA1    B6          CONVERT ZEROS TO BLANKS IN HEADER
          SB6    B6+B1
          RJ     ZTB
          SA6    A1+
          LE     B6,B7,INI4.1  IF MORE WORDS TO CONVERT 
          SA2    //START
          SA3    //SPRD 
          AX2    36          REAL TIME IN SECONDS 
          IX7    X2+X3       INCREMENT REAL TIME
          SA7    //SPRC 
          SA7    //SPRD 
          SA1    VNTP        CHECK NETWORK TERMINALS
          BX7    X2 
          AX1    24 
          SX2    X1-VPST     COMPARE TO FIRST LIVE TERMINAL NUMBER
          ZR     X1,INI5     IF NO NETWORK TERMINALS DEFINED
          SA7    /IAFEX4/NFRT  SET INITIAL *NETON* DELAY
 INI5     MESSAGE  (=C*SBSB, IAF.*),5  TIMESHARING EXECUTIVE INITIATED
          EQ     //IAF       ENTER EXECUTIVE
  
 INI6     MESSAGE  (=C* USER ACCESS NOT VALID.*)
          ABORT 
  
  
 INIA     VFD    12/11B,12/0,12/0,24/FBUF 
 INIB     VFD    18/3L1TN,42/0
 INIC     CON    0           JOB CONTROL REGISTERS
 INID     CON    0           QUEUE PRIORITY/JOB ORIGIN TYPE 
 INIE     VFD    24/0,12/1,23/RTEJ,1/0
          VFD    60/0 
          VFD    6/0,6/TXOT,48/0
          BSSZ   EJPB-*+INIE
 INIG     VFD    12/0,12/6,18/SYTL,18/HEDR+4
 INIH     VFD    18/3L1TM,30/0,12/0  *1TM* CALL 
          TITLE  SUBROUTINES. 
 ABM      SPACE  4,25 
**        ABM - ALLOCATE BUFFER MEMORY (POTS).
* 
*         ENTRY  (LWAA) = LWA+1 OF MEMORY ALLOCATED.
*                (VMNL) = TERMINAL COUNT. 
* 
*         EXIT   (LWAA) = LWA+1 OF POT LINK TABLE.
*                (VCPL) = FL CHANGE IN PROGRESS.
*                (VPAL) = POTS ALLOCATED. 
*                (VPLP) = 12/LENGTH, 24/ FWA, 24/ LWA+1 OF
*                         POT LINK TABLE. 
*                (VBMP) = 36/, 24/ FWA OF BUFFER MEMORY.
*                (VPUL) = 1.
*                POT 0 IS RESERVED. 
* 
*                TO *ABT* IF POT LINK TABLE OVERFLOW. 
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2, 6, 7. 
* 
*         CALLS  ABT. 
* 
*         MACROS MEMORY.
  
  
 ABM      SUBR               ENTRY/EXIT 
  
*         FIND PLT SIZE BASED ON TERMINALS IN SYSTEM. 
  
          SA1    VMNL        DETERMINE NUMBER OF USERS
          SX2    VPLM 
          IX1    X1*X2       CALCULATE PERCENTAGE OF PLT TO ALLOCATE
          SX2    VMXU 
          IX1    X1/X2
          SX3    VMIL*VSCL+VLCL*VMIL  INCREASE PLT DUE TO QUEUES
          AX3    2           CALCULATE PLT WORDS
          IX1    X3+X1       ADD TO PLT SIZE
 ABM0     SX4    VFLI/VCPC/4  INCREASE TO NEXT PLT INCREMENT
          SX2    X4 
          IX1    X4+X1
          IX1    X1/X4
          IX1    X1*X2
          SX2    X1-VPLI
          PL     X2,ABM1     IF PLT ABOVE MINIMUM SIZE
          SX1    VPLI        USE MINIMUM SIZE 
          EQ     ABM4        ALLOCATE PLT 
  
 ABM1     SX2    X1-VPLM
          NG     X2,ABM4     IF PLT BELOW MAXIMUM 
          SX1    VPLM 
  
*         ALLOCATE POT LINK TABLE.
  
 ABM4     SA2    LWAA        GET FWA FOR PLT
          SX6    X1          SET POTS AVAILABLE 
          LX6    2
          SA6    VPAL 
          SB6    X2          SET PLT FWA
          IX7    X2+X1       SET LWA+1
          LX1    5           CALCULATE MAXIMUM FL 
          IX3    X1+X7
          SX5    3777B-MNFL 
          LX5    6
          IX5    X3-X5
          NG     X5,ABM4.1   IF END OF FL OKAY
          SX5    X5+VFLI+1   INCREASE THE DIFFERENCE
          IX1    X1-X5       DECREASE MAXIMUM PLT SIZE
          AX1    5           CALCULATE PLT WORDS
          EQ     ABM0        DECREASE TO NEXT PLT INCREMENT 
  
 ABM4.1   AX1    5           RESTORE PLT SIZE 
          SA7    A2          REWRITE LWAA 
          SB7    X7 
          LX2    24          FORMAT PLT POINTER WORD
          LX1    48 
          BX6    X7+X2
          BX6    X1+X6
          SA6    VPLP        STORE PLT POINTER WORD 
          SX1    X6-FWA      CHECK FOR OVERFLOW 
          SX2    =C* POT LINK TABLE OVERFLOW.*
          PL     X1,ABT      IF OVERFLOW
          SX7    X7+1 
          SA7    VBMP 
  
*         VERIFY THAT PLT LENGTH IS WITHIN IAF FL.
*         IF IT IS NOT REDUCE PLT UNTIL FL IS REACHED.
  
          MEMORY  CM,ABMA    SEE AMOUNT OF FL CURRENTLY ALLOCATED 
          SA2    VPLP 
          SA3    ABMA        COMPARE MEMORY ALLOCATION
          SX4    X2          SAVE LWA+1 OF PLT
          LX2    -24
          MX0    -12
          LX3    59-29
          SX2    X2          SAVE FWA OF PLT
          SX3    X3          SAVE CURRENT FL
          BX7    X3 
          IX2    X4-X2       LENGTH OF PLT
          LX2    5           PLT LENGTH*32
          SA4    VBMP 
          IX5    X4+X2
          IX0    X5-X3
          NG     X0,ABM5     IF ENOUGH FIELD LENGTH AVAILABLE 
          IX0    X3-X4       LENGTH OF POTS 
          BX6    X0 
          AX0    5           (FL-VBMP)/32 = LENGTH OF PLT 
          AX6    3
          SB2    24          SHIFT COUNT
          SA2    A2 
          SA6    VPAL        SET POTS AVAILABLE 
          AX3    X2,B2
          SX3    X3          FWA OF PLT 
          MX5    36 
          IX3    X3+X0       LWA+1 OF PLT 
          BX2    X5*X2       SAVE FWA OF PLT
          BX6    X3+X2
          SA6    A2        SAVE NEW POINTERS
  
*         RESERVE POT ZERO AND SET CURRENT FL IN *FLCW*.
  
 ABM5     SA1    =77770000000000000010B 
          SA4    ABMD        CREATE *1TA* FIELD LENGTH REQUEST
          SA3    VPAL 
          BX6    X4+X7
          BX7    X3 
          SA6    PMSG 
          SA7    VCPL        SET FL INCREASE IN PROGRESS
          SX6    B1 
          BX7    X1 
          SA5    VPLP        GET POT LINK TABLE ADDRESS 
          SA6    VPUL 
          AX5    24 
          SA7    X5 
          EQ     ABMX        RETURN 
  
 ABMA     DATA   0
 ABMD     VFD    18/3R1TA,6/0,12/4001B,24/0 
 ABT      SPACE  4,10 
**        ABT - INITIALIZATION ABORT. 
* 
*         ENTRY  (X2) = ADDRESS OF ERROR MESSAGE. 
* 
*         EXIT   (VRLL) = BITS 59 AND 58 SET. 
*                DAYFILE MESSAGE(S) ISSUED. 
* 
*         CALLS  MSG=, SYS=.
  
  
 ABT      BSS    0           ENTRY
  
*         SET INITIALIZATION ABORT AND NO-RELOAD STATUS.
  
          SA1    VRLL        SET STATUS BITS
          MX6    2
          BX6    X6+X1
          SA6    A1 
          ZR     X2,ABT1     IF NO MESSAGE
          MESSAGE X2,,R      ISSUE ERROR MESSAGE
 ABT1     MESSAGE (=C* IAFEX INITIALIZATION ABORT.*),,R 
          OFFSW  20B         DESELECT DUMP OPTION 
          ABORT 
 ADS      SPACE  4,30 
**        ADS - ALLOCATE DRIVER STACKS. 
* 
*         UPDATE THE *MUXP* AND *VDRL* TABLE ENTRIES
*         AND ALLOCATE DRIVER CIRCULAR REQUEST STACKS.
*         IF A DRIVER HAS NO PORTS DEFINED, ITS DRIVER WORD 
*         IS CLEARED TO ALLOW THE DRIVER TO COMPLETE INITIAL- 
*         IZATION AND DROP. 
* 
*         ENTRY  (LWAA) = LWA+1 OF ALLOCATED CORE.
*                (MUXP - MUXP+MXMX) = MUX TABLE ENTRIES.
*                  6/CH, 6/EQ, 12/, 12/UAL, 12/NT, 12/0 
*                    NT = NUMBER OF TERMINALS.
*                (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. 
*                   12/IL, 6/0, 18/DN, 12/TC, 12/CL.
*                      IL = DRIVER INTERLOCK. 
*                      DN = DRIVER NAME.
*                      TC = TERMINAL COUNT. 
*                      CL = CONVERSION TABLE LENGTH.
* 
*         EXIT   (LWAA) = LWA+1 OF DRIVER STACKS. 
*                (MUXP - MUXP+MXMX) = MUX TABLE ENTRIES.
*                  6/CH, 6/EQ, 12/, 12/UAL, 12/NT, 12/FT
*                    FT = FIRST TERMINAL. 
*                (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. 
*                   12/IL, 24/SA, 12/TC, 12/FT. 
*                      IL = DRIVER INTERLOCK. 
*                      SA = DRIVER STACK ADDRESS. 
*                      TC = TERMINAL COUNT. 
*                      FT = FIRST TERMINAL NUMBER.
* 
*                TO *ABT* IF DRIVER STACK OVERFLOW. 
* 
*         USES   A - 1, 2, 6, 7.
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 4, 5, 6, 7.
  
  
 ADS      SUBR               ENTRY/EXIT 
          SB4    VPST        (B4) = FIRST TERMINAL NUMBER 
          SB6    MUXP        (B6) = MUX TABLE ADDRESS 
          SB7    B0          (B7) = MUX TABLE INDEX 
          MX5    -12
  
*         UPDATE MUX TABLE ENTRIES. 
  
 ADS0     SA1    B6+B7       READ MUX TABLE ENTRY 
          SB7    B7+B1
          ZR     X1,ADS0.1   IF END OF TABLE
          BX3    X1 
          LX3    -12
          BX6    -X5*X3      TERMINAL COUNT 
          SX7    B4          SET FIRST TERMINAL NUMBER
          BX7    X1+X7
          SB4    B4+X6       UPDATE FIRST TERMINAL NUMBER 
          SA7    A1          REWRITE TABLE ENTRY
          EQ     ADS0        PROCESS NEXT ENTRY 
  
 ADS0.1   SA1    LWAA        GET LWA+1 OF PHYSICAL ALLOCATED CORE 
          SB4    VPST        (B4) = FIRST TERMINAL NUMBER 
          SB5    X1          (B5) = DRIVER STACK ADDRESS
          SB6    VDRL        (B6) = DRIVER STATUS TABLE ADDRESS 
          SB7    B0          (B7) = DRIVER STATUS TABLE INDEX 
  
*         READ DRIVER STATUS TABLE ENTRY PARAMETERS.
  
 ADS1     SA1    B6+B7       READ TABLE ENTRY 
          MX5    -12
          SB7    B7+1        ADVANCE POINTER
          NG     X1,ADS3     IF END OF TABLE
          BX2    -X5*X1      (X2) = CONVERSION AND ID TABLE LENGTH
          BX3    X1 
          LX3    18 
          MX4    18 
          BX3    X4*X3       (X3)=DRIVER NAME, RIGHT JUSTIFIED
          AX1    12 
          BX6    -X5*X1      (X6) = TERMINAL COUNT
          NZ     X6,ADS2     IF TERMINALS DEFINED 
          SA6    A1          CLEAR TABLE ENTRY
          EQ     ADS1        CONTINUE 
  
*         SET STACK ADDRESS AND FIRST TERMINAL IN TABLE ENTRY.
  
 ADS2     SX1    B5          SET STACK ADDRESS
          LX1    12 
          BX1    X1+X6       INSERT TERMINAL COUNT
          SX7    B4          INSERT FIRST TERMINAL
          LX1    12 
          BX1    X1+X7
          SX7    B1          SET INTERLOCK
          LX7    48-0 
          BX7    X7+X1
          SA7    A1+         REWRITE TABLE ENTRY
          SB4    B4+X6       UPDATE FIRST TERMINAL NUMBER 
  
*         SET UP DRIVER CIRCULAR STACK. 
  
          SX6    B5+5        SET *FIRST*
          SA6    B5+B1
          SA6    A6+B1       SET *IN* 
          SA6    A6+B1       SET *OUT*
          SX6    X6+VDSL     SET *LIMIT*
          SA6    A6+B1
          IX6    X6+X2       CALCULATE FWA OF NEXT STACK
          BX7    X3+X6       FORMAT STACK HEADER
          SA7    B5          WRITE STACK HEADER 
          SB5    X6+         UPDATE STACK ADDRESS 
          SX1    X6-FWA      CHECK FOR OVERFLOW 
          NG     X1,ADS1     IF NO OVERFLOW, LOOP 
          SX2    =C* DRIVER STACK OVERFLOW.*
          EQ     ABT         ABORT INITIALIZATION 
  
*         CLEAR POINTER TO NEXT STACK FROM LAST ENTRY.
  
 ADS3     ZR     B7,ADS5     IF BACK AT START OF TABLE
          SB7    B7-B1       READ PREVIOUS ENTRY
          SA1    B6+B7
          ZR     X1,ADS3     IF NULL ENTRY
          NG     X1,ADS3     IF END OF TABLE
          AX1    24          SET HEADER ADDRESS 
          SA2    X1 
          MX6    42 
          BX6    X6*X2       CLEAR POINTER
          SA6    X1+         REWRITE HEADER 
  
*         UPDATE LWA+1 OF ALLOCATED CORE. 
  
 ADS5     SX6    B5+         SET LWA+1 ALLOCATED
          SA6    LWAA 
          EQ     ADSX        RETURN 
 AMS      SPACE  4,10 
**        AMS - ALLOCATE NETWORK MESSAGE STATUS TABLE.
* 
*         THE START OF THE MESSAGE STATUS TABLE IS BIASED BACK- 
*         WARDS IN ORDER THAT NON-NETWORK TERMINAL ENTRIES NEED 
*         NOT BE ALLOCATED. 
* 
*         ENTRY  (LWAA) = LWA+1 OF MEMORY ALLOCATED.
*                (VNTP) = 36/FIRST, 24/LAST NETWORK TERMINAL NUMBERS. 
* 
*         EXIT   (VMST) = 36/FWA, 24/LWA+1 OF MESSAGE STATUS TABLE. 
*                (LWAA) = LWA+1 OF MESSAGE STATUS TABLE.
* 
*                TO *ABT* IF MESSAGE STATUS TABLE OVERFLOW. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
  
  
 AMS      SUBR               ENTRY/EXIT 
          SA1    VNTP        GET NETWORK TERMINAL POINTER 
          SX6    X1+         LAST TERMINAL NUMBER 
          AX1    24          SHIFT FIRST TERMINAL NUMBER
          ZR     X6,AMS1     IF NO NETWORK TERMINALS
          IX6    X6-X1       NETWORK TERMINAL COUNT -1
          SA2    LWAA        GET LWA+1 ALLOCATED CORE 
          SX6    X6+B1       TERMINAL COUNT 
          IX6    X2+X6       SET LWA+1
          IX2    X2-X1       SUBTRACT NON-NETWORK TERMINALS 
          SA6    A2          STORE (LWAA) = LWA+1 
          LX2    24          MERGE FWA AND LWA+1
          BX6    X6+X2
 AMS1     SA6    VMST        STORE (VMST) 
          SX1    X6-FWA      CHECK FOR OVERFLOW 
          SX2    =C* MESSAGE STATUS TABLE OVERFLOW.*
          PL     X1,ABT      IF OVERFLOW
          EQ     AMSX        RETURN 
 ANA      SPACE  4,10 
**        ANA - ALLOCATE NETWORK ACTIVITY TABLE.
* 
*         ALLOCATES ONE TABLE WORD PER EACH 32 NETWORK TERMINALS
*         DEFINED.
* 
*         ENTRY  (VNTP) = 36/FIRST, 24/LAST NETWORK TERMINAL NO.
*                (LWAA) = LWA+1 OF MEMORY ALLOCATED.
* 
*         EXIT   (LWAA) = LWA+1 OF NETWORK ACTIVITY TABLE.
*                (VNAT) = 36/FWA, 24/LWA+1 OF NETWORK ACTIVITY TABLE. 
* 
*                TO *ABT* IF TABLE OVERFLOW.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 3, 6.
  
  
 ANA      SUBR               ENTRY/EXIT 
          SA1    VNTP        GET NETWORK TERMINAL POINTER 
          SX6    B0+
          ZR     X1,ANA1     IF NO NETWORK TERMINALS
          SX3    X1+33       LAST TERMINAL NUMBER + 33
          AX1    24          FIRST TERMINAL NUMBER
          IX1    X3-X1       TERMINAL COUNT + 32
          SA2    LWAA 
          AX1    5           LENGTH = (TERMINAL COUNT+32)/32
          IX6    X2+X1       SET LWA+1
          SA6    A2+         STORE (LWAA) 
          LX2    24          SET FWA
          BX6    X2+X6
 ANA1     SA6    VNAT        STORE (VNAT) 
          SX1    X6-FWA      CHECK FOR OVERFLOW 
          SX2    =C* NETWORK ACTIVITY TABLE OVERFLOW.*
          PL     X1,ABT      IF OVERFLOW
          EQ     ANAX        RETURN 
 ART      SPACE  4,10 
**        ART - ALLOCATE REENTRY TABLE. 
* 
*         ENTRY  (LWAA) = LWA+1 OF ALLOCATED CORE.
*                (VMNL) = TERMINAL COUNT. 
* 
*         EXIT   (LWAA) = LWA+1 OF REENTRY TABLE. 
*                (VRAP) = 36/ FWA, 24/ LWA+1 OF REENTRY TABLE.
* 
*                TO *ABT* IF REENTRY TABLE OVERFLOW.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
  
  
 ART      SUBR               ENTRY/EXIT 
          SA1    VMNL        GET TERMINAL COUNT 
          SA2    LWAA        GET LWA+1 ALLOCATED CORE 
          SX6    X1+VPST     ADD PSEUDO-TERMINALS 
          IX6    X6+X2       SET LWA+1
          SA6    A2          UPDATE (LWAA)
          LX2    24          MERGE FWA AND LWA+1
          BX6    X6+X2
          SA6    VRAP        STORE (VRAP) 
          SX1    X6-FWA      CHECK FOR OVERFLOW 
          SX2    =C* REENTRY TABLE OVERFLOW.* 
          PL     X1,ABT      IF OVERFLOW
          EQ     ARTX        RETURN 
ATN       SPACE  4,5
**        ATN -  ALLOCATE TERMINAL NAME TABLE.
* 
*         ENTRY  (LWAA) = LWA+1 OF ALLOCATED CORE.
*                (VMNL) = TERMINAL COUNT. 
* 
*         EXIT   (VTNP) = 36/ FWA, 24/ LWA+1 OF NAMES TABLE.
*                (LWAA) = LWA+1 OF NAMES TABLE. 
* 
*                TO *ABT* IF OVERFLOW.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 2, 6. 
  
  
 ATN      SUBR               ENTRY/EXIT 
          SA1    VMNL        GET TERMINAL COUNT 
          SA2    LWAA        LWA+1 OF ALLOCATED CORE
          IX6    X2+X1
          SA6    A2          UPDATE LWA+1 
          LX2    24 
          BX6    X6+X2
          SA6    VTNP        STORE POINTER TO TABLE 
          SX6    X6-FWA 
          SX2    =C* TERMINAL NAME TABLE OVERFLOW.* 
          PL     X6,ABT      IF OVERFLOW
          EQ     ATNX        RETURN 
 ATT      SPACE  4,10 
**        ATT - ALLOCATE TERMINAL TABLES. 
* 
*         ENTRY  (VMNL) = TERMINAL COUNT. 
*                (LWAA) = LWA+1 OF ALLOCATED CORE.
* 
*         EXIT   (VTTP) = 36/ FWA, 24/ LWA+1 OF TERMINAL TABLES.
*                (LWAA) = LWA+1 OF TERMINAL TABLES. 
*                TERMINAL TABLE STATUSES SET COMPLETE.
* 
*                TO *ABT* IF TERMINAL TABLE OVERFLOW. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 3, 6.
*                B - 6, 7.
* 
*         CALLS  ABT. 
  
  
 ATT      SUBR               ENTRY/EXIT 
          SA1    VMNL        GET TERMINAL COUNT 
          SX3    VTTL        SET TERMINAL TABLE LENGTH
          SX1    X1+VPST     TERMINAL COUNT + PSEUDO TERMINALS
          SA2    LWAA        GET LWA+1 OF ALLOCATED CORE
          IX6    X3*X1       LENGTH OF TABLES 
          SB6    X2          SET FWA
          IX6    X6+X2       SET LWA+1
          SA6    A2          UPDATE (LWAA)
          SB7    X6+
          LX2    24          MERGE FWA AND LWA+1
          BX6    X6+X2
          SA6    VTTP        STORE (VTTP) 
          SX6    X6-FWA      CHECK FOR OVERFLOW 
          SX2    =C* TERMINAL TABLE OVERFLOW.*
          PL     X6,ABT      IF OVERFLOW
  
*         SET ALL TERMINAL TABLE STATUSES COMPLETE. 
  
          SX1    VROT 
          SX6    1
 ATT1     SA6    B6+X1       STORE VROT 
          SB6    B6+X3
          LT     B6,B7,ATT1  IF NOT COMPLETE
          EQ     ATTX        RETURN 
 CAM      SPACE  4,10 
**        CAM - CLEAR ALLOCATABLE MEMORY. 
* 
*         CLEAR THE ALLOCATABLE IAFEX TABLE AREA FROM THE LWA+1 
*         OF LOADED EXECUTIVE OVERLAY(S) TO THE FWA OF THE
*         INITIALIZATION OVERLAY. 
* 
*         ENTRY  (LWAA) = FWA OF ALLOCATABLE MEMORY.
* 
*         USES   A - 1, 6.
*                X - 1, 6.
*                B - 6, 7.
  
  
CAM1      SA6    B6          STORE ZERO WORD
          SB6    B6+B1
          LT     B6,B7,CAM1  IF NOT COMPLETE
*         EQ     CAMX        RETURN 
  
*         CAM - ENTRY/EXIT. 
  
 CAM      SUBR               ENTRY/EXIT 
          SA1    LWAA        GET FWA OF ALLOCATABLE MEMORY
          SB7    FWA         SET INTIALIZER FWA 
          BX6    X6-X6
          SB6    X1          (B6) = LWA+1 OF LOADS
          EQ     CAM1 
 CDR      SPACE  4,25 
**        CDR - CALL DRIVER.
* 
*         THE DRIVER NAME IS SET INTO THE SPECIFIED *VDRL*
*         ENTRY, AND THE *VDRL* ADDRESS FOR THIS DRIVER IS SET
*         INTO THE DRIVER REQUEST WORD.  THIS DRIVER REQUEST
*         WORD IS THEN USED TO CALL THE APPROPRIATE DRIVER. 
* 
*         ENTRY  (X1) = DRIVER NAME, LEFT JUSTIFIED.
*                (B6) = ADDRESS OF *VDRL* ENTRY FOR THIS DRIVER.
* 
*         EXIT   APPROPRIATE PPU DRIVER HAS BEEN LOADED.
*                (X6) = FORMATTED DRIVER REQUEST WORD.
*                     = 18/DN, 24/0, 18/VA. 
*                       DN = DRIVER NAME. 
*                       VA = *VDRL* ADDRESS.
*                (VDRL) = 18/0, 18/DN, 24/0.
*                       DN = DRIVER NAME. 
* 
*         USES   A - 2, 6.
*                X - 1, 2, 3, 6.
*                B - 6. 
* 
*         MACROS SYSTEM.
  
  
 CDR      SUBR               ENTRY/EXIT 
          BX6    X1          GET DRIVER NAME
          LX6    42 
          SA6    B6 
          MX3    42 
          BX1    X3*X1       CLEAR BYTE 4 OF DRIVER REQUEST WORD
          SX2    B6 
          BX6    X1+X2       SET ADDRESS IN DRIVER REQUEST WORD 
          SA6    CDRA        REWRITE DRIVER REQUEST WORD
          SA6    CDRB        SAVE FORMATTED REQUEST WORD
 CDR2     SYSTEM SPC,,CDRA   CALL APPROPRIATE DRIVER
 +        SA2    B1+
          NZ     X2,*        IF RA+1 NOT CLEAR
          SA2    CDRA 
          NZ     X2,CDR2     IF PPU NOT AVAILABLE 
          SA2    CDRB 
          BX6    X2          RETURN DRIVER REQUEST WORD 
          EQ     CDRX        EXIT 
  
  
 CDRA     CON    0           DRIVER SCRATCH WORD
 CDRB     CON    0           FORMATTED DRIVER REQUEST WORD
 CIC      SPACE  4,10 
**        CIC - CRACK *IAFEX* COMMAND.
* 
*         EXIT   TO *ABT* IF ERROR IN ARGUMENTS.
*                (X2) = ERROR MESSAGE.
* 
*         USES   X - 1, 2, 4. 
*                A - 1, 4.
*                B - 4, 5.
* 
*         CALLS  ARG. 
  
  
 CIC      SUBR               ENTRY/EXIT 
          SA1    ACTR        GET ARGUMENT COUNT 
          SA4    ARGR        GET FIRST ARGUMENT 
          SB4    X1+
          ZR     B4,CICX     IF NO ARGUMENTS
          SB5    TICP        ARGUMENT TABLE 
          RJ     ARG         PROCESS ARGUMENTS
          SX2    =C* ERROR IN IAFEX ARGUMENTS.* 
          NZ     X1,ABT      IF ERROR IN ARGUMENTS
          EQ     CICX        RETURN 
 CPA      SPACE  4,10 
**        CPA - CLEAR POINTER AREAS.
* 
*         CLEAR LOW CORE POINTER WORDS AND DRIVER MULTIPLEXER 
*         TABLE.
* 
*         EXIT   AREAS CLEARED. 
* 
*         USES   A - 6. 
*                X - 6. 
*                B - 6, 7.
  
  
 CPA      SUBR               ENTRY/EXIT 
          SB6    PGNR-1      LWA OF POINTER AREA
          SX6    B0+
  
*         CLEAR LOW CORE POINTERS.
  
 CPA1     SA6    B6          CLEAR CORE 
          SB6    B6-B1
          GT     B6,B1,CPA1  IF NOT COMPLETE
  
*         CLEAR MULTIPLEXER TABLE.
  
          SB6    MUXP        FWA OF MUX TABLE 
          SB7    TXORG       LWA+1 OF MUX POINTERS
 CPA2     SA6    B6          CLEAR CORE 
          SB6    B6+B1
          LT     B6,B7,CPA2  IF NOT COMPLETE
          MX6    12 
          SB6    VDRL        FWA OF *VDRL* ENTRIES
          SB7    B6+4        LWA+1 OF *VDRL* ENTRIES
 CPA3     SA6    B6          INITIALIZE ENTRIES TO NEGATIVE NUMBER
          SB6    B6+B1
          LT     B6,B7,CPA3  IF NOT COMPLETE
  
*         CLEAR *TGPM* AND *TSEM* QUEUES
  
          SX6    B0+
          SB6    VTRP 
          SB5    VTEQ 
 CPA4     SA6    B6          CLEAR QUEUE ENTRY
          SB6    B6+B1
          LT     B6,B5,CPA4  IF MORE ENTRIES TO CLEAR 
          EQ     CPAX        RETURN 
 PMP      SPACE  4,10 
**        PMP - PRESET MISCELLANEOUS POINTERS.
* 
*         SETS THE FOLLOWING: 
*                COMMAND TABLE POINTER. 
*                HEADER MESSAGE ADDRESS.
*                WORDS 50 AND 51 FOR SCP/UCP INTERFACE. 
*                IAF ACTIVE AS AN SCP.
*                NETWORK DRIVER STACK ADDRESS.
*                *TGPM* QUEUE STATUS WORDS. 
* 
*         USES   A - 1, 6, 7. 
*                X - 1, 6, 7. 
* 
*         MACROS CALLSS.
  
  
 PMP      SUBR               ENTRY/EXIT 
          SX6    TCOM        SET COMMAND TABLE POINTER
          SX7    TCOM+TCOML 
          LX6    24 
          BX7    X6+X7
          SA7    VCTP 
          SX6    HEDR+3      SET HEADER MESSAGE ADDRESS 
          SA6    VWMP 
  
*         SET UP SYSTEM CONTROL POINT WORDS AND REQUEST SCP STATUS. 
  
          BX6    X6-X6       CLEAR SCP SHUTDOWN FLAG
          SA6    VSHD 
          SA1    PMPB        GET PARAMETER WORDS
          SA2    A1+1 
          BX6    X1          STORE IN SCP AREA
          LX7    X2 
          SA6    SSIW 
          SA7    A6+B1
          CALLSS 0,PMPC,R    SET SCP ACTIVE 
  
*         INITIALIZE *TGPM* QUEUE STATUS WORDS. 
  
          SA1    PMPA        INITIALIZE QUEUE STATUS WORDS
          BX6    X1 
          SA6    VGPL 
          SA1    A1+B1
          BX6    X1 
          SA6    A6+B1
  
*         ZERO *TGPM* AND *TSEM* QUEUES.
  
          SA1    VTRP        SET BEGINNING OF QUEUES
 PMP1     SX6    A1-VTEQ
          ZR     X6,PMP2     IF END OF QUEUES 
          BX6    X6-X6
          SA6    A1          ZERO QUEUE ENTRY 
          SA1    A1+1 
          EQ     PMP1        CLEAR NEXT ENTRY 
  
*         INITIALIZE NETWORK DRIVER STACK ADDRESS.
  
 PMP2     SA1    VNTP        CHECK NETWORK TERMINAL POINTER 
          ZR     X1,PMPX     IF NO NAM INTERFACE - RETURN 
          SA1    NDRO        GET DRIVER ORDINAL 
          SA1    VDRL+X1     READ STACK POINTER 
          AX1    24          SHIFT STACK ADDRESS
          SX6    X1+
          SX7    A1          SET STACK POINTER ADDRESS
          SA6    /IAFEX4/NDSA  STORE STACK ADDRESS
          SA7    /IAFEX4/NSPA  STORE STACK POINTER ADDRESS
          EQ     PMPX        RETURN 
  
  
 PMPA     VFD    6/VSCL,6/VMIL,12/VTSP,12/VTSP,12/VTSP,12/VTLP
          VFD    6/VLCL,6/VMIL,12/VTLP,12/VTLP,12/VTLP,12/VTEQ
 PMPB     VFD    42/5LIAFEX,18/IFSI 
          VFD    1/0,1/1,22/0,18/MAXB,18//SMFIF/BSMF
 PMPC     CON    0
 SAD      SPACE  4,10 
**        SAD - SET INSTRUCTION ADDRESSES.
* 
*         SETS ADDRESS FIELDS IN TABLE REFERENCE INSTRUCTIONS.
* 
*         ENTRY  (TINST) = TABLE PRESET.
*                   12/POS, 1/LWAF, 11/0, 12/PTRA, 12/ADDR
*                      POS  = POSITION COUNTER + 2000B. 
*                      LWAF = USE TABLE LWA IF SET. 
*                      PTRA = POINTER ADDRESS.
*                      ADDR = INSTRUCTION ADDRESS.
*                (B5) = ADDRESS OF *TINST* TABLE. 
*                (B7) = TABLE LENGTH. 
* 
*         EXIT   INSTRUCTION ADDRESS FIELD SET. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 3, 4, 6. 
*                B - 2, 3, 4, 5, 6, 7.
  
  
 SAD      SUBR               ENTRY/EXIT 
 SAD1     SB7    B7-B1       DECREMENT TABLE INDEX
          NG     B7,SADX     IF END OF TABLE - RETURN 
          SA1    B5+B7       READ NEXT TABLE ENTRY
          UX4,B6 X1          (B6) = POSITION COUNTER
          SA2    X1 
          AX1    18          SET TABLE POINTER
          SX1    X1 
          SX3    X1 
          PL     X1,SAD3     IF POSITIVE VALUE WANTED 
          BX1    -X1
  
*         GET POINTER TABLE ENTRY.
  
 SAD3     SA1    X1          READ TABLE POINTER 
          PL     X3,SAD4     IF POSITIVE VALUE WANTED 
          BX1    -X1         COMPLEMENT POINTER 
 SAD4     MX7    -18         SET MASK FOR ADDRESS FIELD 
          SB4    B6-60       SET ADDRESS FIELD SHIFT COUNT
          LX4    59-47       CHECK LWAF BIT 
          NG     X4,SAD5     IF LWA WANTED
          SX6    A1-VBMP     CHECK POINTER
          ZR     X6,SAD5     IF BUFFER MEMORY POINTER 
          AX1    24          SET TABLE FWA
  
*         INSERT TABLE ADDRESS IN INSTRUCTION.
  
 SAD5     BX1    -X7*X1      MASK TABLE ADDRESS 
          AX2    X2,B4       POSITION INSTRUCTION 
          BX3    -X7*X2      MASK ADDRESS FIELD 
          BX2    X7*X2       CLEAR ADDRESS FIELD
          SX3    X3          EXTEND SIGN
          IX3    X3+X1       ADD (SUBTRACT) TABLE ADDRESS 
          BX3    -X7*X3 
          BX2    X2+X3       MERGE ADDRESS FIELD AND INSTRUCTION
          LX6    X2,B6       REPOSITION INSTRUCTION 
          SA6    A2          REWRITE INSTRUCTION
          EQ     SAD1        LOOP FOR NEXT ENTRY
 SPC      SPACE  4,10 
**        SPC - SET PROCESSOR CALLS.
* 
*         SET IAFEX MAIN CONTROL LOOP TO CALL OR BYPASS NETWORK 
*         INTERFACE CODE. 
* 
*         ENTRY  (VNTP) = NETWORK TERMINAL POINTER. 
* 
*         EXIT   MAIN LOOP *RJ* INSTRUCTIONS PRESET.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
  
  
 SPC      SUBR               ENTRY/EXIT 
          SA1    SPCA        ASSUME NO CALLS
          SA2    VNTP 
          ZR     X2,SPC1     IF NO NETWORK
          SA1    SPCB 
 SPC1     BX6    X1 
          SA6    //IAFA 
          EQ     SPCX        EXIT 
  
 SPCA     SB0    0           (NO-OP)
          SB0    0           FILL WORD
 SPCB     RJ     /IAFEX4/NDR (EXECUTE NETWORK DRIVER) 
 STD      SPACE  4,10 
**        STD - START DRIVERS.
* 
*         CLEAR DRIVER INTERLOCKS TO ALLOW DRIVERS TO PICK
*         UP THEIR STACK ADDRESSES AND COMPLETE LOADING.
* 
*         ENTRY  (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. 
*                   12/IL, 24/SA, 12/TC, 12/FT. 
*                      IL = DRIVER INTERLOCK. 
*                      SA = STACK ADDRESS.
*                      TC = TERMINAL COUNT. 
*                      FT = FIRST TERMINAL NUMBER.
* 
*         EXIT   DRIVER INTERLOCK BITS  CLEARED.
* 
*         USES   A - 1, 7.
*                X - 1, 6, 7. 
*                B - 5, 7.
  
  
 STD      SUBR               ENTRY/EXIT 
          SB7    B0          SET DRIVER WORD INDEX
          MX6    12          SET MASK 
          SB5    VDRL        DRIVER WORD POINTER
 STD1     SA1    B5+B7       READ DRIVER WORD 
          SB7    B7+B1       ADVANCE INDEX
          NG     X1,STDX     IF END OF DRIVER WORD TABLE, RETURN
          BX7    -X6*X1      CLEAR INTERLOCK
          SA7    A1 
          EQ     STD1        LOOP FOR NEXT DRIVER 
 WDP      SPACE  4,10 
**        WDP - WAIT DRIVER PRESET COMPLETE.
* 
*         WAIT FOR DRIVER(S) TO SIGNAL COMPLETION OF FIRST PHASE
*         OF INITIALIZATION BY SETTING *VDRL* WORD(S).
* 
*         ENTRY  (VDRL - VDRL+4) = DRIVER INITIALIZATION WORDS. 
*                11/0, 1/IL, 24/DN, 12/TC, 12/CL. 
*                     IL = INTERLOCK (DRIVER RESPONSE) BIT. 
*                     DN = DRIVER NAME. 
*                     TC = TERMINAL (PORT) COUNT. 
*                     CL = ID AND CONVERSION TABLE LENGTH.
* 
*         EXIT   (VMNL) = NUMBER OF DRIVER PORTS. 
*                (VHMP) = 36/HIGHEST MUX PORT, 24/0.
*                (VNTP) = NUMBER OF NETWORK TERMINALS.
* 
*         USES   A - 1, 6.
*                X - 0, 1, 2, 4, 5, 6.
* 
*         CALLS  RCL=.
  
  
 WDP      SUBR               ENTRY/EXIT 
          SX0    B0+         INITIALIZE PORT COUNT
          SX5    VDRL 
 WDP1     RECALL             WAIT 
          SA1    X5          READ DRIVER RESPONSE 
          MX4    -12
          MX2    12 
          BX2    X2*X1
          ZR     X2,WDP1     IF DRIVER PRESET NOT COMPLETE
          NG     X1,WDP2     IF ALL DRIVERS COMPLETE
          AX1    12          MASK PORT COUNT
          BX1    -X4*X1 
          SX5    X5+B1       ADVANCE DRIVER POINTER 
          IX0    X1+X0       UPDATE PORT COUNT
          EQ     WDP1        LOOP FOR NEXT DRIVER 
  
*         STORE DRIVER PORT COUNT AND RETURN. 
  
 WDP2     AX1    12 
          BX6    -X4*X1 
          SA6    VNTP        SET TERMINAL COUNT 
          SX6    X0+         STORE PORT COUNT 
          SA6    VMNL 
          ZR     X6,WDPX     IF NO MUX PORTS
          SX6    X6+VPST-1   SET HIGHEST MUX PORT NUMBER
          LX6    24 
          SA6    VHMP 
          EQ     WDPX        RETURN 
          TITLE  COMMON DECKS.
          SPACE  4
*CALL     COMCARG 
*CALL     COMCCIO 
*CALL     COMCCPM 
*CALL     COMCLFM 
*CALL     COMCOVL 
*CALL     COMCSYS 
*CALL     COMCPFM 
*CALL     COMCDXB 
*CALL     COMCMVE 
*IF DEF,IAF$
*CALL     COMCZTB 
          LIST   X
*CALL     COMCLNI 
          LIST   *
*CALL     COMCLOD 
*ENDIF
          TITLE  INITIALIZATION TABLES AND BUFFERS. 
          SPACE  4,5
**        TICP - TABLE OF *IAFEX* COMMAND PARAMETERS. 
  
  
 TICP     BSS    0
 T        ARG    ATAS,ATPV,400B 
          ARG 
 FBUF     SPACE  4,10 
          USE    BUFFERS
  
**        FBUF - ALL-PURPOSE CIO CIRCULAR BUFFER. 
  
  
 FBUF     BSSZ   1001B       ALL-PURPOSE CIO BUFFER 
 FBUFL    EQU    *-FBUF 
 TINS     SPACE  4,10 
**        TINS - EXECUTIVE OVERLAY INSTRUCTION MODIFICATION TABLE.
  
  
 TINS     BSSZ   300B 
 TINSL    EQU    *-TINS 
          ERRMI  TINSL-//TINSTL 
 TINS2    SPACE  4,10 
**        TINS2 - IAFEX4 INSTRUCTION MODIFICATION TABLE.
  
  
 TINS2    BSSZ   300B 
 TINS2L   EQU    *-TINS2
          ERRMI  TINS2L-/IAFEX4/TINSTL
          QUAL
          SPACE  4,10 
**        GLOBAL SYMBOL DEFINITIONS.
  
  
*IF DEF,IAF$
 IAFEX    EQU    /IAFINI/INI
*ELSE 
 RDFEX    EQU    /IAFINI/INI
*ENDIF
 SSJ=     EQU    0
 RFL=     EQU    *
          EJECT 
          TTL    IAFEX1 - TTY EXECUTIVE PROCESSOR.
          IDENT  IAFEX1,TRQT,PRS,1,0
*COMMENT  IAFEX - EXECUTIVE PROCESSOR.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          BASE   DECIMAL
          SPACE  4
***       IAF - INTERACTIVE FACILITY. 
*         R. E. TATE         70/03/17.
*         P. D. FARRELL      75/02/07.
*         P. D. FARRELL      77/03/17.
*         L. K. TUTTLE, K. F. REHM  81/10/21. 
          SPACE  4
***       IAF PERFORMS INTERACTIVE PROCESSING FOR NOS.  IT CRACKS 
*         COMMANDS FROM INTERACTIVE USERS AND CALLS THE APPROPRIATE 
*         ROUTINE TO PROCESS THE COMMAND.  IT MAKES THE REQUESTS
*         TO DUMP SOURCE INPUT TO DISK AND TO REFILL OUTPUT BUFFERS 
*         FROM DISK.  IT ALSO HANDLES BUFFER MEMORY ALLOCATION. 
*         THE AMOUNT OF MEMORY REQUIRED BY *IAFEX* WILL BE INCREASED
*         AS MORE TERMINALS BECOME ACTIVE.
          SPACE  4
***       PROGRAMS CALLED.
* 
*         1TA - IAFEX AUXILIARY.
*         1TO - TERMINAL INPUT/OUTPUT.
*         1MA - ISSUE DAYFILE MESSAGE.
          EJECT 
 MACROS   TITLE  MACROS.
          SPACE  4
 COMMND   SPACE  4
**        COMMND - THIS MACRO GENERATES THE ENTRY ADDRESSES AND A TAG 
*         WITH THE VALUE OF THE COMMAND BITS (59 - 47) FOR THE *IAFEX*
*         REENTRY QUEUE.
* 
*         DEFINITIONS.
* 
*         PROC = ENTRY POINT OF ROUTINE TO PROCESS THIS COMMAND.
*         SYSR = QUEUE REQUEST TO BE PLACED IN. 
*         NPRO = ADDRESS TO RETURN TO WHEN THIS ENTRY COMPETE.
*         ERRA = ADDRESS TO RETURN TO IF ERROR ON COMPLETION. 
*         FUNC = FUNCTION CODE TO BE PASSED TO THE CALLED PROGRAM.
*         (ALSO SEE TSR FOR ADDITIONAL DOCUMENTATION.)
  
  
 COMMND   MACRO  PROC,SYSR,NPRO,ERRA,FUNC 
 PROC$    EQU    *
          VFD    1/0
          IFC    NE,*SYSR** 
          VFD    5/SYSR-TRQT
          ELSE   1
          VFD    5/0
          IFC    NE,*FUNC** 
          VFD    6/FUNC 
          ELSE   1
          VFD    6/0
          VFD    12/PROC-TSRPROC
          IFC    NE,*ERRA** 
          VFD    18/ERRA
          ELSE   1
          VFD    18/TSA      SET ABORT
          IFC    NE,*NPRO** 
          VFD    18/NPRO
          ELSE   1
          VFD    18/TSA      SET ABORT
          ENDM
 INDEX    SPACE  4
***       INDEX - INDEXED TABLE ENTRY GENERATION. 
* 
* 
*         INDEX GENERATES TABLES WHICH ARE TO BE INDEXED BY VALUES
*         WHICH MAY CHANGE DUE TO ASSEMBLY MODES OR OPTIONS.
* 
* 
*         FIRST CALL - SET START OF TABLE AND GENERATE DEFAULT ENTRIES. 
* 
*NAME     INDEX  MACRO,LENGTH,ADDRESS 
*         ENTRY  *NAME* = NAME OF TABLE.
*                *LENGTH* = TABLE LENGTH. 
* 
*                *MACRO* = NAME OF MACRO WHICH GENERATES TABLE ENTRY. 
*         CON    ADDRESS
* 
*                *ADDRESS* = ADDRESS FIELD OF ENTRY GENERATION
*                            INSTRUCTION.  ADDRESS MUST BE EXPRESSED
*                            AS A DELIMITED CHARACTER STRING.  THIS 
*                            TO ALLOW ALMOST ANYTHING IN AN ADDRESS 
*                            FIELD. 
* 
*         EXIT   *.1* = MICRO OF *MACRO*
*                *NAME* = *.1* = BASE ADDRESS OF TABLE. 
*                *NAMEL* = LENGTH OF TABLE. 
*                *TBLLGH* = LENGTH OF TABLE FOR LOCAL USE.
* 
*         USES   MICRO *.2*.
* 
* 
*         TABLE ENTRY GENERATION -
* 
*NAME     INDEX  ,IND,ADDRESS 
*         ENTRY  *NAME* = NAME OF TABLE ENTRY.
*                *IND* = INDEX AT WHICH ENTRY IS TO BE PLACED.
*                *ADDRESS* = ADDRESS FIELD OF ENTRY GENERATION
*                            INSTRUCTION. 
* 
*         EXIT   *NAME* = ADDRESS OF ENTRY. 
* 
*         USES   MICRO *.2*.
  
  
          MACRO  INDEX,NAME,MAC,IND,ADD 
          IFC    NE,*MAC**
 .1       MICRO  1,, MAC
 .2       MICRO  1,,ADD 
 NAME     ".1"   ".2" 
 .1       SET    NAME 
 TBLLGH   SET    IND
 NAME_L   EQU    IND
          DUP    IND-1,1
          ".1"   ".2" 
          ORG    .1+TBLLGH
          ELSE
 .2       MICRO  1,,ADD 
          ORG    .1+IND 
          LOC    IND
          ".1"   ".2" 
          ORG    .1+IND 
 NAME     BSS    0
          ORG    .1+TBLLGH
          ENDIF 
          ENDM
 INMOD    SPACE  4
**        INMOD - THIS MACRO IN CONJUNCTION WITH THE FOLLOWING OPDEF,S
*         MAKES IT POSSIBLE TO SPECIFY A MODIFIER ON ALL 30 BIT 
*         INCREMENT INSTRUCTIONS.  THIS MODIFER MUST BE IN THE FORM 
*         OF A POINTER TO ONE OF THE TABLE POINTERS THAT IS SET 
*         DYNAMICALLY AT INITILIZATION TIME.  THE INSTRUCTION WILL
*         BE MODIFIED DURING INITILIZATION. 
*         THIS IS USEFUL FOR ACCESSING THE POINTERS THAT ARE
*         DYNAMICALLY SET AT INITILIZATION TIME SUCH AS THE FIRST 
*         WORD ADDRESS OF THE TERMINAL TABLE. 
* 
*         DEFINITIONS.
* 
*         PTRA = POINTER DESIRED. 
*         LWAF = IF DEFINED TAKE LWA INSTEAD OF FWA.
* 
*         EXAMPLE-
*         TA1    B5,VTTP
*         THIS WILL GENERATE A 30 BIT INSTRUCTION OF THE FOLLOWING FORM 
*         SA1    B5+K 
*         WHERE K = THE FIRST WORD ADDRESS OF THE TERMINAL TABLE. 
  
  
 INMOD    MACRO  PTRA,LWAF
          LOCAL  INM1,INM2
          QUAL
*         GENERATE REFERENCE TO SYMBOL. 
 INM1     SET    PTRA 
*         GENERATE TABLE ENTRY. 
 INM1     SET    *P 
 INM2     SET    *
          IFEQ   INM1,60,2
 INM1     SET    0
 INM2     SET    *-1
 TINST    RMT 
          VFD    12/2000B+INM1
          IFC    EQ,*LWAF** 
          VFD    12/0 
          ELSE   1
          VFD    12/4000B 
          VFD    18/PTRA
          VFD    18/INM2
 TINST    RMT 
          QUAL   *
          ENDM
 OPDEFS   SPACE  4
**        OPDEF,S USED WITH INMOD.
  
  
 TAAQ,Q   OPDEF  P1,P2,P3,P4
          SA.P1  A.P2+P3
          INMOD  P4 
          ENDM
  
  
 TAA,Q    OPDEF  P1,P2,P4 
          SA.P1  A.P2+0 
          INMOD  P4 
          ENDM
  
  
 TAAQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SA.P1  A.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TAA,Q,Q  OPDEF  P1,P2,P4,P5
          SA.P1  A.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TABQ,Q   OPDEF  P1,P2,P3,P4
          SA.P1  B.P2+P3
          INMOD  P4 
          ENDM
  
  
 TAB,Q    OPDEF  P1,P2,P4 
          SA.P1  B.P2+0 
          INMOD  P4 
          ENDM
  
  
 TABQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SA.P1  B.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TAB,Q,Q  OPDEF  P1,P2,P4,P5
          SA.P1  B.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TAXQ,Q   OPDEF  P1,P2,P3,P4
          SA.P1  X.P2+P3
          INMOD  P4 
          ENDM
  
  
 TAX,Q    OPDEF  P1,P2,P4 
          SA.P1  X.P2+0 
          INMOD  P4 
          ENDM
  
  
 TAXQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SA.P1  X.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TAX,Q,Q  OPDEF  P1,P2,P4,P5
          SA.P1  X.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TAQ,Q    OPDEF  P1,P3,P4 
          SA.P1  B0+P3
          INMOD  P4 
          ENDM
  
  
 TAQ,Q,Q  OPDEF  P1,P3,P4,P5
          SA.P1  B0+P3
          INMOD  P4,P5
          ENDM
  
  
 TBAQ,Q   OPDEF  P1,P2,P3,P4
          SB.P1  A.P2+P3
          INMOD  P4 
          ENDM
  
  
 TBA,Q    OPDEF  P1,P2,P4 
          SB.P1  A.P2+0 
          INMOD  P4 
          ENDM
  
  
 TBAQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SB.P1  A.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TBA,Q,Q  OPDEF  P1,P2,P4,P5
          SB.P1  A.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TBBQ,Q   OPDEF  P1,P2,P3,P4
          SB.P1  B.P2+P3
          INMOD  P4 
          ENDM
  
  
 TBB,Q    OPDEF  P1,P2,P4 
          SB.P1  B.P2+0 
          INMOD  P4 
          ENDM
  
  
 TBBQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SB.P1  B.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TBB,Q,Q  OPDEF  P1,P2,P4,P5
          SB.P1  B.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TBXQ,Q   OPDEF  P1,P2,P3,P4
          SB.P1  X.P2+P3
          INMOD  P4 
          ENDM
  
  
 TBX,Q    OPDEF  P1,P2,P4 
          SB.P1  X.P2+0 
          INMOD  P4 
          ENDM
  
  
 TBXQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SB.P1  X.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TBX,Q,Q  OPDEF  P1,P2,P4,P5
          SB.P1  X.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TBQ,Q    OPDEF  P1,P3,P4 
          SB.P1  B0+P3
          INMOD  P4 
          ENDM
  
  
 TBQ,Q,Q  OPDEF  P1,P3,P4,P5
          SB.P1  B0+P3
          INMOD  P4,P5
          ENDM
  
  
 TXAQ,Q   OPDEF  P1,P2,P3,P4
          SX.P1  A.P2+P3
          INMOD  P4 
          ENDM
  
  
 TXA,Q    OPDEF  P1,P2,P4 
          SX.P1  A.P2+0 
          INMOD  P4 
          ENDM
  
  
 TXAQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SX.P1  A.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TXA,Q,Q  OPDEF  P1,P2,P4,P5
          SX.P1  A.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TXBQ,Q   OPDEF  P1,P2,P3,P4
          SX.P1  B.P2+P3
          INMOD  P4 
          ENDM
  
  
 TXB,Q    OPDEF  P1,P2,P4 
          SX.P1  B.P2+0 
          INMOD  P4 
          ENDM
  
  
 TXBQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SX.P1  B.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TXB,Q,Q  OPDEF  P1,P2,P4,P5
          SX.P1  B.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TXXQ,Q   OPDEF  P1,P2,P3,P4
          SX.P1  X.P2+P3
          INMOD  P4 
          ENDM
  
  
 TXX,Q    OPDEF  P1,P2,P4 
          SX.P1  X.P2+0 
          INMOD  P4 
          ENDM
  
  
 TXXQ,Q,Q OPDEF  P1,P2,P3,P4,P5 
          SX.P1  X.P2+P3
          INMOD  P4,P5
          ENDM
  
  
 TXX,Q,Q  OPDEF  P1,P2,P4,P5
          SX.P1  X.P2+0 
          INMOD  P4,P5
          ENDM
  
  
 TXQ,Q    OPDEF  P1,P3,P4 
          SX.P1  B0+P3
          INMOD  P4 
          ENDM
  
  
 TXQ,Q,Q  OPDEF  P1,P3,P4,P5
          SX.P1  B0+P3
          INMOD  P4,P5
          ENDM
  
  
 USECMN   SPACE  4
**        USECMN - THIS MACRO GENERATES THE TABLE ENTRIES AND THE 
*         INDEX WORDS FOR PROCESSING USER COMMANDS. 
* 
*         EACH CALL GENERATES A WORD WHICH CONTAINS THE NAME
*         OF THE COMMAND LEFT JUSTIFIED IN DISPLAY CODE AND 
*         THE ADDRESS OF THE COMMAND PROCESSOR.  A SECOND WORD
*         IS ALSO GENERATED WHICH INDICATES WHETHER THE COMMAND IS A
*         VALID SECONDARY COMMAND, THE NUMBER OF LEGAL PARAMETERS,
*         AND THE NUMBER OF TIMES THE COMMAND HAS BEEN PROCESSED. 
*         EACH CALL FOR A COMMAND STARTING WITH A DIFFERENT CHARACTER 
*         THAN THE PREVIOUS CALL SETS A VALUE WHICH IS USED 
*         TO BUILD INDEX WORDS TO THE COMMAND TABLE TO REDUCE 
*         SEARCH TIME. (SEE TCOM TABLE) 
* 
* 
*         TCOM TABLE FORMAT.
* 
*         WORD - 1. 
*         VFD    42/0LCOMMAND,18/PROCESSOR ADDRESS. 
*         WORD - 2. 
*         VFD    6/BITS USED FOR COMMAND FLAGS
*         VFD    6/NUMBER OF PARAMETERS 
*         VFD    12/ FIELD LENGTH 
*         VFD    18/SUB-SYSTEMS VALID 
*         VFD    18/OCCURENCE COUNT 
*         USECMN NAME,ROUT,COUN,BITS,,P 
* 
*         DEFINITIONS.
* 
*         NAME = NAME OF COMMAND. 
*         ROUT = ENTRY ADDRESS OF PROCESSING ROUTINE. 
*         COUN = MAXIMUM NUMBER OF PARAMETERS LEGAL IN A COMMAND. 
*         IF IT IS NOT DEFINED, ONE IS ASSUMED.  IF IT IS DEFINED AS
*         ZERO, IT WILL BE ASSUMED ANY NUMBER ARE LEGAL.
*         BITS = NON NULL HAVE FOLLOWING BIT MEANINGS 
*                BIT         MEANING
*                59          SECONDARY COMMAND. 
*                58          LEGAL COMMAND WHEN CHARGE NUMBER REQUIRED. 
*                57          INCORRECT FOR NETWORK TERMINAL.
*         P1, P2, ETC. = SUB-SYSTEMS COMMAND IS VALID IN.  IF THESE 
*         ARE NEGATIVE THEN THEY ARE THE SUBSYSTEMS 
*         NOT VALID IN.  ALL ENTRIES IN P FIELDS MUST 
*         BE POSITIVE OR ALL NEGATIVE.  IF THE P FIELD IS 
*         NULL, THEN THE DEFAULT IS TAKEN WHICH IS ALL SYSTEMS
*         EXCEPT ACCESS.
  
  
 SCOM     EQU    40B
 CHGR     EQU    20B
 INVN     EQU    10B         INCORRECT FOR NETWORK TERMINALS
  
  
 USECMN   MACRO  NAME,ROUT,COUN,BITS,FL,P 
 U1       MICRO  1,7,*NAME*  TRUNCATE NAME TO SEVEN CHARACTERS
 U2       MICRO  1,1,*NAME*  GET FIRST CHARACTER OF NAME
          IFC    NE,*"U2"*"U3"*,2  IF NEW BEGINNING CHARACTER 
 US"U2"   SET    *
 U3       MICRO  1,1,*"U2"* 
          VFD    42/0L"U1",18/ROUT
          IFC    EQ,*BITS** 
          VFD    6/0
          ELSE   1
          VFD    6/BITS 
          IFC    EQ,*COUN**,1 
          VFD    6/1
          IFC    EQ,*COUN*0*
          VFD    6/77B
          ELSE   2
          IFC    NE,*COUN**,1 
          VFD    6/_COUN
          IFC    EQ,*FL** 
          VFD    12/0 
          ELSE   1
          ERR    FL OPTION NO LONGER AVAIALABLE 
 U4       DECMIC ACCS 
 U5       SET    0
 UA       IFC    EQ,*P*ALL* 
 U5       SET    777777B
 UA       ELSE
 UB       IFC    EQ,*P**     IF NULL ALL SYSTEMS VALID EXCEPT ACCESS
 U5       SET    777777B-1S"U4" 
 UB       ELSE
 U7       MICRO  1,1,*P*
 UC       IFC    EQ,*"U7"*-*
 U5       SET    777777B
          IRP    P
          IFC    NE,*P**,5
 U7       SET    P
 U7       SET    -U7
          ERRMI  U7 
 U4       DECMIC _U7
 U5       SET    U5-1S"U4"
          IRP 
 UC       ELSE
 U5       SET    0
          IRP    P
          IFC    NE,*P**,3
          ERRMI  P
 U4       DECMIC _P 
 U5       SET    U5+1S"U4"
          IRP 
 UC       ENDIF 
 UB       ENDIF 
 UA       ENDIF 
          VFD    18/U5
          VFD    18/0        OCCURENCE COUNT
          ENDM
          NOREF  U1,U2,U3,U4,U5,U6,U7 
 GTM      SPACE  4,15 
**        GTM - GENERATE IAFEX MESSAGE. 
* 
*         GENERATES MESSAGE IN IAFEX FORMAT.  AN *EM* (EXTENDED 
*         MODE) CONTROL BYTE IS INSERTED AT THE BEGINNING OF
*         THE MESSAGE.
*         THIS MACRO IS USED BY OTHER IAFEX MACROS TO DEFINE
*         TERMINAL MESSAGES.
* 
*  LOC    GTM    STR,TB 
* 
*         DEFINITIONS.
* 
*         LOC  = LOCATION SYMBOL.  IF NOT PRESENT, A LITERAL
*                IS GENERATED.  THE ADDRESS OF THE LITERAL
*                MAY THEN BE REFERENCED BY THE SYMBOL *.2*. 
* 
*         STR  = CHARACTER STRING.  MAY CONTAIN CARRIAGE CONTROL
*                MICROS AND MAY NOT CONTAIN THE CHARACTER *+* 
*                (*PLUS* SIGN). 
* 
*         TB   = TERMINATOR BYTE MICRO.  IF OMITTED, *CEB*
*                (0002) IS ASSUMED. 
  
  
          PURGMAC GTM 
          MACRO  GTM,N,STR,TB 
          NOREF  .1,.2,.L 
  
*         DEFINE STRING MICRO.
  
 .1       MICRO  1,,+STR+ 
  
*         SET STRING LENGTH TO MULTIPLE OF TWO CHARACTERS.
  
 .1       MICRO  1,,+"EM"".1"+
 .L       MICCNT .1 
          IFNE   .L,.L/2*2,1
 .1       MICRO  1,,+".1"_'+
  
*         SET TERMINATOR. 
  
          IFC    EQ,$TB$$ 
 .2       MICRO  1,, "CB" 
          ELSE
 .2       MICRO  1,, "TB" 
          ENDIF 
  
*         GENERATE STRING OR LITERAL AND SET LENGTH OF MESSAGE. 
  
 .2       MICRO  1,,+".1"".2"+
          IFC    NE,$N$$
 N        DATA   C+".2"+
          ELSE
 .2       SET    =C+".2"+ 
          ENDIF 
 .L       MICCNT .2 
 .L       SET    .L/10+1
  
          ENDM
 IFMUX    SPACE  4,10 
**        IFMUX - MULTIPLEXER TERMINAL CONDITIONAL JUMP.
* 
*         IFMUX  ADR
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                ADR  = ADDRESS.
* 
*         EXIT   TO ADR IF MULTIPLEXER TERMINAL.
* 
*         USES   B - 6. 
  
  
          PURGMAC IFMUX 
 IFMUX    MACRO  ADR
  TB6 B0,/IAFINI/VHMP 
  LE  B2,B6,ADR 
  ENDM
 IFNET    SPACE  4,10 
**        IFNET - NETWORK TERMINAL CONDITIONAL JUMP.
* 
*         IFNET  ADR
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                ADR  = ADDRESS.
* 
*         EXIT   TO ADR IF NETWORK TERMINAL.
* 
*         USES   B - 6. 
  
  
          PURGMAC IFNET 
 IFNET    MACRO  ADR
  TB6 B0,/IAFINI/VHMP 
  GT  B2,B6,ADR 
  ENDM
 MSG      SPACE  4,10 
**        MSG - GENERATE IAFEX MESSAGE. 
* 
*         MSG    (STR),TB 
* 
*         STR  = MESSAGE STRING.
*         TB   = TERMINATOR BYTE.  *0002* ASSUMED.
  
  
          PURGMAC MSG 
          MACRO  MSG,L,STR,TB 
          LOCAL  A
  IFC NE,*L** 
L GTM (STR),TB
  ELSE
A GTM (STR),TB
  ENDIF 
  ENDM
 SMA      SPACE  4,10 
**        SMA - SET IAFEX MESSAGE ADDRESS.
* 
*         SMA    R,(STR),TB 
* 
*         R    = REGISTER TO BE SET WITH ADDRESS OF 
*                GENERATED MESSAGE LITERAL. 
*         STR  = MESSAGE STRING.
*         TB   = TERMINATOR BYTE.  *0002* ASSUMED.
  
 SMA      MACRO  R,STR,TB 
  GTM (STR),TB
  S_R .2
          ENDM
 TTADD    SPACE  4
**        TTADD - THIS MACRO IS USER FOR GENERATING TERMINAL
*         TABLE ADDRESSES.
* 
*         DEFINITIONS.
* 
*         RTN = REGISTER CONTAINING TERMINAL NUMBER 
*         RER = RESULT REGISTER WHICH WILL BE SET TO TERMINAL TABLE 
*         ADDRESS.
*         XA, XB = TWO X REGISTERS TO BE USED IN CALCULATION. 
*         TTW = TERMINAL TABLE WORD.
  
  
 TTADD    MACRO  RTN,RER,XA,XB,TTW
          R=     XA,RTN 
          IFEQ   VTTL,8,2 
          L_XA   3
 TTA      SKIP
          IFEQ   VTTL,16,2
          L_XA   4
 TTA      SKIP
          R=     XB,VTTL
          I_XA   XA*XB
 TTA      ENDIF 
          T_RER  XA+TTW,VTTP
          ENDM
 PARAM    SPACE  4,55 
**        PARAM - CONSTRUCT PARAMETER BLOCK FOR EJT SYSTEM REQUEST. 
* 
*         CALL FORMATS ARE AS FOLLOWS.
* 
*         PARAM  DTEJ,RC
* 
*                DTEJ - DETACH JOB. 
*                RC - REASON CODE.
* 
*         PARAM  ENEJ,PPI,EPN 
* 
*                ENEJ - ENABLE JOB. 
*                PPI - PREPROCESSOR INDEX.
*                EPN - ADDRESS OF ENTRY POINT NAME, 
*                    - LEFT JUSTIFIED AND ZERO FILLED.
* 
*         PARAM  FJEJ 
* 
*                FJEJ - FREEZE JOB. 
* 
*         PARAM  RCEJ,JSN,MSG 
* 
*                RCEJ - RECOVER JOB.
*                JSN - ADDRESS OF JSN TO RECOVER. 
*                MSG - ADDRESS OF BUFFER FOR MSW1.
* 
*         PARAM  RSEJ 
* 
*                RSEJ - RESTART JOB.
* 
*         PARAM  RTEJ,OT,FG 
* 
*                RTEJ - RESET SYSTEM TIMEOUT ON SUSPENDED JOBS. 
*                OT - ORIGIN TYPE OF JOBS TO RESET. 
*                FG - PRESET FLAGS FIELD. 
* 
*         PARAM  SAEJ,ERF 
* 
*                SAEJ - SET ABORT FLAG ON JOB.
*                ERF - ERROR FLAG TO SET. 
* 
*         PARAM  TJEJ 
* 
*                TJEJ - TERMINATE INTERACTIVE JOB.
* 
* 
*         THE FORMAT OF THE PARAMETER BLOCK IS AS FOLLOWS (NOTE THAT
*         ANY CHANGE SHOULD ALSO BE DOCUMENTED IN *CPUMTR* AND *1MA*).
* 
*(B4)     24/ JSN,12/ FLAGS,6/ PPI,8/ ERR,9/ FCN,1/C
*         42/ NAME,6/ ERF,12/ EJTO
*         3/RES,3/JAL,6/ OT,6/ RC,18/ MSG BUF,24/RES
*         60/ REC WD 1
*         60/ REC WD 2
*         12/ INST,12/ TN,36/ CDC RES 
*         42/ TNAME, 18/ RESERVED 
* 
*         JSN = JOB SEQUENCE NUMBER.
*         FLAGS = RTEJ - BIT 0 = SELECT EJT ENTRIES BY ORIGIN TYPE. 
*                        BIT 1 = DEFAULT TIMEOUT (CLEAR = 0 TIMEOUT). 
*         PPI = PREPROCESSOR INDEX. 
*         ERR = ERROR RETURN (0 ON CALL). 
*         FCN = FUNCTION CODE.
*         C = COMPLETE BIT (0 ON CALL). 
*         NAME = ENEJ - ENTRY POINT NAME. 
*                DTEJ, RCEJ, RSEJ - USER NAME.
*         ERF = ERROR FLAG TO SET.
*         EJTO = EXECUTING JOB TABLE ORDINAL. 
*         RES = RESERVED FOR CDC. 
*         JAL = JOB ACCESS LEVEL LIMIT (RETURNED ON *DTEJ*; 0 ON CALL). 
*         OT = ORIGIN TYPE. 
*         RC = REASON CODE. 
*         MSG BUF = RELATIVE ADDRESS OF BUFFER TO RETURN *MS1W*.
*         REC WD 1 = RECOVERY WORD 1 (NFL WORD RC1N - SEE *PPCOM*). 
*         REC WD 2 = RECOVERY WORD 2 (NFL WORD RC2W - SEE *PPCOM*). 
*         INST = RESERVED FOR INSTALLATIONS.
*         TN = TERMINAL NUMBER. 
*         CDC RES = RESERVED FOR CDC. 
*         TNAME = TERMINAL NAME (RETURNED BY *DTEJ* AND *TJEJ*; 
*                                SPECIFIED ON CALL FOR *RCEJ*). 
* 
* 
*         ENTRY  (B4) = ADDRESS OF PARAMETER BLOCK AREA.
*                (A0) = TERMINAL TABLE ADDRESS. 
* 
*         USES   X - 0, 1, 2, 3, 6, 7.
*                A - 1, 3, 6, 7.
* 
*         CALLS  GRI, PPB.
  
  
 PARAM    MACRO  TYPE,P1,P2,P3
          LOCAL  PARAM1,PARAM2
          MACREF PARAM
          LIST   M
          SX7    TYPE 
          RJ     PPB         PRESET PARAMETER BLOCK 
          LIST   *
 TYPE1    IFC    EQ,$TYPE$DTEJ$ 
          LIST   M
          SA1    A0+VUIT     GET USERNAME 
          MX6    42 
          BX6    X6*X1
          BX6    X2+X6
          SA6    A7+B1       SET WORD ONE - USERNAME AND EJT ORDINAL
          R=     X7,P1       SET REASON CODE
          LX7    42 
          SA7    A6+B1
          RJ     GRI         GATHER RECOVERY INFORMATION
          SX6    B2          SET TERMINAL NUMBER IN WORD 5
          LX6    36 
          SA6    B4+5 
          LIST   *
 TYPE1    ENDIF 
 TYPE2    IFC    EQ,$TYPE$ENEJ$ 
          LIST   M
          BX6    X2 
          IFC    NE,$P2$$,2 
          SA1    P2          GET ENTRY POINT NAME 
          MX2    42 
          BX1    X2*X1
          BX6    X6+X1       MERGE EJT ORDINAL
          SA6    A7+B1       SET WORD 1 
          IFC    NE,$P1$$,3 
          R=     X3,P1
          LX3    18 
          BX7    X3+X7       MERGE PPI
          SA1    A0+VSTT     COPY DISABLED TERMINAL FLAG INTO REQUEST 
          MX6    1
          BX1    X1*X6
          LX1    24-59
          BX7    X1+X7
          SA7    A7          SET WORD ZERO
          LIST   *
 TYPE2    ENDIF 
 TYPE3    IFC    EQ,$TYPE$FJEJ$ 
          LIST   M
          SX6    B2          SUPPLY TERMINAL NUMBER FOR *TSEM*
          LX6    36 
          SA6    A7+5 
          BX6    X2 
          SA6    A7+B1
          LIST   *
 TYPE3    ENDIF 
 TYPE4    IFC    EQ,$TYPE$RCEJ$ 
          LIST   M
          R=     A3,P1
          BX7    X3+X7
          SA1    A0+VUIT     SET USERNAME 
          MX6    42 
          BX6    X1*X6
          SA6    A7+B1       SET WORD ONE - USERNAME AND EJT ORDINAL
          R=     X0,P2
          LX0    24 
          SA7    A7 
          BX6    X0 
          SA6    A6+B1       WORD TWO - BUFFER ADDRESS
          SX6    B2 
          LX6    36 
          SA6    A6+3 
          LIST   *
 TYPE4    ENDIF 
 TYPE5    IFC    EQ,$TYPE$RSEJ$ 
          LIST   M
          SA1    A0+VUIT     GET USER NAME
          MX6    42 
          BX6    X6*X1
          BX6    X2+X6
          SA6    A7+B1       SET WORD ONE - USER NAME AND EJT ORDINAL 
          LIST   *
 TYPE5    ENDIF 
 TYPE6    IFC    EQ,$TYPE$RTEJ$ 
          LIST   M
          BX6    X2 
          SA6    A7+B1       SET WORD ONE - EJT ORDINAL 
          IFC    NE,$P1$$,4 
          R=     X3,P1
          LX3    48 
          BX6    X3 
          SA6    A6+B1       SET WORD TWO - ORGIN TYPE
          IFC    NE,$P2$$,4 
          R=     X0,P2
          LX0    24 
          BX7    X0+X7
          SA7    A7          SET FLAGS
          LIST   *
 TYPE6    ENDIF 
 TYPE7    IFC    EQ,$TYPE$SAEJ$ 
          LIST   M
          R=     X3,P1
          LX3    12-0 
          BX6    X2+X3
          SA6    A7+B1       SET WORD ONE - ERROR FLAG
          LIST   *
 TYPE7    ENDIF 
 TYPE8    IFC    EQ,$TYPE$TJEJ$ 
          LIST   M
          BX7    X2 
          SA7    A7+B1       SET WORD ONE - EJT ORDINAL 
          RJ     GRI         GATHER RECOVERY INFORMATION
          SX6    B2          SET TERMINAL NUMBER IN WORD 5
          LX6    36 
          SA6    B4+5 
          LIST   *
 TYPE8    ENDIF 
          ENDM
 TQST     TITLE  TABLE OF QUEUES. 
**        TQST - TABLE OF QUEUES. 
*         THIS TABLE CONSISTS OF ALL THE QUEUES THAT MAY HAVE 
*         REQUESTS IN THE REENTRY TABLE.
* 
*         THE FORMAT OF THIS TABLE IS AS FOLLOWS
* 
*         CCCC NNNN 00NN NN00 YYYY
*         0000 0000 TTTT TTTT TTTT
*         WHERE-
*         CCCC = NUMBER OF ENTRIES (PACKED FORMAT). 
*         NNNN = FIRST TERMINAL ENTRY.
*         YYYY = LAST TERMINAL ENTRY. 
*         TTTT TTTT TTTT = RESOURCE CONTROL COUNT (RESOURCE CONROL
*         QUEUE). 
  
  
*         QUEUE TABLE.
  
          ORG    TXORG
 TRQT     BSS    0
 SSPA     CON    0           CURRENT ENTRY
 WCMQ     VFD    12/2000B,48/0 WAIT COMPLETION QUEUE
          CON    0
 TIMQ     VFD    12/2000B,48/0 TIME DELAY QUEUE 
          CON    0
 MNWQ     VFD    12/2000B,48/0  MONITOR WAIT QUEUE
          CON    0
  
*         PPU REQUEST QUEUES. 
  
 ITAQ     VFD    12/2000B,48/0
 ITOQ     VFD    12/2000B,48/0
  
*         PPU REQUEST WORDS.
  
 PPUR     BSS    0           PPU REQUEST QUEUE
 PMSG     CON    0           *MSG* AND FL CHANGE REQUEST
          CON    0
          CON    0
  
  
 PITA     CON    1           *1TA* REQUEST
 PITO     CON    1           *1TO* REQUEST
          CON    -0 
  
*         INTERESTING STATISTICS. 
  
 CPBM     CON    0           NUMBER OF TIMES BELOW MINIMUM POT SUPPLY 
  
*         CLOCKS. 
  
 RTIM     CON   0           36 BIT MILLI SECOND CLOCK 
 STIM     CON   0           24 BIT SECOND CLOCK 
 CPTIME   CON   0           CPU TIME AT PROGRAM START 
 START    CON   0           REAL TIME AT START UP 
  
*         HEADER MESSAGE AND DATE AND TIME. 
  
 HEDR     CON    0
 DATE     CON    0
 TIME     CON    0
          BSSZ   8           SYSTEM TITLE AND VERSION 
 HEDRL    EQU    *-HEDR 
          TITLE  SUB-SYSTEM CONTROL TABLES. 
 JCTT     SPACE  4
**        JCCT - JOB COMPLETION MESSAGES AND INPUT DELAY TABLE. 
  
          GTM    ("NL"RUN COMPLETE. "NL") 
 JCTM     EQU    .2          SET LITERAL ADDRESS
  
  
  
 JCCTM    MACRO  A
          VFD    42/,18/A 
          ENDM
  
 JCTT     BSS    0
 JCCT     INDEX  JCCTM,MSYS,( 0 ) 
          INDEX  ,BASS,( JCTM ) 
          INDEX  ,FORS,( JCTM ) 
          INDEX  ,FTNS,( JCTM ) 
          INDEX  ,EXES,( JCTM ) 
          INDEX  ,BATS,( 0 )
          INDEX  ,ACCS,( 0 )
 PCOM     SPACE  4
**        PCOM - TABLE OF MINIMUM MASKS AND ERROR PROCESSORS FOR
*         EACH SYSTEM.  BITS (48 - 59) IN PACKED FORMAT CONTAIN 
*         THE MINIMUM NUMBER OF CHARACTERS TO MASK ON.  BITS (0 - 17) 
*         CONTAIN THE ADDRESS OF THE ERROR PROCESSING ROUTINE.
  
  
 PCOMM    MACRO  A,B
          VFD    12/2000B+A,30/,18/B
          ENDM
  
 PCOM     INDEX  PCOMM,MSYS,( 3,PCM21 ) 
          INDEX  ,BATS,( 7,BAT2 ) 
 RDYA     SPACE  4
**        RDYA - TABLE OF READY MESSAGES. 
  
  
 RDYAM    MACRO  A
          VFD    A
          ENDM
  
 RDYA     INDEX  RDYAM,MSYS,( 60/8LREADY.   ) 
          INDEX  ,BATS,( 60/4L/''B )
 STAA     SPACE  4
**        STAA - TABLE OF SUB-SYSTEM NAMES. 
  
  
 STAAM    MACRO  A
          CON    0L;A 
          ENDM
  
 STAA     INDEX  STAAM,MSYS,( ) 
          INDEX  ,NULS,( "NULS" ) 
          INDEX  ,BASS,( "BASS" ) 
          INDEX  ,FORS,( "FORS" ) 
          INDEX  ,FTNS,( "FTNS" ) 
          INDEX  ,EXES,( "EXES" ) 
          INDEX  ,BATS,( "BATS" ) 
          INDEX  ,ACCS,( "ACCS" ) 
 TTTT     SPACE  4
**        TTTT - TABLE OF TERMINAL TYPES FROM MODVAL. 
  
  
 TTTT     INDEX  CON,ATTMX+1,( -* ) 
          INDEX  ,ATTY+1,( 0LTTY )
          INDEX  ,ATT7+1,( 0L713 )
          INDEX  ,ATTCO+1,( 0LCOR ) 
          INDEX  ,ATTCA+1,( 0LCORAPL )
          INDEX  ,ATTMA+1,( 0LMEMAPL )
          INDEX  ,ATTE+1,( 0LBLKEDT ) 
 TTIS     SPACE  4
**        TTIS - TABLE OF INITIAL SUBSYSTEMS
  
  
 TTIS     INDEX  CON,MSYS,( NULS )
          INDEX  ,AISNUL,( NULS ) 
          INDEX  ,AISBAS,( BASS ) 
          INDEX  ,AISFOR,( FORS ) 
          INDEX  ,AISFTN,( FTNS ) 
          INDEX  ,AISEXE,( EXES ) 
          INDEX  ,AISBAT,( BATS ) 
          INDEX  ,AISACC,( ACCS ) 
 IAF      TITLE  CONTROL LOOP.
**        IAFEX - MAIN CONTROL LOOP.
  
  
 IAF      RJ     DRI         PROCESS DRIVER QUEUE 
          RJ     URT         UPDATE RUNNING TIME
          RJ     STR         PROCESS SYSTEM IAFEX REQUESTS
          RJ     RPC         REFILL POT CHAIN QUEUE 
          RJ     TDQ         PROCESS TIME DELAY QUEUE 
          RJ     PMQ         PROCESS MONITOR WAIT QUEUE 
          RJ     TSR         CHECK FOR REQUEST COMPLETIONS
          RJ     PPU         PROCESS PPU REQUESTS 
          RJ     CSS         CHECK SCP STATUS 
 IAFA     RJ     /IAFEX4/NDR EXECUTE NETWORK DRIVER 
*         SB0    0           (IF NETWORK DRIVER NOT LOADED) 
          RJ     SPR         CHECK FOR FIELD LENGTH CHANGE NEEDED 
          RJ     EPP         ENTER PP REQUESTS
          RJ     DRI         PROCESS DRIVER QUEUE 
          RJ     STR         PROCESS SYSTEM IAFEX REQUESTS
          RJ     RPC         REFILL POT POT CHAIN QUEUE 
          SA1    VANL 
          NZ     X1,IAF1     IF AT LEAST ONE ACTIVE USER
          WAIT   100
 IAF1     RECALL
          EQ     IAF         RE-ENTER MAIN LOOP 
 RPV      SPACE  4,10 
**        RPV - REPRIEVE PROCESSING.
  
  
 RPV      BSS    0           ENTRY
          MESSAGE RPVA,0,R
          RJ     /SMFIF/ISM  IDLE SCREEN MANAGMENT FACILITY 
          SA1    VNTP 
          ZR     X1,RPV1     IF NO NETWORK TERMINALS DEFINED
          RJ     /IAFEX4/NOF NETOFF 
 RPV1     REPRIEVE RPVB,RESET,0 
          EQ     *           WAIT FOR RESET 
  
*         THE FOLLOWING CODE IS USED BY *IAFEX2* TO PREVENT THE 
*         IDLING OF *IAFEX2* OR *IAFEX3* BEFORE ALL USERS HAVE
*         BEEN DETACHED AND IAF ACCESSABILITY HAS BEEN CLEARED. 
  
 RPV2     REPRIEVE  RPVB,RESUME,37B 
          EQ     *           WAIT FOR RESUME OF EXECUTION 
  
  
 RPVA     DATA   C+ IAF REPRIEVED.+ 
 RPVB     RPVBLK RPV
          TITLE  CONTROL SUBROUTINES. 
 CSS      SPACE  4,10 
**        CSS - CHECK SCP STATUS. 
* 
*         CALLS  AUU, CDD, CFL, RMS, SID, SMS.
  
  
*         AFTER RECEIVED MESSAGE PROCESSED. 
  
 CSS7     RJ     /SMFIF/SMS  SEND IAF TO SMF MESSAGES 
  
 CSS      SUBR               ENTRY/EXIT 
          SA1    SSCR 
          PL     X1,CSS7     IF NO MESSAGE RECEIVED 
  
*         CHECK PARAMETER BLOCK HEADER. 
  
          SA2    X1 
          MX6    -6 
          AX2    18 
          BX2    -X6*X2      STATUS FROM CPUMTR 
          SX7    X2-4 
          NG     X7,CSS1     IF NORMAL, OR UCP ABORT, END, OVERRIDE 
          NZ     X7,CSS5     IF UNKNOWN STATUS
  
*         SCP (NAM) ABORT NOTIFICATION. 
  
          SX6    -B1         INDICATE SCP FAILURE 
          SA6    VSHD 
          EQ     CSS6        CLEAR INTERLOCK AND EXIT 
  
*         UCP MESSAGE PROCESSING. 
  
 CSS1     SA3    /SMFIF/ASMF  CHECK ACTIVE SMF WORD 
          SA4    A2+B1       COMPARE TO SENDER
          BX6    X3-X4
          BX7    X4 
          NZ     X6,CSS3     IF NOT SMF, SMF NOT ACTIVE OR RECONNECT
          ZR     X2,CSS2     IF NORMAL UCP MESSAGE
  
*         UCP ABORT, END OR OVERRIDE. 
  
          RJ     /SMFIF/SID  DROP THE SMFEX CONNECTION
          EQ     CSSX        RETURN 
  
*         NORMAL UCP MESSAGE. 
  
 CSS2     RJ     CFL         CHECK POT SUPPLY 
          NG     X2,CSS7     IF POTS LOW DO NOT PROCESS CURRENT MESSAGE 
          RJ     /SMFIF/RMS  RECEIVE MESSAGE FROM SMF 
          EQ     CSS6        COMPLETE PROCESSING
  
*         CHECK FOR NEW CONNECTION TO SMF.
  
 CSS3     MX6    24 
          BX6    X4*X6       CALLER-S JSN 
          SA1    CSSC 
          BX6    X6-X1
          BX1    X6+X2
          ZR     X1,CSS4     IF NEW CONNECTION
          RJ     AUU         ABORT UNRECOGNIZED OR RECONNECTING UCP 
          EQ     CSS6        COMPLETE PROCESSING
  
*         SET UP NEW CONNECTION WITH SMF. 
  
 CSS4     SA7    /SMFIF/ASMF  SET ACTIVE SMF WORD 
          SA1    A2+3        GET BUFFER POINTER 
          MX6    -18
          AX1    18 
          BX1    -X6*X1      ISOLATE SMF BUFFER ADDRESS 
          LX1    24 
          SA2    /SMFIF/SMSA
          MX3    -18         CLEAR ADDRESS FIELD
          LX3    24 
          BX2    X3*X2
          BX6    X1+X2
          SA6    A2 
          SA2    /SMFIF/SMSC
          BX2    X3*X2       CLEAR ADDRESS FIELD
          BX6    X1+X2
          SA6    A2 
          SA2    /SMFIF/ISMA
          BX2    X3*X2       CLEAR ADDRESS FIELD
          SX6    B1          DECREMENT FOR IDLEDOWN ADDRESS 
          LX6    24 
          IX6    X1-X6
          BX6    X6+X2
          SA6    A2 
          EQ     CSS2        INITIATE CONNECTION
  
*         UNKNOWN STATUS CODE.
  
 CSS5     SX1    X2 
          RJ     CDD         CHANGE TO DISPLAY CODE 
          SA6    CSSB 
          MESSAGE  CSSA,0,R 
  
*         CLEAR INTERLOCK ON SCP BUFFER.
  
 CSS6     SA1    SSCR 
          MX6    -59
          BX6    -X6*X1 
          SA6    A1 
          EQ     CSS7        SEND IAF TO SMF MESSAGES 
  
  
 CSSA     DATA   C+** INCORRECT SSC STATUS RECEIVED+
 CSSB     CON    0
          DATA   C+. **+
 CSSC     VFD    24/4LSMF ,36/0 
 EPP      SPACE  4,10 
**        EPP - ENTER PPU REQUESTS. 
* 
*         ENTERS PPU REQUESTS QUEUED IN PP REQUEST WORDS. 
* 
*         ENTRY  (PPUR) = LIST OF FORMATTED PPU REQUESTS. 
  
  
 EPP      SUBR               ENTRY/EXIT 
          SX7    3RSPC
          SA2    B1          CHECK RA+1 CLEAR 
          LX7    42 
          SA1    PPUR-1 
  
*         THE FOLLOWING SHOULD ONLY HAPPEN IF A GARBAGE STORE IS MADE 
*         IN *RA+1*.  THE MODE ERROR IS COMPATIBLE WITH OTHER 
*         PROCESSORS FOR THIS ERROR, AND IT PRESERVES ALL THE 
*         REGISTERS.
  
          NZ     X2,*+400000B  IF (RA+1) .NE. 0, ABORT
 EPP1     SA1    A1+B1       CHECK NEXT REQUEST 
          SX6    A1+
          AX1    36 
          NG     X1,EPPX     IF END OF QUEUE
          ZR     X1,EPP1     IF NO ENTRY
          BX6    X6+X7
          SA6    B1          STORE REQUEST
          XJ
          SA1    A1+
          ZR     X1,EPP1     IF PPU AVAILABLE 
          SA1    VPPL        COUNT NO PPU 
          SX6    B1 
          IX6    X6+X1
          SA6    A1 
          EQ     EPPX        EXIT 
 URT      SPACE  4,10 
**        URT - UPDATE RUNNING TIME.
* 
*         UPDATE IAFEX RUNNING TIME, TIME OF DAY, AND DATE. 
* 
*         CALLS  SYS=.
  
  
 URT      SUBR               ENTRY/EXIT 
          SA5    RTIM        UPDATE REAL TIME 
          RTIME  RTIM 
          SA1    A5 
          MX6    -36
          BX6    -X6*X1 
          SA6    A1 
          AX1    36          SET TIME IN SECONDS
          BX7    X1 
          SA7    STIM 
          BX5    X5-X6
          AX5    12 
          ZR     X5,URTX     IF FOUR SECONDS NOT ELAPSED
          CLOCK  TIME        UPDATE TIME OF DAY 
          DATE   DATE        UPDATE DATE
          EQ     URTX        EXIT 
 STR      SPACE  4,10 
**        STR - PROCESS SYSTEM IAFEX REQUESTS.
* 
*         PROCESS SYSTEM REQUESTS MADE TO IAFEX VIA MONITOR 
*         *TSEM* REQUESTS.
* 
*         CALLS  REQUEST PROCESSOR VIA *PCS*. 
*                ABT IF INCORRECT REQUEST.
  
  
 STR      SUBR               ENTRY/EXIT 
  
*         GET ENTRY FROM MONITOR BUFFER.
  
 STR1     SA1    STRA        CHECK FOR ENTRY
          SA5    X1 
          BX6    X6-X6
          ZR     X5,STRX     IF NO ENTRIES TO PROCESS 
          UX2,B7 X5 
          SX7    X1+B1       UPDATE POINTER 
          SB6    TSTRL       SET COMMAND TABLE LIMIT
          SX2    X7-VTRP-VTRL 
          NZ     X2,STR2     IF NOT LIMIT 
          SX7    VTRP 
  
*         PROCESS ENTRY.
  
 STR2     SA7    A1          UPDATE POINTER 
          SA6    A5          CLEAR ENTRY
          NG     B7,STR3     IF INCORRECT REQUEST 
          GE     B7,B6,STR3  IF INCORRECT REQUEST 
          SA4    TSTR+B7     SET PROCESSOR ADDRESS
          SB7    X4+
          RJ     PCS         PROCESS ENTRY
          EQ     STR1        LOOP 
  
*         PROCESS INCORRECT ENTRY.
  
 STR3     BX7    X5          SAVE INCORRECT REQUEST 
          SX6    3RSTR       SET ERROR CODE 
          SA7    STRB 
          RJ     ABT
          EQ     STRX 
  
 STRA     CON    VTRP 
 STRB     CON    0           SAVE INCORRECT REQUEST CODE
 TCCS     SPACE  4
**        TSTR - IAFEX *TSEM* SYSTEM COMMAND PROCESSING TABLE.
  
  
 TSTR     INDEX  CON,VMXR-2000B,( 0 ) 
          INDEX  ,VDPO-2000B,( DRT )
          INDEX  ,VASO-2000B,( ASO )
          INDEX  ,VMSG-2000B,( DSD )
          INDEX  ,VSDT-2000B,( SDT )
          INDEX  ,VCDT-2000B,( CDT )
          INDEX  ,VSCS-2000B,( SCS )
          INDEX  ,VPTY-2000B,( PTY )
          INDEX  ,VSBS-2000B,( SBS )
          INDEX  ,VSJS-2000B,( SJS )
          INDEX  ,VTLF-2000B,( FLO )
          INDEX  ,VREC-2000B,( RDJ )
          INDEX  ,VITP-2000B,( ITP )
          INDEX  ,VADI-2000B,( ADI )
          INDEX  ,VADO-2000B,( ASO1 ) 
          INDEX  ,VCSM-2000B,( CSM )
          INDEX  ,VDTJ-2000B,( DTJ )
 ADI      SPACE  4,10 
**        ADI - ASSIGN DIRECT INPUT.
* 
*         GETS INPUT FROM INTERNAL TYPEAHEAD QUEUE FOR DIRECT I/O 
*         REQUEST.
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1, 2, 6, 7.
* 
*         NOTE   THE *DIOF* FLAG MUST BE CLEARED ON EXIT TO AVOID 
*                ANOTHER TERMINAL FROM IMPROPERLY INTERPRETING IT.
* 
*         CALLS  CFL, DCI, EDR, PIN, UAC, UNQ.
  
  
 ADI      BSS    0           ENTRY
          IFMUX  PCSX 
 ADI1     RJ     CFL         CHECK POT SUPPLY 
          SX6    B1          SET NO POT REJECT BIT
          LX6    22-0 
          NG     X2,ADI3     IF INSUFFICIENT POTS 
          TA1    B2,VMST     CHECK INTERNAL QUEUE 
          MX7    -12
          BX7    -X7*X1 
          SA7    DIOF        SET/CLEAR DIRECT I/O FLAG
          ZR     X7,ADI3     IF NO INTERNAL QUEUE 
          LX6    23-22       SET INPUT BUSY RETRY BIT 
          SA2    /IAFEX4/IBSY 
          NZ     X2,ADI3     IF NETWORK INPUT BUFFER IN USE 
          RJ     /IAFEX4/UNQ  UNQUEUE INPUT DATA
          RJ     /IAFEX4/PIN  PROCESS INPUT DATA
          ZR     X6,ADI1     IF INSUFFICIENT POTS 
          PL     X0,ADI2     IF OVERFLOW DETECTED 
          SA1    /IAFEX4/RCVH 
          BX0    X1 
          SX7    B1          SET INPUT ACCOUNTING 
          RJ     /IAFEX4/UAC UPDATE ACCOUNTING
          AX0    54 
          SX6    X0-/IAFEX4/BTMS
          NZ     X6,ADI1     IF NOT MESSAGE BLOCK 
          SA6    DIOF        CLEAR DIRECT I/O FLAG
          SA6    /IAFEX4/RCVH  CLEAR HEADER 
          SA6    A6+B1       CLEAR FIRST DATA WORD
  
*         SET POT POINTER INTO VROT FOR SYSTEM. 
  
          SA2    A0+VROT
          SA1    A0+VDPT
          MX0    12 
          BX7    X0*X1       FIRST POT OF LINE
          LX0    48 
          BX2    -X0*X2 
          LX7    48 
          BX7    X7+X2       INSERT POT POINTER 
          SA7    A2          REWRITE VROT 
          SA6    A1          CLEAR VDPT 
          SA3    A0+VDCT     SET INPUT INITIATED
          MX2    1
          LX2    56-59
          BX7    X2+X3
          SA7    A3 
          EQ     PCSX        EXIT 
  
*         DISCARD INPUT IF OVERFLOW.
  
 ADI2     SA1    A0+VDPT
          SX2    VXLL+3 
          BX6    X1+X2
          SA6    A1          REWRITE VDPT WITH OVERFLOW CHARACTER COUNT 
          SX6    B0          SET ENTRY CONDITION
          RJ     /IAFEX4/DCI  DISCARD INPUT 
          BX6    X6-X6
          SA6    DIOF 
          SA6    /IAFEX4/RCVH 
          SA6    A6+B1
          SX6    B1          SET OVERFLOW REJECT BIT
          LX6    22-0 
  
*         SEND REJECT TO SYSTEM.
  
 ADI3     SA1    A0+VROT     SET RESPONSE IN VROT 
          BX6    X6+X1
          SA6    A1          REWRITE VROT 
          SA1    ADIA        INCREMENT REJECT COUNT 
          SX6    X1+B1
          SA6    A1 
          SX6    B0+         CLEAR DIRECT INPUT FALG
          SA6    DIOF 
          EQ     PCSX        EXIT 
  
  
 ADIA     CON    0           *VADI* REJECT/RETRY COUNT
 DIOF     CON    0           DIRECT I/O REQUEST FLAG
 APS      SPACE  4,10 
**        APS - APPLICATION SWITCH. 
* 
*         THIS ROUTINE IS ENTERED FROM ROUTINE *FLO*. 
* 
*         ENTRY  (B3) = POINTER TO POT CONTAINING APPLICATION NAME. 
*                (B4) = ADDRESS OF POT. 
*                (A2) = ADDRESS OF *VDCT*.
*                (X2) = CONTENTS OF *VDCT* SHIFTED. 
* 
*         CALLS  CJA, DPT, EDR, GOP, PMR, PPB.
* 
*         MACROS IFMUX, PARAM.
  
  
 APS      BSS    0           ENTRY
          IFMUX  PCSX        IF MUX TERMINAL
          SX3    B1          SET CONNECTION LOANED BIT
          LX3    47-0 
          LX2    46-59
          BX7    X2+X3
          SA7    A2          REWRITE VDCT 
          MX3    -12
          SA1    A0+VFST
          BX1    X1*X3       CLEAR POT POINTER FIELD
          SX6    B3          SAVE APPLICATION NAME POT POINTER
          BX6    X6+X1
          SA6    A1          REWRITE VFST 
 APS1     SA2    A0+VROT     CHECK COMPLETE BIT 
          LX2    59-0 
          SB3    B0 
          PL     X2,APS2     IF VROT NOT COMPLETE 
          SA1    A0+VSTT     WAIT FOR OUTPUT TO COMPLETE
          MX5    -12
          BX3    -X5*X1 
          ZR     X3,APS3     IF NO OUTPUT 
 APS2     SX5    APS1$
          EQ     PCS1        MAKE QUEUE ENTRY 
  
 APS3     SX7    APS4        SET REENTRY ADDRESS
          EQ     CJA         CLEAR JOB ACTIVITY 
  
 APS4     SX2    /1TD/HUP 
          RJ     EDR         ENTER DRIVER REQUEST 
          EQ     PCSX        EXIT 
 ASO      SPACE  4,20 
**        ASO - ASSIGN OUTPUT.
* 
*         ASSIGNS OUTPUT POT CHAIN TO TERMINAL.  UNUSED POTS
*         AT END OF CHAIN ARE DROPPED.
* 
*         ENTRY  (B3) = FIRST POT OF OUTPUT.
*                     = ZERO IF NO OUTPUT ASSIGNED. 
*                (X7) = 42/ 0,6/ POT COUNT,12/ LAST POT POINTER.
* 
*         CALLS  ABT, ASM, GRT, RPL.
  
  
 ASO      BSS    0           ENTRY
          SA1    A0+VROT     SET COMPLETE 
          SX2    B1 
          BX6    X1+X2
          LX1    59-0 
          NG     X1,ASO4     IF *VROT* ALREADY COMPLETE 
          SA6    A1 
  
*         ENTRY FOR ASSIGNMENT OF OUTPUT FROM DIRECT I/O REQUEST. 
  
 ASO1     BSS    0
          TA4    B2,VRAP     CHECK FOR QUEUE ENTRY
          SA2    A0+VSTT
          SB5    B2          SET TERMINAL NUMBER FOR *GRT*
          LX2    59-48       CHECK LOGOUT FLAG
          NG     X2,IGN      IF LOGOUT IN PROGRESS
          ZR     X4,ASO2     IF NO QUEUE ENTRY
          RJ     GRT
          AX4    48 
          SX3    X4-ETX4$ 
          ZR     X3,IGN      IF PACK COMPLETE, IGNORE 
          SX3    X4-ITA2$ 
          ZR     X3,ASO3     IF LOGIN NOT YET COMPLETE
  
*         ENTRY FROM *DSD* TO ASSIGN *DIAL* MESSAGE.
  
 ASO2     ZR     B3,RES      IF NO OUTPUT TO ASSIGN, CONTINUE JOB 
          MX0    -12
          BX6    X0*X7
          NZ     X6,ASO2.1   IF POT COUNT PROVIDED
          SX6    VLCL*10000B  SET TO MAXIMUM
 ASO2.1   LX6    12          POSITION POT COUNT 
          SX1    B3 
          LX1    3
          TA6    X1,VBMP     STORE IN FIRST WORD OF MESSAGE 
          BX7    -X0*X7 
          SX0    B3          SAVE OUTPUT POT POINTER THROUGH *RPL*
          SB7    B0+
          RJ     RPL         DROP ANY UNUSED POTS 
          SX7    X0 
          MX6    1           CHECK USER FORMAT EFFECTOR MODE
          RJ     ASM         PROCESS MESSAGE
          EQ     PCSX        EXIT 
  
 ASO3     SX5    ASO2$       WAIT TIME OUT DELAY
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         DIAGNOSE INTERLOCK FAILURE OR FAULTY ASSIGNMENT.
  
 ASO4     SX6    3RASO       SET ERROR CODE 
          RJ     ABT
          EQ     PCSX        EXIT 
 CDT      SPACE  4
**        CDT - CLEAR TERMINAL TABLE BIT. 
* 
*         ENTRY  (B3) = BIT NUMBER. 
*                (X7) = TERMINAL TABLE WORD ORDINAL.
* 
*         CALLS  SDT. 
  
  
 CDT      BSS    0
          SX3    B0 
          SB4    X7          SET WORD IN TERMINAL TABLE 
          JP     SDT1 
 CRR      SPACE  4,10 
**        CRR - CONNECTION REQUEST REPLY
* 
*         IF *1TA* HAS BEEN CALLED TO VALIDATE A SECONDARY CONNECTION 
*         REQUEST, THIS ROUTINE WILL ENTER A DRIVER REQUEST TO ACCEPT 
*         OR REJECT THE CONNECTION ACCORDING TO THE RESULTS RETURNED
*         BY *1TA* PROCESSING.
* 
*         USES   X - 2
* 
*         CALLS  EDR
  
  
 CRR      BSS    0
          SX2    /1TD/CRR    IF ERROR CONDITION DETECTED
          EQ     CRR2        SKIP TO REQUEST ENTRY
  
 CRR1     SX2    /1TD/CRR1   IF NO ERROR CONDITION DETECTED 
 CRR2     RJ     EDR         ENTER DRIVER REQUEST 
          EQ     PCSX        EXIT 
 CSM      SPACE  4,10 
**        CSM - CONNECT TO SCREEN MANAGEMENT FACILITY.
* 
*         ENTRY  (B3) = 0 TO REQUEST CONNECTION.
*                (B3) = 1 TO CONFIRM DISCONNECTION. 
* 
*         CALLS  /SMFIF/CSM.
  
  
 CSM      BSS    0
          NZ     B3,CSM1     IF DISCONNECTION CONFIRMATION
          RJ     /SMFIF/CSM  CONNECT TO SCREEN MANAGER
          EQ     PCSX        EXIT 
  
 CSM1     RJ     /SMFIF/DSM  DISCONNECT FROM SCREEN MANAGER 
          EQ     PCSX        EXIT 
 DRT      SPACE  4
**        DRT - DROP POTS.
* 
*         ENTRY  (B3) = FIRST POT OF CHAIN TO BE DROPPED. 
*                (X7) = LAST POT OF CHAIN TO BE DROPPED.  DROP
*                       TO END OF CHAIN IF ZERO.
* 
*         CALLS  DPT. 
  
  
 DRT      BSS    0
          SB4    X7+
          RJ     DPT         DROP POT(S)
          EQ     PCSX        EXIT 
 DSD      SPACE  4
**        DSD - *DSD* DIAL AND WARN MESSAGES. 
* 
*         ENTRY  (B2) = NONZERO = TERMINAL NUMBER FOR DIAL MESSAGE. 
*                     = ZERO = WARNING MESSAGE. 
*                (B3) = MESSAGE POT POINTER.
*                (X7) = LAST POT POINTER OF MESSAGE.
* 
*         CALLS  ASO, DPT.
  
  
 DSD      SB7    B2-VPST
          NG     B7,DSD1     IF WARNING MESSAGE 
  
*         PROCESS *DIAL* MESSAGE. 
  
          SX7    X7+10000B   SET DEFAULT POT COUNT
          SA2    A0+VSTT     CHECK LOGOUT FLAG
          LX2    59-48
          SB5    B2 
          NG     X2,DSD0     IF LOGOUT FLAG SET 
          LX2    59-58-59+48
          NG     X2,DSD0     IF USER BREAK IN PROGRESS
          SX6    B0          ZERO OUT SECOND WORD OF POT CHAIN HEADER 
          SA1    A0+VDCT     CHECK IF USER LOGGED IN
          LX1    59-57
          SA6    B4+B1
          NG     X1,ASO2     IF USER LOGGED IN
 DSD0     SB4    B0 
          RJ     DPT         DROP POTS
          EQ     PCSX        EXIT 
  
*         PROCESS *WARN* MESSAGE. 
  
 DSD1     SA1    VWMP        PROCESS WARNING MESSAGE
          MX2    -24
          LX1    -24
          BX3    -X2*X1      SAVE PREVIOUS CHAIN
          BX6    X2*X1
          SX0    B3 
          SX7    B0          ZERO OUT SECOND WORD OF POT CHAIN HEADER 
          ZR     B3,DSD2     IF NO MESSAGE
          SA7    B4+B1
          SX7    B1          SET POT COUNT FOR MESSAGE
          LX7    24 
          SA7    B4 
          SX4    B4 
          BX6    X6+X4
 DSD2     LX6    24 
          SA6    A1 
          ZR     X3,DSD3     IF NO PREVIOUS CHAIN 
          TX3    X3,-VBMP 
          AX3    3
          SB4    B0          DROP POTS
          SB3    X3 
          RJ     DPT
 DSD3     ZR     X0,PCSX     IF CLEAR OF PREVIOUS WARNING MESSAGE 
          SX5    B1          CLEAR ALL MESSAGE ISSUED FLAGS 
          LX5    50 
          TB3    VSTT+VPST*VTTL,VTTP  SET FWA OF TERMINAL TABLE 
          TB4    VSTT,VTTP,LWA  SET LWA+1 OF TERMINAL TABLE 
 DSD4     SA1    B3          CLEAR MESSAGE ISSUED FLAG
          BX6    -X5*X1 
          SA6    A1+
          SB3    B3+VTTL
          LT     B3,B4,DSD4  IF STILL MORE TERMINALS
          EQ     PCSX        EXIT 
 ITP      SPACE  4,30 
**        ITP - INITIATE TWO PORT MUX DRIVER. 
* 
*         *ITP* CALLS THE *1TM* DRIVER ONLY IF PRIOR DRIVER SHUTDOWN
*         IS COMPLETE.  IF IT IS NOT COMPLETE, A FLAG IS SET IN *VDRL*
*         TO INDICATE TO *DSH* THAT *1TM* CANNOT BE CALLED UNTIL
*         DRIVER SHUTDOWN IS COMPLETE.  IF THE *1TM* DRIVER IS ALREADY
*         RUNNING, NOTHING IS DONE. 
* 
*         ENTRY  (VITM) = *1TM* DRIVER REQUEST WORD.
*                       = 18/DN, 24/0, 18/VA. 
*                         DN = *1TM* DRIVER NAME. 
*                         VA = *1TM* *VDRL* ADDRESS.
*                (VDRL) = 9/0,1/F1,1/F2,1/F3,24/SA,12/TC,12/FT. 
*                    F1 = CALL *1TM* DRIVER FLAG. 
*                    F2 = DRIVER SHUTDOWN COMPLETE FLAG.
*                    F3 = INITIATE DRIVER SHUTDOWN FLAG.
*                    SA = CIRCULAR DRIVER STACK ADDRESS.
*                    TC = TERMINAL COUNT. 
*                    FT = FIRST TERMINAL. 
* 
*         EXIT   EITHER *1TM* IS CALLED IF PREVIOUS DRIVER SHUTDOWN IS
*                COMPLETE, OR F1 IN *VDRL* IS SET TO FLAG *DRI* TO CALL 
*                *1TM* ONCE DRIVER SHUTDOWN HAS COMPLETED.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 3, 4, 6. 
* 
*         CALLS  CTM. 
  
  
 ITP      BSS    0           ENTRY
          SA2    VITM        GET *1TM* *VDRL* ADDRESS 
          SA1    X2          GET *VDRL* ENTRY 
          MX4    12 
          BX3    X4*X1       MASK TERMINATION BITS
          ZR     X3,PCSX     IF *1TM* ALREADY RUNNING 
          SX4    B1 
          LX4    49 
          BX3    X4*X1
          NZ     X3,ITP1     IF PREVIOUS DRIVER SHUTDOWN COMPLETE 
          LX4    1
          BX6    X4+X1       SET CALL *1TM* DRIVER FLAG.
          SA6    X2+         REWRITE *VDRL* WORD
          EQ     PCSX        EXIT 
  
 ITP1     RJ     CTM         CALL *1TM* DRIVER
          EQ     PCSX        EXIT 
 PTY      SPACE  4,10 
**        PTY - SET TERMINAL PARITY.
* 
*         ENTRY  (B3) = 0 = SET EVEN PARITY.
*                     = 1 = SET ODD PARITY. 
* 
*         CALLS  DCR, RDC, RES, SEP, SOP. 
  
  
 PTY      SB7    B3+         SAVE REQUEST CODE
          SB3    /1TD/SOP 
          EQ     B7,B1,PTY1  IF *ODD* 
          SB3    /1TD/SEP 
          EQ     B7,B0,PTY1  IF *EVEN*
          EQ     PCSX        EXIT - INCORRECT REQUEST 
  
 PTY1     RJ     RDC         WAIT VDCT CLEAR
          SX2    B3          SET REQUEST CODE 
          SB3    B0          CLEAR (B3) 
          SX7    RES         SET RESTART ADDRESS
          EQ     DCR         ENTER DRIVER REQUEST 
 RDJ      SPACE  4,10 
**        RDJ - RECOVER DETACHED JOB. 
* 
*         ENTRY  (X7) = JSN OF JOB TO RECOVER, RIGHT JUSTIFIED. 
* 
*         EXIT   JOB RECOVERED AND CURRENT JOB TERMINATED,
*                OR ERROR MESSAGE SENT AND CURRENT JOB CONTINUED. 
* 
*         CALLS  DCR, DPT, FMF, FSM, GOP, GPL, INO, MVA, PMR, PPB,
*                RCM, RDC, REP, RES, RPT, SSP, TXT, UEC, ZTB. 
  
  
 RDJ      BSS    0           ENTRY
          SA1    A0+VSTT
          SX2    401B 
          LX2    48 
          BX2    X1*X2
          NZ     X2,PCSX     IF DETACH OR LOGOUT IN PROGRESS
          SX2    B1          SET DETACH IN PROGRESS 
          LX2    56-0 
          BX6    X1+X2
          SA6    A1 
          LX7    36          SAVE JSN FOR RECOVERY
          SA7    RDJA 
          SX5    B0          GET PARAMETER POTS 
          SB5    B1+B1
          PX5    X5,B5
          RJ     RPT
          SA1    RDJA        SAVE JSN IN PARAMETER POT
          SB3    X7+         SET POT POINTER
          LX7    3           SET POT ADDRESS
          TB4    X7,VBMP
          BX6    X1 
          SA6    B4+EJPB
          ERRPL  EJPB-VCPC   PARAMETERS OVERFLOW POT
          SX5    RDJ1$       WAIT FOR JOB TO RETURN 
          EQ     PCS1        MAKE QUEUE ENTRY 
  
 RDJ1     RJ     GPL         GET POT LINK 
          SX0    B4+         SET MESSAGE ADDRESS
          RJ     SSP         RESTORE PARAMETERS 
          SA3    B4+EJPB     SET RECOVERY JSN 
          PARAM  RCEJ,A3,X0 
          RJ     PMR         PROCESS MONITOR REQUST 
          NZ     X2,REP      IF ERROR RETURNED
          SX7    B3          SAVE POT POINTER TO BEGINNING OF CHAIN 
          MX2    48 
          SA1    A0+VFST
          BX1    X1*X2
          BX7    X7+X1
          SA7    A1 
          SB3    B0          GET TERMINATION PARAMETER POT
          RJ     GOP
          PARAM  TJEJ        TERMINATE CURRENT JOB
          RJ     PMR         PROCESS MONITOR REQUEST
          ZR     X2,RDJ1.1   IF NO ERROR ON TERMINATION 
          RJ     UEC         PROCESS TERMINATION ERROR
 RDJ1.1   SA1    B4+6        SAVE TERMINAL NAME OF TERMINATED JOB 
          MX6    42 
          BX6    X6*X1
          SA6    RDJE 
          SB4    B0+         DROP PARAMETER POT 
          RJ     DPT
          SA1    A0+VFST     GET RECOVERY POT POINTER 
          MX2    -12
          BX3    -X2*X1      GET POT POINTER
          BX6    X2*X1
          SA6    A1 
          SB3    X3 
          LX3    3
          TB4    X3,VBMP
          SA2    RECS        COUNT RECOVERY 
          SX7    B1 
          IX6    X2+X7
          SA6    A2 
  
*         RECONSTRUCT TERMINAL TABLE. 
  
          IFNET  RDJ1.2      IF NETWORK TERMINAL
          SX2    /1TD/SDU    SUSPEND MUX TERMINAL DRIVER
          SX7    RDJ1.2 
          EQ     DCR         ENTER DRIVER REQUEST 
  
 RDJ1.2   MX2    48          GET PRIMARY FILE NAME
          SA1    B4 
          BX5    X2*X1
          SA1    A1+B1
          SX0    IDMS 
          BX6    X1*X2
          AX6    12 
          SA6    RDJA        SAVE SRU COUNT 
          SA3    B4+EJPB     GET JSN
          SA4    A0+VUIT     SET EJT ORDINAL IN VUIT
          BX6    -X2*X1 
          BX4    X2*X4
          BX6    X6+X4
          SA6    A4          REWRITE VUIT 
          SA1    A1+B1       GET NEXT PARAMETER BLOCK WORD
          MX7    -6 
          LX7    6
          BX7    -X7*X1 
          LX7    6
          BX7    X5+X7       MERGE FILE NAME AND MODES
          SA7    A0+VFNT
          SA2    A0+VFST     SET JSN IN VFST
          MX4    -36
          BX6    -X4*X2      CLEAR OLD JSN
          BX6    X6+X3
          SA6    A2          REWRITE VFST 
          SX6    VRIR        (X6) = (VROT) JOB CONTINUATION FLAG
          MX2    -3 
          BX7    -X2*X1      INTERACTIVE SUBSYSTEM
          LX1    59-5 
          SX4    X7-MSYS
          LX7    12 
          NG     X4,RDJ2     IF VALID SUBSYSTEM 
          BX7    X7-X7
 RDJ2     SX4    B1          SET JOB COMPLETE FLAG
          LX4    54-0 
          BX7    X7+X4
          SX2    B1          SET VROT COMPLETE
          SA7    A0+VSTT     WRITE VSTT 
          PL     X1,RDJ3     IF JOB NOT ACTIVE
          SX2    VJIR        SET JOB IN SYSTEM
          SX0    JEMS        JOB ACTIVE MESSAGE 
 RDJ3     BX6    X2+X6       ADD STATUS TO VROT 
          LX1    3           GET RESOURCE LIMITS
          MX2    -2 
          BX2    -X2*X1 
          LX2    19-1 
          BX6    X6+X2       PUT INTO VROT
          SA1    A1+B1       GET FIRST WORD OF RECOVERY TABLE 
          MX2    12 
          BX7    X1*X2
          LX7    12 
          SA6    A0+VROT     WRITE VROT 
          SX4    X7-IFSI
          ZR     X4,RDJ4     IF RECOVERY TABLE FROM *IAF* 
          SX4    X7-RDSI
          NZ     X4,RDJ8     IF RECOVERY TABLE NOT FROM *RDF* 
  
*         PROCESS RECOVERY TABLE. 
  
 RDJ4     SX7    34B
          BX7    X7*X1
          BX6    X6+X7
          SX4    40B
          BX4    X4*X1       GET FILE TYPE FLAG 
          LX4    17-5 
          BX6    X6+X4       SET IN VROT
          SA6    A0+VROT     WRITE VROT 
          SA4    A0+VDCT
          MX6    27 
          LX6    24 
          BX6    X4*X6
          BX2    X1          SECOND COPY OF RECOVER INFORMATION 
          LX2    59-7 
          MX7    -3 
          LX7    12 
          BX7    -X7*X1 
          LX7    51-12
          PL     X2,RDJ5     IF NOT TEXT MODE 
          SX0    TXMS 
 RDJ5     SX2    B1 
          LX2    1-0         GET BRIEF MODE 
          BX4    X2*X1
          LX4    55-1 
          BX7    X7+X4
          BX6    X7+X6
          SA6    A4          REWRITE VDCT 
          LX2    6-1         GET DISTC BIT
          SA4    A0+VSTT
          BX7    X2*X1
          LX7    59-6 
          BX4    X4+X7
          SX2    B1          GET PROMPT BIT 
          BX7    X2*X1
          LX7    53-0 
          BX4    X4+X7
          MX7    -3          GET INITIAL CHARACTER SET
          LX7    15 
          BX7    -X7*X1 
          LX7    18-15
          BX6    X4+X7
          MX7    56          GET TERMINAL TABLE SUBSYSTEM 
          LX7    12 
          BX6    X7*X6       CLEAR CPA SUBSYSTEM
          LX7    18-12
          BX7    -X7*X1 
          AX7    18-12
          BX6    X6+X7       INSERT TERMINAL TABLE SUBSYSTEM
          MX7    -1 
          LX7    8
          BX2    -X7*X1      GET EFFECT MODE
          LX2    55-8 
          BX6    X6+X2
          LX7    9-8         GET SCREEN MODE
          BX2    -X7*X1 
          LX2    49-9 
          BX6    X6+X2
          LX1    59-4 
          SA6    A4          REWRITE VSTT 
          LX2    X1,B1
          LX3    X2,B1
          PL     X3,RDJ6     IF NO JOB CONTINUATION 
          SX0    JEMS 
 RDJ6     PL     X2,RDJ7     IF NO INPUT REQUESTED
          SX0    INMS 
 RDJ7     PL     X1,RDJ7.1   IF NO OUTPUT AVAILABLE 
          SX0    OTMS 
  
*         RECOVER CHARACTER COUNTS. 
  
 RDJ7.1   SA2    A0+VCHT     GET CHARACTER COUNTS 
          SA3    A0+VFST
          SA1    A1+B1       READ RECOVERY WORD 2 
          MX7    -24
          MX6    -12
          LX6    24 
          BX2    X7*X2       CLEAR INPUT/OUTPUT COUNTS
          BX3    X6*X3       CLEAR OVERFLOW COUNT 
          BX7    -X7*X1 
          BX6    -X6*X1 
          BX7    X7+X2       MERGE INPUT/OUTPUT COUNTS
          BX6    X6+X3       MERGE OVERFLOW COUNT 
          SA7    A2          WWRIE INPUT/OUTPUT COUNTS
          SA6    A3          WRITE OVERFLOW COUNT 
  
*         ISSUE RECOVERY MESSAGE. 
  
 RDJ8     SX6    B3          SAVE POT POINTER 
          SA6    RDJB 
          RJ     GPL         GET ADDRESS OF MSW1
          SA1    RDJA        GET SRU COUNT
          RJ     FSM         FORMAT STATUS MESSAGE
          SX6    FSMA        SET MESSAGE ADDRESS
          SB3    B0+
          SB4    A6-FSMA+1   CALCULATE MESSAGE LENGTH 
          RJ     MVA         ISSUE STATUS MESSAGE 
          SB5    RDJC        SET MESSAGE BUFFER POINTER 
          SX3    X0-IDMS
          NZ     X3,RDJ9     IF NOT IDLE
          SA1    A0+VROT     CLEAR JOB CONTINUATION 
          SX7    VRIR 
          BX7    -X7*X1 
          SA7    A1+         REWRITE VROT 
          RJ     RCM         RESET CHARACTER MODE 
 RDJ9     SA1    A0+VDCT
          SA2    =10H CHARACTER 
          BX6    X2 
          LX1    59-51
          SA6    B5 
          MX7    24 
          SA2    =6L SET: 
          SA3    =6LNORMAL
          PL     X1,RDJ10    IF NOT ASCII MODE
          SA3    =5LASCII 
 RDJ10    BX1    X7*X3
          LX1    24 
          BX6    X1+X2
          SA6    A6+B1
          BX3    -X7*X3      REST OF CHARACTER SET
          LX3    24          LEFT JUSTIFIED 
          SA1    =5RMODES 
          BX1    X3+X1
          RJ     ZTB         CONVERT ZERO CHARACTERS TO BLANKS
          SA6    A6+B1
          RJ     FMF         FORMAT MODES FIELD 
          SA1    X0 
          MX2    -12
 RDJ11    BX6    X1          MOVE APPROPRIATE PROMPT MESSAGE
          SX7    A6-RDJD
          PL     X7,RDJ11.2  IF END OF BUFFER 
          SA6    A6+B1
          BX6    -X2*X6 
          SA1    A1+B1
          NZ     X6,RDJ11    IF NO EOL
 RDJ11.2  SX6    A6-RDJC+1   SAVE MESSAGE LENGTH
          SA1    RDJB        GET POT CHAIN TO DROP
          SB3    X1 
          SA6    A1 
          SB4    B0 
          RJ     DPT         DROP POT CHAIN 
          MX2    1           SET READ DATA BIT
          LX2    54-59
          SA1    A0+VDCT
          BX6    X2+X1
          SA6    A1          REWRITE VDCT 
          SA1    RDJB        GET MESSAGE LENGTH 
          SB3    B0 
          SB4    X1 
          SX6    RDJC        SET FWA OF FORMATTED MESSAGE 
          RJ     MVA         SEND MESSAGE TO TERMINAL 
          IFNET  RDJ12       IF NETWORK TERMINAL
          SB3    X0+         SAVE MESSAGE ADDRESS 
          SA1    A0+VDCT     SET INTERRUPT COMPLETE FLAG
          SX6    B1+
          LX6    58-0 
          BX6    X1+X6
          SA6    A1+
          RJ     RDC         ENSURE INTERLOCK CLEAR 
          SX0    B3+         RESTORE MESSAGE ADDRESS
          SB3    B0+
 RDJ12    RJ     GOP         GET POT FOR PARAMETER BLOCK
          PARAM  RSEJ        RESTART JOB
          SA1    RDJE        ADD TERMINATED TERMINAL NAME TO BLOCK
          SA2    B4+6 
          MX3    -18
          BX3    -X3*X2 
          BX6    X1+X3
          SA6    B4+6 
          SX1    X0-TXMS
          ZR     X1,RDJ13    IF TEXT MODE 
          RJ     PMR         PROCESS MONITOR REQUEST
          ZR     X2,RDJ12.1  IF NO ERROR
          SX3    X2-ERER
          ZR     X3,REP      IF DEVICE INACCESSIBLE OR I/O ERROR
 RDJ12.1  SB4    B0+
          RJ     DPT         DROP REQUEST POT 
          EQ     RES         RESTART TERMINAL SESSION 
  
*         FINISH TEXT MODE RECOVERY.
  
 RDJ13    RJ     PMR         PROCESS MONITOR REQUEST
          ZR     X2,RDJ13.1  IF NO ERROR
          SX3    X2-ERER
          ZR     X3,REP      IF DEVICE INACCESSIBLE OR I/O ERROR
 RDJ13.1  RJ     RDC         ENSURE INTERLOCK CLEAR 
          SA1    A0+VDCT     CLEAR READ DATA BIT
          MX6    59 
          LX6    54-0 
          BX6    X6*X1
          SA6    A1          REWRITE VDCT 
          EQ     TXT         ENTER TEXT MODE
  
  
 RDJA     CON    0           TEMPORARY STORAGE
 RDJB     CON    0
 RDJC     BSS    15          FORMATTED MESSAGE BUFFER 
 RDJD     BSS    0           END OF MESSAGE BUFFER
 RDJE     CON    0           TERMINAL NAME OF TERMINATED JOB
 RECS     CON    0           COUNT OF RECOVERED USERS 
  
  
 IDMS     DATA   22L IDLE.  ENTER COMMAND.
 TXMS     DATA   11L TEXT MODE. 
 JEMS     DATA   15L JOB IN SYSTEM. 
 INMS     DATA   17L INPUT REQUESTED. 
 OTMS     DATA   18L OUTPUT AVAILABLE.
 REP      SPACE  4,10 
**        REP - RECOVERY ERROR PROCESSOR. 
  
  
*         PROCESS ERROR RETURN. 
  
 REP      BSS    0           ENTRY
          SX6    X2-NTER
          SX3    X2-JFER
          ZR     X6,REP1     IF NOT DETACHED
          ZR     X3,REP2     IF NOT FOUND 
          SX3    X2-ERER
          SMA    X6,( DEVICE INACCESSIBLE - RECOVERY FAILED."NL") 
          ZR     X3,REP3     IF DEVICE INACCESSIBLE OR I/O ERROR
          SMA    X6,( JOB NOT RECOVERABLE."NL") 
          EQ     REP3        SEND MESSAGE 
  
 REP1     SMA    X6,( JOB NOT DETACHED."NL")
          EQ     REP3        SEND MESSAGE 
  
 REP2     SMA    X6,( JOB NOT FOUND."NL") 
 REP3     SB4    B0+
          RJ     MVA         MOVE DATA AND ASSIGN MESSAGE 
  
*         EXIT TO RESTART JOB.
  
          RJ     CDP         CLEAR DETACH IN PROGRESS 
          SB3    B0          SET NO POT 
          EQ     RES         RESTART TERMINAL SESSION 
 SBS      SPACE  4,10 
**        SBS - SET SUBSYSTEM.
* 
*         ENTRY  (B3) = SUBSYSTEM REQUESTED.
* 
*         CALLS  ABT IF INCORRECT SUBSYSTEM.
  
  
 SBS      BSS    0
          SA1    A0+VSTT     GET WORD VSTT
          SB4    B3-MSYS     CHECK REQUESTED SUBSYSTEM
          MX6    57 
          PL     B4,SBS1     IF INCORRECT SUBSYSTEM 
          SX7    B3 
          LX7    12 
          LX6    12 
          BX6    X6*X1       MASK SUBSYSTEM 
          IX7    X6+X7       INSERT NEW SUBSYSTEM 
          SA7    A1 
          EQ     PCSX        EXIT 
  
 SBS1     SX6    3RSBS
          RJ     ABT
          EQ     PCSX        EXIT 
 SCS      SPACE  4,10 
**        SCS - SET CHARACTER SET MODE. 
* 
*         ENTRY  (X7) = 56/, 1/Y, 3/X.
*                       Y = RESET ENTRY MODE IF NONZERO.
*                       X = 0 = SET NORMAL MODE.
*                         = 1 = SET EXTENDED MODE.
*                         = 2 = RESET TO ENTRY MODE.
* 
*         EXIT   (VDCT) = MODE RESET. 
* 
*         CALLS  RDC, RES.
  
  
 SCS      MX1    -2          ISOLATE ARGUMENT 
          BX1    -X1*X7 
          SB3    X1 
          SB4    B3-B1       TEST ARGUMENT
          LE     B3,B1,SCS1  IF *NORMAL* OR *ASCII* 
          NE     B4,B1,PCSX  IF NOT *RESTORE* 
  
*         PROCESS *RESTORE* FUNCTION. 
  
          SA1    A0+VSTT     GET ENTRY MODE 
          SX7    B1 
          AX1    18 
          BX7    X7*X1       ENTRY MODE BIT 
          SB3    X7          SAVE IN B3 
          EQ     SCS2 
  
*         PROCESS *NORMAL* OR *ASCII* FUNCTION. 
  
 SCS1     LX7    59-3        CHECK FOR ENTRY MODE RESET 
          PL     X7,SCS2     IF NOT RESET 
          SX5    B3 
          SA1    A0+VSTT     CLEAR ENTRY MODE 
          MX7    -1 
          LX1    -18
          BX7    X7*X1
          BX7    X7+X5       SET ENTRY MODE 
          LX7    18 
          SA7    A1          REWRITE VSTT 
 SCS2     RJ     RDC         READ *VDCT*
          SX7    B1          CLEAR MODE 
          LX7    51-0 
          BX1    -X7*X1 
          SX7    B3          SET MODE 
          LX7    51-0 
          IX7    X7+X1
          SA7    A1          REWRITE *VDCT* 
          SB3    B0 
          IFNET  RES         RESTART JOB
          SX2    /1TD/SCE    SET TRANSMISSION MODE FOR MUX TERMINALS
          SX7    RES         SET RESTART ADDRESS
          JP     DCR         ENTER DRIVER REQUEST 
 SDT      SPACE  4,10 
**        SDT - SET TERMINAL TABLE BIT. 
* 
*         ENTRY  (B3) = BIT NUMBER. 
*                (X7) = TERMINAL TABLE WORD ORDINAL.
* 
*         CALLS  ABT. 
  
  
 SDT      BSS    0
          SX3    1
          SB4    X7+
 SDT1     MX2    59 
          SX6    X7-VSTT
          LX3    X3,B3       POSITION BIT 
          NZ     X6,SDT2     IF WRONG WORD
          SA1    A0+B4
          LX2    X2,B3       POSITION MASK
          SB7    B3-60
          BX6    X2*X1       CLEAR BIT
          PL     B7,SDT2     IF BIT OUT OF RANGE
          BX6    X6+X3
          SA6    A1 
          EQ     PCSX        EXIT 
  
 SDT2     SX6    3RSDT
          RJ     ABT
          EQ     PCSX        EXIT 
 SJS      SPACE  4,10 
**        SJS - SET JOB STATUS MESSAGE FOR *ENQUIRE* COMMAND. 
* 
*         ENTRY  (X7) = 0 IF BAD ROLLOUT FILE.
  
  
 SJS      BSS    0           ENTRY
          SA2    A0+VSTT
          SX0    2001B       CHECK USER BREAK OR LOGOUT IN PROGRESS 
          SB5    B2 
          LX0    48 
          RJ     GRT         READ QUEUE ENTRY 
          BX5    X4 
          AX4    48 
          SX4    X4-ITA1$ 
          NZ     X4,SJS1     IF NOT STATUS REQUEST QUEUE ENTRY
          SX6    B0 
          BX0    X0*X2
          SA6    A4+         CLEAR QUEUE ENTRY
          RJ     UQS         UPDATE QUEUE STACK 
          RJ     SSP
          NZ     X0,IGN      IF USER BREAK OR LOGOUT IN PROGRESS
          ZR     X7,STA1     IF REQUEST REJECTED, REISSUE 
          EQ     STA7        REENTER STATUS PROCESSING
  
 SJS1     SX6    3RSJS       SET ERROR CODE 
          RJ     ABT
          EQ     PCSX        EXIT 
          TITLE  CHECK SALVARE FILE.
          TITLE  DRI - PROCESS DRIVER REQUESTS. 
 DRI      SPACE  4
**        DRI - FINDS ALL DRIVER CIRCULAR STACK REQUESTS AND BEGINS 
*         PROCESSING OF THEM. 
* 
*         CALLS  ABT, CTM, DSH, REQUEST PROCESSORS VIA *PDR*. 
  
  
 DRI      SUBR               ENTRY/EXIT 
          SX7    VDRL        SET FIRST STACK POINTER ADDRESS
          SA7    DRIA 
  
*         SET STACK ADDRESS.
  
 DRI1     SA1    X7          READ STACK POINTER 
          NG     X1,DRIX     IF END OF STACK POINTERS, EXIT 
          AX1    24 
          SX7    X1+         SET STACK ADDRESS
          ZR     X7,DRI5     IF NULL STACK
          SA7    DRIB        SAVE STACK ADDRESS 
  
*         GET CIRCULAR STACK ENTRY. 
  
 DRI2     SA2    X1+2        READ IN
          SA3    A2+B1       READ OUT 
          BX4    X2-X3
          ZR     X4,DRI4     IF IN .EQ. OUT 
          SA4    A3+B1       READ LIMIT 
          SA5    X3          READ ENTRY 
          SX6    X3+B1       ADVANCE OUT
          BX4    X6-X4
          NZ     X4,DRI3     IF OUT .NE. LIMIT
          SA1    A2-1        READ FIRST 
          SX6    X1+         SET OUT = FIRST
  
*         PROCESS CIRCULAR STACK ENTRY. 
  
 DRI3     SA6    A3          REWRITE OUT
          UX1,B7 X5          UNPACK ENTRY 
          SB6    TDRIL       SET COMMAND TABLE LIMIT
          NG     B7,DRI6     IF BAD ENTRY 
          GE     B7,B6,DRI6  IF BAD ENTRY 
          SA4    TDRI+B7     GET PROCESSOR ADDRESS
          SB7    X4+
          ZR     B7,DRI6     IF UNDEFINED PROCESSOR 
          RJ     /SMFIF/PDR  PROCESS DRIVER REQUEST 
          SA1    DRIB        RESET STACK ADDRESS
          EQ     DRI2        CONTINUE 
  
*         CHECK COMPLETED STACK FOR SHUTDOWN. 
  
 DRI4     SA1    DRIA        GET STACK POINTER ADDRESS
          SA2    X1          READ STACK POINTER 
          AX2    48          CHECK SHUTDOWN POINTER 
          ZR     X2,DRI5     IF NO SHUTDOWN 
          LX2    59-49+48 
          NG     X2,DRI7     IF SHUTDOWN COMPLETE 
          RJ     DSH         PROCESS SHUTDOWN 
  
*         ADVANCE STACK POINTER AND CONTINUE. 
  
 DRI5     SA1    DRIA        GET STACK POINTER
          SX7    X1+B1       ADVANCE POINTER
          SA7    A1 
          EQ     DRI1        CONTINUE 
  
*         PROCESS BAD STACK ENTRY.
  
 DRI6     SX6    3RDRI       SET ERROR CODE 
          BX7    X5          SAVE INCORRECT REQUEST 
          SA7    DRIC 
          RJ     ABT         PROCESS ERROR
          EQ     DRI5        CONTINUE 
  
*         CHECK CALL *1TM* FLAG.
  
 DRI7     SA1    DRIA        GET CURRENT *VDRL* ADDRESS 
          MX7    -18
          SA2    VITM        GET *1TM* *VDRL* ADDRESS 
          BX2    -X7*X2 
          BX7    X1-X2
          NZ     X7,DRI5     IF NOT *1TM* *VDRL* ADDRESS
          SA1    X2 
          LX1    59-50
          PL     X1,DRI5     IF CALL *1TM* FLAG NOT SET 
          RJ     CTM         CALL *1TM* DRIVER
          EQ     DRI5        CONTINUE 
  
 DRIA     CON    0           CURRENT STACK POINTER ADDRESS
 DRIB     CON    0           CURRENT STACK ADDRESS
 DRIC     CON    0           SAVE INCORRECT REQUEST CODE
 TDRI     SPACE  4
**        TDRI - COMMAND PROCESSING TABLE FOR DRIVER(S) CIRCULAR. 
*         STACK(S). 
  
  
 TDRI     INDEX  CON,/TLX/REQL,( 0 )
          INDEX  ,/TLX/CLI,( CLI )
          INDEX  ,/TLX/DIN,( DIN )
          INDEX  ,/TLX/DLO,( DLO )
          INDEX  ,/TLX/DRP,( DRP )
          INDEX  ,/TLX/DRT,( DRT )
          INDEX  ,/TLX/DTJ,( DTJ )
          INDEX  ,/TLX/ETX,( ETX )
          INDEX  ,/TLX/FLO,( FLO )
          INDEX  ,/TLX/HUP,( HUP )
          INDEX  ,/TLX/IAM,( IAM )
          INDEX  ,/TLX/LPT,( LPT )
          INDEX  ,/TLX/PUB,( PUB )
          INDEX  ,/TLX/RES,( RES )
          INDEX  ,/TLX/RIN,( RIN )
          INDEX  ,/TLX/SAI,( SAI )
          INDEX  ,/TLX/TOT,( TOT )
  
 TDRIL    EQU    *-TDRI      TABLE LENGTH 
 DRI      TITLE  DRI - SUBROUTINES. 
 CLI      SPACE  4
**        CLI -  COMMAND LINE OF INPUT RECEIVED.
* 
*         ENTRY  (B3) = COMMAND POT POINTER.
*                (B4) = COMMAND POT ADDRESS.
*                (X7) = FWA IN COMMAND POT. 
* 
*         EXIT   TO APPROPRIATE COMMAND PROCESSOR.
*                SEE SSP. 
  
  
 CLI      BSS    0
          SA1    A0+VDCT
          SA2    A0+VROT
          MX4    59 
          LX4    5-0         CLEAR *INPUT SATISFIED* BIT
          BX6    X2*X4
          LX4    56-5        CLEAR *INPUT REQUESTED*
          SA6    A2 
          BX6    X1*X4
          SA6    A1+
          SB5    B2+
          RJ     GRT         READ QUEUE ENTRY 
          BX3    X4 
          AX4    48 
          SX5    X4-INP$
          LX1    59-49
          ZR     X5,CLI2     IF EXPLICIT INPUT REQUEST
          SX5    X4-TOT$
          ZR     X5,IGN      IF TIMEOUT IN PROGRESS 
          NG     X1,AUT5     IF AUTO MODE 
          IFNET  CLI1 
          SA2    A0+VDCT     CLEAR AUTO MODE BIT FOR MUX TERMINAL 
          SX6    B1 
          LX6    45-0 
          BX6    -X6*X2 
          SA6    A2 
 CLI1     LX1    59-57-59+49
          NG     X1,PCM      IF USER LOGGED IN, PROCESS COMMAND 
          RJ     INO         ISSUE NULL OUTPUT
          EQ     PCSX        EXIT 
  
*         PROCESS INP$ QUEUE ENTRY. 
* 
*         EXIT   TO INP$ QUEUE ENTRY REENTRY ADDRESS. 
*                (B3) = INPUT POT POINTER.
*                (B5) = QUEUE ENTRY POT POINTER.
*                (B6) = QUEUE ENTRY POT ADDRESS.
*                (PBUF) = CRACKED COMMAND.
  
 CLI2     BX4    X3 
          LX3    -24
          PL     X1,CLI3     IF NOT AUTO MODE 
          IFNET  AUT5 
          MX6    1           CLEAR AUTO MODE BIT FOR MUX TERMINAL 
          BX6    -X6*X1 
          LX6    49-59
          SA6    A1 
 CLI3     SX5    X3-INP 
          ZR     X5,CLI5     IF INPUT TO A RUNNING PROGRAM
          RJ     CCM         CRACK COMMAND
 CLI4     SB5    B2+         SET TERMINAL NUMBER
          RJ     GRT         READ QUEUE ENTRY 
  
*         SET PARAMETERS AND EXIT TO PROCESSOR. 
  
 CLI5     BX6    X6-X6       CLEAR QUEUE ENTRY
          SA6    A4 
          BX6    X4          SAVE QUEUE ENTRY 
          SA6    CLIA 
          RJ     UQS         UPDATE QUEUE STACK 
          RJ     SSP         RESTORE REGISTERS
          SA4    CLIA        GET QUEUE ENTRY
          AX4    12          SET QUEUE ENTRY POT POINTER
          MX1    -12
          BX1    -X1*X4 
          SB5    X1 
          AX4    12          SET REENTRY ADDRESS
          LX1    3           SET QUEUE ENTRY POT ADDRESS
          SB7    X4+
          TB6    X1,VBMP
          JP     B7          EXIT TO PROCESSOR
  
 CLIA     CON    0           QUEUE ENTRY
 DIN      SPACE  4,10 
**        DIN - PROCESS USER DIALED IN. 
* 
*         DIN IS ENTERED WHEN A COMMUNICATIONS LINE BECOMES 
*         ACTIVE.  A POT IS GIVEN TO THE DRIVER FOR THE 
*         ANSWERBACK FROM THE TERMINAL.  REENTRY IS SET TO
*         *LIN* FOR NON-POLLED TERMINALS. 
  
  
 DIN      BSS    0           ENTRY
  
*         DETERMINE IF TERMINAL IS IDLE.
  
 DIN1     SA2    A0+VROT
          SA3    A0+VDCT
          LX2    59-0 
          SA4    A0+VSTT
          MX6    -12
          LX4    59-48
          BX2    -X2+X4 
          BX4    X3+X2
          NG     X4,DIN2     IF LOGOUT, DRIVER REQUEST, OR INCOMPLETE 
          BX6    -X6*X3 
          NZ     X6,DIN2     IF VDCT INTERLOCKED
  
*         REQUEST ANSWERBACK POT. 
  
          PX5    X6,B1
          RJ     CFL         CHECK FIELD LENGTH 
          NG     X2,DIN2     IF POTS IN SHORT SUPPLY
          RJ     RPT         RESERVE POT
          SA1    A0+VDCT
          NZ     X7,DIN3     IF POT RESERVED
  
*         REENTER DIAL IN PROCESSING. 
  
 DIN2     SX5    DIN1$
          BX7    X7-X7
          SB3    B0 
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         PRESET FOR LOGIN PROCESSING.
  
 DIN3     BX3    X7          ASSIGN POT TO DRIVER 
          SX6    2R"EB"      SET TERMINATOR IN POT
          BX7    X1+X7
          LX3    3
          LX6    48-0 
          LX1    59-47
          TA6    X3,VBMP
          SX2    B1          SET *READ DATA*
          LX2    54-0 
          BX7    X7+X2
          SA7    A1          REWRITE VDCT 
          NG     X1,PCSX     IF POLLED LINE 
          SX5    INP$        SET UP QUEUE ENTRY 
          SX7    LIN         SET REENTRY
          LX5    48 
          LX7    24 
          IX5    X5+X7       MERGE QUEUE POINTER AND REENTRY
          SB7    B0          INDICATE NULL QUEUE
          RJ     MQE         MAKE QUEUE ENTRY 
          EQ     PCSX        EXIT 
 DTJ      SPACE  4,15 
**        DTJ - DETACH JOB. 
* 
*         ENTRY  (X7) = REASON CODE.
*                (B3) = POT POINTER, IF PROVIDED. 
*                (B4) = FWA POT, IF PROVIDED. 
* 
*         EXIT   (B3) = POT POINTER TO PARAMETER BLOCK. 
*                (B4) = FWA PARAMETER BLOCK.
*                (X2) = ERROR FIELD, IF ANY.
* 
*         CALLS  CAM, CDP, CJA, CNT, DAP, DIP, DLP, DVP, GOP, MVA, PMR, 
*                SSP, UEC.
* 
*         MACROS PARAM. 
  
  
 DTJ      BSS    0
          SA1    A0+VSTT
          BX2    X1 
          LX1    59-56
          LX2    59-48
          BX2    X1+X2
          NG     X2,PCSX     IF LOGOUT OR DETACH IN PROGRESS
          MX6    1           SET DETACH IN PROGRESS 
          BX6    X1+X6
          LX6    56-59
          SA6    A1 
          SA1    A0+VDCT
          SA7    DTJD        SAVE REASON CODE 
          LX1    59-49
          PL     X1,DTJ1     IF NOT IN AUTO MODE
          RJ     CAM         CLEAR AUTO MODE
          RJ     DAP         DEASSIGN ANY OUTPUT/DRIVER REQUESTS
          RJ     DLP         DUMP ANY REMAINING SOURCE INPUT
          RJ     SSP         RESTORE ENTRY PARAMETERS 
 DTJ1     IFMUX  DTJ1.1 
          SA4    DTJD        SAVE REASON CODE IN VMST 
          RJ     CNT         CANCEL TYPEAHEAD 
          ZR     X1,DTJ1.1   IF NO REENTRY MADE 
          SA6    DTJD        RESTORE REASON CODE
 DTJ1.1   SA1    A0+VDCT     CLEAR *INPUT REQUESTED*
          SX4    B1 
          LX4    56-0 
          BX6    -X4*X1 
          SA6    A1 
          RJ     GOP
          SA1    DTJD 
          BX7    X1 
          SA7    B4+VCPC-1   SAVE REASON CODE 
          SX7    DTJ2        SET RETURN ADDRESS 
          EQ     CJA         CLEAR JOB ACTIVITY 
  
 DTJ2     SX7    B3          SET POT ADDRESS
          LX7    3
          TB4    X7,VBMP
          PARAM  FJEJ        FREEZE JOB 
          RJ     PMR         PROCESS MONITOR REQUEST
          SX5    DTJ3$
          EQ     PCS1        WAIT UNTIL THE JOB HAS ROLLED
  
 DTJ3     SA3    B4+VCPC-1   RESTORE REASON CODE
          PARAM  DTEJ,X3
          RJ     PMR         PROCESS MONITOR REQUEST
          BX0    X2          SAVE RESULT
          RJ     DIP         DROP INPUT POT CHAIN 
          RJ     DVP         DROP *VROT* POT CHAIN
          RJ     SSP         RESTORE B4 
          BX2    X0          RESTORE RESULT CODE
          SA1    B4+2        GET REASON CODE
          MX3    -6 
          AX1    42 
          BX3    -X3*X1 
          SB6    X3-TDJPL 
          PL     B6,DTJ6     IF INVALID REASON CODE 
          SA5    TDJP+X3     GET PROCESSOR ADDRESSES
          SB7    X5 
          AX5    30 
          SB6    X5 
          ZR     X2,DTJ4     IF NO ERRORS REPORTED
          SX1    X2-JOER
          ZR     X1,DTJ3.1   IF JOB NOT ON-LINE 
  
*         IF A *JDER* ERROR CODE IS RETURNED, EITHER THE
*         JOB IS NOT IN *IOJS* OR *DOJS* STATUS, OR THERE 
*         IS A BAD REASON CODE IN THE REQUEST.  IN EITHER 
*         CASE THERE IS NO WAY TO RECOVER FROM THIS ERROR.
  
          SX1    X2-JDER
          ZR     X1,DTJ6     IF UNRECOVERABLE ERROR 
  
*         IF AN *ERER* ERROR CODE IS RETURNED AN UNRECOVERABLE I/O
*         ERROR OCCURRED. 
  
          SX1    X2-ERER
          ZR     X1,DTJ3.1   IF UNRECOVERABLE I/O ERROR 
          JP     B7          RETURN TO ERROR PROCESSOR
  
 DTJ3.1   SA1    A0+VFST     BUILD MESSAGE
          MX6    24 
          BX1    X6*X1       JSN
          SA2    DTJE+2 
          BX2    -X6*X2      CLEAR OLD JSN
          BX6    X1+X2       ADD NEW JSN
          SA6    A2 
          SX6    DTJE 
          RJ     IDM         ISSUE DAYFILE MESSAGE
 DTJ4     SA1    A0+VUIT     CLEAR EJT ORDINAL
          MX3    48 
          BX6    X1*X3
          SA6    A1          REWRITE VUIT 
          JP     B6          EXIT TO NORMAL PROCESSOR 
  
*         RETURN HERE UPON SUCCESSFUL USER DETACH.
  
 DTJ5     SA1    A0+VFST     PUT JSN IN MESSAGE 
          MX6    24 
          MX0    -3          SAVE ACCESS LEVEL LIMIT OF DETACHED JOB
          SA2    B4+2 
          LX2    -54
          BX0    -X0*X2 
          BX6    X1*X6
          BX7    X7-X7
          SA6    DTJB 
          MX6    42          SAVE TERMINAL NAME OF DETACHED JOB 
          SA2    B4+6 
          BX6    X6*X2
          SA6    DTJC 
          SA7    A0+VFNT
          SA7    A0+VCHT
          SA1    A0+VSTT     CLEAR USER EFFECT MODE 
          MX7    1
          LX7    55-59
          BX6    -X7*X1 
          SA6    A1          REWRITE VSTT 
          SX6    DTJA        SET MESSAGE ADDRESS
          SB4    3
          RJ     MVA         MOVE MESSAGE TO POT AND ASSIGN 
          RJ     GOP         GET ONE POT
          SA1    A0+VUIT
          MX6    -6 
          MX7    42 
          BX7    X7*X1       GET USERNAME 
          LX1    48 
          BX6    -X6*X1      GET FAMILY ORDINAL 
          SA6    B4 
          ERRNZ  VUFO        CODE DEPENDS ON VALUE
          SA7    B4+VUNA
          SX6    X0+10B      SET ACCESS LEVEL LIMIT FOR NEW JOB 
          SA6    B4+VLAL
          BX7    X7-X7       ZERO VFST
          SX6    B1          CLEAR VROT 
          SA7    A0+VFST
          SA6    A0+VROT
          SA1    DTJC 
          BX6    X1 
          SA6    B4+VTRY     SET TERMINAL NAME
          SX5    ITA2$       SET 1TA LOGIN REQUEST
          EQ     PCS1        RELOGIN USER 
  
*         RETURN HERE UPON ERROR IN USER DETACH.
  
 DTJ6     RJ     CDP         CLEAR DETACH IN PROGRESS 
          SX1    X2-DLER
          SMA    X6,( DETACH LIMIT EXCEEDED."NL") 
          ZR     X1,PCS5     IF LIMIT EXCEEDED
          SX1    X2-SFER
          SX3    X2-ISER
          SMA    X6,(USER NOT VALIDATED FOR DETACHED SERVICE CLASS."NL")
          ZR     X3,PCS5     IF SERVICE CLASS NOT VALID FOR USER
          SMA    X6,(SERVICE CLASS FULL."NL") 
          ZR     X1,PCS5     IF SERVICE CLASS AT JOB LIMIT
          SX3    X2-ERER
          SMA    X6,( DEVICE INACCESSIBLE - DETACH FAILED."NL") 
          ZR     X3,PCS5     IF DEVICE INACCESSIBLE OR I/O ERROR
          RJ     UEC         PROCESS ERROR CODE 
          SMA    X6,( ERROR ON DETACH."NL") 
          EQ     PCS5        EXIT TO SEND MESSAGE 
  
  
 DTJA     DATA   10H  JOB DETA
          DATA   10HCHED, JSN=
 DTJB     CON    0           JSN DETACH 
 DTJC     CON    0           TERMINAL NAME OF DETACHED JOB
 DTJD     CON    0           DETACH REASON CODE 
 DTJE     DATA   C* DETACH FAILED, JSN=XXXX.* 
 TDJP     SPACE  4,10 
**        TDJP - TABLE OF DETACH PROCESSORS.
* 
*         30/NORMAL RETURN, 30/ERROR RETURN.
  
  
 TDJP     INDEX  VFD,MXDT,(   ) 
          INDEX  ,LDRC,( 30/HUP3,30/FTP5 )  LINE DISCONNECT 
          INDEX  ,TORC,( 30/FTP4,30/FTP5 )  FINISH TIMEOUT PROCESSING 
          INDEX  ,SARC,( 30/PCSX,30/PCSX )  SUBSYSTEM ABORT 
          INDEX  ,UDRC,( 30/DTJ5,30/DTJ6 )  USER DETACH 
          INDEX  ,PDRC,( 30/DTJ5,30/DTJ6 )  PROGRAM INITIATED DETACH
          INDEX  ,PIDL,( 30/HUP3,30/FTP5 )  PROGRAM INITIATED HUP 
 DLO      SPACE  4
**        DLO - PROCESSES DATA LOST CONDITION.
* 
*         ENTRY-
*         SEE SSP 
* 
*         (X7) = REQUEST CODE.
*                0 = DRIVER REENTRY.  THIS MEANS THAT INPUT COULD 
*                NOT BE ACCEPTED BECAUSE A DRIVER REENTRY WAS 
*                ALREADY WAITING TO BE PROCESSED.  THIS 
*                IS DIAGNOSED AS *DATA LOST IAFEX*. 
* 
*                1 = LOST DATA.  THIS MEANS THAT THE LOST DATA STATUS 
*                WAS DETECTED IN THE 667X STATUS.  THIS IS DIAGNOSED
*                AS *DATA LOST DRIVER*. 
  
  
 DLO      SA1    PMSG        CHECK PENDING MESSAGE
          SA2    DLOB+X7     GET ERROR TYPE 
          NZ     X1,PCSX     IF REQUEST PENDING SKIP MESSAGE
          SX1    B2          SET TERMINAL NUMBER
          BX6    X2 
          SA6    DLOA+1 
          RJ     O6S
          SA2    DLOC        SET SYSTEM CALL
          SA6    A6+B1
          BX7    X2 
          SA7    A1 
          EQ     PCSX        EXIT 
  
 DLOA     DATA   H*DATA LOST *
          DATA   0
          DATA   0
 DLOB     DATA   10HIAFEX 
          DATA   10HDRIVER
 DLOC     VFD    18/3R1MA,6/0,12/1,6/0,18/DLOA
 DRP      SPACE  4
**        DRP - DROPS A POT THAT IS NO LONGER NEEDED. 
* 
*         ENTRY-
*         SEE SSP 
  
  
 DRP      BSS    0
          ZR     X7,DRP1     IF NO RESET OF END OF CHAIN
          SB7    B0 
          RJ     RPL         RESET POT LINKAGE
          EQ     PCSX        EXIT 
  
 DRP1     SB4    B3 
          RJ     DPT         DROP POT 
          EQ     PCSX        EXIT 
 ETX      SPACE  4,10 
**        ETX - PROCESS TEXT MODE EXIT. 
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                (B3) = POT TO BE DUMPED. 
*                (X7) = WORD COUNT IN POT.
*                       IF ZERO, NO DUMP IS FORCED. 
* 
*         EXIT   LAST POT IS DUMPED IF NOT EMPTY. 
*                THE SORT FLAG IS CLEARED.
*                THE PRIMARY FILE IS PACKED.
*                *EXIT TEXT MODE.* MESSAGE IS ISSUED. 
* 
*         CALLS  CFC, DMP, MQE, PCB, SFL. 
  
  
 ETX      BSS    0           ENTRY
          SA1    A0+VROT     CHECK FOR ACTIVITY 
          LX1    59-0 
          SX5    ETX1$
          PL     X1,PCS1     IF TERMINAL ACTIVE 
  
*         REENTRY AFTER ACTIVITY CEASES.
  
 ETX1     ZR     B3,ETX2     IF USER ENTERED NO DATA
          SB7    B0          FORCE DUMP 
          SB6    X7          WORD COUNT IN POT
          RJ     DMP         FORCE LAST POT DUMP
          SX5    ETX2$
          EQ     PCS1        EXIT TO MAKE QUEUE ENTRY 
  
*         REENTRY AFTER THE LAST POT IS DUMPED. 
  
 ETX2     SA1    A0+VSTT     CLEAR SORT FLAG
          SX2    B1 
          LX2    54-0 
          BX1    X1+X2       SET JOB COMPLETION FLAG
          LX2    52-54+60 
          BX6    -X2*X1 
          SA6    A1          REWRITE VSTT 
          ZR     B3,ETX2.1   IF USER ENTERED NO DATA
          SB4    B0 
          RJ     DPT         DROP POT 
 ETX2.1   SA1    A0+VFST     SET NEXT OPERATION INDEX 
          SX6    B1+B1       NEXT OPERATION INDEX, PREPROCESSOR INDEX 
          LX6    12 
          BX7    X6+X1
          SA7    A1          REWRITE VFST 
          LX6    48 
          SX7    B0          SET *EPN*
          EQ     BJB1        ENABLE EXECUTION OF THE PACK INSTRUCTION 
  
 ETX3     SX5    ETX4$       WAIT FOR PACK TO COMPLETE
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         REENTRY AFTER THE PACK IS COMPLETE. 
  
 ETX4     SB3    B0          SET NO POT AVAILABLE 
          SMA    X6,("NL" EXIT TEXT MODE."NL")
          EQ     PCS5        ISSUE THE MESSAGE
 FLO      SPACE  4,10 
**        FLO - FORCED LOGOUT, *0004* CONTROL BYTE. 
* 
*         ENTRY  (B3) = APPLICATION NAME POT POINTER IF .NE. 0. 
*                (X7) = 0, IF LOGOUT. 
*                     = 1, IF APPLICATION SWITCH. 
*                     = 2, IF FORCED LOGOUT.
* 
*         EXIT   TO *APS* IF APPLICATION SWITCH.
* 
*         CALLS  CJA, CLE, DIN, DRC1, GOP, HNG, IGN, PMR, PPB, RDC, 
*                SLF, SSI.
* 
*         MACROS PARAM. 
  
  
 FLO      BSS    0
          SA1    A0+VSTT     CHECK DETACH OR LOGOUT 
          BX2    X1 
          LX1    59-56
          LX2    59-48
          BX1    X1+X2
          NG     X1,IGN      IF DETACH OR LOGOUT IN PROGRESS
          SB5    X7+
          NE     B5,B1,FLO0  IF NOT APPLICATION SWITCH
          SA2    A0+VDCT     CHECK CONNECTION TYPE
          LX2    59-47
          NG     X2,IGN      IF THIS CONNECTION IS ALREADY LOANED 
          LX2    59-46-59+47
          PL     X2,APS      IF IAF NOT SECONDARY APPLICATION 
 FLO0     RJ     SLF         SET LOGOUT FLAG
          NZ     B3,FLO0.1   IF POT PROVIDED
          RJ     GOP
          SX1    B0+         PASS ZEROES FOR APPLICATION NAME 
          EQ     FLO1        CONTINUE 
  
 FLO0.1   SA1    B4          GET NEXT APPLICATION NAME
          ZR     B5,FLO1     IF NO FORCE LOGOUT, KEEP APPLICATION NAME
          SA1    =6LLOGOUT   SET APPLICATION NAME FOR FORCE LOGOUT
 FLO1     BX6    X1 
          SA6    B4+EJPB     SAVE APPLICATION NAME
          ERRPL  EJPB-VCPC   PARAMETERS OVERFLOW POT
          SX7    FLO2        SET RETURN ADDRESS 
          EQ     CJA         CLEAR JOB ACTIVITY 
  
 FLO2     PARAM  FJEJ        FORCE JOB TO ROLLOUT 
          RJ     PMR
 FLO3     SX5    FLO4$       WAIT FOR ACTIVITY TO COMPLETE
          EQ     PCS1        MAKE QUEUE ENTRY 
  
 FLO4     SA1    B4+EJPB     SAVE NEXT APPLICATION
          SA2    A0+VFNT
          MX0    -18
          BX2    -X0*X2 
          BX6    X0*X1
          BX6    X6+X2
          SA6    A2          REWRITE VFNT 
          PARAM  TJEJ        TERMINATE JOB
          RJ     PMR
          ZR     X2,FLO5     IF NO ERROR
          RJ     UEC         PROCESS TERMINATION ERROR
 FLO5     SA1    A0+VUIT     CLEAR EJT ORDINAL
          MX0    42 
          BX6    X0*X1
          SA6    A1 
          BX6    X6-X6
          RJ     SSI         SEND SRU INFORMATION 
          IFNET  HNG         IF NETWORK TERMINAL
          SA1    A0+VFNT
          SA2    =5LHELLO 
          SA3    =5LLOGIN 
          SX4    3RIAF
          LX4    42 
          MX0    42 
          BX1    X0*X1
          BX2    X1-X2
          BX3    X1-X3
          BX4    X1-X4
          ZR     X2,FLO6     IF RELOGIN REQUIRED
          ZR     X3,FLO6     IF RELOGIN REQUIRED
          NZ     X4,HNG      IF RELOGIN NOT REQUIRED
 FLO6     RJ     RDC         WAIT FOR DRIVER TO ACCEPT MESSAGE
          RJ     CLE         CLEAN UP TERMINAL TABLE
          SX7    DIN         SET REENTRY ADDRESS
          SX2    /1TD/LGI    SET RELOGIN REQUEST
          EQ     DCR1        MAKE DRIVER REQUEST
 HUP      SPACE  4
**        HUP - PROCESSES THE COMMAND THAT SAYS A USER HAS HUNG UP. 
* 
*         IF A NETWORK TERMINAL IS IN THE PROCESS OF LOGGING
*         OUT OR HAS COMPLETED LOGOUT, EXIT *HUP* IMMEDIATELY.
*         IN THE CASE OF MUX TERMINALS, *HUP* MUST ALWAYS BE
*         EXECUTED SO NO OUTPUT GOES TO TERMINALS AFTER THE 
*         PHONE IS HUNG UP, AND THE TERMINAL TABLE GETS CLEANED UP. 
* 
*         CALLS  CLE, DAP, DLP, DPT, DQP, SLF, SSP. 
  
  
 HUP      BSS    0
          IFMUX  HUP0.1 
          SA1    A0+VDCT     CHECK IF LOGOUT HAS ALREADY BEGUN
          SA2    A0+VSTT
          LX1    59-57
          LX2    59-48
          BX2    -X1+X2 
          NG     X2,PCSX     IF LOGOUT IN PROGRESS OR JUST COMPLETED
 HUP0.1   RJ     DAP         DROP ASSIGNED POTS 
          RJ     SSP
          SA1    A0+VDCT     CLEAR INTERRUPT COMPLETE FLAG
          MX2    1
          LX2    -1 
          BX6    -X2*X1 
          SA6    A1 
          SX7    HUP1        SET REENTRY ADDRESS
          EQ     CJA         CLEAR JOB ACTIVITY 
  
 HUP1     SA1    A0+VUIT     CHECK EJT ORDINAL
          MX2    -12
          BX2    -X2*X1 
          ZR     X2,HUP3     IF NO EJT ORDINAL
          RJ     DLP         DUMP LAST INPUT POT
          ZR     B6,HUP2     IF NO DUMP IN PROGRESS 
          SX5    HUP2$
          EQ     PCS1        WAIT DUMP COMPLETE 
  
 HUP2     SX7    LDRC        SET LINE DISCONNECT REASON CODE
          IFMUX  HUP2.1 
          SA1    /IAFEX4/SHDF 
          PL     X1,HUP2.1   IF NOT NETWORK SHUTDOWN
          SX7    SARC        SET SUBSYSTEM ABORT REASON CODE
 HUP2.1   EQ     DTJ         DETACH JOB 
  
*         RETURN HERE AFTER JOB DETACH. 
  
 HUP3     RJ     DQP         DROP QUEUE ENTRY POTS
          SA1    A0+VFST     CHECK FOR SPARE POT POINTER
          MX0    -12
          BX6    X0*X1       CLEAR POT POINTER
          BX1    -X0*X1 
          ZR     X1,HUP4     IF NO POT TO DROP
          SA6    A1 
          SB3    X1 
          SB4    B0          DROP TO END OF CHAIN 
          RJ     DPT         DROP SPARE POT 
 HUP4     RJ     SLF         SET LOGOUT FLAG
          SX7    3RBYE       SET NVF PARAMETER
          LX7    42 
          SB3    B0 
          SA7    A0+VFNT
          IFNET  HNG         HANG UP PHONE FOR NETWORK TERMINAL 
          RJ     CLE         CLEAR TERMINAL TABLE 
          EQ     PCSX        EXIT 
 LPT      SPACE  4
**        LPT - LINKS A NEW POT TO THE CURRENT CHAIN. 
* 
*         ENTRY  (B3) = POT TO WHICH NEW POT IS TO BE LINKED. 
* 
*         CALLS  RPT. 
  
  
 LPT      BSS    0
          SX5    B3          SET PARAMETERS TO REQUEST A POT
          PX5    X5,B1
          RJ     RPT         REQUEST POT
          EQ     PCSX        EXIT 
 PUB      SPACE  4,10 
**        PUB - PROCESS USER BREAKS.
* 
*         ENTRY  (X7) = USER BREAK CODE.
*                (B3) = POT POINTER PASSED BY DRIVER. 
* 
*         EXIT   JOB STEP TERMINATED IF USER BREAK TWO ON A 
*                NON-DISABLED TERMINAL. 
*                REENTRY SET FOR *RST* IF USER BREAK ONE ON A 
*                NON-DISABLED TERMINAL. 
*                USER BREAK ERROR FLAG SET IF A DISABLED TERMINAL.
* 
*         CALLS  CAM, CJA, DAP, DIP, DLP, DPT, DQP, DVP, GOP, GRT, INO, 
*                MVA, PMR, SRR, SSP.
* 
*         MACROS PARAM, SMA.
* 
*         NOTES  A TERMINAL IS DISABLED IF THE JOB STEP CURRENTLY 
*                EXECUTING ON THAT TERMINAL HAS REPRIEVE PROCESSING 
*                ENABLED FOR USER BREAKS. 
  
  
 PUB      BSS    0           ENTRY
          RJ     DQP         DROP ANY POTS PASSED BY THE DRIVER 
          IFMUX  PUB0 
          TA1    B2,VMST
          PL     X1,PUB12    IF TERMINAL IS NOT ON-LINE 
 PUB0     SA2    A0+VSTT
          SA1    A0+VDCT
          MX3    -12
          SX4    0401B       CHECK FOR LOGOUT OR DETACH IN PROGRESS 
          BX3    -X3*X1 
          LX1    59-57
          LX4    48 
          BX4    X2*X4
          LX2    59-58
          NG     X2,PCSX     IF USER BREAK ALREADY IN PROGRESS
          NZ     X4,PUB1     IF LOGOUT OR DETACH IN PROGRESS
          NG     X1,PUB2     IF LOGIN COMPLETE
 PUB1     NZ     X3,PUB12    IF OUTPUT/FUNCTION REQUEST ALREADY QUEUED
          EQ     PUB11       SET COMPLETE FLAG TO RESTART DRIVER
  
 PUB2     MX6    1           SET BREAK IN PROGRESS
          BX6    X2+X6
          LX6    58-59       REALIGN VSTT 
          SA6    A2 
          RJ     CAM         CLEAR AUTO MODE
          RJ     DAP         DEASSIGN ANY OUTPUT/DRIVER REQUESTS
          RJ     DLP         DUMP ANY REMAINING SOURCE INPUT
          RJ     SSP         RESTORE THE USER BREAK CODE
          SB3    X7          SAVE USER BREAK CODE THROUGH *CJA* 
          SX7    PUB3 
          EQ     CJA         CLEAR JOB ACTIVITY 
  
 PUB3     SX0    B3          SAVE USER BREAK CODE THROUGH *GOP* 
          SB3    B0 
          RJ     GOP         GET A POT FOR THE PARAMETER BLOCK
          SX7    X0+
          SA7    B4+VCPC-1   SAVE USER BREAK CODE THROUGH *PMR* 
          PARAM  FJEJ        FREEZE JOB 
          RJ     PMR         PROCESS MONITOR REQUEST
          SA3    B4+VCPC-1   RESTORE USER BREAK CODE
          SA1    A0+VSTT     CHECK DISABLED TERMINAL CONTROL
          MX2    1
          SX7    X3-TIET
          BX2    X2*X1
          BX2    X2+X7
          SX5    PUB4$
          ZR     X2,PCS1     IF USER BREAK ONE WITHOUT DISTC
          PARAM  SAEJ,X3     SET USER BREAK ERROR FLAG
          RJ     PMR         PROCESS MONITOR REQUEST
          SX5    PUB4$
          EQ     PCS1        WAIT UNTIL THE JOB HAS ROLLED
  
*         CONTROL IS NOT RETURNED UNTIL THE JOB HAS ROLLED OUT
*         AND THE USER BREAK ERROR FLAG HAS BEEN PLACED IN
*         THE EJT ENTRY.
  
 PUB4     SA1    A0+VSTT
          NG     X1,PUB9     IF DISABLED TERMINAL 
          SA1    B4+B1       RESTORE USER BREAK CODE
          MX7    -12
          AX1    12 
          BX7    -X7*X1 
          SX7    X7-TAET
          ZR     X7,PUB5     IF USER BREAK 2 ON NON-DISABLED TERMINAL 
          SB5    B0          USER BREAK 1 ON NON-DISABLED TERMINAL
          SX7    RST
          RJ     SRR         MAKE INP$ ENTRY TO RETURN AT *RST* 
          SMA    X6,("NL" *INTERRUPTED*"NL")
          EQ     PUB8.1      ASSIGN MESSAGE 
  
 PUB5     SB4    B0+         RETURN THE PARAMETER BLOCK POT 
          RJ     DPT
          RJ     DVP         DROP VROT POT CHAIN
          SX6    3           SET NEXT OPERATION INDEX 
          SA1    A0+VFST
          LX6    12 
          BX6    X1+X6
          SA6    A1 
          SX7    B0          SET *EPN*
          SX6    B0          SET *PPI* NOT TO SORT FILE 
          EQ     BJB1        BEGIN JOB
  
 PUB7     SX5    PUB8$
          EQ     PCS1        MAKE QUEUE ENTRY 
  
 PUB8     SA1    A0+VSTT     CLEAR RUN COMPLETE AND JOB COMPLETE
          SX2    0110B
          LX2    48 
          BX6    -X2*X1 
          SA6    A1 
          MX3    59 
          SA2    A0+VROT     CLEAR LIST COMPLETE
          LX3    6-0
          BX6    X3*X2
          SA6    A2 
          SA2    A0+VDCT     CLEAR READ DATA
          LX3    54-6 
          BX2    X3*X2
          LX1    51-18
          LX3    51-54
          BX2    X3*X2       CLEAR EXTENDED/ASCII CHARACTER SET 
          BX6    -X3*X1 
          IX6    X6+X2       RESTORE INITIAL CHARACTER SET
          SA6    A2+         REWRITE VDCT 
          SMA    X6,("NL" *TERMINATED*"NL") 
 PUB8.1   IFMUX  PUB10       ASSIGN MESSAGE 
          TA1    B2,VMST     CLEAR CONTINUATION FLAGS 
          MX7    55 
          LX7    23 
          BX7    X7*X1
          SA7    A1          REWRITE VMST 
          EQ     PUB10       ASSIGN MESSAGE 
  
 PUB9     SA1    A0+VROT     CLEAR OUTPUT AVAILABLE/INPUT REQUESTED 
          MX6    58 
          LX6    3-0
          BX6    X1*X6
          SX1    B1          SET EOF
          LX1    13-0 
          BX6    X1+X6
          SA6    A1+
          SX6    B0          SET NO MESSAGE 
  
*         ISSUE MESSAGE AND REENABLE THE DRIVER.
*         THE MESSAGE ACTS AS AN INTERLOCK TO KEEP IAF FROM 
*         WRITING IN VDCT UNTIL THE DRIVER HAS CLEARED THE
*         INTERRUPT COMPLETE FLAG.
  
 PUB10    SA1    A0+VSTT     CLEAR BREAK IN PROGRESS FLAG 
          SX7    B1 
          LX7    58-0 
          BX7    -X7*X1 
          SA7    A1 
          ZR     X6,PUB11    IF NO MESSAGE TO ASSIGN
          SB4    B0 
          RJ     MVA         ASSIGN INTERLOCKING OUTPUT MESSAGE 
          EQ     PUB12       CLEAR INTERRUPT COMPLETE FLAG
  
 PUB11    RJ     INO         PROVIDE THE DRIVER WITH A POT
 PUB12    IFNET  PUB13
          SB5    B2+
          RJ     GRT         CHECK NEXT REENTRY 
          ZR     X4,PUB14    IF NONE
          AX4    24 
          SX1    X4-HUP1
          NZ     X1,PUB14    IF (X7) NOT *HUP1* 
          AX4    24 
          SX4    X4-CJA$
          ZR     X4,PCSX     IF *CJA* FOR HUP, EXIT 
          EQ     PUB14       SET INTERRUPT COMPLETE 
  
 PUB13    RJ     DIP         DROP INPUT POT CHAIN 
          SA2    A0+VCHT     SET DRIVER REENTRY 
          MX6    12 
          BX6    X6*X2
          LX6    12 
          SX6    X6+/IAFEX4/NDR-/IAFEX4/BRK8
          NZ     X6,PCSX     IF USER BREAK DRIVER REENTRY GONE
 PUB14    SA1    A0+VDCT     SET INTERRUPT COMPLETE FLAG
          SX6    B1 
          LX6    58-0 
          BX6    X1+X6
          SA6    A1 
          EQ     PCSX        EXIT 
 RES      SPACE  4
**        RES - REQUEST NEXT ASSIGNMENT.
* 
*         CHECKS CURRENT TERMINAL STATUS AND MAKES NEW ASSIGNMENT IF
*         NEEDED. 
* 
*         ENTRY  (SEE SSP). 
*                (B3) = 0.
* 
*         CALLS  ASM, COI, COP, EDR, GRT, INP, PIP, RDY, URL. 
  
  
 RES      BSS    0
          SA1    A0+VROT
          MX4    -12
          LX1    59-0 
          PL     X1,PCSX     IF ACTIVE, EXIT
          MX7    14 
          LX1    1
          SA3    A0+VSTT     CHECK FOR SECONDARY OUTPUT ASSIGNMENT
          SA2    A0+VDCT     CHECK FOR OUTPUT CURRENTLY AVAILABLE 
          LX7    12 
          BX6    X7*X2
          NZ     X6,PCSX     IF OUTPUT, DRIVER REQUEST, OR INTERRUPT ACK
          BX7    -X4*X3 
          BX5    X1 
          ZR     X7,RES1     IF NO OUTPUT IN VSTT 
          IFNET  PCSX        IF OUTPUT ON NETWORK TERMINAL
          BX6    X3*X4
          SA6    A3          REWRITE VSTT 
          SX5    B1+B1       TELL DRIVER TO START AT WORD TWO 
          BX7    X2+X7
          LX5    36-0 
          BX7    X5+X7
          SA7    A2+         REWRITE VDCT 
          EQ     PCSX        EXIT 
  
 RES1     SB5    B2+         CHECK FOR QUEUE ENTRY
          RJ     GRT         GET ENTRY FROM TABLE 
          NZ     X4,RES8     IF QUEUED ENTRY
          BX4    X3 
          LX3    59-56
          LX4    59-48
          BX4    X3+X4
          NG     X4,PCSX     IF DETACH OR LOGOUT IN PROGRESS
          LX1    59-4 
          MX4    -2 
          NG     X1,RES2     IF OUTPUT ON MASS STORAGE
          LX1    0-18-59+4+60 
          BX4    -X4*X1 
          NZ     X4,URL      IF TIME OR SRU LIMIT 
          LX1    0-36-0+18
          MX4    -12
          BX6    -X4*X1 
          NZ     X6,RES4.1   IF WAITING TO BE ROLLED IN WITH INPUT
          LX1    59-3-0+36-60 
          NG     X1,RES3     IF WAITING FOR INPUT 
          LX1    3-2
          NG     X1,RES5     IF WAITING TO BE ROLLED IN 
          LX1    62-6 
          LX3    56-54
          NG     X1,RES6     IF LIST COMPLETE 
          NG     X3,RES6     IF JOB COMPLETION NOT PROCESSED
          SA1    VWMP 
          LX2    59-49
          NG     X2,PCSX     IF AUTO MODE, EXIT 
          LX2    59-57-59+49+60 
          AX1    24 
          PL     X2,PCSX     IF USER NOT COMPLETELY LOGGED IN 
          LX3    54-50
          ZR     X1,RES9     IF NO WARNING MESSAGE
          NG     X3,RES9     IF MESSAGE ISSUED
          EQ     RES10       ISSUE WARNING MESSAGE
  
*         PROCESS OUTPUT ON MASS STORAGE. 
  
 RES2     SX5    ITO1$
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         PROCESS INPUT REQUEST MESSAGE.
  
 RES3     SA1    A0+VDCT     REQUEST DRIVER TO ISSUE INPUT PROMPT 
          SX2    /1TD/IIP    SET INPUT PROMPT REQUEST 
          LX1    59-49       CHECK FOR AUTO MODE
          NG     X1,RES4     IF AUTO MODE TO A RUNNING PROGRAM
          RJ     EDR         ENTER DRIVER REQUEST 
 RES4     SX5    INP$        SET UP INPUT REQUEST 
          SX7    INP         SET RETURN ADDRESS 
          SB3    B0 
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         ROLLIN JOB. 
  
 RES4.1   SB3    X6          SAVE INPUT POT POINTER 
          BX6    X4*X1       CLEAR POT POINTER IN VROT
          LX6    36 
          SA6    A0+VROT
 RES5     SX7    B0          SET *EPN*
          SX6    B0+         SET *PPI* NOT TO SORT FILE 
          EQ     BJB1        BEGIN JOB
  
*         PROCESS JOB COMPLETION. 
  
 RES6     SX6    B1          CLEAR READ DATA FLAG 
          LX6    54 
          BX6    -X6*X2 
          SA6    A2 
          SA4    =77777777777700004001B 
          BX6    X4*X5
          SA6    A1 
          SA3    A0+VFST     CLEAR SMFIF STATE CODE 
          MX6    -6 
          LX6    18-0 
          BX6    X6*X3
          SA6    A3 
          ERRNZ  /SMFIF/SIDL   THIS CODE ASSUMES SIDL=0 
          SA3    A0+VSTT
          SX6    4110B       CLEAR CONTROL FLAGS
          LX6    48 
          BX6    -X6*X3 
          SX5    B1 
          LX3    59-54
          PL     X3,RES7     IF NOT JOB COMPLETION
  
*         RESET TERMINAL CHARACTER MODE.
  
          SA1    A0+VDCT
          LX5    18 
          BX4    X5*X6       GET VSTT ENTRY MODE
          LX5    51-18
          LX4    51-18
          BX7    -X5*X1      CLEAR VDCT CHARACTER MODE
          BX7    X4+X7       RESET TO ENTRY MODE
          SA7    A1+         REWRITE VDCT 
          SX7    X6          RESET SYSTEM 
          AX7    12 
  
*         ISSUE COMPLETION MESSAGE. 
  
 RES7     SA6    A3          REWRITE VSTT 
          LX3    54-51
          PL     X3,RDY      IF NOT RUN COMPLETE
          IFNET  /IAFEX4/JCM  IF NETWORK TERMINAL 
          MX1    -3 
          LX6    -12
          BX7    -X1*X6      EXTRACT CURRENT SUBSYSTEM
          SA1    JCTT+X7     GET MESSAGE TO ISSUE 
          SX6    X1+
          NZ     X6,PCS5     IF MESSAGE SPECIFIED 
          JP     RDY
  
*         CHECK STATUS OF QUEUED ENTRY. 
  
 RES8     AX4    48          CHECK QUEUE ENTRY
          SX6    X4-INP$
          NZ     X6,PCSX     IF NOT EXPLICIT INPUT REQUEST
  
*         ISSUE BEGIN INPUT REQUEST.
  
 RES9     SA1    A0+VDCT     CHECK DRIVER STATUS
          SA2    RESA 
          BX3    X2*X1
          NZ     X3,PCSX     IF INPUT REQUESTED OR DRIVER REQUEST 
          IFMUX  RES9.1      IF MUX TERMINAL
          SA1    A0+VSTT
          MX3    -12
          BX3    -X3*X1 
          NZ     X3,PCSX     IF OUTPUT ON NETWORK TERMINAL
 RES9.1   SA2    A2+B1       REQUEST DRIVER TO BEGIN INPUT
          RJ     EDR         ENTER DRIVER REQUEST 
          EQ     PCSX        EXIT 
  
*         ISSUE WARNING MESSAGE.
  
 RES10    MX6    1           SET MESSAGE ISSUED 
          BX6    X3+X6
          LX6    51 
          SA6    A3 
          TX2    X1,-VBMP    GET POT POINTER
          AX2    3
          SB3    X2          COPY POT(S)
          RJ     COP
          RJ     ASM         ASSIGN MESSAGE 
          EQ     PCSX        EXIT 
  
**        TABLE OF TERMINAL DATA REQUESTS 
  
 RESA     CON    6400BS48+7777B 
          CON    4400BS48+/1TD/BGI
 RIN      SPACE  4,10 
**        RIN - RELEASE SOURCE INPUT POTS.
* 
*         ENTRY  SEE SSP. 
* 
*T SSPA   12/ RIN ,6/ ,1/ F ,5/ WC ,12/ LP ,12/ FP ,12/ TN
* 
*                F  = FORCED DUMP FLAG. 
*                WC = WORD COUNT OF LAST POT IF FORCED DUMP 
*                     SPECIFIED.
*                LP = LAST POT OF SOURCE INPUT STRING.  IF
*                     FORCED DUMP SPECIFIED, LAST POT BELONGS 
*                     TO *RIN*, ELSE RETAINED BY ORIGINATOR.
*                FP = FIRST POT OF SOURCE INPUT STRING. 
*                TN = TERMINAL NUMBER.
  
  
 RIN      BSS    0           ENTRY
          ZR     B3,RIN9     IF FIRST POT POINTER ZERO
          SA2    A0+VFNT
          SX0    B3 
          MX1    42 
          BX1    X1*X2
          ZR     X1,RIN3     IF NO FILE TO DUMP TO
          LX2    59-12
          NG     X2,RIN3     IF WRITE LOCKOUT BIT SET 
          SA2    A0+VDCT
          LX2    59-57
          PL     X2,RIN3     IF USER NOT LOGGED IN
          EQ     RIN2        ENTER SOURCE DUMP LOOP 
  
*         DUMP SOURCE TO PRIMARY FILE.
  
 RIN1     SB7    VIPL        SET POT LIMIT
          BX7    X7-X7
          SB6    B1          SET POT TO BE DUMPED FLAG
          RJ     DMP         DUMP POTS
          SB3    X0          ADVANCE TO NEXT POT
          RJ     GPL         GET POT LINK 
          ZR     B3,RIN9     IF NEXT POT POINTER ZERO 
          SX0    B3          (X0) = NEXT POT TO DUMP
          RJ     SSP
 RIN2     MX3    -12         CHECK IF CURRENT POT REACHED 
          BX2    -X3*X7 
          BX2    X0-X2
          BX7    X3*X7
          SB3    X0 
          NZ     X2,RIN1     IF CURRENT POT NOT YET REACHED 
          LX7    59-17       CHECK IF FORCED DUMP REQUESTED 
          PL     X7,PCSX     IF NOT FORCED DUMP 
  
*         FORCE *1TO* CALL TO DUMP CURRENT POT STRING.
  
          LX7    5-59 
          SB7    B0          SET DUMP REQUIRED
          SX7    X7-40B      SET POT LENGTH 
          SB6    X7+
          RJ     DMP         FORCE SOURCE DUMP
  
*         REENTER TO DROP LAST POT ON *1TO* COMPLETION. 
  
          SB3    X0          SET POT TO DROP
          BX7    X7-X7       SET TO DROP ENTIRE CHAIN 
          SX5    RIN$ 
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         DROP POTS IF NO PRIMARY FILE. 
  
 RIN3     LX7    59-17       CHECK FOR FORCED DUMP REQUESTED
          NG     X7,RIN8     IF FORCED DUMP 
          MX6    -12
          LX7    17-59
          BX7    -X6*X7 
 RIN4     SX2    B3 
          RJ     GPL         GET POT LINK 
          SX1    B3 
          BX1    X1-X7
          NZ     X1,RIN4     IF NOT YET CURRENT POT 
          SB3    X0          SET FIRST POT TO DROP
          SB4    X2          SET LAST POT TO DROP 
          RJ     DPT         DROP POTS
  
*         ISSUE DIAGNOSTIC. 
  
 RIN5     SA1    A0+VDCT
          SB3    B0          SET NO POT AVAILABLE 
          LX1    59-57
          PL     X1,PCSX     IF USER NOT LOGGED IN
          SMA    X6,(NO PRIMARY FILE."NL")
          SA1    A0+VFNT
          LX1    59-12
          PL     X1,RIN6     IF NO WRITE LOCKOUT
          SMA    X6,(WRITE ON READ-ONLY FILE."NL")
 RIN6     IFMUX  RIN7 
          SA1    A0+VDPT     CLEAR *INPUT INITIATED*
          SX7    1S16 
          BX7    -X7*X1 
          SA7    A1          REWRITE VDPT 
          EQ     PCS5        ISSUE MESSAGE
  
 RIN7     SA1    A0+VSTT
          MX2    -12
          BX3    -X2*X1 
          ZR     X3,PCS5     IF OUTPUT NOT BACKED UP, ISSUE MESSAGE 
          EQ     PCSX        NO MESSAGE - PREVENT *ASM* ERRORS
  
*         ENTRY TO DROP ENTIRE CHAIN AND ISSUE DIAGNOSTIC.
  
 RIN8     SB4    B0          DROP WHOLE CHAIN 
          RJ     DPT         DROP POTS
          EQ     RIN5        ISSUE MESSAGE
  
 RIN9     SX6    3RRIN       SET ERROR CODE 
          RJ     ABT         ABORT IF SENSE SWITCH THREE SET
          EQ     PCSX        EXIT 
 SAI      SPACE  4,10 
**        SAI - SET AUTO INPUT MODE.
* 
*         ENTRY - 
*         SEE SSP.
  
  
 SAI      SA1    A0+VDCT     SET AUTO MODE INPUT BIT
          SX6    B1 
          LX6    49 
          BX6    X6+X1
          SA6    A1 
          JP     PCSX        EXIT 
 TOT      SPACE  4,10 
**        TOT - TIME OUT TERMINAL.
* 
*         MAKES A TIME DELAY QUEUE ENTRY FOLLOWED BY A WAIT 
*         COMPLETION QUEUE ENTRY TO FTP (FINISH TIMEOUT PROCESSING).
  
  
 TOT      BSS    0           ENTRY
          IFMUX  FTP1 
          SB5    B2 
          RJ     GRT         GET QUEUE ENTRY
          SX7    TOT
          NZ     X4,CJA      IF  REQUEST, CLEAR QUEUE 
          SB7    TIMQ 
          SA1    STIM 
          MX3    -24
          BX3    -X3*X1 
          SX2    NTODL
          SX5    TOT$ 
          IX2    X2+X3       SET COMPLETION TIME
          LX5    48 
          LX2    24 
          BX5    X2+X5
          RJ     MQE         MAKE QUEUE ENTRY 
          SX5    FTP$ 
          BX7    X7-X7
          SB3    B0 
          EQ     PCS1        EXIT 
 PCM      TITLE  PCM - PROCESSES ALL TERMINAL COMMANDS. 
 PCM      SPACE  4
***       PCM - PROCESSES ALL TERMINAL COMMANDS.
* 
*         ALL COMMANDS ARE PROCESSED ON THE BASIS OF WHAT SYSTEM THE
*         USER IS IN.  IN SOME SYSTEMS ABBREVIATED FORMS OF THE 
*         COMMANDS MAY BE ENTERED.  IN OTHERS ESPECIALLY *BATCH*, 
*         THE COMMANDS MUST BE ENTERED COMPLETELY.  IT SHOULD 
*         BE NOTED ALSO THAT SOME COMMANDS ARE VALID ONLY IN CERTAIN
*         SYSTEMS.  IF NO SYSTEM NAMES ARE GIVEN ON THE COMMAND MACRO 
*         CALL, THEN THE DEFAULT GROUP WILL BE TAKEN.  IT SHOULD
*         BE NOTED THAT THE ABOVE ALLOWS A COMMAND TO HAVE DIFFERENT
*         MEANINGS, SYNTAX, ETC. IN DIFFERENT SYSTEMS.
* 
* 
*         1)     A MASK TO USE IN COMPARISON OF THE COMMAND WITH
*                THE COMMAND TABLE IS GENERATED AND THEN THE FIRST
*                CHARACTER IS CHECKED FOR BEING ALPHABETIC. 
*                THE MINIMUM NUMBER OF CHARACTERS IN THIS MASK IS 
*                DETERMINED BY THE SYSTEM THE USER IS UNDER.
* 
*                CURRENTLY THE REQUIREMENTS ARE AS FOLLOWS
*                SYSTEM      MINIMUM CHARACTER MASK 
*                NULL        3
*                BASIC       3
*                FORTRAN     3
*                FTNTS       3
*                BATCH       7
*                ACCESS      3
* 
*         2)     THE FIRST CHARACTER IS USED TO GET AN ADDRESS TO 
*                START SEARCHING AT IN THE COMMAND TABLE. 
* 
*         3)     THE COMMAND TABLE IS SEARCHED UNTIL A COMPARISON 
*                IS MADE OR UNTIL THE COMMAND IS OF A LESSER
*                VALUE THAN THOSE BEING COMPARED AGAINST.  THE
*                COMMAND TABLE IS IN ALPHABETICAL ORDER.
* 
*         4)     IF A SUCCESSFUL COMPARISON IS MADE, A CHECK IS MADE
*                TO SEE IF THE COMMAND IS VALID IN THE SUBSYSTEM. 
*                IF IT ISN,T GO BACK TO STEP (3). 
* 
*         5)     A CHECK IS MADE AFTER A SUCCESSFUL COMPARISION 
*                TO SEE IF THERE IS ANY OTHER COMMAND BEGINNING 
*                WITH THE SAME GROUP OF CHARACTERS THAT IS LEGAL IN 
*                THE SYSTEM THE USER IS UNDER.  IF THERE IS 
*                THE MESSAGE *COMMAND NOT UNIQUE.* IS ISSUED. 
* 
*         6)     THE MAXIMUM NUMBER OF PARAMETERS IS THEN CHECKED.
*                IF THE MAXIMUM NUMBER IS EXCEEDED GO TO STEP (8).
* 
*         7)     IF THE ABOVE STEPS WERE COMPLETED SUCCESSFULLY, THE
*                COUNT IS INCREMENTED FOR THE GIVEN COMMAND AND THE 
*                APPROPRIATE PROCESSING ROUTINE IS ENTERED. 
* 
*         8)     THE APPROPRIATE ERROR PROCESSING ROUTINE IS ENTERED
*                BASED ON THE SYSTEM THE USER IS IN.
* 
* 
*         ERROR RETURNS-
* 
*         *FILE NAME ERROR.* A FILE NAME DOES NOT CONFORM TO ONE OR 
*         MORE OF THE FOLLOWING 
*                1) A FILE NAME MUST BE SEVEN CHARACTERS OR LESS
*                2) A FILE NAME MUST CONTAIN ONLY ALPHANUMERICS 
* 
*         *TOO MANY PARAMETERS.* THE NUMBER OF PARAMETERS IN THE
*         COMMAND EXCEED THE NUMBER REQUIRED. 
* 
*         *INCORRECT PARAMETER.*  CHECK PARAMETER DEFINITIONS.
* 
* 
*         ENTRY  (SEE SSP). 
*                (B3) = COMMAND POT POINTER.
*                (B4) = COMMAND POT ADDRESS.
*                (X7) = COMMAND WORD INDEX. 
* 
*         CALLS  CCM, DMP, IGN, SCT, SSP. 
  
  
 PCM      BSS    0           ENTRY
          SA1    A0+VDCT
          LX1    59-54
          NG     X1,PCM2     IF DATA MODE INPUT 
          SA1    A0+VROT
          LX1    59-0 
          NG     X1,PCM1     IF NO ACTIVITY 
          SX5    PCM1$       MAKE QUEUE ENTRY 
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         DUMP QUEUED DATA TO DISK. 
  
 PCM1     SA1    A0+VSTT     CHECK FOR QUEUED DISK DATA 
          MX2    12 
          LX2    -12
          BX3    X2*X1
          BX3    X3+X7
          ZR     X3,PCM2     IF NO DATA TO DUMP TO DISK 
          SA1    A0+VFNT
          MX2    42 
          BX2    X1*X2
          ZR     X2,RIN8     IF NO PRIMARY FILE 
          SB7    B0          RELEASE SOURCE LINB INPUT
          SB6    X7 
          RJ     DMP
          SX5    PCM2$
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         CHECK JOB ACTIVITY. 
  
 PCM2     SA2    A0+VSTT
          SX3    2001B       CHECK FOR USER BREAK OR LOGOUT IN PROGRESS 
          SA1    B4+X7       READ COMMAND 
          LX3    48-0 
          BX2    X3*X2
          NZ     X2,IGN      IF USER BREAK OR LOGOUT IN PROGRESS
          SA2    A0+VUIT
          ZR     X2,IGN      IF LOGGED OFF
          NZ     X1,PCM4     IF NOT NULL
  
*         ISSUE SHORT STATUS RESPONSE IF NULL COMMAND.
  
 PCM3     NG     X1,PCM20    IF NEGATIVE
          RJ     DJS         DETERMINE JOB STATUS 
          EQ     PCS5        ISSUE MESSAGE
  
*         CRACK COMMAND TO COMMAND BUFFER.
  
 PCM4     RJ     CCM         CRACK COMMAND
          SA1    PBUF        GET CRACKED COMMAND
          SA2    CCMA        GET PARAMETER COUNT
          AX2    1
          IX3    X2+X1
          ZR     X3,PCM3     IF SINGLE COMMAND OF BLANKS
  
**        PROCESS COMMAND.
*         REENTER HERE FROM LAN WHEN PROCESSING SECOND COMMAND. 
  
 PCM5     BSS    0
          SA1    PBUF        READ PARAMETER 
          SA2    A1+1        READ SEPARATOR 
          NZ     X1,PCM6     IF NOT NULL PARAMETER
          SX2    X2-1R- 
          NZ     X2,PCM6     IF NOT *-* SEPARATOR 
          SA3    =0LBEGIN 
          BX6    X3 
          SA6    A1 
          SX6    1R(
          SB4    5           CHARACTER COUNT
          PX6    X6,B4
          SA6    A2 
 PCM6     BSS    0
          SA1    A0+VSTT     DETERMINE MINIMUM CHARACTERS TO PROCESS
*                            BASED ON SYSTEM
          SA2    PBUF+1      GET COUNT OF CHARACTERS IN COMMAND NAME
          MX3    -3 
          LX1    -12
          BX3    -X3*X1      EXTRACT CURRENT SUBSYSTEM
          SX1    X3-MSYS
          PL     X1,PCM18    IF INCORRECT SUBSYSTEM 
          SA1    PCOM+X3
          UX2,B4 X2          GET NUMBER OF CHARACTERS RECEIVED
          UX1,B5 X1          GET MINIMUM TO COMPARE ON
          SB7    X3+         SET SYSTEM NUMBER
          SX3    B4 
          GE     B4,B5,PCM7  IF AT OR ABOVE MINIMUM CHARACTER COUNT 
          SX3    B5 
 PCM7     LX4    X3,B1       CHARACTER COUNT * 6
          LX3    2
          IX6    X3+X4
          MX5    1           GENERATE COMPARISON MASK 
          SB5    X6-1 
          AX5    X5,B5       GENERATE MASK
          SA3    A2-B1       GET COMMAND NAME 
          BX1    X3 
          AX3    54          GET FIRST CHARACTER
          SX4    X3-1R0 
          NG     X1,PCM18    IF INCORRECT COMMAND 
          PL     X4,PCM18    IF INCORRECT COMMAND 
          MX2    -2 
          BX2    -X2*X3      GET LOWER TWO BITS 
          AX3    2           USE UPPER THREE BITS TO INDEX TABLE
          SA4    TCOMA+X3    GET INDEX WORD 
          SX2    X2+B1       SHIFT COUNT = (BYTE + 1) * 12
          LX2    2           GET BYTE IN INDEX WORD 
          LX3    X2,B1
          IX3    X2+X3
          SB4    X3          SET SHIFT COUNT
          MX2    -12
          LX4    X4,B4
          BX6    -X2*X4 
          SX0    B1+
 PCM8     SA2    TCOM+X6     GET NEXT COMMAND 
          BX3    X5*X2
          IX3    X1-X3
          NG     X3,PCM18    IF INCORRECT COMMAND 
          SX6    X6+2 
          NZ     X3,PCM8     IF NO FIND 
          SA3    A2+B1       CHECK IF COMMAND VALID 
          LX4    X0,B7       SET SYSTEM MASK BIT
          LX4    18 
          BX7    X4*X3
          ZR     X7,PCM8     IF NOT VALID FOR THIS SYSTEM 
          SB5    X2          SET COMMAND PROCESSOR ADDRESS
          MX6    42          SAVE FULL COMMAND NAME 
          BX6    X6*X2
          BX2    X1-X6
          ZR     X2,PCM9     IF COMPLETE COMMAND
          SA2    A3+B1       CHECK UNIQUENESS 
          BX2    X5*X2
          BX2    X1-X2
          NZ     X2,PCM9     IF COMMAND UNIQUE
          SA2    A2+B1
          BX4    X4*X2
          NZ     X4,PCM16    IF COMMAND NOT UNIQUE TO THIS SYSTEM 
 PCM9     SA6    PBUF 
          BX2    X3 
          RJ     CFC         COUNT COMMAND CHARACTERS 
          BX3    X2 
          SA1    PBUF+1      GET SEPARATOR
          UX6,B7 X1 
          PX6    B6,X6
          SA6    A1 
          SA1    A0+VROT
          IX6    X3+X0       INCREMENT COMMAND COUNT
          LX1    59-11
          SX4    X6 
          PL     X4,PCM10    IF NO COMMAND COUNT OVERFLOW 
          BX6    X3 
 PCM10    NG     X1,PCM15    IF ERROR ON LAST OPERATION 
          AX1    48 
          MX2    -5 
          BX1    -X2*X1 
          SX1    X1-1 
          NG     X3,PCM12    IF SECONDARY COMMAND 
          ZR     X1,PCM11    IF STATUS IDLE 
          SMA    X6,( JOB ACTIVE."NL")
          RJ     SSP
          EQ     PCS5        ISSUE MESSAGE
  
 PCM11    TA4    B2,VRAP
          NZ     X4,PCM20    IF REENTRY TABLE ENTRY TO BE PROCESSED 
 PCM12    AX3    48          GET NUMBER OF LEGAL PARAMETERS 
          MX5    -6 
          SA2    CCMA 
          BX5    -X5*X3 
          IX5    X5-X2
          NG     X5,PCM17    IF TOO MANY PARAMETERS 
          IFMUX  PCM14       IF MUX TERMINAL
          BX5    X6 
          LX5    59-57
          NG     X5,PCM18    IF COMMAND INCORRECT FOR NETWORK 
 PCM14    SA6    A3          UPDATE COMMAND COUNT 
          RJ     SSP
          JP     B5          PROCESS COMMAND
  
 PCM15    MX6    -59         CLEAR ERROR FLAG 
          BX6    -X6*X1 
          LX6    12 
          SA6    A1 
          SMA    X0,( SYSTEM ERROR."NL")
          RJ     SSP
          EQ     PCM21       SEND ERROR MESSAGE 
  
 PCM16    SMA    X0,( COMMAND NOT UNIQUE."NL")
          RJ     SSP
          EQ     PCM21       SEND ERROR MESSAGE 
  
 PCM17    SMA    X0,( TOO MANY PARAMETERS."NL") 
          EQ     PCM19       PROCESS ERROR
  
 PCM18    SMA    X0,( INCORRECT COMMAND."NL") 
 PCM19    RJ     SSP
          SA1    A0+VROT     CHECK FOR ACTIVITY 
          MX2    -5 
          BX3    -X2*X1 
          SX4    X3-1 
          NZ     X4,PCM21    IF NOT IDLE
          SA1    A0+VSTT     READ VSTT
          MX4    -3 
          LX1    -12
          BX1    -X4*X1      EXTRACT CURRENT SUBSYSTEM
          SA1    PCOM+X1     READ ERROR PROCESSOR ADDRESS 
          SB6    X1+
          JP     B6          GO TO SYSTEM ERROR PROCESSOR 
  
 PCM20    SMA    X0,( INCORRECT COMMAND."NL") 
          RJ     SSP
 PCM21    SA1    TCOMI+1     COUNT INCORRECT COMMAND
          SX7    X1+B1
          SA7    A1 
          BX6    X0          GET MESSAGE ADDRESS
          EQ     PCS5        ISSUE MESSAGE
 PCM      TITLE  PCM - TERMINAL USER,S COMMANDS.
**        TCOM - TELETYPE USER,S VALID COMMAND TABLE. 
*         ALL COMMANDS MUST BE ENTERED IN THIS TABLE IN ALPHABETICAL
*         ORDER.
*         SEE MACRO USECMN FOR A DESCRIPTION OF THE TABLE FORMAT. 
 TCOM     SPACE  4
***       THE FOLLOWING IS A LIST OF ALL OF THE COMMANDS THAT MAY BE
*         ISSUED BY THE TTY USER.  MOST OF THE COMMANDS MAY BE ISSUED 
*         IN ALL SYSTEMS EXCEPT THE ACCESS SYSTEM.  SOME COMMANDS 
*         ARE RESTRICTED TO CERTAIN SYSTEMS.  IN THE BATCH SYSTEM 
*         ANY COMMAND WHICH CANNOT BE INTERPETED WILL BE ISSUED AS
*         A COMMAND.  ANY COMMAND WHICH IS ISSUED IN A SYSTEM 
*         WHICH IT IS NOT LEGAL FOR WITH THE EXCEPTION OF BATCH 
*         WILL RETURN * INCORRECT COMMAND.* 
  
  
 U3       MICRO  1,1,* *     FIRST CHARACTER OF LAST COMMAND PROCESSED
 PARC     EQU    10          NUMBER OF PARAMETER POSITIONS TO BE
*                            CLEARED IN PBUF BY CCM.  USED FOR
*                            INSURING DEFAULTS FOR *RESEQ* FOR EXAMPLE
  
 TCOM     BSS    0
 ACCESS   SPACE  4
***       ACCESS. 
* 
*         SETS THE USER-S SYSTEM TO *ACCESS* IF VALIDATED (*CTPC* SET 
*         IN *AACW*).  IF NOT VALIDATED, * INCORRECT COMMAND.* WILL BE
*         RETURNED. 
  
  
          USECMN ACCESS,ACC,,,,(ALL)
          SPACE  4,10 
***       ADMIT.
* 
*         ALLOWS USER TO GRANT EXPLICIT PERMISSION TO ACCESS TAPE 
*         FILE(S) TO ANOTHER USER.  (SEE TMS REFERENCE MANUAL FOR 
*         DETAILS.
  
  
          USECMN  ADMIT,PBS,0 
 ALTER    SPACE  4,10 
***       ALTER,LINES,/STR1/STR2/.
* 
*         REPLACES CHARACTER STRINGS IN SPECIFIED PRIMARY FILE LINES. 
* 
*         LINES = ANY NUMBER OF LINE NUMBERS AND LINE RANGES, 
*         IN ASCENDING ORDER.  THIS PARAMETER IS OPTIONAL.
*         /STR1/STR2/ = TWO SEQUENCES OF CHARACTERS SEPARATED BY AND
*         DELIMITED BY A STRING DELIMITER.  EITHER SEQUENCE MAY 
*         BE NULL.
  
  
          USECMN ALTER,IED,0
          SPACE  4,10 
***       AMEND.
* 
*         ALLOWS USER TO AMEND THE CATALOG ENTRY FOR A TAPE FILE. 
*         (SEE TMS REFERENCE MANUAL FOR DETAILS.) 
  
  
          USECMN  AMEND,PBS,0 
 APL      SPACE  4
***       APL,XXXXX 
* 
*         CALL *APL*. 
* 
*         PARAMETER - 
*         XXXXX = TERMINAL TYPE FOR APL PROCESSING. 
  
  
          USECMN APL,PBS,0
 APP      SPACE  4
***       APPEND,LFN=PFN. 
* 
*         THIS ALLOWS THE USER TO APPEND THE CONTENTS OF FILE *LFN* 
*         TO FILE *PFN*. (SEE PFILES) 
  
  
          USECMN APPEND,PSS,0 
          SPACE  4,10 
***       APPSW,AP=ANAME,OP.
* 
*         THIS COMMAND ALLOWS THE USER TO SWITCH TO THE APPLICATION 
*         *ANAME*, AND TO OPTIONALLY PASS INFORMATION TO THAT 
*         APPLICATIOIN WITH THE *Z* PARAMETER.
  
          USECMN APPSW,PBS,0
 ASCII    SPACE  4
***       ASCII.
* 
*         SETS THE FLAG TO THE DRIVER FOR ASCII CONVERSION. 
  
  
          USECMN ASCII,PBS,,,,(ALL) 
 ATTACH   SPACE  4
***       ATTACH. 
* 
*         SEE *PFILES* DOCUMENTATION. 
  
  
          USECMN ATTACH,RPF,0 
          SPACE  4,10 
***       AUDIT.
* 
*         ALLOWS USER TO OBTAIN INFORMATION ABOUT THE FILES THAT
*         RESIDE IN THE USERS TAPE FILE CATALOG OR ARE PERMITTED TO 
*         ACCESS IN AN ALTERNATE USERS CATALOG.  (SEE TMS REFERENCE 
*         MANUAL FOR DETAILS.)
  
  
          USECMN  AUDIT,PBS,0 
 AUTO     SPACE  4
***       AUTO,NNN,YYY. 
* 
*         THIS ALLOWS THE USER TO HAVE THE SYSTEM SUPPLY HIM
*         WITH LINE NUMBERS AUTOMATICALLY.  THIS MODE IS CLEARED
*         ANYTIME A COMMAND LINE IS ENTERED.  IT IS POSSIBLE
*         TO GET OUT OF THIS MODE BY ENTERING A COMMAND LINE. 
* 
*         PARAMETERS- 
*         NNN = STARTING LINE NUMBER.  IF NULL, 100 IS ASSUMED. 
*         YYY = AMOUNT TO INCREMENT EACH LINE NUMBER BY.  IF NULL,
*         10 IS ASSUMED.
* 
*         ERRORS- 
*         *INCORRECT PARAMETER.* = THE INCREMENT IS MORE THAN 4095
*         OR THE STARTING LINE NUMBER IS MORE THAN FIVE 
*         DIGITS. 
  
  
          USECMN AUTO,AUT,3 
 BASIC    SPACE  4
***       BASIC,NNNNN.
* 
*         THIS DEFINES THE SYSTEM TYPE TO BE *BASIC*.  IF THERE 
*         HAS BEEN NO FILE PREVIOUSLY DEFINED, THE USER IS ASKED
*         *OLD, NEW, OR LIB FILE *. 
* 
*         PARAMETERS- 
*         NNNNN = OPTIONAL ADDITIONAL COMMAND STRING. 
  
  
          USECMN BASIC,LAN1,0,,,(ALL) 
 BATCH    SPACE  4
***       BATCH,NNNNN.
* 
*         THIS COMMAND ALLOWS THE USER TO ENTER STANDARD *NOS*
*         BATCH COMMANDS AS WELL AS THE *IAFEX* COMMANDS THAT 
*         ARE DESIGNATED VALID FOR THIS SYSTEM. IF A COMMAND CANNOT 
*         BE INTERPRETED BY *IAFEX* IN THIS MODE IT WILL THEN BE
*         PASSED ONTO THE SYSTEM AS A COMMAND.
* 
*         PARAMETERS- 
*         NNNNN = AMOUNT OF FL THESE JOBS ARE TO RUN IN.
*         IF *NNNNNN* IS NOT GIVEN, THEN THE DEFAULT *VBFL* IS USED.
  
  
          USECMN BATCH,BAT,2,,,(ALL)
 BEGIN    SPACE  4,10 
***       BEGIN.
* 
*         SEE CYBER CONTROL LANGUAGE DOCUMENTATION. 
  
  
          USECMN BEGIN,PSS,0
 BINARY   SPACE  4
***       BINARY,X,Y
* 
*         THIS ALLOWS THE USER TO INPUT BINARY DATA FROM THE TERMINAL 
*         TO HIS PRIMARY FILE.
*         X = NUMBER OF CHARACTERS/LINE.
*         Y = TERMINATION CHARACTER IN OCTAL. 
  
  
          USECMN BINARY,BIN,3,INVN
 BRIEF    SPACE  4,10 
***       BRIEF.
* 
*         SETS BRIEF MODE, WHICH SUPPRESSES THE ISSUANCE OF 
*         FULL OR PARTIAL HEADER RESPONSES TO COMMANDS.  BRIEF
*         MODE IS CLEARED BY THE *NORMAL* COMMAND.
  
  
          USECMN BRIEF,BRF
 BYE      SPACE  4
***       BYE,ANAME.
* 
*         LOGS THE USER OFF AFTER ISSUING ACCOUNTING INFORMATION. 
* 
*         PARAMETERS: 
* 
*         ANAME  NEXT APPLICATION TO BE LOGGED INTO.  ONLY
*                *IAF* IS VALID FOR MULTIPLEXER TERMINALS.
  
          USECMN BYE,PBS,0,CHGR,,(ALL)
 CATLIST  SPACE  4
***       CATLIST.
*         SEE *CATLIST* DOCUMENTATION.
  
  
          USECMN CATLIST,PBS,0
 CHANGE   SPACE  4
***       CHANGE. 
*         ALLOWS USER TO CHANGE THE CATALOG ENTRY 
*         FOR A FILE (SEE PFILES).
  
  
          USECMN CHANGE,PBS,0 
 CHARGE   SPACE  4
***       CHARGE,XXXXXXXXXX,YYYYYYYYYYYYYYYYYYYY. 
* 
*         THIS COMMAND IS USED TO ENTER AN ACCOUNT FILE MESSAGE AND 
*         VALIDATE THE CHARGE NUMBER *XXXXXXXXXX* AND PROJECT NUMBER
*         *YYYYYYYYYYYYYYYYYYYY* IF REQUIRED. 
*         UP TO 10D CHARACTERS MAY BE ENTERED FOR CHARGE NUMBER 
*         AND UP TO 20D FOR PROJECT NUMBER. 
*         WHEN CHARGE NUMBER IS REQUIRED, ONLY THE FOLLOWING COMMANDS 
*         MAY BE ENTERED
*         CHARGE,XXXXXXXXXX,YYYYYYYYYYYYYYYYYYYY. 
*         HELLO.
*         LOGIN.
*         BYE.
  
  
          USECMN CHARGE,PBS,0,CHGR,,(ALL) 
 CHVAL    SPACE  4,10 
***       CHVAL(DI=DATA,...,DI=DATA)
* 
*         CHANGE USER VALIDATION DATA.
* 
*         DI = DATA IDENTIFIER. 
*         DATA = VALUE TO BE ASSIGNED.
* 
*         ALLOWED DATA IDENTIFIERS ARE -
*         UC=OTSC.  SET USER DEFAULT SERVICE CLASS *SC* FOR ORIGIN
*                TYPE *OT*. 
  
  
          USECMN CHVAL,PBS,0
 CLASS    SPACE  4,10 
***       CLASS,SC=SC,OT=OT,L=LFN,A.
* 
*         DISPLAY AND/OR CHANGE CURRENT SERVICE CLASS OF JOB. 
* 
*         SC = SERVICE CLASS. 
*         OT = ORIGIN TYPE. 
*         L = OUTPUT FILE NAME. 
*         A = ABORT MODE. 
  
  
          USECMN CLASS,PBS,0
 CLEAR    SPACE  4
***       CLEAR.
* 
*         RETURN ALL FILES EXCEPT FOR PRIMARY FILE. 
  
  
          USECMN CLEAR,PBS,0
 CVT      SPACE  4,10 
***       CONVERT(P1,...,PN)
* 
*         CALLS *CONVERT* UTILITY TO CONVERT FILE FORMATS FROM
*         63 TO 64 CHARACTER SET OR FROM NEW TO OLD CHARACTER 
*         SET.
  
  
          USECMN CONVERT,PBS,0
 CSET     SPACE  4,10 
***       CSET,PARAM. 
* 
*         SETS TERMINAL TO NORMAL OR ASCII CHARACTER SET MODE.
* 
*         PARAMETERS- 
*         PARAM = *ASCII*.  SET EXTENDED CHARACTER SET MODE.
*               = *NORMAL*. SET NORMAL MODE.
* 
*         ERRORS- 
*         *INCORRECT PARAMETER.*  = AN UNRECOGNIZABLE PARAMETER 
*         OR NO SECOND PARAMETER WAS ENTERED. 
  
  
          USECMN CSET,PBS,2,,,(ALL) 
 DAYFILE  SPACE  4
***       DAYFILE.
* 
*         PRINTS THE USER,S CONTROL POINT AREA DAYFILE TO HIS TERMINAL. 
  
  
          USECMN DAYFILE,PBS,0
 DEFINE   SPACE  4
***       DEBUG,PARAM.
* 
*         ALLOWS THE USER TO ACTIVATE, TERMINATE OR RESUME
*         DEBUG MODE. 
* 
*         PARAMETERS- 
*         PARAM = *ON*     DEFAULT.  ACTIVATES DEBUG MODE.
*                          WHENEVER A RELOCATABLE BINARY PROGRAM
*                          IS LOADED AND EXECUTED, CYBER
*                          INTERACTIVE DEBUG IS LOADED AND GIVEN
*                          CONTROL. 
*               = *OFF*    TERMINATES DEBUG MODE. 
*               = *RESUME* RESUME THE DEBUG SESSION SUSPENDED 
*                          BY THE LAST EXECUTION OF THE SUSPEND 
*                          COMMAND. 
  
  
          USECMN DEBUG,PBS,0
          SPACE  4
***       DEFINE. 
* 
*         SEE *PFILES* DOCUMENTATION. 
  
  
          USECMN DEFINE,PBS,0 
 DELETE   SPACE  4,15 
***       DELETE,LINES,/STRING/.
* 
*         THIS PRIMARY FILE EDITING COMMAND DELETES LINES SPECIFIED 
*         BY LINE NUMBER OR CHARACTER CONTENT.
* 
*         LINES = ANY NUMBER OF LINE NUMBERS OR LINE RANGES, IN 
*         ASCENDING ORDER.
*         /STRING/ = NON-NULL SEQUENCE OF CHARACTERS DELIMITED BY A 
*         STRING DELIMITER. 
* 
*         EITHER PARAMETER MAY BE OMITTED.
  
  
          USECMN DELETE,IED,0 
 DIAL     SPACE  4
***       DIAL,NNNN,AAAAAAAAA.
* 
*         ALLOWS ONE USER TO SEND A MESSAGE TO ANOTHER USER.
* 
*         PARAMETERS- 
*         NNNN = TERMINAL *JSN*.  MAY BE DETERMINED BY COMMAND
*         *USER,USERNUM.*.
*         AAAAA = THE MESSAGE TO BE SENT.  (IT MAY BE UP TO ONE TTY 
*         LINE IN LENGTH INCLUDING THE COMMAND. 
  
  
          USECMN DIAL,DIA,0,,,(ACCS)
 DROP     SPACE  4,10 
***       DROP,JSN,Q,UJN. 
* 
*         DROPS A JOB OR QUEUE FILE FROM ANY QUEUE OR CONTROL POINT.
*         ANY COMBINATION OF PARAMETERS MAY BE SPECIFIED. 
* 
*         JSN = JOB SEQUENCE NUMBER.
*         Q = QUEUE TYPE:  PR, PU, PL, IN, EX, TT, ALL. 
*         UJN = USER JOB NAME.
  
  
          USECMN DROP,PBS,0 
 DUP      SPACE  4,15 
***       DUP,LR,N,Z. 
* 
*         DUPLICATES LINE(S) FROM ONE PLACE IN A PRIMARY FILE 
*         IN ANOTHER PLACE. 
* 
*         LR = LINE NUMBER OR RANGE OF LINES TO BE DUPLICATED.
*         N = LINE NUMBER AFTER WHICH TO INSERT DUPLICATED LINES. 
*         Z = LINE NUMBER INCREMENT USED TO GENERATE NEW LINE NUMBERS 
*         ON DUPLICATED LINES.
* 
*         N AND Z ARE OPTIONAL. 
  
  
          USECMN DUP,IED,0
 EDIT     SPACE  4
***       EDIT,LFN,AS.
* 
*         INITIATES THE TEXT EDITOR.
* 
*         PARAMETERS- 
*         LFN = NAME OF THE FILE TO BE EDITED.  IF NULL, THE PRIMARY
*         FILE NAME IS ASSUMED. 
*         AS = EDIT FILE IN ASCII MODE. 
*              (NOT REQUIRED IF TERMINAL IN ASCII MODE.)
  
  
          USECMN EDIT,EDI,9 
 ENQ      SPACE  4,10 
***       ENQUIRE,N.
*         ALLOWS USER TO FIND OUT HIS CURRENT STATUS. 
* 
*         THIS COMMAND IS IDENTICAL IN ITS FUNCTION AND PARAMETERS
*         TO THE *STATUS* COMMAND (Q.V.).  IT IS RECOMMENDED
*         THAT THIS FORM OF THE COMMAND BE USED WHEN IT IS
*         UNDESIRABLE TO ENTER THE LETTER *S* WHICH INITIATES 
*         THE *STATUS* COMMAND. 
  
  
          USECMN ENQUIRE,STA,0,SCOM,,(ALL)
 EFFECT   SPACE  4
***       EFFECT,PARAM. 
* 
*         SET USER OR SYSTEM SUPPLIED FORMAT EFFECTOR MODE.  IF 
*         *SYSTEM* IS ENTERED, THEN IAFEX WILL GENERATE FORMAT
*         EFFECTORS FOR OUTPUT.  IF *USER* IS ENTERED, THE
*         PROGRAM/USER MUST GENERATE ITS OWN FORMAT EFFECTORS FOR 
*         OUTPUT. 
* 
*         PARAMETERS- 
*         PARAM = *SYSTEM*.  SET SYSTEM SUPPLIED FORMAT EFFECTOR MODE.
*               = *USER*.    SET USER SUPPLIED FORMAT EFFECTOR MODE.
*               = (OMITTED) = *SYSTEM*. 
* 
*         ERRORS- 
*         *ILLEGAL PARAMETER.* = AN UNRECOGNIZABLE PARAMETER
*         WAS ENTERED.
  
  
          USECMN EFFECT,PBS,2,,,(ALL) 
 EXECUTE  SPACE  4
***       EXECUTE,NNNNN.
* 
*         SETS THE SYSTEM TYPE TO EXECUTE.
*         IF THERE HAS BEEN NO FILE SPECIFIED, THE USER IS ASKED
*         *OLD OR LIB FILE *. 
*         NNNNN = OPTIONAL ADDITIONAL COMMAND STRING. 
  
  
          USECMN EXECUTE,LAN4,PARL,,,(ALL)
 EXPLAIN  SPACE  4
***       EXPLAIN.
* 
*         ALLOWS USER TO ACCESS ON-LINE DOCUMENTATION.
  
  
          USECMN EXPLAIN,PBS,0,,,(ALL)
          SPACE  4,10 
***       FCOPY.
* 
*         CONVERT FILE FROM ONE CODE SET TO ANOTHER CODE SET. 
  
  
          USECMN FCOPY,PBS,0
 FORTRAN  SPACE  4
***       FORTRAN,NNNNN.
* 
*         SETS THE SYSTEM TYPE TO *FORTRAN*.  OTHERWISE IT IS 
*         THE SAME AS THE *BASIC* COMMAND.
  
  
          USECMN FORTRAN,LAN2,0,,,(ALL) 
 FSE      SPACE  4,10 
***       FSE,LFN,ASCII.
* 
*         THIS COMMAND EXECUTES THE FULL SCREEN EDITOR. 
* 
*         LFN = LOCAL FILE TO BE EDITED.  IF OMITTED, ATTEMPT 
*         TO RESUME PREVIOUS EDIT SESSION.
*         ASCII = PROCESS FILE AS 6/12 ASCII CODE IF THIS 
*         PARAMETER IS PRESENT AND STARTS WITH *A*. 
  
  
          USECMN FSE,PSS,0,,,(ALL)
 FTNTS    SPACE  4
**        FTNTS,NNNN. 
* 
*         SETS THE SYSTEM TYPE TO *FTNTS*.  OTHERWISE IT IS THE 
*         SAME AS THE *BASIC* COMMAND.
  
  
          USECMN FTNTS,LAN3,0,,,(ALL) 
 FULL     SPACE  4
***       FULL. 
* 
*         SETS FULL DUPLEX TERMINAL OPERATION.
  
  
          USECMN FULL,FDP,,SCOM+INVN,,(ALL) 
 GET      SPACE  4
***       GET,LFN=PFN.
* 
*         THIS ALLOWS THE USER TO GET A FILE FROM THE PERMANENT 
*         FILE SYSTEM.  (SEE PFILES)
  
  
          USECMN GET,RPF,0
 GOODBYE  SPACE  4
***       GOODBYE,ANAME.
* 
*         SEE *BYE.*
  
  
          USECMN GOODBYE,PBS,0,CHGR,,(ALL)
 HALF     SPACE  4
***       HALF. 
* 
*         SETS HALF DUPLEX TERMINAL OPERATION.
  
  
          USECMN HALF,HDP,,SCOM+INVN,,(ALL) 
 HELLO    SPACE  4
***       HELLO,ANAME.
* 
*         SAME AS *BYE,ANAME* IF ANAME IS PRESENT.  IF *ANAME*
*                IS OMITTED, *IAF* IS ASSUMED.
  
  
          USECMN HELLO,PBS,0,CHGR,,(ALL)
 HELP     SPACE  4
***       HELP. 
* 
*         USER DOCUMENTATION. 
  
  
          USECMN HELP,PBS,,,,(ALL)
 HELPME   SPACE  4
***       HELPME. 
* 
*         WILL DESCRIBE AND EXECUTE NOS COMMANDS FOR ON-LINE
*         USERS.
  
  
          USECMN HELPME,PBS,,,,(ALL)
 LENGTH   SPACE  4
***       LENGTH,LFN. 
* 
*         RETURNS THE FILE TYPE, LAST STATUS, AND LENGTH OF FILE
*         *LFN*.  IF *LFN* IS NULL, THE PRIMARY FILE NAME IS USED.
* 
*         PARAMETERS- 
*         LFN = LOGICAL FILE NAME.  (THIS DOES NOT RETURN THE LENGTH
*         OF A PERMANENT FILE.) 
  
  
          USECMN LENGTH,LEN,2 
 LIBRARY  SPACE  4
***       LIB.
*         LIB,LFN=PFN.
* 
*         SAME AS *OLD,PFN/UN=LIBRARY.* 
  
  
          USECMN LIB,PFC,0
 LIMITS   SPACE  4
***       LIMITS. 
*         THIS COMMAND DISPLAYS A USERS CURRENT 
*         VALIDATION FILE PARAMETERS. 
  
  
          USECMN LIMITS,PBS,0,,,(ALL) 
 LINE     SPACE  4,10 
***       LINE. 
*         LINE,TM=MNEMONIC. 
*         LINE,MNEMONIC.
* 
*         SETS THE TERMINAL IN LINE MODE AND OPTIONALLY SETS THE
*         TERMINAL MODEL. 
* 
*         PARAMETERS- 
*         MNEMONIC = TERMINAL MODEL.
  
  
          USECMN LINE,PBS,0 
 LIST     SPACE  4,20 
***       LIST,LINES,/STRING/.
*         LIST,LINE,F=LFN.
* 
*         ALLOWS THE USER TO LIST SELECTED LINES FROM PRIMARY AND 
*         SECONDARY FILES TO THE TERMINAL.
* 
*         FIRST SYNTAX - PRIMARY FILES ONLY.
* 
*         LINES = ANY NUMBER OF LINE NUMBERS OR LINE RANGES 
*         IN ASCENDING ORDER. 
*         /STRING/ = A DELIMITED SEQUENCE OF CHARACTERS.
* 
*         SECOND SYNTAX - ANY LOCAL FILE. 
* 
*         LINE = ONE LINE NUMBER OR ONE LINE RANGE.  ONLY ONE 
*         SUCH PARAMETER MAY APPEAR WHEN F=LFN IS SPECIFIED.
*         LFN = FILE TO BE LISTED.  IF OMITTED, PRIMARY FILE ASSUMED. 
* 
*         ALL PARAMETERS ARE OPTIONAL.
  
  
          USECMN LIST,LIS,0 
 LNH      SPACE  4
***       LNH,LINES,/STRING/. 
*         LNH,LINE,F=LFN. 
* 
*         THIS COMMAND WORKS THE SAME AS *LIST*.
  
  
          USECMN LNH,LIS,0
 LOGIN    SPACE  4
***       LOGIN,ANAME.
* 
*         SAME AS *HELLO* 
  
  
          USECMN LOGIN,PBS,0,CHGR,,(ALL)
 LOGOUT   SPACE  4,10 
***       LOGOUT,ANAME. 
* 
*         SAME AS *BYE,ANAME*.
  
  
          USECMN LOGOUT,PBS,0,CHGR,,(ALL) 
 LO72     SPACE  4
***       LO72. 
*         SEE LO72 DOCUMENTATION. 
  
  
          USECMN LO72,PBS 
 MOVE     SPACE  4,15 
***       MOVE,LR,N,Z.
* 
*         THIS PRIMARY FILE EDITING COMMAND MOVES LINES FROM ONE PLACE
*         TO ANOTHER, DELETING THE ORIGINAL LINES.
* 
*         LR = LINE NUMBER OR RANGE OF LINES TO BE MOVED. 
*         N = LINE NUMBER AFTER WHICH TO INSERT THE MOVED LINES.
*         Z = LINE NUMBER INCREMENT USED TO GENERATE NEW LINE NUMBERS 
*         ON MOVED LINES. 
* 
*         N AND Z ARE OPTIONAL. 
  
  
          USECMN MOVE,IED,0 
 NEW      SPACE  4
***       NEW,LFN.
* 
*         THIS CAUSES ALL OF THE USER,S CURRENT FILES (NON-PERMANENT) 
*         TO BE PURGED.  A NEW PRIMARY FILE IS THEN ESTABLISHED FOR 
*         THE USER. 
* 
*         PARAMETERS- 
*         LFN = OPTIONAL FILE NAME. 
* 
*         RETURN- 
*         *FILE NAME * = USER SUPPLIES FILE NAME. 
  
  
          USECMN NEW,PFC,3
 NORMAL   SPACE  4
***       NORMAL. 
* 
*         CLEARS THE SPECIAL OPTIONS ASCII, BRIEF, AND TAPE 
*         MODES AND ODD PARITY. 
  
  
          USECMN NORMAL,NOR,,,,(ALL)
 NOSORT   SPACE  4
***       NOSORT. 
* 
*         ALLOWS THE USER TO PREVENT HIS PRIMARY FILE FROM BEING
*         SORTED ON A LIST OR A RUN COMMAND.  THIS COMMAND MUST 
*         BE ENTERED AFTER ALL CORRECTION LINES HAVE BEEN ENTERED 
*         TO BE EFFECTIVE.
  
  
          USECMN NOSORT,NOS 
 NULL     SPACE  4
***       NULL. 
* 
*         CLEARS ALL SUB-SYSTEMS. 
  
  
          USECMN NULL,LAN,,,,(ALL)
 OLD      SPACE  4
***       OLD.
*         OLD,LFN=PFN/UN=USERNUM,PW=PASSWOR.
* 
*         IF FIRST FORM IS USED THEN USER IS ASKED FOR FILE NAME. 
*         SAME AS *GET* EXCEPT THAT PRIMARY FILE NAME IS SET TO LFN.
  
  
          USECMN OLD,PFC,0
 PACK     SPACE  4
***       PACK,LFN1,LFN2,NR.
* 
*         READS LFN1 TO EOI AND WRITES IT TO LFN2 AS ONE LOGICAL
*         RECORD.  IF LFN1 AND LFN2 ARE NULL, THEN THE PRIMARY FILE 
*         IS PACKED AND WRITTEN BACK.  IF NR IS SPECIFIED AND LFN1
*         IS NOT THE PRIMARY FILE, LFN1 IS NOT REWOUND BEFORE 
*         THE PACK. 
  
  
          USECMN PACK,PAC,4 
 PACKNAM  SPACE  4,10 
***       PACKNAM,PN=DNAM,R=TYPE. 
* 
*         DIRECTS SUBSEQUENT PERMANENT FILE REQUESTS TO THE 
*         NAMED AUXILIARY DEVICE *DNAM* OF TYPE *TYPE*.  THE *PN=*
*         PORTION OF *PN=DNAM*, AND *R=TYPE*, ARE OPTIONAL. 
  
  
          USECMN PACKNAM,PBS,5,,,(ALL)
 PARITY   SPACE  4
***       PARITY,PARAM. 
* 
*         SETS TERMINAL PARITY. IF NO PARAMETER IS ENTERED, 
*         ODD PARITY IS ASSUMED.
* 
*         PARAMETERS- 
*         PARAM = *ODD*.  SET ODD PARITY. 
*               = *EVEN*.  SET EVEN PARITY. 
* 
*         ERRORS- 
*         *INCORRECT PARAMETER.* = AN UNRECOGNIZABLE PARAMETER
*         WAS ENTERED.
  
  
          USECMN PARITY,PAR,2,SCOM+INVN,,(ALL)
 PASSWORD SPACE  4
***       PASSWOR,OLD,NEW.
* 
*         ALLOWS THE USER TO CHANGE HIS PASSWORD. 
* 
*         PARMETERS-
*         OLD = USER,S CURRENT PASSWORD.
*         NEW = NEW PASSWORD. 
  
  
          USECMN PASSWOR,PBS,3,,,(ALL)
 PERMIT   SPACE  4
***       PERMIT. 
* 
*         ALLOWS THE USER TO GRANT AN EXPLICIT PERMISSION TO ACCESS 
*         ONE OF HIS FILES TO ANOTHER USER. (SEE PFILES)
  
  
          USECMN PERMIT,PBS,0 
 PRI      SPACE  4,10 
***       PRIMARY,LFN.
* 
*         MAKES LOCAL FILE *LFN* PRIMARY FILE.
  
  
          USECMN PRIMARY,PFC,2
 PURGE    SPACE  4
***       PURGE,PFN/UN=USERNUM. 
* 
*         ALLOWS A USER TO PURGE A FILE FROM THE PERMANENT FILE 
*         SYSTEM. (SEE PFILES)
  
  
          USECMN PURGE,SAV,0
 QGET     SPACE 4,15
***       QGET,JSN,Q,UJN. 
* 
*         ALLOWS USERS TO OBTAIN JOB OUTPUT FROM PRINT, PUNCH OR PLOT 
*         QUEUES. 
* 
*         JSN = JOB SEQUENCE NUMBER OF QUEUE FILE.
*         Q = QUEUE TYPE:  PR, PU, PL OR TT.  PR IS DEFAULT.
*         UJN = USER JOB NAME OF QUEUE FILE.
* 
*         EITHER JSN OR UJN MUST BE SPECIFIED. THE LOCAL FILE NAME OF 
*         THE QUEUE FILE WILL BE JSN IF SPECIFIED, OR UJN IF
*         JSN IS OMITTED. 
  
  
          USECMN  QGET,PBS,0
 READ     SPACE  4,15 
***       READ,LFN,N,Z. 
* 
*         THIS COMMAND ADDS THE CONTENTS OF A FILE TO THE PRIMARY FILE. 
* 
*         LFN = FILE TO ADD TO PRIMARY FILE.  LINE NUMBERS ARE OPTIONAL 
*         ON THIS FILE. 
*         N = NUMBER OF LINE AFTER WHICH TO INSERT FILE.
*         Z = LINE NUMBER INCREMENT.
* 
*         N AND Z ARE OPTIONAL. 
  
  
          USECMN READ,IED,0 
 RECOVER  SPACE  4
***       RECOVER,NNNN. 
* 
*         THIS COMMAND ALLOWS A USER TO ATTEMPT TO PICK UP FROM WHERE 
*         HE WAS AT AFTER A LOSS OF COMMUNICATIONS OR A SYSTEM
*         FAILURE, OR A USER DETACH.
* 
*         PARAMETERS- 
*         NNNN = JSN OF JOB TO RECOVER. 
* 
*         REPLYS- 
*         *JOB NOT FOUND.*  JSN WAS NOT IN EJT. 
*         *JOB NOT DETACHED.*  JSN POINTS TO NON-DTCS JOB.
*         *JOB NOT RECOVERABLE.*  SOME OTHER REASON PREVENTED RECOVERY, 
*         I.E. BAD ROLLOUT FILE.
  
  
          USECMN RECOVER,PBS,0,,,(ALL)
          SPACE  4,10 
***       RELEASE.
* 
*         ALLOWS USER TO RELEASE ONE OR MORE TAPE FILES FROM THE
*         USERS TAPE CATALOG.  (SEE TMS REFERENCE MANUAL FOR DETAILS.)
  
  
          USECMN  RELEASE,PBS,0 
 RENAME   SPACE  4
***       RENAME,LFN1=LFN2. 
* 
*         CHANGES THE NAME OF FILE *LFN2* TO NAME *LFN1*.  IF FILE
*         *LFN1* WAS PREVIOUSLY DEFINED IT IS DROPPED.
  
  
          USECMN RENAME,PBS,0 
 REPLACE  SPACE  4
***       REPLACE,LFN=PFN.
* 
*         ALLOWS THE USER TO REPLACE A FILE THAT HE HAS SAVED IN
*         THE PERMANENT FILE SYSTEM. (SEE PFILES) 
  
  
          USECMN REPLACE,SAV,0
 RESEQ    SPACE  4
***       RESEQ,NNNNN,YYYYY,T 
* 
*         ALLOWS THE USER TO RESEQUENCE HIS PRIMARY FILE. 
* 
*         PARAMETERS- 
*         NNNNN = THE NUMBER TO START THE NEW FILE WITH.
*         IF NULL, 100 IS ASSUMED.
*         YYYYY = THE INCREMENT TO BE ADDED TO NNNNN FOR EACH LINE. 
*         IF NULL, 10 IS ASSUMED. 
*         T = TYPE OF FILE. 
*         IF T = *B*, FILE TYPE IS ASSUMED BASIC AND INTERNAL SEQUENCE
*         NUMBERS ARE RESEQUENCED.
*         IF T = *T*, A FIVE DIGIT SEQUENCE NUMBER + BLANK ARE ADDED
*         TO THE BEGINNING OF ALL LINES WITH NO INSPECTION FOR
*         LEADING LINE NUMBERS. 
*         IF T IS OMITTED, IT DEFAULTS TO *B* IF UNDER BASIC SUBSYSTEM, 
*         OTHERWISE, THE FILE IS TREATED AS A FORTRAN TYPE FILE WHERE 
*         ALL LEADING LINE NUMBERS ARE RESEQUENCED WITH NUMBERS BEING 
*         SUPPLIED WHERE NONE ARE PRESENT.
* 
*         ERRORS- 
*         *INCORRECT PARAMETER.* = INCREMENT IS ZERO. 
  
  
          USECMN RESEQ,RER,4
          SPACE  4,10 
***       RESERVE.
* 
*         ALLOWS USER TO RESERVE A CENTER-OWNED SCRATCH TAPE.  (SEE 
*         TMS REFERENCE MANUAL FOR DETAILS.)
  
  
          USECMN  RESERVE,PBS,0 
 RETURN   SPACE  4
***       RETURN,LFN. 
* 
*         SEE *FILES*.
  
  
          USECMN RETURN,PBS,0 
 REWIND   SPACE  4
***       REWIND,LFN. 
* 
*         REWINDS FILE *LFN*. 
  
  
          USECMN REWIND,PBS,0 
 RFL      SPACE  4,15 
***       RFL,CM=NNNNNN,EC=MMMM.
* 
*         ALLOWS THE USER TO SPECIFY THE INITIAL RUNNING FIELD LENGTH 
*         FOR EACH SUBSEQUENT JOB STEP. 
* 
*         PARAMETERS- 
*         NNNNNN = DESIRED CENTRAL MEMORY FIELD LENGTH.  THIS VALUE 
*         WILL BE ROUNDED UP TO THE NEAREST 100B.  ASSUMED TO BE OCTAL
*         UNLESS AN 8, 9 OR D SUFFIX PRESENT. 
*         MMMM = DESIRED EXTENDED MEMORY FIELD LENGTH IN OCTAL.  MMMM 
*         IS THE ACTUAL EXTENDED MEMORY DIVIDED BY 1000B. 
  
  
          USECMN RFL,PBS,5
 RNH      SPACE  4
***       RNH.
* 
*         SAME AS THE *RUN* COMMAND.
  
  
          USECMN RNH,RUN,0,,,(BASS,FORS,FTNS,EXES)
 ROUT     SPACE  4
***       ROUT=XX.
* 
*         SETS NUMBER OF RUBOUTS AFTER CARRIAGE RETURN TO XX. 
*         XX MUST BE LESS THAN 31.
*         IF XX IS NULL, SYSTEM DEFINED NUMBER WILL BE SET. 
  
  
          USECMN ROUT,ROT,2,SCOM+INVN,,(ALL)
 RUN      SPACE  4
***       RUN,B=LFN,C=LFN,I=LFN,T,Q1,Q2,QN. 
* 
*         ALLOWS THE USER TO COMPILE IF NECESSARY AND BEGIN EXECUTION 
*         OF HIS PROGRAM. 
* 
*         PARAMETERS- 
*         THE FOLLOWING ARE OPTIONAL
*         B = SPECIFIES THAT A BINARY FILE CONTAINING THE OBJECT
*         CODE IS TO BE GENERATED ON FILE *LFN*.
*         C = SAME AS *B*.
*         I = USE FILE LFN INSTEAD OF PRIMARY FILE.  FILE IS ASSUMED
*         SORTED. 
*         T = TRANSMIT THE FOLLOWING PARAMETER STRING AS A CONTROL
*         COMMAND STRING FOLLOWING THE FILE NAME.  APPLIES TO EXECUTE 
*         SYSTEM ONLY.
  
  
          USECMN RUN,RUN,0,,,(BASS,FORS,FTNS,EXES)
 SAVE     SPACE  4
***       SAVE,LFN=PFN. 
* 
*         SAME AS *REPLACE* EXCEPT THAT THE FILE *PFN* CANNOT 
*         PREVIOUSLY EXIST IN THE PERMANENT FILE SYSTEM.  (SEE PFILES)
  
  
          USECMN SAVE,SAV,0 
 SCOPY    SPACE  4,10 
***       SCOPY,LFN.
* 
*         THIS COMMAND COPIES LFN FROM PRESENT POSITION TO EOF TO THE 
*         OUTPUT FILE, REPORTING FILE STRUCTURE (EOR-S AND EOF-S) IN
*         READABLE FORMAT.  FOR OTHER PARAMETERS AVAILABLE ON THIS
*         COMMAND, SEE THE NOS REFERENCE MANUAL, VOLUME ONE.
* 
*         LFN = LOCAL FILE NAME, DEFAULT INPUT. 
  
  
          USECMN SCOPY,PBS,0
 SCREEN   SPACE  4,10 
***       SCREEN. 
*         SCREEN,TM=MNEMONIC. 
*         SCREEN,MNEMONIC.
* 
*         SETS THE TERMINAL IN SCREEN MODE AND OPTIONALLY SETS THE
*         TERMINAL MODEL. 
* 
*         PARAMETERS- 
*         MNEMONIC = TERMINAL MODEL.
  
  
          USECMN SCREEN,PBS,0 
 SETASL   SPACE  4,12 
***       SETASL,SSSSS
* 
*         ALLOWS THE USER TO SPECIFY HIS TOTAL ALLOWABLE SRU
*         ACCUMULATON.
* 
*         PARAMETERS -
*         SSSSS = DESIRED SRU ACCOUNT BLOCK LIMIT.  THIS VALUE WILL BE
*         ROUNDED UP TO THE NEAREST 10.  ASSUMED TO BE IN DEFAULT 
*         BASE UNLESS POST RADIX GIVEN.  IF NULL, DEFAULT IS ASSUMED. 
  
  
          USECMN  SETASL,PBS,2
 SETFS    SPACE  4,15 
***       SETFS,LFN1,LFN2,...,LFNN/FS=FS. 
*         SETFS,*,LFN1,LFN2,...,LFNN/FS=FS. 
* 
*         SET THE AUTO-DROP OR NO-AUTO-DROP STATUS ON FILES ASSIGNED
*         TO YOUR JOB.  IF NO-AUTO-DROP IS SET, THE FILE IS NOT 
*         RELEASED FROM YOUR JOB BY COMMANDS *NEW*, *OLD*, *CLEAR*, 
*         +RETURN,*+ OR +UNLOAD,*+.  THE FIRST FORMAT ASSIGNS THE 
*         SPECIFIED STATUS TO THE FILES LISTED.  THE SECOND FORMAT
*         ASSIGNS THE SPECIFIED STATUS TO ALL FILES ASSIGNED TO THE 
*         JOB, EXCEPT THE FILES LISTED. 
* 
*         LFNX = LOCAL FILE NAME. 
*         FS   = SPECIFIES EITHER THE AUTO-DROP (FS=AD) OR NO-AUTO- 
*                 DROP (FS=NAD) STATUS.  THE DEFAULT FOR USER-CREATED 
*                 FILES IS AUTO-DROP. 
  
  
 SETFS    USECMN  SETFS,PBS,0 
 SETJOB   SPACE 4,10
***       SETJOB,UJN,DC,OP. 
* 
*         SPECIFIES USER JOB NAME, DISPOSITION OF DETACHED JOB OUTPUT 
*         UPON JOB COMPLETION, OR END OF JOB PROCESSING FOR DETACHED
*         JOB.  ANY COMBINATION OF PARAMETERS MAY BE SPECIFIED. 
* 
*         UJN = USER JOB NAME.
*         DC  = OUTPUT DESTINATION:  TO, NO, BC, RB, DF.
*         OP  = END OF DETACHED JOB OPTION:  SU, TJ.
  
  
          USECMN  SETJOB,PBS,0
 SETJSL   SPACE  4,12 
***       SETJSL,SSSSS
* 
*         ALLOWS THE USER TO SPECIFY THE ALLOWABLE SRU ACCUMULATION 
*         DURING EACH JOB STEP. 
* 
*         PARAMETERS -
*         SSSSS = DESIRED SRU JOB STEP LIMIT.  THIS VALUE WILL BE 
*         ROUNDED UP TO THE NEAREST 10.  ASSUMED TO BE IN DEFAULT BASE
*         UNLESS POST RADIX GIVEN.  IF NULL, DEFAULT IS ASSUMED.
  
  
          USECMN  SETJSL,PBS,2
 SETTL    SPACE  4
***       SETTL,NNNNN.
* 
*         ALLOWS THE USER TO INCREASE HIS TOTAL ALLOWABLE CPU TIME. 
* 
*         PARAMETERS- 
*         NNNNN = DESIRED TIME LIMIT.  THIS VALUE WILL BE ROUNDED 
*         UP TO THE NEAREST 10.  ASSUMED TO BE IN DEFAULT BASE UNLESS 
*         POST RADIX GIVEN. 
*         IF NULL, DEFAULT IS ASUMED. 
  
  
          USECMN SETTL,PBS,2
 SORT     SPACE  4
***       SORT,LFN,NC=N.
* 
*         ALLOWS THE USER TO FORCE SORTING OF HIS PRIMARY FILE. 
*         IF *LFN* (OPTIONAL IS GIVEN, A SORT IS PERFORMED IMMEDIATLEY
*         ON THE FILE NAMED.  A FILE OF ANY LENGTH MAY BE SORTED
*         BY THIS METHOD. 
*         *NC=N* IS AN OPTIONAL PARMETER WHICH SPECIFIES THE NUMBER 
*         OF CHARACTERS TO SORT ON.  THIS IS IN THE RANGE OF 1 TO 10. 
  
  
          USECMN SORT,SOF,0 
 STATUS   SPACE  4
***       STATUS,N. 
*         ALLOWS THE USER TO FIND OUT HIS CURRENT STATUS. 
* 
*         PARAMETERS- 
*         N = F, RETURN FILE DESCRIPTION INFORMATION FOR ALL FILES. 
*         N = T, RETURN CUMALATIVE CPU TIME USED. 
*         N = (J=JOBNAME), DETERMINE STATUS OF JOB *JOBNAME*. 
* 
*         RETURNS-
*         *TTY  NNN*, WHERE NNN = TERMINAL NUMBER.
*         *SYSTEM -  XXXXXXX*, WHERE XXXXXXX = NAME OF SYSTEM.
*         *FILE NAME  FILENAM*, WHERE FILENAM = PRIMARY FILE NAME.
*         *STATUS -  ZZZZZZ*, WHERE ZZZZZZ = USER,S STATUS .
  
  
          USECMN STATUS,STA,0,SCOM,,(ALL) 
 STOP     SPACE  4
***       STOP. 
* 
*         ALLOWS THE USER TO STOP EXECUTION OF HIS JOB. 
*         IF THE USER WANTS TO STOP HIS JOB WHILE IT IS WAITING 
*         FOR INPUT HE MAY TYPE *STOP* AFTER THE QUESTION MARK HAS
*         BEEN OUTPUT.
  
  
          USECMN  STOP,STO,,SCOM+INVN,,(ALL)
 SUBMIT   SPACE  4
***       SUBMIT,LFN,Q.C
* 
*         LFN = PRIMARY FILE NAME IF NO PARAMETERS GIVEN. 
*         SEE SUBMIT DOCUMENTATION. 
  
  
          USECMN SUBMIT,SUB,0 
 SUM      SPACE  4,10 
***       SUMMARY.
* 
*         RETURNS SUMMARY OF SYSTEM RESOURCES USED. 
  
  
          USECMN SUMMARY,PBS,0
 TAPE     SPACE  4
***       TAPE. 
* 
*         ALLOWS THE USER TO INPUT FROM PAPER TAPE.  THE READER 
*         WILL BE STARTED AT THE COMPLETION OF THIS COMMAND IF IT 
*         IS READY. 
  
  
          USECMN TAPE,TAP,,INVN 
 TERM     SPACE  4
***       TERM,T. 
* 
*         SET TERMINAL TYPE TO T. 
* 
*         T      TERMINAL 
* 
*         TTY    MODEL 33, 35, 37 TELETYPES.
*         713    CONTROL DATA 713.
*         COR    CORRESPONDENCE CODE. 
*         CORAPL CORRESPONDENCE CODE WITH *APL* TYPESPHERE. 
*         MEMAPL MEMOREX 1240 WITH *APL* PRINT BELT.
  
  
          USECMN TERM,TER,2,INVN
 TEXT     SPACE  4
***       TEXT. 
* 
*         ALLOWS USER TO INPUT SOURCE WITH ALPHABETIC LEADING 
*         CHARACTERS.  USER MUST ENTER *CONTROL C* (ETX) TO 
*         TERMINATE THIS MODE.
  
  
          USECMN TEXT,TXT 
 TIMEOUT  SPACE  4
***       TIMEOUT.
* 
*         CLEARS THE TIME OUT LOGOFF BIT IN 
*         THE *VDCT* WORD TO ALLOW THE TERMINAL 
*         TO BE TIMED OUT.
* 
  
  
          USECMN TIMEOUT,TIM,,,,(ALL) 
  
 TRMDEF   SPACE  4,10 
***       TRMDEF. 
* 
*         REDEFINE THE NETWORK TERMINAL CONFIGURATION.
* 
  
          USECMN TRMDEF,PBS,0,,,
  
 USER     SPACE  4
***       WHATJSN,USERNUM.
* 
*         THIS IS A PRIVILEGED COMMAND THAT ALLOWS THE USER 
*         TO DETERMINE WHAT SPIGOT(S) A GIVEN *USERNUM* IS
*         CURRENTLY CONNECTED TO. 
  
  
          USECMN WHATJSN,UNU,2,,,(ACCS) 
 WRITE    SPACE  4,15 
***       WRITE,LFN,LINES,/STRING/. 
* 
*         THIS COMMAND WRITES LINES SELECTED BY LINE NUMBER OR
*         CHARACTER CONTENT FROM THE USER-S PRIMARY FILE TO A 
*         SPECIFIED SECONDARY FILE. 
* 
*         LFN = NAME OF FILE ON WHICH TO WRITE LINES. 
*         LINES = ANY NUMBER OF LINE NUMBERS AND LINE RANGES, IN
*         ASCENDING ORDER.
*         /STRING/ = DELIMITED SEQUENCE OF CHARACTERS.
* 
*         EITHER LINES OR /STRING/ MAY BE OMITTED.
  
  
          USECMN WRITE,IED,0
 WRITEN   SPACE  4,10 
***       WRITEN,LFN,LINES,/STRING/.
* 
*         THIS COMMAND IS THE SAME AS *WRITE* EXCEPT LINE NUMBERS ARE 
*         NOT WRITTEN TO FILE LFN.
  
  
          USECMN WRITEN,IED,0 
 X,       SPACE  4
***       X,NNNNNNNNNN. 
* 
*         THIS COMMAND ALLOWS A USER TO FORCE A COMMAND 
*         TO BE PROCESSED AS A COMMAND CALL EVEN
*         THOUGH IT WOULD NORMALLY BE INTERPRETED BY *IAFEX*. 
  
  
          USECMN X,XEQ,0,,,(ALL)
 XEDIT    SPACE  4,10 
***       XEDIT.
* 
*         THIS COMMAND INITIATES THE TEXT EDITING PROGRAM,
*         *XEDIT*.
  
          USECMN XEDIT,PSS,0
 ILLEGAL  SPACE  4
**        ILLEGAL.
  
  
 TCOMI    VFD    54/0LINCORRECT,6/0 
          DATA   0           COUNT OF INCORRECT COMMANDS
 TCOML    EQU    *-TCOM 
 TCOMT    DATA   37777777777777777777B TABLE TERMINATOR 
 TCOM     SPACE  4
**        GENERATE INDEX WORDS TO COMMAND TABLE.
*         THE FOLLOWING ENABLES THE COMMAND SEARCH ROUTINE TO START 
*         THE SEARCH OF THE COMMAND TABLE AT THE FIRST COMMAND
*         WHICH BEGINS WITH THE SAME FIRST CHARACTER. 
*         THE TABLE FORMAT IS 12 BITS PER CHARACTER WITH 4 BYTES
*         USED PER WORD.  THE CHARACTER VALUE DIVIDED BY 4 GIVES THE
*         INDEX TO THE CORRECT WORD AND THE LOWER TWO BITS OF THE 
*         CHARACTER VALUE INDICATES THE BYTE.  EACH BYTE CONTAINS AN
*         ADDRESS RELATIVE TO *TCOM* WHICH IS THE FIRST WORD ADDRESS
*         OF THE COMMAND TABLE FOR COMMANDS BEGINNING WITH THAT 
*         CHARACTER.
  
  
 U1       SET    0           CHARACTER BEING PROCESSED
 U2       SET    0           CURRENT WORD COUNT THROUGH THIS INDEX WORD 
 U3       SET    0           POSITION IN WORD 
  
 TCOMA    BSS    0
          DUP    28 
 U1       SET    U1+1 
 U4       MICRO  U1,1,* ABCDEFGHIJKLMNOPQRSTUVWXYZ *
          IF     DEF,US"U4" 
          VFD    12/US"U4"-TCOM 
          ELSE   1
          VFD    12/TCOMT-TCOM
          IFEQ   U3,3 
          VFD    12/0 
 U3       SET    0
          ELSE   1
 U3       SET    U3+1 
          ENDD
 PCM      TITLE  PCM - USER COMMAND PROCESSING ROUTINES.
          SPACE  4
**        ROUTINES FOR PROCESSING EACH TTY USER,S COMMAND.
* 
*         THE ENTRY CONDITIONS FOR ALL OF THEM ARE EXACTLY WHAT IS
*         SET UP BY SSP.
* 
*         SEE CCM AND BUFFER DOCUMENTATION FOR COMMAND PARAMETERS.
* 
*         IT IS ASSUMED THAT *VROT* IS COMPLETE AND THAT THE NEXT 
*         MESSAGE POINTER IN *VDCT* IS CLEAR FOR THE GIVEN TERMINAL 
*         PRIOR TO ANY ENTRY TO THESE ROUTINES. 
 ACC      SPACE  4
**        ACC - SET *ACCESS* SUBSYSTEM. 
  
  
 ACC      BSS    0
          SA1    A0+VDCT     CHECK USER ACCESS LEVEL
          LX1    59-13
          PL     X1,ACC1     IF USER NOT VALIDATED
          SA1    A0+VSTT     SET SYSTEM 
          MX6    57 
          LX6    12 
          BX1    X6*X1
          SX6    ACCS*10000B
          BX6    X1+X6
          SA6    A1 
          EQ     RDY         ISSUE *READY*
  
 ACC1     SMA    X6,( INCORRECT COMMAND."NL") 
          EQ     PCS5        ISSUE MESSAGE
 AUT      SPACE  4
**        AUT - INITIALIZES FOR PROCESSING OF AUTO LINE NUMBERS.
  
  
 AUT      BSS    0
          SA1    A0+VFNT
          MX5    42 
          SB7    B1          SET DECIMAL BASE 
          BX5    X1*X5
          LX1    59-12
          ZR     X5,IPF      IF NO PRIMARY FILE 
          SMA    X6,( WRITE ON READ-ONLY FILE."NL") 
          NG     X1,PCS5     IF WRITE LOCKOUT BIT SET 
          SA5    CCMA        CHECK PARAMETER COUNT
          SX7    3R100       SET DEFAULT LINE NUMBER
          SB6    3*6-1       SET BIT COUNT
          LX7    42 
          SX5    X5-1 
          ZR     X5,AUT0     IF DEFAULT LINE NUMBER 
          SA5    PBUF+2      CHECK NUMBER FOR NUMERICS
          ZR     X5,AUT0     IF DEFAULT LINE NUMBER 
          BX7    X5 
          SB6    B0 
 AUT0     SA7    AUTB        SAVE DISPLAY CODED LINE NUMBER 
          BX5    X7 
          RJ     DXB
          NZ     X4,IPL      IF ERROR IN CONVERSION 
          SX7    100000 
          IX7    X6-X7
          PL     X7,IPL      IF LARGER THAN FIVE DIGITS 
          SA4    =8L00000 "EA"  SET *EA* CONTROL BYTE 
          SA1    AUTB        RECOVER DISPLAY CODED LINE NUMBER
          NZ     B6,AUT1     IF BIT COUNT DETERMINED
          SA2    PBUF+3      GET CHARACTER COUNT
          UX2    B6,X2
          SX2    B6 
          SB6    B6-6 
          PL     B6,IPL      IF MORE THAN 5 DIGITS
          SX3    6           BITS PER CHARACTER 
          IX2    X3*X2       CALCULATE BITS 
          SB6    X2-1 
 AUT1     MX7    1           GENERATE MASK
          AX7    X7,B6
          SB6    B6+31
          LX7    X7,B6
          LX1    X1,B6       POSITION LINE NUMBER 
          BX4    -X7*X4      MASK CONTROL BYTE
          BX7    X4+X1       ADD IN LINE NUMBER 
          BX4    X7 
          SA7    AUTB        SAVE CONTROL BYTE
          RJ     SSP
          SA6    B4+B1       SAVE LINE NUMBER VALUE 
          MX6    36          MASK OUT LINE NUMBER 
          BX6    X4*X6
          SA6    A6+B1       SAVE DISPLAY CODED LINE
          SA5    PBUF+4 
          SB7    B1          SET DECIMAL BASE 
          SA1    CCMA        CHECK PARAMETER COUNT
          SX1    X1-3 
          NG     X1,AUT2     IF DEFAULT 
          RJ     DXB
          NZ     X4,IPL      IF INCORRECT PARAMETER 
          SX7    10000
          IX7    X6-X7
          PL     X7,IPL      IF INCORRECT PARAMETER 
          RJ     SSP
          NZ     X6,AUT3     IF NOT DEFAULT 
 AUT2     SX6    10 
 AUT3     SA6    B4          SAVE INCREMENT IN POT
          SA1    A0+VDCT     STORE AUTO POT POINTER 
          SX6    B3 
          LX6    24 
          BX1    X6+X1
          SX6    102B        SET READ DATA AND AUTO MODE
          LX6    48 
          BX6    X6+X1
          SA6    A1 
          SB3    B0 
          SB4    B1+         SET WORD COUNT OF MESSAGE
          IFMUX  AUT4 
          SX6    AUTB        SEND NEXT LINE TO TERMINAL 
          RJ     MVA
          EQ     PCSX        EXIT 
  
 AUT4     RJ     GOP         GET POT FOR CONTROL BYTE 
          SA1    AUTB        GET CONTROL BYTE 
          BX6    X1 
          SA6    B4          SAVE CONTROL BYTE IN POT 
          SA1    A0+VDCT
          MX5    -3 
          LX5    36-0 
          BX6    X5*X1       CLEAR FIRST WORD 
          SX2    B3 
          BX6    X2+X6       ADD IN POT POINTER 
          SX1    B1          SET AUTO MODE BIT FOR MUX TERMINAL 
          LX1    45-0 
          BX6    X1+X6
          SA6    A1+
          EQ     PCSX        EXIT 
  
*         ENTER HERE FROM *CLI* TO PROCESS AUTO MODE LINE 
*         NUMBERS OR *0003* BYTE AUTO MODE. 
*         (B3) = COMMAND POT POINTER. 
*         (B4) = COMMAND POT ADDRESS. 
*         (X7) = FIRST WORD IN COMMAND POT. 
*         SEE *VDCT* FOR EXPLANATION OF WHAT IS IN THE
*         AUTO POT. 
  
 AUT5     IFNET  AUT5.1 
          SA1    A0+VDCT
          LX1    59-45
          PL     X1,PCM      IF *0003* BYTE 
          EQ     AUT5.2      CONTINUE MUX PROCESSING
  
 AUT5.1   SA1    A0+VDCT     CHECK FOR CANCEL AUTO LINE 
          LX1    59-53
          SX6    B0          CLEAR FLAG 
          PL     X1,AUT8     IF CANCEL LINE NOT SET 
          MX2    1
          BX6    -X2*X1      CLEAR CANCEL AUTO LINE BIT 
          LX6    53-59
          SA6    A1+
 AUT5.2   SA1    B4+X7       GET BEGINNING OF LINE
          SB5    -7 
          MX2    30 
          BX2    X2*X1
          MX6    -6 
 AUT6     SB5    B5+6        INCREMENT MASK SHIFT COUNT 
          LX2    6
          BX3    -X6*X2 
          SX4    X3-1R0 
          SX3    X3-1R+ 
          NG     X4,AUT7     IF ALPHABETIC
          NG     X3,AUT6     IF NUMERIC 
 AUT7     NG     B5,AUT25    IF COMMAND LINE
          MX5    1           BUILD MASK 
          AX4    X5,B5
          BX5    X4*X1
          SB7    B1          SET DECIMAL CONVERSION 
          RJ     DXB
          RJ     SSP
 AUT8     SA1    A0+VDCT
          MX2    -12
          AX1    24 
          BX2    -X2*X1 
          LX2    3
          TB5    X2,VBMP     CALCULATE POT ADDRESS
          SA2    B5          GET INCREMENT
          SA1    B5+B1       GET LINE NUMBER VALUE
          PL     X2,AUT10    IF NOT *0003* BYTE AUTO MODE 
          UX3    X1,B6       GET COUNT AND ADDRESS
          SA2    X3          GET WORD CONTAINING *0003* BYTE
          SB6    B6+B1
          MX5    6
 AUT9     LX5    6
          SB6    B6-B1
          NZ     B6,AUT9     IF THIS NOT CONTROL BYTE 
          BX7    -X5*X2      CLEAR CONTROL BYTE 
          SA7    A2          REWRITE WORD 
          SB5    A2+         SET CONTROL BYTE WORD POINTER
          EQ     AUT12       CONTINUE 
  
 AUT10    ZR     X6,AUT11    IF CANCEL LINE NOT SET 
          BX1    X6          REPLACE WITH NEW LINE NUMBER 
          SX7    B0 
          SA7    B5+2        CLEAR DISPLAY CODED LINE NUMBER
 AUT11    IX6    X1+X2
          SA6    A1+         REPLACE WITH NEXT LINE NUMBER
          BX1    X6 
          RJ     CDD         CONVERT NUMBER 
          SX1    B2-31
          PL     X1,AUT25    IF LINE NUMBER OVERFLOW
          LX6    30          POSITION NUMBER
          SA1    =2222222222BS30
          MX5    1
          SB3    B2-30+1     SET MASK SHIFT COUNT 
          LX5    X5,B3
          BX1    X5*X1
          MX4    36 
          IX6    X6-X1
          SX7    00150000B   SET *EA* CONTROL BYTE
          BX6    X4*X6
          BX7    X6+X7
          SA7    AUTB        SAVE CONTROL BYTE
          SB5    B5+2        SET POINTER TO LINE NUMBER 
  
*         THE DISPLAY CODED CHARACTERS IN B5 POT ARE
*         APPENDED TO THE INPUT LINE. 
  
 AUT12    RJ     SSP         RESET ENTRY PARAMETERS 
          SB7    B4+VCPC     CALCULATE END OF POT 
          SB4    B4+X7       CALCULATE FIRST WORD OF POT
          SX7    B2 
          SA7    AUTC 
          SX7    B1          INITIALIZE EOL FLAG
          MX4    6
          MX5    12 
          SA2    B4          GET FIRST WORD OF POT
          SA1    B5+         SET UP POINTER TO CONCATENATE CHARACTERS 
          IFNET  AUT13
          SX1    B0 
 AUT13    SA6    A1          REPLACE NEW DISPLAY CODED LINE 
          SB6    B0+
          BX3    X5*X1
          ZR     X3,AUT23    IF NO AUTO CHARACTERS
          SB2    10D
          BX6    X1 
 AUT14    BX1    X5*X6
          ZR     X1,AUT15    IF END-OF-LINE FOUND 
          LX6    6
          SB2    B2-B1       ROOM LEFT IN WORD
          NZ     B2,AUT14    IF MORE CHARACTERS IN WORD 
 AUT15    ZR     B2,AUT22    IF WRITE WORD FULL 
          NZ     B6,AUT18    IF MORE CHARACTERS IN READ WORD
          SA2    B4          GET NEXT WORD OF POT 
          SB4    B4+B1       INCREMENT POINTER
          LT     B4,B7,AUT17  IF NOT END OF POT 
          BX5    X6          SAVE WRITE WORD
          RJ     GPL         GET POT LINK 
          NZ     B3,AUT16    IF POT LINK
          SA1    AUTC        RESTORE TERMINAL NUMBER
          SB2    X1+
          SMA    X6,( INPUT LOST, REENTER LAST LINE."NL") 
          EQ     PCS5        ISSUE MESSAGE TO TERMINAL
  
 AUT16    SB7    B4+VCPC
          MX4    6
          BX6    X5          RECOVER WRITE WORD 
 AUT17    SB6    10D         RESET CHARACTERS IN READ WORD
 AUT18    BX3    X4*X2       GET NEXT CHARACTER 
          BX6    -X4*X6      CLEAR BYTE IN WRITE WORD 
          NG     X7,AUT21    IF EOL ALREADY FOUND 
          NZ     X3,AUT19    IF NOT 00 CHARACTER
          SX7    X7-1 
          EQ     AUT20       ADD NEXT CHARACTER 
  
 AUT19    SX7    B1 
 AUT20    BX6    X6+X3       ADD CHARACTER TO WRITE WORD
 AUT21    LX6    6
          LX2    6
          SB2    B2-B1       CHARACTERS IN WRITE WORD 
          SB6    B6-B1       CHARACTERS LEFT IN READ WORD 
          EQ     AUT15       CONTINUE SEARCH
  
 AUT22    SA6    A2 
 AUT23    BX6    X6-X6       CLEAR WRITE WORD 
          SB2    10D         RESET CHARACTER COUNT
          PL     X7,AUT15    IF NO EOL FOUND IN THIS WORD 
          SA1    AUTC        RECOVER TERMINAL NUMBER
          SB2    X1 
          IFNET  AUT26       ASSIGN OUTPUT TO TERMINAL
          SA2    AUTB        PUT CONTROL BYTE IN POT
          BX6    X2 
          SA6    B4 
          SA1    A0+VDCT     ASSIGN OUTPUT TO DRIVER
          SB7    B7-VCPC     SET WORD TO BEGIN OUTPUTTING AT
          SX6    B4-B7
          LX6    36 
          SX4    B3 
          BX6    X1+X6
          BX6    X6+X4
          SA6    A1 
 AUT24    RJ     SSP         RESET ENTRY POT POINTER
          SX6    B3 
          BX1    X4-X6
          ZR     X1,PCSX     IF NO POT TO RELEASE, EXIT 
          SX5    2000B+/TLX/RIN  SET UP RELEASE INPUT DRIVER REQUEST
          LX6    12 
          LX5    48 
          BX7    X5+X6
          LX4    24 
          SX2    B2 
          BX7    X7+X4
          BX7    X7+X2
          SA7    SSPA 
          RJ     SSP
          EQ     RIN
  
 AUT25    RJ     SSP
          RJ     CAM         CLEAR AUTO MODE
          RJ     DAP
          RJ     DLP
          RJ     SSP         RESET ENTRY PARAMETERS 
          EQ     PCM         PROCESS AS COMMAND 
  
*         ASSIGN AUTO MODE OUTPUT TO TERMINAL.
  
 AUT26    SX7    B3+         SAVE POT POINTER 
          SA7    AUTA 
          SA3    A0+VDCT
          LX3    0-24 
          MX7    -12
          BX3    -X7*X3 
          LX3    3
          TB5    X3,VBMP
          SA3    B5+
          PL     X3,AUT27    IF NOT *0003* BYTE AUTO MODE 
          RJ     CAM         CLEAR AUTO MODE
          RJ     SSP         RESET ENTRY PARAMETERS 
          SB5    B2 
          RJ     GRT
          AX4    48 
          SX5    X4-INP$
          ZR     X5,CLI4     IF INPUT TO A RUNNING PROGRAM
          EQ     PCM         PROCESS AS COMMAND 
  
 AUT27    TX1    B4,-VBMP    GET POT POINTER AND WORD COUNT 
          BX2    X1 
          SA3    A0+VDPT
          AX2    3           POT POINTER
          MX7    -24
          LX2    3
          BX1    X1-X2       WORD COUNT 
          BX7    -X7*X3      CLEAR OLD POT POINTERS 
          LX2    36-3 
          LX1    30-0 
          BX7    X1+X7       ADD NEW CURRENT POT WORD COUNT 
          BX7    X2+X7       ADD NEW CURRENT POT
          LX2    48-36
          LX1    33-30
          BX7    X1+X7       ADD NEW FIRST POT
          BX7    X2+X7       ADD NEW FIRST POT FIRST WORD INDEX 
          SA7    A3 
          SA2    AUTB        GET CONTROL BYTE 
          BX6    X2 
          SA6    B4          PUT CONTOL BYTE IN POT 
          SA1    A0+VDCT     ASSIGN CONTOL BYTE TO DRIVER 
          SB7    B7-VCPC
          SX6    B4-B7       CALCULATE WORD COUNT 
          LX6    36 
          SX4    B3          GET POT POINTER
          BX6    X1+X6       ADD IN WORD COUNT
          BX6    X6+X4       ADD IN POT POINTER 
          SA6    A1 
          SX6    AUTB        SEND NEXT LINE NUMBER TO THE TERMINAL
          SB3    B0 
          SB4    B1 
          RJ     MVA
          SA4    AUTA        RESTORE POT POINTER
          EQ     AUT24       RELEASE INPUT POT
  
 AUTA     CON    0           SAVE MESSAGE POT POINTER 
 AUTB     CON    0           NEXT AUTO LINE NUMBER
 AUTC     CON    0           TERMINAL NUMBER
 BAT      SPACE  4
**        BAT - REQUESTS A COMMAND FROM THE USER AND THEN ISSUES
*         IT TO THE SYSTEM. 
  
  
 BAT      BSS    0
          SA1    PBUF+2 
          SA3    CCMA        CHECK PARAMETER COUNT
          SX3    X3-2 
          SA2    =4R$RFL
          BX6    X2 
          SA2    A0+VSTT     SET SUBSYSTEM
          ZR     X3,BAT1     IF FIELD LENGTH GIVEN
          SA3    =1L0 
          BX7    X3 
          SA7    A1 
          SX7    1R.
          SB5    B1+         SET CHARACTER COUNT
          PX7    B5,X7
          SA7    A7+B1
 BAT1     LX6    36 
          SX4    70000B 
          BX3    -X4*X2 
          SA6    PBUF 
          SB5    4           SET CHARACTER COUNT
          SX7    1R,
          PX7    B5,X7
          SA7    A1-B1
          SX1    BATS*10000B SET BATCH SUBSYSETEM 
          BX7    X3+X1
          SA7    A2 
          EQ     PBS         BEGIN SYSTEM JOB 
  
**        ENTER WHEN COMMAND NOT IN IAFEX SUBSET. 
  
 BAT2     SX1    PBUF 
          RJ     PCB         PACK COMMAND BUFFER
          SA1    PBUF 
          SX6    B1          SET *PPI* TO SORT THE FILE 
          BX7    X1          SET *EPN*
          EQ     BJB         BEGIN JOB
 BIN      SPACE  4
**        BIN - SETS BINARY INPUT.
  
  
 BIN      BSS    0
          SA1    A0+VFNT     CHECK PRIMARY FILE 
          SA5    PBUF+2      CHECK NUMBER FOR NUMERICS
          MX7    42 
          BX7    X1*X7
          SB7    B1+         SET DECIMAL BASE 
          ZR     X7,IPF      IF NO PRIMARY FILE 
          RJ     DXB
          SX7    X6          CHECK VALUE
          AX6    12 
          NZ     X4,IPL      IF NON-NUMERIC 
  
*         PROCESS CHARACTER COUNT.
  
          SA1    =000600004000BS24
          NZ     X6,IPL      IF TOO LARGE 
          LX7    36 
          BX6    X1+X7
          ZR     X7,IPL      IF ZERO
          SA5    PBUF+4 
          SA1    CCMA        CHECK PARAMETER COUNT
          SX1    X1-3 
          SA6    BINB 
          NZ     X1,BIN1     IF NO TERMINATOR CHARACTER 
  
*         PROCESS TERMINATOR CHARACTER. 
  
          SB7    B0          SET OCTAL BASE 
          RJ     DXB
          NZ     X4,IPL      IF NON-NUMERIC 
          SX7    4000B+X6 
          AX6    8
          NZ     X6,IPL      IF MORE THAN 8 BITS
          LX7    24          MERGE TERMINATOR CHARACTER 
          SA1    BINB 
          BX6    X1-X7
          SA6    A1 
  
 BIN1     RJ     SSP
          SA2    A0+VDCT     CHECK TAPE MODE
          LX2    59-48
          SX6    BINA 
          SB4    4
          PL     X2,PCS6     NOT TAPE MODE
          SX6    BINB 
          EQ     PCS5 
  
  
 BINA     DATA   20HENTER BINARY DATA' '
          DATA   0
 BINB     CON    0006BS48 
 BRF      SPACE  4,10 
**        BRF - SET *BRIEF* MODE FLAG.
* 
*         EXIT   (VDCT) BIT 55 = BRIEF MODE SET.
  
  
 BRF      BSS    0           ENTRY
          SA1    A0+VDCT     READ VDCT
          SX6    B1          SET BRIEF MODE 
          LX6    55-0 
          BX7    X6+X1
          SA7    A1          REWRITE VDCT 
          EQ     RDY         ISSUE *READY*
 CST      SPACE  4,10 
**        DIA - ENABLES PRIVILEGED USER TO SEND MESSAGE TO
*         ANOTHER USER CURRENTLY ON THE SYSTEM. 
  
  
 DIA      BSS    0
          SA1    CCMA        CHECK PARAMETER COUNT
          SX1    X1-2 
          NG     X1,IPL      IF *JSN* NOT SPECIFIED 
          SA1    PBUF+4 
          ZR     X1,IPL      IF NULL MESSAGE
          SB7    PBUF+2      GET TERMINAL ADDRESS 
          RJ     GTA
          ZR     X4,DIA3     IF NO USER NAME
          TX1    A4,-VTTP    GET TERMINAL NUMBER
          SX2    VTTL 
          IX1    X1/X2
          SX0    A4          SAVE RECEIVER-S TERMINAL TABLE ADDRESS 
          SB5    X1 
          RJ     GRT         READ QUEUE ENTRY 
          AX4    48 
          SX2    X4-INP$     CHECK QUEUE ENTRY
          ZR     X2,DIA4     IF EXPLICIT INPUT REQUEST
          SA1    X0+VUIT     CHECK TERMINAL STATUS
          ZR     X1,DIA3     IF NOT LOGGED IN 
          SA1    X0+VSTT
          MX3    -12
          LX1    59-48
          SA2    X0+VDCT
          NG     X1,DIA3     IF LOGOUT IN PROGRESS
          LX1    59-58-59+48
          NG     X1,DIA4     IF USER BREAK IN PROGRESS
          LX1    -59+58      RESTORE VSTT 
          BX2    -X3*X2      DRIVER ASSIGNMENT
          BX1    -X3*X1      QUEUED MESSAGE POINTER 
          DX1    X1*X2       CHECK PRODUCT
          SA2    X0+VROT
          NZ     X1,DIA4     IF BOTH QUEUED OUTPUT AND REQUEST
          SA1    =C*FROM*    REPLACE COMMAND
          LX2    59-0 
          BX6    X1 
          PL     X2,DIA4     IF TERMINAL BUSY 
          SA6    PBUF 
          SX6    1R          SET SEPARATOR AND LENGTH 
          SB7    4
          PX6    X6,B7
          SA6    A6+B1
          SA1    A0+VFST     GET SENDER-S JSN 
          MX6    24 
          BX6    X6*X1
          SA6    A6+B1
          SX6    1R:         SET SEPARATOR
          PX6    X6,B7
          SA6    A6+B1
          SX1    PBUF 
          SB2    B5 
          SA0    X0 
          RJ     PCB
          SB5    B4+VCPC-1   LAST WORD OF POT 
          NG     B6,DIA0     IF WORD ALREADY FULL 
          NZ     B6,DIA1     IF NOT JUST ONE ZERO CHARACTER 
          SX6    1R          BLANK FILL LAST WORD OF MESSAGE
          SA1    B7 
          BX6    X6+X1
          SA6    A1+
 DIA0     EQ     B5,B7,DIA2  IF POT FULL
          SB7    B7+1        ADD *EOL*
          SX6    B0+
          SA6    B7+
 DIA1     EQ     B5,B7,DIA2  IF POT FULL AFTER *EOL*
          SMA    A1,("NL")   SET TERMINATION
          BX7    X1 
          SB7    B7+B1
          SA7    B7+
 DIA2     SB3    B0 
          SX6    B4 
          SB4    B7-B4
          SB4    B4+B1
          RJ     MVA
          RJ     SSP
          EQ     RDY         SEND OUT *READY.*
  
 DIA3     SMA    X6,( TERMINAL NOT ACTIVE."NL") 
          EQ     PCS5        ISSUE MESSAGE
  
 DIA4     SMA    X6,( TERMINAL BUSY."NL") 
          EQ     PCS5        ISSUE MESSAGE
 EDI      SPACE  4
**        EDI - INITIATE TEXT EDITOR. 
  
  
 EDI      BSS    0
          SA4    CCMA        COUNT PARAMETERS 
          SA2    PBUF+3      GET THIRD PARAMETER
          SX4    X4-4 
          PL     X4,PSS      IF MORE THAN THREE PARAMETERS
          SX2    X2-1R= 
          ZR     X2,PSS      IF PARAMETERS EQUATED
  
*         CHECK NON-EQUATED FILE NAME.
  
          SX4    X4+3 
          ZR     X4,EDI1     IF NO FILE NAME
          SA3    A2-B1       GET FILE NAME
          ZR     X3,EDI1     IF NULL FILE NAME
          SB6    A2-1        GET GIVEN FILE NAME
          RJ     GFN
          BX6    X2 
          EQ     EDI2 
  
 EDI1     SA1    A0+VFNT     GET PRIMARY FILE NAME
          MX2    42 
          BX6    X2*X1
          ZR     X6,IPF      IF NO PRIMARY FILE 
          LX1    59-12       GET WRITE LOCKOUT BIT
          PL     X1,EDI1.1   IF LOCKOUT BIT NOT SET 
          RJ     SSP         RESET REGISTERS
          SMA    X6,( WRITE ON READ-ONLY PRIMARY FILE."NL") 
          EQ     PCS5        ISSUE MESSAGE
  
 EDI1.1   ZR     X3,EDI2     IF NULL PARAMETER
          SX7    B1+B1       RESET PARAMETER COUNT
          SA7    CCMA 
 EDI2     RJ     CFC         COUNT FILE NAME CHARACTERS 
          SA1    =4LEDIT     SET UP COMMAND 
          BX7    X1          ENTER PROGRAM NAME 
          SA7    PBUF 
          SX7    1R,
          SB7    4           INSERT CHARACTER COUNT 
          PX7    B7,X7
          SA7    A7+B1
          SA6    A7+B1
          SA1    PBUF+5      GET MODE CHARACTER COUNT 
          UX1,B7 X1 
          SX4    X4-2 
          SA2    PBUF+4 
          PL     X4,EDI3     IF MODE PARAMETER ENTERED
          SA1    A0+VDCT     CHECK TERMINAL MODE
          LX1    59-51
          PL     X1,EDI4     IF NOT EXTENDED MODE 
          SX2    2RAS 
          LX2    48 
          SB7    B1+B1
 EDI3     BX6    X2          ENTER MODE PARAMETER 
          PX7    B6,X7       INSERT FILE NAME CHARACTER COUNT 
          SA7    A6+B1
          SA6    A7+B1
          EQ     EDI5        ENTER TERMINATOR 
  
 EDI4     SB7    B6          SET FILE NAME COUNT
 EDI5     SX7    1R.         SET TERMINATOR 
          PX7    B7,X7       INSERT CHARACTER COUNT 
          BX6    X6-X6
          SA7    A6+B1
          SA6    A7+B1
          EQ     PSS         BEGIN SYSTEM JOB WITH SORT 
 FDP      SPACE  4
**        FDP - SETS TERMINAL OPERATION TO FULL DUPLEX. 
  
  
 FDP      BSS    0
          SX2    /1TD/SFD    REQUEST DRIVER TO SET FULL DUPLEX
          SX7    RDY         SET RETURN 
          JP     DCR
 HDP      SPACE  4
**        HDP - SETS TERMINAL OPERATION TO HALF DUPLEX. 
  
  
 HDP      BSS    0
          SX2    /1TD/CFD    REQUEST DRIVER TO CLEAR FULL DUPLEX
          SX7    RDY         SET RETURN 
          JP     DCR
 IED      SPACE  4,10 
**        IED - CALL *IEDIT* TO PROCESS IN-LINE EDITING COMMAND.
* 
*         ENTRY  (B3) = POINTER TO POT CONTAINING *IEDIT* COMMAND.
* 
*         EXIT   TO BJS.
*                (B3) = POINTER TO POT CONTAINING *IEDIT* CONTROL 
*                       STATMENT.  POT CONTAINING *IEDIT* COMMAND IS
*                       LINKED TO IT. 
* 
*         USES   ALL REGISTERS. 
* 
*         CALLS  BJS, CFC, LEP, PCB, RPT. 
  
  
 IED      BSS    0           ENTRY
  
*         PROCESS FILE NAME.
  
          SA1    A0+VFNT     GET PRIMARY FILE NAME
          MX6    42 
          BX6    X1*X6
          SA6    IEDB        STORE FILE NAME
          ZR     X6,IPF      IF NO PRIMARY FILE 
          SX7    1R,
          RJ     CFC         COUNT FILE NAME CHARACTERS 
          PX6    B6,X7
          SA6    A6+B1
  
*         PROCESS CHARACTER SET.
  
          SA1    A0+VDCT
          BX2    X1 
          LX1    59-52
          SA3    IEDE        GET *ASCII8* 
          LX2    59-55
          NG     X1,IED2     IF ASCII8 MODE 
          LX1    1
          SA3    A3+B1       GET *ASCII*
          NG     X1,IED2     IF 6/12 ASCII MODE 
          SA3    A3+B1       GET *NORMAL* 
 IED2     BX6    X3 
          MX7    0
          RJ     CFC         COUNT CHARACTERS 
          SA6    IEDC 
  
*         SET UP OPTIONS. 
  
          SA1    A0+VSTT
          NG     X2,IED3     IF IN BRIEF MODE 
          SX7    1RL         SET LIST OPTION
 IED3     LX7    48 
          AX1    12          EXTRACT SUBSYSTEM
          SX2    7
          BX2    X1*X2
          SX2    X2-1 
          ZR     X2,IED6     IF BASIC SUBSYSTEM 
          SX2    X2-1 
          ZR     X2,IED7     IF FORTRAN SUBSYSTEM 
          SX2    X2-1 
          ZR     X2,IED7     IF FTNTS SUBSYSTEM 
          LX7    6
          BX2    X2-X2
          EQ     IED8        BYPASS SUBSYSTEM OPTION
  
 IED6     SX2    1RB         SET BASIC SUBSYSTEM
          EQ     IED8        OPTIONS COMPLETED
  
 IED7     SX2    1RF         SET FORTRAN/FTNTS SUBSYSTEM
  
*         COMPLETE CONTROL STATMENT.
  
 IED8     LX2    54 
          BX7    X2+X7
          ZR     X7,IED9     IF NO OPTIONS SELECTED 
          SX6    1R,
          PX6    B6,X6
          SA6    A6+B1       STORE SEPARATOR FOR CHARACTER SET
          SA1    IEDD        MOVE *OP* AND SEPARATOR
          SA2    A1+B1
          BX6    X1 
          SA6    A6+B1
          BX6    X2 
          SA6    A6+B1
          BX6    X7 
          SA6    A6+1 
          RJ     CFC         COUNT OPTIONS
 IED9     SX6    1R)
          PX6    B6,X6
          SA6    A6+B1       STORE TERMINATOR 
          BX7    X7-X7
          SA7    A6+B1
          SA7    A7+1 
  
*         *1RI* ASSUMES THAT THE *IEDIT* COMMAND BEGINS IN THE
*         FIRST WORD OF THE FIRST POT, SO IF THE COMMAND WAS
*         PRECEDED BY SOURCE LINE INPUT THEN SHIFT THE *IEDIT*
*         COMMAND DOWN TO THE BEGINNING OF THE POT. 
  
          RJ     SSP         RESTORE POINTER TO THE COMMAND IN THE POT
          SX6    B3 
          SA6    IEDF        SAVE *IEDIT* COMMAND POT POINTER 
          MX0    -12         CREATE EOL MASK
          ZR     X7,IED12    IF SHIFT NOT NECESSARY 
          SX5    B4          SET DESTINATION POT ADDRESS
          SB6    X7          SET SOURCE POT INDEX 
          SB5    B0+         SET DESTINATION POT INDEX
          SB7    VCPC        SET POT SIZE LIMIT 
 IED10    SA1    B4+B6
          BX6    X1 
          SA6    X5+B5
          BX6    -X0*X6 
          ZR     X6,IED12    IF TRANSFER COMPLETE 
          SB6    B6+1 
          LT     B6,B7,IED11 IF NOT END OF POT
          SB6    B0+
          RJ     GPL         GET POT LINK 
 IED11    SB5    B5+B1
          LT     B5,B7,IED10 IF NOT END OF POT
          SX5    B4 
          SB5    B0 
          EQ     IED10       CHECK NEXT WORD
  
*         PACK THE COMMAND INTO A POT AND LINK THE
*         *IEDIT* COMMAND POT TO IT.
  
 IED12    SB3    B0+         GET POT FOR COMMAND
          RJ     GOP
          SX1    IEDA 
          RJ     PCB         PACK COMMAND INTO POT
          SA2    IEDF 
          RJ     LEP         LINK *IEDIT* COMMAND TO COMMAND
  
*         ENABLE THE JOB. 
  
          SA1    IEDA 
          MX7    42 
          LX1    6
          SX6    B1          SET *PPI* TO SORT THE FILE 
          BX7    X7*X1       SET *EPN*
          EQ     BJB         BEGIN JOB
  
  
*         $IEDIT(FN=LFN,CS=CHAR,OP=OPT).
  
 IEDA     VFD    60/6L$IEDIT
          VFD    12/2006B,48/1R(
          VFD    60/2LFN
          VFD    12/2002B,48/1R=
 IEDB     VFD    60/0        LFN
          VFD    60/0        SEPARATOR
          VFD    60/2LCS
          VFD    12/2002B,48/1R=
 IEDC     VFD    60/0        CHARACTER SET
          VFD    60/0        SEPARATOR OR TERMINATOR
          BSSZ   6           ROOM FOR OP PARAMETER
 IEDD     VFD    60/2LOP
          VFD    12/2002B,48/1R=
  
 IEDE     VFD    60/6LASCII8
          VFD    60/5LASCII 
          VFD    60/6LNORMAL
  
 IEDF     CON   0           STORAGE FOR POT POINTER 
 LAN      SPACE  4
**        LAN - SETS TYPE OF SYSTEM IN TERMINAL TABLE.
  
  
 LAN      SX1    B0          SET NULL FLAG
          EQ     LAN5 
  
 LAN1     SX1    BASS*10000B SET BASIC FLAG 
          EQ     LAN5 
  
 LAN2     SX1    FORS*10000B SET FORTRAN FLAG 
          EQ     LAN5 
  
 LAN3     SX1    FTNS*10000B SET FTN 4.3 TS FLAG
          EQ     LAN5 
  
 LAN4     SX1    EXES*10000B SET EXEC FLAG
 LAN5     SA2    A0+VSTT
          MX3    57 
          LX3    12 
          BX6    X3*X2       SET SYSTEM 
          BX6    X1+X6
          SA6    A2 
          SA1    CCMA 
          SX6    X1-1 
          ZR     X6,LAN6     IF NO SECOND COMMAND GIVEN 
          SA6    A1 
          SB5    PARC*2      MOVE DATA
          SX2    PBUF+2 
          SX3    PBUF 
          RJ     MDA
          EQ     PCM5        REENTER COMMAND PROCESSOR
  
 LAN6     SA1    A0+VFNT     CHECK FOR FILE DEFINED 
          MX2    42 
          BX1    X2*X1
          NZ     X1,RDY      IF FILE DEFINED ISSUE READY MESSAGE
          SMA    X6,( OLD, NEW, OR LIB FILE') 
          EQ     PCS5        ISSUE MESSAGE
 LEN      SPACE  4
**        LEN - DETERMINES THE LENGTH OF A USERS LOCAL FILE.
  
  
 LEN      BSS    0
          SA2    CCMA        GET PARAMETER COUNT
          SX2    X2-3 
          PL     X2,IPL      IF MORE THAN TWO PARAMETERS
          SX2    X2+1 
          SA1    PBUF+2      GET FILE NAME
          NZ     X2,LEN1     IF FILE NAME NOT GIVEN 
          NZ     X1,PBS      IF FILE NAME GIVEN 
 LEN1     SX6    B1+B1       RESET PARAMETER COUNT
          SA6    A2 
          SA2    A0+VFNT
          MX6    42 
          BX6    X6*X2
          ZR     X6,IPF      IF NO PRIMARY NAME 
          SX7    1R,
          SA6    A1          SET PRIMARY FILE NAME
          SB6    6
          PX7    B6,X7
          RJ     CFC         COUNT FILE NAME CHARACTERS 
          SA7    A6-B1
          SX6    1R.
          PX6    B6,X6
          SA6    A6+B1
          BX6    X6-X6
          SA6    A6+B1
          SA6    A6+B1
          EQ     PSS
 LIS      SPACE  4
**        LIS - THIS COMMAND INITIATES THE SORTING IF NECESSARY AND 
*         THE LISTING OF A USER,S FILE. 
  
  
 LIS      BSS    0
          SX7    PBUF        SET PARAMETER BUFFER POINTER 
          SA7    LISA        SET UP DEFAULT PARAMETERS
          BX7    X7-X7
          BX6    X6-X6
          SA7    A7+B1
          SA6    A7+B1       CLEAR FIRST LINE NUMBER
          SA7    A6+B1       CLEAR LINE RANGE FLAG
          SA6    A7+B1       CLEAR LAST LINE NUMBER 
          RJ     PLO         PROCESS OPTIONS
          SA1    LISB 
          ZR     X1,LIS2     IF PRIMARY FILE LIST 
          RJ     TPF         CHECK IF THE PRIMARY FILE
          ZR     X6,LIS2     IF PRIMARY FILE LIST 
          SA1    LISE 
          NZ     X1,LIS1     IF LINE RANGE SPECIFIED
          SA1    LISC 
          BX7    X1 
          SA7    LISE        LIST ONE LINE ONLY 
 LIS1     RJ     CFX         EXTERNAL LIST CALL 
          SX6    B0          SET *PPI* NOT TO SORT THE FILE 
          EQ     BJB         BEGIN JOB
  
 LIS2     SA2    A0+VFNT
          MX1    42 
          BX1    X1*X2
          ZR     X1,IPF      IF NO PRIMARY FILE 
          LX2    59-14
          NG     X2,IEX      IF EXECUTE ONLY
          SA1    LISF 
          ZR     X1,LIS2.1   IF NOT SECURED SYSTEM
          SA1    LISE 
          NZ     X1,LIS2.2   IF LINE RANGE SPECIFIED
          SA1    LISC 
          BX7    X1 
          SA7    LISE        LIST ONE LINE ONLY 
          EQ     LIS2.2      SET UP EXTERNAL LIST 
  
 LIS2.1   SA3    LISE 
          SX6    B1 
          LX3    6
          SA2    LISC 
          ZR     X3,LIS3     IF NO LAST LINE SPECIFIED
          SX3    X3-1R* 
          ZR     X3,LIS3     IF LIST TO EOI SPECIFIED 
 LIS2.2   RJ     CFX         SET UP EXTERNAL LIST 
          SX6    B1+         SET *PPI* TO SORT THE FILE 
          EQ     BJB         BEGIN JOB
  
 LIS3     NZ     X2,LIS4     IF ANY LINE SPECIFICATION
          SA6    LISD 
 LIS4     SA1    LISC        GET LINE NUMBER
          BX6    X1          SAVE LINE NUMBER 
          SA1    LISD        GET SINGLE LINE FLAG 
          NZ     X1,LIS5     IF NOT SINGLE LINE 
          SX7    B1          SET SINGLE LINE FLAG 
          BX6    X6+X7
 LIS5     SA6    B4          SAVE LINE NUMBER AND FLAG
          SA1    A0+VSTT     CHECK SORT FLAG
          LX1    59-52
          PL     X1,LIS8     IF NO SORT REQUIRED
          SA1    A0+VFST     SET NEXT OPERATION INDEX AND POT POINTER 
          MX6    43 
          BX1    X1*X6
          SX2    B3 
          BX7    X2+X1
          SX6    B1          SET NEXT OPERATION INDEX 
          LX6    12 
          BX7    X6+X7
          SA7    A1          REWRITE VFST 
          SB3    B0 
          SX7    B0          SET *EPN*
          SX6    B1          SET *PPI*
          EQ     BJB1        ENABLE THE SORT
  
 LIS7     SA1    A0+VFST     GET POT POINTER
          MX2    48 
          BX6    X2*X1
          SA6    A1          REWRITE VFST 
          BX7    -X2*X1 
          SB3    X7 
          BX7    X7-X7
          SX5    LIS8$
          EQ     PCS1        MAKE WAIT COMPLETION QUEUE ENTRY 
  
*         MAKE QUEUE ENTRY FOR LIST.
  
 LIS8     SA1    A0+VROT     SET LIST AND OUTPUT AVAILABLE
          SX6    120B 
          BX6    X1+X6
          SA6    A1          REWRITE VROT 
          SX5    ITO$ 
          EQ     PCS1        MAKE 1TO QUEUE ENTRY 
  
  
 LISA     BSSZ   1           PARAMETER POINTER
 LISB     BSSZ   1           FILE NAME
 LISC     BSSZ   1           LINE NUMBER
 LISD     BSSZ   1           SINGLE LINE/LINE RANGE 
 LISE     BSSZ   1           LAST LINE NUMBER 
 LISF     CON    0           SYSTEM SECURITY MODE 
 NOR      SPACE  4,20 
**        NOR - SET TERMINAL *NORMAL* MODE. 
* 
*         CLEARS ASCII, AUTO, BRIEF AND TAPE MODES. 
* 
*         EXIT   (VDCT) = SPECIAL MODES CLEARED.
* 
*         CALLS  DCR, RDY.
  
  
 NOR      BSS    0           ENTRY
          SA1    A0+VDCT     READ VDCT
          SA2    =75647777000077777777B  CLEAR MODE BITS
          BX6    X2*X1
          SA6    A1          REWRITE VDCT 
          SA1    A0+VSTT     RESET ENTRY MODE CONTROL 
          SX7    B1 
          LX7    18 
          BX7    -X7*X1 
          SA7    A1 
          SX2    /1TD/SNM    REQUEST DRIVER TO SET NORMAL MODES 
          SX7    RDY         SET RETURN 
          JP     DCR
 NOS      SPACE  4
**        NOS - CLEARS SORT FLAG. 
  
  
 NOS      BSS    0
          SA1    A0+VSTT
          SX2    B1 
          LX2    52 
          BX6    -X2*X1 
          SA6    A1 
          EQ     RDY
 PAC      SPACE  4
**        PAC - PACK FILE.
  
  
 PAC      BSS    0
          SA1    PBUF+2 
          SA2    CCMA        CHECK PARAMETER COUNT
          SX2    X2-1 
          ZR     X2,PAC1     IF NO FILE NAME
          NZ     X1,SOF1     IF FILE NAME GIVEN 
          EQ     PAC2        SET FILE NAME
  
 PAC1     SX2    X2+B1       RESET PARAMETER COUNT
          SX6    X2+B1
          SA6    CCMA 
 PAC2     SA3    A0+VFNT     SET PRIMARY NAME AS DEFAULT
          SX7    1R,
          MX4    42 
          BX6    X4*X3
          ZR     X6,IPF      IF NO PRIMARY FILE 
          SB6    4
          PX7    B6,X7
          SA6    A1          SET FILE NAME
          SA7    A6-B1       SET SEPARATOR
          RJ     CFC         COUNT FILE NAME CHARACTERS 
          SX2    X2-1        CHECK PARAMETER COUNT
          ZR     X2,PAC3     IF TWO PARAMETERS
          PX7    B6,X7
          SA7    A6+B1
          EQ     SOF2        SET SORT FLAG
  
 PAC3     SX7    1R.         SET TERMINATOR 
          PX7    B6,X7
          SA7    A6+B1
          BX6    X6-X6
          SA6    A7+B1
          SA6    A6+B1
          EQ     SOF2 
 PAR      SPACE  4
**        PARITY - SETS TERMINAL PARITY.
  
  
 PAR      SA1    CCMA        CHECK PARAMETER COUNT
          SX1    X1-2 
          SX2    /1TD/SOP    SET ODD PARITY BY DEFAULT
          NZ     X1,PAR1     IF NOT SECOND PARAMETER
          SA1    PBUF+2      SET SECOND PARAMETER 
          SA3    =3LODD 
          SA4    =4LEVEN
          IX3    X3-X1
          BX4    X4-X1
          ZR     X3,PAR1     IF *ODD* 
          NZ     X4,IPL      IF NOT *EVEN*
          SX2    /1TD/SEP 
  
*         ENTER DRIVER REQUEST. 
  
 PAR1     SX7    RDY         SET RETURN 
          JP     DCR         ENTER DRIVER REQUEST 
 PFC      SPACE  4
**        PFC - PROCESS PRIMARY FILE COMMAND. 
* 
*         ENTRY-
*         SEE SSP.
  
  
 PFC      BSS    0
          SA1    CCMA        CHECK PARAMETER COUNT
          SX1    X1-2 
          PL     X1,PFC1     IF PARAMETER GIVEN 
          SA1    PBUF        SAVE COMMAND 
          BX6    X1 
          SA6    B4 
          SX6    B3 
          MX2    48 
          SA1    A0+VFNT
          BX2    X2*X1
          BX6    X2+X6
          SA6    A1          REWRITE VFNT 
          SB3    B0 
          SMA    X6,( FILE NAME') 
          SB4    B0 
          SB5    B0 
          RJ     RQI         REQUEST FILE NAME
  
*         CONTINUE WHEN PARAMETERS AVAILABLE. 
  
          SX2    PBUF        MOVE PARAMETERS
          SX3    PBUF+2 
          SB5    -7*2 
          RJ     MDA
          SA1    A0+VDCT     CLEAR READ DATA
          SX6    B1 
          LX6    54 
          BX6    -X6*X1 
          SA6    A1 
          SA1    A0+VFNT     RESTORE COMMAND
          MX2    48 
          BX6    X2*X1
          SA6    A1          REWRITE VFNT 
          BX2    -X2*X1 
          SB3    X2 
          LX2    3
          TA1    X2,VBMP
          SA2    =7LPRIMARY 
          BX6    X1 
          BX2    X2-X1
          SA6    PBUF 
          SB4    3           CHARACTERS IN COMMAD 
          NZ     X2,PFC0     IF NOT *PRIMARY* COMMAND 
          SB4    7           SET COMMAND LENGTH 
 PFC0     SX6    1R,         SET SEPARATOR
          PX6    X6,B4
          SA6    A6+B1
          SB4    B0 
          RJ     DPT         DROP COMMAND POT 
          RJ     SSP         RESTORE REGISTERS
  
*         CHECK VALIDITY AND COMMAND TYPE.
  
 PFC1     SB6    PBUF+2      CHECK FILE NAME
          RJ     GFN
          SA2    A0+VSTT     CLEAR THE SORT FLAG
          SA2    PBUF 
          SA1    =3LLIB 
          BX2    X1-X2
          NZ     X2,PBS      IF NOT *LIB* 
          SA2    PBUF+3 
          SX3    X2-1R= 
          SA1    =7LLIBRARY 
          SA2    PBUF+1      INITIALIZE TERMINATOR SEARCH 
          SX7    1R/         SET SEPARATOR FOR */UN=LIBRARY*
  
*         SEARCH FOR POINT TO INSERT *UN=LIBRARY* PARAMETER.
  
 PFC2     SA2    A2+2        READ SEPARATOR 
          SX6    X2-1R. 
          ZR     X6,PFC3     IF *.* 
          SX6    X2-1R= 
          ZR     X6,PFC2     IF *=* 
          SX6    X2-1R, 
          ZR     X6,PFC2     IF *,* 
          SX6    X2-1R/ 
          NZ     X6,PFC3     IF NOT */* 
          SX7    1R,         RESET */UN* SEPARATOR TO *,UN* 
          EQ     PFC2        CONTINUE TERMINATOR SEARCH 
  
*         INSERT *UN=LIBRARY* PARAMETER.
  
 PFC3     UX2,B6 X2 
          PX7    B6,X7
          SA7    A2          STORE SEPARATOR
          SX6    2RUN 
          SX7    1R=
          SB6    B1+B1       SET CHARACTER COUNT
          PX7    B6,X7
          LX6    48 
          SA6    A7+B1       SET *UN* 
          SA7    A6+B1       SET *=*
          BX6    X1 
          SA6    A7+B1       SET *LIBRARY*
          SX7    1R.
          SB6    7           SET CHARACTER COUNT
          PX7    B6,X7
          SA7    A6+B1
          BX6    X6-X6
          SA6    A7+B1
          SA6    A6+B1
          SX6    3ROLD
          SB6    3
          LX6    42 
          SA6    PBUF 
          SX6    1R,         SET SEPARATOR
          PX6    B6,X6
          SA6    PBUF+1 
          EQ     PSS         ENTER JOB AFTER SORT 
 RER      SPACE  4
**        RER - PROCESS RESEQUENCING OF PRIMARY FILE. 
  
  
 RER      BSS    0
          BX7    X7-X7       SET TERMINATOR 
          SA7    PBUF+11
          SA7    A7-B1
          SA2    CCMA        CHECK PARAMETER COUNT
          SX6    5           RESET PARAMETER COUNT
          SA6    A2 
          SX2    X2-3 
          SX6    2R10        SET DEFAULT INCREMENT
          LX6    48 
          SB6    B1+B1       SET CHARACTER COUNT
          NG     X2,RER1     IF DEFAULT 
          SA1    PBUF+4 
          ZR     X1,RER1     IF DEFAULT 
          SA3    A1+B1       GET CHARACTER COUNT
          UX3,B6 X3 
          BX6    X1 
 RER1     SX7    1R.         SET TERMINATOR 
          PX7    B6,X7
          SA7    A7-B1
          SA6    A7-B1       SET INCREMENT
          SX6    3R100       SET DEFAULT
          LX6    42 
          SX2    X2+1        CHECK PARAMETER COUNT
          SB6    3           SET CHARACTER COUNT
          NG     X2,RER2     IF DEFAULT 
          SA1    PBUF+2      GET DEFAULT
          ZR     X1,RER2     IF DEFAULT 
          BX6    X1 
          SA3    A1+B1       GET CHARACTER COUNT
          UX3,B6 X3 
 RER2     SX7    1R,         SET SEPERATOR
          PX7    B6,X7
          SA3    A6-B1       GET CHARACTER COUNT
          SA1    A3-B1       CHECK IF FILE TYPE ENTERED 
          SA7    A6-B1
          SA6    A7-B1       SET STARTING LINE NUMBER 
          LX1    6
          SX2    X2-2        CHECK PARAMETER COUNT
          NZ     X2,RER3     IF FILE TYPE NOT ENTERED 
          UX3,B6 X3 
          BX6    X1 
          NZ     X1,RER4     IF FILE TYPE PRESENT 
 RER3     SA1    A0+VSTT     CHECK INTERACTIVE SUBSYSTEM
          SX6    1RB
          SB6    B1          SET CHARACTER COUNT
          MX3    -3 
          LX1    -12
          BX1    -X3*X1      EXTRACT CURRENT SUBSYSTEM
          SX3    X1-BASS
          ZR     X3,RER4     IF BASIC 
          SX6    1RF
          SX3    X1-FORS
          ZR     X3,RER4     IF FORTRAN 
          SX3    X1-FTNS
          ZR     X3,RER4     IF FTNTS 
          BX6    X6-X6
          SB6    B0          SET CHARACTER COUNT
 RER4     PX7    B6,X7
          LX6    54 
          SA7    A6-B1
          SA6    A7-B1       SET SYSTEM 
          SA1    A0+VFNT     SET FILE NAME
          MX6    42 
          BX6    X6*X1
          ZR     X6,IPF      IF NO PRIMARY FILE 
          RJ     CFC         COUNT CHARACTERS 
          PX7    B6,X7       SET SEPARATOR
          SA7    A6-B1
          SA6    A7-B1
          SA3    A6-B1       SET SEPARATOR
          UX3,B6 X3 
          PX7    B6,X7
          SA7    A3 
          EQ     PSS         BEGIN JOB
 ROT      SPACE  4
**        ROT - SETS RUBOUT COUNT.
  
  
 ROT      BSS    0
          SA5    CCMA        CHECK PARAMETER COUNT
          SX5    X5-1 
          BX3    X3-X3
          ZR     X5,ROT1     IF NO RUBOUT COUNT ENTERED 
          SA5    PBUF+2 
          SB7    B1 
          ZR     X5,ROT1     IF NULL RUBOUTS
          RJ     DXB
          NZ     X4,ROT2     IF NON NUMERIC 
          SX3    31 
          IX2    X6-X3
          SX3    X6+1 
          PL     X2,ROT2     IF TOO MANY
 ROT1     SA1    A0+VDCT     ENTER COUNT
          MX6    -5 
          LX6    39 
          BX1    X6*X1
          LX3    39 
          BX6    X1+X3
          SA6    A1 
          RJ     SSP
          JP     RDY         ISSUE READY
  
 ROT2     RJ     SSP
          SX6    =C*INCORRECT RUBOUT COUNT.*
          EQ     PCS5        ISSUE MESSAGE
 RPF      SPACE  4,10 
**        RPF - RETRIEVE PERMANENT FILE.
*         PROCESSES *ATTACH* OR *GET* COMMAND.
  
  
 RPF      BSS    0
          SA2    CCMA        CHECK PARAMETER COUNT
          SX2    X2-1 
          ZR     X2,PBS      IF NULL
          SA2    PBUF+2      CHECK FILE NAME
          ZR     X2,PBS      IF NULL
          SB6    A2 
          RJ     GFN         CHECK FOR RESERVED NAME
          EQ     PBS
 RUN      SPACE  4
**        RUN - INITIATES THE RUNNING OF A USERS JOB. 
  
  
 RUN      BSS    0
          SX6    PBUF+2      SET PARAMETER POINTER
          SA6    RUNA 
          BX6    X6-X6       SET DEFAULT VALUES 
          SA6    A6+B1
          SA6    A6+B1
          SA6    A6+B1
          SX6    2RGO 
          LX6    48 
          SA6    RUNH 
          SA6    RUNS 
          SX7    1R,         SET CHARACTER COUNT
          SB6    B1+B1
          PX7    B6,X7
          SA7    A6+B1
          SA7    RUNH+1 
 RUN1     SA1    RUNA        GET PARAMETER POINTER
          SX6    X1+4        UPDATE POINTER 
          SA6    A1 
          SA1    X1          GET PARAMETER
          SA2    A1-B1       GET TERMINATOR 
          UX2,B6 X2 
          SX2    X2-1R. 
          ZR     X2,RUN2     IF ALL PARAMETERS PROCESSED
          AX1    42 
          SX2    X1-1LI 
          ZR     X2,RUN20    IF INPUT FILE NAME 
          SX2    X1-1LB 
          ZR     X2,RUN20    IF BINARY FILE NAME
          SX2    X1-1LC 
          ZR     X2,RUN20    IF BINARY FILE NAME
          SX2    X1-1LT 
          NZ     X2,IPL      IF NOT TRANSMIT
          SX6    X6-2        SET TRANSMIT PARAMETER POINTER 
          SA6    RUND 
 RUN2     SA1    RUNB 
          NZ     X1,RUN3     IF FILE NAME SPECIFIED 
          SA1    A0+VFNT
          MX6    42 
          BX6    X1*X6
          ZR     X6,IPF      IF NO PRIMARY FILE 
          SA6    RUNB 
 RUN3     SA1    A0+VSTT     GET SUBSYSTEM
          MX4    -3 
          AX1    12 
          BX4    -X4*X1 
          SA1    TSYS+X4     GET SYSTEM PROCESSOR 
          SX7    B1 
          IX6    X1+X7
          AX1    42 
          SA6    A1 
          SB7    X1 
          RJ     SRC         SET TO ISSUE *RUN COMPLETE.* 
          JP     B7 
  
**        BASIC.
  
 RUN4     SA1    RUND 
          NZ     X1,IPL      IF *T* PARAMETER SPECIFIED 
          SA1    A0+VDCT     CHECK ASCII FLAG 
          LX1    59-51
          SB6    B1+B1
          SA2    =0LAS
          NG     X1,RUN5     IF ASCII 
          SA2    =0LAS=0
          SB6    4
 RUN5     BX6    X2 
          SX7    1R.
          PX7    B6,X7
          SA6    RUNR        SET ASCII FLAG 
          SA7    A6+B1
          SA1    RUNC        BINARY FILE NAME 
          SA2    RUNB        INPUT FILE NAME
          NZ     X1,RUN6     IF BINARY FILE NAME SUBSTITUTION 
          SA1    =0L0 
 RUN6     BX6    X1 
          RJ     CFC         GET CHARACTER COUNT
          SX7    1R,
          PX7    B6,X7
          SA6    RUNP        SET BINARY FILE NAME 
          SA7    A6+B1
          BX6    X2 
          RJ     CFC         GET CHARACTER COUNT
          SX7    1R,
          PX7    B6,X7
          SA6    RUNQ        SET INPUT FILE NAME
          SA7    A6+B1       SET SEPARATOR
          SX1    RUNO 
          RJ     PCB
          SA1    =0LBASIC    SET *EPN*
          BX7    X1 
          EQ     RUN13       MAKE QUEUE ENTRY 
  
**        FTN 4.3 TS AND FTN5.
  
 RUN7     SX7    1R5         *FTN5* 
          LX7    35-5 
          SB7    5           INSERT CHARACTER COUNT 
          SX2    RUNL        MOVE COMMAND PARAMETERS
          EQ     RUN9        FORMAT COMMAND 
  
 RUN8     SX7    B0          *FTN*
          SB7    4
          SX2    RUNM        MOVE COMMAND PARAMETERS
 RUN9     SA1    RUND 
          NZ     X1,IPL      IF *T* PARAMETER SPECIFIED 
          SA1    RUNG 
          MX3    24 
          BX1    X3*X1
          BX7    X7+X1
          BX0    X7 
          SA7    A1+
          LX0    6
          BX0    X0*X3       SAVE *EPN* 
          SX7    1R,         INSERT CHARACTER COUNT 
          PX7    B7,X7
          SA7    A7+B1
          SB5    8
          SX3    RUNK 
          RJ     MDA         MOVE DATA
          SA1    RUNC        BINARY FILE NAME 
          SA2    RUNB        INPUT FILE NAME
          NZ     X1,RUN10    IF BINARY FILE NAME SUBSTITUTION 
          SA1    =0LLGO 
 RUN10    BX6    X1 
          RJ     CFC         GET CHARACTER COUNT
          SX7    1R,
          PX7    B6,X7
          SA6    RUNI        SET BINARY FILE NAME 
          SA7    A6+B1       SET SEPARATOR
          BX6    X2 
          RJ     CFC         GET CHARACTER COUNT
          PX7    B6,X7
          SA6    RUNJ        SET INPUT FILE NAME
          SA7    A6+B1       SET SEPARATOR
          SX1    RUNG 
          RJ     PCB
          BX7    X0          SET *EPN*
          EQ     RUN13       MAKE QUEUE ENTRY 
  
**        EXECUTE.
  
 RUN11    SA1    RUNC 
          NZ     X1,IPL      IF *B* PARAMETER SPECIFIED 
          SA1    RUNB        GET FILE TO EXECUTE
          SA2    RUND        CHECK FOR TRANSMIT PARAMETERS
          BX6    X1 
          SA6    PBUF 
          BX0    X6          SET *EPN*
          RJ     CFC         GET CHARACTER COUNT
          SX7    1R.
          PX7    B6,X7
          SA7    A6+B1
          BX6    X6-X6
          SA6    A7+B1       SET BUFFER TERMINATION 
          SA6    A6+B1
          ZR     X2,RUN12    IF NOT TRANSMIT PARAMETERS 
          SX7    1R,
          PX7    B6,X7
          SA7    A7 
          SX3    A7+B1
          SA4    CCMA        GET PARAMETER COUNT
          LX4    1
          SB5    X4 
          RJ     MDA
 RUN12    SX1    PBUF        BUILD COMMAND
          RJ     PCB
          BX7    X0          SET *EPN*
          EQ     RUN14       BEGIN JOB
  
*         ENABLE THE JOB. 
  
 RUN13    SA1    RUNB 
          RJ     TPF         CHECK PRIMARY FILE NAME
          BX4    X6 
          SX6    B1          SET *PPI* TO SORT FILE 
          ZR     X4,BJB      IF PRIMARY FILE
 RUN14    SX6    B0          SET *PPI* NOT TO SORT THE FILE 
          EQ     BJB         BEGIN JOB
  
**        PROCESS OPTIONAL FILE NAME. 
  
 RUN20    SA2    X6-3        CHECK SEPERATOR
          SX3    X1-1LI 
          SX2    X2-1R= 
          NZ     X2,IPL      IF NOT *=* SEPERATOR 
          SB6    A2+B1
          ZR     X3,RUN21    IF INPUT 
          SX3    B1 
          SX6    B0+         PRESTORE NOGO
          SA6    RUNH 
          SX6    1R,
          PX6    B0,X6
          SA6    A6+B1
          SA6    RUNS+1 
          MX6    0
          SA6    A6-B1
 RUN21    RJ     GFN         CHECK FILE NAME
          BX6    X2          SAVE FILE NAME 
          SA2    RUNB+X3
          NZ     X2,IPL      IF PARAMETER SPECIFIED TWICE 
          SA6    A2 
          EQ     RUN1        PROCESS NEXT PARAMETER 
  
 RUNA     CON    0           PARAMETER POINTER
 RUNB     CON    0           INPUT FILE NAME
 RUNC     CON    0           BINARY FILE NAME 
 RUND     CON    0           TRANSMIT PARAMETER POINTER 
  
*         FTN,GO,B=LGO,I=INPUT,L=0,SEQ,REW,X,A,TS,T.
*         FTN5,GO,B=LGO,I=INPUT,L=0,SEQ,REW,X,OPT=0,ET=F. 
  
 RUNG     BSS    0
          VFD    60/5L$FTN5 
          VFD    12/2005B,48/1R,
 RUNH     VFD    60/2LGO
          VFD    12/2002B,48/1R,
          VFD    60/1LB 
          VFD    12/2001B,48/1R=
 RUNI     VFD    60/3LLGO 
          VFD    12/2003B,48/1R,
          VFD    60/1LI 
          VFD    12/2001B,48/1R=
 RUNJ     VFD    60/5LINPUT 
          VFD    12/2005B,48/1R,
          VFD    60/1LL 
          VFD    12/2001B,48/1R=
          VFD    60/1L0 
          VFD    12/2001B,48/1R,
          VFD    60/3LSEQ 
          VFD    12/2003B,48/1R,
          VFD    60/3LREW 
          VFD    12/2003B,48/1R,
          VFD    60/1LX 
          VFD    12/2001B,48/1R,
 RUNK     BSS    10          COMMAND REFORMAT AREA
 RUNL     VFD    60/3LOPT 
          VFD    12/2003B,48/1R=
          VFD    60/1L0 
          VFD    12/2001B,48/1R,
          VFD    60/2LET
          VFD    12/2002B,48/1R=
          VFD    60/1LF 
          VFD    12/2001B,48/1R.
 RUNM     VFD    60/1LA 
          VFD    12/2001B,48/1R,
          VFD    60/2LTS
          VFD    12/2002B,48/1R,
          VFD    60/1LT 
          VFD    12/2001B,48/1R.
          VFD    60/0 
          VFD    60/0 
  
*         BASIC,B=0,I=INPUT,L=0,GO,AS=0.
  
 RUNO     BSS    0
          VFD    60/6L$BASIC
          VFD    12/2006B,48/1R,
          VFD    60/1LB 
          VFD    12/2001B,48/1R=
 RUNP     VFD    60/1L0 
          VFD    12/2001B,48/1R,
          VFD    60/1LI 
          VFD    12/2001B,48/1R=
 RUNQ     VFD    60/5LINPUT 
          VFD    12/2005B,48/1R,
          VFD    60/1LL 
          VFD    12/2001B,48/1R=
          VFD    60/1L0 
          VFD    12/2001B,48/1R,
 RUNS     VFD    60/2LGO
          VFD    12/2002B,48/1R,
 RUNR     VFD    60/4LAS=0
          VFD    12/2004B,48/1R.
          VFD    60/0 
          VFD    60/0 
  
          BSS    0
 TSYS     EQU    *-1
          VFD    18/RUN4,42/0 
          VFD    18/RUN7,42/0 
          VFD    18/RUN8,42/0 
          VFD    18/RUN11,42/0
 SAV      SPACE  4
**        SAV - SAVE, REPLACE, OR PURGE FILE. 
* 
*         PROCESS IMPLIED PRIMARY FILE COMMANDS.
  
  
 SAV      BSS    0           ENTRY
          SA3    CCMA        GET PARAMETER COUNT
          SX2    X3-1 
          SA1    PBUF+2      GET FILE NAME
          ZR     X2,SAV1     IF IMPLIED FILE NAME 
          NZ     X1,SAV2     IF NOT IMPLIED FILE NAME 
 SAV1     SA1    A0+VFNT     GET PRIMARY FILE NAME
          MX3    42 
          BX6    X3*X1
          ZR     X6,PBS      IF NO PRIMARY FILE 
          EQ     PSS         PROCESS COMMAND
  
 SAV2     RJ     TPF         CHECK FOR PRIMARY FILE 
          NZ     X6,PBS      IF NOT PRIMARY FILE
          EQ     PSS         PROCESS COMMAND
 SOF      SPACE  4
**        SOF - SETS SORT FLAG. 
  
  
 SOF      BSS    0
          SA2    CCMA        CHECK PARAMETER COUNT
          SA1    PBUF+2 
          SX2    X2-1 
          NZ     X2,SOF1     IF SORT OF EXPLICIT FILE 
          SA1    A0+VSTT
          SX6    B1 
          LX6    52 
          BX6    X1+X6
          SA6    A1 
          EQ     RDY
  
*         ENTER HERE FROM PAC.
  
 SOF1     RJ     TPF         CHECK PRIMARY FILE NAME
          NZ     X6,PBS      IF NOT PRIMARY FILE BEING SORTED 
 SOF2     BSS    0
          SA1    A0+VSTT     CLEAR SORT FLAG
          SX2    B1 
          LX2    52 
          BX6    -X2*X1 
          SA6    A1 
          EQ     PBS
 STA      SPACE  4
**        STA - DETERMINES THE CURRENT JOB STATUS.
  
  
 STA      BSS    0
          SA1    CCMA        CHECK PARAMETER COUNT
          SX1    X1-1 
          NZ     X1,STA11    IF OPTIONAL PARAMETERS ENTERED 
  
*         PROCESS SIMPLE *STATUS* (*ENQUIRE*) COMMAND.
  
 STA1     TA2    B2,VRAP
          ZR     X2,STA5     IF NO QUEUED ENTRY 
          MX5    12 
          BX1    X5*X2
          NZ     X1,STA3     IF SINGLE QUEUE ENTRY
          SB7    X2          ADDRESS OF ENTRIES 
          SB6    B7+VCPC
 STA2     SA1    B7          LOAD ENTRY 
          MX5    12 
          BX2    X5*X1       MASK OFF REQUEST 
          LX2    12D
          ZR     X2,STA4     IF NO MORE ENTRIES IN POT
          SX2    X2-STA$
          ZR     X2,STA12    IF *STA$* REQUEST FOUND
          SB7    B7+1        ADVANCE TO NEXT ENTRY
          NE     B7,B6,STA2  IF NOT AT END OF POT 
          EQ     STA4        ENTER *STA$* REQUEST 
  
 STA3     LX1    12D
          SX2    X1-STA$
          ZR     X2,STA12    IF ENTRY IS *STA$* 
 STA4     SX5    STA$        SET STA$ QUEUE ENTRY 
          SX7    B0+
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         REENTRY FROM QUEUED ENTRY.
  
 STA5     SA1    A0+VROT     CHECK JOB STATUS 
          LX1    59-1 
          SX7    B0 
          NG     X1,STA6     IF JOB IN SYSTEM 
          LX1    59-0-59+1
          PL     X1,STA4     IF ACTIVITY
  
*         MAKE *1TA* QUEUE ENTRY WITHOUT CLEARING THE COMPLETION
*         BIT IN VROT.
  
 STA6     SX5    ITA1$       CALL *1TA* FOR JOB STATUS
          SB7    ITAQ 
          BX6    X6-X6       CLEAR POSSIBLE EOL 
          SA6    B4+4 
          SA6    A6+B1
          SX6    B3 
          LX5    48 
          LX6    12 
          BX5    X5+X6
          RJ     MQE         MAKE QUEUE ENTRY 
          EQ     PCSX        EXIT 
  
*         REENTRY FROM SJS TO ASSIGN MESSAGE. 
  
 STA7     SA1    A0+VROT     CHECK FOR JOB ACTIVITY 
          MX2    -5 
          BX2    -X2*X1 
          SX6    X2-1 
          NZ     X6,STA8     IF ACTIVITY
          SA1    =0LIDLE
          BX6    X1 
          SA6    B4          ISSUE IDLE MESSAGE 
 STA8     SA1    B4+VCPC-1   GET THE SRU ACCUMULATOR VALUE
          RJ     FSM         FORMAT STATUS MESSAGE
          SX6    FSMA 
          SB4    X7 
          EQ     PCS6        ISSUE STATUS MESSAGE 
  
*         PROCESS OPTIONAL PARAMETERS.
  
 STA11    SA2    A0+VROT     CHECK JOB ACTIVITY 
          MX5    -5 
          BX5    -X5*X2 
          SX5    X5-1 
          SMA    X6,( JOB ACTIVE."NL")
          NZ     X5,PCS5     IF TERMINAL NOT IDLE 
          EQ     PBS         ENTER JOB
  
*         PROCESS DISCARDED REQUEST.
  
 STA12    SB4    B0 
          RJ     DPT         DROP INPUT POT 
          EQ     PCSX        EXIT 
 STO      SPACE  4
**        STO - STOPS COMPUTATION ON A USER,S JOB.
  
  
 STO      BSS    0           ENTRY
          SX2    /1TD/SDU    SUSPEND DRIVER FOR USER BREAK PROCESSING 
          SX7    STO1        SET REENTRY ADDRESS
          EQ     DCR         ENTER DRIVER REQUEST TO HANG DRIVER
  
 STO1     SA2    SSPA        SET *TAET* ERROR FLAG IN *SSPA* AND X7 
          SX7    TAET 
          MX6    36 
          LX2    -24
          BX6    X6*X2       REMOVE OLD X7 PARAMETER
          BX6    X6+X7       INSERT *TAET* ERROR FLAG 
          LX6    24 
          SA6    A2 
          EQ     PUB         PROCESS AS A USER BREAK 2
 SUB      SPACE  4
**        SUB - PROCESS DEFAULT ON SUBMIT.
  
  
 SUB      BSS    0
          SA3    CCMA        GET PARAMETER COUNT
          SX2    X3-1 
          SX6    2           RESET PARAMETER COUNT
          SA1    PBUF+2      GET FILE NAME
          ZR     X2,SUB1     IF NULL FILE NAME
          SX2    X2-1 
          NZ     X1,PSS      IF NOT DEFAULT 
          BX6    X3 
 SUB1     SA6    A3 
          SA1    A0+VFNT     SET DEFAULT
          MX3    42 
          BX6    X3*X1
          ZR     X6,IPF      IF NO PRIMARY FILE 
          SX7    1R,
          SB6    6
          PX7    B6,X7
          SA7    PBUF+1 
          SA6    A7+B1
          RJ     CFC         GET CHARACTER COUNT
          SX7    1R.
          ZR     X2,SUB2     IF FILE NAME ONLY
          SA3    A6+B1       GET SEPARATOR
          UX7,B7 X3 
 SUB2     PX7    B6,X7
          SA7    A6+B1
          NZ     X2,PSS      IF THREE PARAMETERS
          BX6    X6-X6
          SA6    A7+B1
          SA6    A6+B1
          EQ     PSS         PROCESS COMMAND
 TAP      SPACE  4
**        TAP - SETS TAPE MODE OPERATION FLAG.
  
  
 TAP      BSS    0
          SA1    A0+VDCT     SET TAPE MODE
          SX6    B1 
          LX6    48 
          BX6    X1+X6
          SA6    A1 
          EQ     RDY         ISSUE MESSAGE
 TER      SPACE  4
**        TER - SETS TERMINAL TYPE. 
  
  
 TER      BSS    0
          SA1    CCMA        CHECK PARAMETER COUNT
          SX1    X1-1 
          ZR     X1,TER1     IF NO TYPE GIVEN 
          SA5    PBUF+2      CHECK PARAMETER
          RJ     LTT         LOCATE TERMINAL TYPE 
          ZR     X5,TER1     IF NO PARAMETER GIVEN
          SX7    X1          EXTRACT CLASS
          SA1    X2          FIRST TERMINAL NAME
          SB7    X2 
          BX5    X5+X7       MERGE WITH PARAMETER 
          SX2    /1TD/STT    SET DRIVER REQUEST 
 +        BX7    X1-X5       COMPARE TABLE AND PARAMETER
          ZR     X7,TER2     IF MATCH FOUND 
          SA1    A1+B1
          NZ     X1,*-1 
 TER1     SMA    X6,( INCORRECT TERMINAL TYPE."NL") 
          EQ     PCS5        ISSUE MESSAGE
  
 TER2     SX1    A1-B7       SET NEW INDEX
          LX1    6
          BX2    X2+X1
          SX7    RDY         SET RETURN 
          JP     DCR         ISSUE DRIVER REQUEST 
 TIM      SPACE  4
**        TIM - PROCESS TIMEOUT LOGOFF COMMAND. 
  
  
 TIM      BSS    0
          MX2    -1 
          SA3    A0+VDCT     GET ACCESS BITS
          LX2    12+10       POSITION FOR TIMEOUT BIT 
          BX7    X2*X3       CLEAR BIT
          SA7    A3          RESTORE *VDCT* WORD
          JP     RDY         ISSUE *READY*
 TXT      SPACE  4
**        TXT - SETS TEXT MODE OPERATION FLAG.
  
  
 TXT      BSS    0
          SA2    A0+VFNT
          MX1    42 
          BX1    X1*X2
          ZR     X1,IPF      IF NO PRIMARY FILE 
          LX2    59-12
          SMA    X6,( WRITE ON READ-ONLY FILE."NL") 
          NG     X2,PCS5     IF WRITE LOCKOUT BIT SET 
          SX6    B1          SET TEXT MODE
          SA2    A0+VDCT
          LX6    50-0 
          BX6    X6+X2
          SA6    A2          REWRITE VDCT 
          SX7    B1          CLEAR SORT FLAG
          LX7    52 
          SA1    A0+VSTT
          BX7    -X7*X1 
          SA7    A1 
          SMA    X6,( ENTER TEXT MODE."NL""LF") 
          EQ     PCS5        ISSUE MESSAGE
 UNU      SPACE  4
**        UNU - USER NAME SEARCH. 
* 
*         *UNU* SEARCHES FOR USERS ON THE SYSTEM UNDER THE GIVEN USER 
*         NUMBER.  THE JOB SEQUENCE NUMBERS OF THOSE USERS ARE RETURNED 
*         TO THE TERMINAL.
* 
*         ENTRY  (SEE SSP). 
* 
*         EXIT   LIST OF *JSN*S ASSIGNED TO TERMINAL. 
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 1, 2, 6, 7.
*                B - 5, 6, 7. 
* 
*         CALLS  ASM. 
  
  
 UNU      BSS    0           ENTRY
          TB7    B0,VTTP,LWA
          TB6    VTTL*VPST-VTTL,VTTP  FWA OF FIRST NON-PSEUDO TERMINAL
          SA2    CCMA        CHECK PARAMETER COUNT
          SX2    X2-1 
          ZR     X2,IPL      IF USER NAME NOT GIVEN 
          SA1    =C*TERMINAL(S).* 
          SA2    A1+1 
          BX7    X1 
          BX6    X2 
          SA7    PBUF 
          SA6    A7+1 
          SA1    PBUF+2      GET GIVEN USER NAME
          SB5    5           SET MAXIMUM NUMBER OF USERS RETURNED 
          MX3    42 
          MX7    24 
 UNU1     SA2    B6+VUIT     GET USER NAME TO COMPARE 
          SB6    B6+VTTL
          BX2    X2*X3
          BX2    X1-X2
          NZ     X2,UNU2     IF USER NAMES DO NOT MATCH 
          SA2    A2+VFST-VUIT 
          BX6    X2*X7
          SB5    B5-B1
          NG     B5,UNU4     IF MORE THAN MAXIMUM NUMBER OF USERS 
          SA6    A6+1        ADD *JSN* TO THE LIST
 UNU2     LT     B6,B7,UNU1  IF STILL MORE USERS TO CHECK 
          SB6    B5-5 
          ZR     B6,UNU3     IF NO USERS FOUND
          SMA    A1,("NL")
          BX7    X1 
          SA7    A6+B1       TERMINATE THE LIST 
          EQ     UNU5        ISSUE THE MESSAGE
  
 UNU3     SMA    A1,( NONE."NL")
          SA2    A1+B1
          BX6    X1 
          BX7    X2 
          SA6    A6+B1
          SA7    A6+1 
          EQ     UNU5        ISSUE THE MESSAGE
  
 UNU4     SMA    A1,( MORE USERS."NL")
          SA2    A1+B1
          BX6    X1 
          BX7    X2 
          SA6    A6 
          SA7    A6+1 
 UNU5     SX6    PBUF        PROCESS MESSAGE
          SB4    A7-PBUF+1
          RJ     MVA
          EQ     PCSX        EXIT 
 XEQ      SPACE  4
**        XEQ - EXECUTE BATCH COMMAND.
  
  
 XEQ      BSS    0
          SA1    PBUF+1 
          SX1    X1-1R, 
          NZ     X1,BAT2     IF NOT *,* 
          SX2    PBUF+2      STRIP OFF *X,* 
          SX3    PBUF 
          SA4    CCMB        GET NO. OF WORDS TO MOVE 
          SB5    X4 
          RJ     MDA
          EQ     BAT2 
          TITLE  PCM - REENTRANT COMMAND PROCESSING ROUTINES. 
 BJB      SPACE  4,20 
**        BJB - BEGIN JOB.
* 
*         *BJB* HAS TWO ENTRY POINTS.  USERS BEGINNING A JOB STEP 
*         ENTER AT *BJB*.  JOBS WHICH HAVE BEEN ROLLED OUT FOR
*         SOME REASON ARE RE-ENABLED BY ENTERING AT *BJB1*. 
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
*                (X6) = PRE-PROCESSOR INDEX.
*                (X7) = ENTRY POINT NAME. 
*                (B3) = COMMAND POT POINTER.
* 
*         EXIT   JOB ENABLED. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 6, 7.
*                B - 3, 4.
* 
*         CALLS  DPT, GOP, INO, PMR, RDC, UEC.
* 
*         MACROS PARAM. 
  
  
 BJB      BSS    0           ENTRY
          BX4    X7 
          AX4    54          RIGHT JUSTIFY FIRST CHARACTER
          SB7    X4+77B-1R$ 
          NZ     B7,BJB0     IF FIRST CHARACTER NOT DOLLAR SIGN 
          LX7    6           STRIP LEADING DOLLAR SIGN FROM *EPN* 
 BJB0     TA4    B2,VRAP     CHECK FOR QUEUE ENTRY
          NZ     X4,CDA      IF ANOTHER ENTRY ALREADY QUEUED
          SA6    BJBA        STORE *PPI*
          SA7    BJBB        STORE *EPN*
          SX6    B3          STORE POT POINTER
          SB3    B0 
          SA6    BJBC 
          RJ     INO         ISSUE NULL OUTPUT
          SA1    BJBC        RESTORE POT POINTER
          SB3    X1+
          EQ     BJB2        SET UP *ENEJ* CALL 
  
 BJB1     SA6    BJBA        STORE *PPI*
          SA7    BJBB        STORE *EPN*
 BJB2     SA1    A0+VROT
          SX2    B1 
          BX6    X2*X1       ABORT ON TERMINAL TABLE INTERLOCKED
          ZR     X6,BJB5     IF JOB IS IN ENABLED STATE 
          SA3    A0+VDCT     CHECK CONNECTION TYPE
          LX3    59-47
          NG     X3,PCSX     IF CONNECTION LOANED 
          BX1    -X2*X1      SET THE TERMINAL BUSY
          LX2    1-0
          BX1    X2+X1       SET JOB IN SYSTEM FLAG 
          MX2    48 
          SX6    B3          STORE COMMAND LINE POT POINTER 
          LX2    36 
          BX2    X1*X2
          LX6    36 
          BX6    X2+X6
          SA6    A1          REWRITE *VROT* 
          SB3    B0 
          RJ     GOP         GET POT FOR EJT PARAMETER BLOCK
          SA1    A0+VDCT     READ VDCT FOR NETWORK TERMINAL 
          SA3    BJBA        GET *PPI*
          IFNET  BJB2.1      IF NETWORK TERMINAL
          SA2    A3+B1       GET ENTRY POINT NAME 
          BX6    X2 
          BX7    X3 
          SA6    B4          SAVE ENTRY POINT NAME
          SA7    B4+B1       SAVE *PPI* 
          RJ     RDC         WAIT FOR VDCT INTERLOCK
          SA2    B4+         RESTORE ENTRY POINT NAME 
          BX7    X2 
          SA3    A2+B1       RESTORE *PPI*
          SA7    BJBB 
 BJB2.1   SX2    B1 
          LX2    54-0 
          BX6    X1+X2
          SA6    A1          SET READ DATA FLAG 
          SA1    A0+VSTT     SET JOB COMPLETION FLAG
          BX6    X1+X2
          SA6    A1          REWRITE VSTT 
          SX1    B1 
          BX1    X1*X3
          ZR     X1,BJB3     IF PRIMARY FILE NOT TO BE SORTED 
          BX3    -X1*X3      CLEAR *PPI* SORT FLAG
          SA1    A0+VFNT
          MX2    42 
          BX2    X1*X2
          ZR     X2,BJB3     IF NO PRIMARY FILE EXISTS
          SA1    A0+VSTT
          LX1    59-52
          PL     X1,BJB3     IF SORT NOT NEEDED 
          SX3    X3+B1       RESTORE *PPI* SORT FLAG
          MX6    1           CLEAR SORT FLAG
          BX6    -X6*X1 
          LX6    52-59
          SA6    A1          REWRITE VSTT 
 BJB3     SA1    A0+VROT     STORE *PPI* IN TERMINAL TABLE
          MX2    54 
          LX2    48 
          BX6    X1*X2       CLEAR PREVIOUS INDEX 
          BX2    X3 
          LX2    48 
          BX6    X2+X6       ADD NEW INDEX
          SA6    A1          REWRITE VROT 
          PARAM  ENEJ,X3,BJBB 
          RJ     PMR         PROCESS MONITOR REQUEST
          NZ     X2,BJB4     IF ERROR RETURNED
          SB4    B0 
          RJ     DPT         RETURN THE PARAMETER BLOCK POT 
          SA1    A0+VFST     GET NEXT OPERATION INDEX 
          MX6    5
          LX6    17 
          BX7    X6*X1
          BX6    -X6*X1      CLEAR OLD INDEX
          AX7    12 
          SA6    A1          REWRITE VFST 
          SX6    X7-TNOIL 
          PL     X6,BJB4     IF NEXT OPERATION NOT DEFINED
          SA1    X7+TNOI
          SB7    X1 
          SB3    B0 
          BX7    X7-X7
          JP     B7          START NEXT OPERATION 
  
 BJB4     RJ     UEC         PROCESS UNEXPECTED ERROR CODE
          SB4    B0 
          RJ     DPT         RETURN THE PARAMETER BLOCK POT 
          SA1    A0+VROT     SET TERMINAL NOT BUSY
          MX2    57          CLEAR JOB CONTINUATION AND JOB IN SYSTEM 
          BX6    X1*X2
          SX3    B1 
          BX6    X3+X6
          MX3    -12         REUSE COMMAND LINE POT POINTER 
          LX3    36 
          BX2    -X3*X1 
          BX6    X3*X6
          AX2    36 
          SA6    A1          REWRITE VROT 
          SA1    A0+VSTT     CLEAR JOB COMPLETION FLAG
          LX3    54-0 
          BX6    -X3*X1 
          SA6    A1 
          SB3    X2 
          SMA    X6,( SYSTEM ERROR."NL")
          SB4    B0 
          RJ     MVA         ISSUE MESSAGE
          SX7    3RIAF       SET NVF PARAMETER
          LX7    42 
          SB3    B0 
          SA7    A0+VFNT
          IFNET  HNG
          RJ     RDC         WAIT FOR DRIVER TO ISSUE MESSAGE 
          RJ     CLE         CLEAN UP TERMINAL TABLE
          SX7    DIN
          SX2    /1TD/LGI    SET RELOGIN REQUEST
          EQ     DCR1        MAKE DRIVER REQUEST
  
*         ABORT BEGIN JOB PROCESS.
  
 BJB5     SX6    3RBJB       *ABT* ENTRY PRESET 
          RJ     ABT         ABORT
          EQ     PCSX        EXIT 
  
  
 BJBA     CON    0           PRE-PROCESSOR INDEX
 BJBB     CON    0           ENTRY POINT NAME 
 BJBC     CON    0           COMMAND POT POINTER
 TNOI     SPACE  4,10 
**        TNOI - TABLE OF NEXT OPERATION INDICES. 
* 
*         60/ NEXT OPERATION ADDRESS
  
  
 TNOI     BSS    0
          CON    PCSX        RETURN FOR NO SPECIFED OPERATION 
          CON    LIS7        LIST AFTER SORT
          CON    ETX3        EXIT TEXT MODE AFTER PACK COMPLETE 
          CON    PUB7        COMPLETE USER BREAK PROCESSING 
  
 TNOIL    EQU    *-TNOI 
 CDA      SPACE  4,10 
**        CDA - ISSUE *COMMAND ACTIVE* DIAGNOSTIC.
* 
*         EXIT   TO PCS5 TO ISSUE MESSAGE.
  
  
 CDA      BSS    0           ENTRY
          SMA    X6,( COMMAND ACTIVE."NL") SET MESSAGE ADDRESS
          EQ     PCS5        ISSUE MESSAGE
 EJB      SPACE  4,20 
 CJA      SPACE  4,10 
**        CJA - CLEAR JOB ACTIVITY. 
* 
*         CLEARS INP$ REQUESTS FROM REENTRY QUEUE. REENTERS UNTIL 
*         REENTRY QUEUE IS CLEAR.  ON REENTRY, IF A SECOND CJA$ 
*         REENTRY EXITS IN THE QUEUE, EXIT AND PROCESS THE SECOND 
*         CJA$ REENTRY. 
* 
*         ENTRY  (X7) = RETURN ADDRESS. 
*                (B3) = ANYTHING TO BE SAVED. 
* 
*         CALLS  DPT, GRT, UQS. 
  
  
 CJA      BSS    0           ENTRY
          MX2    -12
          SX1    B3 
          LX7    18 
          BX1    -X2*X1 
          BX7    X1+X7
          SA7    CJAA        SAVE RETURN ADDRESS
 CJA1     RJ     UQS         UPDATE REENTRY QUEUE STACK 
          SB5    B2+         CHECK NEXT QUEUE ENTRY 
          RJ     GRT
          BX3    X4 
          AX4    48 
          SX6    X4-INP$
          NZ     X6,CJA4     IF NOT INPUT REQUEST 
          SX6    B0+         CLEAR ENTRY
          SA6    A4 
          MX1    -12         GET POSSIBLE POT POINTER 
          AX3    12 
          BX1    -X1*X3 
          ZR     X1,CJA1     IF NO POT POINTER IN REQUEST 
          SB3    X1          DROP POT 
          SB4    B0 
          RJ     DPT
          EQ     CJA1        LOOP THROUGH STACK 
  
 CJA4     SA1    CJAA        RESTORE ENTRY CONDITIONS 
          TA4    B2,VRAP     CHECK REENTRY QUEUE
          SX5    CJA$ 
          SB3    X1 
          AX1    18 
          BX7    X1 
          NZ     X4,PCS1     IF OTHER REENTRIES PRESENT 
          SB7    X7 
          JP     B7          RETURN TO CALLER 
  
*         REENTRY FROM WAIT-COMPLETION QUEUE. 
  
 CJA5     SB5    B2          GET NEXT QUEUE ENTRY 
          RJ     GRT
          AX4    48 
          SX6    X4-CJA$
          NZ     X6,CJA      IF NOT SUBSEQUENT *CJA* ENTRY
          EQ     PCSX        EXIT 
  
  
 CJAA     CON    0           STORAGE FOR RETURN ADDRESS 
 FTP      SPACE  4,10 
**        FTP - FINISH TIMEOUT PROCESSING.
* 
*         EXIT   TO HNG IF DETACH SUCCESSFUL. 
*                TO FLO IF DETACHED FAILED. 
* 
*         CALLS  CDP, DAP, DLP, DPT, SLF, SSI, SSP. 
  
  
 FTP      BSS    0           ENTRY
          IFMUX  FTP1 
          TA1    B2,VMST     CHECK TIMEOUT FLAG 
          MX6    59          CLEAR INPUT ENABLED
          LX6    53-0 
          BX6    X6*X1
          LX1    59-48
          NG     X1,FTP1     IF TIMEOUT IN PROGRESS 
          SA6    A1          REWRITE VMST 
          SB3    B0 
          EQ     RES         RESTART TERMINAL 
  
 FTP1     SX7    FTP2        SET REENTRY ADDRESS
          SA1    A0+VSTT
          SX2    401B 
          LX2    48 
          BX6    X2*X1
          NZ     X6,PCSX     IF LOGOUT OR DETACH IN PROGRESS
          EQ     CJA         CLEAR JOB ACTIVITY 
  
 FTP2     SA1    A0+VUIT     CHECK EJT ORDINAL
          MX2    -12
          BX2    -X2*X1 
          ZR     X2,HNG      IF NO EJT ORDINAL
          RJ     DLP         DUMP LAST INPUT POT
          RJ     SSP         RESET REGISTERS
          SX5    FTP3$
          EQ     PCS1        WAIT FOR DUMP TO COMPLETE
  
 FTP3     SX7    TORC        SET TIMEOUT REASON CODE
          EQ     DTJ         DETACH JOB 
  
*         NORMAL (NO ERROR) RETURN. 
  
 FTP4     RJ     SLF         SET LOGOUT IN PROGRESS 
          SA1    A0+VFST     SET UP TIMEOUT MESSAGE 
          MX2    24 
          BX6    X1*X2
          SX3    1R.
          LX3    30 
          BX6    X3+X6
          SA6    SSIB 
          RJ     DAP         DROP ASSIGNED POTS 
          RJ     SSP         RESET REGISTERS
          SX6    B1          SEND TIMEOUT MESSAGE 
          RJ     SSI         SEND SRU INFORMATION 
          SX7    3RBYE       SET NVF PARAMETER
          LX7    42 
          SB3    B0 
          SA7    A0+VFNT
          RJ     CDP         CLEAR DETACH IN PROGRESS 
          SX5    HNG$ 
          EQ     PCS1        EXIT AND DISCONNECT
  
*         ERROR ON DETACH RETURNS HERE. 
  
 FTP5     SA1    A0+VSTT     CLEAR LOGOUT AND DETACH
          SX6    0401B
          LX6    48 
          BX6    -X6*X1 
          SA6    A1          REWRITE VSTT 
          SB4    B0 
          ZR     B3,FTP6     IF NO HELD POTS
          RJ     DPT         DROP POTS
 FTP6     SX7    2           SET FORCE LOGOUT VALUE 
          EQ     FLO         FORCE LOGOUT 
 IEX      SPACE  4
**        IEX - ISSUE EXECUTE ONLY MESSAGE. 
  
  
 IEX      BSS    0
          SMA    X6,( EXECUTE ONLY FILE."NL") 
          RJ     SSP
          EQ     PCS5        ISSUE MESSAGE
 IGN      SPACE  4,20 
**        IGN - IGNORE QUEUE ENTRY. 
* 
*         DROPS REENTRY POTS AND EXITS FROM PCS PROCESSING. 
* 
*         ENTRY  (B3) = REENTRY POT CHAIN POINTER.
* 
*         EXIT   POTS DROPPED.
* 
*         CALLS  DPT. 
  
  
 IGN      BSS    0           ENTRY
          ZR     B3,PCSX     IF NO POTS TO BE DROPPED 
          SB4    B0+         DROP POT CHAIN 
          RJ     DPT
          EQ     PCSX        EXIT 
 IPF      SPACE  4
**        IPF - ISSUE NO PRIMARY FILE NAME. 
  
  
 IPF      BSS    0
          SMA    X6,( NO PRIMARY FILE."NL") 
          RJ     SSP
          EQ     PCS5        ISSUE MESSAGE
 IPL      SPACE  4
**        IPL - ISSUES MESSAGE *INCORRECT PARAMETER.* 
* 
*         ENTRY-
*         NONE. 
  
  
 IPL      BSS    0
          SMA    X6,( INCORRECT PARAMETER."NL") 
          RJ     SSP
          EQ     PCS5        ISSUE MESSAGE
 PBS      SPACE  4
**        PBS - PROCESS COMMAND IN SYSTEM.
*         PSS - PROCSS COMMAND IN SYSTEM AFTER SORT.
* 
*         ENTRY-
*         SEE SSP.
  
  
 PSS      SX6    B1          SET *PPI* TO SORT FILE 
          EQ     PBS1 
  
 PBS      SX6    B0+         SET *PPI* NOT TO SORT THE FILE 
  
*         IF IN BATCH SUBSYSTEM ISSUE COMMANDS WITHOUT *$* PREFIX.
  
 PBS1     SX1    LBUF        COMMAND BUFFER WITH *$* PREFIX 
          SA2    A0+VSTT     CHECK FOR BATCH SUBSYSTEM
          MX5    -3 
          LX2    -12
          BX5    -X5*X2 
          SX2    X5-BATS
          NZ     X2,PBS2     IF NOT BATCH SUBSYSTEM 
          SX1    PBUF        COMMAND BUFFER WITHOUT *$* PREFIX
 PBS2     RJ     PCB         PACK COMMAND 
          SA1    PBUF 
          BX7    X1          SET *EPN*
          EQ     BJB         BEGIN JOB
 RDY      SPACE  4
**        RDY - ISSUES READY MESSAGE AND RETURNS TO PCS 
* 
*         (A0) = TERMINAL TABLE ADDRESS.
*         (B2) = TERMINAL NUMBER. 
*         (B3) = POT POINTER OR 0.
  
  
 RDY      BSS    0
          IFNET  /IAFEX4/RDY  IF NETWORK TERMINAL 
          SA1    A0+VSTT     SET SUBSYSTEM
          SA2    A0+VDCT     CHECK TAPE MODE
          LX2    59-48
          MX6    -3 
          LX1    -12
          BX6    -X6*X1      EXTRACT CURRENT SUBSYSTEM
          SX6    RDYA+X6     SELECT MESSAGE 
          PL     X2,PCS5     ISSUE MESSAGE IF NOT TAPE MODE 
          SX6    =2L         ISSUE NULL MESSAGE 
          EQ     PCS5        ISSUE MESSAGE
 PCS      TITLE  PCS - PROCESS QUEUE ENTRY. 
 PCS      SPACE  4
**        PCS - PROCESS QUEUE ENTRY.
* 
*         SAVES PARAMETERS AND RETURN ADDRESS AND THEN EXECUTES STACK 
*         ENTRY.
* 
*         ENTRY  (X5) = REENTRY STACK ENTRY.
*                (B7) = ADDRESS OF PROCESSING ROUTINE.
* 
*         CALLS  PROCESSING ROUTINE:  
*                (B2) = STACK ENTRY BITS 00-11 (TERMINAL NUMBER). 
*                (B3) = STACK ENTRY BITS 12-23 (POT POINTER). 
*                (B4) = POT ADDRESS.
*                (X7) = STACK ENTRY BITS 24-47, RIGHT JUSTIFIED.
  
  
**        PCS5 - EXIT TO ASSIGN MESSAGE.
* 
*         LENGTH IS ASSUMED TO BE 7 OR LESS CM WORDS AND
*         TERMINATES WITH A ZERO BYTE.
* 
*         MESSAGE IS 7 OR LESS WORDS IN LENGTH AND IS TERMINATED
*         BY LINE TERMINATOR OR CONTROL BYTE. 
* 
*         ENTRY-
*         (B7) = ADDRESS OF PROCESSING ROUTINE
*         (X5) = STACK ENTRY
  
  
**        ENTER- WITH PARAMETERS FOR MVA. 
  
 PCS5     SB4    0           SET LENGTH 
  
  
**        PCS6 - EXIT TO ASSIGN MESSAGE.
* 
*         ENTRY  (B4) = MESSAGE LENGTH IN CM WORDS. 
  
  
 PCS6     RJ     MVA         ISSUE MESSAGE
  
 PCS      SUBR               ENTRY/EXIT 
          BX7    X5 
          SA7    SSPA 
          RJ     SSP         SET PARAMETERS 
          JP     B7 
  
**        PCS1 - EXIT TO MAKE QUEUE ENTRY.
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
*                (X5) = TRRT ORDER CODE.
*                (X7) = QUEUE ENTRY BITS 24-47. 
*                (B2) = TERMINAL NUMBER.
*                (B3) = QUEUE ENTRY BITS 12-23. 
* 
*         EXIT   QUEUE ENTRY MADE.
*                VROT BIT ZERO CLEARED (BUSY) FOR ITAQ OR ITOQ
*                REQUEST. 
  
 PCS1     BSS    0
          SA1    TRRT-2000B+X5
          SB7    B0 
          AX1    54 
          ZR     X1,PCS3     IF FOR NO QUEUE
          SB7    TRQT+X1
 PCS3     LX5    48 
          MX6    -24
          BX7    -X6*X7 
          LX7    24 
          BX5    X5+X7
          MX6    -12
          SX7    B3 
          BX7    -X6*X7 
          LX7    12 
          BX5    X5+X7
          RJ     MQE         MAKE ENTRY IN REENTRY TABLE
          NZ     X2,PCSX     IF NOT CURRENT ENTRY 
          SB6    B7-ITAQ
          SB7    B7-ITOQ
          ZR     B6,PCS4     IF 1TA CALL
          NZ     B7,PCSX     IF NOT 1TO OR 1TA CALL 
 PCS4     SA1    A0+VROT     SET TERMINAL TABLE BUSY FOR 1TA AND 1TO
          MX2    59 
          BX6    X1*X2
          SA6    A1          REWRITE VROT 
          EQ     PCSX        RETURN TO CALLING ROUTINE
          TITLE  PMQ - PROCESS MONITOR WAIT QUEUE.
**        PMQ - PROCESS MONITOR WAIT QUEUE. 
* 
*         RETURNS CONTROL TO THE ROUTINE WHICH MADE THE MONITOR 
*         REQUEST WHEN THE COMPLETE BIT IN THE PARAMETER BLOCK
*         IS SET. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 0, 1, 2, 4, 5, 6, 7. 
*                B - 3, 5, 6, 7,
* 
*         CALLS  GQE, GRT, PCS, SSP, UQS. 
* 
*         MACROS  TTADD.
  
  
 PMQ      SUBR               ENTRY/EXIT 
          SA4    MNWQ        CHECK QUEUE CONTENTS 
          SX7    X4 
          SA2    A4+B1
          ZR     X7,PMQX     IF QUEUE EMPTY 
          SA1    RTIM        CHECK TIME SINCE QUEUE PROCESSED 
          SX3    MWQT 
          IX2    X1-X2
          IX2    X3-X2
          PL     X2,PMQX     IF TIME DELAY NOT COMPLETE 
          BX6    X1          UPDATE PROCESSING TIME 
          SA6    A2 
  
*         SET QUEUE PROCESSING POINTERS.
  
          SA7    PMQA        LAST TERMINAL OF QUEUE 
          AX4    18          FIRST TERMINAL OF QUEUE
          BX7    X7-X7
          SX6    X4 
          SB5    B0 
          SA6    A7+B1       NEXT TERMINAL = FIRST TERMINAL 
          SA7    A6+B1       CLEAR TERMINAL LINK
  
*         ADVANCE TO NEXT TERMINAL. 
  
 PMQ1     SA1    PMQA        LAST TERMINAL IN QUEUE 
          SX7    B5 
          IX4    X1-X7
          ZR     X4,PMQX     IF LAST TERMINAL CHECKED 
          SA5    A1+B1       NEXT TERMINAL
          SB5    X5 
          ZR     X5,PMQX     IF NO NEXT TERMINAL
          RJ     GRT         READ QUEUE ENTRY 
          ZR     X4,PMQX     IF NO QUEUE ENTRY
          MX5    -12         SET NEXT TERMINAL NUMBER 
          BX7    -X5*X4 
          TTADD  B5,A0,X1,X2
          SA7    A5 
  
*         CHECK PARAMETER BLOCK STATUS. 
  
          AX4    12 
          BX2    -X5*X4 
          LX2    3
          TA1    X2,VBMP
          LX1    59-0 
          NG     X1,PMQ2     IF REQUEST COMPLETE
          SX7    B5          RETAIN TERMINAL IN QUEUE 
          SA7    A7+B1
          EQ     PMQ1        ADVANCE TO NEXT TERMINAL 
  
*         PROCESS COMPLETED ENTRY.
  
 PMQ2     SA1    PMQC        GET LINK TO CURRENT TERMINAL 
          SB6    MNWQ 
          SB7    X1 
          RJ     GQE         GET QUEUE ENTRY
          UX4,B7 X5 
          SA2    TRRT+B7
          SB7    X2 
          RJ     PCS         PROCESS FUNCTION 
          RJ     SSP         RESET PARAMETERS 
          RJ     UQS         UPDATE QUEUE STACK 
          RJ     SSP         RESET PARAMETERS 
          SB5    B2          SET CURRENT TERMINAL NUMBER
          EQ     PMQ1        ADVANCE TO NEXT QUEUE ENTRY
  
  
 PMQA     CON    0           LAST TERMINAL IN QUEUE 
 PMQB     CON    0           NEXT TERMINAL IN QUEUE 
 PMQC     CON    0           TERMINAL LINKED TO CURRENT TERMINAL
 PPU      TITLE  PPU - PROCESS PPU REQUESTS.
 PPU      SPACE  4
**        PPU - PROCESSES ALL *IAFEX* REQUESTS THAT REQUIRE A PPU 
*         TO BE ASSIGNED.  THESE REQUESTS ARE TAKEN FROM *IAFEX,S*
*         INTERNAL QUEUE, ORDERED APPROPRIATELY, AND PLACED INTO POT
*         QUEUES FOR THE VARIOUS PPU PROGRAMS.
  
  
*         POST PROCESS *1TA* REQUESTS.
  
 PPU      SUBR               ENTRY/EXIT 
          SA1    PITA 
          ZR     X1,PPU2     IF *1TA* ACTIVE
          BX2    X1 
          AX1    36 
          NZ     X1,PPU2     IF REQUEST NOT MADE YET
          MX1    -12
          BX3    -X1*X2 
          AX2    12 
          SX1    X2 
          ZR     X1,PPU1     IF POST PROCESSING DONE
          SX6    B1          SET COMPLETION 
          SA6    A1 
          SB3    X3          DROP POTS
          SB4    B0 
          RJ     DPT
  
*         PROCESS *1TA* REQUEST QUEUE.
  
 PPU1     SA1    ITAQ        CHECK IF REQUESTS WAITING
          UX2,B2 X1 
          ZR     B2,PPU2     IF NO REQUESTS 
          SA3    PPUA+1      CHECK IF REQUEST HAS WAITED 1/2 SECOND 
          SA2    RTIM 
          IX4    X2-X3
          AX4    9
          ZR     X4,PPU2     IF TIME NOT ELASPED
          BX6    X2 
          SA6    A3 
          SX0    A1          SORT AND BUILD REQUEST QUEUE FOR *1TA* 
          RJ     BRQ
          ZR     X6,PPU2     IF NO REQUEST QUEUE GENERATED
          SA1    PPUA 
          BX7    X1+X6
          SA7    PITA 
          SA7    PPUC        SAVE *1TA* REQUEST FOR DEBUG 
  
*         POST PROCESS *1TO* REQUESTS.
  
  
 PPU2     SA1    PITO 
          BX2    X1 
          AX1    36 
          NZ     X1,PPUX     IF REQUEST NOT MADE YET
          ZR     X2,PPUX     IF *1TO* ACTIVE
          AX2    24 
          ZR     X2,PPU7     IF POST PROCESSING DONE
          LX2    3
          TX1    X2+VCPC,VBMP  SET LWA+1 OF POT 
          LX2    33 
          SX3    X1-VCPC     SET FWA OF POT 
          LX1    18 
          BX2    X2+X3
          BX6    X2+X1
          SA6    PPUB+1 
 PPU3     SA1    PPUB+1      GET NEXT ENTRY TO PROCESS
          MX2    24 
          SA5    X1 
          BX3    X2*X1
          ZR     X5,PPU6     IF LAST ENTRY
          SX6    B1 
          ZR     X3,PPU6     IF END OF POT CHAIN
          IX6    X1+X6
          AX1    18 
          BX2    X1-X6
          SX3    X2 
          NZ     X3,PPU4     IF NOT END OF POT
          AX1    18          GET POT LINK 
          SB3    X1 
          RJ     GPL
          SX4    B3 
          SX7    B4+VCPC
          LX4    36 
          SX6    B4 
          LX7    18 
          BX6    X6+X4
          BX6    X6+X7
  
*         THE FORMAT OF THE *1TO* REQUEST UPON RETURN FROM *1TO* IS 
* 
*T        6/ RT,6/ NP,12/ 0,12/ LP,12/ FP,12/ TN
* 
*         IF INPUT WAS DUMPED TO THE PRIMARY FILE,
*                (RT) = 0, INPUT REQUEST. 
*                (NP) = 0.
*                (LP) = LAST POT TO DROP. 
*                (FP) = FIRST POT TO DROP.
*                (TN) = TERMINAL NUMBER.
* 
*         IF OUTPUT WAS REQUESTED FROM THE PRIMARY OR ROLLOUT FILE, 
*                (RT) = 1, OUTPUT REQUEST.
*                (NP) = NUMBER OF POTS CONTAINING OUTPUT. 
*                (LP) = LAST POT CONTAINING OUTPUT. 
*                (FP) = FIRST POT CONTAINING OUTPUT.
*                (TN) = TERMINAL NUMBER.
* 
*         IF OUTPUT WAS REQUESTED, A *VASO* QUEUE ENTRY WILL
*         BE GENERATED TO ASSIGN THE DATA TO THE TERMINAL.  IF
*         INPUT WAS DUMPED TO THE PRIMARY FILE, A *VDPO* QUEUE
*         ENTRY WILL BE FORMED TO DROP THE EMPTY POTS.
  
 PPU4     SA6    A1 
          MX4    -42         MASK IF *VASO* 
          BX3    X5 
          MX1    -12
          AX5    48 
          BX1    -X1*X3      EXTRACT TERMINAL NUMBER
          SB2    X1+
          SX2    VASO        SET TO ASSIGN OUTPUT 
          NZ     X5,PPU5     IF OUTPUT REQUEST
          SX2    VDPO        SET TO DROP POTS 
          MX6    12 
          MX4    -36         MASK IF *VDPO* 
          LX6    24 
          BX6    X6*X3
          ZR     X6,PPU3     IF NO POTS TO DROP 
 PPU5     SA1    TSTR-2000B+X2
          LX5    36          MOVE POT COUNT FOR *VADO*
          BX3    X3+X5
          BX5    -X4*X3 
          LX2    48 
          BX5    X5+X2
          SB7    X1 
          RJ     PCS
          EQ     PPU3 
  
 PPU6     BX6    X6-X6
          SA6    A1 
          SA2    PITO        DROP POTS
          SX7    B1 
          AX2    24 
          SA7    A2 
          SB3    X2 
          SB4    B0 
          RJ     DPT
  
*         PROCESS *1TO* REQUEST QUEUE.
  
 PPU7     SA1    ITOQ 
          UX2    X1,B2
          ZR     B2,PPUX     IF NO ENTRIES
          SX0    A1 
          RJ     BRQ
          ZR     X6,PPUX     IF NO REQUEST QUEUE GENERATED
          SA1    PPUB 
          LX6    24 
          BX7    X1+X6
          SA7    PITO 
          SA7    PPUC+1      SAVE *1TO* REQUEST FOR DEBUG 
          EQ     PPUX        EXIT 
  
 PPUA     VFD    18/3R1TA,6/0,6/0,18/PITA,12/0
          CON    0           TIME OF LAST 1TA REQUEST 
 PPUB     VFD    18/3R1TO,6/0,12/0,6/0,18/PITO
          CON    0           NEXT ENTRY TO POSTPROCESS
 PPUC     CON    0           LAST *1TA* REQUEST 
          CON    0           LAST *1TO* REQUEST 
 RPC      SPACE  4,30 
**        RPC - REFILL POT CHAINS.
* 
*         FOR EACH *TGPM* QUEUE, *RPC* GETS QUEUE POINTERS FROM THE 
*         QUEUE STATUS WORDS AND PASSES THEM TO ROUTINE *FPQ* TO FILL 
*         THE QUEUE WITH POT CHAINS.  THE QUEUE STATUS WORDS ARE
*         UPDATED AFTER EACH QUEUE HAS BEEN FILLED. 
* 
*         ENTRY  (VGPL) = *TGPM* QUEUE STATUS WORDS.
*                  6/PCL,6/PCC,12/PFP,12/NFP,12/BOQ,12/EOQ. 
*                    PCL = POT CHAIN LENGTH.
*                    PCC = POT CHAIN COUNT(CONTROL VALUE).
*                    PFP = PREVIOUS FILL POINTER. 
*                    NFP = NEXT FILL POINTER. 
*                    BOQ = BEGINNING OF QUEUE.
*                    EOQ = END OF QUEUE.
* 
*         EXIT   IF ENOUGH FIELD LENGTH WAS AVAILABLE, THE *TGPM* 
*                QUEUES HAVE BEEN FILLED TO THEIR CONTROL VALUES. 
*                IF NOT ENOUGH FIELD LENGTH WAS AVAILABLE, AS MANY
*                ENTRIES AS POSSIBLE WERE FILLED WITH POT CHAINS. 
*                PCC, PFP, AND NFP IN *VGPL* WORDS HAVE BEEN UPDATED. 
* 
*         USES   A - 1, 2, 6. 
*                X - 0, 1, 2, 3, 4, 6.
*                B - 2, 3, 4, 5.
* 
*         CALLS  FPQ. 
  
  
 RPC      SUBR               ENTRY/EXIT 
          SX6    VGPL        SAVE STATUS WORD ADDRESS 
 RPC1     SA6    RPCA 
          SA1    X6 
          BX2    X1          GET POINTERS FROM *VGPL* WORD
          AX2    24 
          MX3    -12
          BX4    -X3*X2 
          SB3    X4          (B3) = NEXT FILL POINTER 
          AX2    12 
          BX4    -X3*X2 
          SB4    X4          (B4) = PREVIOUS FILL POINTER 
          AX2    12 
          MX3    -6 
          BX4    -X3*X2 
          SB5    X4          (B5) = POT CHAIN COUNT(CONTROL VALUE)
          AX2    6
          BX4    -X3*X2 
          SB2    X4          (B2) = LENGTH OF POT CHAIN FOR THIS QUEUE
          RJ     FPQ         FILL POT QUEUE 
          SA2    RPCA        UPDATE QUEUE STATUS WORD 
          SA1    X2 
          MX3    30         CLEAR OLD POINTERS
          LX3    24 
          BX6    X3*X1
          SX3    B5          INSERT UPDATED CHAIN COUNT 
          LX3    48 
          BX6    X6+X3
          LX4    36          INSERT UPDATED PREVIOUS FILL POINTER 
          BX6    X6+X4
          LX0    24          INSERT UPDATED NEXT FILL POINTER 
          BX6    X6+X0
          SA6    X2          REWRITE *TGPM* QUEUE STATUS WORD 
          SX2    X2+B1
          BX6    X2 
          SX3    X2-VGPE
          NG     X3,RPC1     IF NOT LAST QUEUE STATUS WORD
          EQ     RPCX        EXIT 
  
  
 RPCA     CON    0           ADDRESS OF *TGPM* QUEUE STATUS WORDS 
 SPR      TITLE  SPR - SET FIELD LENGTH.
 SPR      SPACE  4,20 
**        SPR - EVALUATE AND ADJUST FIELD LENGTH. 
* 
*         INCREASE EVALUATION IS DONE EACH TIME *SPR* IS ENTERED. 
*         FIELD LENGTH INCREASES ARE PROCESSED BY A CALL TO *1TA*.
*         A THROTTLE FLAG IS USED TO SLOW DOWN THE USAGE OF POTS
*         SO IAF WILL NOT RUN OUT OF POTS BEFORE *1TA* GETS THE 
*         FIELD LENGTH INCREMENT. 
* 
*         FIELD LENGTH DECREASE EVALUATION IS PERFORMED AFTER THE 
*         INTERVAL TIME HAS ELAPSED.  THE TIME CYCLE IS DETERMINED
*         DYNAMICALLY ACCORDING TO THE AMOUNT OF FIELD LENGTH 
*         VARIATION.  MEMORY DECREASES ARE MADE BY THE SYSTEM 
*         *MEMORY* MACRO. 
* 
*         THE INITIAL RESET START TIME IS SET TO 6 MINUTES TO 
*         ALLOW IAF TO PERFORM JOB RECOVERY.
  
  
 SPR9     SA7    VPAL        RESET TOTAL POTS AVAILABLE 
          BX6    X2 
          SA6    SPRK        RESTORE CURRENT FL IN USE
          SX6    3RSPR
          NG     X7,ABT+1    IF POTS AVAILABLE GOES NEGATIVE
          MEMORY CM,,,X2     RELEASE MEMORY 
          SA1    SPRL        COUNT MEMORY DECREASE
          SX6    X1+B1
          SA6    A1 
  
 SPR      SUBR               ENTRY/EXIT 
          SA1    VCPL 
          NZ     X1,SPRX     IF FL INCREASE REQUEST PENDING 
  
*         CHECK FOR FL INCREASE.
  
          SA4    VPAL        TOTAL POTS AVAILABLE 
          SA1    VPUL        POTS IN USE
          IX3    X4-X1       FREE POTS
          SX6    X3-VMIP-VFLI/VCPC
          SX7    B0 
          SA1    SPRM        CLEAR THROTTLE FLAG
          SA7    A1 
          SB3    X1          SAVE FLAG VALUE
          SX1    VFLI        GET FIELD LENGTH INCREMENT 
          SA5    VPLP        PLT POINTERS 
          BX2    X4 
          LX2    3
          TX2    X2,VBMP     OLD FL 
          IX2    X2+X1       NEW FL 
          NG     X6,SPR4     IF MORE POTS NEEDED
          NZ     B3,SPR4     IF THROTTLE FLAG SET 
  
*         AFTER A RESET INTERVAL HAS ELAPSED RESET THE TIME INTERVAL. 
*         EXIT IF A TIME INTERVAL HAS NOT ELAPSED.
  
          SA1    STIM        CURRENT TIME 
          BX6    X1 
          SA1    SPRD        RESET START
          SX2    RESTO       RESET INTERVAL 
          IX2    X1+X2       RESET START + RESET INTERVAL 
          IX7    X6-X2       CURRENT TIME - RESET TIME
          SA1    SPRJ 
          SA2    SPRC 
          NG     X7,SPR1     IF NOT TIME TO RESET 
          SA6    SPRD        RESET START
          SX7    MINDL       SET INTERVAL TIME
          SA7    A1 
 SPR1     IX2    X1+X2       CHECK TIME INTERVAL
          IX1    X6-X2
          NG     X1,SPRX     IF TIME INTERVAL NOT ELAPSED 
          SA6    A2          SET LAST EVALUATION
  
*         CHECK RESULTS OF PREVIOUS FIELD LENGTH EVALUATION.
  
          SA1    SPRE 
          SA2    SPRG 
          NZ     X1,SPR6     IF FL INCREASES NON-ZERO 
          NZ     X2,SPR6     IF LAST FL SEGMENT USED
  
*         CHECK IF FL DECREASE POSSIBLE.
  
          SX2    VFLR        FL DECREMENT POT COUNT 
          IX1    X2-X3
          PL     X1,SPRX     IF FL DECREASE NOT POSSIBLE
          SX6    B0          CLEAR DAYFILE MESSAGE COUNT
          SA6    SPRN 
  
*         CALCULATE NEW FIELD LENGTH NEEDED FOR DECREASE. 
  
          BX1    -X1         COMPLEMENT FL
          AX1    5           PLT WORDS ROUNDED TO NEAREST VFLI
          LX1    8           REQUIRED FL FOR DECREASE 
          ZR     X1,SPRX     IF LESS THAN ONE VFLI MULTIPLE 
          BX1    -X1         COMPLEMENT FL
          SA3    VPAL        ALLOCATED POTS 
          LX3    3
          TX3    X3,VBMP     OLD FL 
          IX2    X3+X1       OLD FL - MIN DECREASE
          SA3    X5          LWA+1 OF PLT 
 SPR2     SA3    A3-B1
          ZR     X3,SPR2     IF POTS NOT ALLOCATED
          SX3    A3+B1       HIGHEST PLT WORD+1 
          SB2    24 
          AX7    X5,B2
          SX7    X7          SET FWA OF PLT 
          IX6    X3-X7       FREE LWA+1 - FWA 
          LX6    5           NUMBER OF PLT WORDS * 32 
          TX6    X6,VBMP     MIN FL NEEDED FOR PLT LINKS ACTIVE 
          SX7    X6+VCPC     HIGHEST POT ADDR+8 
          IX6    X7-X2
          PL     X6,SPRX     IF CANNOT DECREASE 
          SA6    SPRH 
  
*         DETERMINE NEW PLT LENGTH AND LWA. 
  
 SPR4     AX1    3           NUMBER OF POTS TO ADD OR DROP
          IX7    X4+X1       NEW POTS COUNT 
          AX1    2           GET NEW PLT LENGTH 
          IX6    X1+X5
          AX5    24          CHECK FOR PLT OVERFLOW 
          SB2    X5          SET PLT FWA
          SB3    X6          SET PLT LWA+1
          AX5    24 
          SB4    X5          SET PLT LENGTH 
          SB3    B3-B2
          GT     B3,B4,SPR7  IF INCREASE NOT POSSIBLE 
          SA6    A5 
          SX2    X2+77B      ROUND UP FL
          NG     X1,SPR9     IF FL DECREASE 
  
*         PROCESS MEMORY INCREASE.
  
          SA3    SPRB        COUNT FL INCREASE
          SX6    X3+B1
          SA6    A3 
          SA6    SPRE        SET FL INCREASE FLAG 
          SA3    SPRA        DETERMINE IF NEW MAXIMUM FL
          SA7    VCPL        SET FL INCREASE IN PROGRESS
          SA4    SPRI        READ *1TA* REQUEST 
          IX1    X3-X2       MAXIMUM FL - REQUIRED FL 
          BX6    X2 
          SA6    SPRK        RESET CURRENT FL IN USE
          BX7    X4+X2       COMPLETE *1TA* REQUEST 
          PL     X1,SPR5     IF NOT NEW MAXIMUM 
          SA6    A3          SET NEW MAXIMUM FL 
 SPR5     SA7    PMSG 
          EQ     SPRX        RETURN 
  
*         MAKE NO FIELD LENGTH CHANGE IF INCRESES HAVE OCCURRED 
*         THIS PERIOD OR IF NOT ENOUGH FIELD LENGHT REMAINS.
*         RESET INCREASE FLAG AND LAST SEGMENT USED FLAG. SET 
*         MAXIMUM INTERVAL STATISTIC AND INCREMENT INTERVAL TIME
*         IF NECESSARY. 
  
 SPR6     BX6    X6-X6
          SA6    A1          RESET FL INCREASE FLAG 
          SA6    A2+
          SA3    SPRH 
          ZR     X3,SPRX     IF REDUCE FLAG NOT SET 
          SA6    A3          RESET REDUCE FLAG
          SA1    SPRJ        INTERVAL TIME
          SX2    X1-MAXDL 
          PL     X2,SPRX     IF INTERVAL TIME .GE. HIGH INTERVAL
          SX7    X1+INCTO 
          SA7    A1 
          SA1    SPRF        MAXIMUM INTERVAL TIME
          IX1    X1-X7
          PL     X1,SPRX     IF INTERVAL TIME .LE. MAXIMUM INTERVAL 
          SA7    A1+
          EQ     SPRX        RETURN 
  
*         ISSUE DAYFILE MESSAGE.
  
 SPR7     SA3    SPRN        INCREMENT DAYFILE MESSAGE COUNT
          SX6    X3+B1
          SA6    A3 
          NZ     X3,SPRX     IF MESSAGE HAS BEEN ISSUED 
          MESSAGE  (=C* PLT INCREASE NOT POSSIBLE.*)
          EQ     SPRX        RETURN 
  
*         PARAMETERS FOR FIELD LENGTH EVALUATION. 
  
 SPRA     CON    0           MAXIMUM FL USED
 SPRB     CON    0           NUMBER OF FL INCREASES 
 SPRC     CON    0           LAST EVALUATION
 SPRD     CON    360D        RESET START - SECONDS
 SPRE     CON    0           FL INCREASES FLAG
 SPRF     CON    0           MAXIMUM INTERVAL TIME
 SPRG     CON    0           LAST SEGMENT USED FLAG 
 SPRH     CON    0           REDUCE FLAG
 SPRI     VFD    18/3R1TA,6/0,12/4001B,24/0 
 SPRJ     CON    MINDL       INTERVAL TIME
 SPRK     CON    0           CURRENT FL IN USE
 SPRL     CON    0           NUMBER OF FL DECREASES 
 SPRM     CON    0           THROTTLE FLAG
 SPRN     CON    0           DAYFILE MESSAGE COUNT
 TDQ      TITLE  TDQ - PROCESS TIME DELAY QUEUE.
 TDQ      SPACE  4
**        TDQ - PROCESS TIME DELAY QUEUE. 
  
  
 TDQ      SUBR               ENTRY/EXIT 
          SA2    STIM 
          SA3    TIMQ+1 
          IX3    X2-X3       ELASPED TIME 
          ZR     X3,TDQX     IF TIME DELAY NOT EXCEEDED 
          BX6    X2          SAVE NEW TIME
          SA6    A3 
          SA4    A3-B1
          UX0    X4,B2
          AX0    18 
 TDQ1     ZR     X0,TDQX     IF NO MORE ENTRIES 
          SB7    B5          SET PREVIOUS TERMINAL NUMBER 
          SB5    X0 
          MX5    -24
          BX2    -X5*X2 
          RJ     GRT         GET ENTRY
          SB2    B5          SET TERMINAL NUMBER
          IFMUX  TDQ2 
          TA1    B5,VMST
          LX1    59-48
          PL     X1,TDQ3     IF TIMEOUT FLAG CLEAR
 TDQ2     MX6    -12
          BX0    -X6*X4 
          AX4    24 
          BX4    -X5*X4 
          IX4    X4-X2       RESTART TIME - REAL TIME 
          PL     X4,TDQ1     IF TIME DELAY NOT PASSED 
 TDQ3     SX0    B5          SAVE LAST TERMINAL PROCESSED 
          SB6    TIMQ 
          RJ     GQE         GET ENTRY FROM QUEUE 
          SX1    B2 
          SX6    B5          SAVE CURRENT TERMINAL NUMBER 
          SB2    X0          SET LAST TERMINAL PROCESSED
          LX6    18 
          BX0    X1+X6
          RJ     UQS         UPDATE QUEUE STACK 
          SA2    STIM 
          BX1    X0          RESET NEXT TERMINAL NUMBER 
          SX0    X0 
          AX1    18          SET TERMINAL NUMBER JUST COMPLETED 
          SB5    X1 
          EQ     TDQ1 
          TITLE  TSR - CHECK FOR COMPLETION AND INITIATE NEXT OPERATION.
 TSR      SPACE  4,20 
**        TSR - PROCESS WAIT-COMPLETION QUEUE.
* 
*         EXECUTES THE NEXT OPERATION FOR TERMINALS IN THE
*         WAIT-COMPLETION QUEUE WHO MEET ONE OF THE FOLLOWING 
*         CRITERIA -
* 
*                (A)  THE PREVIOUS OPERATION IS COMPLETE. 
*                (B)  THE QUEUE ENTRY IS A WAIT-DRIVER (DCR1$)
*                     QUEUE ENTRY.
*                (C)  THE QUEUE ENTRY IS A STATUS (STA$) QUEUE
*                     ENTRY.
* 
*         EXIT   QUEUE ENTRIES PROCESSED VIA *PCS*. 
* 
*         USES   A - 0, 1, 2, 4, 5, 6, 7. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 3, 5, 6, 7.
* 
*         CALLS  GRT, GQE, PCS, SSP, UQS. 
* 
*         MACROS TTADD. 
  
  
 TSR      SUBR               ENTRY/EXIT 
          SA1    RTIM        GET REAL TIME
          SA2    WCMQ+1      TIME QUEUE LAST PROCESSED
          SX3    WCQT        QUEUE TIME DELAY 
          IX2    X1-X2       ELAPSED TIME 
          IX2    X3-X2
          PL     X2,TSRX     IF TIME DELAY NOT UP, RETURN 
  
*         SET QUEUE PROCESSING POINTERS.
  
          BX6    X1          UPDATE PROCESSING TIME 
          SA4    A2-B1       READ QUEUE POINTER 
          SA6    A2 
          SX7    X4          LAST TERMINAL OF QUEUE 
          ZR     X7,TSRX     IF QUEUE EMPTY, RETURN 
          SA7    TSRA 
          AX4    18          FIRST TERMINAL OF QUEUE
          BX7    X7-X7
          SX6    X4 
          SB5    B0+         CLEAR CURRENT TERMINAL NUMBER
          SA6    A7+B1       SET NEXT TERMINAL = FIRST TERMINAL 
          SA7    A6+B1       CLEAR TERMINAL LINK
  
*         ADVANCE TO NEXT TERMINAL. 
  
 TSR1     SA1    TSRA        LAST TERMINAL OF QUEUE 
          SX7    B5          CURRENT TERMINAL 
          IX4    X1-X7
          ZR     X4,TSRX     IF LAST TERMINAL CHECKED, RETURN 
          SA5    TSRB        NEXT TERMINAL
          ZR     X5,TSRX     IF NO NEXT TERMINAL, RETURN
          SB5    X5+         SET NEW CURRENT TERMINAL 
  
*         GET TERMINAL QUEUE ENTRY. 
  
          RJ     GRT         READ QUEUE ENTRY 
          ZR     X4,TSRX     IF NO QUEUE ENTRY, RETURN
          MX1    -12         SET NEXT TERMINAL NUMBER 
          BX7    -X1*X4 
  
*         CHECK TERMINAL STATUS.
  
          TTADD  B5,A0,X1,X2 SET TERMINAL TABLE ADDRESS 
          SA7    TSRB 
          SA1    A0+VDCT     READ VDCT ENTRY
          MX2    2
          AX4    48          CHECK QUEUE ENTRY
          BX3    X2*X1
          NZ     X3,TSR2     IF DRIVER REQUEST OR INTERRUPT 
          SX1    X4-DCR2$ 
          SX2    X4-DCR3$ 
          ZR     X1,TSR3     IF DRIVER REQUEST WAIT 
          SX3    X4-STA$
          ZR     X2,TSR3     IF WAIT-DRIVER QUEUE ENTRY 
          ZR     X3,TSR3     IF STA$ QUEUE ENTRY
          SX2    X4-CJA$
          ZR     X2,TSR3     IF CLEARING REENTRY QUEUE
          SA1    A0+VROT     READ VROT ENTRY
          LX1    59-0 
          NG     X1,TSR3     IF OPERATION COMPLETE
 TSR2     SX7    B5          SET TERMINAL AS LINKED 
          SA7    A7+B1
          EQ     TSR1        ADVANCE TO NEXT TERMINAL 
  
*         PROCESS QUEUE ENTRY.
  
 TSR3     SA1    TSRC        GET LINK TO CURRENT TERMINAL 
          SB6    WCMQ        INDICATE QUEUE 
          SB7    X1 
          RJ     GQE         GET ENTRY FROM QUEUE 
          SA1    A0+VROT     READ OPERATION STATUS
          UX4,B3 X5          UNPACK QUEUE ENTRY 
          LX1    59-11
          SA2    TRRT+B3     READ REENTRY POINTER WORD
          PL     X1,TSR4     IF NO ERROR FLAG 
          MX6    -59         CLEAR ERROR FLAG 
          BX6    -X6*X1 
          LX6    11-59
          AX2    18          SET ERROR PROCESSOR ADDRESS
          SA6    A1+         REWRITE VROT ENTRY 
 TSR4     SB7    X2          SET *PCS* PROCESSOR ADDRESS
          RJ     PCS         PROCESS QUEUE ENTRY
          RJ     SSP
          RJ     UQS         UPDATE QUEUE STACK 
          RJ     SSP
          SB5    B2          SET CURRENT TERMINAL NUMBER
          EQ     TSR1        ADVANCE TO NEXT TERMINAL 
  
 TSRA     CON    0           LAST TERMINAL OF QUEUE 
 TSRB     CON    0           NEXT TERMINAL TO PROCESS 
 TSRC     CON    0           TERMINAL LINKED TO CURRENT TERMINAL
 TRRT     SPACE  4
**        TRRT - TABLE OF REENTRY ROUTINES PARAMETERS.
*         THIS TABLE OF CONSISTS OF ENTRIES THAT DIRECT FURTHER 
*         PROCESSING BASED ON ENTRIES FROM THE REENTRY TABLE AND
*         ON CERTAIN ACTIONS BEING COMPLETED. 
* 
*         THE FORMAT OF THE TABLE IS AS FOLLOWS 
*         XXYY ZZZZ EEEE EENN NNNN - WHERE
*                XX = INDEX TO TRQT (TABLE OF PPU REQUESTS.)
*                IF XX = 0, NO RESOURCE REQUIREMENTS EXCEPT FOR 
*                POSSIBLE A PERIPHERAL PROCESSOR. 
*                YY = FUNCTION CODE FOR CALLED PROGRAM. 
*                ZZZZ = FUNCTION PROCESSING ADDRESS RELATIVE TO TSRPROC 
*                EEEEEE = ERROR RETURN ADDRESS. 
*                NNNNNN = NORMAL RETURN ADDRESS.
  
  
 TRRT     BSS    0
          LOC    2000B
          COMMND APS1,WCMQ,APS1 
          COMMND ASO2,WCMQ,ASO2 
          COMMND CJA,WCMQ,CJA5
          COMMND DCR2,WCMQ,DCR2 
          COMMND DCR3,WCMQ,DCR3 
          COMMND DIN1,WCMQ,DIN1 
          COMMND DTJ3,WCMQ,DTJ3 
          COMMND ETX1,WCMQ,ETX1 
          COMMND FLO4,WCMQ,FLO4 
          COMMND ETX2,WCMQ,ETX2 
          COMMND ETX4,WCMQ,ETX4 
          COMMND FTP,WCMQ,FTP 
          COMMND FTP3,WCMQ,FTP3 
          COMMND HNG,WCMQ,HNG 
          COMMND HUP2,WCMQ,HUP2 
          COMMND IAM3,ITAQ,,,3
          COMMND ICH,ITOQ 
          COMMND INP,,INP 
          COMMND ITA2,ITAQ,LIN6,LIN14,2 
          COMMND ITA3,ITAQ,URL8,URL12,4 
          COMMND ITA4,ITAQ,CRR1,CRR,2 
          COMMND ITA1,ITAQ,,,5
          COMMND ITO,ITOQ 
          COMMND ITO1,ITOQ
          COMMND LIN1,WCMQ,LIN1 
          COMMND LIS8,WCMQ,LIS8 
          COMMND PCM1,WCMQ,PCM1 
          COMMND PCM2,WCMQ,PCM2 
          COMMND PMR2,MNWQ,PMR2 
          COMMND PMR4,MNWQ,PMR4 
          COMMND PUB4,WCMQ,PUB4 
          COMMND PUB8,WCMQ,PUB8 
          COMMND RDJ1,WCMQ,RDJ1 
          COMMND RIN,WCMQ,DRT 
          COMMND STA,WCMQ,STA5
          COMMND TOT,TIMQ,TOT 
          BSS    0
          LOC    *O 
 TRRTL    EQU    *-TRRT 
          TITLE  TSR - SUBROUTINES. 
 TSRPROC  BSS    0
 TSA      SPACE  4
**        TSR ABORT.
  
  
 TSA      BSS    0
          SX6    3RTSR
          EQ     ABT+1
 DCR      SPACE  4
**        DCR - DRIVER COMMAND REQUESTS 
* 
*         ENTRY  (X2) = COMMAND NUMBER. 
*                (X7) = RETURN ADDRESS. 
* 
*                SEE SSP. 
  
  
 DCR      BSS    0
          SA1    A0+VSTT
          LX1    59-58
          NG     X1,IGN      IF USER BREAK IN PROGRESS
 DCR1     SA1    A0+VDCT
          SX3    X2+
          MX0    -12
          LX3    18 
          SX5    DCR2$       SET REENTRY
          BX0    -X0*X1      CHECK FOR QUEUED OUTPUT
          BX7    X7+X3
          NZ     X0,PCS1     IF QUEUED OUTPUT 
          RJ     EDR         ENTER DRIVER REQUEST 
          SX5    DCR3$       ENTER REQUEST QUEUE
          EQ     PCS1 
  
 DCR2     BX2    X7          RESTORE REQUEST CODE 
          AX2    18 
          EQ     DCR1        PROCESS REQUEST
  
 DCR3     SA1    A0+VDCT     CHECK DRIVER REQUEST 
          SX5    DCR3$
          MX2    -12
          BX2    -X2*X1 
          NZ     X2,PCS1     IF NOT YET PROCESSED 
          SB7    X7          GET RETURN ADDRESS 
          JP     B7          RETURN 
 HNG      SPACE  4
*         HNG - REQUESTS DRIVER TO HANG UP PHONE WHEN LAST MESSAGE HAS
*         BEEN ACCEPTED BY DRIVER.
  
  
 HNG      BSS    0
          RJ     RDC         READ VDCT
          SA2    A0+VSTT
          MX6    -12
          BX3    -X6*X2 
          ZR     X3,HNG1     IF NO MESSAGE QUEUED IN VSTT 
          SX5    HNG$ 
          IFNET  PCS1 
          BX6    X6*X2
          SA6    A2          UPDATE VSTT
          BX6    X1+X3
          SX3    B1+B1       TELL DRIVER TO START AT WORD TWO 
          LX3    36-0 
          BX6    X6+X3
          SA6    A1          PUT MESSAGE IN VDCT
          RJ     RDC         WAIT FOR MESSAGE TO BE TAKEN BY DRIVER 
 HNG1     SX2    /1TD/HUP 
          RJ     EDR         ENTER DRIVER REQUEST 
          RJ     CDP         CLEAR DETACH IN PROGRESS 
  
*         CLEAR OUTPUT AVAILABLE, INPUT REQUESTED, AND JOB CONTINUATION 
*         SO THAT THESE WILL NOT GET RESTARTED BY *RES*.
  
          SA1    A0+VROT
          SX6    34B
          BX6    -X6*X1 
          SA6    A1          REWRITE VROT 
          IFNET  PCSX 
  
*         DECREMENT ACTIVE USER COUNT FOR MUX TERMINALS.
  
          SA1    VANL        DECREMENT ACTIVE USER COUNT
          ZR     X1,PCSX     IF NO ACTIVE USERS 
          SX6    B1+
          IX6    X1-X6
          SA6    A1 
          RJ     UCP         UPDATE CONVERTED POINTER 
          EQ     PCSX        EXIT 
 IAM      SPACE  4,10 
**        IAM - ISSUE TERMINAL ACCOUNTING MESSAGE.
* 
*         IAM FORMATS AND ISSUES ACCOUNTING MESSAGE REQUESTS
*         TO ITA. 
* 
*         ENTRY - (SEE SSP).
*                X7 = REQUEST CODE. 
*                     0 = OUTPUT ACCOUNTING.
*                     1 = INPUT ACCOUNTING. 
  
  
 IAM      SA1    A0+VDCT     CHECK TERMINAL STATUS
          SA2    A0+VSTT
          LX1    59-57       CHECK IF LOGGED IN 
          LX2    59-48       CHECK IF LOGGING OUT 
          SX0    X7+         SET ACCOUNTING MESSAGE INDEX 
          BX1    -X1+X2 
          AX7    1
          NG     X1,PCSX     IF LOGGING OUT OR NOT LOGGED IN
          NZ     X7,IAM5     IF INCORRECT REQUEST 
  
*         INCREMENT INPUT/OUTPUT OVERFLOW COUNTER.
  
          SA1    A0+VFST
          MX7    -12
          LX1    36 
          BX2    -X7*X1      EXTRACT OVERFLOW COUNTER 
          BX1    X7*X1
          SX2    X2+B1       INCREMENT OVERFLOW COUNT 
          BX6    -X7*X2 
          BX6    X1+X6       MERGE NEW COUNT
          LX6    24 
          SA6    A1          REWRITE VFST 
          BX2    X7*X2       SET FLAG IF COMBINED ACCUMULATOR OVERFLOW
          LX2    1-12 
          BX0    X0+X2
  
*         REQUEST POT IF NEEDED.
  
          SA1    IAMA        CHECK FOR STACKED ENTRY
          ZR     X1,IAM1     IF NO CURRENT ENTRY
          UX7,B7 X1          UNPACK STACK ENTRY 
          SB6    B7-VCPC
          NZ     B6,IAM2     IF NOT AT END OF CURRENT POT 
 IAM1     PX5    X1,B1       REQUEST POT
          RJ     RPT
          ZR     X7,PCSX     IF NO POT AVAILABLE, EXIT
          SA1    IAMA 
          SB7    B0          SET WORD COUNT TO FIRST WORD 
          ZR     X1,IAM2     IF FIRST POT 
          SB3    X7 
          RJ     GPL         GET POT LINK 
          SX7    B3+
  
*         ENTER REQUEST WORD IN POT.
  
 IAM2     BX4    X7          SAVE CURRENT POT 
          SX6    B2          SET TERMINAL NUMBER
          LX7    3           SET POT ADDRESS
          TB4    X7,VBMP
          LX6    12 
          IX6    X6+X0       ADD REQUEST CODE 
          SA6    B4+B7       STORE IN POT 
          SB7    B7+B1       INCREMENT WORD POINTER 
          PX7    X4,B7       RESET STACK POINTER WORD 
          SA7    A1 
          NZ     X1,PCSX     IF NOT FIRST ENTRY 
  
*         MAKE 1TA QUEUE ENTRY. 
  
          SB2    ACPT        SET ACCOUNTING PSEUDO TERMINAL 
          TTADD  B2,A0,X1,X2  SET TERMINAL TABLE ADDRESS
          SB3    0
          SX5    IAM3$       MAKE 1TA QUEUE ENTRY 
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         ENTRY FROM ITAQ PROCESSOR TO MAKE SORT BUFFER ENTRY.
* 
*         ENTRY  (X0) = SORT BUFFER POINTER.
*                (X7) = ACCOUNTING REQUEST POT POINTER. 
* 
*         EXIT   TO ITA8. 
*                (X6) = 1TA SORT BUFFER ENTRY.
*                (X7) = 1TA FUNCTION ARGUMENT *400*.
  
 IAM3     MX6    -12
          SA2    A0+VROT     SET POT POINTER
          LX6    12 
          BX6    X6*X2       CLEAR POT POINTER FIELD
          LX7    12 
          BX2    X6+X7
          SX6    B1 
          BX6    -X6*X2 
          SA6    A2          REWRITE VROT 
          SA1    IAMA        GET REQUEST POINTER
          BX6    X6-X6       CLEAR REQUEST POINTER
          SA6    A1 
          UX4,B7 X1 
          SX7    400         SET 1TA ARGUMENT 
          SB6    B7-VCPC     CHECK POT WORD COUNT 
          ZR     B6,IAM4     IF POT FILLED
          LX4    3           SET TERMINATOR IN POT
          TB4    X4,VBMP
          SA6    B4+B7
 IAM4     SX6    B2+         SET TERMINAL NUMBER
          LX6    12 
          BX6    X6+X7
          EQ     ITA         MAKE ITAQ ENTRY
  
*         ERROR EXIT. 
  
 IAM5     SX6    3RIAM
          RJ     ABT
          EQ     PCSX        EXIT 
  
  
*         IAM REQUEST POINTER WORD. 
* 
*T,       12/ 200N,36/ ,12/ PP
* 
*                N = NEXT AVAILABLE WORD IN POT.
*                PP = POT POINTER.
  
 IAMA     DATA   0
 ICH      SPACE  4
**        ICH - MAKES AN INPUT TO PRIMARY FILE *1TO* REQUEST. 
* 
*T        6/FT,6/RT,12/EJTO,3/WC,9/NP,12/PP,12/TN.
* 
*                FT = 0, PRIMARY FILE REQUEST.
*                RT = 0, INPUT DUMP REQUEST.
*                EJTO = EXECUTING JOB TABLE ORDINAL.
*                WC = LAST POT WORD COUNT IF FORCED DUMP. 
*                NP = NUMBER OF POTS TO DUMP. 
*                PP = FIRST POT OF INPUT TO PRIMARY FILE. 
*                TN = TERMINAL NUMBER.
* 
*         ENTRY  (X0) = *1TO* REQUEST QUEUE POINTER.
*                (SEE SSP). 
* 
*         EXIT   (X0) = REQUEST QUEUE POINTER UPDATED.
*                *1TO* REQUEST ADDED TO BUFFER. 
* 
*         USES   X - 0, 1, 2, 3, 6. 
*                A - 1, 6.
  
  
 ICH      BSS    0
          SA1    A0+VUIT     GET EJT ORDINAL
          MX2    -36
          BX6    -X2*X5 
          MX3    12 
          LX1    36 
          LX3    -12
          BX1    X3*X1
          BX6    X6+X1
          SA6    X0+         MAKE ENTRY 
          SX0    X0+B1       INCREMENT BUFFER POINTER 
          EQ     PCSX        EXIT 
 INP      SPACE  4
**        INP - PROCESS INPUT DATA FOR A RUNNING PROGRAM. 
* 
*         A *STOP* ENTERED BY A USER ON A MULTIPLEXOR TERMINAL IS 
*         TREATED LIKE A USER BREAK TWO.
* 
*         ENTRY-
*         SEE SSP 
  
  
 INP      BSS    0           ENTRY
  
*         CHECK FOR *STOP* FROM MULTIPLEXER TERMINAL. 
  
          IFNET  INP1        IF NETWORK TERMINAL
          SA1    B4+         READ FIRST WORD OF INPUT 
          SA2    =4LSTOP     CHECK UPPER CASE 
          SA3    =8L^S^T^O^P  CHECK LOWER CASE
          BX2    X1-X2
          BX3    X1-X3
          ZR     X2,STO      IF *STOP*
          ZR     X3,STO      IF *STOP*
  
*         ASSIGN INPUT POT TO MUX TERMINAL. 
  
          SB3    B0 
          RJ     INO
          RJ     SSP         RESTORE COMMAND LINE POT POINTER 
 INP1     SA1    INPA        COUNT INPUT RESPONSE 
          SX2    B1 
          IX6    X1+X2
          SA6    A1 
          SX6    B0          SET *PPI* NOT TO SORT THE FILE 
          SX7    B0          SET *EPN*
          EQ     BJB1        BEGIN JOB
  
 INPA     CON    0
ITA       SPACE  4
**        ITA - ENTER *1TA* REQUEST.
* 
*         FORMAT 1TA REQUEST AND INSERT IN REQUEST BUFFER.
* 
*         ENTRY - 
*         SEE SSP.
*         (X0) = REQUEST BUFFER POINTER.
*         (X6) = 36/0,12/TN,12/ARG
*         (*COMMND*) = *1TA* FUNCTION CODE, *FC*. 
* 
*         EXIT -
*         ((X0)) = 24/0,12/FC,12/TN,12/ARG
*         (X0) = INCREMENTED TO NEXT ENTRY ADDRESS. 
  
  
*         FC = 5, STATUS REQUEST. 
*         MAKE QUEUE ENTRY. 
  
  
 ITA1     SB7    B0          MAKE QUEUE ENTRY 
          RJ     MQE
*         EQ     ITA2        SET *1TA* CALL 
  
  
*         FC = 2, LOGIN.
*         FC = 4, UPDATE RESOURCE LIMIT.
*         SET (X6) = 36/0,12/TN/12/PP 
  
 ITA2     BSS    0
 ITA3     BSS    0
 ITA4     BSS    0
          SX7    B2          SET TERMINAL NUMBER
          SX6    B3          SET POT POINTER
          LX7    12 
          BX6    X6+X7
*         EQ     ITA
  
  
*         FORMAT 1TA REQUEST AND ENTER INTO BUFFER. 
  
  
 ITA      BX7    X5          READ TABLE ENTRY 
          AX7    48 
          SA1    TRRT+X7-2000B
          MX4    -6 
          SX2    X1-TSA 
          AX1    48 
          BX3    -X4*X1      MASK FUNCTION CODE 
          LX3    24 
          BX6    X6+X3       INSERT FUNCTION CODE 
          ZR     X2,ITA0     IF NO WAIT-COMPLETION QUEUE ENTRY
          SA6    ITAA        SAVE REQUEST 
          SB7    WCMQ        MAKE WAIT COMPLETION QUEUE ENTRY 
          RJ     MQE
          SA1    ITAA 
          BX6    X1 
 ITA0     SA6    X0          ENTER REQUEST IN BUFFER
          SX0    X0+B1       INCREMENT BUFFER POINTER 
          EQ     PCSX        EXIT 
  
 ITAA     CON    0           REQUEST
 ITO      SPACE  4
**        ITO - MAKES AN OUTPUT REQUEST *1TO* ENTRY.
* 
*T        4/ ,1/ PFIC,1/ FT,6/ RT,12/ EJTO,12/ ,12/ PP,12/ TN 
* 
*                PFIC = PRIMARY FILE INITIAL CALL FLAG. 
*                  1 = PRIMARY FILE INITIAL CALL. 
*                  0 = PRIMARY OR ROLLOUT FILE CONTINUATION CALL. 
*                FT = FILE TYPE.
*                  0 = PRIMARY FILE.
*                  1 = ROLLOUT FILE.
*                RT = REQUEST TYPE. 
*                  0 = DUMP INPUT TO PRIMARY FILE.
*                  1 = OUTPUT TO TERMINAL.
*                EJTO = EXECUTING JOB TABLE ORDINAL.
*                PP = FIRST POT TO USE FOR OUTPUT.
*                TN = TERMINAL NUMBER.
* 
*         ENTRY  (X0) = *1TO* REQUEST QUEUE POINTER.
*                (B3) = POT CHAIN IF ONE PROVIDED BY CALLER.
* 
*         EXIT   (X0) = *1TO* REQUEST QUEUE POINTER UPDATED.
*                *1TO* REQUEST ADDED TO BUFFER. 
* 
*         USES   X - 0, 1, 2, 4, 5, 6, 7. 
*                A - 1, 6.
*                B - 3, 5.
* 
*         CALLS  RPT. 
  
  
 ITO      BSS    0
          SA2    A0+VROT
          SX3    B1 
          LX3    17-0 
          BX6    -X3*X2      INDICATE PRIMARY FILE LIST 
          SA6    A2 
          SX6    B1+
          LX6    55-0 
          SA6    ITOA        INITIAL CALL TO LIST PRIMARY FILE
  
 ITO1     BSS    0
          SX4    VOPL 
          IFMUX  ITO2        IF MULTIPLEXER TERMINAL
          TA1    B2,VMST     SET NUMBER OF POTS 
          ZR     X1,ITO2     IF TERMINAL IS DISCONNECTED
          MX4    -5 
          AX1    18 
          BX4    -X4*X1 
 ITO2     LX4    3           CONVERT TO CM WORDS
          SB6    X4+2        ALLOW FOR LINKAGE WORDS
          RJ     GPC         GET POT CHAIN
          ZR     X6,ITO3     IF NO POTS AVAILABLE 
          SA1    ITOA 
          NZ     X1,ITO3     IF PRIMARY FILE LIST INITIAL CALL
          SX6    B0          CLEAR FIRST WORD OF POT
          SA6    B4 
 ITO3     SA1    A0+VUIT     GET EJT ORDINAL
          MX6    12 
          LX1    36 
          LX6    -12
          BX6    X1*X6       SEPARATE EJT ORDINAL FROM REST OF WORD 
          SX7    B3          MERGE POT POINTER
          SX5    B2          MERGE TERMINAL NUMBER
          LX7    12 
          BX6    X6+X5
          SX2    B1          SET OUTPUT FLAG
          BX6    X6+X7
          LX2    48-0 
          BX6    X6+X2
          SA1    A0+VROT     SPECIFY PRIMARY OR ROLLOUT FILE
          MX2    1
          LX1    54-17
          LX2    54-59
          BX2    X1*X2
          BX6    X2+X6
          SA1    ITOA 
          SX7    B0 
          ZR     X1,ITO4     IF NOT INITIAL CALL TO LIST PRIMARY FILE 
          BX6    X1+X6
          SA7    A1 
 ITO4     SA6    X0 
          SX0    X0+B1
          EQ     PCSX        EXIT 
  
 ITOA     CON    0           PRIMARY FILE INITIAL CALL FLAG 
 LIN      SPACE  4
**        LIN - PROCESS LOG IN. 
* 
*         ENTRY  (PBUF) = ANSWERBACK. 
*                SEE SSP. 
  
  
 LIN      BSS    0           ENTRY
          RJ     RDC         WAIT *VDCT* CLEAR
          MX7    0           CLEAR RETRY COUNTER AND FAMILY NAME
          SA7    B4+VTRY
          SA7    B4+VFNA
          SA1    VANL        INCREMENT ACTIVE USER COUNT
          SX6    X1+B1
          SA6    A1 
          SA2    LINB        CHECK MAXIMUM USER COUNT 
          IX2    X2-X6
          PL     X2,LIN0     IF NOT NEW MAXIMUM 
          SA6    A2 
 LIN0     RJ     UCP         UPDATE CONVERTED POINTER 
  
*         ISSUE LOGIN HEADER MESSAGE. 
  
 LIN1     SX5    LIN1$       SET REENTRY
          RJ     CFL         CHECK POT SUPPLY 
          NG     X2,PCS1     IF IN SHORT SUPPLY 
          SX0    B3          SAVE LOGIN POT POINTER 
          SB3    B0 
          SX6    LINCP       ISSUE COPYRIGHT NOTICE 
          SB4    LINCPL 
          RJ     MVA
          SX6    HEDR        ISSUE HEADER MESSAGE 
          SB4    HEDRL
          RJ     MVA
 LIN2     SB3    X0          RESTORE LOGIN POT POINTER
          RJ     RDC         WAIT VDCT CLEAR
          SB5    B3          SET LOGIN POT POINTER
          SB3    B0          CLEAR MESSAGE POT POINTER
          SB4    B0          SET DEFAULT MESSAGE LENGTH 
  
*         REQUEST FAMILY NAME.
  
          SX6    LIMFN       SET MESSAGE ADDRESS
          RJ     RQI         REQUEST INPUT
          SA1    PBUF        READ FAMILY NAME 
          SA5    CCMA        GET PARAMETER COUNT
          SA2    A1+2        READ USER NAME 
          SX7    X1+
          NZ     X7,LIN14.1  IF TOO MANY CHARACTERS ENTERED 
          SB4    B0 
          BX7    X1          SET FAMILY NAME IN LOGIN POT 
          SA7    B6+VFNA
          ZR     X5,LIN3     IF NULL FAMILY ENTERED 
          SX5    X5-1        DECREMENT PARAMETER COUNT
          NZ     X5,LIN4     IF USER NAME ENTERED 
  
*         REQUEST USER NAME.
  
 LIN3     SX6    LIMUN       SET MESSAGE ADDRESS
          RJ     RQI         REQUEST INPUT
          SA2    PBUF        READ USER NAME 
          SA5    CCMA        GET PARAMETER COUNT
 LIN4     SA3    A2+2        READ PASSWORD
          SX7    X2+
          NZ     X7,LIN14.1  IF TOO MANY CHARACTERS ENTERED 
          SB4    B0 
          BX7    X2          SET USER NAME IN LOGIN POT 
          SA7    B6+VUNA
          SA7    A0+VUIT     SET USERNAME IN TERMINAL TABLE 
          SX5    X5-1        DECREMENT PARAMETER COUNT
          NZ     X5,LIN5     IF PASSWORD ENTERED
  
*         REQUEST PASSWORD. 
  
          SX6    LIMPW       SET MESSAGE ADDRESS
          SB4    LIMTT-LIMPW
          RJ     RQI         REQUEST INPUT
          SA3    PBUF        READ PASSWORD
          SB4    B0+
 LIN5     SX7    X3 
          NZ     X7,LIN14.1  IF TOO MANY CHARACTERS ENTERED 
          BX7    X3          SET PASSWORD IN LOGIN POT
          SA7    B6+VPWA
  
*         GET UPPER ACCESS LEVEL LIMIT OF TERMINAL FROM MUX TABLE.
  
          SX7    0+1S3       SET DEFAULT = 0, SET *AL SPECIFIED* FLAG 
          SB4    MXMX 
          MX3    -12
          SX5    B2          CURRENT TERMINAL 
 LIN5.1   SB4    B4-B1       CHECK NEXT MUX TABLE ENTRY 
          NG     B4,LIN5.2   IF NO MORE MUXES TO CHECK
          SA1    MUXP+B4
          ZR     X1,LIN5.1   IF ZERO ENTRY
          BX4    -X3*X1      FIRST TERMINAL FOR THIS MUX
          IX6    X5-X4
          NG     X6,LIN5.1   IF FIRST TERMINAL .GT. CURRENT TERMINAL
          LX1    -24         GET UPPER ACCESS LEVEL LIMIT FROM ENTRY
          BX1    -X3*X1 
          BX7    X7+X1
 LIN5.2   SA7    B6+VLAL     SET UPPER ACCESS LEVEL LIMIT IN LOGIN POT
          SB4    B0 
          SX0    B5          SAVE LOGIN POT POINTER 
  
*         CALL *1TA* TO PROCESS LOGIN PARAMETERS. 
  
          RJ     DPT         DROP INPUT POT 
          SX5    ITA2$       ENTER 1TA REQUEST
          SB3    X0          RESTORE LOGIN POT POINTER
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         NORMAL *1TA* RETURN.
* 
*         ENTRY  (B3) = LOGIN POT POINTER.
*                (B4) = LOGIN POT ADDRESS.
*                (POT+VUTA) = VALIDATION ACCESS CONTROL WORD. 
*                (POT+VUTD) = VALIDATION TERMINAL CONTROL WORD. 
  
 LIN6     RJ     CDP         CLEAR DETACH IN PROGRESS 
          IFNET  LIN12
  
*         SET PARITY. 
  
          SA3    B4+VUTD     LOAD TERMINAL CONTROL WORD 
          PL     X3,LIN8     IF EVEN PARITY VALIDATION
          SX7    LIN8        SET RETURN ADDRESS 
          SX2    /1TD/SOP    REQUEST ODD PARITY 
          JP     DCR
  
*         SET DUPLEX MODE.
  
 LIN8     SA3    B4+VUTD     RELOAD TERMINAL CONTROL WORD 
          LX3    59-53       CHECK DUPLEX MODE
          PL     X3,LIN9     IF HALF DUPLEX 
          SX7    LIN9        SET RETURN ADDRESS 
          SX2    /1TD/SFD    REQUEST FULL DUPLEX
          JP     DCR
  
*         SET TRANSLATION TABLE.
  
 LIN9     SA3    B4+VUTD     RELOAD TERMINAL CONTROL WORD 
          MX6    -5 
          AX3    48          MASK VALIDATED TERMINAL TYPE CODE
          BX6    -X6*X3 
          ZR     X6,LIN11    IF NONE SPECIFIED
          SA5    X6+TTTT+1   READ IAFEX EQUIVALENT NAME 
          RJ     LTT         GET CURRENT TYPE 
          SX6    X1          SET CURRENT LINE CODE
          BX5    X5+X6       MERGE EQUIVALENT NAME AND LINE CODE
          SB7    X2+         SET FWA OF TRANSLATION TABLES
 LIN10    SA1    X2+         READ TRANSLATION TABLE NAME
          ZR     X1,LIN11    IF END OF NAMES
          SX2    X2+B1
          IX6    X1-X5       COMPARE
          NZ     X6,LIN10    IF NO MATCH
          SX1    A1-B7       SET TRANSLATION INDEX
          LX1    6
          SX7    LIN11       SET RETURN ADDRESS 
          SX2    X1+/1TD/STT REQUEST TRANSLATION INDEX
          JP     DCR
  
*         SET RUBOUT COUNT. 
  
 LIN11    SA3    B4+VUTD     RELOAD TERMINAL CONTROL WORD 
          MX6    -5 
          LX3    -54         SHIFT RUBOUT COUNT 
          SX2    X3+B1       ADD DRIVER BIAS
          BX7    -X6*X2      MASK BIASED COUNT
          ZR     X7,LIN12    IF SYSTEM DEFAULT COUNT
          SA1    A0+VDCT
          LX6    39-0 
          LX7    39-0 
          BX1    X6*X1       CLEAR VDCT RUBOUNT COUNT 
          IX7    X7+X1       INSERT BIASED COUNT
          SA7    A1+         REWRITE VDCT 
  
*         SET SUBSYSTEM.
  
 LIN12    SA3    B4+VUTD     RELOAD TERMINAL CONTROL WORD 
          MX7    -5 
          SA2    A0+VSTT
          LX3    -42
          BX6    -X7*X3      MASK VALIDATION SUBSYSTEM
          SA3    X6+TTIS     GET IAFEX EQUIVALENT SUBSYSTEM 
          BX3    -X7*X3 
          SX6    LIMUV
          SX7    X3-MSYS
          PL     X7,LIN16    IF INCORRECT SUBSYSTEM 
          LX3    12          INSERT SUBSYSTEM IN VSTT 
          BX2    X3+X2
          MX7    1
          LX7    54-59       SET JOB COMPLETE 
          BX6    X2+X7
          SA6    A2          REWRITE VSTT 
  
*         SET ACCESS BITS AND LOGGED-IN STATUS. 
*         SET READ DATA BIT IF *CHARGE* OR *RECOVER* HAVE 
*         ROLLED OUT AWAITING INPUT.
  
          MX5    -12
          SA1    B4+VUTA     LOAD ACCESS WORD 
          SA3    A0+VDCT     READ VDCT
          TA2    B2,VRAP     CHECK FOR A QUEUE ENTRY
          ZR     X2,LIN13    IF READ DATA NEED NOT BE SET 
          BX3    X3+X7       SET READ DATA
 LIN13    BX1    -X5*X1      MASK ACCESS WORD ACCESS BITS 
          LX5    12 
          BX3    X5*X3       CLEAR VDCT ACCESS BITS 
          LX1    12 
          BX3    X1+X3       INSERT VALIDATION ACCESS BITS
          LX7    57-54       SET LOGGED IN BIT
          BX7    X7+X3
          SA7    A3          REWRITE VDCT 
          SA1    VTNL        INCREMENT TERMINALS ON LINE
          SX6    X1+B1
          SA6    A1 
          RJ     UCP         UPDATE CONVERTED POINTER 
  
*         ISSUE LOGIN COMPLETION MESSAGE. 
  
          SA3    LIMTT+1
          SA1    A0+VFST
          MX7    24 
          LX7    30 
          LX1    30 
          BX3    -X7*X3      CLEAR PREVIOUS *JSN* 
          BX1    X1*X7
          BX6    X1+X3       INSERT CURRENT *JSN* 
          SA6    A3 
          MX4    42 
          SX5    1R 
          RJ     LTT         GET TERMINAL TYPE NAME 
          BX1    X4*X1       CLEAR LOWER 18 BITS
          BX7    X1+X5       ADD BLANK
          LX7    -6          SHIFT BLANK AHEAD OF TERMINAL TYPE 
          SA7    A6+B1
          SX6    LIMTT       ISSUE LOGGED-IN MESSAGE
          SB4    B0 
          RJ     MVA
          EQ     PCSX        EXIT 
  
*         1TA ERROR RETURN. 
  
 LIN14    SA1    A0+VROT     CHECK ERROR STATUS 
          SX6    LIMJT
          LX1    59-10
          NG     X1,LIN16    IF INPUT FILE ABORTED
          SA1    B4+VUTA
          SX6    LIMUC
          LX1    59-1 
          LX7    X1,B1
          NG     X7,LIN16    IF USER SECURITY COUNT EXHAUSTED 
          SX6    LIMSC
          NG     X1,LIN16    IF USER NOT VALIDATED FOR SERVICE CLASS
          LX1    59-3-59+1
          LX7    X1,B1
          SX6    LIMSF
          NG     X7,LIN16    IF SERVICE CLASS FULL
          SX6    LIMAD
          NG     X1,LIN16    IF ACCESS DENIED (SECURITY CONFLICT) 
          SX6    LIMDI
          LX1    59-5-59+3
          LX7    X1,B1
          NG     X7,LIN16    IF DEVICE INACCESSIBLE OR I/O ERROR
          SX6    LIMYF
          NG     X1,LIN16    IF QFT FULL
          EQ     LIN14.2     RETRY LOGIN
  
*         RETRY LOGIN (ERROR DETECTED BEFORE CALLING *1TA*).
  
 LIN14.1  SX0    B5          SAVE LOGIN POT POINTER 
          SB4    B0 
          RJ     DPT         DROP INPUT POT 
          SB3    X0          RESTORE LOGIN POT POINTER
          LX0    3
          TB4    X0,VBMP     SET LOGIN POT ADDRESS
  
*         RETRY LOGIN.
  
 LIN14.2  SA1    B4+VTRY     INCREMENT RETRY COUNT
          SX7    X1+1 
          SX1    X7-LIAA
          PL     X1,LIN15    IF RETRY COUNT EXCEEDED
          IFNET  LIN15
  
*         REATTEMPT LOGIN FOR MUX TERMINAL. 
  
          SA7    A1          REWRITE RETRY COUNT
          SB4    B0          SET DEFAULT MESSAGE LENGTH 
          RJ     CDP         CLEAR DETACH IN PROGRESS 
          SX0    B3          SAVE POT POINTER 
          SB3    B0          SET NO POT FOR MESSAGE 
          SX6    LIMIL       SET MESSAGE ADDRESS
          RJ     MVA         ISSUE MESSAGE
          EQ     LIN2        RETRY LOGIN
  
*         DISCONNECT USER WHEN LOGIN NOT POSSIBLE.
  
 LIN15    SA1    LINA        INCREMENT INCORRECT LOGIN COUNT
          SX6    LIMIT       SET MESSAGE ADDRESS
          SX7    X1+B1
          SA7    A1          REWRITE INCORRECT LOGIN COUNT
  
*         ENTRY  (X6) = MESSAGE ADDRESS.
  
 LIN16    SB4    B0 
          RJ     MVA         ISSUE LOG OFF MESSAGE
          EQ     HNG         LOG OFF USER 
          SPACE  4,10 
**        LOGIN MESSAGES. 
  
  
 LIMFN    DATA   C*"EM"FAMILY:    '"CB"*
  
 LIMUN    DATA   C*"EM"USER NAME: '"CB"*
  
 LIMPW    DATA   10H"EM"PASSWORD
          DATA   10H"NL"((((((((
          DATA   10H"CR"))))))))
          DATA   10H"CR"MMMMMMMM
          DATA   10H"CR"QQQQQQQQ
          DATA   10H"CR"XXXXXXXX
          DATA   C*"CR""CB"*
  
 LINCP    DATA   C*WELCOME TO THE NOS SOFTWARE SYSTEM.* 
*CALL     COPYRT
 CPRT     HERE
          CON    0
 LINCPL   EQU    *-LINCP     LENGTH OF COPYRIGHT NOTICE 
  
 LIMTT    DATA   10H"EM"      "NL"
          DATA   10HJSN:     ,
          DATA   0
  
 LIMAD    DATA   C*"EM"ACCESS DENIED - SECURITY CONFLICT."NL""LF""CB"*
  
 LIMDI    DATA   C*"EM"DEVICE INACCESSIBLE - LOGIN FAILED. "NL""LF""CB"*
  
 LIMIL    DATA   C*"EM"IMPROPER LOG IN, TRY AGAIN. "NL""LF""CB"*
  
 LIMIT    DATA   C*"EM"INCORRECT TERMINAL. "NL""LF""CB"*
  
 LIMJT    DATA   C*"EM"JOB TERMINATED. "NL""LF""CB"*
  
 LIMSC    DATA   C*"EM"USER NOT VALIDATED FOR INTERACTIVE SERVICE CLASS.
, "NL""LF""CB"* 
  
 LIMSF    DATA   C*"EM"SERVICE CLASS FULL. "NL""LF""CB"*
  
 LIMUC    DATA   C*"EM"USER SECURITY COUNT EXHAUSTED."NL""LF""CB"*
  
 LIMUV    DATA   C*"EM"USER VALIDATION ERROR."NL""LF""CB"*
  
 LIMYF    DATA   C*"EM"SYSTEM FULL."NL""LF""CB"*
  
 LINA     CON    0           NUMBER OF INCORRECT LOGINS 
 LINB     CON    0           MAXIMUM NUMBER OF USERS ON SYSTEM
 RDC      SPACE  4,10 
**        RDC - READ TERMINAL TABLE WORD *VDCT*.
* 
*         RETURN TERMINAL TABLE WORD *VDCT* WHEN INTERLOCK IS 
*         CLEAR.  *RDC* WILL EXIT BY MEANS OF REENTRY THROUGH 
*         *DCR1* IF INTERLOCK IS NOT CLEAR ON ENTRY.
* 
*         ENTRY - 
*         (B3) = ANY INFORMATION TO BE RETAINED.
* 
*         EXIT -
*         (A1) = ADDRESS OF *VDCT*. 
*         (X1) = *VDCT*.
*         *VDCT* - INTERLOCK CLEAR. 
*         (B3) = ENTRY CONTENTS PRESERVED.
  
  
 RDC      SUBR               ENTRY/EXIT 
          SA1    A0+VDCT     CHECK INTERLOCK
          MX2    14 
          LX2    12 
          BX7    X2*X1
          ZR     X7,RDCX     IF INTERLOCK CLEAR 
          SA1    RDC         SET RETURN ADDRESS 
          SX5    DCR3$
          AX1    30 
          SX7    X1 
          EQ     PCS1        MAKE QUEUE ENTRY 
 URL      SPACE  4,15 
**        URL - PROCESS USER RESOURCE LIMITS EXCEEDED.
* 
*         ENTERED WHEN A JOB HAS EXCEEDED ITS TIME OR SRU 
*         LIMIT.  THE TERMINAL WILL BE PROMPTED UNTIL A VALID 
*         INCREMENT IS ENTERED OR A JOB ABORT IS REQUESTED. 
* 
*         ENTRY  SEE SSP. 
*                (X4) = RESOURCE LIMIT CODE.
* 
*         EXIT   RESOURCE LIMIT INCREMENTED UNLESS JOB ABORT
*                REQUESTED.  CHARGE REQUIRED SET IF AT SRU
*                VALIDATION LIMIT.
* 
*         CALLS  CNT, DXB, INO, MVA, SRR, SSP.
  
  
 URL      BSS    0           ENTRY
          AX4    1
          MX0    54          SET UP MESSAGE 
          SA5    URLA+X4
 URL1     SA1    X5 
          SA2    X5+B1
          BX6    X1 
          BX7    X2 
          SA6    URLB 
          SA7    A6+B1
          LX0    12 
          SA3    URLC 
          AX5    42 
          BX6    X0*X3
          BX6    X5+X6
          SA6    A3 
          IFMUX  URL3 
          RJ     CNT         CANCEL TYPEAHEAD 
          ZR     X1,URL3     IF NO REENTRY MADE 
          SA5    URLA+X6
          MX0    54 
          EQ     URL1        CONTINUE LIMIT PROCESSING
  
 URL3     SB5    B0+         CLEAR POT POINTER
          SX7    URL4        SET COMMAND REENTRY
          RJ     SRR
          SX6    URLB        SET MESSAGE ADDRESS
          SB4    URLBL       SET MESSAGE LENGTH 
          EQ     PCS6        ISSUE MESSAGE
  
*         REENTRY TO PROCESS LIMIT INCREMENT. 
  
 URL4     SA1    PBUF        CHECK ENTRY
          SA2    =8L^S^T^O^P
          SA3    =4LSTOP
          BX3    X1-X3
          SX6    URLF        CONTROL BYTE TO END TRANSPARENT MODE 
          ZR     X3,URL10    IF STOP HAS BEEN ENTERED 
          BX2    X1-X2
          ZR     X2,URL10    IF STOP HAS BEEN ENTERED 
 URL5     SA2    A0+VROT
          MX4    -1 
          AX2    19 
          BX2    -X4*X2 
          SA2    URLA+X2
          MX4    6           SET COMMAND TO CHECK 
          BX4    X4*X2
          BX4    X1-X4
          AX2    18 
          NZ     X4,URL13    IF INCORRECT ENTRY 
          SX6    X2          SET DEFAULT INCREMENT
          AX2    18 
          SA5    PBUF+2 
          SB6    X2          SAVE FUNCTION CODE 
          SB7    B1          SET DECIMAL CONVERSION 
          ZR     X5,URL7     IF NO INCREMENT ENTERED
          LX5    6
          SX4    X5-1R*      CHECK FOR (*)
          ZR     X4,URL6     IF (*) 
          LX5    54 
          RJ     DXB         CONVERT INCREMENT TO BINARY
          MX3    45 
          BX3    X3*X6
          RJ     SSP
          NZ     X4,URL13    IF INCORRECT INCREMENT 
          ZR     X3,URL7     IF INCREMENT .LT. 77777B 
 URL6     SX6    77777B      SET INCREMENT TO MAXIMUM 
 URL7     SX3    B6          SET FUNCTION CODE
          LX3    18 
          BX6    X3+X6       MERGE FUNCTION CODE AND INCREMENT
          SA6    B4 
          SX5    ITA3$
          SX7    B0+
          EQ     PCS1        MAKE QUEUE ENTRY 
  
*         NORMAL EXIT.
  
 URL8     SA1    A0+VDPT
          LX1    59-15
          PL     X1,URL9     IF BINARY BIT NOT SET
          SX6    URLG        CONTROL BYTE TO RESUME TRANSPARENT MODE
          EQ     URL10       CONTINUE TO NEXT JOB STEP
  
 URL9     IFMUX  URL11
          TA1    B2,VMST
          LX1    59-25
          PL     X1,URL11    IF NOT NAM TRANSPARENT CONTINUATION
          SX6    URLH        CONTROL BYTE TO RESET NAM XPT CONTINUATION 
 URL10    SB4    B0+
          RJ     MVA
 URL11    SA1    A0+VROT     CLEAR LIMITS/INPUT SATISFIED/JOB WAITING 
          SA3    =00000000000003000050B 
          BX7    -X3*X1 
          SA7    A1 
          RJ     INO         ISSUE NULL OUTPUT
          SA1    A0+VFST     CHECK *SMF* CONNECTION 
          MX2    6
          LX1    59-23
          BX1    X2*X1
          ZR     X1,RES      IF NO SMF CONNECTION 
          SX6    6           RESET VROT 
          SA6    A0+VROT
  
*         RESCHEDULE *FSE* TO REINVOKE *WK* ROLLOUT STATUS. 
  
          RJ     GOP         GET PARAMETER BLOCK POT
          PARAM  ENEJ 
          RJ     PMR
          SB4    B0+         RETURN PARAMETER BLOCK POT 
          RJ     DPT
          EQ     PCSX        RETURN 
  
*         PROCESS VALIDATION LIMIT. 
  
 URL12    SMA    X6,(USER VALIDATION LIMIT EXCEEDED,"NL") 
          EQ     URL10       SEND MESSAGE AND RESTART JOB 
  
*         PROCESS INCORRECT INCREMENT.
  
 URL13    SB5    B0+         CLEAR POT POINTER
          SX7    URL4        SET COMMAND REENTRY
          RJ     SRR
          SA1    A0+VROT     CLEAR INPUT SATISFIED
          SX6    1S5
          BX6    -X6*X1 
          SA6    A1          REWRITE VROT 
          SMA    X6,( *INCORRECT ENTRY, TRY AGAIN*"NL") 
          EQ     PCS5        ISSUE ERROR MESSAGE
  
 URLA     VFD    6/1LT,12/0,6//CPS/RLIT,18/VDTI,18/URLD 
          VFD    6/1LS,12/0,6//CPS/RLIS,18/VDSI,18/URLE 
  
 URLB     DATA   0
          DATA   0
 URLC     DATA   10L ENTER X T
          DATA   10LO CONTINUE
          DATA   10L OR STOP T
          DATA   10LO END JOB 
          DATA   5LSTEP.
          DATA   10L TYPED AHE
          DATA   10LAD INPUT M
          DATA   10LUST BE REE
          DATA   7LNTERED.
          DATA   0
 URLBL    EQU    *-URLB 
  
 URLD     DATA   10L *TIME LIM
          DATA   3LIT*
  
 URLE     DATA   10L *SRU LIMI
          DATA   2LT* 
 URLF     DATA   B00164064400000000000     END TRANSPARENT MODE 
 URLG     DATA   B00062043001500000000     RESET TRANSPARENT MODE 
 URLH     DATA   B00164064400100000000     RESET NAM XPT CONTINUATION 
          TITLE  GENERAL SUBROUTINES. 
**        GENERAL SUBROUTINES.
* 
*         IF THE REGISTER USAGE IS NOT SPECIFIED IN THE HEADER
*         INFORMATION, THEN IT SHOULD BE ASSUMED THAT THE SUBROUTINE
*         USES ALL REGISTERS EXCEPT THOSE SPECIFIED BELOW.
* 
*         A - 0.
*         B - 1, 2. 
*         X - 0.
 ABT      SPACE  4
**        ABT - THIS ROUTINE IS ENTERED WHEN IAFEX DETECTS
*         INTERNALLY AN ABNORMAL CONDITION.  A MESSAGE IS ISSUED
*         TO THE DAYFILE AND AN ABORT TAKES PLACE.
* 
*         ENTRY-
*         (X6) = NAME OF CALLING ROUTINE RIGHT JUSTIFIED
* 
*         CALLS  IDM, MSG=, O6S, SYS=.
  
  
 ABT      SUBR               ENTRY/EXIT 
  
*         SAVE EXCHANGE PACKAGE BEFORE PROCESSING ABORT.
  
          SB1    A6          SAVE REGISTERS USED BY *SYS* MACRO 
          SA6    ABTB 
          SX6    B1 
          SB1    1
          SA6    A6+B1
          BX6    X1 
          SA6    A6+B1
          BX6    X2 
          SA6    A6+B1
          SX6    A1 
          SA6    A6+B1
          SYSTEM XJR,R,ABTC,100B  SAVE REMAINDER OF EXCHANGE PACKAGE
          SA2    ABTB        RESTORE ORIGINAL VALUE OF X6 
          SA1    VABL        COUNT ABNORMAL OCCURRENCE
          SX7    X1+B1
          SA7    A1 
          SA1    ABTA+1 
          MX7    42 
          BX1    X7*X1
          BX6    X1+X2
          SA6    A1 
          SX1    B2 
          RJ     O6S
          SA6    ABTA+2 
          SA1    B0          CHECK ABORT SENSE SWITCH 
          LX1    59-8 
          NG     X1,ABT1     IF SET TO ABORT
          SA1    ABT         CHECK FOR RETURN ADDRESS 
          AX1    30 
          ZR     X1,ABT1     IF NO RETURN ADDRESS 
          SB7    X1 
          BX6    X6-X6       CLEAR ADDRESS
          SA6    A1 
          SX6    ABTA        ISSUE DAYFILE MESSAGE
          RJ     IDM
          JP     B7          RETURN 
  
 ABT1     MESSAGE ABTA,,R 
          ABORT 
  
 ABTA     DATA   C*IAFEX ABNORMAL - * 
          DATA   0
 ABTB     BSSZ   5           AREA TO HOLD REGISTERS USED BY *SYS* MACRO 
 ABTC     BSSZ   20B         AREA TO HOLD EXCHANGE PACKAGE
 ASM      SPACE  4
**        ASM - ASSIGN MESSAGE TO TERMINAL. 
* 
*         ASSIGNS AN OUTPUT MESSAGE TO THE TERMINAL.  FOR MUX 
*         TERMINALS, THE FIRST TWO WORDS IN THE POT ARE NOT USED. 
*         FOR NETWORK TERMINALS, THE CURRENT CHARACTER SET IS 
*         STORED IN THE SECOND WORD OF THE FIRST POT. 
*         THE FIRST WORD IN THE FIRST POT IS USED FOR LINKING 
*         OUTPUT INTO THE OUTPUT QUEUE IN VSTT. 
* 
*         ENTRY  (X7) = FIRST POT OF MESSAGE TO BE ASSIGNED.
* 
*         EXIT   (B3) = 0.
*                (B4) = 0.
* 
*         CALLS  ABT, ANM, DPT. 
  
  
 ASM5     ZR     X7,ASM6     IF NULL ASSIGNMENT 
          SB3    X7          DROP POT(S)
          SB4    B0 
          RJ     DPT
 ASM6     SB3    B0+
          SB4    B0+
  
 ASM      SUBR               ENTRY/EXIT 
          IFNET  ASM4        IF NAM TERMINAL
          SA1    A0+VSTT
          SA2    A0+VDCT
          BX6    X1 
          LX6    59-58       CHECK USER BREAK IN PROGRESS 
          MX5    -12
          BX3    -X5*X1 
          BX4    -X5*X2 
          NG     X6,ASM5     IF USER BREAK IN PROGRESS
          SX6    B1+B1       TELL DRIVER TO START AT WORD TWO 
          LX6    36-0 
          NZ     X3,ASM1     IF STACKED MESSAGE 
          NZ     X4,ASM2     IF CURRENT MESSAGE OR DRIVER REQUEST 
          BX6    X2+X6
          BX6    X6+X7       ASSIGN MESSAGE 
          SA6    A2          REWRITE VDCT 
          EQ     ASM6        RETURN 
  
 ASM1     NZ     X4,ASM3     IF TWO MESSAGES ASSIGNED 
          BX6    X2+X6
          BX6    X3+X6       ASSIGN STACKED MESSAGE AS CURRENT MESSAGE
          SA6    A2+
          BX1    X5*X1       CLEAR STACKED MESSAGE
 ASM2     BX6    X1+X7       ASSIGN STACKED MESSAGE 
          SA6    A1 
          EQ     ASM6        RETURN 
  
 ASM3     SA7    ASMA        SAVE POT POINTER 
          SX6    3RASM
          RJ     ABT
          SA1    ASMA 
          BX7    X1 
          EQ     ASM5        DROP POTS
  
*         PROCESS NETWORK TERMINAL MESSAGE; SET 6/12 ASCII FLAG,
*         PRESERVE CONCATENATION BIT AND SET USER FORMAT EFFECTOR 
*         FLAG IN POT CHAIN HEADER (SEE *ANM*). 
  
 ASM4     LX7    3
          SA3    A0+VDCT
          SX5    B1 
          TA1    X7+1,VBMP
          LX3    0-51 
          BX4    X3*X5
          PL     X6,ASM4.1   IF NOT CHECKING FOR USER FORMAT EFFECTORS
          SA3    A0+VSTT
          LX5    55-0 
          BX5    X5*X3
          LX5    2-55 
          BX4    X4+X5
 ASM4.1   BX6    X1+X4
          SA6    A1+
          AX7    3
          RJ     /IAFEX4/ANM QUEUE OUTPUT FOR TERMINAL
          EQ     ASM6        RETURN 
  
 ASMA     CON    0           POT POINTER
 AUU      SPACE  4,10 
**        AUU - ABORT UNIDENTIFIED OR RECONNECTING UCP. 
* 
*         ENTRY  (X7) = UCP IDENTIFICATION (JSN AND EJTO).
*                (X6) = 0, IF SMF AND ALREADY CONNECTED TO IAF
* 
*         USES   X - 1, 6.
*                A - 1. 
* 
*         CALLS  EUC, SFC.
  
  
 AUU      SUBR               ENTRY/EXIT 
          SA1    AUUA        SET FORMATTED *REGR* ABORT CALL
          NZ     X6,AUU1     IF NOT SMF 
          SA1    AUUC        SET FORMATTED *REGR* MESSAGE CALL
 AUU1     BX6    X1 
          RJ     SFC         SEND SFCALL
          RJ     EUC         END UCP CONNECTION 
          EQ     AUUX        EXIT 
  
  
 AUUA     VFD    6/0,12/0,18/2,18/AUUB,6/REGR 
 AUUB     DATA   C+** UNRECOGNIZED UCP ABORTED BY IAF **+ 
 AUUC     VFD    6/0,12/0,18/1,18/AUUD,6/REGR 
 AUUD     DATA   C+** SMF IS ALREADY CONNECTED TO IAF **+ 
 BRQ      SPACE  4
**        BRQ - BUILD REQUEST QUEUE.
* 
*         ENTRY  (X0) = ADDRESS OF QUEUE POINTER FOR BUILD. 
* 
*         EXIT   PPU FUNCTION REQUESTS BUILT IN POT CHAIN.
*                (X6) = FIRST POT POINTER OF REQUEST CHAIN. 
*                     = ZERO IF NO REQUESTS ENTERED IN CHAIN. 
* 
*         CALLS  CFL, ENP, PCS, SSP, UQS. 
  
  
 BRQ      SUBR               ENTRY/EXIT 
          SA1    X0 
          BX6    X6-X6
          UX2,B2 X1 
          ZR     B2,BRQX     IF NO ENTRIES TO PROCESS 
          RJ     CFL
          BX6    X6-X6
          SX1    B2+7        CALCULATE NUMBER OF POTS NEEDED
          AX1    3
          NG     X2,BRQX     IF POTS IN SHORT SUPPLY
          SX6    X0-ITOQ
          NZ     X6,BRQ1     IF NOT *ITOQ*
          SX2    B2+6-VRQB*VCPC  CHECK QUEUE LENGTH 
          SB7    VRQB        SET MAXIMUM QUEUE LENGTH 
          EQ     BRQ2        SET QUEUE LENGTH 
  
 BRQ1     SX2    B2+6-VRQA*VCPC  CHECK QUEUE LENGTH 
          SB7    VRQA        SET MAXIMUM QUEUE LENGTH 
 BRQ2     PL     X2,BRQ3     IF REQUEST .GT. MAXIMUM QUEUE LENGTH 
          SB7    X1+         SET REQUEST QUEUE LENGTH 
 BRQ3     BX7    X7-X7
          RJ     GZP         REQUEST ZEROED POTS
          BX6    X7 
          ZR     X7,BRQX     IF NO POTS AVAILABLE 
          LX7    3           SET UP ENTRY POINTER 
          TX5    X7,VBMP
          LX7    15 
          BX6    X6+X7
          LX5    36 
          BX6    X6+X5
          SA6    BRQA 
          BX7    X0          SAVE ENTRY POINTER 
          SA7    A6+B1
          SX5    X0-ITOQ
          SX0    SBUF        SET SORT BUFFER POINTER
          SX6    SBUF+VRQA*VCPC 
          SA6    A7+B1       STORE BUFFER CONSTANT
          MX1    1
          NZ     X5,BRQ4     IF NOT *ITOQ*
          SX6    SBUF+VRQB*VCPC 
          BX6    X6+X1       SET *1TO* FLAG 
          SA6    A6          REPLACE CONSTANT WITH *1TO* VALUE
 BRQ4     SA1    X7          READ QUEUE POINTER 
          SB6    X7 
          UX1,B2 X1 
          ZR     B2,BRQ5     IF QUEUE EMPTY 
          AX1    18          GET ENTRY
          SB5    X1 
          RJ     GQE
          UX4,B3 X5          GET PROCESSOR ADDRESS
          SA3    TRRT+B3
          MX2    -12
          AX3    36 
          BX2    -X2*X3 
          SB7    X2+TSRPROC 
          RJ     PCS
          RJ     SSP
          RJ     UQS
          SA1    BRQC 
          SX6    X1          GET BUFFER CONSTANT
          IX6    X0-X6
          PL     X6,BRQ5     IF NO ROOM FOR MORE ENTRIES
          SA2    A1-B1
          SX7    X2 
          PL     X1,BRQ4     IF NOT *ITOQ*
          RJ     CFL         CHECK POT SUPPLY 
          PL     X2,BRQ4     IF NOT LOW POT SUPPLY
 BRQ5     MX6    1           SET BUFFER TERMINATOR
          SA1    BRQA        GET POT POINTER
          SA6    X0 
          BX0    X1 
          SB7    B1          SET ENTRY LENGTH 
          MX5    -54
          BX7    -X5
 BRQ6     SA1    SBUF        START SEARCH 
          SB6    A1 
          BX2    -X5*X1 
 BRQ7     SA1    A1+B1       SEARCH ENTRIES 
          BX3    -X5*X1 
          IX4    X3-X2
          NG     X1,BRQ8     IF END OF QUEUE
          PL     X4,BRQ7     IF CURRENT FIND BEST 
          SB6    A1          SET NEW FIND POINTER 
          BX2    X3 
          EQ     BRQ7        CONTINUE SEARCH
  
 BRQ8     LX2    59-53
          NG     X2,BRQ9     IF ALL ENTRIES PROCESSED 
          SA1    B6 
          BX6    X1 
          SA7    B6 
          RJ     ENP         MAKE POT ENTRY 
          EQ     BRQ6        CONTINUE 
  
 BRQ9     AX0    18 
          SX6    X0 
          EQ     BRQX        RETURN 
  
 BRQA     CON    0           POT POINTER
 BRQB     CON    0           QUEUE POINTER ADDRESS
 BRQC     CON    0           1/*1TO* FLAG, 41/0, 18/BUFFER CONSTANT 
 CAM      SPACE  4,10 
**        CAM - CLEAR AUTO MODE.
* 
*         USES   A - 2, 6.
*                X - 2, 3, 5, 6.
*                B - 3, 4.
* 
*         CALLS  DPT. 
  
  
 CAM      SUBR               ENTRY/EXIT 
          SA2    A0+VDCT
          BX6    X2          SAVE CONTENTS OF VDCT
          SA6    CAMA 
          SX6    B2+         SAVE TERMINAL NUMBER OF USER 
          SA6    CAMB 
          SX6    41B         CLEAR READ DATA AND AUTO MODE
          LX6    49-0 
          BX2    -X6*X2 
          LX2    0-24 
          MX3    -12
          BX5    -X3*X2      GET POT POINTER
          BX6    X3*X2       CLEAR POT POINTER
          LX6    24-0 
          SA6    A2 
          ZR     X5,CAMX     IF NO POT POINTER
          SB3    X5 
          SB4    B0          DROP TO END OF CHAIN 
          RJ     DPT         DROP POTS
          EQ     CAMX        RETURN 
  
 CAMA     CON    0           VDCT OF LAST USER
 CAMB     CON    0           TERMINAL NUMBER OF LAST USER 
 CBL      SPACE  4,20 
**        CBL - CHECK BREAK IN PROGRESS AND LOGOUT FLAGS. 
* 
*         CHECK IF EITHER FLAG IS SET.  IF NOT, RETURN TO THE 
*         CALLING ROUTINE.  IF EITHER FLAG IS SET, DROP 
*         POTS AND EXIT FROM QUEUE PROCESSING.
* 
*         ENTRY  (SEE SSP.) 
*                (B3) = QUEUE ENTRY POT POINTER.
*                (B5) = INP$ ENTRY POT POINTER IF NONZERO.
* 
*         EXIT   TO *PCSX* IF EITHER FLAG SET.
*                (B3) AND (B5) POTS DROPPED IF EXISTENT.
* 
*         USES   X - 0, 1.
*                A - 1. 
*                B - 3, 4.
* 
*         CALLS  DPT. 
  
  
 CBL      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT     CHECK BREAK IN PROGRESS AND LOGOUT FLAGS 
          SX0    2001B
          LX0    48 
          BX1    X0*X1
          ZR     X1,CBLX     IF NEITHER FLAG SET, RETURN
          SX0    B5 
          SB4    B0 
          ZR     B3,CBL1     IF NO B3 POT(S)
          RJ     DPT         DROP POTS
 CBL1     ZR     X0,PCSX     IF NO B5 POT(S)
          SB3    X0 
          SB4    B0 
          RJ     DPT         DROP POTS
          EQ     PCSX        EXIT 
 CCM      SPACE  4,30 
**        CCM - COMMAND CRACKER.
* 
*         CCM CRACKS A COMMAND IMAGE INTO A STRING BUFFER 
*         AND THEN REASSEMBLES IT ON A PARAMETER BASIS UP TO
*         *PARL* PARAMETERS.  THE STRING BUFFER MAY BE PARTIALLY
*         OVERLAID BY THE PARAMETER BUFFER.  IF A PARAMETER OF
*         MORE THAN TEN CHARACTERS IS FOUND, THE ELEVENTH CHAR- 
*         ACTER IS TREATED AS A SEPARATOR CHARACTER.  COMMENTS
*         FOLLOWING THE COMMAND TERMINATOR ARE PACKED TEN 
*         CHARACTERS TO A PARAMETER, REGARDLESS OF CONTENT.  ALL
*         EXCESS POTS ARE DROPPED.  SEE *PBUF* AND *SBUF* DES-
*         CRIPTIONS.
* 
*         ENTRY  (B3) = POT POINTER OF POT BEGINNING COMMAND. 
*                (B4) = FWA OF POT. 
*                (X7) = FIRST WORD OF COMMAND IN CURRENT POT. 
* 
*         EXIT   TO *IPL* IF *PBUF* OVERLAYS *SBUF*.
*                (CCMA) = PARAMETER COUNT.
*                (CCMB) = WORD COUNT OF *PBUF*. 
*                SEE BUFFER DESCRIPTIONS. 
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2, 3, 4, 5, 6, 7.
* 
*         CALLS  GPL, IPL, RPL, SSP.
  
  
 CCM      SUBR               ENTRY/EXIT 
          SB5    B4+VCPC     SET LWA OF POT 
          SB4    B4+X7       SET FWA OF COMMAND IN POT
          SX3    B1 
          SA5    A0+VDCT     CHECK TRANSMISSION MODE
          LX3    51-0 
          SB2    B0          PRESET DISASSEMBLY REGISTER EMPTY
          SB7    -1R0 
          BX6    X6-X6       PREVENT SPACE SUPPRESS BEYOND FWA
          BX3    -X5*X3      TOGGLE TRANSMISSION STATUS 
          SA6    CCMF        CLEAR LONG COMMAND LINE FLAG 
          SA6    CCMA        INITIALIZE PARAMETER COUNT 
          BX0    X0-X0
          SX2    76B
          BX5    X3+X2
          SX7    B3          SAVE POT POINTER THROUGH LOOP
          SA7    CCMG 
          SA6    SBUF-1 
          EQ     CCM3        ENTER DISASSEMBLY LOOP 
  
*         DISASSEMBLE COMMAND TO STRING BUFFER. 
  
 CCM1     LX1    6           GET NEXT CHARACTER 
          BX6    -X3*X1 
          BX3    X6 
          LX3    6
          AX0    6
          BX0    X0+X3
          SA3    CCMF 
          SB2    B2-B1
          NZ     X3,CCM3     IF LONG COMMAND LINE CONDITION 
          SA6    A6+B1
          NZ     X0,CCM2     IF NOT POSSIBLE END OF LINE
          ZR     B2,CCM6     IF LAST BYTE OF WORD 
 CCM2     NZ     X2,CCM2.1   IF PREVIOUS CHARACTER NOT *76* 
          SA6    A6-B1       REPLACE *76* 
          SX4    X6+B7
          NG     X4,CCM3     IF LOWER-CASE ALPHABETIC 
          EQ     CCM2.2      TRANSLATE SPECIAL CHARACTER
  
 CCM2.1   SX4    B1+B1
          BX4    X2-X4
          NZ     X4,CCM3     IF PREVIOUS CHARACTER NOT *74* 
          SA6    A6-1 
          SX6    X6+1R0+TSCTA-TSCT
 CCM2.2   SA4    TSCT-1R0+X6 GET DISPLAY-CODE TRANSLATION 
          BX7    X4 
          SA7    A6          ENTER DISPLAY CODE TRANSLATION INTO BUFFER 
 CCM3     BX2    X6-X5
          MX3    -6 
          NZ     B2,CCM5     IF MORE CHARACTERS IN CURRENT WORD 
          LT     B4,B5,CCM4  IF NOT END OF POT
          SB6    X6+         SAVE CHARACTER THROUGH *GPL* 
          RJ     GPL         GET POT LINK 
          SX6    B6+         RESTORE CURRENT CHARACTER
          SB5    B4+VCPC
          SX3    -77B 
 CCM4     SA1    B4          READ NEXT WORD FROM POT
          SB4    B4+B1
          SB2    10          RESET CHARACTER COUNT
 CCM5     SB6    A6+1-PBUF-PBUFL
          NG     B6,CCM1     IF ROOM REMAINING IN STRING BUFFER 
          ZR     X0,CCM6     IF END OF COMMAND LINE 
          SX7    B1+         SET LONG COMMAND LINE FLAG 
          SA7    CCMF 
          ZR     X6,CCM1     IF COLON - CONTINUE CHECKING 
          SX6    X6-1R
          ZR     X6,CCM1     IF BLANK - CONTINUE CHECKING 
          RJ     SSP         SET STACK PARAMETERS 
          SMA    X6,( COMMAND TOO LONG."NL")
          EQ     PCS5        ISSUE MESSAGE
  
*         DELETE TRAILING SPACES AND POTS.
  
 CCM6     SA1    A6-B1
          MX6    1
          SX4    1R 
 CCM7     SA1    A1-1        READ PRECEEDING CHARACTER
          SX5    A1-SBUF+1
          ZR     X5,CCM8     IF NO PARAMETERS IN THE BUFFER 
          ZR     X1,CCM7     IF TRAILING COLON
 CCM8     BX5    X4-X1
          ZR     X5,CCM7     IF TRAILING BLANK
          SA6    A1+B1       SET END OF LINE FLAG 
          BX6    X6-X6
          SA6    A6+B1       TERMINATE BUFFER 
          SA2    CCMG        RESTORE POT POINTER
          BX7    X2          DROP TRAILING POTS 
          SB7    B0 
          SA1    SSPA 
          MX6    -12
          BX6    -X6*X1 
          SB2    X6          TERMINAL NUMBER TO (B2)
          RJ     RPL
  
*         REASSEMBLE COMMAND ON PARAMETER BASIS.
* 
*         (X3) = PARAMETER COUNT. 
*         (X6) = ASSEMBLY REGISTER. 
*         (X7) = FILE NAME FLAG.
*         (B4) = CHARACTER COUNT OF PARAMETER.
*         (B5) = SHIFT COUNT. 
*         (B6) = PARAMETER BUFFER INDEX.
*         (B7) = STRING BUFFER INDEX. 
  
          SB6    PBUF        INITIALIZE BUFFER POINTERS 
          SB7    SBUF 
          BX3    X3-X3       PRESET PARAMETER COUNT 
          BX5    X5-X5       CLEAR DELIMITER INDICATOR
          SB2    8
          SA1    B7          CHECK FIRST CHARACTER
          SB5    X1-1R* 
          NZ     B5,CCM22    IF NOT COMMENT 
          SA1    A0+VDCT     CHECK USER LOGGED IN 
          LX1    59-57
          PL     X1,CCM22    IF LOGIN NOT COMPLETE
          SX1    B0 
          MX3    1
          EQ     CCM22       ENTER ASSEMBLY LOOP
  
*         ASSEMBLE PARAMETER. 
  
 CCM9     SB4    B4+B1       COUNT CHARACTER
          SB5    B5-6        DECREMENT SHIFT COUNT
          BX6    X6+X2       MERGE CHARACTER
 CCM10    SA1    B7+         GET NEXT CHARACTER 
          SB7    B7+1 
          BX2    X1 
          ZR     X2,CCM11    IF COLON CHARACTER 
          SX2    X1-1R+ 
          NG     X1,CCM15    IF END OF STRING 
 CCM11    SA4    CCMC        MASK FOR BLANK, ASTERIK, AND DOLLAR SIGN 
          BX2    X2+X3
          NG     X2,CCM14    IF COMMAND TERMINATED OR ALPHANUMERIC
          SB3    X1 
          SX2    B7-SBUF-1
          ZR     X2,CCM12    IF FIRST CHARACTER 
          SA2    CCME        MASK FOR DOLLAR SIGN 
          LX2    B3 
          BX5    X5-X2
          NG     X5,CCM13    IF BEGINNING OF LITERAL STRING 
 CCM12    LX4    B3 
          PL     X4,CCM15    IF SEPARATOR CHARACTER 
          SB3    B3-1R
          ZR     B3,CCM10    IF UNDELIMITED BLANK 
 CCM13    SX7    B1+         SET NOT-FILE-NAME FLAG 
 CCM14    LX2    X1,B5       POSITION CHARACTER FOR MERGER
          PL     B5,CCM9     IF NOT YET ELEVENTH CHARACTER
  
*         PROCESS SEPARATOR CHARACTER.
  
 CCM15    NZ     X6,CCM16    IF NON-NULL PARAMETER
          SX7    B1          SET NOT FILE NAME FLAG 
 CCM16    PL     X1,CCM17    IF NOT END OF STRING 
          NG     X3,CCM17    IF COMMAND TERMINATED
          NG     X5,CCM17    IF INSIDE A LITERAL STRING 
          SX4    1R.         SET TERMINATOR 
          BX1    X1+X4
 CCM17    LT     B4,B2,CCM18  IF .LT. EIGHT CHARACTERS
          SX7    B1+         SET NOT FILE NAME FLAG 
 CCM18    LX7    36          STORE PARAMETER ASSEMBLY 
          BX7    X7+X1
          MX4    1
          BX7    -X4*X7 
          SA6    B6 
          PX7    X7,B4
          SB6    B6+2        INCREMENT PARAMETER BUFFER ADDRESS 
          SA7    A6+B1
          SB3    X1 
          NG     X3,CCM22    IF COMMAND TERMINATED
          PL     X1,CCM18.1  IF NOT END OF STRING 
          NG     X5,CCM21    IF INSIDE A LITERAL STRING 
 CCM18.1  SX3    X3+B1       COUNT PARAMETER
          SA2    =4LDIAL
          BX6    X2 
          SA2    PBUF 
          BX6    X2-X6
          NZ     X6,CCM19    IF COMMAND NOT *DIAL*
          SX6    X3-2 
          ZR     X6,CCM21    IF TERMINAL NUMBER PROCESSED 
 CCM19    SA2    CCMD        MASK FOR TERMINATORS 
          NG     X5,CCM22    IF INSIDE A LITERAL STRING 
          LX2    B3 
          PL     X2,CCM22    IF CURRENT SEPARATOR NOT TERMINATOR
          SB3    B3-1R. 
          NZ     B3,CCM21    IF NOT PERIOD
          SA2    PBUF        CHECK IF *LIST* COMMAND
          BX6    X2 
          SA2    =4LLIST
          BX2    X2-X6
          ZR     X2,CCM20    IF *LIST*
          SA2    =3LLNH 
          BX6    X2-X6
          NZ     X6,CCM21    IF NOT *LNH* 
 CCM20    SB3    -1R. 
          SA2    B7          CHECK NEXT CHARACTER 
          SX6    X2+B3
          SA2    B6-3        CHECK LAST SEPARATOR 
          ZR     X6,CCM22    IF ELIPSIS 
          SX6    X2+B3
          SA2    A2+B1
          BX6    X2+X6
          ZR     X6,CCM22    IF ELIPSIS 
 CCM21    BX6    X3          SAVE PARAMETER COUNT 
          MX3    1           TERMINATE COMMAND
          SA6    CCMA 
 CCM22    GE     B6,B7,IPL   IF *PBUF* OVERFLOWS *SBUF* 
          SB5    54          RESET CHARACTER COUNT
          BX7    X7-X7       RESET FILE NAME FLAG 
          MX6    0           CLEAR ASSEMBLY REGISTER
          SB4    B0+         RESET CHARACTER COUNT
          PL     X1,CCM10    IF NOT END OF STRING 
  
*         TERMINATE PARAMETER BUFFER. 
  
          SX6    B6-PBUF+2   SET *PBUF* WORD COUNT
          SA6    CCMB 
          SX6    B0+         TERMINATE BUFFER 
          SX7    B1          SET NOT FILE NAME FLAG 
          LX7    36 
          SB7    PBUF+PARC*2
 CCM23    SA6    B6 
          SA7    B6+B1
          SB6    B6+2 
          LT     B6,B7,CCM23 IF MORE NULL PARAMETERS TO BE SET
          RJ     SSP         SET STACK PARAMETERS 
          JP     CCMX        RETURN 
  
 CCMA     CON    0           PARAMETER COUNT
 CCMB     CON    0           WORD COUNT 
  
 CCMC     BSS    0           MASK OF ALLOWABLE NON-ALPHANUMERICS
          POS    60-1R* 
          VFD    1/1
          POS    60-1R
          VFD    1/1
          POS    60-1R$ 
          VFD    1/1
          POS    0           INSURE ZERO FILL 
  
 CCMD     BSS    0           COMMAND TERMINATOR MASK
          POS    60-1R) 
          VFD    1/1
          POS    60-1R. 
          VFD    1/1
          POS    0           INSURE ZERO FILL 
  
 CCME     BSS    0           DELIMITED LITERAL MASK 
          POS    60-1R$ 
          VFD    1/1
          POS    0           INSURE ZERO FILL 
  
 CCMF     CON    0           LONG COMMAND LINE FLAG 
 CCMG     CON    0           COMMAND POT POINTER
 TSCT     SPACE  4,10 
**        TSCT - TABLE OF SPECIAL CHARACTER TRANSLATIONS. 
* 
*         TSCT CONTAINS THE DISPLAY CODE TRANSLATIONS OF THE *74XX* 
*         SPECIAL CHARACTERS AND THE DISPLAY CODE MAPPINGS OF THE 
*         *76XX* SPECIAL CHARACTERS.  THE LOWER SIX BITS OF THE 
*         CHARACTER ARE THE INDEX INTO THE TABLE. 
  
 TSCT     BSS    0           *76XX* MAPPINGS
          CON    61B         7633 - LEFT BRACE
          CON    75B         7634 - VERTICAL LINE 
          CON    62B         7635 - RIGHT BRACE 
          CON    76B         7636 - TILDE 
  
 TSCTA    BSS    0           *74XX* TRANSLATIONS
          CON    0           7400 - (NOT DEFINED) 
          CON    74B         7401 - COMMERCIAL AT 
          CON    76B         7402 - CIRCUMFLEX
          CON    0           7403 - (NOT DEFINED) 
          CON    0           7404 - COLON 
          CON    0           7405 - (NOT DEFINED) 
          CON    0           7406 - (NOT DEFINED) 
          CON    74B         7407 - COMMERCIAL AT 
 PBUF     SPACE  4,25 
**        PBUF - PARAMETER BUFFER.
*         SBUF - STRING BUFFER. 
* 
*         *PBUF* IS FORMATTED DURING COMMAND CRACKING.  EACH
*         PARAMETER HAS A TWO WORD ENTRY AS FOLLOWS.
* 
*T,PBUF   60/ PARAMETER 
*T,PBUF+1 12/ WORD COUNT, 12/ FN FLAG, 18/ 0, 18/ SEPARATOR 
* 
*         THE WORD COUNT IS BIASED BY 2000B.  THE FILE NAME 
*         FLAG IS SET TO ZERO TO INDICATE THAT THE PARAMETER
*         CONTAINS ONLY ALPHANUMERICS AND IS SEVEN CHARACTERS 
*         OR LESS IN LENGTH.  IT IS SET TO ONE TO INDICATE
*         OTHERWISE.
  
  
 LBUF     CON    0
          CON    1R$
 PBUF     BSS    48 
 SBUF     BSS    82 
 PBUFL    EQU    *-PBUF 
 PARL     EQU    PBUFL/2-2
 TBUF     SPACE  4,10 
**        TBUF - NETWORK DATA TRANSLATION BUFFER. 
  
  
 TBUF     EQU    PBUF        DEFINE BUFFER FWA
 TBUFL    EQU    77D         DEFINE BUFFER LENGTH 
 TBUFE    EQU    TBUF+TBUFL+1 DEFINE END OF BUFFER
          IFLT   *,TBUFE,1   DEFINE BUFFER AREA 
          BSS    TBUFE-*
          BSS    3           TRANSLATION OVERFLOW AREA
 EXIBUF   SPACE  4,10 
**        EXIBUF -BUFFER FOR EXIT OVERLAY.
* 
*         THE EXIT OVERLAY BUFFER IS DEFINED TO OVERLAY A PORTION 
*         OF THE PARAMETER AND TRANSLATION BUFFER.
  
  
 EXIBUF   EQU    PBUF+20
          TITLE  GENERAL SUBROUTINES. 
 CDP      SPACE  4,10 
**        CDP - CLEAR DETACH IN PROGRESS. 
* 
*         CLEARS VSTT BIT 56, DETACH IN PROGRESS. 
* 
*         USES   X - 1, 6.
*                A - 1, 6.
  
  
 CDP      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT
          SX6    B1 
          LX6    56 
          BX6    -X6*X1 
          SA6    A1          REWRITE VSTT 
          EQ     CDPX        EXIT 
 CDS      SPACE  4,20 
**        CDS - CHECK DRIVER STACK STATUS.
* 
*         CHECK TO SEE IF ANY ACTIVE DRIVERS REMAIN.  IF NOT, 
*         THE EXECUTIVE IS ABORTED. 
* 
*         EXIT   TO CALLER IF ANY DRIVER REMAINS ACTIVE.
*                ABORTS WITH DAYFILE MESSAGE IF NO DRIVER ACTIVE. 
* 
*                N.B.  THE NETWORK DRIVER IS ALWAYS CONSIDERED
*                TO BE ACTIVE IF PRESENT. 
* 
*         USES   X - 2, 6, 7. 
*                A - 2. 
*                B - 6. 
* 
*         MACROS ABORT, MESSAGE.
  
  
 CDS      SUBR               ENTRY/EXIT 
          TX7    B0,VNTP     CHECK IF NETWORK ACTIVE
          NZ     X7,CDSX     IF NETWORK ACTIVE, RETURN
          SB6    B0+         INITIALIZE STACK POINTER INDEX 
          SX6    =C* NO ACTIVE DRIVERS REMAINING.*
  
*         CHECK STACK POINTERS FOR ACTIVE DRIVER. 
  
 CDS1     SA2    VDRL+B6     READ NEXT STACK POINTER
          SB6    B6+B1
          AX2    24 
          NG     X2,CDS2     IF END OF STACK POINTERS 
          SX7    X2 
          LX2    59-48+24    CHECK SHUTDOWN FLAG
          ZR     X7,CDS1     IF NULL POINTER
          PL     X2,CDSX     IF ACTIVE DRIVER 
          EQ     CDS1        LOOP FOR NEXT ENTRY
  
*         ISSUE DAYFILE MESSAGE AND ABORT.
  
 CDS2     MESSAGE X6,,R      ISSUE DAYFILE MESSAGE
          ONSW   2           PREVENT RELOAD 
          ABORT 
          SPACE  4,10 
**        CFC - COUNT NUMBER OF CHARACTERS. 
* 
*         COUNTS THE NUMBER OF CHARACTERS CONTAINED IN A
*         CHARACTER STRING.  THE MAXIMUM LENGTH OF THE
*         CHARACTER STRING IS SEVEN.
* 
*         ENTRY  (X6) = 42/CHARACTER STRING, 18/0.
* 
*         EXIT   (B6) = CHARACTER COUNT.
* 
*         USES   X - 1, 3.
*                B - 6. 
  
  
 CFC      SUBR               ENTRY/EXIT 
          SB6    B0 
          ZR     X6,CFCX     IF NULL NAME 
          SB6    8
          MX3    6
          LX3    17-59
 CFC1     SB6    B6-B1
          LX3    6
          BX1    X3*X6
          ZR     X1,CFC1     IF NO CHARACTER
          EQ     CFCX        EXIT 
 CFL      SPACE  4,20 
**        CFL - CHECK IF MORE FIELD LENGTH NEEDED (POTS IN SHORT
*         SUPPLY).
* 
*         ENTRY  (VPAL) = TOTAL POTS ALLOCATED. 
*                (VPUL) = TOTAL POTS RESERVED.
* 
*         EXIT   (X1) = TOTAL POTS AVAILABLE. 
*                (X2) = NEGATIVE IF BELOW MINIMUM POT SUPPLY. 
*                (X2) = TOTAL POTS AVAILABLE IF NOT BELOW MINIMUM.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 6. 
  
  
 CFL      SUBR               ENTRY/EXIT 
          SA1    VPAL        TOTAL POTS ALLOCATED 
          SA2    A1+B1       POTS IN USE
          IX1    X1-X2       POTS NOT IN USE
          SX2    X1-VMIP
          NG     X2,CFL1     IF BELOW MINIMUM 
          SX2    X1+         (X2) = POTS AVAILABLE
          EQ     CFLX        RETURN 
  
*         PROCESS LOW POT SUPPLY. 
  
 CFL1     SA2    CPBM        COUNT POT SHORTAGE 
          SX6    B1 
          IX6    X2+X1
          BX2    -X1         (X2) = NEGATIVE STATUS 
          SA6    A2 
          EQ     CFLX        RETURN 
 CFX      SPACE  4,10 
**        CFX - COPY FILE EXTERNALLY. 
* 
*         ENTRY  (LISB) = INPUT FILE NAME ADDRESS 
*                (LISC) = FIRST LINE NUMBER.
*                (LISE) = LAST LINE NUMBER. 
* 
*         EXIT   (X7) = *SCOPY* IN DISPLAY (ENTRY POINT NAME).
*                (X1) = 1, (ENTRY POINT DIRECTORY FLAG).
* 
*         USES   X - 0, 1, 6, 7.
*                A - 1, 6.
* 
*         CALLS  CFC, PCB, ZTB. 
  
  
 CFX      SUBR               ENTRY/EXIT 
          SA1    LISB        GET FILE NAME
          NZ     X1,CFX1     IF NOT PRIMARY FILE
          SA1    A0+VFNT
 CFX1     BX6    X1 
          RJ     CFC         COUNT CHARACTERS 
          SA6    CFXB        STORE FILE NAME
          SX6    1R,
          PX6    X6,B6
          SA6    A6+B1
          SA1    LISC 
          SX6    1R*
          LX6    54 
          BX6    X6-X1
          NZ     X6,CFX2     IF FIRST NUMBER NOT AN ASTERISK
          SX1    B0+
 CFX2     RJ     ZTB         CONVERT ZERO FILL TO BLANKS
          SA6    CFXC 
          SA1    LISE 
          SX6    1R*
          LX6    54 
          BX6    X6-X1
          NZ     X6,CFX3     IF SECOND NUMBER NOT AN ASTERISK 
          SX1    B0+
 CFX3     RJ     ZTB         CONVERT ZERO FILL TO BLANKS
          SA6    CFXD 
          SX1    CFXA 
          RJ     PCB         PACK CONTROL STATMENT BUFFER 
          SA1    CFXA 
          MX7    42 
          LX1    6
          BX7    X7*X1       SET *EPN*
          EQ     CFXX        EXIT 
  
*         SCOPY,LFN,,,,,,R,D,FLINE,LLINE,NS.
  
 CFXA     VFD    60/6L$SCOPY
          VFD    12/2006B,48/1R,
 CFXB     VFD    60/0        INPUT FILE NAME
          VFD    60/0        SEPARATOR
          VFD    60/6L,,,,,R   REWIND OPTION
          VFD    12/2006B,48/1R,
          VFD    60/1LD      CHARACTER SET
          VFD    12/2001B,48/1R,
 CFXC     VFD    60/0        FIRST LINE 
          VFD    12/2012B,48/1R,
 CFXD     VFD    60/0        LAST LINE
          VFD    12/2012B,48/1R,
          VFD    60/2LNS
          VFD    12/2002B,48/1R.
          VFD    60/0 
          VFD    60/0 
 CLE      SPACE  4
**        CLE - CLEANS UP TERMINAL TABLE AFTER A USER LOGS OFF. 
* 
*         EXIT   TERMINAL TABLE CLEARED, ALL POTS DROPPED,
*                AND ACTIVE USER COUNT DECREMENTED. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6, 7.
*                B - 3, 4.
* 
*         CALLS  DAP, DPT.
  
  
 CLE      SUBR               ENTRY/EXIT 
          SA1    VANL        DECREMENT ACTIVE USER COUNT
          ZR     X1,CLE0.1   IF NO ACTIVE USERS 
          SX6    B1 
          IX6    X1-X6
          SA6    A1 
          RJ     UCP         UPDATE CONVERTED POINTER 
 CLE0.1   RJ     DAP         DROP ASSIGNED POTS 
          SX6    B0 
          SX7    B1 
          SA6    A0+VUIT
          SA6    A0+VFNT
          SA6    A0+VFST
          SA7    A0+VROT
          SA6    A0+VSTT
          TA6    B2,VTNP     CLEAR TERMINAL NAME
          IFNET  CLE1        IF NETWORK TERMINAL
          SA1    A0+VDCT
          SA2    =00007400000000000000B 
          BX6    X2*X1
          SA6    A1          REWRITE VDCT 
          EQ     CLEX        RETURN 
  
 CLE1     SA6    A0+VDCT
          SA1    A0+VDPT
          SA6    A0+VCHT
          MX2    12 
          SA6    A1          CLEAR VDPT 
          BX2    X2*X1
          ZR     X2,CLE2     IF NO POTS IN VDPT 
          SB4    B0 
          LX2    12 
          SB3    X2 
          RJ     DPT         DROP VDPT POTS 
 CLE2     TA1    B2,VMST
          MX2    -12
          SX6    B0 
          BX2    -X2*X1 
          SA6    A1          CLEAR VMST 
          ZR     X2,CLEX     IF NO POTS IN VMST 
          SB4    B0 
          SB3    X2 
          RJ     DPT         DROP VMST POTS 
          EQ     CLEX        RETURN 
 CNT      SPACE  4,15 
**        CNT - CANCEL TYPEAHEAD. 
* 
*         ENTRY  (X4) = REASON CODE TO SAVE IN *VMST*.
* 
*         EXIT   TYPEAHEAD MODE CLEARED.
*                (X1) = 0, IF REENTRY NOT MADE. 
*                     = 1, IF REENTRY MADE. 
*                (X6) = REASON CODE, IF REENTRY MADE. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 3, 6.
*                B - 3, 4.
* 
*         CALLS  DCR, DPT.
  
  
 CNT1     TA3    B2,VMST     GET REASON CODE
          MX4    -3 
          AX3    44 
          BX6    -X4*X3 
          SX1    1           SET REENTRY MADE 
  
 CNT      SUBR               ENTRY/EXIT 
          TA3    B2,VMST     CHECK FOR INTERNAL TYPEAHEAD QUEUE 
          MX6    -12
          BX1    -X6*X3 
          ZR     X1,CNTX     IF NO TYPEAHEAD POT
          LX4    44-0 
          MX6    -3 
          LX6    44-0 
          BX3    X6*X3       CLEAR PREVIOUS CODE
          BX3    X4+X3       SET NEW CODE 
          MX6    -18
          BX6    X3*X6       CLEAR POINTER AND POT COUNT IN VMST
          SA6    A3          RESET VMST 
          SB3    X1          DROP TYPEAHEAD POT 
          SB4    B0 
          RJ     DPT
          BX1    X1-X1       PRESET NO REENTRY
          TA3    B2,VMST
          LX3    59-51
          PL     X3,CNTX     IF NAM TYPEAHEAD NOT IN EFFECT 
          SX2    /1TD/CTM    CANCEL NAM TYPEAHEAD 
          SX7    CNT1 
          JP     DCR         ENTER DRIVER REQUEST 
 COP      SPACE  4
**        COP - COPIES THE CONTENTS OF POT(S) TO OTHER POT(S).
* 
*         ENTRY  (B3) = NONZERO, FIRST POT TO BE COPIED 
*                       ZERO, THEN
*                       (B7) = NUMBER OF POTS TO COPY.
*                       (X5) = POT TO LINK TO.
*                       (X6) = PACKED - BYTE 0 = (B7).
*                                     - BYTE 4 = FIRST POT TO COPY. 
* 
*         EXIT   (X7) = POINTER TO FIRST COPIED POT.
*                       ZERO, IF NO POTS AVAILABLE. 
*                (B7) = NUMBER OF POTS COPIED.
* 
*         CALLS  GPL, RPT.
  
  
 COP      SUBR               ENTRY/EXIT 
          ZR     B3,COP2     IF POT COUNT SPECIFIED IN B7 
          SX7    B3          SAVE ENTRY INFORMATION 
          SB7    B0          INITIALIZE COUNT 
 COP1     SB7    B7+B1
          RJ     GPL
          NZ     B3,COP1     IF STILL MORE POTS IN THE CHAIN
          PX6    X7,B7
          BX5    X5-X5
 COP2     SA6    COPA        GET POTS 
          PX5    X5,B7
          RJ     RPT
          ZR     X7,COPX     IF NO POT(S) AVAILABLE 
          SA1    COPA        GET SAVED INFORMATION
          UX4,B7 X1          SET FIRST READ POT 
          BX1    X7          SET FIRST WRITE POT
          SB3    X4 
          LX4    3
          LX7    3
          TX2    X7+1,VBMP   ADDRESS OF WRITE POT 
          AX7    3
          TB4    X4,VBMP     ADDRESS OF READ POT
          SB6    VCPC-1 
 COP3     SA3    B4+B6       COPY POT 
          SB6    B6-B1
          BX6    X3 
          SA6    X2+B6
          PL     B6,COP3     IF MORE WORDS TO COPY
          SB6    B3          SAVE READ POT POINTER
          SB3    X1          SET WRITE POT POINTER
          RJ     GPL         GET POT LINK FOR WRITE POT 
          ZR     B3,COPX     IF COPY COMPLETE RETURN
          SX2    B4+B1       SET WRITE POT ADDRESS
          SX1    B3          SAVE WRITE POT POINTER 
          SB3    B6          SET READ POT POINTER 
          RJ     GPL         GET POT LINK FOR READ POT
          SB6    VCPC-1 
          EQ     COP3 
  
 COPA     BSSZ   1           STORAGE FOR POT POINTER
 CTM      SPACE  4,20 
**        CTM - CALL TWO PORT MUX DRIVER. 
* 
*         *CTM* IS CALLED EITHER BY *ITP* WHEN A *TSEM* 
*         REQUEST HAS BEEN ISSUED, OR BY *DRI* AFTER DRIVER 
*         SHUTDOWN FOR *1TM* HAS COMPLETED. 
* 
*         ENTRY  (VITM) = FORMATTED *1TM* DRIVER REQUEST WORD.
*                       = 18/DN, 24/0, 18/VA. 
*                         DN = *1TM* DRIVER NAME. 
*                         VA = *1TM* *VDRL* ADDRESS.
* 
*         EXIT   *1TM* HAS BEEN CALLED. 
* 
*         USES   A - 1, 2, 7. 
*                X - 1, 2, 7. 
* 
*         MACROS SYSTEM.
  
  
 CTM      SUBR               ENTRY/EXIT 
          SA2    VITM        GET FORMATTED DRIVER REQUEST WORD
          BX7    X2 
          SA7    CTMA        SAVE FORMATTED REQUEST WORD
 CTM1     SYSTEM SPC,,CTMA   CALL *1TM* 
 +        SA1    B1+
          NZ     X1,*        IF SYSTEM REQUEST NOT CLEAR
          SA1    CTMA 
          NZ     X1,CTM1     IF PPU NOT AVAILABLE 
          EQ     CTMX        RETURN 
  
  
 CTMA     CON    0           SCRATCH WORD 
 CTP      SPACE  4,20 
**        CTP - COPY DATA INTO POTS.
* 
*         COPY DATA FROM A BUFFER INTO POTS.  *CTP* RESERVES POTS 
*         BASED ON THE BUFFER CM WORD COUNT AND ON HOW MANY POTS
*         ARE PROVIDED BY THE CALLER. 
* 
*         ENTRY  (B3) = FIRST POT OF CHAIN IF ONE PROVIDED. 
*                (B4) = NUMBER OF WORDS TO TRANSFER INTO POTS.
*                (X6) = BUFFER ADDRESS. 
*                (B5) = WORD OFFSET INTO THE FIRST POT AT WHICH POINT 
*                       DATA WILL BEGIN TO BE STORED. 
* 
*         EXIT   (X6) = 0, IF DATA WAS NOT COPIED.
*                       POT COUNT, IF TRANSFER COMPLETE.
*                (B3) = FIRST POT POINTER.
*                (B4) = ADDRESS OF FIRST POT. 
*                (X7) = LAST POT POINTER. 
*                (B6) = WORD COUNT IN LAST POT. 
* 
*         USES   X - 1, 2, 5, 6, 7. 
*                A - 1, 2, 6, 7.
*                B - 3, 4, 5, 6, 7. 
* 
*         CALLS  GPC, GPL.
  
  
 CTP      SUBR               ENTRY/EXIT 
          SX7    B5          SAVE ENTRY CONDITIONS
          PX6    X6,B4
          SA7    CTPA 
          SA6    A7+B1
          SB6    B4+B5       SET TOTAL CM WORD COUNT
          RJ     GPC         GET POT CHAIN OF CORRECT LENGTH
          ZR     X6,CTPX     IF POTS NOT OBTAINED 
          SA1    CTPA 
          SA2    A1+B1
          SA6    A1          SAVE POT COUNT 
          UX6,B6 X2 
          SX5    B3          SAVE FIRST POT POINTER 
          SB7    X1 
          SB5    VCPC 
          SB5    B5-B7       NUMBER OF WORDS THAT CAN FIT IN FIRST POT
          SA2    X6-1 
          SB4    B4+B7       START WITH OFFSET WORD 
          SB6    B6-B5
          GT     B6,CTP2     IF MORE THAN ONE POT OF DATA 
          SB5    B6+B5
          SB7    X1+B5       SET WORD COUNT IN LAST POT 
          EQ     CTP2        TRANSFER THE DATA
  
*         COPY THE DATA INTO THE POTS.
  
 CTP1     RJ     GPL         ADVANCE TO NEXT POT
          SB5    VCPC        SET TO TRANSFER *VCPC* WORDS 
          SB6    B6-B5
          GT     B6,CTP2     IF MORE THAN ONE POT OF DATA LEFT
          SB5    B6+B5       SET TO TRANSFER PARTIAL POT
          SB7    B5          SET WORD COUNT IN LAST POT 
 CTP2     SA2    A2+B1       GET WORD FROM BUFFER 
          SB5    B5-B1
          SB4    B4+B1
          BX7    X2          STORE WORD INTO POT
          SA7    B4-1 
          NZ     B5,CTP2     IF POT NOT YET FULL
          GT     B6,CTP1     IF ALL DATA NOT YET TRANSFERRED
          SX7    B3          LAST POT POINTER 
          SB6    B7          WORD COUNT IN LAST POT 
          SA1    CTPA 
          SB3    X5          FIRST POT POINTER
          LX5    3
          BX6    X1 
          TB4    X5,VBMP     ADDRESS OF FIRST POT 
          EQ     CTPX        EXIT 
  
 CTPA     CON    0           OFFSET INTO FIRST POT
 CTPB     CON    0           WORD COUNT, BUFFER ADDRESS 
 DAP      SPACE  4
**        DAP - DROP DRIVER REQUESTS AND POTS.
* 
*         DROPS POTS ASSIGNED TO TERMINAL IN VDCT AND IN
*         VSTT. 
* 
*         CALLS  DPT, DQO.
  
  
 DAP1     RJ     DQO         DROP QUEUED OUTPUT 
  
 DAP      SUBR               ENTRY/EXIT 
          SA1    A0+VDCT
          MX2    -13
          LX2    60-1 
          BX3    -X2*X1 
          ZR     X3,DAP1     IF NO POTS TO DROP 
          BX6    X2*X1       CLEAR POINTER
          SA6    A1 
          IFNET  DAP1        CHECK NETWORK OUTPUT 
          NG     X1,DAP1     IF DRIVER FUNCTION 
          SB3    X3          DROP POTS
          SB4    B0 
          RJ     DPT
          EQ     DAP1 
 DIP      SPACE  4,10 
**        DIP - DROP INPUT POT CHAIN. 
* 
*         EXIT - INPUT POT CHAIN DROPPED. 
* 
*         USES   X - 1, 6.
*                A - 1, 6.
*                B - 3, 4.
* 
*         CALLS  DPT. 
  
  
 DIP      SUBR               ENTRY/EXIT 
          IFMUX  DIPX 
          SA1    A0+VDPT
          AX1    48 
          ZR     X1,DIPX     IF NO INPUT POT CHAIN
          BX6    X6-X6       CLEAR VDPT 
          SA6    A1 
          SB3    X1 
          SB4    B0 
          RJ     DPT         DROP POT CHAIN 
          EQ     DIPX        RETURN 
 DJS      SPACE  4,10 
**        DJS - DETERMINE JOB STATUS. 
* 
*         EXIT   (X6) = ADDRESS OF STATUS MESSAGE.
  
  
 DJS      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT
          SA2    A0+VROT
          LX1    59-54
          LX2    59-2 
          SX6    =4LIDLE
          PL     X1,DJSX     IF JOB COMPLETE
          SX6    =4LWAIT
          NG     X2,DJSX     IF JOB ROLLED OUT
          SX6    =7LEXECUTE 
          EQ     DJSX        EXIT 
 DLP      SPACE  4,10 
**        DLP - DUMP LAST POT OF INPUT TO PRIMARY FILE. 
* 
*         EXIT   LAST INPUT POT DUMPED, POT POSITION CLEARED IN VDPT. 
*                (B6) = 0 IF NO DUMP, NONZERO IF DUMP IN PROGRESS.
* 
*         USES   X - 0, 1, 2, 3, 6, 7.
*                A - 1, 2, 6, 7.
*                B - 3, 4, 6, 7.
* 
*         CALLS  DMP, GPL, SSP. 
  
  
 DLP2     SB3    X0          LAST POT 
          MX7    12 
          BX1    -X7*X1 
          LX6    48          SAVE LAST POT POINTER FOR *DIP*
          BX6    X6+X1
          LX7    36 
          BX6    -X7*X6      CLEAR FW, WC, AND BC FIELDS
          SA6    A1          REWRITE VDPT 
          BX6    X2 
          SA6    A2          REWRITE VSTT 
          LX7    12          CHECK QUEUED INPUT 
 DLP3     MX6    -3          CHECK CURRENT VDPT INPUT 
          LX1    30 
          IFNET  DLP4 
          LX1    2           POSITION FOR CW MUX FORMAT 
 DLP4     BX0    -X6*X1      WORD COUNT IN LAST POT 
 DLP5     BX6    X2*X7       CHECK QUEUE IN VSTT
          BX6    X0+X6
          ZR     X6,DLP6     IF NO DUMP NECESSARY 
          BX7    X0          WORD COUNT 
          SB7    B0          SET TO FORCE DUMP
          SB6    X7          SET TO DUMP (B3) ONLY IF WC .GT. 0 
          RJ     DMP         DUMP LAST POT
          SB6    B1          SET EXIT CONDITION 
 DLP6     RJ     SSP         RESET REGISTERS
  
 DLP      SUBR               ENTRY/EXIT 
          SA1    A0+VDPT     CLEAR INPUT INITIATED BIT
          SX6    1S16 
          BX6    -X6*X1 
          SA6    A1          REWRITE VDPT 
          SA2    A0+VROT     CHECK JOB ACTIVITY 
          SB6    B0          SET NO DUMP EXIT CONDITION 
          LX2    59-0 
          PL     X2,DLPX     IF JOB ACTIVE
          SA2    A0+VFNT     CHECK PRIMARY FILE 
          MX6    42 
          BX6    X6*X2
          ZR     X6,DLPX     IF NO PRIMARY FILE 
          SA2    A0+VSTT     QUEUE COMPLETE POTS OF DATA
          MX7    12 
          BX0    X7*X1       FIRST POT POINTER
          LX7    48 
          SB3    B0 
          ZR     X0,DLP5     IF NO POT CHAIN IN VDPT
          BX3    X7*X1       LAST POT IN VDPT 
          LX3    24 
          SB3    X3 
          IFMUX  DLP3 
          SB7    X3 
          LX0    12          POSITION POT POINTER 
          SX6    X0          INITIALIZE LAST POT POINTER
          SB3    X0 
          SB4    B7-B3
          ZR     B4,DLP2     IF LAST POT REACHED
 DLP1     RJ     GPL         GET LINK TO NEXT POT 
          ZR     B3,DLP2     IF LAST POT REACHED
          BX6    X0          MOVE OLD FIRST POT POINTER 
          SX0    B3          SAVE NEW FIRST POT POINTER 
          SB4    B7-B3
          ZR     B4,DLP2     IF LAST POT REACHED
          SX3    B1          INCREMENT POT COUNT
          LX3    30-0 
          IX2    X2+X3
          BX7    X7*X2       CHECK VSTT FIRST POT POINTER 
          LX6    36-0 
          NZ     X7,DLP1     IF ALREADY SET 
          BX2    X2+X6       SET INTO VSTT
          BX7    X2 
          EQ     DLP1        CHECK NEXT POT IN CHAIN
 DMP      SPACE  4,30 
**        DMP - DUMP SOURCE INPUT.
* 
*         CALLS *1TO* TO DUMP SOURCE POTS.  THE SOURCE POT CHAIN
*         POINTER AND CHAIN LENGTH IS MAINTAINED IN *VSTT* BYTES
*         1 AND 2.  *1TO* WILL BE CALLED TO DUMP POTS WHEN THIS 
*         CHAIN LENGTH EXCEEDS THE MAXIMUM SPECIFIED IN THE CALL
*         TO *DMP*. 
* 
*         ENTRY  (B3) = POT TO BE DUMPED. 
*         (X7) = WORD COUNT IN POT TO BE DUMPED.
*         (B6) = 0, IF ONLY POTS IN VSTT ARE TO BE DUMPED.
*                1, IF POT IN *B3* SHOULD BE DUMPED ALSO. 
*                (B7) = POT COUNT THRESHOLD.  A DUMP WILL BE
*                       FORCED IF THE POT COUNT EXCEEDS THIS
*                       VALUE.  A VALUE OF ZERO MAY BE USED 
*                       TO FORCE THE DUMP.
* 
*         EXIT   IF *1TO* REQUEST NOT ENTERED.
*                (VSTT) BYTE 1 = FIRST POT OF CHAIN.
*                       BYTE 2 = POT COUNT. 
* 
*                IF *1TO* REQUEST ENTERED.
*                (VSTT) BYTE 1 = 0. 
*                       BYTE 2 = 0. 
*                (VROT) = SET BUSY IF CURRENT REENTRY QUEUE ENTRY.
* 
*         CALLS  MQE, SSP.
* 
*         NOTE   THE POT CHAIN CONTAINING INPUT DATA
*                WILL BE DROPPED UPON RETURN FROM *1TO* 
*                EXCEPT FOR THE LAST (B3 - ENTRY) POT.
  
  
 DMP      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT
          SA2    A0+VFNT
          MX5    42 
          MX4    12 
          LX4    -12
          BX6    X4*X1
          BX5    X5*X2
          MX3    18 
          ZR     X5,DMPX     IF PRIMARY FILE NON-EXISTENT 
          LX3    -12
          BX2    X3*X1
          NZ     X6,DMP1     IF INPUT CURRENTLY BEING HELD
          SX2    B3          SET POT IN ENTRY 
          ZR     B6,DMPX     IF NO DUMP NEEDED
          LX2    36 
 DMP1     SX4    B0 
          ZR     B6,DMP2     IF NO ADDITIONAL POT TO DUMP 
          SX4    B1          COUNT POT
 DMP2     LX4    30 
          IX2    X2+X4
          BX4    X2 
          MX6    -6 
          AX4    30 
          BX4    -X6*X4      GET NUMBER OF POTS 
          BX6    -X3*X1 
          SX3    B1          SET SORT FLAG
          LX3    52-0 
          BX6    X3+X6
          SB5    X4 
          LT     B5,B7,DMP3  IF DUMP NOT NEEDED 
          SA5    A0+VROT     CHECK FOR DUMP IN PROGRESS 
          LX5    59 
          NG     X5,DMP4     IF FILE NOT ACTIVE 
 DMP3     BX6    X2+X6       UPDATE POT COUNT 
          SA6    A1 
          EQ     DMPX 
  
 DMP4     SA6    A1          REEINITIALIZE POT COUNT AND POINTER
          AX2    36 
          LX4    24          POSITION POT COUNT 
          SX5    ICH$        MAKE *1TO* REQUEST 
          NZ     B6,DMP5     IF NEW POT BEING DUMPED
          BX7    X7-X7
 DMP5     LX7    33          POSITION WORD COUNT
          BX6    X4+X7
          LX5    48 
          BX6    X5+X6
          SB7    ITOQ 
          LX2    12 
          BX5    X6+X2
          RJ     MQE
          NZ     X2,DMP6     IF STACKED QUEUE ENTRY 
          SA5    A0+VROT     MARK STATUS BUSY IF CURRENT QUEUE ENTRY
          MX6    59 
          BX6    X6*X5
          SA6    A5+         REWRITE VROT 
 DMP6     RJ     SSP         RESET TERMINAL PARAMETERS
          EQ     DMPX        RETURN 
 DPT      SPACE  4
**        DPT - DROP POT. 
* 
*         CLEARS POT LINK BYTES AND MARKS POTS AVAILABLE IN THE 
*         POT LINK TABLE. 
* 
*         ENTRY  (B3) = FIRST POT OF CHAIN TO BE DROPPED. 
*                (B4) = LAST POT IN CHAIN TO BE DROPPED.
*                (B4) = 0 = DROP TO END OF CHAIN. 
* 
*         EXIT   (DPTA) = POT POINTER IF POT NOT RESERVED.
*                (B3) = ZERO. 
*                (B4) = ZERO. 
* 
*         USES   A - 1, 6, 7. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 3, 4, 5, 6, 7. 
* 
*         CALLS  ABT IF POT NOT RESERVED. 
  
  
 DPT2     SX3    X2+         SAVE POT POINTER 
          LX2    58          GET PLT RELATIVE ADDRESS 
          SA1    X2+B7       READ PLT ENTRY 
          BX6    X5*X2       GET BYTE NUMBER * 12 
          LX6    4           BYTE * 4 
          LX7    X6,B1       BYTE * 8 
          IX6    X6+X7       BYTE * 12
          AX7    3           GET BYTE NUMBER
          SB3    X6+B6       SET BYTE MASK SHIFT
          AX6    X5,B3       SHIFT BYTE MASK
          SB4    X7          SET BIT MASK SHIFT 
          AX7    X4,B4       SHIFT BIT MASK 
          BX2    X6*X1       MASK OUT BYTE
          LX1    X1,B3       SET FOR NEXT LINK
          BX6    -X7*X2      MASK OUT BIT 
          SA6    A1          STORE WORD 
          BX7    X7*X2       CHECK RESERVATION
          SB5    B5-B1       COUNT POT DROPPED
          BX2    -X5*X1      GET NEXT LINK
          ZR     X7,DPT1     IF POT NOT RESERVED
          NZ     X2,DPT2     IF ANOTHER LINK TO DROP
          SA1    VPUL        UPDATE POTS IN USE 
          SX6    X1+B5
          SA6    A1 
 DPT3     SB3    B0          CLEAR POT POINTER
          SB4    B0          CLEAR POT CHAIN POINTER
  
 DPT      SUBR               ENTRY/EXIT 
          ZR     B3,DPT0     IF TRYING TO DROP POT ZERO 
          SX2    B3          SET FIRST POT TO DROP
          SX4    10B
          MX5    48 
          TB7    0,VPLP      SET FWA OF PLT 
          SB6    -48
          SB5    B0          CLEAR POTS DROPPED COUNT 
          ZR     B4,DPT2     IF DROP TO END OF CHAIN
          SX3    B4 
          LX3    58          GET PLT RELATIVE ADDRESS 
          SA1    X3+B7       READ PLT ENTRY 
          BX6    X5*X3
          LX6    4           BYTE * 4 
          LX7    X6,B1       BYTE * 8 
          IX6    X6+X7       BYTE * 12
          SB3    X6+B6       SET BYTE MASK SHIFT
          AX6    X5,B3       SHIFT BYTE MASK
          BX6    X6*X1       MASK OUT BYTE
          SA6    A1          STORE WORD 
          EQ     DPT2 
  
*         PROCESS NON-RESERVED POT ERROR. 
* 
*         ENTRY  (X3) = POT POINTER.
  
 DPT0     SX3    B3 
 DPT1     SX7    X3+         STORE POT POINTER
          SX6    3RDPT       SET ERROR CODE 
          SA7    DPTA 
          RJ     ABT
          EQ     DPT3        CLEAR REGISTERS AND RETURN 
  
 DPTA     CON    0           POINTER TO NON-RESERVED POT
 DQO      SPACE  4,10 
**        DQO - DROP QUEUED OUTPUT. 
* 
*         DROPS OUTPUT POTS QUEUED IN *VSTT*. 
*         FOR A DESCRIPTION OF HOW POT CHAINS OF DATA ARE LINKED
*         TOGETHER IN THE QUEUE, SEE THE NOTE AT THE BEGINNING
*         OF SUBROUTINE *ANM*.
* 
*         CALLS  DPT. 
  
  
 DQO2     SB3    X3          DROP THE SINGLE CHAIN
          SB4    B0 
          RJ     DPT
  
 DQO      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT
          MX2    -12
          BX3    -X2*X1 
          ZR     X3,DQOX     IF NO POTS TO DROP 
          BX6    X2*X1       CLEAR POINTER
          MX2    54          CLEAR CHAIN COUNTER
          LX2    24 
          BX6    X2*X6
          SA6    A1 
          IFMUX  DQO2        IF ONLY ONE CHAIN IN VSTT
 DQO1     SB3    X3 
          LX3    3
          TA1    X3,VBMP     SAVE LINK TO NEXT CHAIN
          SB4    B0 
          BX6    X1 
          SA6    DQOA 
          RJ     DPT         DROP CURRENT CHAIN 
          SA1    DQOA 
          MX3    -12
          BX3    -X3*X1 
          ZR     X3,DQOX     IF NO MORE CHAINS TO DROP
          EQ     DQO1        DROP NEXT CHAIN
  
 DQOA     CON    0           LINK TO NEXT CHAIN 
 DQP      SPACE  4,10 
**        DQP - DROP QUEUE ENTRY POTS.
* 
*         RELEASE POTS ASSOCIATED WITH A REENTRY QUEUE ENTRY. 
* 
*         ENTRY  (SSPA) = REENTRY QUEUE ENTRY.
* 
*         EXIT   QUEUE ENTRY POTS RELEASED. 
*                (SSPA) UPDATED.
*                (B3) = 0.
*                (B4) = 0.
* 
*         USES   A - 1, 6.
*                X - 1, 6.
*                B - 3, 4.
* 
*         CALLS  DPT, SSP.
  
  
 DQP      SUBR               ENTRY/EXIT 
          RJ     SSP         SET UP REGISTERS 
          SB4    B0+
          ZR     B3,DQPX     IF NO POTS 
          RJ     DPT         DROP POT(S)
          SA1    SSPA        CLEAR POT POINTER IN STACK ENTRY 
          MX6    -12
          LX6    12 
          BX6    X6*X1
          SA6    A1          REWRITE STACK ENTRY
          EQ     DQPX        RETURN 
 DSH      SPACE  4,10 
**        DSH - SHUT DOWN DRIVER QUEUE STACK. 
* 
*         ISSUE HANG-UP-PHONE DRIVER-TO-IAFEX REQUESTS.  THE
*         REQUESTS ARE PLUGGED INTO THE CIRCULAR REQUEST STACK
*         TO BE PROCESSED BY *DRI* ON ITS NEXT CYCLE.  THIS 
*         CAN CAUSE NO INTERFERENCE WITH DRIVER USE OF THE
*         STACK BECAUSE THE DRIVER WILL HAVE DROPPED.  *DSH*
*         WILL BE CALLED FROM *DRI* WHENEVER *DRI* FINDS THAT 
*         A CIRCULAR STACK IS EMPTY AND THE SHUTDOWN FLAG IS
*         SET.  AFTER COMPLETION, *DSH* WILL SET THE DRIVER 
*         STATUS AS *OFF* IN THE DRIVER CIRCULAR STACK POINTER. 
*         IF NO ACTIVE DRIVERS REMAIN AND NETWORK IS NOT ACTIVE,
*         THE EXECUTIVE WILL BE ABORTED.
* 
*         ENTRY  (X1) = ADDRESS OF CIRCULAR STACK POINTER.
* 
*         USES   A - 1, 2, 4, 5, 6. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2, 3, 4, 7.
* 
*         CALLS  CDS. 
  
  
 DSH      SUBR               ENTRY/EXIT 
          RJ     CDS         CHECK DRIVER STATUSES
  
*         INITIALIZE NEW SHUTDOWN.
  
          SA5    DSHA        CURRENT SHUTDOWN POINTER 
          NZ     X5,DSH1     IF SHUTDOWN IN PROGRESS
          SA2    X1+         READ CIRCULAR STACK POINTER
          MX5    -12
          BX3    -X5*X2      SET FIRST TERMINAL NUMBER OF STACK 
          SB2    X3 
          PX6    X1,B2       FORMAT SHUTDOWN POINTER
          BX5    X6 
          SA6    A5          STORE
  
*         SET POINTERS FOR ENTERING CIRCULAR STACK REQUESTS.
  
 DSH1     SA1    X5          (X5) = STACK POINTER ADDRESS 
          SB4    10          (B4) = REQUEST LIMIT 
          UX5,B2 X5          (B2) = CURRENT TERMINAL NUMBER 
          MX6    -12
          BX2    -X6*X1      FIRST TERMINAL NUMBER OF STACK 
          AX1    12 
          SB7    X2 
          BX2    -X6*X1      TERMINAL COUNT 
          AX1    12 
          SB7    B7+X2       (B7) = LAST TERMINAL + 1 OF STACK
          SA1    X1+B1       READ FIRST 
          SB3    A1+1        (B3) = ADDRESS OF IN 
          SX6    X1          SET OUT = FIRST
          SA6    B3+B1
          SX7    /TLX/HUP+2000B  INITIALIZE REQUEST 
          SA6    B3          SET IN = FIRST 
          LX7    48 
  
*         FORMAT CIRCULAR STACK REQUEST.
  
 DSH2     SX3    B2+         SET TERMINAL NUMBER
          TTADD  B2,A0,X2,X6  SET TERMINAL TABLE ADDRESS
          SA1    A0+VDCT
          SA2    A0+VDPT
          MX4    12 
          BX1    X4*X1
          ZR     X1,DSH3     IF NO USER 
          SA1    A0+VSTT
          LX1    59-48
          NG     X1,DSH3     IF LOGOUT IN PROGRESS
          BX6    X6-X6
          BX4    X4*X2
          SA6    A2          CLEAR VDPT 
  
*         ENTER CIRCULAR STACK REQUEST. 
  
          SA1    B3          GET CURRENT IN POINTER 
          BX6    X7+X3       MERGE REQUEST AND TERMINAL NUMBER
          LX4    24 
          BX6    X6+X4       MERGE POT POINTER
          SA6    X1          STORE REQUEST IN CIRCULAR STACK
          SX6    X1+B1       ADVANCE IN 
          SA6    B3 
          SB4    B4-B1       DECREMENT REQUEST COUNT
  
*         ADVANCE TO NEXT TERMINAL. 
  
 DSH3     SB2    B2+B1       ADVANCE TERMINAL NUMBER
          BX6    X6-X6       ASSUME END OF TERMINALS
          GE     B2,B7,DSH4  IF END OF TERMINALS
          NZ     B4,DSH2     IF NOT REQUEST LIMIT 
          PX6    X5,B2       UPDATE SHUTDOWN POINTER
  
*         RESET SHUTDOWN POINTER AND SET DRIVER *OFF*.
  
 DSH4     SA6    DSHA        REWRITE SHUTDOWN POINTER 
          NZ     X6,DSHX     IF NOT END OF THIS SHUTDOWN, RETURN
          SA1    X5          READ CIRCULAR STACK POINTER
          SX6    B1          SET DRIVER STATUS = *OFF*
          LX6    49-0 
          BX6    X6+X1
          SA6    A1+         REWRITE CIRCULAR STACK POINTER 
          EQ     DSHX        RETURN 
  
*         DSHA - CURRENT SHUTDOWN POINTER.
* 
*         12/2000B+TN , 48/SPA. 
*               TN =  CURRENT TERMINAL NUMBER.
*               SPA = CURRENT STACK POINTER ADDRESS.
  
 DSHA     CON    0           CURRENT SHUTDOWN POINTER.
 DVP      SPACE  4,10 
**        DVP - DROP *VROT* POT CHAIN.
* 
*         DROP INPUT POT CHAIN POINTED TO BY *VROT*.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 6.
*                B - 3, 4.
* 
*         CALLS  DPT. 
  
  
 DVP      SUBR               ENTRY/EXIT 
          SA1    A0+VROT     CHECK FOR INPUT POT POINTER
          MX2    -12
          LX2    47-11
          BX6    -X2*X1 
          ZR     X6,DVPX     IF NO POT TO DROP
          LX6    -36
          SB3    X6 
          BX6    X2*X1       CLEAR POT POINTER
          SA6    A1 
          SB4    B0 
          RJ     DPT         DROP INPUT POT 
          EQ     DVPX        RETURN 
 EDR      SPACE  4,20 
**        EDR - ENTER DRIVER REQUEST. 
* 
*         ENTER DRIVER REQUEST IN TERMINAL TABLE WORD *VDCT*
*         AND SET ACTIVITY BIT IF NETWORK TERMINAL. 
* 
*         ENTRY  (VDCT) = INTERLOCK CLEAR.
*                (X2) = DRIVER REQUEST. 
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 6.
* 
*         CALLS  ABT, /IAFEX4/SAB.
  
  
 EDR1     SX6    3REDR
          RJ     ABT
  
 EDR      SUBR               ENTRY/EXIT 
          SA1    A0+VDCT     READ VDCT
          MX6    1           SET DRIVER REQUEST 
          BX2    X6+X2
          MX6    -12
          BX6    -X6*X1 
          NZ     X6,EDR1     IF VDCT INTERLOCKED
          BX6    X2+X1
          SA6    A1          REWRITE VDCT 
          IFMUX  EDRX        IF MUX TERMINAL, RETURN
          RJ     /IAFEX4/SAB  SET ACTIVITY BIT
          EQ     EDRX        RETURN 
 ENP      SPACE  4,20 
**        ENP - ENTER POT ENTERS TWO WORDS IN A POT CHAIN AND UPDATES 
*         POINTERS IF NECESARY. POT CHAIN MUST BE ZEROED. 
* 
*         ENTRY-
*         (X0) = BITS (53 - 36) = CURRENT ADDRESS IN CURRENT POT
*         (X0) = BITS (35 - 18) = FIRST POT IN CHAIN. 
*         (X0) = BITS (17 - 0) = CURRENT POT IN CHAIN.
*         (X6) = FIRST WORD TO BE ENTERED.
*         (X7) = SECOND WORD TO BE ENTERED. 
*         (B7) = 1 OR 2 INDICATING 1 OR 2 WORD ENTRY. 
* 
*         EXIT- 
*         (X0) = UPDATED. 
*         (X5) = UNCHANGED. 
*         (X7) = UNCHANGED. 
*         (B7) = UNCHANGED. 
* 
*         CALLS  GPL. 
  
  
 ENP2     LX1    36          UPDATE POINTER 
          BX6    X6-X6
          IX0    X0+X1
          SA6    B4 
  
 ENP      SUBR               ENTRY/EXIT 
          BX3    X0 
          SB3    X0 
          LX3    3
          SX1    B7 
          TB5    X3+VCPC,VBMP  SET LWA+1 OF POT 
          LX3    -3-36
          SA6    X3          ENTER FIRST WORD 
          SB4    X3+B7       SET NEXT ADDRESS 
          EQ     B1,B7,ENP1  IF ONE WORD ENTRY
          SA7    X3+B1
 ENP1     NE     B4,B5,ENP2  IF NOT END OF POT
          RJ     GPL
          MX6    -18
          SX3    B4 
          LX6    18 
          BX0    -X6*X0 
          LX3    36 
          SX6    B3 
          BX2    X0+X3
          IX0    X2+X6
          EQ     ENPX 
 EUC      SPACE  4,10 
**        EUC - END UCP CONNECTION. 
* 
*         ENTRY  (X7) = UCP IDENTIFICATION (JSN AND EJTO).
* 
*         EXIT   (X1) = RETURN CODE.
* 
*         USES   X - 1, 6.
*                A - 1. 
* 
*         CALLS  SFC. 
  
  
 EUC      SUBR               ENTRY/EXIT 
          SA1    EUCA        SET UP CALL FORMAT 
          BX6    X1 
          RJ     SFC         SEND SFCALL
          EQ     EUCX        EXIT 
  
  
 EUCA     VFD    18/0,18/-1,18/0,6/ENDT 
 FMF      SPACE  4,15 
**        FMF - FORMAT MODES FIELD. 
* 
*         ENTRY (A6) = ADDRESS OF LWA MESSAGE SO FAR. 
* 
*         EXIT  (A6) = LWA OF MESSAGE INCLUDING EOL.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 2, 6. 
*                B - 5. 
* 
*         CALLS  PKW. 
  
  
 FMF      SUBR               ENTRY/EXIT 
          SX6    2R:  
          SB5    60-12       BITS LEFT IN WORD
          SA1    A0+VDCT
          LX1    59-55
          PL     X1,FMF1     IF NOT BRIEF MODE
          SA2    =7LBRIEF,
          RJ     PKW         PACK WORD
 FMF1     LX1    55-50
          PL     X1,FMF2     IF NOT TEXT MODE 
          SA2    =6LTEXT, 
          RJ     PKW         PACK WORD
 FMF2     SA1    A0+VSTT
          LX1    59-53
          SA2    =10LPROMPT OFF 
          NG     X1,FMF3     IF NO PROMPT MODE
          SA2    =9LPROMPT ON 
 FMF3     RJ     PKW
          LX6    B5 
          SA6    A6+B1
          MX2    -12
          BX2    -X2*X6 
          ZR     X2,FMFX     IF EOL ALREADY INCLUDED
          BX6    X6-X6
          SA6    A6+B1
          EQ     FMFX        EXIT 
 FPQ      SPACE  4,30 
**        FPQ - FILL POT QUEUE. 
* 
*         *FPQ* CHECKS THE NUMBER OF POT CHAINS IN THE *TGPM* QUEUES
*         THAT HAVE NOT BEEN USED.  IF THE QUEUE IS EMPTY, THE NUMBER 
*         OF POT CHAINS TO KEEP IN THE QUEUE (CONTROL VALUE) IS 
*         INCREASED BY ONE.  IF THE QUEUE IS NON-EMPTY FOR 1000 TIMES,
*         THE CONTROL VALUE IS DECREASED BY ONE.  *VMIL* IS THE 
*         MINIMUM POT CHAINS TO KEEP IN EACH QUEUE.  EACH QUEUE IS
*         FILLED IN A ROUND-ROBIN FASHION FROM WHERE THE LAST FILL
*         COMPLETED.  IF THERE IS NOT ENOUGH FIELD LENGTH TO FILL THE 
*         QUEUE TO CONTROL VALUE, AS MANY ENTRIES AS POSSIBLE 
*         ARE REFILLED, SO THERE MAY NOT ALWAYS BE THE CONTROL
*         VALUE NUMBER OF POT CHAINS IN THE QUEUE.  EACH TIME 
*         *FPQ* IS EXECUTED, AN ATTEMPT IS MADE TO FILL TO
*         CONTROL VALUE.
* 
*         ENTRY  (X1) = *TGPM* QUEUE STATUS WORD. 
*                (B2) = LENGTH OF POT CHAIN FOR THIS QUEUE. 
*                (B3) = NEXT FILL POINTER.
*                (B4) = PREVIOUS FILL POINTER.
*                (B5) = POT CHAIN COUNT(CONTROL VALUE). 
* 
*         EXIT   (X0) = UPDATED NEXT FILL POINTER.
*                (X4) = UPDATED PREVIOUS FILL POINTER.
*                (B5) = UPDATED POT CHAIN COUNT (CONTROL VALUE).
* 
*         USES   A - 1, 3, 4, 5, 6, 7.
*                X - 0, 1, 2, 3, 4, 5, 6, 7.
*                B - 4, 5, 6, 7.
* 
*         CALLS  CFL, RPT.
  
  
 FPQ      SUBR               ENTRY/EXIT 
          BX6    X1          SAVE *TGPM* QUEUE STATUS WORD
          SA6    FPQD 
          SX4    B0          CLEAR UNUSED CHAIN COUNT 
          SX5    B0          CLEAR USED CHAIN COUNT 
          MX2    -12
          BX3    -X2*X1 
          SB6    X3          GET END OF QUEUE ADDRESS 
          AX1    12          GET BEGINNING OF QUEUE ADDRESS 
          BX3    -X2*X1 
 FPQ1     LT     B4,B6,FPQ2  IF NOT END OF QUEUE
          SB4    X3          RESET TO BEGINNING OF QUEUE
 FPQ2     EQ     B4,B3,FPQ6  IF END OF PREVIOUS FILL
          SA1    B4 
          NZ     X1,FPQ3     IF POT CHAIN NOT USED
          SX5    X5+B1       COUNT USED POT CHAINS
          SB4    B4+B1
          EQ     FPQ1        CHECK NEXT QUEUE ENTRY 
  
 FPQ3     SB7    B4          (B4) = UPDATED PREVIOUS FILL POINTER 
 FPQ4     LT     B7,B6,FPQ5  IF NOT END OF QUEUE
          SB7    X3          RESET TO BEGINNING OF QUEUE
 FPQ5     EQ     B7,B3,FPQ8  IF END OF PREVIOUS FILL
          SX4    X4+B1       COUNT UNUSED POT CHAINS
          SB7    B7+B1
          EQ     FPQ4        CHECK NEXT ENTRY 
  
 FPQ6     SB7    X5 
          NE     B7,B5,FPQ8  IF NOT EMPTY QUEUE 
          SA1    FPQA        CLEAR DECREMENT COUNTER
          SB7    B2-VSCL
          ZR     B7,FPQ7     IF SHORT POT CHAIN QUEUE 
          SA1    FPQB 
 FPQ7     SX6    B0 
          SA6    A1 
          SX1    B5-VMXL
          PL     X1,FPQ11    IF QUEUE ALREADY AT MAXIMUM SIZE 
          SB5    B5+B1
          EQ     FPQ11       CONTINUE 
  
 FPQ8     SA1    FPQA 
          SB7    B2-VSCL
          ZR     B7,FPQ9     IF SHORT POT CHAIN QUEUE 
          SA1    FPQB        CHECK DECREMENT COUNTER
 FPQ9     SX6    X1+B1
          SX1    X6-VTHL
          NG     X1,FPQ10    IF NOT TIME TO DECREASE QUEUE SIZE 
          SX6    B0          RESET COUNTER
          SB7    VMIL 
          LE     B5,B7,FPQ10 IF QUEUE ALREADY MINUMUM SIZE
          SB5    B5-B1       DECREASE QUEUE SIZE
 FPQ10    SA6    A1          SAVE COUNTER 
 FPQ11    SX0    B5          (X0) = UPDATED CHAIN COUNT 
          IX6    X0-X4       GET NUMBER OF ENTRIES LEFT TO FILL 
          SX1    B4          SAVE CHAIN COUNT AND FILL POINTER
          PX7    X1,B5
          SA7    FPQE 
          SX0    B3          (X0) = CURRENT FILL POINTER
 FPQ12    SA6    FPQC 
          SX6    X6-1 
          NG     X6,FPQ15    IF POT QUEUE HAS BEEN FILLED 
          RJ     CFL         CHECK POT SUPPLY 
          PL     X2,FPQ13    IF MINIMUM OR ABOVE,FILL QUEUE 
          SA1    VCPL 
          NZ     X1,FPQ15    IF FL INCREASE PENDING 
          SA1    SPRM        INCREMENT THROTTLE FLAG
          SX6    X1+1 
          SA6    A1 
          EQ     FPQ15       RETURN 
  
 FPQ13    SX1    B0 
          PX5    X1,B2
          RJ     RPT         GET POT CHAIN
          ZR     X7,FPQ15    IF NOT POTS AVAILABLE
          SA7    X0          PUT POT POINTER IN QUEUE 
          SX0    X0+B1       UPDATE CURRENT FILL POINTER
          MX3    -12         CHECK END OF QUEUE 
          SA1    FPQD 
          BX6    -X3*X1 
          BX6    X0-X6
          NZ     X6,FPQ14    IF NOT END OF QUEUE
          AX1    12          RESET TO BEGINNING OF QUEUE
          BX0    -X3*X1 
 FPQ14    SA1    FPQC        DECREMENT FILL COUNTER 
          SX6    X1-1 
          EQ     FPQ12       FILL NEXT QUEUE ENTRY
  
 FPQ15    SA1    FPQE        RESTORE PARAMETERS 
          UX4,B5 X1 
          EQ     FPQX        RETURN 
  
  
 FPQA     CON    0           *VTSL* QUEUE NON-EMPTY COUNTER 
 FPQB     CON    0           *VTLL* QUEUE NON-EMPTY COUNTER 
 FPQC     CON    0           FILL COUNTER 
 FPQD     CON    0           CURRENT *TGPM*QUEUE STATUS WORD
 FPQE     CON    0           TEMPORARY STORAGE FOR RETURN PARAMETERS
 FSM      SPACE  4,15 
**        FSM - FORMAT STATUS MESSAGE.
* 
*         ENTRY  (B4) = ADDRESS OF MESSAGE FIELD CONTENTS.
*                (X1) = CUMULATIVE SRU-S. 
* 
*         EXIT   (A6) = LWA OF MESSAGE. 
*                (X7) = MESSAGE WORD COUNT. 
*                MESSAGE FORMATTED STARTING AT FSMA.
* 
*         USES   X - 1, 2, 3, 5, 6, 7.
*                A - 1, 2, 3, 5, 6, 7.
*                B - 2, 3, 4. 
* 
*         CALLS  CFD, ZTB.
  
  
 FSM      SUBR               ENTRY/EXIT 
          BX7    X1          SAVE ENTRY CONDITIONS
          SA7    FSMB 
          SX7    B4 
          SA7    A7+B1
          SX7    B3          SAVE TERMINAL NUMBER AND POT POINTER 
          PX7    X7,B2
          SA7    A7+B1
          SA1    A0+VFST     GET JSN
          MX2    24 
          BX2    X2*X1
          SA3    =6L JSN: 
          LX2    24 
          BX6    X2+X3
          SA6    FSMA 
          SA1    A0+VSTT
          MX2    -3 
          AX1    12 
          BX1    -X2*X1 
          SA1    X1+STAA
          SX2    1RS
          BX1    X1+X2
          RJ     ZTB         CONVERT ZERO CHARACTERS TO BLANKS
          SA1    FSMB        GET ENTRY PARAMETERS 
          SA5    A1+B1
          SA6    A1 
          SA3    FSMC        SRU CONSTANT (.0001) 
          PX1    X1 
          FX1    X3*X1       DIVIDE ACCUMULATOR VALUE BY 1000 
          RJ     CFD         CONVERT TO F10.3 FORMAT
          SB4    X5 
          SA5    A5+B1
          UX5,B2 X5          RESTORE POT POINTER AND TERMINAL NUMBER
          SB3    X5 
          MX2    36 
          BX6    X2*X6
          LX6    36 
          SA1    =4LRU: 
          BX6    X1+X6
          SA6    A6+B1
          LX7    36 
          BX6    X7 
          SA6    A6+B1
          SA1    A0+VFNT
          MX3    42 
          BX1    X3*X1
          ZR     X1,FSM1     IF NO PRIMARY FILE 
          SA2    =6L  FILE
          LX2    36 
          BX6    X2+X7
          LX1    18 
          SA6    A6 
          SA2    =7L NAME:  
          MX3    -18
          BX6    -X3*X1 
          BX6    X2+X6
          SA6    A6+B1
          MX2    -12
          BX6    -X2*X6 
          ZR     X6,FSM1     IF EOL APPENDED
          BX6    X3*X1
          SA6    A6+B1
 FSM1     SA1    B4          CHECK STATUS MESSAGE 
          MX2    12 
          BX3    X2*X1
          SA1    A1-B1       START LOOP 
          SA2    =10H STATUS: 
          BX6    X2 
          MX2    -12
          NZ     X3,FSM2     IF STATUS MESSAGE CURRENT
          SX7    B0          DO NOT ISSUE MESSAGE 
          SA7    B4 
 FSM2     SX7    A6-FSMC+1
          PL     X7,FSM3     IF END OF BUFFER 
          SA6    A6+B1
          BX3    -X2*X6 
          SA1    A1+B1
          BX6    X1 
          NZ     X3,FSM2     IF NO EOL
 FSM3     SX7    A6-FSMA+1   SET WORD COUNT 
          EQ     FSMX        EXIT 
  
 FSMA     CON    0           JSN
          DATA   10H  SYSTEM: 
 FSMB     BSS    12          MESSAGE BUFFER 
 FSMC     CON    0.0001P48+1 SRU CONSTANT 
 GFN      SPACE  4
**        GFN - GET FILE NAME.
* 
*         GETS FILE NAME FROM *PBUF*, CHECKS FILE FLAG, RETURNS TO
*         CALLING ROUTINE UNLESS AN ERROR WAS DETECTED. 
* 
*         ENTRY  (B6) = POINTER TO FILE NAME. 
* 
*         EXIT   (X2) = FILE NAME IF NO ERROR.
* 
*         ERROR  TO *IPL* IF INCORRECT FILE NAME. 
* 
*         USES   X - 1, 2.
*                A - 1, 2.
  
  
 GFN      SUBR               ENTRY/EXIT 
          SA1    B6+1        GET ERROR FLAG 
          SA2    B6          GET FILE NAME
          LX1    59-36
          NG     X1,IPL      IF FILE NAME ERROR 
          EQ     GFNX        EXIT 
 GOP      SPACE  4,10 
**        GOP - GET ONE POT.
* 
*         ENTRY  (B3) = POT POINTER IF POT ALREADY RESERVED.
* 
*         EXIT   (B3) = POT POINTER.
*                (B4) = POT FWA.
* 
*         CALLS  RPT. 
  
  
 GOP      SUBR               ENTRY/EXIT 
          SX7    B3 
          GT     B3,GOP1     IF POT ALREADY RESERVED
          PX5    X7,B1
          RJ     RPT         RESERVE POT
 GOP1     SB3    X7 
          LX7    3
          TB4    X7,VBMP
          EQ     GOPX        EXIT 
 GPC      SPACE  4,20 
**        GPC - GET POT CHAIN.
* 
*         GETS SUFFICIENT POTS FOR THE NUMBER OF CM WORDS SPECIFIED.
*         IF A POT CHAIN IS PROVIDED BY THE CALLER, *GPC* WILL ADD
*         POTS AS NECESSARY TO THE END OF THE CHAIN.  ANY EXTRA POTS
*         WILL BE DROPPED.
* 
*         ENTRY  (B3) = FIRST POT OF CHAIN IF ONE PROVIDED. 
*                (B6) = CM WORD COUNT.
* 
*         EXIT   (X6) = 0, IF CHAIN NOT RESERVED. 
*                       POT COUNT, IF CHAIN RESERVED. 
*                (B3) = FIRST POT OF CHAIN. 
*                (B4) = ADDRESS OF FIRST POT. 
* 
*         USES   X - 1, 5, 6. 
*                A - 1, 6.
*                B - 3, 4, 6. 
* 
*         CALLS  GPL, RPT.
  
  
 GPC      SUBR               ENTRY/EXIT 
          SX5    B3 
          SX6    B6+7 
          AX6    3
          ZR     X6,GPCX     IF CM WORD COUNT IS ZERO 
          SB6    X6 
          PX6    X5,B6       SAVE FIRST POT, POT COUNT
          SA6    GPCA 
          ZR     B3,GPC3     IF NO POTS PROVIDED
  
*         COMPUTE HOW MANY ADDITIONAL POTS MUST BE RESERVED.
  
 GPC1     SB6    B6-1 
          ZR     B6,GPC2     IF ENOUGH POTS PRESENT 
          RJ     GPL         GET POT LINK 
          ZR     B3,GPC3     IF END OF SUPPLIED POT CHAIN REACHED 
          SX5    B3+
          EQ     GPC1        LOOP TO END OF CHAIN 
  
*         DROP ANY EXTRA POTS.
  
 GPC2     SX7    B3 
          SB7    B0 
          RJ     RPL         DROP TRAILING POTS 
          EQ     GPC4        SET UP EXIT CONDITIONS 
  
*         RESERVE ADDITIONAL POTS.
  
 GPC3     PX5    X5,B6
          RJ     RPT         REQUEST NEEDED POTS
          SX6    X7+
          ZR     X6,GPC6     IF NO POTS WERE RESERVED 
 GPC4     SA1    GPCA 
          UX1,B6 X1 
          SB3    X1 
          NZ     B3,GPC5     IF A CHAIN WAS SUPPLIED
          SB3    X7+
 GPC5     SX5    B3 
          SX6    B6+         RESTORE POT COUNT
          LX5    3
          TB4    X5,VBMP
          EQ     GPCX        EXIT 
  
 GPC6     SA1    GPCA        RESTORE ENTRY POT POINTER
          SB3    X1+
          EQ     GPCX        EXIT 
  
 GPCA     CON    0           FIRST POT, POT COUNT 
 GPL      SPACE  4,20 
**        GPL - GET POT LINK. 
* 
*         THIS ROUTINE IS ONLY USED FOR LOW USAGE ROUTINES WHICH
*         REQUIRE POT LINKS.
* 
*         ENTRY  (B3) = CURRENT POT.
* 
*         EXIT   (B3) = NEW POT POINTER.
*                     = 0 IF AT END OF CHAIN ON ENTRY.
*                (B4) = FWA OF NEW POT. 
* 
*         USES   A - 3. 
*                B - 3, 4.
*                X - 3, 4, 6. 
* 
*         CALLS  ABT. 
  
  
 GPL      SUBR               ENTRY/EXIT 
          ZR     B3,GPL1     IF TO GET LINK FOR POT ZERO
          SX4    B3 
          LX4    58 
          TA3    X4,VPLP     GET PLT ENTRY
          MX6    48 
          BX4    X6*X4
          LX4    4           BYTE * 4 
          LX6    X4,B1       BYTE * 8 
          IX4    X4+X6       BYTE * 12
          SB3    X4+12
          LX3    X3,B3       GET LINK BYTE
          MX6    -12
          BX3    -X6*X3 
          SB3    X3          SET NEW POT
          LX3    3
          TB4    X3,VBMP     SET FWA OF NEW POT 
          EQ     GPLX        RETURN 
  
 GPL1     SX6    3RGPL
          RJ     ABT
          SB3    B0+
          EQ     GPLX        EXIT 
 GQE      SPACE  4,30 
**        GQE - GET QUEUE ENTRY FROM QUEUE. 
* 
*         DELETES QUEUE ENTRY FROM QUEUE AND RETURNS ENTRY
*         TO CALLING ROUTINE.  THE EXECUTIVE WILL BE ABORTED
*         IF THE QUEUE ENTRY IS DETERMINED TO BE INCORRECT. 
* 
*         ENTRY  (B5) = TERMINAL NUMBER OF QUEUE ENTRY. 
*                (B6) = ADDRESS OF QUEUE POINTER WORD.
*                (B7) = TERMINAL NUMBER LINKED TO QUEUE ENTRY 
*                       IF NOT FIRST TERMINAL OF QUEUE. 
* 
*         EXIT   ENTRY REMOVED FROM QUEUE.
*                QUEUE POINTER WORD UPDATED.
*                (B2) = NEXT TERMINAL OF QUEUE (ENTRY TO WHICH
*                       CURRENT ENTRY LINKED).
*                     = 0 IF NO ENTRIES AFTER CURRENT ENTRY.
*                (B5) = TERMINAL NUMBER LINKED TO QUEUE ENTRY 
*                       IF NOT FIRST OR LAST TERMINAL OF QUEUE. 
*                (X5) = QUEUE ENTRY.
*                     = 0 IF NO QUEUE ENTRY FOR TERMINAL. 
* 
*                TO ABT+1 IF INCORRECT QUEUE ENTRY. 
*                (SSPA) = QUEUE ENTRY.
* 
*         USES   A - 1, 6, 7. 
*                X - 1, 4, 5, 6, 7. 
*                B - 3, 4, 2. 
* 
*         CALLS  ABT, GRT.
  
  
 GQE3     BX2    X1 
          LX2    42 
          BX7    X2-X7
          SX7    X7 
          NZ     X7,GQE1     IF NOT FIRST ENTRY IN QUEUE
          BX2    X6*X2
          BX2    X2+X4
          LX2    18 
          PX6    X2,B3       UPDATE ENTRY 
          SA6    B6+         REWRITE QUEUE POINTER
  
 GQE      SUBR               ENTRY/EXIT 
          MX2    -12
          SX7    B1 
          RJ     GRT
          UX1,B3 X4 
          BX5    X4 
          SB4    TRRTL       SET COMMAND TABLE LIMIT
          GE     B3,B4,GQE2  IF OUTSIDE TRRT TABLE ABORT
          NG     B3,GQE2     IF INCORRECT TRRT ORDINAL
          BX7    X7-X7       CLEAR TABLE ENTRY
          SA7    A4 
          BX4    -X2*X5      GET NEXT ENTRY POINTER 
          SX7    B5          SET CURRENT ENTRY POINTER
          BX5    X2*X5
          SB2    X4          SET NEXT ENTRY POINTER 
          BX5    X5+X7       MERGE TERMINAL NUMBER INTO ENTRY 
          SA1    B6 
          MX6    42 
          UX1,B3 X1 
          SB3    B3-B1       DECREMENT ENTRY COUNT
          BX2    X1-X7
          SX2    X2 
          NZ     X2,GQE3     IF NOT LAST ENTRY IN QUEUE 
          BX1    X6*X1
          SX2    B7 
          BX1    X1+X2
          NZ     B3,GQE1     IF NOT ONLY ENTRY
          BX7    X7-X7
          PX6    X7,B3       UPDATE POINTERS
          SA6    B6+
          EQ     GQEX        RETURN 
  
 GQE1     PX6    X1,B3       UPDATE ENTRY 
          SA6    B6 
          SB5    B7          UPDATE PREVIOUS ENTRY
          MX7    48 
          RJ     GRT
          BX4    X7*X4
          SX6    B2 
          BX6    X4+X6
          SA6    A4 
          EQ     GQEX        RETURN 
  
*         PROCESS INCORRECT QUEUE ENTRY.
  
 GQE2     SB2    B5          SET CURRENT TERMINAL NUMBER
          BX7    X5          SAVE INCORRECT QUEUE ENTRY 
          SX6    3RGQE       SET ERROR CODE 
          SA7    GQEA 
          EQ     ABT+1       UNCONDITIONALLY ABORT
  
 GQEA     CON    0           SAVE INCORRECT QUEUE ENTRY 
 GRI      SPACE  4,10 
**        GRI - GATHER RECOVERY INFORMATION.
* 
*         ENTRY  (A0) = ADDRESS OF TERMINAL TABLE.
*                (B4) = FWA OF PARAMETER BLOCK. 
* 
*         EXIT   RECOVERY WORDS SET IN PARAMETER BLOCK. 
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 1, 2, 7. 
  
  
 GRI      SUBR               ENTRY/EXIT 
          SA1    A0+VROT     SET UP MODES 
          SX2    34B         JOB CONTINUATION FLAG
          BX6    X1*X2       INPUT REQUEST, OUTPUT AVAILABLE
          SX2    40B
          AX1    17-5        FILE FOR OUTPUT
          BX2    X2*X1
          BX6    X6+X2
          SA1    A0+VDCT
          SX2    B1 
          AX1    50-0 
          BX7    X1*X2       TEXT MODE
          AX1    51-50
          BX3    X1*X2       CURRENT CHARACTER SET
          AX1    55-51
          BX1    X1*X2       BRIEF MODE 
          LX7    7
          LX1    1
          BX7    X1+X7
          BX6    X6+X7
          SA1    A0+VSTT
          MX7    -3          SAVE TERMINAL TABLE SUBSYSTEM
          LX7    12 
          BX7    -X7*X1 
          LX7    18-12
          BX6    X6+X7
          MX7    1
          LX7    55-59
          BX7    X7*X1       EFFECT MODE
          LX7    8-55 
          BX6    X6+X7
          MX7    1
          LX7    49-59
          BX7    X7*X1       SCREEN MODE
          LX7    9-49 
          BX6    X6+X7
          AX1    18-0 
          BX7    X2*X1       INITIAL CHAR SET 
          AX1    53-18
          SX2    101B 
          BX1    X2*X1       DISABLE TERMINAL CONTROL, NO PROMPT FLAGS
          BX6    X6+X1       MODES COMPLETED
          LX7    15-0        INITIAL CHARACTER SET
          LX3    12-0        CURRENT CHARACTER SET
          BX3    X7+X3
          BX7    X6+X3
          SA1    A0+VCHT     READ CHARACTER COUNTS
          SA2    A0+VFST     READ INPUT/OUTPUT OVERFLOW COUNT 
          SA7    B4+3        WRITE RECOVERY WORD 1
          MX7    -24
          MX6    -12
          LX6    24 
          BX7    -X7*X1      SET CHARACTER COUNT
          BX2    -X6*X2      SET OVERFLOW COUNT 
          BX7    X7+X2       WRITE RECOVERY WORD 2
          SA7    A7+B1
          EQ     GRIX        EXIT 
 GRT      SPACE  4
**        GRT - GET ENTRY FROM TABLE. 
* 
*         ENTRY-
*         (B5) = TERMINAL NUMBER FOR ENTRY TO GET.
* 
*         EXIT- 
*         (X4) = ENTRY. 
*         (A4) = ADDRESS OF ENTRY.
*         (B5) = UNCHANGED. 
* 
*         SCRATCH-
*         X6
  
  
 GRT      SUBR               ENTRY/EXIT 
          TA4    B5,VRAP     GET ENTRY
          ZR     X4,GRT      IF NO ENTRY
          MX6    12 
          BX6    X6*X4
          NZ     X6,GRTX     IF ENTRY FOUND 
          SA4    X4 
          NZ     X4,GRTX     IF ENTRY FOUND 
          SA4    A4+B1
          JP     GRTX 
 GTA      SPACE  4
**        GTA - GET TERMINAL TABLE ADDRESS. 
* 
*         ENTRY  (B7) = ADDRESS IN PBUF CONTAINING THE *JSN*. 
*                (B7)+1 = ADDRESS IN PBUF CONTAINING THE NUMBER OF
*                         CHARACTERS IN THE *JSN*.
* 
*         EXIT   (A4) = ADDRESS OF TERMINAL TABLE.
*                (X4) = 0, IF NO TERMINAL FOUND.
* 
*         USES   X - 1, 2, 4. 
*                A - 1, 2, 4. 
*                B - 6, 7.
  
  
 GTA2     SA4    B6+         SET TERMINAL TABLE ADDRESS 
  
 GTA      SUBR               ENTRY/EXIT 
          SA1    B7+1 
          SA2    B7+         GET THE *JSN*
          UX1,B6 X1          CHECK NUMBER OF CHARACTERS IN *JSN*
          SX4    B0+
          MX1    24          BUILD MASK FOR *JSN* 
          SB6    B6-4 
          NZ     B6,GTAX     IF NOT A VALID *JSN* 
          TB7    B0,VTTP,LWA  LWA+1 OF TERMINAL TABLES
          TB6    VTTL*VPST-VTTL,VTTP  FWA OF FIRST NON-PSEUDO TERMINAL
 GTA1     SA4    B6+VFST
          BX4    X4-X2
          BX4    X1*X4
          ZR     X4,GTA2     IF *JSN* FOUND 
          SB6    B6+VTTL
          LT     B6,B7,GTA1  IF MORE TERMINALS TO CHECK 
          SX4    B0+         *JSN* NOT FOUND
          EQ     GTAX        RETURN 
 GZP      SPACE  4
**        GZP - GET ZEROED POT. 
* 
*         IF X7 NOT = 0 UPON ENTRY, 
*         GZP RETURNS THE POT NUMBER THAT WAS PASSED TO GZP, NOT
*         THE POT NUMBER OF THE NEW POT.  GZP WILL ALSO ZERO OUT THE
*         POT THAT WAS PASSED TO GZP. 
* 
*         ENTRY-
*         (X7) = POT TO BE LINKED ONTO. 
*         (B7) = NUMBER OF POTS NEEDED. 
* 
*         EXIT- 
*         (X7) = NEW POT OR POT LINKED ONTO.
*         (X7) = 0, IF NO POT AVAILABLE.
* 
*         CALLS-
*         RPT, GPL. 
  
  
 GZP      SUBR               ENTRY/EXIT 
          PX5    X7,B7       GET POTS 
          RJ     RPT
          ZR     X7,GZPX     IF NO POT RETURN 
          BX1    X7 
          SB3    X7 
          LX1    3
          TB4    X1,VBMP
 GZP1     BX6    X6-X6
          SB5    B4+VCPC
 GZP2     SA6    B4          CLEAR POT
          SB4    B4+B1
          LT     B4,B5,GZP2  IF AT END OF POTS
          RJ     GPL         GET NEXT POT LINK
          NZ     B3,GZP1     IF STILL MORE POTS 
          EQ     GZPX        RETURN 
 IDM      SPACE  4,10 
**        IDM - ISSUE DAYFILE MESSAGE.
* 
*         FORMAT DAYFILE MESSAGE REQUEST AND PLACE IN PPU 
*         REQUEST BUFFER. 
* 
*         ENTRY  (X6) = ADDRESS OF DAYFILE MESSAGE. 
* 
*         USES   A - 2, 3, 6. 
*                X - 2, 3, 6. 
  
  
 IDM      SUBR               ENTRY/EXIT 
          SA2    IDMA        GET PPU CALL 
          SA3    PMSG        CHECK REQUEST BUFFER 
 IDM1     ZR     X3,IDM2     IF VACANT SLOT FOUND 
          SX3    A3+1-PITA
          PL     X3,IDMX     IF END OF REQUEST BUFFER 
          SA3    A3+1        CHECK NEXT SLOT
          EQ     IDM1 
  
 IDM2     BX6    X2+X6       FORMAT PPU CALL
          SA6    A3          STORE CALL IN REQUEST BUFFER 
          EQ     IDMX        RETURN 
  
  
 IDMA     VFD    18/3L1MA,6/0,12/1,24/0 
 IIR      SPACE  4,10 
**        IIR - ISSUE INPUT REQUEST.
* 
*         ISSUE TERMINAL INPUT REQUEST MESSAGE, SET READ DATA,
*         AND MAKE INPUT QUEUE ENTRY. THE ADDRESS TO WHICH
*         CONTROL RETURNS AFTER OPERATOR INPUT IS PRESET BY 
*         THE CALLER IN (X7) RATHER THAN EXTRACTED FROM THE 
*         SUBROUTINE ENTRY POINT AS IN SUBROUTINE *RQI*.
*         B3 AND B5, IF NONZERO, SHOULD CONTAIN VALID POT 
*         POINTERS, AS THE POT STRING(S) WILL BE DROPPED IF 
*         THE BREAK IN PROGRESS OR LOGOUT FLAG IS SET.
* 
*         ENTRY  (VDCT) = INTERLOCK CLEAR.
*                (B3) = POT POINTER FOR MESSAGE.
*                (B4) = MESSAGE LENGTH. 
*                (B5) = RETURN POT POINTER. 
*                (X6) = MESSAGE ADDRESS.
*                (X7) = REENTRY ADDRESS.
* 
*         EXIT   TO (X7) AFTER INPUT (SEE CLI.) 
*                (B5) = RETAINED. 
* 
*         CALLS  CBL, MVA, SRR. 
  
  
 IIR      BSS    0           ENTRY
          RJ     CBL         CHECK BREAK IN PROGRESS AND LOGOUT FLAGS 
          PX6    X6,B4       SAVE MESSAGE POINTERS
          SA6    IIRA 
          SX6    B3 
          SA6    A6+B1
          RJ     SRR         SET READ DATA AND REENTRY
          SA1    IIRA        RESET MESSAGE POINTERS 
          SA2    A1+B1
          UX6,B4 X1 
          SB3    X2+
          RJ     MVA         ISSUE MESSAGE
          EQ     PCSX        EXIT 
  
 IIRA     DATA   0           SAVE MESSAGE PARAMETERS
          DATA   0
 INO      SPACE  4,10 
**        INO - ISSUE NULL OUTPUT.
* 
*         FOR A MULTIPLEXER TERMINAL, *INO* SENDS A NULL OUTPUT 
*         LINE TO THE TERMINAL TO INSURE THAT THE DRIVER HAS AN 
*         INPUT POT.  FOR A NETWORK TERMINAL, ANY POTS IN *B3*
*         ARE DROPPED.
* 
*         ENTRY  (B3) = POT POINTER IF NONZERO. 
* 
*         CALLS  ASM, DPT, GOP. 
  
  
 INO      SUBR               ENTRY/EXIT 
          IFNET  INO1        IF NETWORK TERMINAL
          RJ     GOP         GET ONE POT
          SX6    2R"CB"      SET TERMINATOR BYTE IN POT 
          SX7    B3 
          LX6    48-0 
          SA6    B4+2 
          RJ     ASM         ASSIGN MESSAGE 
          EQ     INOX        RETURN 
  
*         DROP NETWORK TERMINAL POT(S) AND RETURN.
  
 INO1     ZR     B3,INOX     IF NO POTS, RETURN 
          SB4    B0+         DROP POT(S)
          RJ     DPT
          EQ     INOX        RETURN 
 LEP      SPACE  4,20 
***       LEP - LINK EXISTING POTS. 
* 
*         MANIPULATE PLT TO LINK TWO PREVIOUSLY RESERVED POTS 
*         OR POT CHAINS.
* 
*         ENTRY  (B3) = POT POINTER FOR LEADING POT.
*                (X2) = POT POINTER FOR TRAILING POT. 
* 
*         EXIT   (X7) = 0, LINKAGE NOT MADE.
*                     .NE. 0, LINKAGE MADE. 
* 
*         USES   X - 1, 6, 7. 
*                A - 1, 7.
*                B - 5, 6, 7. 
* 
*         CALLS  ABT. 
  
  
 LEP      SUBR               ENTRY/EXIT 
          ZR     B3,LEP2     IF NO FIRST POT
          SB5    60 
          SB6    B1+B1
          SX7    B3 
 LEP1     SX6    3
          BX6    X7*X6
          LX7    58 
          SB7    X7 
          TA1    B7,VPLP     GET PLT ENTRY
          LX7    X6,B6       BYTE NUMBER * 4
          LX6    3           BYTE NUMBER * 8
          IX6    X6+X7       BYTE NUMBER * 12 
          SB7    X6+12
          SX7    7777B
          LX6    X1,B7
          BX7    X6*X7
          NZ     X7,LEP1     IF ALREADY LINKED
          SB7    B5-B7
          LX6    X2,B7       POSITION NEW POT LINK
          BX7    X1+X6       MERGE NEW LINK 
          SA7    A1 
          EQ     LEPX        RETURN 
  
 LEP2     SX6    3RLEP
          RJ     ABT
          BX7    X7-X7
          EQ     LEPX        EXIT 
 LTT      SPACE  4,10 
**        LTT - LOCATE TERMINAL TYPE. 
* 
*         EXIT   (X1) = TERMINAL TYPE WORD. 
*                (X2) = BASE ADDRESS OF TERMINAL TYPE TABLE.
*                       (MULTIPLEXOR TERMINALS ONLY)
* 
*         USES   X - 1, 2, 3. 
*                A - 1, 2.
  
  
 LTT      SUBR               ENTRY/EXIT 
          IFNET  LTT1        IF NETWORK TERMINAL
          SA1    A0+VDPT     EXTRACT TERMINAL TYPE
          SA2    VDRL        LOCATE TERMINAL NAME TABLE 
          MX3    -5 
          AX2    24          SHIFT DRIVER STACK ADDRESS 
          SA2    X2+4 
          AX1    12+7 
          BX3    -X3*X1 
          IX3    X2+X3       READ TERMINAL TYPE WORD
          SA1    X3 
          JP     LTTX        RETURN 
  
*         SET NETWORK TERMINAL TYPE.
  
 LTT1     SA1    =6LNAMIAF   SET TERMINAL TYPE
          EQ     LTTX        RETURN 
 MDA      SPACE  4
**        MDA - MOVE DATA.
* 
*         ENTRY-
*         (B5) = NUMBER OF WORDS TO MOVE. 
*         IF (B5) = NEGATIVE, THE MOVE IS FROM LOW CORE TO HIGH CORE. 
*         (X2) = FWA TO GET DATA FROM.
*         (X3) = FWA TO STORE DATA AT.
* 
*         USES- 
*         A - 1, 6. 
*         B - 6.
*         X - 1, 6. 
  
  
 MDA      SUBR               ENTRY/EXIT 
          NG     B5,MDA2     IF MOVE UPWARD 
          SB6    B0 
          SX3    X3-1 
 MDA1     SA1    X2+B6
          SB6    B6+B1
          BX6    X1 
          SA6    X3+B6
          LT     B6,B5,MDA1  IF MORE DATA TO MOVE 
          EQ     MDAX 
  
 MDA2     SB6    -B5
          SX3    X3+B1
 MDA3     SA1    X2+B6
          SB6    B6-B1
          BX6    X1 
          SA6    X3+B6
          PL     B6,MDA3     IF MORE DATA TO MOVE 
          EQ     MDAX 
 MQE      SPACE  4
**        MQE - MAKE QUEUE ENTRY. 
* 
*         MAKES ENTRY IN REENTRY QUEUE.  THE ENTRY IS PLACED
*         IN THE TERMINAL REENTRY TABLE AND ASSOCIATED QUEUE
*         POINTER IS UPDATED.  IF A STACKED ENTRY IS MADE, THE
*         QUEUE POINTER IS PLACED IN BYTE 4 OF THE STACKED
*         ENTRY.
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                (B7) = QUEUE POINTER.
*                     = ZERO IF FOR NULL QUEUE. 
*                (X5) BITS 59-12 = FORMATTED QUEUE ENTRY. 
* 
*         EXIT   ENTRY PLACED IN QUEUE. 
*                QUEUE POINTER UPDATED. 
*                (X2) = 0, IF CURRENT ENTRY FOR THIS TERMINAL.
*                     = 1, IF STACKED BEHIND CURRENT ENTRY. 
*                (X6) = QUEUE ENTRY.
* 
*         ERROR  CALLS *ABT* IF INCORRECT ENTRY.
*                (MQEA) = INCORRECT QUEUE ENTRY.
* 
*         CALLS  ABT, GZP.
  
  
 MQE8     SX6    3RMQE
          BX2    X2-X2
          BX7    X5          SAVE INCORRECT ENTRY 
          SA7    MQEA 
          RJ     ABT
  
 MQE      SUBR               ENTRY/EXIT 
          UX1,B6 X5 
          SB5    TRRTL       SET COMMAND TABLE LIMIT
          MX4    48 
          NG     B6,MQE8     IF INCORRECT ENTRY 
          GE     B6,B5,MQE8  IF INCORRECT ENTRY 
          TA1    B2,VRAP
          BX5    X4*X5
          SB5    X1 
          NZ     X1,MQE4     IF PREVIOUS ENTRY
 MQE1     ZR     B7,MQE2     IF NO QUEUE POINTER TO UPDATE
          SA2    B7          UPDATE QUEUE POINTER 
          UX3,B6 X2 
          SB6    B6+B1       INCREMENT ENTRY COUNT
          SX7    B2 
          EQ     B6,B1,MQE3  IF QUEUE PREVIOUSLY EMPTY
          MX2    42 
          BX2    X2*X3
          SB5    X3          UPDATE PREVIOUS ENTRY
          BX2    X2+X7
          RJ     GRT
          BX6    X4+X7
          SA6    A4 
          PX6    X2,B6
          SA6    B7 
 MQE2     BX6    X5          MAKE ENTRY 
          SA6    A1 
          SX2    B0+         INDICATE CURRENT ENTRY 
          EQ     MQEX        RETURN 
  
 MQE3     BX2    X7 
          LX7    18 
          BX2    X2+X7
          PX6    X2,B6
          SA6    B7 
          EQ     MQE2 
  
 MQE4     MX2    12 
          BX2    X2*X1
          ZR     X2,MQE5     IF POT NOT NEEDED
          SX2    B7          INDICATE QUEUE IN STACKED ENTRY
          BX6    X5+X2
          SA6    MQEA 
          BX7    X7-X7
          SB7    B1          SET NUMBER OF POTS NEEDED
          RJ     GZP         GET ZEROED POT 
          ZR     X7,MQE8     IF NO POT AVAILABLE
          LX7    3
          TX5    X7,VBMP
          LX7    15 
          BX7    X5+X7
          TA1    B2,VRAP     PUT POT POINTER IN REENTRY TABLE 
          SA7    A1          SET POT POINTER
          BX6    X1 
          SA6    X5          SAVE CURENT ENTRY
          SA1    MQEA 
          BX6    X1 
          SA6    A6+B1
          SX2    B1          INDICATE STACKED ENTRY 
          EQ     MQEX        RETURN 
  
 MQE5     SB4    B5+B1
          SB6    B5+VCPC-1   ALLOW UP TO 7 QUEUE ENTRIES
 MQE6     SA1    B5 
          SB5    B5+B1
          ZR     X1,MQE7     IF EMPTY SLOT FOUND
          NE     B5,B6,MQE6  IF NOT AT END OF POT 
          EQ     MQE8 
  
 MQE7     EQ     B4,B5,MQE1  IF FIRST ENTRY IN POT
          SX2    B7          INDICATE QUEUE IN STACKED ENTRY
          BX6    X5+X2
          SX2    B1          INDICATE STACKED ENTRY 
          SA6    A1          MAKE ENTRY 
          EQ     MQEX        EXIT 
  
 MQEA     CON    0
 MVA      SPACE  4,20 
**        MVA - MOVE MESSAGE INTO POTS. 
* 
*         MOVES A MESSAGE INTO POTS, ADDS A *0001* CONTROL BYTE 
*         IF NECESSARY, AND ASSIGNS THE POTS TO TERMINAL OUTPUT.
* 
*         ENTRY  (X6) = ADDRESS OF MESSAGE IN DISPLAY CODE FORMAT.
*                (B3) = FIRST POT OF CHAIN IF ONE PROVIDED. 
*                (B4) = LENGTH OF MESSAGE.
*                       0, IF MESSAGE IS SIX CM WORDS OR LESS IN LENGTH 
*                       AND TERMINATES WITH AN EOL. 
* 
*         EXIT   MESSAGE ASSIGNED TO THE TERMINAL.
* 
*         USES   X - 1, 5, 6, 7.
*                A - 1, 6.
*                B - 4, 5, 6, 7.
* 
*         CALLS  ASM, CTP, DPT, GPC, GPL. 
  
  
 MVA      SUBR               ENTRY/EXIT 
          ZR     B4,MVA2     IF NO WORD COUNT SPECIFIED 
          SB5    2
          RJ     CTP         COPY MESSAGE TO POTS 
          ZR     X6,MVA5     IF COPY UNSUCCESSFUL 
          LX6    24          SET POT COUNT
          SA6    B4 
          SB5    B6-VCPC
          ZR     B5,MVA1     IF LAST POT EXACTLY FULL 
          SX6    2R"EB"      ADD *0001* CONTROL BYTE
          LX7    3
          LX6    48 
          TX7    X7,VBMP
          SA6    X7+B6
 MVA1     SX7    B3+
          SX6    B0+         ZERO OUT SECOND WORD OF POT CHAIN HEADER 
          BX5    X7 
          LX5    3
          TA6    X5+1,VBMP
          RJ     ASM         ASSIGN MESSAGE TO TERMINAL 
          EQ     MVAX        EXIT 
  
 MVA2     SB6    6
          SA6    MVAA 
          RJ     GPC         GET POT CHAIN OF DEFAULT LENGTH
          ZR     X6,MVA5     IF POTS NOT OBTAINED 
          SX7    B1          SET POT COUNT FOR MESSAGE
          LX7    24 
          SA7    B4 
          SA1    MVAA 
          SB5    B4+VCPC
          SA1    X1-1 
          SB4    B4+2 
          MX5    -12
 MVA3     SA1    A1+1        GET NEXT WORD OF MESSAGE 
          SB4    B4+B1
          BX6    X1 
          SA6    B4-B1       ADD WORD TO POT
          BX6    -X5*X6 
          ZR     X6,MVA4     IF END OF MESSAGE REACHED
          GT     B5,B4,MVA3  IF MORE ROOM IN POT
 MVA4     EQ     B4,B5,MVA1  IF NO NEED FOR A *0001* BYTE 
          SX6    2R"EB" 
          LX6    48 
          SA6    B4+
          EQ     MVA1        ASSIGN MESSAGE TO TERMINAL 
  
*         IF A MESSAGE CANNOT BE ASSIGNED TO THE TERMINAL, ANY
*         POTS SUPPLIED BY THE CALLER ARE DROPPED TO AVOID POT
*         CANCER. 
  
 MVA5     ZR     B3,MVAX     IF NO POTS WERE PROVIDED 
          SB4    B0+
          RJ     DPT         DROP POTS
          EQ     MVAX        EXIT 
  
 MVAA     CON    0           MESSAGE ADDRESS
 O6S      SPACE  4
**        O6S - CONVERT 6 DIGITS TO OCTAL DISPLAY CODE WITH TRAILING
*         ZERO FILL.
* 
*         ENTRY-
*         (X1) = NUMBER TO BE CONVERTED.
* 
*         EXIT- 
*         (X6) = CONVERTED NUMBER.
* 
*         USES- 
*         A - 2.
*         B - 7.
*         X - 2, 3, 7.
  
  
 O6S1     SB7    B7-B1
          AX3    6
          AX1    3
          AX7    6
          BX2    -X3*X1 
          NZ     X2,O6S2     IF NOT ZERO
          BX6    X6+X7
 O6S2     BX6    X2+X6
          ZR     X2,O6S3     IF ZERO
          SX7    B0          STOP ZERO SUPPRESS 
 O6S3     NZ     B7,O6S1     IF STILL MORE DIGITS TO CONVERT
          SA2    =6L000000
          ZR     X7,O6S4
          BX6    X6-X7
 O6S4     LX6    24 
          IX6    X2+X6
  
 O6S      SUBR               ENTRY/EXIT 
          SX6    B0 
          LX1    18 
          MX3    -3 
          LX3    36 
          SB7    6
          SX7    1R -1R0
          LX7    36 
          EQ     O6S1 
 PCB      SPACE  4
**        PCB - PACKS A COMMAND BUFFER ONE PARAMETER AT A TIME. 
* 
*         ENTRY  (X1) = FWA OF PARAMETER BUFFER.
*                SEE EXIT CONDITIONS FOR *SSP*. 
* 
*         EXIT   SEE EXIT CONDITIONS FOR *SSP* (EXCEPT X7). 
*                (B4) = FWA POT STORED IN.
*                (B6) = SHIFT COUNT FOR LAST CHARACTER INSERTED.
*                (B7) = LAST WORD OF POT STORED IN. 
* 
*         USES   X - 1, 2, 3, 4, 5, 7.
*                A - 1, 2, 7. 
*                B - 2, 5, 6, 7.
* 
*         NOTE   TABLE PROCESSED BY THIS ROUTINE SHOULD HAVE TWO
*                ZERO WORDS TERMINATING IT OR THE COMMAND PACKED
*                BY THIS ROUTINE SHOULD FILL A POT.  THESE CONDITIONS 
*                TERMINATE TABLE PROCESSING.
* 
  
  
 PCB      SUBR               ENTRY/EXIT 
          SB7    B4          SET POT ADDRESS
          SB5    B4+VCPC-1   SET ENDING POT ADDRESS 
          MX5    -6 
          SX4    B2          SAVE TERMINAL NUMBER 
          SA1    X1          READ FIRST PARAMETER 
          SA2    A1+B1       READ FIRST SEPARATOR 
          UX2,B2 X2         SET CHARACTER COUNT 
 PCB1     BX7    X7-X7       CLEAR ASSEMBLY WORD
          SB6    54 
 PCB2     SB2    B2-B1
          NG     B2,PCB4     IF END OF PARAMETER
          LX1    6           GET CHARACTER
          BX3    -X5*X1 
 PCB3     LX3    X3,B6       ENTER CHARACTER
          SB6    B6-6 
          BX7    X3+X7
          PL     B6,PCB2     IF ASSEMBLY WORD NOT FULL
          SA7    B7          STORE ASSEMBLY WORD
          SB7    B7+B1
          LE     B7,B5,PCB1  IF POT NOT FULL
          EQ     PCB6        RETURN 
  
 PCB4     SX3    X2          INSERT SEPARATOR 
          SA1    A2+B1       GET NEXT PARAMETER 
          SA2    A1+B1       GET NEXT SEPARATOR 
          UX2,B2 X2 
          SX2    X2 
          NZ     X2,PCB3     IF NOT END OF BUFFER 
          PL     B2,PCB3     IF NOT END OF BUFFER 
          LX3    X3,B6       STORE LAST SEPARATOR 
          BX7    X3+X7
          SA7    B7          STORE LAST ASSEMBLY WORD 
          EQ     B5,B7,PCB6  IF POT FULL
          BX7    X7-X7
 PCB5     SA7    B5          CLEAR REST OF POT
          SB5    B5-B1
          NE     B5,B7,PCB5  IF NOT END OF POT
 PCB6     SB2    X4          RESTORE TERMINAL NUMBER
          EQ     PCBX        RETURN 
 PKW      SPACE 4,10
**        PKW - PACK WORD.
* 
*         ENTRY  (X2) = WORD TO BE PACKED.
*                (X6) = WORD TO BE PACKED INTO. 
*                (B5) = BITS LEFT IN X6.
*                (A6) = LWA OF MESSAGE ALREADY FORMATTED. 
* 
*         EXIT   ALL ABOVE REGISTERS UPDATED. 
* 
*         USES   X - 2, 3, 6, 7.
*                A - 6. 
*                B - 5, 6.
  
  
 PKW      SUBR
 PKW1     NZ     B5,PKW2     IF ROOM IN WORD
          SA6    A6+B1
          BX6    X6-X6
          SB5    60 
 PKW2     MX3    -6 
          LX2    6
          BX7    -X3*X2      NEXT CHARACTER 
          BX2    X2*X3       CLEAR CHARACTER
          ZR     X7,PKWX     IF NO CHARACTER
          LX6    6
          BX6    X6+X7
          SB5    B5-6 
          EQ     PKW1        START NEW WORD 
 RCM      SPACE  4,10 
**        RCM - RESET CHARACTER MODE. 
* 
*         USES   X - 1, 2, 7. 
*                A - 1, 7.
  
  
 RCM      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT
          MX2    -1 
          LX2    18 
          BX7    -X2*X1      INITIAL CHARACTER SET
          SA1    A0+VDCT
          LX2    51-18
          BX2    X2*X1       CLEAR CURRENT CHARACTER SET
          LX7    51-18
          BX7    X2+X7       MERGE INITIAL CHARACTER SET
          SA7    A1          REWRITE VDCT 
          EQ     RCMX        EXIT 
 PLO      SPACE  4,10 
**        PLO - PROCESS LIST OPTIONS. 
* 
*         ENTRY  (LISA) = ADDRESS OF FIRST PARAMETER. 
*                (PBUF) = FIRST PARAMETER.
*                (CCMA) = PARAMETER COUNT.
* 
*         EXIT   TO *IPL* IF INCORRECT PARAMETER. 
*                TO *IED* IF *IEDIT* CALL REQUIRED. 
* 
*         CALLS  DXB, GFN, SSP, TPF.
  
  
 PLO      SUBR               ENTRY/EXIT 
          SA1    PBUF 
          SA3    CCMA 
          SX6    X3 
          SA6    PLOB        STORE PARAMETER COUNT
 PLO1     SA1    A1+2        GET NEXT PARAMETER 
          SX3    X3-1 
          ZR     X3,PLO2     IF NO MORE PARAMETERS
          NZ     X1,PLO1     IF NOT POSSIBLE STRING 
          SA2    A1+B1       CHECK IF DELIMITER 
          SB6    X2 
          SA2    PLOA 
          LX2    B6 
          NG     X2,IED      IF IMPLIED STRING
          EQ     PLO1        CONTINUE SEARCH
  
 PLO2     SA1    LISA        GET POINTER
          SX7    X1+2 
          SA2    PLOB 
          SA7    A1 
          SX6    X2-1 
          ZR     X6,PLOX     IF ALL PARAMETERS PROCESSED
          SA6    A2 
          SA1    X7 
          SA2    A1-B1
          SA4    PLOC        GET INCORRECT SEPARATOR MASK 
          SB6    X2 
          LX4    B6 
          NG     X4,IED      IF AN INCORRECT SEPARATOR
          ZR     X1,IED      IF A NULL PARAMETER
          SX4    1RF
          SX3    1RR
          BX2    X1 
          LX2    6
          BX4    X2-X4
          BX3    X2-X3
          ZR     X4,PLO7     IF FILE NAME OPTION
          ZR     X3,PLO8     IF *R* OPTION
  
*         LINE NUMBER PROCESSOR.
  
          SA4    LISC 
          NZ     X4,IED      IF MORE THAN ONE LINE SPECIFICATION
 PLO3     BX6    X1 
          SB7    B1 
          BX4    X6 
          LX4    6
          SA6    A4 
          SX6    1R*
          BX4    X4-X6
          ZR     X4,PLO4     IF BOI OR EOI
          BX5    X1 
          RJ     DXB         TRANSLATE LINE NUMBER
          RJ     SSP         RESET PARAMETER REGISTERS
          NZ     X4,IED      IF INCORRECT NUMBER
          EQ     PLO5        CONTINUE SCAN
  
 PLO4     SX6    B1+
          SA6    LISD        SET LINE RANGE FLAG
 PLO5     SA1    A1+B1
          SA2    A1+B1       GET NEXT PARAMETER 
          NZ     X2,PLO2     IF NOT NULL PARAMETER
          SB6    X1 
          SA2    A2+B1       EXAMINE SEPARATOR
          SB6    -B6
          SB6    B6+X2
          NZ     B6,PLO2     IF NOT ALIKE, NOT ELIPSIS
          SX6    X1-1R. 
          NZ     X6,IED      IF NOT AN ELLIPSIS 
          SA1    LISA        SKIP LINE RANGE
          SX6    X1+4 
          SA6    A1 
          SA1    PLOB 
          SX6    X1-2 
          SA6    A1 
          SA1    A2+B1       GET SECOND LINE NUMBER 
          SA4    LISE        LAST LINE NUMBER 
          NZ     X4,IED      IF ALREADY SPECIFIED 
          SX6    B1 
          SA6    A4-B1
          EQ     PLO3        CHECK VALIDITY 
  
*         FILE NAME OPTION. 
  
 PLO7     SA1    LISA        SET PARAMETER ADDRESS
          SX7    X1+2 
          SA7    A1 
          SA1    X1+B1
          SX1    X1-1R= 
          SA3    PLOB 
          NZ     X1,IED      IF NOT *=* 
          SX6    X3-1        DECREMENT PARAMETER COUNT
          SA6    A3 
          SB6    X7 
          RJ     GFN         GET FILE NAME
          SA1    LISB 
          NZ     X1,IED      IF MORE THAN ONE FILE PARAMETER
          BX6    X2 
          SA6    A1 
          EQ     PLO2        CONTINUE PROCESSING
  
*         *R* OPTION, NOW REPLACED WITH EXTERNAL COPY.
  
 PLO8     SMA    X6,( USE SCOPY FOR FILE STRUCTURE."NL")
          RJ     SSP
          EQ     PCS5        ISSUE MESSAGE
  
 PLOA     CON    74000000000033727777B  STRING DELIMITER MASK 
 PLOB     CON    0           PARAMETER COUNT
 PLOC     CON    50000000000000000000B  INCORRECT SEPARATOR MASK
 PMR      SPACE  4,15 
**        PMR - PROCESS MONITOR REQUEST.
* 
*         ENTRY  (B3) = POT POINTER TO PARAMETER BLOCK. 
*                (B4) = ADDRESS OF PARAMETER BLOCK. 
* 
*         EXIT   TO CALLER, EITHER DIRECTLY OR VIA PCS. 
*                (X2) = CONTENTS OF ERROR CODE FIELD. 
* 
*         USES   X - 1, 2, 5, 6, 7. 
*                A - 1, 2, 6, 7.
*                B - 7. 
* 
*         CALLS ABT.
* 
*         MACROS SYSTEM.
  
  
 PMR      SUBR               ENTRY/EXIT 
 PMR1     SYSTEM EJT,,B4
          SA1    B4 
          LX1    59-0 
          SX5    PMR2$
          SA2    PMRX        GET REENTRY ADDRESS
          LX2    30 
          SX7    X2 
          PL     X1,PCS1     IF NOT COMPLETE
  
*         REENTER HERE WHEN REQUEST IS COMPLETE.
  
 PMR2     SB7    X7 
          SA1    B4 
          LX1    -10
          MX2    -8 
          BX2    -X2*X1 
          ZR     X2,PMR3     IF NO ERRORS 
          SX6    X2-RTER
          NZ     X6,PMR2.1   IF NOT IMMEDIATE RETRY 
          SX6    1-RTER 
          EQ     PMR2.2      RETRY REQUEST AFTER REENTRY
  
 PMR2.1   SX6    X2-REER
          NZ     X6,PMR2.3   IF NOT RECOVERABLE DISK ERROR
          SX6    RTYDL-RTER  RETRY REQUEST AFTER DELAY
 PMR2.2   SX5    PMR4$       SET REENTRY ADDRESS
          IX6    X6+X1       SET DELAY COUNTER
          LX6    10 
          SA6    A1 
          EQ     PCS1        REENTER AND DELAY
  
 PMR2.3   SX6    X2-ISER
          ZR     X6,PMR3     IF INCORRECT SERVICE CLASS 
          SX6    X2-SFER
          ZR     X6,PMR3     IF SERVICE CLASS FULL
          SX6    X2-JFER-1
          PL     X6,PMR3     IF NO ABT CALL 
          SA7    PMRA        SAVE REENTRY ADDRESS 
          SX7    X2 
          SA7    A7+B1
          RJ     UEC         PROCESS ERROR CODE 
          SA1    PMRA 
          SB7    X1 
          SA2    A1+B1
 PMR3     JP     B7          RETURN TO CALLER 
  
 PMR4     SX5    PMR4$       DECREMENT DELAY COUNTER
          SX6    1S10 
          SA1    B4 
          IX6    X1-X6
          SA6    A1 
          SX1    X6 
          AX1    10 
          NZ     X1,PCS1     IF NOT TIME TO REISSUE REQUEST 
          LX7    30          RESET ENTRY
          SA7    PMRX 
          SA1    B4          CLEAR COMPLETE BIT 
          MX2    -1 
          BX6    X2*X1
          SA6    A1 
          EQ     PMR1        REENTER REQUEST
  
  
 PMRA     CON    0           SAVE REENTRY ADDRESS 
          CON    0           SAVE ERROR CODE
 PPB      SPACE  4,15 
**        PPB - PRESET PARAMETER BLOCK. 
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
*                (B4) = FWA OF PARAMETER BLOCK. 
*                (X7) = FUNCTION CODE.
* 
*         EXIT   WORDS 1 - 5 CLEARED. 
*                (X6) = 0.
*                (A7) = (B4). 
*                FOR RCEJ - (X7) = (WD 0) = FUNCTION CODE*2.
*                FOR ALL OTHERS - (X7) = (WD 0) = JSN, FUNCTION CODE. 
*                               - (X2) = EJT ORDINAL. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 6, 7. 
  
  
 PPB1     SA7    B4          SET WORD 0 
          BX6    X6-X6       CLEAR WORDS 1 - 5
          SA6    A7+1 
          MX1    EJPB-2 
          ERRNG  VCPC-EJPB   EJT RA+1 PARAMETER BLOCK LARGER THAN POT 
 PPB2     LX1    1
          SA6    A6+B1
          NG     X1,PPB2     IF MORE WORDS TO CLEAR 
  
 PPB      SUBR               ENTRY/EXIT 
          LX7    1
          MX6    24 
          SX2    X7-RCEJ*2
          ZR     X2,PPB1     IF RCEJ REQUEST
          SA1    A0+VFST
          BX2    X6*X1       JSN
          BX7    X2+X7
          SA1    A0+VUIT
          MX2    -12
          BX2    -X2*X1      EJT ORDINAL
          EQ     PPB1        CONTINUE 
 RPL      SPACE  4,15 
**        RPL - RESET POT LINK. 
* 
*         DROPS POTS THAT FOLLOW A SPECIFIED POT ON POT CHAIN 
*         UP TO AND INCLUDING A SECOND SPECIFIED POT. 
* 
*         ENTRY  (X7) = POT AFTER WHICH TO DROP POTS. 
*                (B7) = LAST POT TO DROP. 
* 
*         USES   X - 1, 2, 3, 5, 6, 7.
*                A - 1, 6.
*                B - 3, 4.
* 
*         CALLS  ABT, DPT.
  
  
 RPL1     SX6    3RRPL
          RJ     ABT
  
 RPL      SUBR               ENTRY/EXIT 
          ZR     X7,RPL1     IF ATTEMPTING TO DROP POTS AFTER ZERO
          LX7    58 
          TA1    X7,VPLP     READ PLT ENTRY 
          MX5    48 
          BX2    X5*X7       GET BYTE * 12
          LX2    4           BYTE * 4 
          LX3    X2,B1       BYTE * 8 
          IX2    X2+X3       BYTE * 12
          SB4    X2+12
          LX1    X1,B4       POSITION LINK BYTE 
          BX2    -X5*X1 
          ZR     X2,RPLX     IF END OF CHAIN RETURN 
          BX6    X5*X1       CLEAR LINK BYTE
          SB3    X2 
          SB4    B4-60       REPOSITION PLT WORD
          AX6    X6,B4       RESTORE PLT ENTRY WORD 
          SA6    A1 
          SB4    B7 
          RJ     DPT
          EQ     RPLX        RETURN 
 RPT      SPACE  4,25 
**        RPT - RESERVE POT(S). 
*         A POT OR POTS WILL BE RESERVED.  IF THERE ARE NOT ENOUGH
*         AVAILABLE *IAFEX* WILL BE ABORTED.
* 
*         ENTRY-
*         (X5) BYTE 4 = CURRENT POT.  IF CURRENT POT = 0, A NEW CHAIN 
*         WILL BE STARTED.
*         (X5) BYTE 0 = 200N, WHERE N = NUMBER OF POTS REQUESTED. 
* 
*         EXIT- 
*         (X7) = FIRST POT RESERVED OR IF A NEW CHAIN WAS NOT 
*                STARTED THE POT NUMBER THAT THE NEW POT WAS LINKED 
*                ONTO(THE POT NUMBER THAT WAS IN X5 UPON ENTRY
*                TO RPT). 
*         (X7) = 0, IF THE REQUEST CANNOT BE SATISFIED. 
*         (X1) = LAST POT RESERVED. 
* 
*         USES   A - 1, 2, 6 ,7.
*                B - 3, 4, 5, 6, 7. 
*                X - 1, 2, 3, 4, 5, 6, 7. 
* 
*         CALLS  ABT. 
  
  
 RPT      SUBR               ENTRY/EXIT 
          BX7    X5          SAVE REQUEST 
          SA7    RPTA 
          SA1    VPAL        GET TOTAL NUMBER OF POTS AVAILABLE 
          SA2    VPUL        GET NUMBER OF POTS IN USE
          UX3,B7 X5          FIND NUMBER OF POTS REQUESTED
          BX7    X3          SET RETURN POT POINTER 
          ZR     B7,RPT3     IF BAD POT COUNT 
          NG     B7,RPT3     IF BAD POT COUNT 
          SX6    X2+B7
          IX1    X1-X6
          NG     X1,RPT3     IF NOT ENOUGH POTS AVAILABLE 
          SB3    3
          LX4    X1,B3
          SX4    X4-VFLI     SET LAST SEGMENT USED FLAG 
          PL     X4,RPT0     IF MORE THAN ONE INCREMENT SEGMENT FREE
          SA6    SPRG 
 RPT0     SA6    A2          UPDATE POTS IN USE COUNT 
          MX5    48 
          TB6    0,VPLP      SET FWA OF PLT 
          MX4    -4          (X4) = -17B
          SA1    B6          READ FIRST ENTRY 
          SB5    -48
 RPT1     BX6    -X4*X1      GET RESERVATION BITS 
          IX6    X4+X6
          SA1    A1+1        READ NEXT ENTRY
          ZR     X6,RPT1     IF NO FREE POTS
          NX6    X6,B3       GET BYTE NUMBER + 44 
          SA1    A1-B1
          SX6    B1          SET RESERVATION BIT
          LX6    47 
          SB4    A1-B6       SET RELATIVE WORD ADDRESS
          AX6    X6,B3       POSITION RESERVATION BIT 
          SX2    -44/4+B4    BUILD PARTIAL POT POINTER
          BX6    X1+X6       RESERVE POT
          SA6    A1 
          LX2    2
          SX1    X2+B3       ADD BYTE NUMBER TO COMPLETE POT POINTER
          SB7    B7-1        DECREMENT POTS NEEDED
          ZR     X3,RPT2     IF START OF NEW CHAIN
          LX3    58          UPDATE PREVIOUS WORD 
          SA2    B6+X3
          BX3    X5*X3       GET BYTE * 12
          LX3    4           BYTE * 4 
          LX6    X3,B1       BYTE * 8 
          IX6    X3+X6       BYTE * 12
          SB3    X6+B5       SET BYTE * 12 - 48 
          AX6    X1,B3       POSITION LINK POINTER
          BX6    X2+X6       MERGE LINK POINTER 
          SA6    A2 
          ZR     B7,RPTX     IF REQUEST FILLED
          BX3    X1          SET POT TO ADD LINK BYTE TO
          SA1    A1 
          EQ     RPT1 
  
 RPT2     BX7    X1          SET RETURN POINTER 
          ZR     B7,RPTX     IF REQUEST FILLED
          BX3    X1 
          SA1    A1 
          EQ     RPT1 
  
 RPT3     SX6    3RRPT
          RJ     ABT
          BX7    X7-X7
          EQ     RPTX 
  
 RPTA     CON    0           CURRENT POT REQUEST
 RQI      SPACE  4,10 
**        RQI - REQUEST INPUT.
* 
*         ISSUE TERMINAL INPUT REQUEST MESSAGE, SET READ DATA,
*         AND MAKE INPUT QUEUE ENTRY. THE ADDRESS TO WHICH
*         CONTROL RETURNS AFTER OPERATOR INPUT IS EXTRACTED 
*         FROM THE SUBROUTINE ENTRY POINT RATHER THAN PRESET
*         BY THE CALLER IN (X7) AS IN SUBROUTINE *IIR*. 
* 
*         ENTRY  (VDCT) = INTERLOCK CLEAR.
*                (B3) = POT POINTER FOR MESSAGE.
*                (B4) = MESSAGE LENGTH. 
*                (B5) = RETURN POT POINTER. 
*                (X6) = MESSAGE ADDRESS.
* 
*         EXIT   TO CALL AFTER INPUT (SEE CLI.) 
*                (B5) = RETAINED. 
* 
*         CALLS  IIR. 
  
  
 RQI      SUBR               ENTRY (EXIT THROUGH *IIR*) 
          SA1    RQI         SET REENTRY ADDRESS
          AX1    30 
          SX7    X1 
          JP     IIR         REQUEST INPUT
 RST      SPACE  4,10 
**        RST - RESTART SUSPENDED JOB.
* 
*         ENTRY  SEE SSP. 
*                (B3) = INPUT POT POINTER.
*                (PBUF) = OPERATOR INPUT. 
*                         *CR* = CONTINUE.
*                         *P* = CONTINUE BUT DROP OUTPUT. 
*                         OTHER = END JOB.
  
  
 RST      BSS    0           ENTRY
          SA1    PBUF 
          ZR     X1,RST1     IF *CR* - CONTINUE JOB 
          LX1    -54
          SX6    B1 
          SX1    X1-1RP 
          NZ     X1,STO      IF NOT *P* NOR *CR* THEN TERMINATE JOB 
          SA2    A0+VROT
          LX6    4-0
          BX6    -X6*X2      CLEAR OUTPUT AVAILABLE FLAG
          SA6    A2+
  
*         RESTART JOB.
  
 RST1     RJ     INO         ISSUE NULL OUTPUT
          SA1    A0+VROT
          SX6    137B 
          BX6    X1*X6
          SX6    X6-1 
          ZR     X6,RDY      IF NO ACTIVITY 
          EQ     RES         RESTART JOB
 SFC      SPACE  4,10 
**        SFC - SEND SFCALL.
* 
*         PARAMETER BLOCK FORMAT =
*T        6/ REPLY,12/ FCN PARAM,18/ UCP ADDR,18/ SCP ADDR,6/FCN CD 
*T        24/ UCP JSN,24/0,12/ UCP EJTO 
* 
*         ENTRY  (X6) = FORMATTED FIRST WORD OF MESSAGE.
*                (X7) = UCP IDENTIFICATION (JSN AND EJTO).
* 
*         EXIT   (X1) = RETURN CODE.
*                (X7) = UNCHANGED.
* 
*         USES   X - 1, 4, 6, 7.
*                A - 1, 4, 6, 7.
*                B - 2. 
* 
*         MACROS SFCALL.
  
  
 SFC      SUBR               ENTRY/EXIT 
          SA6    SFCA 
          SA7    A6+B1
          SFCALL SFCA,R 
          SA1    SFCA        CHECK RETURN CODE
          SA4    A1+B1       RESET UCP ID 
          BX7    X4 
          MX6    6
          BX1    X6*X1
          EQ     SFCX        EXIT 
  
  
 SFCA     BSS    2           BUFFER FOR SENDING SFCALL
 SLF      SPACE  4,20 
**        SLF - SET LOGOUT FLAG.
* 
*         SETS LOGOUT FLAG IN TERMINAL TABLE. 
* 
*         EXIT   (VSTT) = LOGOUT FLAG BIT 48 SET. 
* 
*         USES   A - 1, 6.
*                X - 1, 6.
  
  
 SLF      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT     READ VSTT ENTRY
          SX6    B1          SET LOGOUT FLAG
          LX6    48-0 
          BX6    X6+X1
          SA6    A1          REWRITE VSTT ENTRY 
          EQ     SLFX        RETURN 
 SRC      SPACE  4
**        SRC - SET RUN COMPLETE MESSAGE FLAG.
* 
*         USES- 
*         A - 1, 6. 
*         B - NONE. 
*         X - 1, 6. 
  
  
 SRC      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT
          SX6    B1 
          LX6    51 
          BX6    X1+X6
          SA6    A1 
          EQ     SRCX        RETURN 
 SRR      SPACE  4
**        SRR - SET READ DATA AND REENTRY.
* 
*         SET UP INPUT REENTRY REQUEST AND SET *READ DATA*
*         BIT.  A POT POINTER MAY BE PASSED IN B5 AND RETURNED
*         IN B5 BY *CLI* AFTER INPUT. 
* 
*         ENTRY  (VDCT) = INTERLOCK CLEAR.
*                (B5) = RETURN POT POINTER
*                (X7) = REENTRY ADDRESS.
* 
*         EXIT   (VDCT) = *READ DATA* BIT SET.
*                INP$ QUEUE ENTRY MADE. 
* 
*         USES   A - 1, 7.
*                X - 1, 5, 6, 7.
*                B - 7. 
* 
*         CALLS  MQE. 
  
  
 SRR      SUBR               ENTRY/EXIT 
          SX5    INP$        SET UP QUEUE ENTRY 
          LX7    24 
          SX1    B5          SET RETURN POT POINTER 
          MX6    -12
          LX5    48 
          BX1    -X6*X1 
          IX7    X5+X7       MERGE QUEUE POINTER AND REENTRY
          LX1    12 
          BX5    X7+X1       MERGE RETURN POT POINTER 
          SB7    B0+         INDICATE NULL QUEUE
          RJ     MQE         MAKE QUEUE ENTRY 
          SA1    A0+VDCT     SET *READ DATA*
          SX6    B1 
          LX6    54-0 
          BX7    X6+X1
          SA7    A1 
          EQ     SRRX        RETURN 
 SSI      SPACE  4,10 
*         SSI - SEND SRU AND CHARACTER COUNT INFORMATION. 
* 
*         ENTRY  (B4) = FWA OF *EJT* CALL PARAMETER BLOCK.
*                (X6) = TIMEOUT MESSAGE FLAG. 
* 
*         EXIT   TERMINAL TIMEOUT, SRU AND CHARACTER COUNT MESSAGES 
*                ASSIGNED.
* 
*         CALLS  CFD, MVA, SFN, SSP.
* 
*         MACROS CLOCK. 
  
  
 SSI      SUBR               ENTRY/EXIT 
          SA6    SSIH        SAVE TIMEOUT FLAG
          SA1    A0+VUIT     GET USER NAME
          MX2    42 
          BX1    X2*X1
          SA3    =3LUN= 
          LX1    42 
          BX1    X1+X3
          RJ     SFN         SPACE FILL USER NAME 
          SA6    SSIC 
          SA1    A0+VFST
          SA2    =6L  JSN=
          MX3    24 
          BX1    X1*X3
          LX1    24 
          BX6    X1+X2
          LX6    12 
          SA6    SSIE 
          SA5    B4+4        READ TERMINAL CHARACTER COUNTS 
          SA1    B4+B1       SET ACCUMULATED SRU-S
          AX1    12 
          SA3    FSMC        SRU CONSTANT (.0001) 
          PX1    X1 
          FX1    X3*X1       DIVIDE ACCUMULATOR VALUE BY 1000 
          RJ     CFD         CONVERT TO F10.3 FORMAT
          SA6    SSIF 
          MX0    -12         COMPUTE TOTAL CHARACTER COUNT
          MX1    -24
          BX0    -X0*X5 
          LX5    -12
          BX1    -X1*X5 
          IX1    X1+X0
          RJ     CFD         CONVERT TO F10.3 FORMAT
          SX7    1R=&1R 
          LX7    54 
          BX6    X6-X7
          SA6    SSIG        SET CHARACTER COUNT
          CLOCK  SSID 
          RJ     SSP         RESET REGISTERS
          SB4    SICL        SET MESSAGE LENGTH 
          SX6    SSIC        SET MESSAGE ADDRESS
          SA1    SSIH 
          ZR     X1,SSI1     IF NO TIMEOUT MESSAGE
          SB4    SIAL        RESET MESSAGE LENGTH AND ADDRESS 
          SX6    SSIA 
 SSI1     RJ     MVA         MOVE MESSAGE 
          EQ     SSIX        EXIT 
  
  
 SSIA     DATA   30L"EM""NL"TERMINAL TIME OUT - JSN = 
 SSIB     DATA   5LJSNA.
 SSIC     DATA   10HUN=USERNAM
          DATA   10H  LOG OFF 
 SSID     DATA   10H HH.MM.SS.
          DATA   1L          EOL
 SSIE     DATA   10HJSN=JSNA
          DATA   10H   SRU-S= 
 SSIF     DATA   10H 12345.678
          DATA   1L          EOL
          DATA   10HCHARACTERS
 SSIG     DATA   10H=12345.678
          DATA   4LKCHS      EOL
 SICL     EQU    *-SSIC 
 SIAL     EQU    *-SSIA 
  
 SSIH     CON    0           TIMEOUT MESSAGE FLAG 
 SSP      SPACE  4,10 
**        SSP - RESET PARAMETERS FROM STACK ENTRY.
* 
*         ENTRY  (SSPA) = STACK ENTRY PARAMETER WORD. 
* 
*         EXIT   (A0) = FWA OF USER TERMINAL TABLE. 
*                (X5) = STACK ENTRY (SSPA). 
*                (X7) = STACK ENTRY BITS 47-24, RIGHT JUSTIFIED.
*                (B2) = STACK ENTRY BITS 11-0 (TERMINAL NUMBER).
*                (B3) = STACK ENTRY BITS 23-12 (POT POINTER). 
*                (B4) = ((B3) * 10B) + VBMP (POT ADDRESS).
* 
*         USES   A - 5. 
*                X - 1, 2.
  
  
 SSP1     MX1    -12
          BX2    -X1*X5 
          SB2    X2          (B2) 
          TTADD  X2,A0,X2,X7  (A0)
          BX7    X5 
          AX7    12 
          BX2    -X1*X7 
          MX1    -24
          SB3    X2          (B3) 
          LX2    3
          TB4    X2,VBMP     (B4) 
          AX7    12 
          BX7    -X1*X7      (X7) 
  
 SSP      SUBR               ENTRY/EXIT 
          SA5    SSPA        (X5) 
          EQ     SSP1 
 SSS      SPACE  4,20 
**        SSS - SET SSP PARAMETERS. 
* 
*         INITIALIZE LOCATION *SSPA* FOR *SSP* CALLS. 
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                (B3) = POT POINTER.
*                (X7) = 24/ANYTHING.
* 
*         EXIT   (SSPA) = SET.
*                (A0)   = (B2) TERMINAL TABLE ADDRESS.
*                (B4)   = (B3) POT ADDRESS. 
*                (X5)   = (SSPA). 
* 
*         USES   A - 6. 
*                X - 1, 2, 5, 6.
  
  
 SSS      SUBR               ENTRY/EXIT 
          TTADD  B2,A0,X5,X2 SET (A0) = TERMINAL TABLE ADDRESS
          MX2    -24
          BX5    -X2*X7      MASK (X7)
          MX2    -12
          LX5    24 
          SX1    B3          SET (B3) 
          BX1    -X2*X1 
          LX1    12 
          BX5    X5+X1
          SX1    B2          SET TERMINAL NUMBER
          BX1    -X2*X1 
          IX5    X5+X1
          BX6    X5          STORE *SSPA* 
          SA6    SSPA 
          ZR     B3,SSSX     IF NO (B3) POT POINTER 
          SX1    B3          SET POT ADDRESS
          LX1    3
          TB4    X1,VBMP
          EQ     SSSX        RETURN 
 TPF      SPACE 4 
**        TPF - TEST PRIMARY FILE NAME. 
* 
*         ENTRY-
*         (X1) = NAME TO BE COMPARED AGAINST. 
* 
*         EXIT- 
*         (X1) = NAME COMPARED AGAINST. 
*         (X2) = ((A0+VFNT))
*         (X6) = 0, IF NAME SAME AS PRIMARY FILE NAME.
* 
*         USES- 
*         X3, X4. 
  
  
 TPF      SUBR               ENTRY/EXIT 
          SA2    A0+VFNT
          MX3    42 
          BX4    X3*X2
          BX6    X1-X4
          EQ     TPFX 
 UCP      SPACE  4,10 
**        UCP - UPDATE CONVERTED POINTER WORD.
* 
*         CONVERT SPECIFIED VALUE TO DECIMAL DISPLAY CODE.
*         CODE ADAPTED FROM *COMCCDD*.
* 
*         ENTRY  (A1) = *VANL* OR *VTNL*. 
*                (X6) = VALUE.
* 
*         EXIT   WORD *VCAL* OR *VCTL* UPDATED. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 2, 3, 5, 6.
*                B - 4, 5, 6. 
  
  
 UCP      SUBR               ENTRY/EXIT 
          SA2    UCPA 
          SA3    A2+1 
          SA5    A3+1        (X5) = BACKGROUND
          SB4    1R0-1R      (B4) = CONVERSION
          SB5    6
          PX1    X6 
          SB6    -B5
 UCP1     DX6    X2*X1       EXTRACT REMAINDER
          FX1    X2*X1
          SX4    X1 
          LX5    -6 
          SB6    B6+B5       ADVANCE SHIFT COUNT
          FX6    X3*X6       EXTRACT DIGIT
          SX7    X6+B4       CONVERT DIGIT
          IX5    X5+X7       ADVANCE ASSEMBLY 
          NZ     X4,UCP1     IF REMAINDER .NE. ZERO 
          LX6    X5,B6       LEFT JUSTIFY ASSEMBLY
          SA6    A1+VCTL-VTNL 
          ERRNZ  VCAL-VCTL-1  CODE REQUIRES CONTIGUOUS WORDS
          ERRNZ  VANL-VTNL-1  CODE REQUIRES CONTIGUOUS WORDS
          EQ     UCPX        RETURN 
  
 UCPA     CON    0.1P48+1 
          CON    10.0P
          CON    10L
 UEC      SPACE  4,10 
**        UEC - UNEXPECTED ERROR CODE PROCESSOR.
* 
*         ENTRY  (X2) = ERROR CODE. 
* 
*         EXIT   TO ABT.
* 
*         USES   X - 6. 
*                A - 6. 
* 
*         CALLS  ABT. 
  
  
 UEC      SUBR               ENTRY/EXIT 
          SX6    B3          SAVE PARAMETER BLOCK POT POINTER 
          LX6    12 
          BX6    X2+X6
          SA6    UECA        STORE ERROR CODE 
          SX6    3RUEC
          RJ     ABT         ABORT PROCESSOR
          EQ     UECX        EXIT 
  
  
 UECA     CON    0           UNEXPECTED ERROR CODE
 UQS      SPACE  4
**        UQS - UPDATE QUEUE STACK. 
* 
*         PACKS UP THE TERMINALS REENTRY STACK.  THE NEXT 
*         QUEUE ENTRY WILL BE PLACED IN THE QUEUE INDICATED 
*         IN BYTE 4 OF THE STACKED ENTRY. 
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
* 
*         EXIT   TERMINAL REENTRY QUEUE UPDATED.
*                STACKED QUEUE POTS DROPPED IF QUEUE EMPTIED. 
* 
*         CALLS  DPT, MQE.
  
  
 UQS      SUBR               ENTRY/EXIT 
          TA1    B2,VRAP
          ZR     X1,UQSX     IF NO ENTRY TO UPDATE
          MX2    12 
          BX2    X2*X1
          NZ     X2,UQSX     IF NO STACKED ENTRIES
          SA3    X1          GET FIRST ENTRY IN QUEUE 
          NZ     X3,UQSX     IF ENTRY PLACED BACK IN QUEUE
          SX7    B2          SET A0 
          TTADD  X7,A0,X7,X5
          SX7    B0          CLEAR NEXT ENTRY POINTER 
          SB5    X1+1        SET NEXT ENTRY ADDRESS 
          SA7    UQSA 
          SB7    X1+VCPC     SET POT LIMIT
  
*         LOCATE NEXT ENTRY.
  
 UQS1     SA5    B5          GET NEXT ENTRY 
          SB5    B5+B1
          NZ     X5,UQS2     IF ENTRY FOUND 
          LT     B5,B7,UQS1  IF END OF POT NOT REACHED
 UQS2     BX6    X5          SAVE NEXT ENTRY TO BE PROCESSED
          SA6    A7 
          SA7    A5+         CLEAR ENTRY POSITION 
          EQ     B5,B7,UQS5  IF STACK EMPTY 
          SB6    X1+1        SET INSERT POINTER FOR MOVE
  
*         PUSH UP STACK.
  
 UQS3     SA5    B5          GET NEXT ENTRY 
          ZR     X5,UQS4     IF NULL ENTRY
          BX6    X5          MOVE ENTRY 
          SA6    B6 
          SA7    B5          CLEAR ENTRY POSITION 
          SB5    B5+1        INCREMENT POINTERS 
          SB6    B6+1 
          NE     B5,B7,UQS3  IF NOT END OF POT
 UQS4     SA5    X1+1        CHECK POT ENTRY
          NZ     X5,UQS6     IF POT NOT EMPTY 
  
*         DROP STACK POT IF EMPTIED.
  
 UQS5     SA7    A1          CLEAR POT ADDRESS
          AX1    18D         DROP EMPTY POT 
          SB3    X1 
          SB4    X1 
          RJ     DPT
  
*         PLACE NEXT ENTRY IN QUEUE.
  
 UQS6     SA5    UQSA        ENTER NEXT ENTRY IN QUEUE
          ZR     X5,UQSX     IF NO ENTRY
          MX4    -12         GET CORRECT QUEUE
          BX4    -X4*X5 
          BX5    X5-X4       CLEAR QUEUE POINTER FROM ENTRY 
          SB7    X4 
          RJ     MQE         MAKE QUEUE ENTRY 
          NZ     X2,UQSX     IF NOT CURRENT ENTRY 
          SB7    B7-ITAQ
          ZR     B7,UQS7     IF 1TA CALL
          SB7    B7-ITOQ+ITAQ 
          NZ     B7,UQSX     IF NOT 1TO NOR 1TA CALL
 UQS7     UX6,B7 X6          CHECK QUEUE ENTRY
          MX2    59 
          SB5    B7-ITA1$+2000B 
          ZR     B5,UQSX     IF STATUS REQUEST
          SA1    A0+VROT
          MX2    59 
          BX6    X1*X2
          SA6    A1          REWRITE VROT 
          JP     UQSX 
  
 UQSA     CON    0           NEXT ENTRY TO BE PLACED IN QUEUE 
          TITLE SMFIF - SCREEN MANAGEMENT FACILITY INTERFACE. 
          QUAL   SMFIF
***       SMFIF - SCREEN MANAGEMENT FACILITY INTERFACE. 
* 
*         SMFIF PROCESSES COMMUNICATIONS FOR SMFEX, THE 
*         SCREEN MANAGEMENT FACILITY EXECUTIVE, AND FOR FSE, THE
*         FULL SCREEN EDITOR.  A USERS EDITING SESSION PASSES 
*         BETWEEN FSE AND SMFEX DEPENDING ON THE COMMANDS 
*         ENTERED AND THE AVAILABILITY OF SMFEX.  IF SMFEX
*         IS NOT RUNNING, FSE IS CAPABLE OF HANDLING THE ENTIRE 
*         SESSION, TRANSPARENTLY TO USERS, BUT POSSIBLY SLOWER. 
* 
*         A WALK-THROUGH OF AN FSE/SMFEX SESSION. 
* 
*         1. THE USER INVOKES THE EDITOR WITH THE COMMAND *FSE*.
*            IAFEX SCHEDULES FSE AS AN ORDINARY COMMAND.
* 
*         2. FSE BUILDS THE WORKFILE AND THEN ATTEMPTS TO 
*            ESTABLISH A CONNECTION BETWEEN THE TERMINAL
*            AND SMFEX USING THE *TLX* FILE TRANSFER FUNCTION.
* 
*         3. TLX TESTS FOR THE PRESENCE OR ABSENCE OF SMFEX, AND
*            TESTS SUBSYSTEM ENABLE STATUS TO DETERMINE IF SMFEX IS 
*            WILLING TO ACCEPT ADDITIONAL USERS.  IF SMFEX IS READY,
*            TLX GENERATES A LOCAL FNT IN SMFEX AND DISABLES FSE
*            FROM SIMULTANEOUS ACCESS TO THE SHARED FILE BY 
*            LIMITING FSE-S FNT ATTRIBUTES AND ROLLING FSE OUT WITH 
*            PP RECALL BACK INTO TLX.  TLX THEN NOTIFIES IAFEX OF 
*            THE CONNECTION VIA THE VCSM TSEM FUNCTION. 
* 
*         4. IAFEX RESPONDS TO THE CONNECTION EVENT BY FLAGGING THE 
*            TERMINAL WITH NON-ZERO SMFEX CONNECTION STATE AND
*            SENDING A MESSAGE TO SMFEX SO THAT IT CAN VERIFY 
*            VALIDITY OF FILE FORMAT AND PREPARE TO ACCEPT THE USER-S 
*            INPUT. 
* 
*         5. SO LONG AS THE SMFEX CONNECTION STATE REMAINS NON-ZERO,
*            ALL TERMINAL I/O IS PROCESSED BY THE SMFIF INTERFACE AS
*            MESSAGES TO AND FROM SMFEX.
* 
*         6. WHEN SMFEX ENCOUNTERS ANY REQUEST IT CANNOT SATISFY, IT
*            RETURNS ITS LOCAL FNT, SCHEDULES ROLLIN OF FSE, AND
*            NOTIFIES IAFEX THAT THE CONNECTION IS FINISHED.
* 
*         7. TLX IS RECALLED UPON ROLLIN TO VERIFY VALID RE-TRANSFER
*            OF THE SHARED FILE.  FSE THEN RESUMES EXECUTION AND SCANS
*            FILE CONTENT TO DETERMINE THE OPERATION LEFT BY SMFEX. 
*            FSE MAY THEN DECIDE TO TERMINATE THE JOB STEP OR TO
*            ONCE AGAIN CONNECT TO SMFEX. 
          EJECT 
**        FORMAT OF IAFEX/SMFEX BUFFERS.
* 
*T WORD 0 12/FUNCTION,12/TERMINAL,18/POINTER,18/LENGTH
*T,WORD N   (TERMINAL I/O DATA) 
* 
*         FUNCTION - FUNCTION CODE ORDINAL. 
* 
*         TERMINAL - CONNECTION NUMBER. 
* 
*         POINTER - ADDRESS WITHIN SMFEX OF IAF-TO-SMF BUFFER.
*                THIS FIELD IS USED ONLY IN INITIALIZATION. 
*                POINTER-1 WILL BE ADDRESS OF IDLEDOWN BUFFER.
* 
*         LENGTH - LENGTH OF MESSAGE INCLUDING THIS WORD. 
          SPACE  4,10 
**        SMFIF ASSEMBLY PARAMETERS.
  
  
 NWSS     EQU    100B        NUMBER OF WORDS IN IAF TO SMF QUEUE
 NWDB     EQU    300B        NUMBER OF WORDS IN DEBUGGING BUFFER
*                            (IF 0, DO NOT ASSEMBLE DEBUGGING CODE) 
          SPACE  4,10 
**        SMFEX-TO-IAFEX FUNCTIONS. 
  
  
          BSS    0           (FORCE UPPER)
 .SAVE    SET    *
          LOC    0
 FSIN     BSS    1           SMFEX INITIALIZED
 FAOT     BSS    1           ASSIGN OUTPUT TO TERMINAL
 FAOI     BSS    1           ASSIGN OUTPUT AND REQUEST INPUT
 FDSC     BSS    1           DISCONNECT TERMINAL FROM SMFEX 
 NMSF     BSS    0           NUMBER OF SMFEX FUNCTIONS
          SPACE  4,10 
**        IAFEX-TO-SMFEX FUNCTIONS. 
  
  
          LOC    0
 FIIN     BSS    1           IAFEX INITIALIZED
 FCLI     BSS    1           COMMAND LINE FROM TERMINAL 
 FRES     BSS    1           DRIVER REQUESTS MORE OUTPUT
 FPUB     BSS    1           PROCESS USER BREAK FROM TERMINAL 
 FHUP     BSS    1           PHONE HUNG-UP
 FCSM     BSS    1           CONNECT TO SMF 
          ORG    .SAVE
          EJECT 
***       SMFIF PROCESSING. 
* 
*         SMFIF RECEIVES CONTROL FROM IAFEX IN THREE WAYS.
* 
*         1. FROM THE IAFEX MAIN LOOP, WHICH USES THE *CSS* ROUTINE 
*            TO DETECT MESSAGE ARRIVING FROM SMFEX.  /SMFIF/RMS IS
*            THE ENTRY POINT FOR THESE EVENTS.
* 
*         2. FROM IAFEX ROUTINE *DRI* WHEN A DRIVER FUNCTION REQUEST
*            HAS BEEN RECEIVED. (SUBROUTINE *PDR*)
* 
*         3. FROM IAFEX ROUTINE *STR*, AS THE RESULT OF TSEM FUNCTION 
*            CODE VCSM.  THIS CODE INDICATES EITHER A TLX REQUEST TO
*            CONNECT A TERMINAL TO SMFEX, OR TLX CONFIRMATION THAT
*            DISCONNECTION FROM SMFEX HAS BEEN VALIDLY COMPLETED. 
*            THE ENTRY POINTS ARE /SMFIF/CSM AND /SMFIF/DSM.
* 
*         FUNCTION REQUESTS FROM SMFEX, CERTAIN DRIVER FUNCTION 
*         REQUESTS, AND PROMPT-ISSUED ENTRY FROM *RES* ARE
*         CALLED EVENTS AND ARE ASSIGNED SYMBOLS WITHIN 
*         SMFIF OF THE FORM *EXXX*. 
* 
*         EACH IAFEX TERMINAL HAS ASSOCIATED WITH IT A STATE
*         OF SMFIF PROCESSING.  A STATE CODE IS MAINTAINED
*         IN BITS 23-18 OF WORD VFST OF THE TERMINAL TABLE. 
*         STATE CODES ARE ASSIGNED SYMBOLS OF THE FORM *SXXX*.
* 
*         FOR EACH STATE, STATE/EVENT TABLES DEFINE WHAT ACTION 
*         (INCLUDING A POSSIBLE STATE CHANGE) IS TO BE PERFORMED
*         UPON OCCURENCE OF EACH POSSIBLE EVENT.  THE ACTION
*         FOR A GIVEN EVENT IS A ROUTINE CALLED A STATE/EVENT 
*         HANDLER OR PROCESSOR. 
* 
*         THUS, SMFIF PROCESSING CONSISTS OF THREE REQUEST
*         PROCESSORS (CSM, DSM, PDR) DETECTING EVENTS AND 
*         EXECUTING THE APPROPRIATE STATE/EVENT HANDLERS. 
          SPACE   4,10
**        STATE TABLE MACROS. 
  
  
          MACRO  STATE,SXXX 
          IF     -DEF,.STATE,1
 .STATE   SET    0
          ERRNZ  SXXX-.STATE  MISPLACED STATE EVENT TABLE 
          LOC    0
          ENDM
  
  
 EVENT    MACRO  EXXX,IXX,SXXX
          ERRNZ  EXXX-*      MISPLACED EVENT ENTRY
          IFC    NE,*SXXX** 
          VFD    36/0,6/SXXX,18/IXX 
          ELSE
          VFD    36/0,6/.STATE,18/IXX 
          ENDIF 
          ENDM
  
  
 STATEND  MACRO 
 .STATE   SET    .STATE+1 
          ERRNZ  NMEV-*      WRONG NUMBER OF EVENTS 
          LOC    *O 
          ENDM
          SPACE  4,10 
**        SMFIF TERMINAL STATE SYMBOLS. 
  
  
 .SAVE    SET    *
          LOC    0
 SIDL     BSS    1           NO FSE/SMFEX ACTIVITY IN PROGRESS
 SINP     BSS    1           WAITING FOR TERMINAL INPUT 
 SRSP     BSS    1           WAITING FOR SMFEX RESPONSE 
 SOUT     BSS    1           WAITING FOR MORE OUTPUT FROM SMFEX 
 SHUP     BSS    1           WAIT SMFEX OK AFTER HUNG-UP PHONE
 STOT     BSS    1           WAIT SMFEX OK AFTER TIME-OUT LOGOFF
 SDTJ     BSS    1           WAIT SMFEX OK AFTER DETACH 
          ORG    .SAVE
          SPACE  4,10 
**        SMFIF TERMINAL EVENT SYMBOLS. 
  
  
 .SAVE    SET    *           SAVE ORIGIN
          LOC    0
 ERES     BSS    1           DRIVER RES REQUEST 
 ECLI     BSS    1           DRIVER CLI REQUEST 
 EPUB     BSS    1           DRIVER PUB REQUEST 
 EDTJ     BSS    1           DRIVER DTJ REQUEST 
 EHUP     BSS    1           DRIVER HUP REQUEST 
 ETOT     BSS    1           DRIVER TOT REQUEST 
 EUDR     BSS    1           UNEXPECTED DRIVER REQUEST
 EAOT     BSS    1           SMFEX ASSIGN OUTPUT TO TERMINAL
 EAOI     BSS    1           SMFEX ASSIGN OUTPUT AND REQUEST INPUT
 ECON     BSS    1           TLX CONNECT TO SMF 
 EDSC     BSS    1           SMFEX DISCONNECT FUNCTION
 ECFR     BSS    1           TLX CONFIRM DISCONNECTION
 ERMO     BSS    1           IAFEX REQUEST MORE OUTPUT FROM SMFEX 
 NMEV     BSS    0           NUMBER OF EVENTS 
          ORG    .SAVE       RESTORE ORIGIN AND LOCATION COUNTERS 
          EJECT 
**        SMFIF STATE/EVENT TABLES. 
  
  
 TSET     BSS    0
          SPACE  4,20 
 SIDL     STATE              NO FSE/SMFEX ACTIVITY
          ERRNZ  SIDL        IAFEX AND DRIVER CODE ASSUMES SIDL=0 
          EVENT  ERES,RDR 
          EVENT  ECLI,RDR 
          EVENT  EPUB,RDR 
          EVENT  EDTJ,RDR 
          EVENT  EHUP,RDR 
          EVENT  ETOT,RDR 
          EVENT  EUDR,RDR 
          EVENT  EAOT,0 
          EVENT  EAOI,0 
          EVENT  ECON,NSC,SRSP
          EVENT  EDSC,0 
          EVENT  ECFR,0 
          EVENT  ERMO,0 
          STATEND 
          SPACE  4,20 
 SINP     STATE              WAITING FOR TERMINAL INPUT 
          EVENT  ERES,DBI 
          EVENT  ECLI,PCL,SRSP
          EVENT  EPUB,NSI,SRSP
          EVENT  EDTJ,NSH,SDTJ
          EVENT  EHUP,NSH,SHUP
          EVENT  ETOT,NSH,STOT
          EVENT  EUDR,ADR 
          EVENT  EAOT,ASO 
          EVENT  EAOI,ASO 
          EVENT  ECON,ATL 
          EVENT  EDSC,0,SIDL
          EVENT  ECFR,0 
          EVENT  ERMO,0 
          STATEND 
          SPACE  4,20 
 SRSP     STATE              WAITING FOR SMFEX RESPONSE TO INPUT
          EVENT  ERES,0 
          EVENT  ECLI,AIR1
          EVENT  EPUB,NSI 
          EVENT  EDTJ,NSH,SDTJ
          EVENT  EHUP,NSH,SHUP
          EVENT  ETOT,NSH,STOT
          EVENT  EUDR,ADR 
          EVENT  EAOT,ASO,SOUT
          EVENT  EAOI,ASO,SINP
          EVENT  ECON,ATL 
          EVENT  EDSC,0,SIDL
          EVENT  ECFR,0,SIDL
          EVENT  ERMO,0 
          STATEND 
          SPACE  4,20 
 SOUT     STATE              EXPECTING OUTPUT FROM SMFEX
          EVENT  ERES,AMS 
          EVENT  ECLI,AIR1
          EVENT  EPUB,NSI,SRSP
          EVENT  EDTJ,NSH,SDTJ
          EVENT  EHUP,NSH,SHUP
          EVENT  ETOT,NSH,STOT
          EVENT  EUDR,ADR 
          EVENT  EAOT,ASO 
          EVENT  EAOI,ASO,SINP
          EVENT  ECON,ATL 
          EVENT  EDSC,0,SIDL
          EVENT  ECFR,0 
          EVENT  ERMO,0,SRSP
          STATEND 
          SPACE  4,20 
 SHUP     STATE              WAIT SMFEX OK AFTER HUNG UP PHONE
          EVENT  ERES,0 
          EVENT  ECLI,AIR1
          EVENT  EPUB,AIR 
          EVENT  EDTJ,0 
          EVENT  EHUP,IES 
          EVENT  ETOT,IES 
          EVENT  EUDR,ADR 
          EVENT  EAOT,0 
          EVENT  EAOI,0 
          EVENT  ECON,ATL 
          EVENT  EDSC,AHU,SIDL
          EVENT  ECFR,0 
          EVENT  ERMO,0 
          STATEND 
          SPACE  4,20 
 STOT     STATE              WAIT SMFEX OK AFTER TIME-OUT LOGOFF
          EVENT  ERES,0 
          EVENT  ECLI,AIR1
          EVENT  EPUB,AIR 
          EVENT  EDTJ,0 
          EVENT  EHUP,0,SHUP
          EVENT  ETOT,IES 
          EVENT  EUDR,ADR 
          EVENT  EAOT,0 
          EVENT  EAOI,0 
          EVENT  ECON,ATL 
          EVENT  EDSC,ATO,SIDL
          EVENT  ECFR,0 
          EVENT  ERMO,0 
          STATEND 
          SPACE  4,20 
 SDTJ     STATE              WAIT SMFEX OK AFTER DETACH 
          EVENT  ERES,0 
          EVENT  ECLI,AIR1
          EVENT  EPUB,AIR 
          EVENT  EDTJ,0 
          EVENT  EHUP,0,SHUP
          EVENT  ETOT,0,STOT
          EVENT  EUDR,ADR 
          EVENT  EAOT,0 
          EVENT  EAOI,0 
          EVENT  ECON,ATL 
          EVENT  EDSC,ADT,SIDL
          EVENT  ECFR,0 
          EVENT  ERMO,0 
          STATEND 
          TITLE SMFIF - CSM - CONNECT TO SCREEN MANAGEMENT FACILITY.
 CSM      SPACE  4,10 
**        CSM - CONNECT TO SCREEN MANAGEMENT. 
* 
*         USES   X - 1. 
* 
*         CALLS  ESE. 
  
  
 CSM      SUBR
          SX1    ECON        SET CONNECTION EVENT 
          RJ     ESE         EXECUTE STATE/EVENT PROCESSOR
          EQ     CSMX        RETURN 
          TITLE SMFIF - DSM - DISCONNECT SCREEN MANAGEMENT FACILITY.
 DSM      SPACE  4,10 
**        DSM - DISCONNECT FROM SCREEN MANAGEMENT.
* 
*         USES   X - 1. 
* 
*         CALLS  ESE. 
  
  
 DSM      SUBR
          SX1    ECFR        SET DISCONNECT CONFIRMATION EVENT
          RJ     ESE         EXECUTE STATE/EVENT PROCESSOR
          EQ     DSMX        RETURN 
          TITLE SMFIF - PDR - PROCESS DRIVER REQUESTS.
 PDR      SPACE  4,10 
**        PDR - PROCESS DRIVER REQUESTS.
* 
*         ENTRY  (X5) = DRIVER FUNCTION REQUEST.
*                (B7) = *DRI* PROCESSOR FOR FUNCTION. 
* 
*         USES   X - 1, 2, 3, 7.
*                A - 1, 2.
*                B - 5. 
* 
*         CALLS  ESE, PCS, SSP. 
  
  
 PDR1     RJ     PCS         EXECUTE PROCESSOR
  
 PDR      SUBR
          BX7    X5          STORE DRIVER REQUEST 
          SA7    SSPA 
          RJ     SSP         SET UP B2, B3, AND OTHER REGISTERS 
          UX1,B5 X5 
          SA1    TDRQ+B5
          NG     X1,PDR1     IF NO SMFIF HANDLING FOR THIS REQUEST
          SA2    A0+VROT     CHECK FOR RESOURCE LIMIT 
          MX3    2
          LX2    59-19
          BX3    X3*X2
          NZ     X3,PDR1     IF LIMIT OCCURRED, SKIP SMF PROCESSING 
          RJ     ESE         EXECUTE STATE/EVENT HANDLER
          EQ     PDRX        RETURN 
  
  
 TDRQ     INDEX  CON,/TLX/REQL,0  TABLE OF DRIVER REQUESTS
          INDEX  ,/TLX/CLI,( ECLI ) 
          INDEX  ,/TLX/DIN,( EUDR ) 
          INDEX  ,/TLX/DLO,( -1 ) 
          INDEX  ,/TLX/DRP,( -1 ) 
          INDEX  ,/TLX/DRT,( -1 ) 
          INDEX  ,/TLX/DTJ,( EDTJ ) 
          INDEX  ,/TLX/ETX,( EUDR ) 
          INDEX  ,/TLX/FLO,( EUDR ) 
          INDEX  ,/TLX/HUP,( EHUP ) 
          INDEX  ,/TLX/IAM,( -1 ) 
          INDEX  ,/TLX/LPT,( -1 ) 
          INDEX  ,/TLX/PUB,( EPUB ) 
          INDEX  ,/TLX/RES,( ERES ) 
          INDEX  ,/TLX/RIN,( EUDR ) 
          INDEX  ,/TLX/SAI,( EUDR ) 
          INDEX  ,/TLX/TOT,( ETOT ) 
 TDRQL    EQU    *-TDRQ 
          TITLE SMFIF - STATE/EVENT HANDLERS. 
**        STATE/EVENT HANDLERS. 
* 
*         STATE/EVENT PROCESSORS ARE CALLED ONLY BY *ESE* AND 
*         RETURN BY JUMPING TO *ESEX*.  PROCESSORS MAY ALSO 
*         RETURN BY JUMPING TO EACH OTHER.  *RDR* HAS THE 
*         PROPERTY OF CALLING *PCS* TO PERFORM ANY FUNCTIONS
*         WHICH ARE NOT OVERRIDDEN BY SCREEN MANAGEMENT.  THE 
*         FOLLOWING ARE TRUE OF ALL STATE/EVENT PROCESSORS. 
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
* 
*         EXIT   VIA *ESEX*.
 ESE      SPACE  4,10 
**        ESE - EXECUTE STATE/EVENT HANDLER.
* 
*         ENTRY  (X1) = EVENT CODE. 
*                (B2) = TERMINAL NUMBER.
*                (B3) = PARAMETER TO STATE/EVENT PROCESSOR. 
*                (B4) = PARAMETER TO STATE/EVENT PROCESSOR. 
* 
*         EXIT   TO PROCESSOR.
* 
*         CALLS  ABT, ASE.
  
  
 ESE      SUBR               ENTRY/EXIT 
          RJ     ASE         ADVANCE STATE/EVENT TABLES 
          NG     B6,ESE1     IF INCORRECT PROCESSOR 
          ZR     B6,ESEX     IF NO PROCESSOR
          JP     B6          EXIT TO PROCESSOR
  
 ESE1     SX6    3RESE
          RJ     ABT         ABORT
          EQ     ESEX        RETURN 
          SPACE  4,10 
**        ADT - SMFEX ACKNOWLEDGED DETACH.
* 
*         USES   X - 1. 
*                A - 1. 
* 
*         CALLS  ADQ. 
  
  
 ADT      BSS    0           ENTRY
          SA1    ADTA        SIMULATE DRIVER *DTJ* REQUEST
          RJ     ADQ         ADD TO DRIVER QUEUE
          EQ     ESEX        RETURN 
  
 ADTA     VFD    12//TLX/DTJ+2000B,24/UDRC,24/0 
 ADR      SPACE  4,10 
**        ADR - ABORT FOR BAD DRIVER REQUEST. 
* 
*         USES   X - 6. 
* 
*         CALLS  ABT. 
  
  
 ADR      BSS    0           ENTRY
          SX6    3RADR
          RJ     ABT
          EQ     ESEX        RETURN 
 AHU      SPACE  4,10 
**        AHU - SMFEX ACKNOWLEDGED HUNG-UP-PHONE. 
* 
*         USES   X - 1. 
*                A - 1. 
* 
*         CALLS  ADQ. 
  
  
 AHU      BSS    0           ENTRY
          SA1    AHUA        SIMULATE DRIVER *HUP* REQUEST
          RJ     ADQ         ADD TO DRIVER QUEUE
          EQ     ESEX        RETURN 
  
 AHUA     VFD    12//TLX/HUP+2000B,48/0 
 AIR      SPACE  4,10 
**        AIR - ACKNOWLEDGE INTERRUPT AND REASSIGN POT. 
* 
*         ENTRY  (B3) = POT POINTER.
* 
*         USES   X - 2, 6.
*                A - 2, 6.
*                B - 4, 6.
* 
*         CALLS  DPT, RDR.
  
  
 AIR      BSS    0           ENTRY
          SA2    A0+VDCT     ACKNOWLEDGE INTERRUPT
          SX6    B1 
          LX6    58 
          BX6    X6+X2
          SA6    A2 
 AIR1     SB4    0
          ZR     B3,ESEX     IF NO POTS TO DROP 
          RJ     DPT         DROP POTS
          EQ     ESEX        RETURN 
 AMS      SPACE  4,10 
**        AMS - ASSIGN MESSAGE. 
* 
*         ENTRY  (B3) = POT CHAIN.
* 
*         USES   X - 1, 2, 4, 6, 7. 
*                A - 1, 2, 6, 7.
* 
*         CALLS  QMS. 
  
  
 AMS      BSS    0           ENTRY
          IFNET  AMS1 
          SA1    A0+VDCT
          SA2    A0+VSTT
          MX4    -12
          MX7    14 
          LX7    12 
          BX6    X7*X1
          NZ     X6,ESEX     IF DRIVER BUSY 
          BX7    -X4*X2 
          ZR     X7,AMS1     IF NO STACKED MESSAGE
          BX6    X4*X2       ASSIGN STACKED MESSAGE 
          SA6    A2 
          BX7    X1+X7
          SA7    A1 
          EQ     ESEX        RETURN 
  
 AMS1     SX6    FRES        ASK SMFEX FOR MORE OUTPUT
          SX7    B2          TERMINAL NUMBER
          LX6    48 
          LX7    36 
          BX6    X6+X7
          SX7    B3          POT CHAIN
          BX6    X6+X7       MESSAGE HEADER WORD
          RJ     QMS         QUEUE MESSAGE FOR SMFEX
          SX1    ERMO        SET REQUEST MORE OUTPUT EVENT
          RJ     ASE         ADVANCE STATE/EVENT TABLES 
          EQ     ESEX        RETURN 
 ASO      SPACE  4,10 
**        ASO - ASSIGN SMFEX OUTPUT TO TERMINAL.
* 
*         ENTRY  (B4) = MESSAGE LENGTH. 
* 
*         USES   X - 6. 
*                B - 3. 
* 
*         CALLS  MVA. 
  
  
 ASO      BSS    0           ENTRY
          ZR     B4,ESEX     IF NULL OUTPUT 
          SA1    SSCR        GET MESSAGE ADDRESS
          SX6    X1+4 
          SB3    B0          ASK MVA TO GET POT CHAIN 
          RJ     MVA         ASSIGN OUTPUT
          EQ     ESEX        RETURN 
 ATL      SPACE  4,10 
**        ATL - ABORT FOR BAD TLX TSEM. 
* 
*         USES   X - 6. 
* 
*         CALLS  ABT. 
  
  
 ATL      BSS    0           ENTRY
          SX6    3RATL
          RJ     ABT
          EQ     ESEX        RETURN 
 ATO      SPACE  4,10 
**        ATO - SMFEX ACKNOWLEDGED TIME-OUT LOGOFF. 
* 
*         EXIT   (X1) = PARAMETER FOR *ADQ*.
* 
*         USES   X - 1. 
*                A - 1. 
* 
*         CALLS  ADQ. 
  
  
 ATO      BSS    0           ENTRY
          SA1    ATOA        SIMULATE DRIVER *TOT* REQUEST
          RJ     ADQ         ADD TO DRIVER QUEUE
          EQ     ESEX        RETURN 
  
  
 ATOA     VFD    12//TLX/TOT+2000B,48/0 
 DBI      SPACE  4,10 
**        DBI - ASK DRIVER TO BEGIN INPUT.
* 
*         EXIT   (X2) = PARAMETER FOR *EDR*.
* 
*         USES   X - 1, 2, 3, 4.
*                A - 1, 2, 3. 
* 
*         CALLS  EDR. 
  
  
 DBI      BSS    0           ENTRY
          IFNET  DBI1 
          SA3    A0+VSTT     CHECK FOR STACKED OUTPUT 
          MX4    -12
          BX3    -X4*X3 
          NZ     X3,AMS      IF STACKED OUTPUT MESSAGE
 DBI1     SA1    A0+VDCT
          SA2    DBIA 
          BX3    X2*X1
          NZ     X3,ESEX     IF INPUT BEGUN OR DRIVER BUSY
          SA2    A2+B1
          RJ     EDR         ENTER DRIVER REQUEST 
          EQ     ESEX        RETURN 
  
  
 DBIA     CON    6400BS48+7777B 
          CON    4400BS48+/1TD/BGI
 IES      SPACE  4,10 
**        IES - INVALID EVENT SEQUENCE. 
* 
*         WHEN AN INVALID SEQUENCE OF EVENTS IS DETECTED, THE 
*         *SMF* SUBSYSTEM MAY NOT BE RESPONDING, THEREFORE DISCONNECT 
*         ALL USERS FROM THE MULTI-USER EDITOR. 
* 
*         CALLS  SID. 
  
  
 IES      BSS    0           ENTRY
          RJ     SID         DISCONNECT FROM *SMF* SUBSYSTEM
          EQ     ESEX        RETURN 
 NSC      SPACE  4,10 
**        NSC - NOTIFY SMFEX OF CONNECTION REQUEST BY TLX.
* 
*         USES   A - 1. 
*                X - 0, 1, 6, 7.
* 
*         CALLS  QMS. 
  
  
 NSC      BSS    0           ENTRY
          SX6    FCSM        FUNCTION CODE TO NOTIFY SMFEX
          LX6    48 
          SX7    B2          TERMINAL NUMBER
          LX7    36 
          BX6    X6+X7       GENERATE MESSAGE HEADER
          RJ     QMS         QUEUE MESSAGE FOR SMFEX
          SA1    A0+VUIT     GET EJT ORDINAL
          MX0    -12
          BX6    -X0*X1 
          SA1    A0+VFST     GET JSN
          MX0    24 
          BX1    X1*X0
          BX6    X6+X1       MERGE JSN AND EJT TO MAKE MESSAGE
          RJ     QMS         QUEUE MESSAGE TO SMFEX 
          EQ     ESEX        RETURN 
 NSH      SPACE  4,10 
**        NSH - NOTIFY SMFEX PHONE HUNG UP. 
* 
*         ENTRY  (B3) = POT CHAIN.
* 
*         USES   X - 6. 
*                B - 3, 4.
* 
*         CALLS  DPT, QMS.
  
  
 NSH      BSS    0           ENTRY
          SB4    0           SET TO DROP POT CHAIN
          ZR     B3,NSH1     IF NOT POTS TO DROP
          RJ     DPT         DROP POT 
 NSH1     SX6    FHUP        NOTIFY SMFEX OF HANG-UP
          SX7    B2          TERMINAL NUMBER
          LX6    48 
          LX7    36 
          BX6    X6+X7       MESSAGE HEADER WORD
          RJ     QMS         QUEUE MESSAGE FOR SMFEX
          EQ     ESEX        RETURN TO DRI
 NSI      SPACE  4,10 
**        NSI - NOTIFY SMFEX OF INTERRUPT FROM TERMINAL.
* 
*         EXIT   (B3) = POT CHAIN.
*                TO *AIR*.
* 
*         USES   X - 6, 7.
* 
*         CALLS  DAP, QMS, SSP. 
  
  
 NSI      BSS    0           ENTRY
          RJ     DAP         DE-ASSIGN OUTPUT POTS
          RJ     SSP         RESTORE PARAMETERS 
          SX6    FPUB 
          SX7    B2          TERMINAL NUMBER
          LX6    48 
          LX7    36 
          BX6    X6+X7       MESSAGE HEADER WORD
          RJ     QMS         QUEUE MESSAGE FOR SMFEX
          EQ     AIR         GO ACKNOWLEDGE INTERRUPT 
 PCL      SPACE  4,10 
**        PCL - PROCESS COMMAND LINE FROM TERMINAL. 
* 
*         ENTRY  (B3) = POT CHAIN.
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 6.
* 
*         CALLS  QMS. 
  
  
 PCL      BSS    0           ENTRY
          SX6    FCLI        PASS COMMAND TO SMFEX
          SX7    B2          TERMINAL NUMBER
          LX6    48 
          LX7    36 
          BX6    X6+X7
          SX7    B3          POT CHAIN
          BX6    X6+X7       MESSAGE HEADER WORD
          RJ     QMS         QUEUE MESSAGE FOR SMFEX
          SA1    A0+VDCT     RESET INPUT REQUESTED
          SX2    B1 
          LX2    56-0 
          BX6    -X2*X1 
          SA6    A1 
          EQ     ESEX        RETURN 
 RDR      SPACE  4,10 
**        RDR - RETURN DRIVER REQUEST TO *PCS* PROCESSING.
* 
*         CALLS  PCS, SSP.
  
  
 RDR      BSS    0           ENTRY
          SA5    SSPA        RESTORE REQUEST REGISTERS
          RJ     SSP
          RJ     PCS         EXECUTE PROCESSOR
          EQ     ESEX        RETURN 
          TITLE SMFIF - SUBROUTINES.
**        ADQ - ADD REQUEST TO DRIVER QUEUE.
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                (X1) = SIMULATED DRIVER FUNCTION REQUEST.
* 
*         EXIT   REQUEST ADDED TO FIRST DRIVER REQUEST QUEUE. 
* 
*         USES   X - 2, 3, 4, 5, 6, 7.
*                A - 2, 3, 4, 5, 6, 7.
  
  
 ADQ      SUBR               ENTRY/EXIT 
          SX6    B2          ADD TERMINAL NUMBER TO DRIVER REQUEST
          BX6    X1+X6
          SA2    /IAFEX4/NDSA  GET NETWORK DRIVER STACK ADDRESS 
          IFNET  ADQ3        IF NETWORK TERMINAL
          SA2    VDRL        SEARCH FOR DRIVER QUEUE
          MX3    -12
          SX5    B2          CURRENT TERMINAL 
 ADQ1     NG     X2,ADQ5     IF END OF DRIVER STATUS WORDS
          BX4    -X3*X2      FIRST TERMINAL NUMBER FOR THIS DRIVER
          IX7    X5-X4
          PL     X7,ADQ2     IF FIRST TERMINAL .LE. CURRENT TERMINAL
          SA2    A2+1        NEXT DRIVER STATUS WORD
          EQ     ADQ1        PROCESS NEXT WORD
  
 ADQ2     BX7    X2 
          AX2    24          STACK ADDRESS
          AX7    12          COMPUTE LAST TERMINAL NUMBER+1 
          BX7    -X3*X7 
          IX7    X4+X7
          IX7    X7-X5       COMPUTE LAST TERMINAL-CURRENT TERMINAL 
          PL     X7,ADQ3     IF CORRECT DRIVER STATUS WORD
          SA2    A2+1        NEXT DRIVER STATUS WORD
          EQ     ADQ1        PROCESS NEXT WORD
  
 ADQ3     SX7    X2          STACK ADDRESS
          SA2    X7+B1       READ FIRST 
          SA3    A2+B1       READ IN
          SA4    A3+B1       READ OUT 
          BX5    X4-X2
          NZ     X5,ADQ4     IF OUT .NE. FIRST
          SA5    A4+B1       READ LIMIT 
          BX4    X5 
 ADQ4     SX7    X4-1        DECREMENT OUT
          BX3    X3-X7
          SA6    X7          STORE REQUEST
          SA7    A4          UPDATE OUT 
          NZ     X3,ADQX     IF NO DRIVER STACK OVERFLOW
 ADQ5     SX6    3RADQ
          EQ     ABT+1       ABORT UNCONDITIONALLY
 ASE      SPACE  4,20 
**        ASE - ADVANCE STATE/EVENT TABLES. 
* 
*         ENTRY  (X1) = EVENT CODE. 
*                (B2) = PARAMETER TO STATE/EVENT PROCESSOR. 
*                (B3) = PARAMETER TO STATE/EVENT PROCESSOR. 
*                (B4) = PARAMETER TO STATE/EVENT PROCESSOR. 
* 
*         EXIT   (B2) = UNCHANGED.
*                (B3) = UNCHANGED.
*                (B4) = UNCHANGED.
*                (B6) = PROCESSOR ADDRESS.
*                (B6) .LE. 0 IF NO PROCESSOR FOR THIS EVENT.
*                (B6) .LT. 0 IF NO PROCESSOR AND INCORRECT EVENT. 
* 
*         USES   X - 1, 2, 3, 4, 6. 
*                A - 1, 2, 6. 
*                B - 5, 6.
  
  
 ASE      SUBR               ENTRY/EXIT 
          SA2    A0+VFST     EXTRACT STATE FROM VFST
          MX3    -6 
          BX6    X2          SAVE VFST FOR SETTING NEW STATE
          AX2    18 
          BX2    -X3*X2 
          SX4    NMEV        CALCULATE ENTRY IN STATE/EVENT TABLES
          IX4    X2*X4
          IX4    X4+X1
          SB5    X4+
          SA1    TSET+B5     GET STATE/EVENT ENTRY
          SB6    X1          SET STATE/EVENT HANDLER ADDRESS
          LX3    18-0        SET NEW STATE IN VFST
          BX1    -X3*X1 
          BX6    X3*X6
          BX6    X1+X6
          SA6    A2 
          EQ     ASEX        RETURN 
 GMQ      SPACE  4,10 
**        GMQ - GET MESSAGE FROM SEND-TO-SMFEX QUEUE. 
* 
*         EXIT   (X7) = 0 IF QUEUE EMPTY. 
*                (X6) = MESSAGE IF (X7) .NE. 0. 
* 
*         USES   X - 1, 3, 4, 6, 7. 
*                A - 1, 3, 4, 7.
  
  
 GMQ1     SX7    X3+B1       UPDATE STACK OUT POINTER 
          BX6    X4 
          SA7    A3+
  
 GMQ      SUBR               ENTRY/EXIT 
          SA1    QMSA+1      READ IN
          SA3    A1+B1       READ OUT 
          IX7    X3-X1       OUT-IN 
          SA4    X3          READ WORD
          NG     X7,GMQ1     IF NO WRAPAROUND 
          SA1    A3+B1       READ LIMIT 
          SX6    X1 
          ZR     X7,GMQX     IF BUFFER EMPTY
          SX7    X3+B1       ADVANCE OUT
          IX1    X7-X6
          NZ     X1,GMQ1     IF OUT .NE. LIMIT
          SA1    A1-3        READ FIRST 
          SX3    X1-1 
          EQ     GMQ1        UPDATE QUEUE AND RETURN
 ISM      SPACE  4,10 
**        ISM - IDLE SCREEN MANAGEMENT FACILITY.
* 
*         EXIT   SHUTDOWN MESSAGE FORCIBLY TRANSMITTED. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6. 
* 
* 
*         CALLS  EUC, SFC.
  
  
 ISM      SUBR               ENTRY/EXIT 
          SA2    ASMF 
          ZR     X2,ISMX     IF SMF NEVER CONNECTED TO IAF
          SA1    ISMA 
          BX6    X1 
          BX7    X2 
          RJ     SFC         SFCALL TO SMF
          RJ     EUC         RELEASE SMF CONNECTION STATE 
          SX6    B0 
          SA6    ASMF        CLEAR SMF ACTIVE WORD
          EQ     ISMX        RETURN 
  
  
 ISMA     VFD    6/0,12/1,18/0,18/ISMB,6/WRIT 
 ISMB     VFD    12/FIIN,12/0,18/0,18/1 
 QMS      SPACE  4,15 
**        QMS - QUEUE MESSAGE TO SEND TO SMFEX. 
* 
*         ENTRY  (X6) = MESSAGE HEADER WORD.
* 
*         EXIT   MESSAGE ADDED TO QUEUE.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 6, 7. 
* 
*         CALLS  SID. 
  
  
 QMS2     SA6    X1          STORE MESSAGE HEADER IN QUEUE
          SA7    A1          UPDATE IN POINTER
  
 QMS      SUBR               ENTRY/EXIT 
          SA1    QMSA+1      READ IN
          SA3    A1+B1       READ OUT 
          SX7    X1+1        IN+1 
          IX4    X7-X3       IN+1-OUT 
          NG     X4,QMS2     IF NO WRAPAROUND 
          SA3    A3+B1       READ LIMIT 
          SX2    X3 
          ZR     X4,QMS1     IF BUFFER FULL 
          IX4    X7-X2       IN+1-LIMIT 
          NZ     X4,QMS2     IF IN+1 .NE. LIMIT 
          SA3    A1-B1       READ FIRST 
          SA2    A1+B1       READ OUT 
          SX7    X3          IN+1 
          IX4    X7-X2
          NZ     X4,QMS2     IF IN+1 .NE. OUT 
 QMS1     RJ     SID         TREAT MESSAGE STACK OVERFLOW AS DROPOUT
          EQ     QMSX        RETURN 
  
  
 QMSA     CON    QMSB        FIRST
          CON    QMSB        IN 
          CON    QMSB        OUT
          CON    QMSB+NWSS   LIMIT
 QMSB     BSSZ   NWSS        SEND-TO-SMFEX MESSAGE STACK
 RDB      SPACE  4,15 
**        RDB - RECORD DEBUG BUFFER MESSAGE.
* 
*         ENTRY  (A1) = ADDRESS OF SFCALL MESSAGE HEADER. 
*                (X1) = SFCALL MESSAGE HEADER.
* 
*         EXIT   SFCALL MESSAGE RECORDED IN DEBUG BUFFER. 
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 2, 6. 
*                B - 4, 5, 6, 7.
  
  
 .RDB     IFNE   NWDB,0 
 RDB3     SX6    B6          STORE NEW DEBUGGING BUFFER POINTER 
          SA6    RDBA 
          SA1    B4          RESTORE MESSAGE HEADER 
  
 RDB      SUBR               ENTRY/EXIT 
          SB4    A1          SAVE MESSAGE HEADER ADDRESS
          SB7    X1          MESSAGE LENGTH 
          GE     B7,B1,RDB0  IF MESSAGE LENGTH REASONABLE 
          SB7    B1 
 RDB0     SA2    RDBA        DEBUGGING BUFFER POINTER 
          SB6    X2 
          SB5    RDBB+RDBBL  DEBUGGING BUFFER LWA + 1 
 RDB1     BX6    X1          STORE MESSAGE WORD IN BUFFER 
          SA6    B6 
          SB6    B6+B1       ADVANCE BUFFER POINTER 
          SB7    B7-B1       DECREMENT MESSAGE LENGTH 
          GT     B5,B6,RDB2  IF NO WRAPAROUND 
          SB6    RDBB        RESET POINTER TO FWA 
 RDB2     ZR     B7,RDB3     IF MESSAGE TRANSFERRED 
          SA1    A1+B1
          EQ     RDB1        PROCESS NEXT WORD
  
  
 RDBA     CON    RDBB        BUFFER POINTER 
 RDBB     BSSZ   NWDB        SMFIF DEBUGGING BUFFER 
 RDBBL    EQU    *-RDBB      DEBUGGING BUFFER LENGTH
 .RDB     ENDIF 
 RMS      SPACE  4,15 
**        RMS - RECEIVE MESSAGE FROM SMFEX. 
* 
*         ENTRY  (SSCR) = ADDRESS OF MESSAGE RECEIVED.
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1. 
*                B - 2, 3, 4, 5.
* 
*         MACROS TTADD. 
* 
*         CALLS  ESE, RDB, SFC, SID.
  
  
 RMS      SUBR               ENTRY/EXIT 
          SA1    SSCR        GET MESSAGE ADDRESS
          SA1    X1+3        MESSAGE HEADER 
          IFNE   NWDB,0,1 
          RJ     RDB         RECORD MESSAGE IN DEBUGGING BUFFER 
          SB5    12          SPLIT OFF PARAMETERS FROM MESSAGE HEADER 
          MX0    12 
          SB4    X1-1        B4 = BUFFER LENGTH MINUS 1 
          BX2    X0*X1
          LX2    X2,B5
          SB3    X2          B3 = FUNCTION CODE 
          LX2    X1,B5
          BX2    X0*X2
          LX2    X2,B5
          SB2    X2          B2 = TERMINAL NUMBER 
          TTADD  X2,A0,X3,X4 A0 = TERMINAL TABLE ADDRESS
          SB5    B3-TSIFL-1 
          PL     B5,RMS0     IF INCORRECT FUNCTION CODE 
          SA1    TSIF+B3     GET EVENT SYMBOL FOR FUNCTION
          NG     X1,RMSX     IF NEW *SMF* INITIATION
          RJ     ESE         EXECUTE STATE/EVENT HANDLER
          SX6    ENDT        SEND END OF TASK MESSAGE 
          SA1    /SMFIF/ASMF
          BX7    X1 
          RJ     SFC         SEND SFCALL
          ZR     X1,RMSX     IF NORMAL RETURN 
 RMS0     RJ     SID         DISCONNECT FROM *SMF* SUBSYSTEM
          EQ     RMSX        RETURN 
  
  
 TSIF     INDEX  CON,NMSF,0  TABLE OF EVENTS FOR SMFEX FUNCTIONS
          INDEX  ,FSIN,( -1 ) 
          INDEX  ,FAOT,( EAOT ) 
          INDEX  ,FAOI,( EAOI ) 
          INDEX  ,FDSC,( EDSC ) 
 TSIFL    EQU    *-TSIF 
 SID      SPACE  4,10 
**        SID - SMFEX DROPOUT DETECTED. 
* 
*                X - 0, 1, 2, 3, 4, 5, 6. 
*                A - 1, 6.
*                B - 2, 3, 4, 7.
* 
*         MACROS TTADD. 
* 
*         CALLS  ADQ, DPT, GMQ, ISM.
  
  
 SID      SUBR
          BX6    X6-X6       CLEAR MESSAGE BUFFERS
          SA6    SMSB 
  
*         EMPTY SEND-TO-SMFEX QUEUE AND DROP POTS.
  
 SID1     SB4    0
          RJ     GMQ         GET MESSAGE FROM QUEUE 
          ZR     X7,SID2     IF QUEUE EMPTY 
          SB3    X6 
          MX0    12 
          BX1    X0*X6
          LX1    12 
          SX1    X1-FCSM
          NZ     X1,SID1.1   IF NOT A CONNECTION MESSAGE
          RJ     GMQ         SKIP PAST MESSAGE TEXT 
          EQ     SID1        LOOP UNTIL QUEUE IS EMPTY
  
 SID1.1   ZR     B3,SID1     IF NO POT WITH MESSAGE 
          RJ     DPT         DROP POT 
          EQ     SID1        LOOP TIL QUEUE EMPTY 
  
*         RETURN ALL TERMINALS WITH SMFIF ACTIVITY TO IDLE STATE. 
  
 SID2     SA1    VTTP        GET TERMINAL TABLE POINTERS
          SX2    X1          TERMINAL TABLE LWA+1 
          AX1    24 
          IX3    X2-X1
          SX4    VTTL 
          IX6    X3/X4       LAST TERMINAL NUMBER 
          SA6    SIDA 
          SB2    VPST        FIRST REAL TERMINAL
 SID3     MX0    -6          MASK FOR SMFIF STATE CODE IN VFST
          LX0    18-0 
          TTADD  B2,A0,X2,X3  GET TERMINAL TABLE ADDRESS
          SA1    A0+VFST     GET SMFIF STATE CODE 
          BX6    -X0*X1 
          ZR     X6,SID7     IF NO SMFIF ACTIVITY ON THIS TERMINAL
          LX6    0-18 
          SX5    X6-SHUP
          SA1    AHUA 
          ZR     X5,SID4     IF STATE IS *SHUP* 
          SX5    X6-STOT
          SA1    ATOA 
          NZ     X5,SID5     IF STATE NOT *STOT*
 SID4     RJ     ADQ         SIMULATE DRIVER *HUP* OR *TOT* REQUEST 
 SID5     SA1    A0+VFST
          BX6    X0*X1
          SA6    A1 
          ERRNZ  SIDL        CODE ABOVE ASSUMES *SIDL* = 0
 SID7     SB2    B2+B1       ADVANCE TO NEXT TERMINAL 
          SA1    SIDA        GET LAST TERMINAL NUMBER 
          SB7    X1 
          LE     B2,B7,SID3  IF MORE TERMINALS TO BE RESET
          RJ     ISM         IDLE *SMF* SUBSYSTEM 
          EQ     SIDX        EXIT 
  
  
 SIDA     CON    0           LAST TERMINAL NUMBER 
 SMS      SPACE  4,10 
**        SMS - SEND MESSAGE TO SMFEX.
* 
*         ENTRY  (SMSB) = 0 IF READY TO SEND QUEUED MESSAGE, OTHERWISE
*                         CURRENT MESSAGE HEADER. 
* 
*         EXIT   SAME AS ENTRY. 
* 
*         USES   X - 0, 1, 2, 5, 6, 7.
*                A - 1, 2, 6, 7.
*                B - 2, 3, 4, 5, 6. 
* 
*         CALLS  DPT, GMQ, GPL, QMS, RDB, SFC, SID. 
  
  
 SMS11    RJ     SID         DISCONNECT FROM *SMF* SUBSYSTEM
  
 SMS      SUBR               ENTRY/EXIT 
          SA1    SMSB        GET BUFFER HEADER
          ZR     X1,SMS3     IF BUFFER EMPTY
 SMS0     SA1    SMSC        READ BUFFER INTERLOCK WORD 
          SA2    ASMF 
          BX7    X2 
          BX6    X1 
          RJ     SFC         SEND SFCALL
          NZ     X1,SMS11    IF ABNORMAL RETURN 
          SA2    SMSD        CHECK BUFFER ADDRESS 
          NZ     X2,SMSX     IF BUFFER ALREADY USED 
          SA1    SMSB        GET MESSAGE LENGTH 
          MX0    -12
          BX6    -X0*X1 
          SA1    SMSA        GET SFCALL DESCRIPTOR
          LX6    42 
          BX6    X6+X1       MERGE LENGTH INTO DESCRIPTOR 
          RJ     SFC         SFCALL TO WRITE MESSAGE
          NZ     X1,SMS11    IF ABNORMAL RETURN 
 .RDB     IFNE   NWDB,0 
          SA1    SMSB 
          MX0    1           FLAG HEADER AS IAFEX-TO-SMFEX
          BX1    X0+X1
          RJ     RDB         RECORD MESSAGE IN DEBUGGING BUFFER 
 .RDB     ENDIF 
          BX6    X6-X6       CLEAR BUFFER TO INDICATE MESSAGE SENT
          SA6    SMSB 
 SMS3     RJ     GMQ         GET MESSAGE FROM SMF QUEUE 
          ZR     X7,SMSX     IF QUEUE EMPTY 
          SB3    X6          GET POSSIBLE POT POINTER 
          SX5    B3          GET POSSIBLE POT ADDRESS 
          LX5    3
          TB4    X5,VBMP
          MX0    -12         REMOVE POT POINTER FIELD 
          BX6    X6*X0
          MX0    12          TEST FOR MESSAGE EMBEDDED IN QUEUE 
          BX7    X6*X0
          LX7    12 
          SX7    X7-FCSM
          ZR     X7,SMS9     IF CONNECTION MESSAGE
          SX0    B1          SET WORD COUNT=1 FOR NO POT POINTER
          BX6    X6+X0
          SA6    SMSB        STORE MESSAGE HEADER IN BUFFER 
          ZR     B3,SMS0     IF NO POT POINTER WITH MESSAGE 
  
*         TRANSFER POT CONTENTS TO SMFEX MESSAGE BUFFER.
  
          SX7    B3          SAVE POT POINTER FOR FIRST POT 
          MX2    -12
          LX6    0-36        GET TERMINAL NUMBER
          BX6    -X2*X6 
          SB2    X6          (B2) = TERMINAL NUMBER 
          SB5    0           INITIALIZE WORD COUNT
          SB6    B4+VCPC-1   SET LIMIT ADDRESS FOR FIRST POT
 SMS4     SA1    B4          FETCH NEXT WORD OF INPUT 
          SB5    B5+B1       ADVANCE WORD COUNT 
          SB4    B4+B1       ADVANCE FETCH ADDRESS
          BX6    X1 
          SA6    A6+B1       ADVANCE STORE ADDRESS
          BX0    -X2*X1 
          ZR     X0,SMS5     IF END OF LINE 
          LE     B4,B6,SMS4  IF NOT END-OF-POT
          SX1    B5-MAXB+VCPC 
          PL     X1,SMS6     IF LESS THAN ONE POT SPACE AVAILABLE 
          RJ     GPL         GET NEXT POT 
          SB6    B4+VCPC-1   SET LIMIT ADDRESS FOR NEW POT
          NZ     B3,SMS4     IF NOT END OF CHAIN
 SMS5     SB3    0           FORCE DROPPING OF WHOLE POT CHAIN
 SMS6     SA1    SMSB        ADD WORD COUNT TO MESSAGE HEADER 
          SX6    B5+B1
          MX0    42 
          BX1    X1*X0
          BX6    X1+X6
          SA6    A1          STORE MESSAGE HEADER 
          BX1    X7          SAVE POINTER TO FIRST POT
          ZR     B3,SMS8     IF NO MORE POTS TO REQUEUE 
          SA7    SMSE        SAVE FIRST POT POINTER 
          SX6    B3          SAVE LAST POT POINTER
          SA6    SMSF 
          RJ     GPL         GET POT POINTER TO REQUEUE 
          ZR     B3,SMS7     IF NO MORE POTS BEYOND LAST SENT 
          SX6    FCLI        FUNCTION CODE TO REQUEUE REMAINING POTS
          SX7    B2          TERMINAL NUMBER
          LX6    48 
          LX7    36 
          BX6    X6+X7
          SX7    B3          POT CHAIN
          BX6    X6+X7       MESSAGE HEADER WORD
          RJ     QMS         QUEUE MESSAGE FOR SMFEX
 SMS7     SA1    SMSF        RESTORE LAST POT TO DROP 
          SB3    X1 
          SA1    SMSE        RESTORE FIRST POT TO DROP
 SMS8     SB4    B3          LAST POT TO DROP 
          SB3    X1          FIRST POT TO DROP
          RJ     DPT         DROP POTS
          EQ     SMS0        GO SEND MESSAGE TO SMFEX 
  
 SMS9     SX0    B1+B1       SET WORD COUNT=2 FOR CONNECTION MESSAGE
          BX6    X6+X0
          SA6    SMSB        STORE MESSAGE HEADER 
          RJ     GMQ         GET MESSAGE TEXT FROM QUEUE
          NZ     X7,SMS10    IF TEXT AVAILABLE NORMALLY 
          MX6    0           NULL TEXT IF NONE IN QUEUE 
 SMS10    SA6    A6+B1       STORE MESSAGE TEXT 
          EQ     SMS0        GO SEND MESSAGE TO SMFEX 
  
  
 SMSA     VFD    6/0,12/0,18/0,18/SMSB,6/WRIT 
 SMSB     BSSZ   MAXB 
 SMSC     VFD    6/0,12/1,18/0,18/SMSD,6/READ 
 SMSD     CON    0
 SMSE     CON    0           SAVE FIRST POT POINTER 
 SMSF     CON    0           SAVE LAST POT POINTER
          SPACE  4,10 
**        BUFFERS FOR SCP INTERFACE.
  
  
 ASMF     CON    0           ACTIVE SMF WORD
 BSMF     BSS    MAXB 
          QUAL   *
          SPACE  4
*CALL     COMCCDD 
*CALL     COMCCFD 
*CALL     COMCCPM 
*CALL     COMCDXB 
*CALL     COMCSFN 
*CALL     COMCSYS 
*CALL     COMCZTB 
          SPACE  4
          USE    BUFFERS
 TINST    BSS    0
          LIST   -R 
 TINST    HERE
          LIST   R
 TINSTL   EQU    *-TINST
 PRS      TITLE  IAFEX1 VALIDATION PRESET.
 PRS      SPACE  4,10 
**        PRS - PRESET. 
* 
*         *PRS* ABORTS THE CALLER OF *IAFEX1*.
*         *PRS* WILL BE EXECUTED ONLY IF *IAFEX1* IMPROPERLY LOADED.
* 
*         MACROS ABORT, MESSAGE.
  
  
 PRS      MESSAGE (=C* USER ACCESS NOT VALID.*),,R
          ABORT 
          TTL    IAFEX2 - TTY EXECUTIVE EXIT PROCESSOR. 
          EJECT 
          QUAL   IAFEX2 
          IDENT  IAFEX2,EXI,EXI,0,0 
          BASE   DECIMAL
*COMMENT  IAFEX - EXIT PROCESSOR. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 IAFEX2   SPACE  4,10 
*****     IAFEX2 - TTY EXECUTIVE EXIT PROCESSOR.
*         P.D. FARRELL.      77/03/17.
* 
* 
*              IAFEX2 IS CALLED BY JOB ADVANCEMENT *EXIT* 
*         COMMAND PROCESSING TO INITIATE THE TERMINATION OF THE 
*         INTERACTIVE TTY EXECUTIVE.  THIS OVERLAY HAS BEEN MADE
*         SEPARATE FROM THE MAIN TERMINATION PROCESSOR IN 
*         ORDER THAT IT MAY PROCESS A TERMINATION CORE DUMP 
*         WITHIN THE MINIMUM AMOUNT OF PROCESSOR CORE.
* 
*              IAFEX2 IS LOADED INTO AND EXECUTES WITHIN A
*         SMALL BUFFER AREA ALLOCATED WITHIN THE MAIN PROCESSOR 
*         FIELD LENGTH.  TO PREVENT OVERWRITING OF MAIN PROCESSOR 
*         CODE AND DATA, THE LENGTH OF THIS BUFFER, DEFINED AS
*         *EXIBUF* IN THE MAIN PROCESSOR OVERLAY, SHOULD BE MAIN- 
*         TAINED AT THE LENGTH OF THE EXIT OVERLAY PLUS ONE.
 IAFEX2   SPACE  4
***       IAFEX2 EXIT PROCESSING PERFORMS THE FOLLOWING FUNCTIONS:  
* 
*                - DUMPS EXECUTIVE PROCESSOR CORE IF NOT OPERATOR 
*                  DROP AND SENSE SWITCH 5 IS SET.
*                - LOADS AND TRANSFERS CONTROL TO THE TERMINATION 
*                  PROCESSOR, *IAFEX3*. 
          SPACE  4,10 
**        PROGRAMS CALLED:  
* 
*         DMD    CORE DUMP PROCESSOR. 
*         CPM    CONTROL POINT MANAGER. 
*         OVL    OVERLAY LOADER.
*         IAFEX3 TTY EXECUTIVE TERMINATION PROCESSOR. 
          TITLE  MAIN PROCESSOR.
          ORG    EXIBUF+1 
 EXI      SPACE  4,10 
**        EXI - NETWORK IAF EXIT PROCESSOR. 
  
  
 EXI      BSS    0           ENTRY
          SB1    1           SET CONSTANT B1=1
          SX6    //RPV2      SET REPRIEVE PROCESSING
          SA6    //RPVB+1 
          SX6    B0+         CLEAR ANY LEFTOVER SYSTEM REQUEST
          SA6    //RPVB+5 
          REPRIEVE  //RPVB,SETUP,37B
          MESSAGE  EXIB,1,R  ISSUES DUMP MESSAGE TO *MS1W*
          GETJCR EXIA        READ JOB CONTROL REGISTERS 
          SA1    EXIA 
          SA2    B0          READ SENSE SWITCHES
          AX1    54          CHECK ERROR FLAG 
          ZR     X1,EXI0     IF NO ERROR FLAG (RECOVERY DEADSTART)
          SX1    X1-ODET
          NZ     X1,EXI1     IF NOT *OPERATOR DROP* 
  
*         DUMP FIELD LENGTH ON *OPERATOR DROP* IF SSW4 IS SET.
  
 EXI0     LX2    59-5-4      CHECK SSW4 
          NG     X2,EXI2     IF SET 
          EQ     EXI3 
  
*         DUMP FIELD LENGTH ON OTHER THAN *OPERATOR DROP* 
*         IF SSW5 IS SET. 
  
 EXI1     LX2    59-5-5      CHECK SSW5 
          PL     X2,EXI3     IF NOT SET 
 EXI2     SYSTEM  DMD,R,A0,0  DUMP FIELD LENGTH 
          SYSTEM  DMM,R,0,0 
  
*         LOAD AND EXECUTE TERMINATION PROCESSOR. 
  
 EXI3     OVERLAY (=6LIAFEX3),00,S
  
  
 EXIA     CON    0
 EXIB     DATA   10LDUMPING CE
          DATA   10LNTRAL MEMO
          DATA   3LRY.
          TITLE  SUBROUTINES. 
 SYS=     SPACE  4,10 
**        SYS= - PROCESS SYSTEM REQUEST.
* 
*         USED IN PLACE OF SYSTEM COMMON DECK *COMCSYS* IN
*         ORDER TO REDUCE CORE REQUIREMENTS.
* 
*         ENTRY  (X6) = SYSTEM REQUEST. 
* 
*         EXIT   REQUEST ISSUED.
* 
*         USES   A - 1, 6.
*                X - 1, 6.
  
  
 SYS1     XJ
  
 SYS=     SUBR               ENTRY/EXIT 
          SA6    B1          STORE REQUEST
          EQ     SYS1        MAKE REQUEST 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMCCPM 
*CALL     COMCOVL 
          SPACE  4
          USE    END
 EXIL     EQU    *-EXI       DEFINE OVERLAY LENGTH
          TTL    IAFEX3 - TTY EXECUTIVE TERMINATION.
          EJECT 
          QUAL   IAFEX3 
          IDENT  IAFEX3,TER,TER,0,0 
*COMMENT  IAFEX - EXECUTIVE TERMINATION.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          BASE   DECIMAL
          SPACE  4,10 
***       TTY EXECUTIVE TERMINATION.
*         R.E. TATE          70/04/01.
*         P.D. FARRELL       77/03/17.
*         L. K. TUTTLE       81/01/15.
          SPACE  4
***            IAFEX3 PERFORMS TERMINATION PROCESSING FOR IAFEX.
*         THIS INCLUDES THE FOLLOWING:  
* 
*         1)     DETACHING ACTIVE USERS 
*         2) ISSUING STATISTICAL INFORMATION. 
          SPACE  4
***       DAYFILE MESSAGES. 
* 
*         SEE LISTING.
          SPACE  4
***       OPERATOR MESSAGES.
* 
*         NONE. 
          SPACE  4
***       PROGRAMS CALLED.
* 
*         CIO - CIRCULAR INPUT/OUTPUT.
*         CPM - CONTROL POINT MANAGER.
*         DMP - DUMP CORE.
*         LFM - LOCAL FILE MANAGER. 
*         MSG - ISSUE DAYFILE MESSAGE.
*         1TA - IAFEX AUXILIARY.
 TER      TITLE  TER - MAIN PROCESSOR.
 TER      SPACE  4,10 
**        TER - MAIN PROCESSOR. 
  
  
          ORG    ASM
 TER      BSS    0
          SB1    1
          GETSSID TERA       GET SUBSYSTEM IDENTIFICATION 
          SA1    TERA 
          SX0    X1-IFSI
          ZR     X0,TER1     IF IAF SUBSYSTEM 
          SX0    X1-RDSI
          NZ     X0,TER6     IF NOT RDF SUBSYSTEM 
 TER1     GETJO  TERA        GET JOB ORIGIN TYPE
          SA1    TERA 
          MX2    -6 
          BX1    -X2*X1 
          NZ     X1,TER6     IF NOT SYSTEM ORIGIN 
          MESSAGE (=C*TERMINATION IN PROGRESS.*),,R 
          MESSAGE  (=C*SESB, IAF.*),5 
          RTIME  RTIM        GET CURRENT REAL TIME
          GETJCR TERA 
          SA1    TERA 
          AX1    59-5 
          SX3    X1-ODET
          NZ     X3,TER2     IF NOT AN OPERATOR DROP
          SA1    B0          CLEAR CORE DUMP FLAG 
          SX6    5700B
          BX6    X6*X1
          SA6    A1 
          MX6    1           SET NO-RELOAD FLAG 
          SA6    VRLL 
          EQ     TER3        TERMINATE RUN
  
*         CHECK IF RECOVERY POSSIBLE. 
  
 TER2     SA1    VRLL        TIME SINCE DEADSTART AT LAST RELOAD
          SA2    RTIM        TIME SINCE DEADSTART 
          BX6    X1          CHECK FOR INITIALIZATION ABORT 
          LX6    1
          NG     X6,TER4     IF INITIALIZATION ABORT
          MX6    -24
          ZR     X1,TER3     IF FIRST RECOVERY ATTEMPT
          LX2    24 
          NG     X1,TER3     IF NO-RELOAD SET 
          BX2    -X6*X2      SECONDS SINCE DEADSTART
          IX3    X2-X1       SECONDS SINCE RECOVERY 
          NG     X3,TER3     IF FRESH DEADSTART 
          SX4    X3-60
          PL     X4,TER3     IF .GT. 60 SECONDS SINCE RECOVERY
          SX3    4
          IX3    X2-X3
          NG     X3,TER3     IF LESS THAN 4 SECONDS SINCE DEADSTART 
          MX6    1           SET NO-RELOAD FLAG 
          SA6    A1 
          MESSAGE (=C* DURATION TIME TERMINATE.*),,R
  
*         LOG OFF USERS AND ISSUE STATISTICS. 
  
 TER3     RJ     LOG         LOG OFF ACTIVE USERS 
          RJ     STA         ISSUE STATISTICS 
          SA1    B0 
          LX1    59-7        CHECK SSW2 
          NG     X1,TER4     IF SSW2 ON, AVOID RELOAD 
          SA1    VRLL        CHECK RECOVERY STATUS
          PL     X1,TER5     IF RELOAD REQUESTED
 TER4     MESSAGE  (=C* IAF TERMINATED.*) 
          MESSAGE  (=C*SESC, IAF.*),5 
          ABORT 
  
*         PROCESS RELOAD. 
  
 TER5     MESSAGE  (=C*RECOVERY COMPLETE.*),,R
          MESSAGE  (=C*SRSC, IAF.*),5 
          SA1    TERA        SET IAFEX RECOVERY FLAG IN R1
          SX6    B1 
          BX6    X1+X6
          SA6    A1 
          SETJCR TERA 
          ENDRUN
  
 TER6     MESSAGE  (=C* USER ACCESS NOT VALID.*),,R 
          ABORT 
  
  
 TERA     CON    0           JOB CONTROL REGISTERS
 RTIM     CON    0           REAL TIME
          TITLE  SUBROUTINES. 
 CKP      SPACE  4
**        CKP - CHECK POINTER WORD. 
* 
*         ENTRY-
*         (X1) = POINTER WORD.
* 
*         EXIT- 
*         (B6) = FWA. 
*         (B7) = LWA. 
*         EXITS TO ERR1 IF POINTER BAD. 
  
  
 CKP      SUBR               ENTRY/EXIT 
          SB5    A0 
          SB7    X1 
          AX1    24 
          SB6    X1 
          EQ     B6,B7,ERR1 
          NG     B6,ERR1
          NG     B7,ERR1
          ZR     B6,ERR1
          ZR     B7,ERR1
          GE     B6,B7,ERR1 
          GE     B6,B5,ERR1 
          GE     B7,B5,ERR1 
          EQ     CKPX 
 DCV      SPACE  4
**        DCV - CONVERT DATA. 
* 
*         ENTRY-
*         (X1) = DATA TO BE CONVERTED.
* 
*         EXIT- 
*         (X6) = CONVERTED DATA.
* 
*         SCRATCH-
*         X - 0, 1, 2, 3, 4, 5, 6, 7. 
*         B - 2, 3, 4, 5. 
*         A - 2, 3, 5.
  
  
 DCV      SUBR               ENTRY/EXIT 
          MX0    -18         (X0) = FRACTION MASK 
          SX4    1R.         (X4) = DECIMAL POINT 
          MX5    -36
          SA2    DCVA        =.1P48+1 
          LX4    18 
          SA3    A2+B1       =10.0P 
          SB5    6
          BX6    -X5*X1 
          SX7    1000 
          ZR     X6,DCVX     IF BLANK WORD
          SB4    1R0-1R      (B4) = CONVERSION
          SA5    A3+B1       (X5) = BACKGROUND
          PX1    X6 
          IX7    X6-X7
          SB2    -B5
          PL     X7,DCV1     IF INTEGER PRESENT 
          SB4    B0 
          SA5    A5+B1
 DCV1     DX6    X2*X1       EXTRACT REMAINDER
          FX1    X2*X1
          SB3    X1 
          LX5    -6          SHIFT ASSEMBLY 
          SB2    B2+B5       ADVANCE SHIFT COUNT
          FX6    X3*X6       EXTRACT DIGIT
          SX7    X6+B4       CONVERT DIGIT
          IX5    X5+X7       ADVANCE ASSEMBLY 
          NZ     B3,DCV1     LOOP TO ZERO REMAINDER 
          LX6    X5,B2       RIGHT JUSTIFY ASSEMBLY 
          BX1    -X0*X6      EXTRACT FRACTION 
          IX7    X1+X4       ADD POINT
          BX5    X0*X6       EXTRACT INTEGER
          LX5    6
          IX6    X5+X7       ADD INTEGER
          EQ     DCVX 
  
 DCVA     CON    0.1P48+1 
          CON    10.0P
          CON    9L 
          CON    9L     0000
 ERR      SPACE  4
**        ERR - ABORT,S ANY RECOVERY ATTEMPT. 
*         THIS ROUTINE IS CALLED WHEN ITEMS SUCH AS POINTERS HAVE 
*         BEEN MASHED.
  
  
 ERR1     MESSAGE (=C*POINTER ERROR.*),,R 
*         EQ     ERRX 
 ERRX     MESSAGE (=C*RECOVERY IMPOSSIBLE.*),,R 
          MESSAGE  (=C*SRSA, IAF.*),5 
          ABORT 
 GRI      SPACE  4,10 
**        GRI - GATHER RECOVERY INFORMATION.
* 
*         ENTRY  (A0) = ADDRESS OF TERMINAL TABLE.
*                (B4) = FWA OF PARAMETER BLOCK. 
* 
*         EXIT   RECOVERY WORDS SET IN PARAMETER BLOCK. 
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 1, 7.
  
  
 GRI      SUBR               ENTRY/EXIT 
          SA1    A0+VROT     SET UP MODES 
          SX2    34B         JOB CONTINUATION FLAG
          BX6    X1*X2       INPUT REQUESTED, OUTPUT AVAILABLE
          SX2    40B
          AX1    17-5        FILE FOR OUTPUT
          BX2    X2*X1
          BX6    X6+X2
          SA1    A0+VDCT
          SX2    B1 
          AX1    50-0 
          BX7    X1*X2       TEXT MODE
          AX1    51-50
          BX3    X1*X2       CURRENT CHARACTER SET
          AX1    55-51
          BX1    X1*X2       BRIEF MODE 
          LX7    7
          LX1    1
          BX7    X1+X7
          BX6    X6+X7
          SA1    A0+VSTT
          MX7    -3          SAVE TERMINAL TABLE SUBSYSTEM
          LX7    12 
          BX7    -X7*X1 
          LX7    18-12
          BX6    X6+X7
          MX7    1
          LX7    55-59
          BX7    X7*X1       EFFECT MODE
          LX7    8-55 
          BX6    X6+X7
          AX1    18-0 
          BX7    X2*X1       INITIAL CHAR SET 
          AX1    53-18
          SX2    101B 
          BX1    X2*X1       DISABLE TERMINAL CONTROL, NO PROMPT FLAGS
          BX6    X6+X1       MODES COMPLETED
          LX7    15-0        INIT C.S.
          LX3    12-0        CURRENT C.S. 
          BX3    X7+X3
          BX7    X6+X3
          SA1    A0+VCHT     READ CHARACTER COUNTS
          SA2    A0+VFST     READ INPUT/OUTPUT OVERFLOW COUNT 
          SA7    B4+3        WRITE RECOVERY WORD 1
          MX7    -24
          MX6    -12
          LX6    24 
          BX7    -X7*X1      SET CHARACTER COUNT
          BX2    -X6*X2      SET OVERFLOW COUNT 
          BX7    X7+X2       WRITE RECOVERY WORD 2
          SA7    A7+B1
          EQ     GRI         EXIT 
 IER      SPACE  4,10 
**        IER - ISSUE EJT SYSTEM REQUEST. 
* 
*         ENTRY  LOGA = FWA OF EJT REQUEST PARAMETER BLOCK. 
* 
*         EXIT   (X2) = 0, IF REQUEST COMPLETE. 
*                       1, IF ERROR ENCOUNTERED.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 2, 6. 
* 
*         CALLS  COD. 
* 
*         MACROS MESSAGE, RECALL, RTIME, SYSTEM.
  
  
 IER      SUBR               ENTRY/EXIT 
          RTIME  IERE        SET START TIME 
 IER1     SYSTEM EJT,R,LOGA  ISSUE EJT SYSTEM REQUEST 
          SA1    LOGA 
          AX1    10          CHECK ERROR RETURN 
          MX2    -8 
          BX2    -X2*X1 
          ZR     X2,IERX     IF NO ERROR
          SX1    X2-RTER
          NZ     X1,IER2     IF ERROR CODE OTHER THAN RETRY 
          RECALL
          SA1    LOGA        CLEAR ERROR CODE AND COMPLETION BIT
          SX2    RTER*2000B+1 
          BX6    X2-X1
          SA6    A1 
          RTIME  IERF        CHECK CURRENT TIME 
          SA1    IERE 
          SA2    A1+B1
          ERRNZ  IERF-IERE-1 CODE DEPENDS ON CONSECUTIVE WORDS
          AX1    36 
          AX2    36 
          IX2    X2-X1       ELAPSED TIME SINCE *IER* CALLED
          SX2    X2-30
          NG     X2,IER1     IF 30 SECONDS NOT YET ELAPSED
          SX2    JDER        JOB MUST BE HUNG AT A CONTROL POINT
 IER2     BX1    X2 
          SX2    X2-JOER
          ZR     X2,IERX     IF JOB ALREADY DETACHED
          RJ     COD         CONVERT ERROR CODE TO DISPLAY
          MX1    -24
          SA2    IERB        PUT ERROR CODE INTO MESSAGE
          BX6    -X1*X6 
          BX2    X1*X2
          BX6    X2+X6
          SA6    A2+
          SA2    VTTP        GET TERMINAL NUMBER
          SX1    A0 
          AX2    24 
          IX1    X1-X2
          AX1    3
          RJ     COD         CONVERT TERMINAL NUMBER TO DISPLAY 
          MX2    -30
          SA1    IERD        ADD TERMINAL NUMBER TO MESSAGE 
          BX6    -X2*X6 
          BX1    X1*X2
          BX6    X1+X6
          SA6    A1 
          MX6    -24
          SA1    LOGA        GET JSN
          LX1    24 
          BX1    -X6*X1 
          NZ     X1,IER3     IF JSN PRESENT 
          SA1    =4R****
 IER3     SA2    IERC        PUT JSN INTO MESSAGE 
          BX6    X6*X2
          BX6    X6+X1
          SA6    A2 
          MESSAGE  IERA,,R
          SX2    B1 
          EQ     IERX        RETURN 
  
 IERA     DATA   20L EJT SYSTEM REQUEST 
 IERB     DATA   10LERROR XXXX
 IERC     DATA   10L, JSN=JSNA
 IERD     DATA   10L, TN=12345
          DATA   1L.
 IERE     CON    0           START TIME 
 IERF     CON    0           CURRENT TIME 
 LOG      SPACE  4
**        LOG - LOG OFF ALL ACTIVE USERS. 
* 
*         ENTRY  (A0) = LWA+1 OF IAF FL.
* 
*         EXIT   ALL ACTIVE USERS DETACHED OR TERMINATED. 
*                ALL ACTIVE TERMINAL TABLES ZEROED. 
*                (A0) = LWA+1 OF IAF FL.
* 
*         USES   X - 0, 1, 2, 5, 6, 7.
*                A - 0, 1, 2, 6, 7. 
*                B - 2, 3, 4, 5, 6, 7.
* 
*         CALLS  CKP, COD, IER. 
* 
*         MACROS MESSAGE, PARAM, RECALL.
  
  
 LOG6     SA1    LOGC        RESTORE (A0) 
          SA0    X1 
  
 LOG      SUBR               ENTRY/EXIT 
          SA1    VTTP        GET TERMINAL TABLE POINTERS
          RJ     CKP
          SX6    A0          SAVE FL
          SA6    LOGC 
          SX5    B6          SAVE FWA OF TERMINAL TABLE 
          SB6    B6+VPST*VTTL  SET START OF ACTUAL TERMINALS
 LOG1     SA0    B6+
          SB2    VPST        SET FIRST TERMINAL NUMBER
 LOG2     SA1    A0+VUIT
          MX2    -12
          BX2    -X2*X1 
          ZR     X2,LOG3     IF EJT ORDINAL = 0 
          SA1    A0+VSTT
          LX1    59-48
          NG     X1,LOG3     IF LOGOUT IN PROGRESS
          SB4    LOGA 
          PARAM  FJEJ        FREEZE JOB 
          RJ     IER         ISSUE EJT SYSTEM REQUEST 
          NZ     X2,LOG3     IF UNABLE TO FREEZE JOB
          SB4    LOGA 
          SX0    SARC        SET REASON CODE
          PARAM  DTEJ,X0
          RJ     IER         ISSUE EJT SYSTEM REQUEST 
          NZ     X2,LOG3     IF UNABLE TO DETACH JOB
          BX6    X6-X6       CLEAR TERMINAL TABLE 
          SA6    A0 
 LOG3     SB5    A0+VTTL
          SB2    B2+B1       INCREMENT TERMINAL NUMBER
          SA0    B5 
          LT     B5,B7,LOG2  IF MORE TABLE TO SCAN
  
*         CHECK IF ALL USERS DETACHED.
  
          SA0    B6 
          SB4    B0          PRESET FAILURE COUNT 
 LOG4     SA1    A0+VUIT
          MX2    -12
          BX2    -X2*X1 
          ZR     X2,LOG5     IF EJT ORDINAL = 0 
          SB4    B4+B1       COUNT DETACH FAILURE 
 LOG5     SB5    A0+VTTL
          SA0    B5+
          LT     B5,B7,LOG4  IF SCAN NOT COMPLETE 
          ZR     B4,LOG6     IF ALL TERMINALS DETACHED
          SA1    LOGB        DECREMENT DETACH ATTEMPTS
          SX6    X1-1 
          SA6    A1+
          ZR     X6,LOG6     IF THREE ATTEMPTS, TERMINATE 
          MESSAGE  (=C* RETRY DETACHES.*),,R
          RECALL
          EQ     LOG1        LOOP TO NEXT SCAN
  
  
 LOGA     BSS    EJPB        EJT SYSTEM REQUEST PARAMETER BLOCK 
 LOGB     CON    3           DETACH RETRY COUNT 
 LOGC     CON    0           SAVE (A0)
 PPB      SPACE  4,15 
**        PPB - PRESET PARAMETER BLOCK. 
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
*                (B4) = FWA OF PARAMETER BLOCK. 
*                (X7) = FUNCTION CODE.
* 
*         EXIT   WORDS 1 - 5 CLEARED. 
*                IF *FJEJ*, AN INFORMATIVE MESSAGE IS ISSUED
*                TO *MS1W*. 
*                (X6) = 0.
*                (A7) = (B4). 
*                (X7) = (WORD 0) = JSN, FUNCTION CODE.
*                (X2) = EJT ORDINAL.
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 6, 7. 
  
  
 PPB1     SA1    A0+VUIT     GET EJT ORDINAL
          MX2    -12
          BX2    -X2*X1 
          BX6    X6-X6       CLEAR WORDS 1 - 5
          SA6    A7+1 
          MX1    EJPB-2 
 PPB2     LX1    1
          SA6    A6+B1
          NG     X1,PPB2     IF MORE WORDS TO CLEAR 
  
 PPB      SUBR               ENTRY/EXIT 
          LX7    1
          MX6    24 
          SA1    A0+VFST     ADD JSN TO WORD 0
          SX2    X7-FJEJ*2
          BX1    X1*X6
          BX7    X1+X7
          SA7    B4 
          NZ     X2,PPB1     IF NOT TO ISSUE MESSAGE
          LX6    24 
          SA2    PPBA+1 
          LX1    24 
          BX6    -X6*X2      CLEAR OLD JSN
          BX6    X1+X6       ADD NEW JSN TO MESSAGE 
          SA6    A2 
          MESSAGE  PPBA,1,R  ISSUE MESSAGE TO *MS1W* ONLY 
          EQ     PPB1        CONTINUE 
  
 PPBA     DATA   C*DETACHING, JSN= XXXX.* 
 STA      SPACE  4
**        STA - ISSUES *IAFEX* STATISTICS.
  
  
 STA8     MESSAGE STAH,,R 
  
 STA      SUBR               ENTRY/EXIT 
          SB6    STAC 
          SA1    VNTP        CHECK IF NETWORK ACTIVE
          SX6    B0+
          NZ     X1,STA1     IF ACTIVE
          SA6    STAD        TURN OF NETWORK STATISTICS 
 STA1     MX0    -12
          SB7    STAB 
          SA2    B6          GET POINTER TO QUANITY TO BE CONVERTED 
          ZR     X2,STA3     IF END OF TABLE
          SB6    B6+B1
          SA1    X2          GET QUANITY
 STA2     SA2    A2+B1       MOVE MESSAGE 
          SB6    B6+B1
          BX6    X2 
          SA6    B7+B1
          SB7    B7+B1
          BX2    -X0*X2 
          NZ     X2,STA2     IF NOT END OF MESSAGE
          MX6    -18
          BX1    -X6*X1 
          ZR     X1,STA1     IF QUANITY ZERO
          RJ     DCV         CONVERT NUMBERS
          SA1    STAA        FORMAT MESSAGE 
          MX2    24 
          MX3    36 
          BX1    X2*X1
          BX7    -X3*X6 
          AX6    24 
          BX6    -X2*X6 
          BX6    X1+X6
          SA6    A1 
          SA1    =10H     KILO- 
          BX1    -X2*X1 
          LX7    36 
          BX6    X1+X7
          SA6    A6+B1
          MESSAGE STAA,,R 
          EQ     STA1        LOOP 
  
 STA3     SA1    VCTP        ISSUE COMMAND COUNTS 
          BX6    X6-X6
          SA6    STAA+4 
          RJ     CKP
 STA4     SA1    B6+B1
          SB6    B6+2 
          SX1    X1 
          NZ     X1,STA6     IF COMMAND USED
 STA5     LT     B6,B7,STA4  IF STILL MORE COMMANDS TO CEHCK
          EQ     STA7        RETURN 
  
 STA6     RJ     DCV         CONVERT NUMBER 
          SA1    STAA        FORMAT MESSAGE 
          MX2    24 
          MX3    36 
          BX5    -X3*X6 
          AX6    24 
          BX6    -X2*X6 
          BX1    X2*X1
          BX6    X1+X6
          SA6    A1 
          SA1    B6-2        GET COMMAND NAME 
          MX6    42 
          BX1    X6*X1
          RJ     SFN         SPACE FILL NAME
          BX2    X6          SET UP FIRST FIVE CHARACTERS OF NAME 
          AX6    30 
          LX5    36 
          BX6    X5+X6
          SX7    1R 
          LX7    30 
          BX6    X6+X7
          SA6    A6+B1
          MX7    12          SET UP LAST TWO CHARACTERS OF NAME 
          LX2    30 
          BX6    X7*X2
          SA1    =8R COMMAND
          BX6    X1+X6
          SA6    A6+B1
          SA1    =4L(S).
          BX6    X1 
          SA6    A6+B1
          MESSAGE STAA,,R 
          EQ     STA5 
  
 STA7     TIME   STAF 
          RTIME  STAG 
          SA1    CPTIME 
          MX6    -12
          BX2    -X6*X1 
          AX1    12 
          SX5    1000 
          IX4    X1*X5
          IX4    X4+X2       TOTAL CPU TIME PREVIOUSLY (MS) 
          SA1    STAF 
          BX2    -X6*X1 
          AX1    12 
          IX3    X1*X5
          IX3    X3+X2       TOTAL CPU TIME CURRENTLY (MS)
          IX4    X3-X4       ELASPED CPU TIME (MS)
          SA1    STAG 
          SA2    START
          MX3    -36
          BX1    -X3*X1 
          BX2    -X3*X2 
          IX1    X1-X2       ELAPSED TIME 
          NG     X1,STA8     DEADSTART RECVOERY HAS OCCURRED
          SX5    100*1000 
          IX4    X4*X5
          IX1    X4/X1
          RJ     DCV         CONVERT NUMBER 
          SA1    STAE 
          MX2    -36
          BX7    X6 
          AX6    24 
          BX6    -X2*X6 
          BX6    X6+X1
          SA6    A1 
          SA1    A1+B1
          MX2    24 
          LX7    36 
          BX6    X2*X7
          BX6    X6+X1
          SA6    A1 
          MESSAGE STAE,,R 
          EQ     STAX 
  
 STAA     DATA   10HIAFX
 STAB     BSSZ   6
 STAC     CON    VTNL 
          DATA   C*USERS TOTAL.*
          CON    LINB 
          DATA   C*USERS MAXIMUM.*
          CON    VANL 
          DATA   C*USERS ACTIVE.* 
          CON    RECS 
          DATA   C*USERS RECOVERED.*
          CON    SPRA 
          DATA   C*WORDS MAX. FL.*
          CON    SPRB 
          DATA   C*FL INCREASES.* 
          CON    SPRL 
          DATA   C*FL DECREASES.* 
          CON    SPRF 
          DATA   C*SECS. MAX. INTERVAL* 
          CON    LINA 
          DATA   C*INCORRECT LOG IN(S).*
          CON    VABL 
          DATA   C*ABNORMAL OCCURRENCES.* 
          CON    CPBM 
          DATA   C*POTS LOW.* 
          CON    VTSR 
          DATA   C* TSEM REJECTS DUE TO FULL QUEUE.*
          CON    VTGR 
          DATA   C* TGPM REJECTS DUE TO NO POTS AVAILABLE.* 
          CON    VPPL 
          DATA   C*TIMES NO PPU.* 
          CON    TSYS+1 
          DATA   C*BASIC RUNS.* 
          CON    TSYS+2 
          DATA   C*FORTRAN RUNS.* 
          CON    TSYS+4 
          DATA   C*EXECUTES.* 
          CON    INPA 
          DATA   C*INPUT RESPONSES.*
  
*         NETWORK STATISTICS. 
  
 STAD     BSS    0
          QUAL   IAFEX4 
          CON    BLTC 
          DATA   C*BLOCKS LOST.*
          CON    IDBC 
          DATA   C*INCORRECT DATA BLOCKS.*
          CON    ISMC 
          DATA   C*INCORRECT SUPERVISORY MESSAGES.* 
          CON    LGLC 
          DATA   C*LOGICAL ERRORS.* 
          CON    NAKC 
          DATA   C*BLOCKS NAK.* 
          CON    NPBC 
          DATA   C*NETPUTS BUSY.* 
          CON    DSXC 
          DATA   C*DRIVER STACK EXITS.* 
          CON    MSXC 
          DATA   C*MONITOR STACK EXITS.*
  
          QUAL   *
          CON    0           END OF TABLE 
  
*         CPU USAGE MESSAGE.
  
 STAE     DATA   4LIAFX 
          DATA   6R PERCE 
          DATA   C*NT CPU USAGE.* 
 STAF     CON    0
 STAG     CON    0
 STAH     DATA   C*CPU UTILIZATION INDETERMINATE.*
          TITLE  COMMON DECKS.
*CALL     COMCCIO 
*CALL     COMCCPM 
*CALL     COMCCOD 
*CALL     COMCLFM 
*CALL     COMCSFN 
*CALL     COMCSYS 
          QUAL
          EJECT 
          TTL    IAFEX4 - IAFEX/NETWORK INTERFACE.
          QUAL   IAFEX4 
          IDENT  IAFEX4,TNI,,1,1
*COMMENT  IAFEX - *IAF/NAM* INTERFACE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       IAFEX4 - IAFEX/NETWORK INTERFACE. 
*         P.D. FARRELL       77/03/17.
 IAFEX4   SPACE  4
***            IAFEX4 PROVIDES THE INTERFACE BETWEEN IAFEX AND
*         NETWORK INTERFACE (NAM) TERMINALS.  IAFEX4 OPERATES 
*         AS AN ADDITIONAL TERMINAL DRIVER, EITHER IN PLACE OF
*         OR IN PARALLEL WITH THE PPU MULTIPLEXER DRIVER, 1TM,
*         OR THE INTERNAL STIMULATION DRIVER, 1TN.  IAFEX4
*         IS LOADED DURING IAFEX INITIALIZATION ONLY IF NETWORK 
*         TERMINALS HAVE BEEN DEFINED IN THE SYSTEM NETWORK FILE. 
*         BECAUSE IAFEX4 OVERLAYS TRANSACTION TERMINAL PROCESSING 
*         CODE OF THE MAIN EXECUTIVE, BOTH TRANSACTION AND NETWORK
*         TERMINALS CANNOT BE DEFINED SIMULTANEOUSLY. 
 IAFEX4   TITLE  INTERNAL DOCUMENTATION.
 GLOSSARY SPACE  4,10 
**        GLOSSARY OF NETWORK INTERFACE ACRONYMS. 
* 
* 
*         ABC    APPLICATION BLOCK COUNT (DOWNSTREAM) 
*         ABH    APPLICATION BLOCK HEADER 
*         ABL    APPLICATION BLOCK LIMIT
*         ABN    APPLICATION BLOCK NUMBER 
*         ABT    APPLICATION BLOCK TYPE 
*         ACN    APPLICATION CONNECTION NUMBER
*         ACT    APPLICATION CHARACTER TYPE 
*         AIP    APPLICATION INTERFACE PACKAGE OR PROCEDURE 
*         ALN    APPLICATION LIST NUMBER
*         APP    APPLICATION
*         BACK   BLOCK ACKNOWLEDGEMENT
*         BT     BLOCK TYPE 
*         CS     COMMUNICATIONS SUPERVISOR
*         HA     HEADER AREA
*         TA     TEXT AREA
*         NAM    NETWORK ACCESS METHOD
*         NIP    NETWORK INTERFACE PROGRAM
*         SM     SUPERVISORY MESSAGE
*         SMP    SUPERVISORY MESSAGE PROCESSOR
*         TA     TEXT AREA
*         TL     TEXT LENGTH
*         TLC    TEXT LENGTH IN CHARACTERS OR OTHER UNITS AS
*                DEFINED BY THE ACT OF THE ASSOCIATED DATA BLOCK
*         TLMAX  MAXIMUM LENGTH OF DATA MESSAGE BLOCK TEXT
 TABLES   SPACE  4
**        IAFEX4 TABLE USAGE. 
* 
*         *IAFEX4* AND THE NETWORK TERMINAL PROCESSING ROUTINES 
*         OF PPU PROGRAM *1TO* USE TERMINAL TABLE WORDS *VFST*, 
*         *VDPT*, AND *VCHT* TO MAINTAIN TERMINAL OPERATIONS PA-
*         RAMETERS. 
* 
*         IAFEX4 ALSO USES TWO DYNAMIC TABLES IN ADDITION TO THE
*         REGULAR, NON-NETWORK TABLES.  THESE TABLES, THE MESSAGE 
*         STATUS TABLE AND THE NETWORK ACTIVITY TABLE, ARE
*         ALLOCATED ONLY IF NETWORK TABLES ARE DEFINED. 
 TABLES   SPACE  4,10 
**        MESSAGE STATUS TABLE, *VMST*. 
* 
*                THE MESSAGE STATUS TABLE CONTAINS NETWORK
*         TERMINAL CONTROL INFORMATION AND SUPERVISORY MESSAGE
*         POINTERS. 
* 
*T,       16/ FLAGS,8/ DT,3/ ABC,3/ ABL,2/ ,5/ TF,5/ NP,6/ PC,12/ TP. 
* 
*                FLAG BITS: 
*                     59 = TERMINAL ON-LINE.
*                     58 = NETWORK TYPE.
*                          0 = NAM/CCP CONNECTION.
*                          1 = NAM/CDNA CONNECTION. 
*                     57 = BREAK IN PROGRESS. 
*                     56 = SHUTDOWN WARNING SENT. 
*                     55 = END-CONNECTION IN PROGRESS.
*                     54 = DATA RECEIVED PREVIOUS CYCLE.
*                     53 = *MSG* BLOCK SENT (INPUT ENABLED).
*                     52 = OUTPUT PRESENT IN *NAM*. 
*                          (THIS FLAG IS USED ONLY DURING BREAK 
*                          PROCESSING.) 
*                     51 = TYPEAHEAD IN EFFECT. 
*                     50 = UNUSED.
*                     49 = BREAK MARKER RECEIVED. 
*                     48 = TIMEOUT FLAG.
*                     47 = CONNECTION RESET RECEIVED (FC/RST) 
*                     46-44 = TEMPORARY STORAGE FOR REASON CODE.
*                DT   = DEVICE TYPE.
*                ABC  = UNACKNOWLEDGED DOWNSTREAM BLOCK COUNT.
*                ABL  = APPLICATION BLOCK LIMIT.
*                TF   = TRANSLATION FLAGS.
*                     27 = 74 ESCAPE CODE AT END OF PREVIOUS BLOCK. 
*                     26 = 76 ESCAPE CODE AT END OF PREVIOUS BLOCK. 
*                     25 = NAM TRANSPARENT CONTINUATION.
*                     24 = PARTIAL LINE AT END OF PREVIOUS BLOCK. 
*                     23 = EXTENDED ASCII OUTPUT (*0011* BYTE). 
*                NP   = NUMBER OF POTS ALLOCATED FOR OUTPUT POT STRING. 
*                PC   = POT COUNT FOR INTERNAL TYPEAHEAD QUEUE. 
*                TP   = TYPEAHEAD POT POINTER.
 TABLES   SPACE  4,10 
**        NETWORK ACTIVITY TABLE, *VNAT*. 
* 
*                THE NETWORK ACTIVITY TABLE INDICATES WHICH 
*         NETWORK TERMINALS REQUIRE SERVICE FROM THE TERMINAL 
*         MANAGER.  ONE BIT IS USED FOR EACH NETWORK TERMINAL,
*         32 BITS PER CM WORD.  A TERMINAL'S ACTIVITY IS SET
*         WHEN THE TERMINAL REQUIRES SERVICE BY THE NETWORK 
*         DRIVER.  A TERMINAL'S ACTIVITY BIT MAY BE FOUND BY
*         THE FOLLOWING ALGORITHM:  
* 
*         WORD LOCATION RELATIVE TO START OF TABLE =
* 
*            [(TERMINAL NO.) - (FIRST NETWORK TERMINAL NO.)]/32.
* 
*         BIT LOCATION RELATIVE TO BIT 59 = 
* 
*            [(TERMINAL NO.) - (FIRST NETWORK TERMINAL NO.)] MOD 32.
 RCCW     SPACE  4,10 
**        RECEIVING DATA CONTROL WORD, *RCCW*.
* 
*         THIS SINGLE WORD IS USED BY EACH TERMINAL FOR PROCESSING
*         INPUT WHICH REQUIRES MORE THAN ONE CYCLE THROUGH THE
*         TRANSLATION ROUTINE.
* 
*T,       1/F, 23/UNUSED, 18/TLC, 18/CA.
* 
*         F = FIRST SEGMENT OF LOGICAL LINE IF SET. 
*         TLC = TEXT LENGTH IN CHARACTERS OF CURRENT BLOCK. 
*         CA = CURRENT ADDRESS IN RECEIVING BUFFER (RCVB).
          TITLE  LOCAL DEFINITIONS. 
 ASCII    SPACE  4,10 
**        ASCII CHARACTERS USED AS CONSTANTS. 
  
  
 ASC.A    EQU    0#41        ASCII *A* (UC) 
 ASC.C    EQU    0#43        ASCII *C* (UC) 
 ASC.X    EQU    0#58        ASCII *X* (UC) 
 ASC.AT   EQU    0#40        ASCII COMMERCIAL AT
 ASC.CF   EQU    0#5E        ASCII CIRCUMFLEX 
 ASC.CL   EQU    0#3A        ASCII COLON
 ASC.CM   EQU    0#2C        ASCII *,*
 ASC.CR   EQU    0#0D        ASCII *CR* 
 ASC.ETX  EQU    0#03        ASCII *ETX*
 ASC.LF   EQU    0#0A        ASCII *LF* 
 ASC.PD   EQU    0#2E        ASCII *.*
 ASC.PL   EQU    0#2B        ASCII *+*
 ASC.SP   EQU    0#20        ASCII SPACE
 ASC.US   EQU    0#1F        ASCII *US* 
 ASC.0    EQU    0#30        ASCII ZERO 
 EXT      SPACE  4,10 
**        EXT - DISABLE NETWORK CALL MACRO *EXT* PSEUDO-OP. 
* 
*         THE NETWORK CALL MACROS AS DEFINED IN NETTEXT USE 
*         *EXT* PSEUDO-OPS TO REFERENCE AIP MODULE ENTRY POINTS.
*         THESE MUST BE DISABLED IN ORDER TO ALLOW ABSOLUTE 
*         ASSEMBLIES. 
  
  
 EXT      OPSYN  NIL
 MSGHDR   SPACE  4,10 
**        MSGHDR - GENERATE MESSAGE HEADER. 
* 
*         GENERATES NETWORK FORMAT MESSAGE HEADER.
* 
* LOC     MSGHDR ABT=A,ADR=B,ABN=C,ACT=D,NFE=E,XPT=F,AIM=G,TLC=H. 
*                *ABT* = BLOCK TYPE.
*                *ADR* = ADDRESS (USUALLY ACN). 
*                *ABN* = APPLICATION BLOCK NUMBER.
*                *ACT* = CHARACTER TYPE.
*                *NFE* = NO-FORMAT-AFFECTOR BIT (0 OR 1). 
*                *XPT* = NAM TRANSPARENT MODE BIT (0 OR 1). 
*                *AIM* = AUTO-INPUT MODE BIT (0 OR 1).
*                *TLC* = TEXT LENGTH IN *ACT* UNITS.
* 
*         OMITTED PARAMETERS DEFAULT TO A VALUE OF ZERO.
  
  
          PURGMAC MSGHDR
 MSGHDR   MACROE ABT,ADR,ABN,ACT,NFE,XPT,AIM,TLC
  VFD 6/ABT,12/ADR,18/ABN,4/ACT,4/0,1/NFE,1/XPT,1/0,1/AIM,12/TLC
          ENDM
 NETLINK  SPACE  4,10 
**        NETLINK - GENERATE NETWORK LINKAGE. 
* 
*         LINKS TO A NETWORK AIP ENTRY AS LOADED. 
* 
*         NETLINK ENTRY 
*                ENTRY = NAME OF AIP ENTRY POINT. 
* 
*         CODE GENERATED: 
* 
* ENTRY   PS     0
*         SA4    ENTRY       READ ENTRY POINT 
*         SX5   (AIP)        SET AIP ENTRY POINT ADDRESS
*                            (PRESET DURING INITIALIZATION.)
*         EQ     XRJ         TRANSFER RETURN JUMP 
  
  
 NETLINK  MACRO A 
  IFC     EQ,*A**,1 
  ERR     NETLINK ENTRY POINT OMITTED.
A PS      0 
  SA4 A 
  SX5 *+400000B 
  EQ XRJ
  ENDM
          LIST   X
*CALL     COMSNCD 
          LIST   *
*CALL     COMSSCP 
          TITLE  COMMON STORAGE.
          SPACE  4,10 
          ORG    //TINST+5
 TNI      BSS    0           DEFINE FWA OF OVERLAY. 
          SPACE  4,10 
**        PROCESSOR CONTROL FLAGS.
* 
*         FLAG USAGE: 
* 
*                NONZERO = ON/TRUE/SET. 
*                ZERO    = OFF/FALSE/CLEAR. 
  
  
 IBSY     CON    0           HEADER ADDRESS IF INPUT BUFFER BUSY
 NBSY     CON    0           NAM (PARALLEL MODE) BUSY 
 NDSL     CON    0           NETWORK DRIVER STACK LIMIT 
 NTON     CON    0           NETWORK CONNECTED
 OBSY     CON    0           OUTPUT BUFFER BUSY 
 PCRX     CON    0           PREVIOUS CYCLE FORCED READ EXIT
 SHDF     CON    0           SHUTDOWN ADDRESS:  
                             POSITIVE = NORMAL SHUTDOWN 
                             NEGATIVE = FORCED SHUTDOWN 
 SUPA     CON    0           SUPERVISORY MESSAGE AVAILABLE
          SPACE  4,10 
**        INTERESTING STATISTICS. 
  
  
 BLTC     CON    0           BLOCK-LOST COUNT 
 DSXC     CON    0           DRIVER STACK EXIT COUNT
 IDBC     CON    0           INCORRECT DATA BLOCK COUNT 
 ISMC     CON    0           INCORRECT SUPERVISORY MESSAGE COUNT
 LGLC     CON    0           LOGICAL ERROR COUNT
 MSXC     CON    0           MONITOR STACK EXIT COUNT 
 NAKC     CON    0           *NAK* COUNT
 NGBC     CON    0           NETGET BUSY COUNT
 NPBC     CON    0           NETPUT BUSY COUNT
          SPACE  4,10 
**        DATA STORAGE. 
  
  
 CCFC     CON    0           CURRENT CYCLE FUNCTION COUNT COMPLEMENT
 HACN     CON    0           HIGHEST ACN ACTIVE 
 NCIN     CON    0           NUMBER OF CHARACTERS ON INPUT LINE 
 NDSA     CON    0           NETWORK DRIVER STACK ADDRESS 
 NFRT     CON    0           NETWORK FUNCTION REAL TIME CLOCK 
 NGLN     CON    0           NETGET LIST OR ACN NUMBER
 NSPA     CON    0           NETWORK DRIVER STACK POINTER ADDRESS 
 NSQP     CON    0           NULL SUPERVISORY MESSAGE QUEUE POINTER 
 NSUP     CON    0           AIP PARALLEL STATUS RESPONSE 
 OTPP     CON    0           OUTPUT MESSAGE POT POINTER 
 RCCW     CON    0           RECEIVING DATA CONTROL WORD
 SMPF     CON    0           SUPERVISORY MESSAGE PRIMARY FUNCTION CODE
 SMSF     CON    0           SUPERVISORY MESSAGE SUBFUNCTION CODE 
 TMSI     CON    0           TERMINAL MANAGER SCAN INDEX
          SPACE  4,10 
**        AIP TRACE DATA STORAGE. 
  
 ATMC     CON    0           MESSAGE COUNT
 JPTO     DATA   10H"TJOB"      JOB FILE TO PROCESS AIP TRACE OUTPUT
 MXLT     CON    MXML        MAXIMUM MESSAGE LENGTH 
 RWTF     DATA   0           REWIND FILE SPECIFIED BY *TJOB*
          SPACE  4,10 
**        TEMPORARY PARAMETERS FOR NETWORK CALLS. 
  
  
 NCPA     CON    0           PARAMETER A
 NCPB     CON    0           PARAMETER B
 NCPC     CON    0           PARAMETER C
 NCPD     CON    0           PARAMETER D
 NCAS     CON    0           SAVE (A0)
 NCBS     CON    0           SAVE (B2)
 NCZP     CON    0           CONSTANT ZERO FOR RESERVED PARAMETERS
          SPACE  4,10 
**        CANNED SUPERVISORY MESSAGES.
  
  
*         HDRS1 - HEADER FOR ONE WORD MESSAGE (DEFAULT HEADER). 
  
 HDRS1    MSGHDR ABT=BTSV,ACT=1,TLC=1 
  
  
*         HDRS2 - HEADER FOR TWO WORD MESSAGE.
  
 HDRS2    MSGHDR ABT=BTSV,ACT=1,TLC=2 
  
  
*         HDRS3 - HEADER FOR A SYNCHRONOUS SUPERVISORY MESSAGE. 
  
 HDRS3    MSGHDR ABT=BTSV,ACT=2,TLC=2 
  
  
*         HDRS4 - HEADER FOR *CONEND* WITH PARAMETERS.
  
 HDRS4    MSGHDR ABT=BTSV,ACT=1,TLC=8 
  
  
*         CONREQ - CONNECTION REQUEST REPLY.
  
 CONREQ   VFD    8/PFCN,2/1,6/SFRT,34/0,4/2,6/1 
  
  
*         CONREJ - CONNECTION REJECT. 
  
 CONREJ   VFD    8/PFCN,2/2,6/SFRT,8/0,36/0 
  
  
*         CONEND - END CONNECTION.
  
 CONEND   VFD    8/PFCN,2/0,6/SFEN,44/0 
          CON    0           CONEND PARAMETER 
  
  
*         FCBRK - CONNECTION BREAK. 
  
 FCBRK    VFD    8/PFFC,2/0,6/SFBK,44/0 
  
  
*         DCTRU - TRUNCATE UPLINE DATA TO IAF BUFFER SIZE.
  
 DCTRU    VFD    8/PFDC,2/0,6/SFTR,44/0 
  
  
*         FCINI - CONNECTION INITIATION RESPONSE. 
  
 FCINI    VFD    8/PFFC,2/1,6/SFCM,44/0 
  
  
*         INTRES - RESPONSE TO BYPASS INTERRUPT FROM USER.
  
 INTRES   VFD    8/PFIN,2/0,6/SFRS,44/0 
  
  
*         LSTFDX - LIST CONTROL, FULL DUPLEX - CANCEL TYPEAHEAD.
  
 LSTFDX   VFD    8/PFLS,2/0,6/SFFD,44/0 
  
  
*         LSTHDX - LIST CONTROL, HALF DUPLEX - INITIATE TYPEAHEAD.
  
 LSTHDX   VFD    8/PFLS,2/0,6/SFHD,44/1 
  
  
*         ROMARK - RESUME OUTPUT. 
  
 ROMARK   VFD    8/PFRO,8/0,40/0
  
  
*         DLTDC - DOWNLINE TERMINAL DEFINITION - CDNA.
*         MESSAGE HEADER IS USED FOR *0010* CONTROL BYTE PROCESSING.
  
 DLTDC    MSGHDR ABT=BTSV,ACT=2 
  
*         DLTDF - DOWNLINE TERMINAL DEFINITION - CCP. 
*         MESSAGE HEADER IS USED BY BOTH *0006* AND *0016* CONTROL
*         BYTE PROCESSING.  MESSAGE TEXT IS USED BY *0006* CONTROL
*         BYTE PROCESSING ONLY. 
  
 DLTDF    MSGHDR ABT=BTSV,ACT=2 
          VFD    8/PFTC,8/SFDM,8/70D,8/0,8/52D,8/1,8/57D,4/0
          VFD    4/0,8/58D,8/0,8/60D,8/0,8/56D,8/0,8/59D
          SPACE  4,10 
**        CANNED DATA MESSAGES. 
  
  
*         HDRM - GENERAL IVT ASCII MESSAGE HEADER.
  
 HDRM     MSGHDR ABT=BTBK,ACT=2 
  
  
*         HDRAI - AUTO-INPUT MODE MESSAGE HEADER. 
  
 HDRAI    MSGHDR ABT=BTMS,ACT=2 
  
  
*         HDRB - NAM TRANSPARENT OUTPUT MESSAGE HEADER. 
  
 HDRB     MSGHDR ABT=BTBK,ACT=2,XPT=1 
  
  
*         DMBI - NULL MSG BLOCK.
  
 DMBI     MSGHDR ABT=BTMS,ACT=4,TLC=10
          DATA   1L,
  
  
*         DMBL - BELL MESSAGE.
  
 DMBL     MSGHDR ABT=BTBK,ACT=2,TLC=4 
          DATA   0#2C07071FS28
 DMBLL    EQU    *-DMBL 
  
  
*         DMIC - * INCORRECT COMMAND.*
  
 DMIC     MSGHDR ABT=BTBK,ACT=4,TLC=40
          DATA   10L  INCORREC
          DATA   10LT COMMAND.
          DATA   2L 
          DATA   1L 
 DMICL    EQU    *-DMIC 
  
  
*         DMID - "IDLE".
  
 DMID     MSGHDR ABT=BTMS,ACT=4,TLC=20
          DATA   5L IDLE
          DATA   1L 
 DMIDL    EQU    *-DMID 
  
  
*         DMIF - "INCORRECTLY FORMATTED DATA."
  
 DMIF     MSGHDR ABT=BTBK,ACT=4,TLC=50
          DATA   10L  INCORREC
          DATA   10LTLY FORMAT
          DATA   10LTED DATA. 
          DATA    1L
          DATA    1L
 DMIFL    EQU    *-DMIF 
  
  
*         DMIN - "*INTERRUPTED*"
  
 DMIN     MSGHDR ABT=BTMS,ACT=4,TLC=30
          DATA   10L  *INTERRU
          DATA   5LPTED*
          DATA   1L 
 DMINL    EQU    *-DMIN 
  
  
*         DMIP - INPUT PROMPT.
  
 DMIP     MSGHDR ABT=BTMS,ACT=4,TLC=10
          DATA   3L,? 
  
  
*         DMIT - "INCORRECTLY FORMATTED TRMDEF DATA." 
  
 DMIT     MSGHDR ABT=BTBK,ACT=4,TLC=50
          DATA   10L  INCORREC
          DATA   10LTLY FORMAT
          DATA   10LTED TRMDEF
          DATA   6L DATA. 
          DATA   1L 
 DMITL    EQU    *-DMIT 
  
  
*         DMLP - " WRITE ON READ-ONLY FILE."
  
 DMLP     MSGHDR ABT=BTMS,ACT=4,TLC=40
          DATA   10L0 WRITE ON
          DATA   10L READ-ONLY
          DATA    6L FILE.
          DATA    1L
 DMLPL    EQU    *-DMLP 
  
  
*         DMNP - " NO PRIMARY FILE."
  
 DMNP     MSGHDR ABT=BTMS,ACT=4,TLC=30
          DATA   10L0 NO PRIMA
          DATA    8LRY FILE.
          DATA    1L
 DMNPL    EQU    *-DMNP 
  
  
*         DMOV - " *OVL*".
  
 DMOV     MSGHDR ABT=BTMS,ACT=4,TLC=20
          DATA   7L  *OVL*
          DATA   1L 
 DMOVL    EQU    *-DMOV 
  
  
*         DMRC - "RUN COMPLETE."
  
 DMRC     MSGHDR ABT=BTMS,ACT=4,TLC=30
          DATA   10L  RUN COMP
          DATA    5LLETE. 
          DATA   1L 
 DMRCL    EQU    *-DMRC 
  
  
*         DMRDY - "READY."
  
 DMRDY    MSGHDR ABT=BTMS,ACT=4,TLC=20
          DATA   8L  READY. 
          DATA   1L 
 DMRDYL   EQU    *-DMRDY
  
  
*         DMSH - "NETWORK SHUTDOWN - PLEASE LOGOUT."
  
 DMSH     MSGHDR ABT=BTMS,ACT=4,TLC=50
          DATA   10L0 NETWORK 
          DATA   10LSHUTDOWN -
          DATA   10L PLEASE LO
          DATA    5LGOUT. 
          DATA    1L0 
 DMSHL    EQU    *-DMSH 
  
  
*         DMSL - */* (OR *SLASH*).
  
 DMSL     MSGHDR ABT=BTMS,ACT=4,TLC=10
          DATA   2L,/ 
 DMSLL    EQU    *-DMSL 
  
  
*         DMTO - " TERMINAL TIMEOUT IN NNN SECONDS. " 
  
 DMTO     MSGHDR ABT=BTMS,ACT=4,TLC=50
          DATA   10L TERMINAL 
          DATA   10LTIMEOUT IN
 DMTOS    DATA   6R SECON 
          DATA   2LDS 
          DATA   1L 
 DMTOL    EQU    *-DMTO 
 NDR      TITLE  NDR - NETWORK DRIVER MAIN CONTROL. 
 NDR      SPACE  4,10 
**        NDR - NETWORK DRIVER MAIN CONTROL.
* 
*         THIS IS THE MAIN CONTROL LOOP OF THE NETWORK DRIVER.
* 
*         ENTRY  (PCRX) = SET IF EXIT FORCED ON PREVIOUS CYCLE. 
*                (DBUG) = DRIVER DEBUG STATUS.
* 
*         EXIT   (PCRX) = SET IF EXIT FORCED. 
* 
*         CALLS  CCT, CFX, CKP, GLM, GTM, MGR, NON, NSQ,
*                RDM, RTF, SHA, SHD.
  
  
 NDR      SUBR               ENTRY/EXIT 
  
*         CHECK DEBUG SWITCH. 
  
          SA2    DBUG        READ DRIVER DEBUG WORD 
          MX6    -12
          BX3    -X6*X2      MASK BYTE 4
          NZ     X3,NDRX     IF BYTE 4 SET, EXIT
          LX6    12          MOVE BYTE 3 TO BYTE 4
          BX1    -X6*X2 
          AX1    12 
          BX6    X2+X1
          SA6    A2+         REWRITE DEBUG WORD 
  
*         CHECK CONNECTION STATUS.
  
          SX7    -NFCL
          SA1    NTON        READ NETON FLAG
          SX6    B0+
          SA6    NDSL 
          SA7    CCFC 
          NZ     X1,NDR1     IF NTON SET
          RJ     NON         TRY TO CONNECT 
          EQ     NDRX        EXIT 
  
*         CHECK SHUTDOWN STATUS.
  
 NDR1     SA1    VSHD        CHECK SCP STATUS 
          SA2    SHDF        READ SHUTDOWN FLAG 
          PL     X1,NDR2     IF NO SCP FAILURE
          PL     X2,SCF      IF IMMEDIATE SHUTDOWN NOT IN PROGRESS
 NDR2     ZR     X2,NDR3     IF NO SHUTDOWN IN PROGESS
          RJ     SHD         PROCESS SHUTDOWN 
          NG     X6,NDRX     IF IMMEDIATE SHUTDOWN
  
*         CHECK NETWORK STATUS. 
  
 NDR3     SA1    NBSY        GET PREVIOUS CYCLE STATUS
          ZR     X1,NDR4     IF NAM NOT BUSY PREVIOUS CYCLE 
          RJ     CKP         CHECK NAM STATUS 
          NZ     X6,NDRX     IF NAM BUSY, EXIT
 NDR4     RJ     RTF         RELEASE TRACE FILE 
          NZ     X6,NDRX     IF NAM BUSY, EXIT
  
*         POSTPROCESS PREVIOUS CYCLE NETWORK CALL.
  
          SA4    IBSY        CHECK FOR INPUT
          ZR     X4,NDR5     IF NO INPUT
          RJ     RDM         PROCESS MESSAGE
          NZ     X6,NDRX     IF UNABLE TO PROCESS AT THIS TIME
          SA1    NBSY 
          SA2    CCFC        INCREMENT FUNCTION COUNT 
          NZ     X1,NDRX     IF NAM BUSY, EXIT
          SX7    X2+B1
          SA7    A2 
          PL     X7,NDRX     IF FUNCTION LIMIT, EXIT
  
*         PROCESS ASYNCHRONOUS SUPERVISORY MESSAGES.
  
 NDR5     SA1    SUPA        CHECK FOR SUPERVISORY MESSAGE
          SA2    NDSL        CHECK STACK LIMIT
          NZ     X2,NDRX     IF STACK LIMIT, EXIT 
          ZR     X1,NDR6     IF NO MESSAGE WAITING
          SB2    B0+
          RJ     GTM         GET MESSAGE, (B2) = ACN 0
          NZ     X6,NDRX     IF NAM BUSY, EXIT
          ZR     X2,NDR6     IF NO MESSAGE
          RJ     RDM         PROCESS MESSAGE
          NZ     X6,NDR12    IF UNABLE TO PROCESS AT THIS TIME
          SA1    NBSY 
          SA2    CCFC        INCREMENT FUNCTION COUNT 
          NZ     X1,NDRX     IF NAM BUSY, EXIT
          SX7    X2+B1
          SA7    A2 
          NG     X7,NDR5     IF NOT FUNCTION LIMIT
          EQ     NDRX        EXIT 
  
*         TRANSMIT NULL SUPERVISORY MESSAGE QUEUE.
  
 NDR6     SA1    NSQP        CHECK QUEUE POINTER
          ZR     X1,NDR7     IF EMPTY 
          RJ     NSQ         TRANSMIT NULL QUEUE
          NZ     X6,NDRX     IF NAM BUSY, EXIT
  
*         EXECUTE TERMINAL MANAGER. 
  
 NDR7     RJ     CFX         CHECK FOR FORCED EXIT
          NZ     X6,NDRX     IF FORCED EXIT 
          RJ     MGR         EXECUTE TERMINAL MANAGER 
          NZ     X6,NDRX     IF FORCED EXIT OR STACK LIMIT
  
*         CHECK IF IT IS TIME TO REQUEST INPUT. 
  
          SA1    PCRX        CHECK PREVIOUS CYCLE READ EXIT 
          SA6    A1+         CLEAR FLAG 
          NZ     X1,NDR8     IF FORCED READ EXIT PREVIOUS CYCLE 
          RJ     CCT         CHECK CYCLE TIME 
          ZR     X6,NDRX     IF NOT TIME FOR INPUT, EXIT
  
*         REQUEST DATA OR SUPERVISORY MESSAGE FROM NETWORK. 
  
 NDR8     SA1    SUPA        CHECK FOR SUPERVISORY MESSAGE
          SX2    B1          SET (X2) = LIST 1
          SB2    B0          SET (B2) = ACN 0 
          ZR     X1,NDR9     IF NO SUPERVISORY MESSAGE QUEUED 
          RJ     GTM         GET MESSAGE, ACN =0
          EQ     NDR11       CHECK NAM BUSY 
  
 NDR9     RJ     CFL         CHECK AVAILABLE POT COUNT
          PL     X2,NDR10    IF MINIMUM OR ABOVE, GET INPUT FROM NAM
          RJ     CKP         CHECK NAM STATUS 
          SA1    VCPL 
          NZ     X1,NDRX     IF FL INCREASE PENDING 
          SA1    SPRM        INCREMENT THROTTLE FLAG
          SX6    X1+1 
          SA6    A1+
          EQ     NDRX        EXIT 
  
 NDR10    SX2    B1          SET (X2) = LIST 1
          RJ     GLM         GET DATA LIST MESSAGE
 NDR11    NZ     X6,NDR12    IF NAM BUSY
          ZR     X2,NDRX     IF NO MESSAGE, EXIT
          SA1    NDSL        CHECK STACK LIMIT
          NZ     X1,NDR12    IF STACK LIMIT 
          RJ     RDM         PROCESS MESSAGE
          NZ     X6,NDR12    IF UNABLE TO PROCESS AT THIS TIME
  
*         CONTINUE READING IF WE CAN. 
  
          SA2    CCFC        INCREMENT CYCLE FUNCTION COUNT 
          SA3    NBSY 
          NZ     X3,NDR12    IF NAM BUSY
          SX7    X2+B1       INCREMENT FUNCTION COUNT 
          SA7    A2 
          NZ     X7,NDR8     IF NOT CYCLE LIMIT, LOOP 
          RJ     CFX         CHECK FOR FORCED EXIT
          ZR     X6,NDR8     IF NOT FORCED EXIT, LOOP 
  
*         SET FORCED READ EXIT FLAG AND EXIT. 
  
 NDR12    SX6    B1+         SET FORCED READ EXIT FLAG
          SA6    PCRX 
          EQ     NDRX        EXIT 
 MGR      TITLE  MGR - TERMINAL MANAGER.
 MGR      SPACE  4,20 
**        MGR - TERMINAL MANAGER. 
* 
*         SCANS THE NETWORK TERMINAL TABLES AND MESSAGE STATUS
*         TABLES AND DIRECTS PROCESSING AS REQUIRED FOR EACH
*         ACTIVE TERMINAL.
* 
*         *MGR* PERIODICALLY CHECKS THE EXECUTIVES OTHER DRIVER 
*         STACKS AND THE MONITOR REQUEST STACK TO SEE IF THEY 
*         REQUIRE PROCESSING.  IF SO, *MGR* WILL EXIT.
* 
*         ENTRY  NAM NOT BUSY.
*                (TMSI) = CURRENT SCAN INDEX. 
* 
*         EXIT   (X6) = NONZERO IF FORCED EXIT OR STACK LIMIT.
*                (CCFC) = CURRENT CYCLE FUNCTION COUNT COMPLEMENT.
* 
*         CALLS  CFX, GAT, ISW, PDR, PQO, RDM, SSM, TFR, UNQ. 
  
  
 MGR      SUBR               ENTRY/EXIT 
  
*         CHECK IF IT IS TIME TO CYCLE THE MANAGER. 
  
          SA2    TMSI        GET SCAN INDEX 
          SB2    X2+         (B2) = SCAN INDEX (TERMINAL NUMBER)
          TX3    X2,-VNTP 
          NZ     X3,MGR1     IF NOT STARTING FROM GROUND ZERO 
          BX6    X6-X6       CLEAR ACTIVITY INDICATOR 
          SA2    MGRB 
          SA6    A2 
          NZ     X2,MGR1     IF ACTIVITY PRESENT - CONTINUE PROCESSING
          SA3    RTIM        CURRENT REAL TIME
          SA4    MGRA        TIME OF LAST CYCLE 
          SX5    NMCT        SET MINIMUM MANAGER SCAN CYCLE TIME
          MX6    -36
          IX4    X3-X4       ELAPSED TIME 
          BX4    -X6*X4      MASK MILLISECONDS
          LX7    X3 
          IX4    X4-X5       COMPARE TO MINIMUM 
          BX6    X6-X6       RETURN (X6) = 0
          NG     X4,MGRX     IF NOT MINIMUM, RETURN 
          SA7    A4+         RESET START TIME 
  
*         FIND TERMINAL WITH ACTIVITY BIT SET.
  
 MGR1     RJ     GAT         GET ACTIVE TERMINAL
          NZ     X6,MGR2     IF TERMINAL FOUND
          TX7    B0,VNTP     RESET SCAN INDEX 
          SA7    TMSI 
          EQ     MGRX        RETURN 
  
*         PROCESS REENTRY.
  
 MGR2     SA6    TMSI        STORE SCAN INDEX 
          SA6    SSPA        SET TERMINAL NUMBER IN SSPA
          SA1    NDSL        CHECK STACK LIMIT
          NZ     X1,MGR7     IF STACK LIMIT 
          RJ     PDR         PROCESS DRIVER REENTRY 
          NZ     X6,MGR6     IF REENTRY PROCESSED 
  
*         PROCESS FUNCTION REQUEST. 
  
          SA1    A0+VDCT     READ VDCT
          PL     X1,MGR3     IF NOT FUNCTION REQUEST
          RJ     TFR         PROCESS REQUEST
          EQ     MGR6 
  
*         CHECK FOR QUEUED OUTPUT.
  
 MGR3     RJ     PQO         PROCESS QUEUED OUTPUT
          NZ     X6,MGR6     IF OUTPUT
  
*         CHECK FOR SHUTDOWN WARNING. 
  
          SA4    SHDF        CHECK SHUTDOWN FLAG
          ZR     X4,MGR4     IF SHUTDOWN NOT IN PROGRESS
          TA5    B2,VMST     GET VMST ENTRY 
          LX5    59-56
          NG     X5,MGR4     IF SHUTDOWN WARNING SENT 
          RJ     ISW         ISSUE SHUTDOWN WARNING 
          EQ     MGR6 
  
*         CHECK FOR INTERNAL TYPEAHEAD QUEUE. 
  
 MGR4     TA2    B2,VMST
          MX6    -12
          BX3    -X6*X2 
          ZR     X3,MGR5     IF NO DATA QUEUED
          SA1    A0+VROT
          SX3    1S5
          BX6    X1*X3
          NZ     X6,MGR7     IF INPUT REQUEST IS ALREADY SATISFIED
          MX5    -5 
          BX5    -X5*X1 
          SX5    X5-1 
          SB5    B2 
          RJ     GRT
          BX5    X4+X5
          ZR     X5,MGR4.1   IF WAITING TO START A NEW JOB STEP 
          SA1    A0+VFST     GET SCREEN MANAGEMENT STATE
          MX0    -6 
          AX1    18 
          BX1    -X0*X1 
          SX1    X1-/SMFIF/SINP 
          ZR     X1,MGR4.1   IF SMFEX IS AWAITING INPUT 
          AX4    48 
          SX4    X4-INP$
          NZ     X4,MGR7     IF NOT WAITING FOR PROGRAM INPUT 
 MGR4.1   RJ     UNQ         UNQUEUE TYPEAHEAD INPUT DATA 
          SX6    B1+
          RJ     RDM         PROCESS MESSAGE
          EQ     MGR6        UPDATE FUNCTION COUNT
  
*         CLEAR TERMINAL ACTIVITY BIT.
  
 MGR5     TX2    B2,-VNTP    SET TERMINAL ORDINAL 
          SX6    37B
          BX6    X6*X2       TERMINAL ORDINAL MOD 32
          AX2    5           TERMINAL ORDINAL/32
          TA2    X2,VNAT     READ TABLE WORD
          SB5    X6-59
          MX6    -1 
          AX6    X6,B5
          BX6    X6*X2       CLEAR BIT
          SA6    A2          REWRITE TABLE WORD 
          EQ     MGR7 
  
*         UPDATE FUNCTION COUNT.
  
 MGR6     SA1    CCFC        GET FUNCTION COUNT 
          SX7    X1+B1       UPDATE COUNT 
          SA7    A1 
  
*         ADVANCE SCAN TO NEXT TERMINAL.
  
 MGR7     SA1    HACN        GET HIGHEST ACTIVE ACN 
          SA2    NBSY 
          SB2    B2+B1       ADVANCE SCAN 
          TX7    B0,VNTP     ASSUME END OF SCAN 
          SB7    X1          (B7) = HIGHEST ACTIVE ACN
          SX6    B1          PRESET (X6) EXIT STATUS
          GT     B2,B7,MGR8  IF END OF SCAN 
          SX7    B2          SET CURRENT SCAN INDEX 
 MGR8     SA7    TMSI        STORE SCAN INDEX 
          NZ     X2,MGRX     IF NAM BUSY, EXIT
          SX6    B0+         RESET (X6) EXIT STATUS 
          GT     B2,B7,MGRX  IF END OF SCAN, EXIT 
          RJ     CFX         CHECK FOR FORCED EXIT
          NZ     X6,MGRX     IF FORCED EXIT 
          SA1    CCFC        GET CYCLE FUNCTION COUNT 
          ZR     X1,MGRX     IF FUNCTION LIMIT
          EQ     MGR1        PROCESS NEXT TERMINAL
  
 MGRA     CON    0           REAL TIME LAST SCAN
 MGRB     CON    0           ACTIVITY INDICATOR (SET BY CBL)
 NSQ      TITLE  NSQ - NULL SUPERVISORY QUEUE PROCESSOR.
 NSQ      SPACE  4,20 
**        NSQ - PROCESS NULL SUPERVISORY MESSAGE QUEUE. 
* 
*         THE NULL SUPERVISORY MESSAGE QUEUE CONSISTS OF THOSE
*         MESSAGES WHICH, FOR ONE REASON OR ANOTHER, CANNOT BE
*         ASSIGNED TO A TERMINAL'S MESSAGE STATUS TABLE.
* 
*         ENTRY  (NSQP) = 30/LAST, 30/FIRST MESSAGE POT POINTER.
* 
*         EXIT   (NSQP) = UPDATED.
*                (NBSY) = SET IF NAM BUSY.
*                (OTPP) = MESSAGE POT POINTER IF NAM BUSY.
*                (OBSY) = SET IF NAM BUSY.
*                (X6)   = (NBSY). 
* 
*         USES   (NCPA) = HEADER ADDRESS. 
*                (NCPB) = TEXT ADDRESS. 
* 
*         CALLS  DLP, DPT, SSM. 
  
  
 NSQ      SUBR               ENTRY/EXIT 
 NSQ1     SA2    NSQP        READ QUEUE POINTER 
          SX6    B0+
          ZR     X2,NSQX     IF QUEUE EMPTY, EXIT 
          SX1    X2          SET MESSAGE POT POINTER
  
*         UPDATE QUEUE POINTER. 
  
          BX2    X2-X1       CLEAR FIRST POT FROM QUEUE POINTER 
          RJ     DLP         DELINK MESSAGE POT 
          NZ     X7,NSQ2     IF POT WAS LINKED
          SX2    B0+         CLEAR LAST POT POINTER 
 NSQ2     BX7    X2+X7       UPDATE QUEUE POINTER 
          SA7    A2 
  
*         EXTRACT ACN FROM MESSAGE. 
  
          BX2    X1          SET POT ADDRESS
          LX2    3
          TB4    X2,VBMP
          SA2    B4+B1       READ FIRST MESSAGE WORD
          MX3    8           MASK PRIMARY FUNCTION CODE 
          BX3    X3*X2
          LX3    8
          SX5    X3-PFTC
          NZ     X5,NSQ3     IF NOT *PFTC*
          SA2    B4          READ MESSAGE HEADER
          AX2    42-24
 NSQ3     AX2    24-0        MASK ACN 
          MX3    -12
          BX2    -X3*X2 
          SB2    X2          SET ACN
          TA2    B2,VMST     READ VMST ENTRY
          ZR     X2,NSQ4     IF TERMINAL NOT CONNECTED
  
*         TRANSMIT MESSAGE TO NETWORK.
  
          RJ     SSM         SEND SUPERVISORY MESSAGE 
          ZR     X6,NSQ1     IF COMPLETE, LOOP FOR NEXT MESSAGE 
          EQ     NSQX        RETURN 
  
*         DISCARD MESSAGE IF TERMINAL NO LONGER CONNECTED.
  
 NSQ4     SB3    X1          DROP POT(S)
          SB4    B0 
          RJ     DPT
          EQ     NSQ1        CONTINUE 
 RDM      TITLE  RDM - RECEIVED DATA MANAGER. 
 RDM      SPACE  4,20 
**        RDM - RECEIVED DATA MANAGER.
* 
*         DIRECTS THE PROCESSING OF A RECEIVED NETWORK MESSAGE. 
* 
*         ENTRY  (IBSY) = MESSAGE HEADER ADDRESS. 
*                (RCVH) = MESSAGE HEADER. 
*                (RCVB) = MESSAGE TEXT. 
*                (NGLN) = .GE. 4 IF DATA REQUESTED FOR SPECIFIC 
*                         TERMINAL. 
*                (X6) = QUEUED MESSAGE FLAG, 0=NEW, 1=QUEUED. 
* 
*         EXIT   IF MESSAGE PROCESSED:  
*                (X6)   = 0.
*                (IBSY) = 0.
*                (RCVB) = 0.
*                (RCVH) = 0.
*                (PCRX) = 0.
* 
*                IF MESSAGE CANNOT BE PROCESSED AT THIS TIME: 
*                (X6)   = NONZERO.
* 
*                IF NULL MESSAGE RECEIVED:  
*                (PCRX) = ZERO IF DATA NOT REQUESTED FOR
*                         SPECIFIC TERMINAL.
* 
*         CALLS  ABT, CFL, DCI, GFM, GRT, PIN, QTI, SMP, UAC, VAC.
  
  
 RDM      SUBR               ENTRY/EXIT 
          SA6    RDMA        SAVE QUEUED MESSAGE FLAG 
  
*         CHECK BLOCK TYPE. 
  
 RDM1     SA1    RCVH        READ MESSAGE HEADER
          BX2    X1 
          AX2    54          SHIFT BLOCK TYPE 
          ZR     X2,RDM10    IF NULL MESSAGE BLOCK
          SX5    X2-BTSV
          ZR     X5,RDM3     IF SUPERVISORY MESSAGE 
          NG     X5,RDM5     IF DATA MESSAGE (BLK OR MSG BLOCK) 
  
*         PROCESS ERROR.
  
 RDM2     SX6    3RRDM       SET ERROR CODE 
          RJ     ABT         PROCESS ERROR
          EQ     RDM4 
  
*         PROCESS SUPERVISORY MESSAGE.
  
 RDM3     RJ     SMP         EXECUTE PROCESSOR
  
*         CLEAR INPUT STATUS WORDS AND EXIT.
  
 RDM4     BX6    X6-X6       CLEAR INPUT BUFFER 
          SA6    RCVH 
          SA6    A6+B1
          SA6    IBSY        SET INPUT NOT BUSY 
          EQ     RDMX        RETURN 
  
*         INITIALIZE *BLK* AND *MSG* DATA BLOCK PROCESSING. 
  
 RDM5     BX2    X1          EXTRACT ACN
          MX6    -12
          AX2    42-0 
          BX7    -X6*X2 
          LX1    59-17       BLOCK TRUNCATED BIT
          SB2    X7 
          SA7    SSPA        INITIALIZE (SSPA)
          NG     X1,RDM8     IF BLOCK TRUNCATED 
          RJ     VAC         VALIDATE ACN 
          NG     X6,RDM2     IF INCORRECT ACN 
          TTADD  B2,A0,X5,X6  SET TERMINAL TABLE ADDRESS
  
*         SET INPUT STATUS AND CLEAR TERMINAL TIMEOUT FLAGS.
  
          SX4    B1 
          LX4    17-0 
          SA5    A0+VFST     CLEAR SCREEN MODE TIMEOUT FLAG 
          BX6    -X4*X5 
          SA6    A5          REWRITE VFST 
          LX4    48-17       CLEAR TIMEOUT FLAG 
          BX2    -X4*X2 
          LX4    54-48       SET INPUT RECIEVED FLAG
          BX6    X4+X2
          SA6    A2          REWRITE VMST ENTRY 
  
*         CHECK FOR DISCARD INPUT CONDITION.
  
          LX1    17-59       RESTORE HEADER POSITION
          RJ     DCI         DISCARD INPUT IF NECESSARY 
          NZ     X0,RDM4     IF INPUT TO DISCARD
  
*         CHECK INTERNAL TYPEAHEAD QUEUE. 
  
          RJ     CFL         CHECK POT SUPPLY 
          NG     X2,RDM7     IF LOW POT SUPPLY
          SA5    RDMA 
          NZ     X5,RDM6     IF THIS IS A QUEUED MESSAGE
          TA5    B2,VMST
          MX0    -12
          BX5    -X0*X5 
          NZ     X5,RDM5.1   IF QUEUE ALREADY EXISTS, ADD INPUT TO END
          SA1    A0+VROT
          SX6    1S5
          BX6    X1*X6
          NZ     X6,RDM5.1   IF INPUT REQUEST IS ALREADY SATISFIED
          MX5    -5 
          BX5    -X5*X1 
          SX5    X5-1 
          SB5    B2 
          RJ     GRT         GET REENTRY
          BX5    X4+X5
          ZR     X5,RDM6     IF WAITING TO START A NEW JOB STEP 
          AX4    48 
          SX4    X4-INP$
          ZR     X4,RDM6     IF WAITING FOR PROGRAM INPUT 
          SA4    A0+VFST     GET SCREEN MANAGEMENT STATE
          MX0    -6 
          AX4    18 
          BX4    -X0*X4 
          SX4    X4-/SMFIF/SINP 
          ZR     X4,RDM6     IF SMFEX IS AWAITING INPUT 
 RDM5.1   RJ     QTI         QUEUE TYPEAHEAD INPUT MESSAGE
          RJ     SAB         SET ACTIVITY BIT 
          EQ     RDM4        EXIT 
  
*         PROCESS INPUT MESSAGE.
  
 RDM6     RJ     PIN         PROCESS INPUT DATA 
          ZR     X6,RDM7     IF NOT ENOUGH POTS AVAILABLE 
          PL     X0,RDM8     IF OVERFLOW OCCURED
          SX7    B1          INDICATE INPUT ACCOUNTING
          SA1    RCVH        SET HEADER ADDRESS 
          RJ     UAC         UPDATE ACCOUNTING
          EQ     RDM4        COMPLETE INPUT PROCESSING
  
*         RETURN IF UNABLE TO PROCESS INPUT.
  
 RDM7     SX6    B1          (X6) = UNABLE TO PROCESS STATUS
          EQ     RDMX        RETURN 
  
*         PROCESS OVERFLOW OF LOGICAL LINE SIZE.
  
 RDM8     BX6    X6-X6       SET OVERFLOW CONDITION 
          SA2    A0+VDPT
          SX7    VXLL+3 
          BX7    X2+X7
          SA7    A2 
          RJ     DCI         DISCARD INPUT
          EQ     RDM4        COMPLETE PROCESSING
  
*         CLEAR (PCRX) IF DATA NOT REQUESTED FOR SPECIFIC 
*         TERMINAL. 
  
 RDM10    SA1    NGLN        GET REQUEST LIST/ACN NUMBER
          BX6    X6-X6
          AX1    2
          NZ     X1,RDM4     IF FOR SPECIFIC ACN
          SA6    PCRX        CLEAR PCRX 
          EQ     RDM4        COMPLETE READ PROCESSING 
  
  
 RDMA     CON    0           QUEUED MESSAGE FLAG
 SHD      TITLE  SHD - NETWORK SHUTDOWN PROCESSOR.
 SHD      SPACE  4,20 
**        SHD - NETWORK SHUTDOWN PROCESSOR. 
* 
*         ENTRY  (SHDF) = 1/I, 59/ADDR. 
*                  I    = IMMEDIATE SHUTDOWN BIT. 
*                  ADDR = PROCESSING ADDRESS. 
*                (SSCR) = SCP STATUS. 
* 
*         EXIT   AFTER ALL SHUTDOWNS COMPLETE:  
*                (NTON) = OFF.
*                (SHDF) = ZERO. 
*                (SSCR) = ZERO. 
*                (NFRT) = REAL TIME (SECONDS).
* 
*         CALLS  CLE, DAP, DPT, ERQ, IDM, NOF, SHA, SRE.
* 
*         MACROS  MESSAGE.
  
  
 SHD      SUBR               ENTRY/EXIT 
          SA1    SHDF        CHECK SHUTDOWN FLAG
          SB7    X1+
          ZR     B7,SHD1     IF NEW SHUTDOWN
          JP     B7          ENTER SEQUENCE 
  
*         INITIALIZE NORMAL SHUTDOWN. 
  
 SHD1     TX6    0,VNTP      INITIALIZE CURRENT TERMINAL TABLE
          SA6    SHDB 
          SX6    SHDD 
          SA6    SHDC        INITIALIZE DAYFILE COUNTER 
          SX6    B0+
          SA6    SHDG        CLEAR NON-EJT TERMINAL FLAG
          NG     X1,SHD5     IF IMMEDIATE SHUTDOWN
          SA1    STIM        GET REAL TIME (SECONDS)
          SX6    =C* SHUTDOWN WARNING.* 
          BX7    X1 
          SA7    SHDA        SET STARTING TIME
          RJ     IDM         ISSUE DAYFILE MESSAGE
  
*         CHECK IF ALL USERS OFF OR SHOULD BE OFF.
  
 SHD2     RJ     SHA         RESET HIGHEST ACTIVE ACN 
          ZR     X6,SHD6     IF ALL USERS OFF 
          SA1    SHDA        GET START TIME 
          SA2    STIM        GET REAL TIME (SECONDS)
          SX3    SDTO 
          IX1    X2-X1       ELAPSED TIME 
          IX1    X1-X3
          PL     X1,SHD6     IF TIME-OUT ELAPSED
          SB7    SHD2        SET REENTRY ADDRESS
  
*         SET SHUTDOWN REENTRY. 
* 
*         ENTRY  (B7) = NORMAL SHUTDOWN ADDRESS IF POSITIVE.
*                     = IMMEDIATE SHUTDOWN ADDRESS IF NEGATIVE. 
  
 SHD3     SX6    B7+         SET REENTRY ADDRESS
          PL     X6,SHD4     IF NORMAL
          MX7    1           SET IMMEDIATE
          SX6    -B7
          BX6    X6+X7
 SHD4     SA6    SHDF        STORE SHUTDOWN ADDRESS 
          EQ     SHDX        EXIT/REENTER 
  
*         INITIALIZE IMMEDIATE SHUTDOWN.
  
 SHD5     SX6    =C* FORCED NETWORK SHUTDOWN.*
          RJ     IDM         ISSUE DAYFILE MESSAGE
  
*         DROP OUTPUT AND NULL SUPERVISORY QUEUE POTS.
  
 SHD6     SA1    NSQP        GET QUEUE POINTER
          ZR     X1,SHD7     IF QUEUE EMPTY 
          SB3    X1          DROP POTS
          SB4    B0 
          RJ     DPT
          SX6    B0+         CLEAR QUEUE POINTER
          SA6    NSQP 
 SHD7     SA1    OBSY        CHECK IF OUTPUT LEFT BUSY
          SA2    OTPP 
          SB7    -SHD8
          ZR     X1,SHD3     IF NOT BUSY, REENTER 
          ZR     X2,SHD3     IF NO POTS TO DROP, REENTER
          SB3    X2          DROP OUTPUT POT CHAIN
          SB4    B0 
          RJ     DPT
          SX6    B0+         CLEAR POINTERS 
          SA6    OBSY 
          SA6    OTPP 
          SB7    -SHD8       SET REENTRY ADDRESS
          EQ     SHD3        REENTER
  
*         LOGOFF ALL REMAINING ACTIVE USERS (REENTRY).
  
 SHD8     SA1    NDSL        CHECK STACK LIMIT
          SB7    -SHD8       SET REENTRY
          SA2    SHDB        GET CURRENT TERMINAL NUMBER
          NZ     X1,SHD3     IF STACK LIMIT, REENTER
          TB6    0,VNTP,LTN 
          SB2    X2 
          SX6    X2+B1
          GT     B2,B6,SHD10 IF ALL TERMINALS PROCESSED 
          SA6    A2          UPDATE CURRENT TERMINAL
          TTADD  B2,A0,X2,X3
          SA2    A0+VUIT
          ZR     X2,SHD8     IF TERMINAL TABLE ALREADY EMPTY
          MX7    -12         GET EJT ORDINAL
          BX7    -X7*X2 
          SA2    A0+VDCT
          LX2    59-57
          SX6    B1 
          PL     X2,SHD8.1   IF USER NOT LOGGED IN
          NZ     X7,SHD8.2   IF EJT ORDINAL 
 SHD8.1   SA6    SHDG        FLAG NON-EJT TERMINAL TABLE
          EQ     SHD8        LOOP TO NEXT TERMINAL
  
 SHD8.2   SB7    B0+         CLEAR ANY DRIVER REENTRY 
          RJ     SRE
          RJ     DAP         CLEAR OUTPUT ASSIGNMENTS 
          TA1    B2,VMST     DROP VMST POT
          MX7    -12
          BX7    -X7*X1 
          SB3    X7 
          SB4    B0 
          MX7    42          CLEAR POT POINTER
          MX3    57          CLEAR UNANSWERED BLOCKS
          LX3    33 
          BX1    X3*X1
          BX7    X7*X1
          MX3    1           CLEAR TERMINAL ON LINE 
          PL     X7,SHD8     IF TERMINAL NOT ON-LINE, HUP ALREADY SENT
          BX7    -X3*X7 
          SA7    A1          REWRITE VMST 
          ZR     B3,SHD9     IF NO POT
          RJ     DPT         DROP POTS
 SHD9     SX7    B0 
          SB3    B0 
          SX6    /TLX/HUP 
          RJ     ERQ         ENTER REQUEST TO HANG UP PHONE 
          TX2    B2,-VNTP    CLEAR ACTIVITY BIT 
          SX6    37B
          BX6    X6*X2       TERMINAL ORDINAL MOD 32
          AX2    5           TERMINAL ORDINAL/32
          TA2    X2,VNAT     READ TABLE WORD
          SB5    X6-59
          MX6    -1 
          AX6    X6,B5
          BX6    X6*X2       CLEAR BIT
          SA6    A2          REWRITE TABLE WORD 
          EQ     SHD8        LOOP TO END OF TERMINALS 
  
*         WAIT FOR ALL TERMINAL TABLES TO BE CLEARED. 
  
 SHD10    TB2    -1,VNTP     INITIALIZE TERMINAL SCAN 
          SX7    B0+
          SA7    SHDB 
 SHD11    SB2    B2+B1       ADVANCE TO NEXT TERMINAL 
          TB6    0,VNTP,LTN 
          TTADD  B2,A0,X2,X1
          GT     B2,B6,SHD13  IF ALL TERMINALS HAVE BEEN SCANNED
          SA1    A0+VUIT
          ZR     X1,SHD11    IF TERMINAL TABLE EMPTY
          TA3    B2,VMST
          NG     X3,SHD11.1  IF TERMINAL STILL ON-LINE
          MX6    -12
          BX5    -X6*X1      GET EJT ORDINAL
          MX6    13 
          SX7    B1          FLAG NON-EMPTY TERMINAL TABLE
          SA1    A0+VDCT
          ZR     X5,SHD12    IF JOB HAS BEEN DETACHED 
  
*         CLEAR DRIVER REQUEST FROM VDCT.  IF RETRY COUNT EXHAUSTED 
*         ISSUE DAYFILE MESSAGE.  LEAVE TERMINAL TABLE INTACT TO
*         PREVENT POSSIBLE PP HANGS.
  
          SA7    SHDB 
          LX6    12 
          BX6    -X6*X1      CLEAR CURRENT DRIVER REQUEST 
          SA6    A1+         REWRITE VDCT 
 SHD11.1  SA1    SHDC 
          MX6    24 
          LX6    -6 
          NZ     X1,SHD11    IF NOT TIME TO ISSUE MESSAGE 
          SA2    A0+VFST     GET JSN
          LX2    -6 
          BX2    X2*X6
          SA1    SHDE        PUT JSN INTO MESSAGE 
          BX1    -X6*X1 
          BX6    X1+X2
          SA6    A1+
          MESSAGE  SHDE,,R
          EQ     SHD11       CHECK NEXT TERMINAL
  
 SHD12    RJ     //CLE       CLEAN UP TERMINAL TABLE
          EQ     SHD11       CHECK NEXT TERMINAL
  
 SHD13    SA1    SHDG 
          ZR     X1,SHD14    IF NO TERMINAL WITHOUT EJT 
          TX6    0,VNTP      RESET CURRENT TERMINAL TABLE 
          SA6    SHDB 
          SX6    B0+
          SA6    SHDG        CLEAR NON-EJT TERMINAL FLAG
          SB7    -SHD8
          EQ     SHD15       REPEAT FIRST LOOP
  
 SHD14    SA1    SHDB 
          SB7    -SHD10 
          NZ     X1,SHD15    IF AT LEAST ONE TERMINAL REMAINS 
  
*         SET SHUTDOWN COMPLETE.
  
 SHD14.1  RJ     NOF         ISSUE *NETOFF* REQUEST 
          SX6    =C* NETWORK SHUTDOWN COMPLETE.*
          RJ     IDM         ISSUE DAYFILE MESSAGE
          SX7    B0+         CLEAR NETON STATUS 
          SA1    STIM        READ REAL TIME (SECONDS) 
          SA7    NTON 
          SA7    SHDF        CLEAR SHUTDOWN FLAG
          SA7    VSHD        CLEAR SCP STATUS 
          MX6    36          SET (X6) STATUS NEGATIVE 
          BX7    X1          SET NETWORK FUNCTION TIME
          SA7    NFRT 
          EQ     NDRX        EXIT FROM DRIVER 
  
 SHD15    SA2    SHDC        CHECK DAYFILE COUNTER
          SX6    X2-1 
          PL     X6,SHD16    IF COUNTER NOT EXPIRED 
          EQ     SHD14.1     COMPLETE SHUTDOWN
  
 SHD16    SA6    A2+         REWRITE COUNTER
          EQ     SHD3        RETRY LOGOFF 
  
 SHDA     CON    0           SHUTDOWN START TIME
 SHDB     CON    0           NON-EMPTY TERMINAL TABLE FLAG
 SHDC     CON    0           DAYFILE COUNTER
 SHDD     EQU    3000D       DAYFILE CONSTANT 
 SHDE     DATA   10L **** CANN
          DATA   10LOT BE DETA
          DATA   5LCHED.
 SHDG     CON    0           SET IF NO EJT ORDINAL IN TERMINAL TABLE
 SMP      TITLE  SMP - SUPERVISORY MESSAGE PROCESSOR. 
 SMP      SPACE  4,20 
**        SMP - SUPERVISORY MESSAGE PROCESSOR.
* 
*         DIRECTS THE PROCESSING OF INCOMING NETWORK SUPERVISORY
*         MESSAGES. 
* 
*         ENTRY  (RCVH) = MESSAGE HEADER. 
*                (RCVB) = MESSAGE TEXT. 
* 
*         EXIT   TO PRIMARY FUNCTION PROCESSOR VIA *PCS*: 
*                (A0)   = TERMINAL TABLE ADDRESS. 
*                (B2)   = TERMINAL NUMBER (ACN).
*                (B3)   = PRIMARY FUNCTION CODE.
*                (X3)   = STATUS BITS FROM *CON/END/N*. 
*                (X7)   = SUBFUNCTION CODE. 
*                (RCVH) = MESSAGE HEADER. 
*                (RCVB) = MESSAGE TEXT. 
*                (SMPF) = PRIMARY FUNCTION CODE.
*                (SMSF) = SUBFUNCTION CODE. 
* 
*         CALLS  ABT, PCS, SFE. 
  
  
 SMP      SUBR               ENTRY/EXIT 
  
*         EXTRACT FUNCTION CODES. 
  
          SA2    RCVB        READ FIRST WORD OF MESSAGE 
          MX5    -24         GET STATUS BITS
          BX3    -X5*X2 
          MX5    -6 
          AX2    44-0        SHIFT SUBFUNCTION CODE 
          BX7    -X5*X2      (X7) = SUBFUNCTION CODE
          SA7    SMSF        SAVE SUBFUNCTION CODE
          AX2    52-44       SHIFT PRIMARY FUNCTION CODE
          MX5    -8 
          BX6    -X5*X2 
          SB3    X6+         (B3) = PRIMARY FUNCTION CODE 
          SA6    SMPF        SAVE PRIMARY FUNCTION CODE 
          LX7    24          FORMAT *SSPA* PARAMETERS 
          LX6    12 
          SB2    B0          CLEAR TERMINAL NUMBER
          BX5    X7+X6       (X5) = *SSPA* PARAMETER WORD 
          SB4    B0          SET TABLE SEARCH INDEX 
          MX4    -12
  
*         SEARCH TABLE FOR PRIMARY FUNCTION PROCESSOR.
  
 SMP1     SA2    TSMP+B4     READ TABLE ENTRY 
          SB4    B4+B1
          SB7    X2          EXTRACT PRIMARY FUNCTION CODE
          ZR     X2,SMPE     IF END OF TABLE, ERROR 
          NE     B7,B3,SMP1  IF NO MATCH, CONTINUE SEARCH 
  
*         EXTRACT ACN AND ENTER PRIMARY FUNCTION CODE PROCESSOR.
  
          SA1    RCVB        ASSUME ACN IN FIRST WORD OF TEXT 
          AX2    18          SHIFT PROCESSOR ADDRESS
          SB7    X2          SET PROCESSOR ADDRESS
          AX1    24 
          PL     B7,SMP2     IF ACN IN FIRST WORD OF TEXT 
          SB7    -B7
          SA1    RCVH        GET ACN FROM HEADER
          AX1    42 
 SMP2     BX1    -X4*X1      EXTRACT ACN
          BX5    X5+X1       MERGE WITH *SSPA* WORD 
          RJ     PCS         EXECUTE PROCESSOR
          EQ     SMPX        EXIT 
  
  
**        SMPE - SUPERVISORY MESSAGE ERROR EXIT.
  
 SMPE     RJ     SFE         ISSUE ERROR MESSAGE
          EQ     SMPX        EXIT 
  
  
**        TSMP - SMP PRIMARY FUNCTION PROCESSOR TABLE.
* 
*         ENTRY  24/, 18/ADR, 18/PFC. 
*                ADR = PROCESSOR ADDRESS. 
*                      IF POSITIVE, THIS IS AN ASYNCHRONOUS 
*                      SUPERVISORY MESSAGE AND THE ACN IS 
*                      CONTAINED IN BITS 35-24 OF THE FIRST 
*                      WORD OF THE MESSAGE TEXT.  IF NEGATIVE,
*                      THIS IS A SYNCHRONOUS SUPERVISORY MESSAGE
*                      AND THE ACN IS CONTAINED IN BITS 53-42 OF
*                      THE MESSAGE HEADER.
*                   PFC = PRIMARY FUNCTION CODE.
  
 TSMP     BSS    0
          VFD    24/0,18/CON,18/PFCN  CONNECT FUNCTION
          VFD    24/0,18/FCN,18/PFFC  TERMINAL FUNCTION 
          VFD    24/0,18/LGL,18/PFLG  LOGICAL ERROR 
          VFD    24/0,18/NSH,18/PFSH  NETWORK SHUTDOWN
          VFD    24/0,18/TCH,18/PFCH  TERMINAL CHARACTERISTICS
          VFD    24/0,18/-TCL,18/PFTC TERMINAL CONTROL
          VFD    24/0,18/USI,18/PFIN  INTERRUPT FROM USER 
          VFD    24/0,18/-BIM,18/PFBI BREAK INDICATION MARKER 
          VFD    24/0,18/SMPX,18/PFHO HOP REQUEST (IGNORED) 
          CON    0           END OF TABLE 
 SMP      TITLE  SMP - PRIMARY FUNCTION CODE PROCESSORS.
 SMP      SPACE  4,10 
**        SMP - PRIMARY FUNCTION CODE PROCESSORS. 
* 
*         THE FOLLOWING DOCUMENTATION IS COMMON TO ALL PRIMARY
*         FUNCTION CODE PROCESSORS: 
* 
*         ENTRY  (A0)   = TERMINAL TABLE ADDRESS. 
*                (B2)   = TERMINAL NUMBER (ACN).
*                (B3)   = PRIMARY FUNCTION CODE.
*                (X7)   = SUBFUNCTION CODE. 
*                (RCVH) = MESSAGE HEADER. 
*                (RCVB) = MESSAGE TEXT. 
*                (SMPF) = PRIMARY FUNCTION CODE.
*                (SMSF) = SECONDARY FUNCTION CODE.
* 
*         EXIT   (SEE ABOVE): 
*                TO SUBFUNCTION PROCESSOR IF DEFINED. 
*                TO *SMPE* IF ERROR.
 BIM      SPACE  4,10 
**        BIM - BREAK INDICATION MARKER, FUNCTION CODE #CA. 
* 
*         THE BREAK INDICATION MARKER SYNCHRONOUS SUPERVISORY 
*         MESSAGE WAS RECEIVED.  THE BREAK MARKER RECEIVED BIT
*         (BIT 49) IN *VMST* IS SET.
* 
*         EXIT   (VMST) = BIT 49 SET (BREAK MARKER RECEIVED). 
* 
*         USES   X - 1, 6.
*                A - 1, 6.
* 
*         CALLS  VAC. 
  
  
 BIM      BSS    0           ENTRY
          RJ     VAC         VALIDATE ACN 
          NG     X6,SMPE     IF INCORRECT ACN 
          TA1    B2,VMST     SET BREAK MARKER RECEIVED BIT
          SX6    B1 
          LX6    49-0 
          BX6    X1+X6
          SA6    A1          REWRITE VMST 
          EQ     PCSX        EXIT 
 CON      SPACE  4,10 
**        CON - CONNECT FUNCTION, FUNCTION CODE #63.
* 
*         ENTRY  (X7) = SUBFUNCTION CODE. 
* 
*         EXIT   TO *CNB* IF CONNECTION BROKEN. 
*                TO *ECR* IF END-CONNECTION RESPONSE. 
*                TO *NWC* IF NEW CONNECTION.
*                TO APPROPRIATE ROUTINE BASED ON LOAN STATUS VALUE. 
*                TO *CLS1* IF INCORRECT LOAN STATUS OR ERROR. 
*                   (X7) = LOAN STATUS VALUE. 
*                   (B4) = ERROR MESSAGE INDICATOR. 
*                TO *SMPE* IF ERROR.
* 
*         CALLS  VAC. 
  
  
 CON      BSS    0           ENTRY
          SB6    X7-SFRT     CHECK SUBFUNCTION CODE 
          ZR     B6,CON1     IF CONNECTION REQUEST
          RJ     VAC         VALIDATE ACN 
          NG     X6,SMPE     IF INCORRECT ACN 
          SB6    X7-SFEN
          ZR     B6,ECR      IF *END-CONNECTION* RESPONSE 
          SB6    X7-SFCB
          ZR     B6,CNB      IF *CONNECTION BROKEN* 
          EQ     SMPE        ERROR EXIT 
  
 CON1     SA3    RCVB+3      GET LOAN STATUS
          MX5    8
          BX5    X5*X3
          SB4    3           SET REGISTER FOR *CLS1*
          LX5    0-52 
          SB7    X5 
          SX3    X5-MXLS-1
          SX7    ERLS        SET INTERNAL ERROR CODE
          SA1    A0+VDCT     CHECK CONNECTION TYPE
          PL     X3,CLS1     IF INDEX OUT OF RANGE
          SX2    TPCP        SET PRIMARY CONNECTION TABLE 
          LX1    59-47
          NG     X1,CON2     IF CONNECTION IS LOANED
          SX2    TSCP        SET SECONDARY CONNECTION TABLE 
          LX1    59-46-59+47
          NG     X1,CON2     IF SECONDARY CONNECTION
          SA1    A0+VUIT     CHECK USER NAME
          NZ     X1,CLS1     IF USER LOGGED IN
          SX2    TNCP        SET NEW CONNECTION TABLE 
 CON2     SA1    X2+B7       GET APPROPRIATE ENTRY
          ZR     X1,CLS1     IF NO ENTRY
          SB7    X1          GET APPROPRIATE ROUTINE ADDRESS
          SX7    X5          RESTORE LOAN STATUS VALUE IF NO ERROR
          JP     B7          PROCESS CONNECTION 
  
  
 TPCP     SPACE  4,10 
**        TABLE OF PRIMARY CONNECTION PROCESSORS. 
*         (USED FOR LOANED CONNECTIONS) 
*         INDEXED BY LOAN STATUS VALUE (DEFINED IN *COMSNCD*).
  
 TPCP     INDEX  CON,MXLS,( 0 ) 
          INDEX  ,PNLS,( CLS1 ) 
          INDEX  ,SNLS,( CLS1 ) 
          INDEX  ,PALS,( CLS1 ) 
          INDEX  ,SCLS,( CLS )
          INDEX  ,SVLS,( CLS )
          INDEX  ,SOLS,( CLS )
          INDEX  ,SFLS,( CLS )
          INDEX  ,SULS,( CLS )
          INDEX  ,STLS,( CLS )
          INDEX  ,SRLS,( CLS )
          INDEX  ,SALS,( CLS )
          INDEX  ,SLLS,( CLS )
 TPCPL    EQU    *-TPCP 
 TSCP     SPACE  4,10 
**        TABLE OF SECONDARY CONNECTION PROCESSORS. 
*         (USED FOR SECONDARY CONNECTIONS)
*         INDEXED BY LOAN STATUS VALUE (DEFINED IN *COMSNCD*).
  
 TSCP     INDEX  CON,MXLS,( 0 ) 
          INDEX  ,PNLS,( CLS1 ) 
          INDEX  ,SNLS,( CLS1 ) 
          INDEX  ,PALS,( CNB )
          INDEX  ,SCLS,( CLS1 ) 
          INDEX  ,SVLS,( CLS1 ) 
          INDEX  ,SOLS,( CLS1 ) 
          INDEX  ,SFLS,( CLS1 ) 
          INDEX  ,SULS,( CLS1 ) 
          INDEX  ,STLS,( CLS1 ) 
          INDEX  ,SRLS,( CLS1 ) 
          INDEX  ,SALS,( CLS1 ) 
          INDEX  ,SLLS,( CLS1 ) 
 TSCPL    EQU    *-TSCP 
 TNCP     SPACE  4,10 
**        TABLE OF NEW CONNECTION PROCESSORS. 
*         (USED FOR NEW CONNECTIONS)
*         INDEXED BY LOAN STATUS VALUE (DEFINED IN *COMSNCD*).
  
 TNCP     INDEX  CON,MXLS,( 0 ) 
          INDEX  ,PNLS,( NWC0 ) 
          INDEX  ,SNLS,( NWC )
          INDEX  ,PALS,( CLS1 ) 
          INDEX  ,SCLS,( CLS1 ) 
          INDEX  ,SVLS,( CLS1 ) 
          INDEX  ,SOLS,( CLS1 ) 
          INDEX  ,SFLS,( CLS1 ) 
          INDEX  ,SULS,( CLS1 ) 
          INDEX  ,STLS,( CLS1 ) 
          INDEX  ,SRLS,( CLS1 ) 
          INDEX  ,SALS,( CLS1 ) 
          INDEX  ,SLLS,( CLS1 ) 
 TNCPL    EQU    *-TNCP 
 FCN      SPACE  4,10 
**        FCN - TERMINAL FUNCTION, FUNCTION CODE #83. 
* 
*         ENTRY  (X7) = SUBFUNCTION CODE. 
* 
*         CALLS  VAC. 
  
  
 FCN      BSS    0           ENTRY
          RJ     VAC         VALIDATE ACN 
          NG     X6,SMPE     IF INCORRECT ACN 
          SB6    X7-TFCNL    VALIDATE SUBFUNCTION CODE
          PL     B6,SMPE     IF INCORRECT 
          SA1    TFCN+X7     GET PROCESSOR ADDRESS
          SB7    X1+         ENTER PROCESSOR
          JP     B7 
  
  
**        TFCN - TABLE OF *FCN* SUBFUNCTION PROCESSOR ADDRESSES.
  
 TFCN     INDEX  CON,SFCM+1,( SMPE )
          INDEX  ,SFAK,( ACK )  BLOCK DELIVERED 
          INDEX  ,SFAX,( NAK )  BLOCK NOT DELIVERED 
          INDEX  ,SFIN,( INA )  CONNECTION INACTIVE 
          INDEX  ,SFCM,( CNM )  CONNECTION MADE 
          INDEX  ,SFRS,( SCR )  CONNECTION RESET
  
 TFCNL    EQU    *-TFCN 
 LGL      SPACE  4,10 
**        LGL - LOGICAL ERROR, FUNCTION CODE #84. 
* 
*         ISSUES DAYFILE MESSAGE AND COPIES ERROR MESSAGE FROM
*         RECEIVE BUFFER TO INTERNAL BUFFER.  IF THE MESSAGE
*         WHICH WAS IN ERROR WAS A DATA MESSAGE OR A TERMINAL 
*         DEFINITION SUPERVISORY MESSAGE, THE TERMINAL-S DOWN-
*         STREAM BLOCK COUNT WILL BE DECREMENTED TO COMPENSATE
*         FOR THE MESSAGE IN ERROR. 
* 
*         ENTRY  (RCVB) = HEADER OF ERRONEOUS MESSAGE.
*                (RCVB+1) = TEXT OF ERRONEOUS MESSAGE.
* 
*         EXIT   TERMINAL BLOCK COUNT DECREMENTED.
*                DAYFILE MESSAGE ISSUED.
*                (LGLC) = INCREMENTED.
* 
*         CALLS  CDD, DBC, IDM, SAB, VAC. 
  
  
 LGL      BSS    0           ENTRY
          SA1    RCVB        READ MESSAGE FIRST WORD
          SA3    LGLC        UPDATE ERROR COUNT 
          MX2    -8          EXTRACT ERROR CODE 
          SX7    B1 
          AX1    36 
          IX7    X7+X3
          BX1    -X2*X1 
          SA7    A3 
          RJ     CDD         CONVERT TO DECIMAL 
          SA1    LGLA+1      INSERT IN MESSAGE
          MX2    -12
          BX6    -X2*X6 
          LX1    -18
          BX1    X2*X1
          BX6    X6+X1
          LX6    18 
          SA6    A1+
          SX6    LGLA        ISSUE DAYFILE MESSAGE
          RJ     IDM
  
*         SAVE MESSAGE FOR REFERENCE. 
  
          SA1    RCVB        SAVE FIRST THREE WORDS 
          SA2    A1+B1
          BX6    X1 
          SA3    A2+B1
          BX7    X2 
          SA6    LGLB 
          SA7    A6+B1
          BX7    X3 
          SA7    A7+B1
  
*         PROCESS DATA (*BLK* OR *MSG*) BLOCK ERROR.
  
          MX4    -6          EXTRACT ACN FROM RETURNED HEADER 
          LX2    6
          MX3    -12
          BX6    -X4*X2 
          ZR     X6,PCSX     IF NULL HEADER 
          SX6    X6-BTSV
          ZR     X6,LGL1     IF SUPERVISORY MESSAGE 
          PL     X6,PCSX     IF UNDEFINED BLOCK TYPE, RETURN
          EQ     LGL2        CHECK FOR USER ON LINE 
  
*         PROCESS SUPERVISORY MESSAGE.
  
 LGL1     SA1    A2+B1       READ FIRST WORD OF MESSAGE 
          MX6    -8          EXTRACT PRIMARY FUNCTION CODE
          LX1    8
          BX6    -X6*X1 
          SX6    X6-PFTC     CHECK FOR *PFTC* 
          NZ     X6,PCSX     IF NOT *TERMINAL CONTROL*, RETURN
  
*         CHECK FOR VALID USER ON LINE. 
  
 LGL2     LX2    12          EXTRACT ACN FROM RETURNED HEADER 
          BX2    -X3*X2 
          SB2    X2+         SET ACN
          RJ     VAC         VALIDATE ACN 
          NG     X6,PCSX     IF NOT VALID ACN 
          ZR     X2,PCSX     IF NOT ON LINE 
          LX2    59-55       CHECK FOR END CONNECTION 
          NG     X2,PCSX     IF END OF CONNECTION SET 
          RJ     DBC         DECREMENT BLOCK COUNT
          RJ     SAB         SET TERMINAL ACTIVITY
          EQ     PCSX        EXIT 
  
 LGLA     DATA   10H LOGICAL E
          DATA    8LRROR XX.
 LGLB     BSSZ   3
 NSH      SPACE  4,10 
**        NSH - NETWORK SHUTDOWN, FUNCTION CODE #42.
* 
*         CALLS *SHD* TO INITIATE NEW SHUTDOWN.  IF THIS IS 
*         AN IMMEDIATE SHUTDOWN, *NSH* EXITS THROUGH *NDRX* 
*         TO BYPASS THE REMAINDER OF THE DRIVER CYCLE.
* 
*         ENTRY  RCVB BIT 0 = SET, IF IMMEDIATE SHUTDOWN. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6. 
* 
*         CALLS  SHD. 
  
  
 NSH      BSS    0           ENTRY
          SA2    RCVB        READ MESSAGE 
          SA1    SHDF        GET SHUTDOWN FLAG
          MX6    1
          LX2    59-0        CHECK SHUTDOWN TYPE
          NG     X2,NSH1     IF IMMEDIATE SHUTDOWN
          NZ     X1,PCSX     IF SHUTDOWN IN PROGRESS, EXIT
          SX6    B0+
 NSH1     NG     X1,PCSX     IF IMMEDIATE SHUTDOWN IN PROGRESS, EXIT
          SA6    A1+         SET SHUTDOWN FLAG
          RJ     SHD         INITIATE SHUTDOWN
          PL     X6,PCSX     IF NORMAL SHUTDOWN, EXIT 
          EQ     NDRX        EXIT FROM DRIVER 
 TCH      SPACE  4,10 
**        TCH - TERMINAL CHARACTERISTICS, FUNCTION CODE #64.
* 
*         RESETS THE DEVICE TYPE (TERMINAL CLASS) FIELD OF
*         VMST ENTRY. 
* 
*         ENTRY  (RCVB) = DEVICE TYPE, BITS 16-23.
* 
*         EXIT   (VMST) = DEVICE TYPE, BITS 36-43.
* 
*         CALLS  SMPE, VAC. 
  
  
 TCH      BSS    0           ENTRY
          RJ     VAC         VALIDATE ACN 
          NG     X6,SMPE     IF INCORRECT ACN 
          SA1    RCVB        READ MESSAGE 
          MX6    -8 
          LX6    36-0        SHIFT MASK 
          LX1    36-16       SHIFT MESSAGE DEVICE TYPE
          BX2    X6*X2       MASK IN NEW DEVICE TYPE
          BX1    -X6*X1 
          BX6    X1+X2
          SA6    A2+         REWRITE VMST ENTRY 
          EQ     PCSX        EXIT 
 TCL      SPACE  4,10 
**        TCL - TERMINAL CONTROL, FUNCTION CODE #C1.
* 
*         PROCESSES *TRMDEF* SUPERVISORY MESSAGES FROM THE NETWORK. 
* 
*         USES   X - 1, 7.
*                A - 1. 
*                B - 3, 4.
* 
*         CALLS  SMPE, VAC. 
  
  
 TCL      BSS    0           ENTRY
          RJ     VAC         VALIDATE ACN 
          NG     X6,SMPE     IF INCORRECT ACN 
          SX7    X7-SFDM
          NZ     X7,PCSX     IF NOT A *TRMDEF* RESPONSE 
          SA1    RCVB 
          LX1    59-51
          PL     X1,PCSX     IF NORMAL *TRMDEF* RESPONSE
          SB3    B0 
          SX6    DMIT        SET INCORRECTLY FORMATTED TRMDEF MSG 
          SB4    DMITL
          RJ     ACD         ASSIGN CANNED DATA MESSAGE 
          EQ     PCSX        EXIT 
 USI      SPACE  4,10 
**        USI - USER INTERRUPT, FUNCTION CODE #80.
* 
*         MESSAGE FROM USER WHICH HAS BYPASSED THE TYPEAHEAD QUEUE. 
* 
*         ENTRY  (RCVB) = MESSAGE TEXT, BITS 36-43 CONTAIN PARAMETER
*                         FROM USER, ONE ASCII CHARACTER. 
* 
*         EXIT   APPROPRIATE DRIVER QUEUE ENTRY MADE. 
* 
*         CALLS  ACD, ASV, CTP, ERQ, ETX, GRT, VAC. 
  
  
 USI      BSS    0           ENTRY
          RJ     VAC         VALIDATE ACN 
          NG     X6,SMPE     IF INCORRECT ACN 
          SA1    RCVB        READ MESSAGE TEXT
          MX3    -8          EXTRACT PARAMETER
          AX1    36 
          BX3    -X3*X1 
          BX7    X3          SAVE PARAMETER FOR BREAK PROCESSING
          SB4    X3-USB1
          ZR     B4,BRK      IF USER BREAK ONE
          EQ     B4,B1,BRK   IF USER BREAK TWO
          ERRNZ  USB2-USB1-1  CODE DEPENDS ON USB2=USB1+1 
          MX1    -6 
          SA2    TVXD+X3     READ TRANSLATION OF CHARACTER
          BX7    -X1*X2      CONVERT TO UPPER CASE
          LX1    6
          BX1    -X1*X2 
          SX2    X1-7400B 
          NZ     X2,USI1     IF TRANSLATION CORRECT 
          BX7    X7+X1       RESTORE *74* ESCAPE CODE 
 USI1     SA7    USIA 
          BX6    X6-X6
          SB4    B1 
          SX7    INTRES 
          RJ     ASV         ASSIGN RESPONSE MESSAGE
          SA2    USIA        RETRIEVE PARAMETER 
          SB3    B0 
          BX7    X2 
          SB7    USI1 
          ZR     X6,PCD      IF MESSAGE NOT ASSIGNED, REENTER 
          TA1    B2,VMST     CHECK BREAK IN PROGRESS
          MX3    59          CLEAR TIMEOUT FLAG 
          LX3    48 
          BX6    X3*X1
          SA6    A1          REWRITE VMST 
          SA2    A0+VFST     CLEAR SCREEN MODE TIMEOUT FLAG 
          LX3    17-48
          BX6    X3*X2
          SA6    A2          REWRITE VFST 
          SB5    B2 
          LX1    59-57
          NG     X1,PCSX     IF BREAK IN PROGRESS 
          SA1    A0+VSTT
          SA2    A0+VUIT
          LX1    59-56
          NG     X1,PCSX     IF DETACH IN PROGRESS, EXIT
          MX1    -12
          BX1    -X1*X2 
          ZR     X1,PCSX     IF NO EJT ORDINAL ASSIGNED, EXIT 
          SA1    A0+VDCT     USER LOGGED IN 
          LX1    59-57
          PL     X1,PCSX     IF USER NOT LOGGED IN
          LX1    57-50
          LX3    X1,B1
          BX3    X1+X3
          SX6    X7-USDT
          ZR     X6,USI2     IF DETACH REQUEST
          NG     X3,PCSX     IF IN AUTO OR TEXT MODE
          RJ     GRT         GET REENTRY REQUEST
          SA1    USIC        CHECK REQUEST TYPE 
          BX1    X1-X4
          AX4    48 
          ZR     X1,USI8     IF IN INTERRUPTED STATUS 
          SX4    X4-INP$
          ZR     X4,PCSX     IF EXPLICIT INPUT REQUEST
  
*         SET UP COMMAND. 
  
 USI2     SA7    USIA 
          SX3    X7-USDT
          ZR     X3,USI7     IF DETACH COMMAND
          SX3    X7-USEN
          SX7    X7-USST
          SA1    =7LENQUIRE 
          ZR     X7,USI3     IF SHORT STATUS REQUEST
          BX7    X1 
          NZ     X3,USI6     IF NOT ENQUIRE REQUEST 
 USI3     SA7    USIB 
          SA1    A0+VDPT     CHECK SOURCE LINE INPUT
          LX1    59-16
          PL     X1,USI4     IF NO SOURCE LINE INPUT
          MX3    -12
          LX1    29 
          MX2    -3 
          BX3    -X3*X1      GET FIRST POT POINTER
          BX6    X7 
          SB3    X3+
          LX3    3
          LX1    15 
          TB4    X3,VBMP     GET POT ADDRESS
          BX7    -X2*X1      OFFSET INTO POT
          SA6    X7+B4
          SX6    /TLX/CLI 
          RJ     ERQ         ENTER COMMAND IN REQUEST QUEUE 
          NG     X6,USI5     IF REQUEST NOT TAKEN 
          BX6    X6-X6       CLEAR SOURCE LINE INPUT POINTERS 
          SA6    A0+VDPT
          EQ     PCSX        EXIT 
  
 USI4     SB4    B1          SET TEXT LENGTH
          SB5    B0          USE FIRST WORD OF POT
          SX6    USIB 
          RJ     CTP         COPY DATA TO POTS
          ZR     X6,USI5     IF NO POTS AVAILABLE 
          SX7    B0+
          SX6    /TLX/CLI 
          RJ     ERQ         ENTER QUEUE
          PL     X6,PCSX     IF ENTRY MADE
 USI5     SA2    USIA 
          SB7    USI2 
          BX7    X2 
          EQ     PCD         REENTER
  
 USI6     SX6    DMIC        SET MESSAGE ADDRESS
          SB4    DMICL       SET MESSAGE LENGTH 
          RJ     ACD         ASSIGN CANNED MESSAGE
          EQ     PCSX        RETURN 
  
 USI7     SA1    A0+VDCT
          LX1    59-50
          PL     X1,USI7.1   IF NOT TEXT MODE 
          RJ     ETX         CLEAR TEXT MODE BEFORE DETACHING 
 USI7.1   SB3    B0+
          SX7    UDRC        SET REASON CODE
          SX6    /TLX/DTJ 
          RJ     ERQ         ENTER REQUEST
          PL     X6,PCSX     IF ENTRY MADE
          EQ     USI5        REENTER
  
 USI8     SX6    DMIN        *INTERRUPTED* MESSAGE ADDRESS
          SB4    DMINL       SET MESSAGE LENGTH 
          RJ     ACD         ASSIGN CANNED DATA MESSAGE 
          EQ     PCSX        RETURN 
  
 USIA     CON    0           STORE PARAMETER
 USIB     CON    0           STORE COMMAND
 USIC     VFD    12/INP$,24///RST,24/0
 TFR      TITLE  TFR - IAFEX FUNCTION REQUEST PROCESSOR.
 TFR      SPACE  4,10 
**        TFR - IAFEX FUNCTION REQUEST PROCESSOR. 
* 
*         PROCESSES EXECUTIVE-TO-DRIVER FUNCTION REQUESTS PASSED
*         VIA BYTE FOUR AND THE DRIVER REQUEST BIT OF TERMINAL
*         TABLE WORD *VDCT*.
* 
*         ENTRY  (X1) = (VDCT). 
*                (A1) = ADDRESS OF VDCT.
* 
*         EXIT   TO FUNCTION PROCESSOR. 
* 
*         CALLS  ABT, ERQ, PCS. 
  
  
 TFR      SUBR               ENTRY/EXIT 
          MX5    -12         MASK REQUEST CODE
          BX7    -X5*X1 
          SX2    X7-/1TD/REQL  VALIDATE REQUEST CODE
          PL     X2,TFR3     IF INCORRECT 
          SA3    TTFR+X7     GET PROCESSOR ADDRESS
          SX5    B2          FORMAT (SSPA)
          LX7    48 
          BX5    X7+X5
          SB7    X3 
 TFR1     MX7    13          CLEAR VDCT REQUEST 
          LX7    12 
          BX7    -X7*X1 
          SA7    A1 
          PL     X2,TFRX     IF INCORRECT REQUEST 
          RJ     PCS         PROCESS REQUEST
  
*         ENTER RESTART JOB REQUEST.
  
 TFR2     SB3    B0          FORMAT REQUEST 
          BX7    X7-X7
          SX6    /TLX/RES 
          RJ     ERQ         ENTER REQUEST
          EQ     TFRX        RETURN 
  
*         PROCESS INCORRECT REQUEST CODE. 
  
 TFR3     SX6    3RTFR       SET ERROR CODE 
          RJ     ABT         PROCESS INTERNAL ERROR 
          SA1    A0+VDCT     READ VDCT
          SX2    B0+         INDICATE INCORRECT REQUEST 
          EQ     TFR1 
  
  
**        TTFR - FUNCTION REQUEST PROCESSOR ADDRESS TABLE.
  
 TTFR     INDEX  CON,/1TD/REQL,( TFR2 ) 
          INDEX  ,/1TD/BGI,( BGI )
          INDEX  ,/1TD/CRR,( CRR )
          INDEX  ,/1TD/CRR1,( CRR1 )
          INDEX  ,/1TD/CTM,( CTM )
          INDEX  ,/1TD/HUP,( HUP )
          INDEX  ,/1TD/IIP,( IIP )
          INDEX  ,/1TD/SDU,( SDU )
          TITLE  FUNCTION PROCESSOR ROUTINES. 
          SPACE  4,10 
**        FUNCTION PROCESSOR ROUTINES.
* 
*         FUNCTION PROCESSOR ROUTINES ARE OPEN ROUTINES WHICH 
*         EXIT EITHER TO ANOTHER PROCESSOR ROUTINE OR TO A REENTRY
*         EXIT POINT.  THEY NORMALLY EXPECT THE FOLLOWING ENTRY 
*         CONDITIONS PLUS ANY ADDITIONAL ENTRY CONDITIONS AS
*         DOCUMENTED IN THE INDIVIDUAL ROUTINE: 
* 
*         ENTRY  (A0)   = TERMINAL TABLE ADDRESS. 
*                (B2)   = TERMINAL NUMBER (ACN).
*                (SSPA) = REGISTER PARAMETER WORD.
 ACK      SPACE  4,10 
**        ACK - BLOCK ACKNOWLEDGED. 
* 
*         DECREMENTS DOWNSTREAM BLOCK COUNT.
* 
*         CALLS  ABT, DBC, SAB. 
  
  
 ACK      BSS    0           ENTRY
          TA1    B2,VMST     READ VMST ENTRY
          LX1    59-55       CHECK END-CONNECTION BIT 
          NG     X1,PCSX     IF SET, EXIT 
          RJ     DBC         DECREMENT BLOCK COUNT
          NG     X6,ACK2     IF BAD BLOCK COUNT 
 ACK1     RJ     SAB         SET ACTIVITY BIT 
          EQ     PCSX        EXIT 
  
*         PROCESS ERROR.
  
 ACK2     SX6    3RACK       SET ERROR CODE 
          RJ     ABT         PROCESS ERROR
          EQ     ACK1 
 AOM      SPACE  4,10 
**        AOM - ASSIGN OVERFLOW MESSAGE.
* 
*         ASSIGNS EITHER *OVL* OR NULL MESSAGE TO NETWORK,
*         DEPENDING ON CHARACTER COUNT IN *VDPT*. 
*         REENTRANT WAY TO SEND OVERFLOW MESSAGE. 
  
  
 AOM      BSS    0           ENTRY
          RJ     SOM         SEND OVERFLOW MESSAGE
          EQ     PCSX        EXIT 
 BGI      SPACE  4,10 
**        BGI - BEGIN INPUT.
* 
*         SENDS AN *MSG* BLOCK TO THE TERMINAL TO ENABLE INPUT
*         IF AN *MSG* BLOCK WAS NOT THE LAST BLOCK SENT.
* 
*         CALLS  ACD, PCD.
  
  
 BGI      BSS    0           ENTRY
          TA5    B2,VMST     READ VMST ENTRY
          SB4    B1+B1       MESSAGE LENGTH 
          LX5    59-53
          NG     X5,PCSX     IF *MSG* BLOCK SENT, EXIT
          SX6    DMBI        SET MESSAGE ADDRESS
          RJ     ACD         ASSIGN MESSAGE 
          NZ     X6,PCSX     IF MESSAGE ASSIGNED, EXIT
 BGI1     SB7    BGI         SET REENTRY
          BX7    X7-X7
          SB3    B0 
          EQ     PCD         REENTER
 BRK      SPACE  4,10 
**        BRK - PROCESS NETWORK BREAK CONDITION.
* 
*         PROCESS NETWORK USER BREAKS ONE AND TWO.
* 
*         ENTRY  (X7) = BREAK REASON CODE.
* 
*         CALLS  ACD, COA, ERQ, GTM, IFD, ONR, PCD, RDM, RST, 
*                SFE, SSP, SSS. 
  
  
 BRK      BSS    0           ENTRY
          SA7    BRKA        SAVE BREAK REASON CODE 
          TA5    B2,VMST     READ VMST ENTRY
          MX6    59          CLEAR OUTPUT PRESENT FLAG
          LX6    48-0        CLEAR TIMEOUT FLAG 
          BX5    X6*X5
          LX6    52-48
          BX5    X6*X5
          SA1    A0+VFST     CLEAR SCREEN MODE TIMEOUT FLAG 
          LX6    17-52
          BX6    X6*X1
          SA6    A1          REWRITE VFST 
          MX6    -3 
          SB3    B0 
          LX6    33-0        CHECK ABC
          BX1    -X6*X5 
          ZR     X1,BRK1     IF OUTPUT NOT PRESENT
          SX1    B1          SET OUTPUT PRESENT FLAG
 BRK1     SX4    44B         SET BREAK AND DATA RECEIVED BITS 
          BX4    X4+X1
          LX4    52-0 
          BX6    X5+X4
          SA6    A5          REWRITE VMST ENTRY 
          LX5    59-57
          NG     X5,BRK12    IF BREAK ALREADY IN PROGRESS, ERROR
  
*         REQUEST OUTSTANDING TERMINAL DATA.
* 
*         ENTRY  (B3) = 0.
*                (NBSY) = 0.
  
          TA5    B2,VMST     READ VMST ENTRY
          MX2    59          CLEAR DATA-RECEIVED BIT
          LX2    54-0 
          BX6    X2*X5
          SA6    A5          REWRITE VMST ENTRY 
          LX5    59-55
          MX1    -12
          NG     X5,PCSX     IF END CONNECTION SET
          BX1    -X1*X6      DROP TYPED AHEAD DATA POTS 
          ZR     X1,BRK2.1   IF NO POTS 
          SB3    X1 
          MX1    42 
          BX6    X1*X6       CLEAR POT POINTER AND COUNT
          SA6    A5          REWRITE VMST 
          SB4    B0          DROP ENTIRE CHAIN
          RJ     DPT         DROP POTS
          TA1    B2,VMST     CHECK NAM TYPEAHEAD
          SX6    B1 
          LX6    51-0 
          BX2    X1*X6
          ZR     X2,BRK2.1   IF NOT ON
          BX6    X1-X6
          SA6    A1          REWRITE VMST 
          SB4    B0 
          BX6    X6-X6
          SX7    LSTFDX 
          RJ     ASV         ASSIGN SUPERVISORY MESSAGE 
 BRK2.1   SB7    B0+
          RJ     SRE         CLEAR DRIVER REENTRY 
          SA1    BRKA 
          BX7    X1 
 BRK3     TA1    B2,VMST
          LX1    59-49
          NG     X1,BRK5     IF BREAK MARKER RECEIVED 
          SB7    BRK3 
          EQ     PCD         REENTER
  
*         SELECT BREAK REASON CODE PROCESSOR. 
  
 BRK5     SB5    X7-USB2     CHECK REASON CODE
          SX7    B1+         CLEAR BREAK MARKER RECEIVED
          TA5    B2,VMST
          LX7    49 
          BX7    -X7*X5 
          SA7    A5+
          SX7    TIET        ASSUME USER BREAK 1
          NG     B5,BRK6     IF USER BREAK 1
          SX7    TAET        ASSUME USER BREAK 2
  
*         PROCESS USER BREAK 1 AND USER BREAK 2.
* 
*         ENTRY  (X7) = TAET, IF USER BREAK 2.
*                       TIET, IF USER BREAK 1.
  
 BRK6     SA1    A0+VDCT     READ VDCT
          SA2    A0+VDPT     READ VDPT
          SA3    A0+VROT     READ VROT
          SA4    A0+VSTT     READ VSTT
          SB3    B0          INDICATE NO POT POINTER
          SX6    B1          CLEAR INPUT REQUESTED FLAG 
          LX6    56-0 
          BX6    -X6*X1 
          SA6    A1 
          LX4    59-56
          NG     X4,ROI      IF DETACH IN PROGRESS
          LX1    59-50       CHECK FOR *TEXT* MODE
          MX6    12 
          SA4    A0+VUIT
          BX4    X6*X4
          ZR     X4,ROI      IF NO EJT ORDINAL ASSIGNED 
          LX2    59-16       CHECK FOR INPUT INITIATED
          MX4    -5 
          BX3    -X4*X3 
          LX4    X1,B1       CHECK *AUTO* MODE
          SX3    X3-1 
          NG     X1,ROI      IF IN *TEXT* MODE
          NG     X2,BRK10    IF INPUT INITIATED 
          NZ     X3,BRK7     IF ACTIVE
          NG     X4,BRK7     IF AUTO MODE 
          RJ     COA         CHECK OUTPUT AVAILABLE 
          ZR     X4,BRK11    IF OUTPUT NOT PRESENT
 BRK7     SX6    /TLX/PUB    PROCESS USER BREAK 
          RJ     ERQ         ENTER REQUEST
          SX7    B1+
          SB7    BRK8 
          EQ     PCD         REENTER
  
*         RESET TERMINAL AFTER INTERRUPT COMPLETION.
*         (X7) = 1, PROCESSING A USER INITIATED USER BREAK. 
*         (X7) = 0, PROCESSING AN EXECUTIVE INITIATED USER BREAK. 
  
 BRK8     TA2    B2,VMST
          SA3    A0+VSTT
          SA1    A0+VDCT
          LX2    59-55       CHECK END-CONNECTION FLAG
          LX3    59-48       CHECK LOGOUT FLAG
          NG     X2,PCSX     IF END-CONNECTION SET
          LX2    X1,B1       CLEAR INTERRUPT COMPLETE 
          MX6    1
          BX6    -X6*X2 
          LX6    58-59
          SA6    A1+         REWRITE VDCT 
          NG     X3,ROI      IF LOGOUT FLAG SET 
          PL     X1,BRK9     IF NO DRIVER REQUEST 
          MX3    -12         CHECK DRIVER REQUEST 
          BX4    -X3*X1 
          SX3    X4-/1TD/HUP
          ZR     X3,ROI      IF *HANG UP PHONE* REQUEST 
 BRK9     PL     X2,PCD      IF INTERRUPT NOT COMPLETE
          RJ     SSS
          SX6    /TLX/RES    SET RESTART REQUEST
          RJ     ERQ         ENTER RESTART REQUEST
          RJ     SSP         RESTORE X7 
          NZ     X7,ROI      IF USER INITIATED
          TA2    B2,VMST     CLEAR BREAK-IN-PROGRESS BIT
          SX6    B1 
          LX6    57-0 
          BX6    -X6*X2 
          SA6    A2 
          EQ     PCSX        EXIT 
  
*         ISSUE *IDLE* IF NO JOB ACTIVITY TO INTERRUPT. 
  
 BRK10    MX6    -59         CLEAR INPUT INITIATED
          BX7    -X6*X2 
          LX7    16-59
          SA7    A2          REWRITE VDPT ENTRY 
 BRK11    SX6    DMID        SET IDLE MESSAGE ADDRESS 
          SB4    DMIDL       SET MESSAGE LENGTH 
          RJ     ACD         ASSIGN MESSAGE 
          EQ     ROI         RESUME OUTPUT
  
*         INCREMENT SECOND BREAK RECEIVED COUNTER.
  
 BRK12    SA1    BRKB        INCREMENT ERROR COUNTER
          SX6    X1+B1
          PX6    B2,X6       SAVE TN AND ERROR COUNT
          SA6    A1 
          EQ     PCSX        EXIT 
  
  
 BRKA     CON    0           WORD TO SAVE BREAK REASON CODE 
  
*         STORE THE TOTAL ERROR COUNT WITH THE MOST RECENT
*         TERMINAL NUMBER THAT DETECTED AN ERROR. 
  
 BRKB     CON    0           12/ TN, 48/ ERROR COUNTER
 CLS      SPACE  4,10 
**        CLS - CHECK LOAN STATUS.
* 
*         ENTRY  (X7) = LOAN STATUS VALUE.
*                (B4) = ENTRY CONDITION FOR *CLS1*. 
*                     = 0, IF NO CALL TO *SFE* OR EXIT TO *CRR*.
*                     = 1, IF ONLY EXIT TO *CRR*. 
*                     = 2, IF ONLY CALL TO *SFE*. 
*                     > 2, IF CALL TO *SFE* AND EXIT TO *CRR*.
* 
*         EXIT   TO *CRR* IF CONNECTION RESPONSE IS TO BE ISSUED. 
* 
*         CALLS  ERQ, IDM, PRP, SFE, ZFN. 
  
  
 CLS      BSS    0           ENTRY
          SB4    B0          ENTRY CONDITION FOR CALL TO *ZFN*
          MX0    42 
          SA1    RCVB+5      GET USERNAME FROM MESSAGE
          RJ     ZFN         ZERO FILL USERNAME 
          SB4    3           SET ENTRY CONDITION IN CASE OF ERROR 
          BX2    X0*X6
          SA3    A0+VUIT     GET USERNAME FROM TERMINAL TABLE 
          BX4    X0*X3
          BX4    X4-X2
          NZ     X4,CLS0     IF NOT THE SAME USERNAME 
          RJ     PRP         PROCESS RETURN TO PRIMARY
          EQ     CRR1        ISSUE *CON/REQ/N* MESSAGE
  
 CLS0     SX7    ERLS        SET INTERNAL ERROR 
 CLS1     RJ     PRP         PROCESS RETURN TO PRIMARY
          SA2    A0+VDCT     CLEAR PRIMARY CONNECTION BIT 
          SX6    B1 
          LX6    47-0 
          BX6    -X6*X2 
          SA6    A2          REWRITE VDCT 
          BX0    X7          SAVE LOAN STATUS VALUE FOR CALCULATION 
          LX7    0-24         SET UP ENTRY FOR DRIVER REQUEST 
          SX6    /TLX/RES    SET UP DRIVER REQUEST
          RJ     ERQ         ENTER REQUEST IN QUEUE 
          SX1    ERLS 
          BX1    X0-X1
          NZ     X1,CLS1.5   IF NOT INTERNAL ERROR
          SA1    A0+VFST     INSERT JSN INTO MESSAGE
          MX0    24 
          BX1    X0*X1       GET JSN
          LX1    -6          SHIFT JSN
          LX0    -6          SHIFT MASK 
          SA2    CLSA 
          BX2    -X0*X2 
          BX6    X1+X2       INSERT JSN INTO MESSAGE
          SA6    A2          REWRITE MESSAGE
          SX6    CLSA        SET MESSAGE ADDRESS
          RJ     IDM         ISSUE DAYFILE MESSAGE
 CLS1.5   ZR     B4,PCSX     IF NO OTHER TASKS WANTED 
          EQ     B1,B4,CLS2  IF NO *SMP* MESSAGE WANTED 
          RJ     SFE         ISSUE IAF DAYFILE MESSAGE
 CLS2     SB5    B1+B1
          EQ     B4,B5,PCSX  IF NOT TO ISSUE *CON/REJ*
          EQ     CRR         ISSUE *CON/REJ*
  
  
 CLSA     DATA   C* JSNN DETACHED DUE TO APPLICATION SWITCH ERROR.* 
 CNB      SPACE  4,10 
**        CNB - CONNECTION BROKEN.
* 
*         PROCESS INTERRUPTION OF NETWORK TERMINAL CONNECTION.
* 
*         ENTRY  (X3) = STATUS BITS FROM *CON/CB* MESSAGE 
* 
*         EXIT   TO *CLS1* IF CONNECTION IS LOANED. 
*                   (X7) = LOAN STATUS VALUE. 
*                   (B4) = ERROR MESSAGE INDICATOR. 
* 
*         CALLS  DAP, DPT, ENC, ERQ, SRE. 
  
  
 CNB      BSS    0           ENTRY
          SB3    B0 
          SA1    A0+VDCT     CHECK CONNECTION TYPE
          LX1    59-47
          PL     X1,CNB2     IF CONNECTION NOT LOANED 
  
*         PROCESS LOANED CONNECTION.
  
          SB4    B0          SET ENTRY FOR *CLS1* 
          SX7    ERLS        SET INTERNAL ERROR 
          ZR     X3,CLS1     IF LOAN BIT NOT SET IN MESSAGE 
          SA1    RCVB        GET REASON CODE
          LX1    0-36 
          MX0    -8 
          BX1    -X0*X1 
          SB6    X1 
          SB5    3
          LT     B6,B5,CNB1  IF NOT SECONDARY ABORT 
          SX7    SCLS 
          EQ     CLS1        PROCESS RETURN FROM SECONDARY ABORT
  
 CNB1     SX7    LDLS        SET LOAN STATUS FOR LINE DISCONNECT
          EQ     CLS1        PROCESS RETURN FROM LINE DISCONNECT
  
 CNB2     BX7    X7-X7
          TA1    B2,VMST
          PL     X1,CNB3     IF CONNECTION NOT YET COMPLETE 
          SA1    A0+VSTT
          SB7    CNB
          SA2    A0+VDCT
          LX2    59-57
          LX1    59-56
          NG     X1,PCD      IF DETACH IN PROGRESS, REENTER 
          PL     X2,PCD      IF LOGIN NOT COMPLETE, REENTER 
 CNB3     SB7    B0 
          RJ     SRE         CLEAR REENTRY
          RJ     DAP         CLEAR OUTPUT ASSIGNMENTS 
          TA1    B2,VMST     DROP VMST POT
          MX7    -12
          BX7    -X7*X1 
          SB3    X7 
          SB4    B0 
          MX7    42          CLEAR POT POINTER
          MX3    57          CLEAR UNANSWERED BLOCKS
          LX3    33 
          BX1    X3*X1
          BX7    X7*X1
          MX3    1           CLEAR TERMINAL ON LINE 
          BX7    -X3*X7 
          SA7    A1          REWRITE VMST 
          ZR     B3,CNB4     IF NO POT
          RJ     DPT         DROP POTS
 CNB4     SB3    B0          CLEAR POT POINTER
          BX7    X7-X7
          SX6    /TLX/HUP    SET HANG UP PHONE REQUEST
          SA1    A0+VUIT     CHECK FOR EJT ORDINAL
          MX3    -12
          BX1    -X3*X1 
          ZR     X1,ENC      IF NO EJT ORDINAL
          RJ     ERQ         ENTER REQUEST
          EQ     PCSX        EXIT 
 CNM      SPACE  4,10 
**        CNM - CONNECTION MADE.
* 
*         MAKES 1TA QUEUE ENTRY TO LOGIN USER.
* 
*         ENTRY  (VDPT(0)) = VALIDATION POT POINTER.
* 
*         EXIT   TO *PCS1* TO MAKE QUEUE ENTRY. 
* 
*         CALLS  ASV, ITA2 (VIA PCS1).
  
  
 CNM      BSS    0           ENTRY
          TA1    B2,VMST
          LX1    59-55
          NG     X1,PCSX     IF *CON/CB/R* ALREADY RECEIVED 
  
*         ISSUE CONNECTION INITIATION RESPONSE. 
  
          BX6    X6-X6       INDICATE DEFAULT HEADER
          SB4    B1          TEXT LENGTH = 1
          SX7    FCINI       ISSUE SUPERVISORY  MESSAGE 
          RJ     ASV
          NZ     X6,CNM1     IF MESSAGE ISSUED
          SB3    B0          SET REENTRY
          BX7    X7-X7
          SB7    CNM
          EQ     PCD
  
*         BYPASS 1TA LOGIN REQUEST IF SECONDARY RETURNING TO PRIMARY. 
  
 CNM1     SA1    A0+VDCT     CHECK PRIMARY CONNECTION 
          LX1    59-47
          PL     X1,CNM2     IF NOT RETURN OF SECONDARY CONNECTION
          MX7    1           CLEAR PRIMARY CONNECTION BIT 
          BX7    -X7*X1 
          LX7    47-59
          SA7    A1          REWRITE VDCT 
          SB3    B0          CLEAR POT POINTER
          SX6    /TLX/RES    SET UP DRIVER REQUEST
          RJ     ERQ         ENTER REQUEST
          EQ     PCSX        EXIT 
  
*         ENTER 1TA REQUEST TO LOGIN USER.
  
 CNM2     SA1    A0+VDPT     GET VALIDATION POT POINTER 
          MX7    12 
          BX7    -X7*X1      CLEAR VDPT POT POINTER 
          BX1    X1-X7       MASK VDPT POT POINTER
          SA7    A1          REWRITE VDPT 
          LX1    12 
          BX7    X7-X7
          SX5    ITA2$       SET QUEUE ENTRY
          SB3    X1+
          TA1    B2,VMST     SET ON LINE
          MX6    1
          BX6    X6+X1
          SA6    A1          REWRITE VMST 
          EQ     PCS1        MAKE QUEUE ENTRY 
 CRR      SPACE  4,10 
**        CRR - CONNECTION REQUEST REPLY. 
* 
*         EXIT   EITHER THE *CON/REQ/N* OR *CON/REJ*
*                SUPERVISORY MESSAGE HAS BEEN SENT TO NAM.
* 
*         CALLS  ASV, SHA.
  
  
 CRR      BSS    0           ENTRY FOR *CON/REJ* MESSAGE
          SA1    CONREJ 
          SX3    RTCI 
          LX3    36-0 
          BX6    X1+X3
          EQ     CRR2        CONTINUE 
  
 CRR1     BSS    0           ENTRY FOR *CON/REQ/N* MESSAGE
          RJ     SHA         RESET HIGHEST ACTIVITY ACN 
          SA1    CONREQ      CONNECTION ACCEPTED
          BX6    X1 
  
*         ISSUE SUPERVISORY MESSAGE.
  
 CRR2     SA6    CRRA 
          SX7    A6 
          BX6    X6-X6       USE DEFAULT HEADER 
          SB4    B1+         SET TEXT LENGTH
          RJ     ASV         ASSIGN MESSAGE 
          EQ     PCSX        EXIT 
  
  
 CRRA     CON    0           CANNED MESSAGE 
 CTM      SPACE  4,10 
**        CTM - CANCEL TYPEAHEAD MODE.
* 
*         SENDS A *LSTFDX* SUPERVISORY MESSAGE TO *NAM* 
*         TO CANCEL TYPEAHEAD QUEUEING. 
* 
*         CALLS  ASV, PCD.
  
  
 CTM      BSS    0           ENTRY
          BX6    X6-X6       SET DEFAULT HEADER 
          SB4    B1          SET TEXT LENGTH
          SX7    LSTFDX      SET MESSAGE ADDRESS
          RJ     ASV         ASSIGN SUPERVISORY MESSAGE 
          NZ     X6,CTM1     IF MESSAGE ASSIGNED
          SB3    B0          SET REENTRY PARAMETERS 
          BX7    X7-X7
          SB7    CTM
          EQ     PCD         REENTER
  
 CTM1     TA1    B2,VMST     READ VMST ENTRY
          MX2    59 
          LX2    51-0 
          BX6    X1*X2       CLEAR TYPEAHEAD BIT
          SA6    A1          REWRITE VMST 
          EQ     PCSX        EXIT 
 ECR      SPACE  4,10 
**        ECR - PROCESS *END CONNECTION* RESPONSE.
* 
*         PROCESS COMPLETION OF NORMAL LOGOUT OR APPLICATION SWITCH.
* 
*         ENTRY  (X3) = MESSAGE STATUS BITS.
* 
*         EXIT   TO *SMPE* IF THE FOLLOWING IS TRUE 
*                  END-CONNECTION BIT IS NOT SET. 
*                TO *CLS1* IF ANY OF THE FOLLOWING IS TRUE
*                  LOAN CONFIRMATION BIT IS NOT SET.
*                  THE CONNECTION IS ALREADY LOANED.
* 
*         CALLS  CLE, DPT, SHA. 
  
  
 ECR      BSS    0           ENTRY
          SA1    A0+VDCT     CHECK CONNECTION TYPE
          LX1    59-47
          MX2    -12
          PL     X1,ECR1     IF NOT LOANING CONNECTION
          SA1    A0+VFST     GET APPSW POT POINTER
          BX4    -X2*X1 
          ZR     X4,ECR0     IF NO POT TO DROP
          BX6    X2*X1       CLEAR POT POINTER IN VFST
          SA6    A1 
          SB3    X4 
          SB4    B0          DROP TO END OF CHAIN 
          BX0    X3          SAVE MESSAGE STATUS BITS 
          RJ     DPT         DROP POT 
          BX3    X0 
 ECR0     SB4    B1+B1       SET REGISTERS FOR *CLS1* 
          LX3    59-0 
          SX7    ERLS 
          PL     X3,CLS1     IF LOAN CONFIRMATION BIT NOT SET 
          LX3    59-1-59+0
          NG     X3,CLS1     IF CONNECTION ALREADY LOANED 
          EQ     PCSX        EXIT 
  
 ECR1     TA1    B2,VMST     READ VMST ENTRY
          LX1    59-55       CHECK END-CONNECTION BIT 
          PL     X1,SMPE     IF NOT SET, ERROR
          RJ     //CLE       CLEAN UP TERMINAL TABLE
          RJ     SHA         RESET HIGHEST ACTIVE ACN 
          EQ     PCSX        EXIT 
 ENC      SPACE  4,10 
**        ENC - END CONNECTION. 
* 
*         PROCESSES THE TERMINATION OF THE CURRENT CONNECTION 
*         AND DIRECTS NVF TO SWITCH USER TO ANOTHER APPLICATION 
*         IF DESIRED. 
* 
*         EXIT   *END CONNECTION* SUPERVISORY MESSAGE ISSUED. 
*                (VMST) = END-CONNECTION BIT SET IF LOGOUT REQUEST. 
*                TO *CLS1* IF NO POT POINTER. 
*                   (X7) = LOAN STATUS VALUE. 
*                   (B4) = ERROR MESSAGE INDICATOR. 
* 
*         CALLS  ASV, DPT, ILV, PCD, SSP, ZFN.
  
  
 ENC      BSS    0           ENTRY
          ZR     B3,ENC0     IF NO POT
          SB4    B0 
          RJ     DPT         DROP POT 
 ENC0     SA1    A0+VDCT     CHECK CONNECTION TYPE
          LX1    59-47
          PL     X1,ENC1     IF CONNECTION NOT BEING LOANED 
  
*         THIS CONNECTION IS BEING LOANED TO ANOTHER APPLICATION. 
  
          SX7    ENC0        SAVE ADDRESS 
          SA7    ENCA 
          SA1    A0+VFST     GET POT POINTER
          MX6    -12
          SB4    B0          ENTRY FOR *CLS1* 
          BX2    -X6*X1 
          SX7    ERLS 
          ZR     X2,CLS1     IF NO POT POINTER
          LX2    3
          TB4    X2,VBMP     CALCULATE POT ADDRESS
          SA1    B4+B1       GET APPLICATION NAME 
          MX2    42 
          BX6    X2*X1
          RJ     ZFN         BLANK FILL APPLICATION NAME
          SA1    CONEND      SET STATUS BIT IN MESSAGE
          SX2    B1 
          BX7    X2+X1
          SA7    B4          STORE MESSAGE IN POT 
          SA6    A7+B1       REWRITE APPLICATION NAME 
          SX7    B4          SET MESSAGE ADDRESS
          SB4    B1+B1       SET TEXT LENGTH
          SX6    HDRS4       SET HEADER ADDRESS 
          EQ     ENC4        CONTINUE 
  
*         SET END-CONNECTION IN VMST. 
  
 ENC1     TA1    B2,VMST     READ VMST ENTRY
          ZR     X1,PCSX     IF NO USER 
          MX6    1
          LX1    59-55       CHECK END-CONNECTION BIT 
          NG     X1,PCSX     IF ALREADY SET 
          BX6    X1+X6       SET BIT
          LX6    55-59       SHIFT RESTORE
          SA6    A1+         REWRITE VMST 
  
*         DO NOT SEND MESSAGE WHEN SECONDARY CONNECTION HAS ABORTED.
  
          SA2    A0+VROT     CHECK LOAN STATUS VALUE
          MX1    -12
          LX1    24-0 
          BX2    -X1*X2 
          ZR     X2,ENC2     IF NO LOAN STATUS VALUE
          SX7    B0          CLEAR LOAN STATUS VALUE
          RJ     ILV
          EQ     ECR         CONTINUE PROCESSING
  
*         SET UP CONNECTION TERMINATION MESSAGE.
  
 ENC2     SX7    ENC2        SAVE REENTRY ADDRESS 
          SA7    ENCA 
          SX7    CONEND      SET MESSAGE ADDRESS
          SA1    A0+VFNT
          MX6    42 
          BX6    X6*X1
          SA1    ENCB        SET DEFAULT NVF PARAMETER
          ZR     X6,ENC3     IF NO NVF PARAMETER
          BX1    X6 
 ENC3     SB4    B1+B1       SET TEXT LENGTH = 2
          RJ     ZFN         BLANK FILL NVF PARAMETER 
          SA6    CONEND+1 
          SX6    HDRS2       SET HEADER ADDRESS 
  
*         ISSUE SUPERVISORY MESSAGE.
  
 ENC4     RJ     ASV         ASSIGN MESSAGE 
          RJ     SSP
          SA1    ENCA        GET REENTRY ADDRESS
          SB7    X1+
          ZR     X6,PCD      IF MESSAGE NOT ASSIGNED, REENTER 
          EQ     PCSX        EXIT 
  
  
 ENCA     CON    0           REENTRY ADDRESS
 ENCB     DATA   C*BYE* 
 HUP      SPACE  4,10 
**        HUP - HANG UP PHONE.
* 
* 
*         PROCESS REQUEST TO TERMINATE CONNECTION.
* 
*         ENTRY  (VFST) = NVF LOGOFF PARAMETER
* 
*         EXIT   TO *ENC*.
*                (VSTT) = POT POINTER CLEARED.
* 
*         CALLS  CBL, ENC, PCD, SSS.
  
  
 HUP      BSS    0           ENTRY
  
*         WAIT UNTIL DOWNSTREAM BLOCKS ARE ACKNOWLEDGED.
  
          RJ     CBL         CHECK BLOCK LIMIT
          SB7    HUP         SET REENTRY
          BX7    X7-X7
          NZ     X3,PCD      IF BLOCKS OUTSTANDING, REENTER 
          EQ     ENC         END CONNECTION 
 IIP      SPACE  4,10 
**        IIP - ISSUE INPUT PROMPT. 
* 
*         ISSUES INPUT PROMPT IF NOS TRANSPARENT, BINARY, 
*         OR AUTO MODE IS NOT SET.
* 
*         EXIT   INPUT PROMPT ISSUED. 
*                (VDCT) = INPUT INITIATED BIT 56 SET. 
* 
*         CALLS  ACD, PCD.
  
  
 IIP      BSS    0           ENTRY
          SA3    A0+VDCT     GET VDCT 
          SX6    B1          SET *INPUT INITIATED* BIT
          LX6    56-0 
          BX6    X6+X3
          LX3    59-49
          SA6    A3          REWRITE VDCT 
          NG     X3,PCSX     IF AUTO MODE, EXIT 
  
*         ISSUE PROMPT MESSAGE. 
  
 IIP1     RJ     IPM         ISSUE PROMPT MESSAGE 
          NZ     X6,PCSX     IF MESSAGE ASSIGNED, EXIT
          SB7    IIP1        SET REENTRY ADDRESS
          SB3    B0 
          BX7    X7-X7
          EQ     PCD         REENTER
 INA      SPACE  4,20 
**        INA - USER INACTIVE.
* 
*         INDICATES THAT USER HAS HAD NO TERMINAL ACTIVITY
*         FOR A PERIOD OF TIME EQUAL TO THE INSTALLATION NET- 
*         WORK OPTION.  CALLS EXECUTIVE TO LOGOFF USER IF THE 
*         VALIDATION NO-TIME-OUT BIT IS NOT SET, ELSE RETURNS.
*         IF A TERMINAL IS IN SCREEN MODE, THE TIMEOUT PERIOD 
*         IS TWICE THE INSTALLATION NETWORK OPTION.  TO 
*         ACCOMPLISH THIS, THE SCREEN MODE TIMEOUT BIT IS SET 
*         ON THE FIRST PASS THROUGH *INA*.  ON THE SECOND 
*         PASS THROUGH *INA*, THIS BIT IS CHECKED  AND IF IT
*         IS SET, THE TERMINAL IS TIMED OUT.
* 
*         ENTRY  (VDCT) = NO-TIME-OUT BIT, BIT 22.
*                (VFST) = SCREEN MODE TIMEOUT FLAG, BIT 17. 
*                (VSTT) = SCREEN MODE, BIT 49.
* 
*         EXIT   (VMST) = TIMEOUT FLAG, BIT 48. 
*                (VFST) = SCREEN MODE TIMEOUT FLAG, BIT 17. 
* 
*         CALLS  DAP, ENC, ERQ, RPT, SRE. 
  
  
 INA      BSS    0           ENTRY
  
*         CHECK CONNECTION TYPE.
  
          SA1    A0+VDCT
          LX1    59-47
          PL     X1,INA0     IF CONNECTION IS NOT LOANED
          SB4    B0          SET ENTRY FOR *CLS1* 
          SX7    ERLS        SET ENTERNAL ERROR 
          EQ     CLS1        PROCESS ERROR
  
*         EXIT IF THERE IS CURRENT USER ACTIVITY. 
  
 INA0     TA1    B2,VMST     READ VMST ENTRY
          SA2    A0+VROT     READ VROT
          SX7    B1          SET TIMEOUT FLAG 
          LX7    48 
          BX7    X1+X7
          SX1    X1 
          NZ     X1,PCSX     IF MESSAGE ASSIGNED, EXIT
          LX2    59-0        CHECK VROT ACTIVITY BIT
          NG     X2,INA1     IF NO JOB ACTIVITY 
          SA2    A0+VFST     CHECK SMF CONNECTION STATE 
          MX3    6
          LX3    24 
          BX2    X2*X3
          ZR     X2,PCSX     IF ACTIVE AND NOT SMF, EXIT
 INA1     SA2    A0+VUIT     CHECK EJT ORDINAL
          MX3    -12
          BX2    -X3*X2 
          ZR     X2,PCSX     IF NO EJT ORDINAL ASSIGNED, EXIT 
          SA3    A0+VDCT
          NG     X3,PCSX     IF DRIVER REQUEST, EXIT
          SA1    A0+VCHT     CHECK FOR REENTRY
          MX6    36 
          BX1    X6*X1
          NZ     X1,PCSX     IF REENTRY SET, EXIT 
          SA1    A0+VSTT
          LX1    59-56
          NG     X1,PCSX     IF DETACH IN PROGRESS, EXIT
          LX3    59-22       CHECK NO-TIME-OUT BIT
          SB3    B0          INDICATE NO POTS TO DROP 
          NG     X3,PCSX     IF NO-TIME-OUT 
          SB7    B0 
          SA1    A0+VSTT     CHECK FOR SCREEN MODE IN EFFECT
          SA3    A0+VFST     CHECK SCREEN MODE TIMEOUT FLAG 
          LX1    59-49
          PL     X1,INA2     IF NOT IN SCREEN MODE
          LX3    59-17
          NG     X3,INA2     IF SCREEN MODE TIMEOUT 
          MX6    1           SET SCREEN MODE TIMEOUT FOR NEXT PASS
          BX6    X6+X3
          LX6    17-59
          SA6    A3          REWRITE VFST 
          EQ     PCSX        EXIT 
  
*         CLEAR UNACKNOWLEDGED BLOCKS AND ISSUE DOWNLINE BREAK. 
  
 INA2     MX6    -3          CLEAR APPLICATION BLOCK COUNT
          LX6    33 
          BX7    X6*X7
          BX6    X6-X6       USE DEFAULT SUPERVISORY MESSAGE HEADER 
          TA7    B2,VMST     REWRITE *VMST* 
          SB4    B1+
          SX7    FCBRK       SEND CONNECTION BREAK SUPERVISORY MESSAGE
          RJ     ASV
          SB3    B0 
          BX7    X7-X7
          SB7    INA2 
          ZR     X6,PCD      IF MESSAGE NOT ISSUED
 INA3     TA3    B2,VMST     CHECK FOR CONNECTION RESET RECEIVED
          LX3    59-47
          NG     X3,INA4     IF CONNECTION RESET HAS BEEN RECEIVED
          BX7    X7-X7
          SB7    INA3 
          EQ     PCD         REENTER
  
*         CONNECTION RESET RECEIVED, CONTINUE WITH TIMEOUT. 
  
 INA4     MX7    1           CLEAR CONNECTION RESET RECEIVED BIT
          BX7    -X7*X3 
          LX7    47-59       REALIGN *VMST* 
          SB7    B0 
          TA7    B2,VMST     REWRITE *VMST* 
          RJ     SRE         CLEAR DRIVER REENTRY 
          SX6    /TLX/TOT 
          RJ     ERQ         ENTER REQUEST
          RJ     DAP         DROP ASSIGNED POTS 
          SX6    DMBL        SEND BELLS 
          SB4    DMBLL
          RJ     ACD         ASSIGN MESSAGE 
          SX6    DMTO        SEND TIMEOUT MESSAGE 
          SB4    DMTOL
          SB3    B0 
          RJ     ACD         ASSIGN MESSAGE 
          EQ     PCSX        EXIT 
 ITM      SPACE  4,10 
**        ITM - INITIATE TYPEAHEAD MODE.
* 
*         SENDS A *LSTHDX* SUPERVISORY MESSAGE TO THE NETWORK 
*         TO INITIATE TYPEAHEAD QUEUING.
* 
*         CALLS  ASV, PCD, SRE. 
  
  
 ITM      BSS    0           ENTRY
          BX6    X6-X6       SET DEFAULT HEADER 
          SB4    B1          SET MESSAGE LENGTH 
          SX7    LSTHDX      SET MESSAGE NAME 
          RJ     ASV         ASSIGN MESSAGE 
          SB3    B0 
          BX7    X7-X7
          SB7    ITM
          ZR     X6,PCD      IF MESSAGE NOT ISSUED, REENTER 
          TA1    B2,VMST     READ VMST ENTRY
          SX6    B1          SET TYPEAHEAD IN EFFECT
          LX6    51-0 
          BX6    X6+X1
          SA6    A1          REWRITE VMST 
          EQ     PCSX        EXIT 
 JCM      SPACE  4,10 
**        JCM - ISSUE JOB COMPLETION MESSAGE. 
* 
*         ISSUE JOB OR RUN COMPLETION MESSAGE AS DETERMINED 
*         BY THE TERMINAL SUBSYSTEM.
* 
*         ENTRY  (VSTT) BYTE 3 = 6/, 6/SUBSYSTEM. 
* 
*         EXIT   TO *RDY* IF NO MESSAGE SPECIFIED FOR THE 
*                TERMINAL SUBSYSTEM.
* 
*         CALLS  ACD, PCD, RDY. 
  
  
 JCM      BSS    0           ENTRY
          SA1    A0+VSTT     READ VSTT
          MX6    -3 
          LX1    -12
          BX6    -X6*X1      EXTRACT CURRENT SUBSYSTEM
          SA1    JCMT+X6     READ MESSAGE ADDRESS 
          ZR     X1,RDY      IF NO MESSAGE DEFINED
          SX6    X1+         SET MESSAGE ADDRESS
          SB4    DMRCL       SET MESSAGE LENGTH 
          RJ     ACD         ASSIGN MESSAGE 
          NZ     X6,PCSX     IF MESSAGE ASSIGNED
          SB7    JCM         SET REENTRY
          BX7    X7-X7
          EQ     PCD         REENTER
  
*         JCMT - TABLE OF RUN COMPLETION MESSAGES.
  
 JCMT     INDEX  CON,MSYS,( 0 ) 
          INDEX  ,BASS,( DMRC ) 
          INDEX  ,FORS,( DMRC ) 
          INDEX  ,FTNS,( DMRC ) 
          INDEX  ,EXES,( DMRC ) 
 NAK      SPACE  4,10 
**        NAK - BLOCK NOT DELIVERED.
* 
*         PERFORMS THE FOLLOWING FUNCTIONS IN RESPONSE TO A 
*         *NAK* SUPERVISORY MESSAGE-
* 
*         (1)  UPDATES *NAK* COUNT. 
*         (2)  DECREMENTS DOWNSTREAM BLOCK COUNT. 
*         (3)  VALIDATES REASON CODE. 
*         (4)  ISSUES APPROPRIATE DAYFILE MESSAGE.
*         (5)  CALLS ABORT PROCESSOR IF ERROR.
* 
*         ENTRY  (RCVB) = REASON CODE, BITS 36-43.
* 
*         EXIT   DAYFILE MESSAGE ISSUED.
*                (NAKC) = INCREMENTED.
*                (BLTC) = INCREMENTED IF BLOCK-LOST.
*                (VMST) = DOWNSTREAM BLOCK COUNT DECREMENTED. 
* 
*         CALLS  ABT, DBC, IDM, O6S.
  
  
 NAK      BSS    0           ENTRY
          SA1    NAKC        UPDATE *NAK* COUNT 
          SX7    B1 
          SB6    B0          (B6) = ERROR FLAG
          IX7    X1+X7
          SA7    A1          REWRITE *NAK* COUNT
          RJ     DBC         DECREMENT TERMINAL BLOCK COUNT 
          PL     X6,NAK1     IF NO ERROR
          SB6    B1+         SET ERROR FLAG 
  
*         VALIDATE REASON CODE. 
  
 NAK1     SA2    RCVB        READ MESSAGE 
          MX3    -8          MASK REASON CODE 
          SX1    B2          SET (X1) FOR *O6S* 
          AX2    36 
          BX3    -X3*X2 
          SX2    X3-AXLB     CHECK FOR *BLOCK-LOST* 
          NZ     X2,NAK2     IF NOT *BLOCK-LOST*
  
*         PROCESS *BLOCK-LOST* CONDITION. 
  
          RJ     O6S         CONVERT TERMINAL NUMBER
          SA1    NAKB        INSERT IN DAYFILE MESSAGE
          MX3    18 
          AX6    6
          BX1    X3*X1
          BX6    -X3*X6 
          IX7    X6+X1
          SA7    A1 
          SX6    NAKA        SET MESSAGE ADDRESS
          RJ     IDM         ISSUE DAYFILE MESSAGE
          SA1    BLTC        INCREMENT BLOCK-LOST COUNT 
          SX7    B1 
          IX6    X7+X1
          SA6    A1+
          ZR     B6,PCSX     IF NO ERROR, EXIT
  
*         PROCESS ERROR.
  
 NAK2     SX6    3RNAK       SET ERROR CODE 
          RJ     ABT         PROCESS ERROR
          EQ     PCSX        EXIT 
  
 NAKA     DATA   10HBLOCK LOST
 NAKB     DATA   03L -
 NWC      SPACE  4,40 
**        NWC - PROCESS NEW CONNECTION. 
* 
*         INITIATES THE CREATION OF NEW USER.  THE USER HAS 
*         BEEN VALIDATED BY *NVF* AND THE USERS VALIDATION DATA 
*         ARE AVAILABLE IN THE CONNECTION SUPERVISORY MESSAGE.
*         *NWC* COPIES THE VALIDATION INFORMATION TO POT FOR
*         USE FOR LOGIN AND ISSUES SUPERVISORY MESSAGE TO EITHER
*         ACCEPT OR REJECT THE NEW CONNECTION.  LOGIN WILL BE 
*         COMPLETED AFTER THE COMMUNICATIONS SUPERVISOR SENDS 
*         A *CONNECTION MADE* SUPERVISORY MESSAGE.
* 
*         ENTRY  (MESSAGE) = VALIDATION PARAMETERS. 
*                  (MSG+0) = 36/, 3/ ABL, 5/, 8/ DT, 8/.
*                  (MSG+1) = 42/ TN, 2/, 8/ PW, 8/PL. 
*                  (MSG+2) = 46/, 1/A, 3/LAL, 11/ BSZ, 1/0. 
*                  (MSG+4) = 42/ FN, 18/ FO.
*                  (MSG+5) = 42/ UN, 18/ UI.
*                  (MSG+6) = 60/ AHMT.
*                  (MSG+7) = 60/ AHDS.
*                  (MSG+8) = 60/ AAWC.
*                  (MSG+9) = 60/ ATWD.
* 
*                     MSG  = MESSAGE FWA. 
*                     ABL  = APPLICATION BLOCK LIMIT. 
*                     DT   = DEVICE TYPE. 
*                     TN   = TERMINAL NAME. 
*                     PW   = PAGE WIDTH.
*                     PL   = PAGE LENGTH. 
*                     A    = *LAL* SPECIFIED. 
*                     LAL  = LINE ACCESS LEVEL LIMIT. 
*                     BSZ  = BLOCK SIZE.
*                     FN   = FAMILY NAME. 
*                     FO   = FAMILY ORDINAL.
*                     UN   = USER NAME. 
*                     UI   = USER INDEX (NOT USED). 
*                     AHMT = ACCOUNT FILE WORD *AHMT*.
*                     AHDS = ACCOUNT FILE WORD *AHDS*.
*                     AAWC = ACCOUNT FILE WORD *AAWC*.
*                     ATWD = ACCOUNT FILE WORD *ATWD*.
* 
*         EXIT   (VDPT(0)) = VALIDATION POT POINTER.
* 
*                TO *CRR* IF ERROR CONDITION DECTECTED. 
*                TO *CRR1* IF NO ERROR CONDITION DETECTED.
* 
*         CALLS  ABT, CRR, CTP, ZFN.
  
  
 NWC      BSS    0           ENTRY
  
*         ENTRY FOR SECONDARY CONNECTION REQUEST. 
  
          SA1    A0+VDCT     SET SECONDARY APPLICATION
          MX6    1
          LX6    46-59
          BX6    X1+X6
          SA6    A1          REWRITE VDCT 
  
*         VERIFY THAT CONNECTION CAN BE ACCEPTED. 
  
*         ENTRY FOR PRIMARY CONNECTION REQUEST. 
  
 NWC0     BSS    0           ENTRY
          SA1    SHDF        CHECK SHUTDOWN FLAG
          NZ     X1,CRR      IF SHUTDOWN IN PROGRESS
          TB6    B0,VNTP
          LT     B2,B6,CRR   IF INCORRECT ACN 
          TB7    B0,VNTP,LWA
          GT     B2,B7,CRR   IF INCORRECT ACN 
          TA1    B2,VMST     GET VMST 
          NZ     X1,CRR      IF ALREADY ON-LINE 
          SA1    RCVB        CHECK DEVICE TYPE
          MX6    -3 
          AX1    13-0 
          BX6    -X6*X1 
          SB4    B0          SELECT ZERO FILL 
          NZ     X6,CRR      IF PASSIVE DEVICE
          SX0    B0          USE X0 AS A TEMPORARY VALIDATION FLAG
          SA1    RCVB+10D    CHECK FOR SECONDARY VALIDATION 
          SA3    =8HVALIDATE
          BX6    X3-X1
          NZ     X6,NWC0.1   IF NO VALIDATION 
          SX0    B1          SET FLAG = ONE TO INDICATE VALIDATION
          SA1    RCVB+11D    PUT SECONDARY FAMILY NAME IN *RCVB+4*
          BX6    X1 
          SA6    RCVB+4 
          SA1    A1+B1       PUT SECONDARY USER NUMBER IN *RCVB+5*
          BX6    X1 
          SA6    A6+B1
          SA1    RCVB+1 
          RJ     ZFN         ZERO FILL TERMINAL NAME
          SA6    A1 
 NWC0.1   SA1    RCVB+4 
          RJ     ZFN         ZERO FILL FAMILY NAME
          SA6    A1 
          SA1    A1+B1
          RJ     ZFN         ZERO FILL USER NAME
          SA6    A1 
  
*         INCREMENT ACTIVE USER COUNT.
  
          SA1    VANL        GET ACTIVE USER COUNT
          SX6    X1+B1       INCREMENT ACTIVE USER COUNT
          SA6    A1 
          SA2    LINB        GET MAXIMUM USER COUNT 
          IX2    X2-X6
          PL     X2,NWC1     IF NOT NEW MAXIMUM 
          SA6    A2+         STORE NEW MAXIMUM
 NWC1     RJ     UCP         UPDATE CONVERTED POINTER 
  
*         SAVE VALIDATION PARAMETERS IN POT.
  
          SB3    B0          INDICATE NO POT AVAILABLE
          BX6    X6-X6       CLEAR VCHT 
          SB4    VUNA-VFNA+1 SET BLOCK LENGTH 
          SA6    A0+VCHT
          SX6    RCVB+4      SET BLOCK FWA
          SB5    B0+         USE FIRST WORD OF POT
          RJ     CTP         COPY INPUT BLOCK TO POT
          SX7    B3          SET LOGIN POT POINTER
          LX7    48 
          SA7    A0+VDPT
          SA1    RCVB+2      SET LINE ACCESS LIMIT IN POT 
          MX6    -4 
          LX1    -12
          BX6    -X6*X1 
          SA6    B4+VLAL
          ZR     X0,NWC1.1   IF NO VALIDATION, SKIP PASSWORD
          SA1    RCVB+13D    PUT PASSWORD INTO PARAMETER POT
          MX6    42 
          BX6    X1*X6
          EQ     NWC1.2      CLEAR
  
 NWC1.1   SA1    RCVB+13D    PUT ZEROES IN PASSWORD FIELD 
          MX6    42 
          BX6    -X6*X1 
 NWC1.2   SA6    B4+VPWA     WRITE INTO PARAMETER POT 
          SA1    RCVB+1      GET TERMINAL NAME
          SA2    B4+VTRY     GET LRC
          MX6    42 
          BX1    X6*X1
          BX2    -X6*X2 
          BX6    X2+X1
          SA6    A2          SET TERMINAL NAME AND LRC IN POT 
  
*         SET TERMINAL CHARACTERISTICS IN MESSAGE STATUS TABLE. 
  
          SA1    RCVB        READ FIRST WORD OF MESSAGE 
          MX5    -8 
          BX7    X7-X7
          AX1    8           SHIFT DEVICE TYPE
          BX6    -X5*X1      SET DEVICE TYPE
          LX6    36 
          AX1    21-8        MASK BLOCK LIMIT (ABL) 
          MX5    -3 
          BX1    -X5*X1 
          LX1    30 
          BX6    X6+X1       MERGE
          SA1    RCVB+2      READ THIRD WORD OF MESSAGE 
          MX5    -11         GET POT STRING LENGTH
          SX7    60 
          AX1    1
          BX1    -X5*X1 
          IX1    X1/X7       CALCULATE NUMBER OF POTS 
          SX1    X1+B1
          SX7    VXPL 
          IX5    X1-X7
          MX2    -5 
          PL     X5,NWC2     IF GREATER THAN MAXIMUM
          SX7    VNPL 
          IX5    X1-X7
          NG     X5,NWC2     IF LESS THAN MINIMUM 
          SX7    X1 
 NWC2     BX7    -X2*X7      SET NUMBER OF POTS 
          LX7    18 
          SA1    RCVB+5      READ USER NAME 
          BX6    X6+X7
          SA2    RCVB+2      READ THIRD WORD OF MESSAGE 
          LX2    59-16       GET NETWORK TYPE 
          PL     X2,NWC2.1   IF NAM/CCP CONNECTION
          SX2    B1 
          LX2    58-0 
          BX6    X6+X2       STORE NETWORK TYPE 
 NWC2.1   TA6    B2,VMST     STORE VMST 
  
*         INITIALIZE TERMINAL TABLE.
  
          MX6    42 
          BX7    X6*X1       MASK OUT THE USER INDEX
          SA7    A0+VUIT     SET *VUIT* 
          SA1    RCVB+1      GET TERMINAL NAME
          MX2    42 
          BX7    X2*X1
          TA7    B2,VTNP     ENTER NEW TERMINAL NAME
          NZ     X0,NWC3     IF VALIDATE FLAG IS SET, MAKE A REENTRY
          EQ     CRR1        SEND SUPERVISORY MESSAGE 
  
 NWC3     SX5    ITA4$       SET *1TA* REQUEST
          EQ     PCS1        MAKE ENTRY 
 PCD      SPACE  4,10 
**        PCD - DRIVER *PCS* PROCESSING EXIT. 
* 
*         USED AS *PCS* EXIT IF DRIVER REENTRY IS REQUIRED. 
* 
*         ENTRY  (B7) = REENTRY ADDRESS IF NONZERO. 
*                (B3) = REENTRY POT POINTER.
*                (X7) = 12 BIT REENTRY PARAMETER. 
* 
*         CALLS  SRE. 
  
  
 PCD      BSS    0           ENTRY
          ZR     B7,PCSX     IF NO REENTRY REQUIRED 
          RJ     SRE         SET REENTRY
          EQ     PCSX        EXIT 
 RDY      SPACE  4,10 
**        RDY - ISSUE *READY* MESSAGE.
* 
*         ISSUES *READY* MESSAGE IF NOT IN BATCH SUBSYSTEM, 
*         ISSUES SLASH IF IN BATCH SUBSYSTEM. 
* 
*         ENTRY  (VSTT) BYTE 3 = 6/, 6/SUBSYSTEM. 
* 
*         EXIT   MESSAGE ISSUED.
* 
*         CALLS  ACD, PCD.
  
  
 RDY      BSS    0           ENTRY
          SA1    A0+VSTT     READ VSTT
          SX6    DMRDY       ASSUME *READY* MESSAGE 
          SB4    DMRDYL 
          MX7    -3 
          LX1    -12
          BX1    -X7*X1      EXTRACT CURRENT SUBSYSTEM
          SX1    X1-BATS     CHECK SUBSYSTEM
          NZ     X1,RDY1     IF NOT BATCH SUBSYSTEM 
          SX6    DMSL        SET *SLASH* MESSAGE
          SB4    DMSLL
 RDY1     RJ     ACD         ASSIGN MESSAGE 
          NZ     X6,PCSX     IF MESSAGE ISSUED
          SB7    RDY         SET REENTRY
          BX7    X7-X7
          EQ     PCD         REENTER
 ROI      SPACE  4,10 
**        ROI - RESUME OUTPUT INTERRUPT RESPONSE. 
* 
*         ISSUES *INTRES* ASYNCHRONOUS SUPERVISORY MESSAGE IN 
*         RESPONSE TO A USER INTERRUPT AND ISSUES AN *ROMARK* 
*         SYNCHRONOUS SUPERVISORY MESSAGE TO RESUME OUTPUT TO 
*         THE TERMINAL FOLLOWING A USER BREAK ONE OR TWO.  IF 
*         THE USER IS IN *TEXT* MODE AND BREAK IS IN PROGRESS,
*         *ETX* WILL BE CALLED TO EXIT FROM *TEXT* MODE.  IF THE
*         TERMINAL LOGOUT FLAG IS SET, IT IS ASSUMED THAT HANG
*         UP PROCESSING HAS BEEN INTERRUPTED AND MUST BE RESUMED. 
* 
*         ENTRY  (B3) = ZERO. 
* 
*         EXIT   (VMST) BREAK-IN-PROGRESS BIT CLEARED.
*                *ETX* DRIVER REQUEST SENT, IF IN TEXT MODE.
*                TO *CNB* IF LOGOUT FLAG IS SET.
* 
*         CALLS  ASV, ETX, SAB, SCS.
  
  
 ROI      BSS    0           ENTRY
          SX7    INTRES      ISSUE *INTRES* SUPERVISORY MESSAGE 
          SB4    B1          TEXT LENGTH = 1
          BX6    X6-X6       INDICATE DEFAULT HEADER
          RJ     ASV         ASSIGN ASYNCHRONOUS MESSAGE
          SB3    B0 
          NZ     X6,ROI1     IF MESSAGE ASSIGNED
          SB7    ROI         SET REENTRY
          EQ     PCD         REENTER
  
 ROI1     SA2    NBSY        CHECK IF NETWORK BUSY
          NZ     X2,ROI2     IF NETWORK BUSY
          RJ     CBL         CHECK DOWNLINE BLOCK LIMIT 
          NZ     X6,ROI2     IF AT BLOCK LIMIT
          SB2    -B2         SEND RESUME OUTPUT SUPERVISORY MESSAGE 
          SX6    HDRS3       SET UP ASYNCHRONOUS HEADER 
          SX7    ROMARK 
          RJ     SCS         ASSIGN SYNCHRONOUS MESSAGE 
          SB3    B0 
          EQ     ROI3        CONTINUE 
  
 ROI2     SB7    ROI1        SET REENTRY ADDRESS
          EQ     PCD         REENTER
  
*         HANG UP PHONE IF LOGOUT INTERRUPTED.
  
 ROI3     RJ     IBC         INCREMENT DOWNLINE BLOCK COUNT 
          TA1    B2,VMST     READ VMST ENTRY
          SA2    A0+VDCT     READ VDCT
          SA4    A0+VSTT     READ VSTT
          LX1    59-57
          LX2    59-50
          MX6    -59
          LX4    59-48       CHECK LOGOUT FLAG
          BX3    X1*X2       CHECK BREAK AND TEXT MODE BITS 
          BX6    -X6*X1      CLEAR BREAK IN PROGRESS BIT
          LX6    57-59
          SB3    B0 
          SA6    A1+         REWRITE VMST ENTRY 
          NG     X4,ROI5     IF LOGOUT FLAG SET 
          PL     X3,ROI4     IF NOT BOTH BREAK AND TEXT MODE
  
*         EXIT FROM *TEXT* MODE.
  
          RJ     ETX         EXIT *TEXT* MODE 
          EQ     PCSX        EXIT 
  
 ROI4     RJ     SAB         SET TERMINAL ACTIVE
          EQ     PCSX        EXIT 
  
*         WAIT FOR THE ACKNOWLEDGMENT OF THE *BI/MARK*
*         MESSAGE BEFORE CONTINUING WITH LOGOUT.
  
 ROI5     RJ     CBL         CHECK BLOCK LIMIT
          SB7    ROI5        SET REENTRY ADDRESS
          NZ     X3,PCD      IF BLOCKS OUTSTANDING
          EQ     CNB         CONTINUE WITH LOGOUT 
 SCP      SPACE  4,20 
**        SCF - PROCESS SYSTEM CONTROL POINT FAILURE. 
* 
*         SETS UP DAYFILE MESSAGE AND INITIATES IMMEDIATE SHUT- 
*         DOWN.  IT IS ASSUMED THAT, UPON ENTRY, THE CONTENTS 
*         OF REGISTER B1 HAVE BEEN DESTROYED BY AN *AIP* CALL.
* 
*         EXIT   TO *SIS*.
*                (B1) = 1.
*                (X6) = ADDRESS OF DAYFILE MESSAGE. 
  
  
 SCF      BSS    0           ENTRY
          SB1    1           RESTORE CONSTANT B1=1
          SX6    =C* SYSTEM CONTROL POINT FAILURE.* 
          EQ     SIS         SET IMMEDIATE SHUTDOWN 
 SDU      SPACE  4,10 
**        SDU - SUSPEND DRIVER FOR USER BREAK.
* 
*         SETS BREAK-IN-PROGRESS BIT IN *VMST* AND THEN JUMPS TO
*         USER BREAK PROCESSING.  X7 IS SET TO ZERO, SIGNIFYING AN
*         EXECUTIVE INITIATED USER BREAK. 
* 
*         EXIT   TO ROUTINE *BRK*.
*                (X7) = 0.
  
  
 SDU      BSS    0           ENTRY
          TA1    B2,VMST     SET BREAK-IN-PROGRESS
          SX6    B1 
          LX6    57-0 
          BX6    X1+X6
          SA6    A1 
          SX7    B0+
          SB7    BRK8 
          EQ     PCD         REENTER IN USER BREAK PROCESSING.
 SCR      SPACE  4,10 
**        SCR - SET CONNECTION RESET BIT. 
* 
*         SET CONNECTION RESET RECEIVED BIT IN *VMST* WHEN AN UPLINE
*         FC/RST SUPERVISORY MESSAGE IS RECEIVED IN RESPONSE TO A 
*         DOWNLINE FC/BRK SUPERVISORY MESSAGE.
* 
*         EXIT   (VMST) = CONNECTION RESET RECEIVED BIT SET 
* 
*         USES   A - 1, 6.
*                X - 1, 6.
  
  
 SCR      BSS    0           ENTRY
          TA1    B2,VMST     READ *VMST*
          MX6    1           SET CONNECTION RESET RECEIVED BIT
          LX6    47-59
          BX6    X1+X6
          SA6    A1          REWRITE *VMST* 
          EQ     PCSX        EXIT 
 SIS      SPACE  4,30 
**        SIS - SET IMMEDIATE SHUTDOWN. 
* 
*         PERFORMS THE FOLLOWING FUNCTIONS TO INITIATE AN 
*         IMMEDIATE SHUTDOWN- 
* 
*         (1)    ISSUES REASON FOR SHUTDOWN DAYFILE MESSAGE.
*         (2)    SETS IMMEDIATE SHUTDOWN STATUS IF NOT ALREADY SET. 
*         (3)    EXITS FROM NETWORK DRIVER.  SHUTDOWN WILL
*                BE PROCESSED ON THE NEXT DRIVER CYCLE. 
* 
*         ENTRY  (X6)   = DAYFILE MESSAGE ADDRESS.
*                (SHDF) = CURRENT SHUTDOWN STATUS.
* 
*         EXIT   TO *NDRX*. 
*                (SHDF) = SET FOR IMMEDIATE SHUTDOWN. 
* 
*         USES   X - 1, 6, 7. 
*                A - 1, 6, 7. 
* 
*         CALLS  IDM. 
  
  
 SIS      BSS    0           ENTRY
          RJ     IDM         ISSUE DAYFILE MESSAGE
          SA1    SHDF        GET CURRENT SHUTDOWN FLAG
          NG     X1,NDRX     IF IMMEDIATE SHUTDOWN IN PROGRESS
          MX6    1
          SA6    A1          SET IMMEDIATE SHUTDOWN 
          EQ     NDRX        EXIT FROM NETWORK DRIVER 
          TITLE  NETWORK INTERFACE ROUTINES.
          SPACE  4,10 
**        THE NETWORK INTERFACE ROUTINES CONSIST OF ALL ROUTINES
*         WHICH EXECUTE NETWORK CALLS.  ANY NETWORK CALL MACRO
*         USED BY A NETWORK INTERFACE ROUTINE REQUIRES THE COR- 
*         RESPONDING AIP LINKAGE IN ORDER TO LINK TO ITS LOADED 
*         RELOCATABLE AIP SUBROUTINE ENTRY POINT. 
 CKP      SPACE  4,40 
**        CKP - CHECK NETWORK PARALLEL MODE STATUS. 
* 
*         CHECKS NETWORK PARALLEL MODE STATUS AND POST PRO- 
*         CESSES COMPLETED INPUT OR OUTPUT REQUESTS.  IN THE
*         CASE OF AN INPUT REQUEST, *CKP* RETURNS THE MESSAGE 
*         HEADER AND BLOCK TYPE; IN THE CASE OF AN OUTPUT RE- 
*         QUEST, *CKP* CLEARS THE OUTPUT STATUS POINTERS AND
*         DROPS ANY OUTPUT POTS HELD. 
* 
*         IF NAM IS NO LONGER PRESENT, *CKP* WILL CALL *SCF*
*         TO SET IMMEDIATE SHUTDOWN AND EXIT FROM THE NETWORK 
*         DRIVER. 
* 
*         ENTRY  (IBSY) = INPUT REQUEST HEADER ADDRESS. 
*                (NGLN) = .GE. 4 IF INPUT REQUESTED FOR SPECIFIC
*                         TERMINAL. 
*                (OBSY) = NONZERO IF OUTPUT REQUEST.
*                (OTPP) = OUTPUT POT POINTER IF NONZERO.
*                (NCAS) = (A0) TO BE RESTORED.
*                (NCBS) = (B2) TO BE RESTORED.
*                (SSCR) = NEGATIVE IF SCP FAILURE.
* 
*         EXIT   (NBSY) = ZERO IF NETWORK CALL COMPLETE 
*                (PCRX) = ZERO IF NULL INPUT BLOCK RECEIVED 
*                         NOT IN CUNJUNCTION WITH A SPECIFIC
*                         TERMINAL. 
*                (SUPA) = SET IF SUPERVISORY MESSAGE AVAILABLE. 
*                (X6)   = ZERO IF CALL COMPLETE.
*                (A0)   = RESTORED. 
*                (B1)   = 1.
*                (B2)   = RESTORED. 
* 
*                IF OUTPUT REQUEST COMPLETE:  
*                (OBSY) = 0.
*                (OTPP) = 0, POTS DROPPED.
* 
*                IF INPUT REQUEST COMPLETE: 
*                (X1)   = MESSAGE HEADER. 
*                (X2)   = MESSAGE BLOCK TYPE, RIGHT JUSTIFIED.
*                       = 0 IF NULL BLOCK.
*                (IBSY) = 0 IF NULL BLOCK.
* 
*                TO SCF IF NAM FAILURE: 
*                (SHDF) = COMPLETE SHUTDOWN.
* 
*         CALLS  DPT, SCF.
* 
*         MACROS NETCHEK. 
  
  
 CKP      SUBR               ENTRY/EXIT 
          SA1    VSHD        CHECK SCP STATUS 
          NG     X1,SCF      IF SCP FAILURE 
          SA2    NSUP 
          NG     X2,CKP1     IF CHECK UNNECESSARY 
          NETCHEK            CHECK NETWORK STATUS 
 CKP1     SA1    NSUP        READ STATUS RESPONSE WORD
          SA3    NCAS        RESTORE (A0) 
          SA4    NCBS        RESTORE (B2) 
          SB1    1           RESET CONSTANT B1=1
          SA0    X3+
          SB2    X4+
          BX2    X1 
          PL     X2,CKP4     IF OPERATION NOT COMPLETE
          LX2    59-57
          PL     X2,SCF      IF NAM NO LONGER PRESENT 
          SX7    B1 
          AX1    55-0        SHIFT SUPERVISORY MESSAGE BIT
          BX7    X7*X1       MASK SUPERVISORY MESSAGE BIT 
          SA1    OBSY        GET OUTPUT POINTER 
          BX6    X6-X6
          SA7    SUPA        SET SUPERVISORY MESSAGE AVAILABLE
          SA6    NBSY        CLEAR BUSY STATUS
  
*         POSTPROCESS OUTPUT OPERATION. 
  
          ZR     X1,CKP2     IF NOT OUTPUT OPERATION
          SA2    OTPP        READ POT POINTER 
          SA6    A1          CLEAR OUTPUT BUSY STATUS 
          ZR     X2,CKPX     IF NO OUTPUT POTS, RETURN
          SB3    X2          DROP OUTPUT POT CHAIN
          SB4    B0 
          RJ     DPT
          SX6    B0+         CLEAR OUTPUT POT POINTER 
          SA6    OTPP 
          EQ     CKPX        RETURN 
  
*         POSTPROCESS INPUT OPERATION.
  
 CKP2     SA3    IBSY        GET HEADER ADDRESS 
          ZR     X3,CKPX     IF NOT INPUT OPERATION, RETURN 
          SA2    X3+         READ HEADER
          AX2    54          SHIFT BLOCK TYPE 
          NZ     X2,CKPX     IF NOT NULL BLOCK
          SA1    NGLN        GET REQUEST LIST/ACN NUMBER
          SA6    A3          CLEAR INPUT STATUS 
          AX1    2
          NZ     X1,CKPX     IF FOR SPECIFIC ACN
          SA6    PCRX        CLEAR PREVIOUS CYCLE FORCED EXIT 
          EQ     CKPX        RETURN 
  
*         CHECK INCOMPLETE STATUS.
  
 CKP4     LX1    59-57       CHECK FOR NAM NO LONGER PRESENT
          SX6    =C* NETWORK CONNECTION LOST.*
          PL     X1,SIS      IF NAM NO LONGER PRESENT 
          SX6    B1+
          SA6    NBSY        SET BUSY STATUS
          EQ     CKPX        RETURN 
 GLM      SPACE  4,30 
**        GLM - GET DATA LIST MESSAGE.
* 
*         ISSUES *NETGTLQ* CALL TO INPUT DATA FROM NETWORK
*         UPON SPECIFIED APPLICATION LIST.
* 
*         ENTRY  (X2) = APPLICATION LIST NUMBER (ALN).
* 
*         EXIT   (IBSY) = INPUT REQUEST HEADER ADDRESS. 
*                (IBSY) = ZERO IF NULL BLOCK RECEIVED.
*                (NGLN) = APPLICATION LIST NUMBER (ALN).
*                (RCVH) = MESSAGE HEADER. 
*                (RCVB) = MESSAGE BUFFER. 
*                (X6)   = NONZERO IF NAM BUSY.
*                (X1)   = MESSAGE HEADER. 
*                (X2)   = BLOCK TYPE, RIGHT JUSTIFIED.
*                       = 0 IF NULL BLOCK.
* 
*         USES   (NCPA) = APPLICATION LIST NUMBER.
* 
*         CALLS  CKP, SCF.
* 
*         MACROS NETGTLQ. 
  
  
 GLM      SUBR               ENTRY/EXIT 
          SX6    RCVH        SET INPUT BUSY 
          SX7    X2+         SET APPLICATIONS LIST NUMBER 
          SA6    IBSY 
          SA1    VSHD        CHECK SCP STATUS 
          SA7    NCPA 
          NG     X1,SCF      IF SCP FAILURE 
          SA7    NGLN 
          NETGTLQ NCPA,RCVH,RCVB,GLMA,GTMA  ISSUE NETWORK CALL
          RJ     CKP         CHECK PARALLEL STATUS
          ZR     X6,GLMX     IF CALL COMPLETE 
  
*         INCREMENT NETGET BUSY COUNT.
  
          SA1    NGBC        GET BUSY COUNT 
          SX7    B1          INCREMENT COUNT
          IX7    X7+X1
          SA7    A1+
          EQ     GLMX        RETURN 
  
 GLMA     CON    RCVL        RECEIVE BUFFER LENGTH
 GTM      SPACE  4,20 
**        GTM - GET MESSAGE.
* 
*         REQUESTS MESSAGE ON SPECIFIED ACN.
* 
*         ENTRY  (B2) = TERMINAL NUMBER (ACN).
* 
*         EXIT   (IBSY) = INPUT REQUEST HEADER ADDRESS. 
*                (NBSY) = SET IF NAM BUSY.
*                (NGLN) = TERMINAL NUMBER (ACN).
*                (RCVH) = MESSAGE HEADER. 
*                (RCVB) = MESSAGE BUFFER. 
*                (X1)   = MESSAGE HEADER. 
*                (X2)   = BLOCK TYPE, RIGHT JUSTIFIED.
*                       = 0 IF NULL BLOCK.
* 
*         USES   (RCVH) = RECEIVE HEADER. 
*                (RCVB) = RECEIVE BUFFER. 
*                (NCPA) = ACN (TERMINAL NUMBER).
* 
*         CALLS  CKP, SCF.
* 
*         MACROS NETGETQ. 
  
  
 GTM      SUBR               ENTRY/EXIT 
          SX6    B2          SAVE (B2)
          SX7    A0          SAVE (A0)
          SA6    NCBS 
          SA7    NCAS 
          SA1    VSHD        CHECK SCP STATUS 
          SX7    RCVH        SET INPUT BUSY 
          SA6    NCPA        SET ACN
          NG     X1,SCF      IF SYSTEM CONTROL POINT FAILURE
          SA7    IBSY 
          SA6    NGLN 
          NETGETQ NCPA,RCVH,RCVB,GLMA,GTMA  ISSUE NETWORK CALL
          RJ     CKP         CHECK PARALLEL STATUS
          ZR     X6,GTMX     IF CALL COMPLETE, RETURN 
  
*         INCREMENT NETGET BUSY COUNT.
  
          SA1    NGBC        GET BUSY COUNT 
          SX7    B1          INCREMENT COUNT
          IX7    X7+X1
          SA7    A1+
          EQ     GTMX        RETURN 
  
 GTMA     VFD    58/0,1/0,1/0  *NETGTLQ/NETGETQ* PROCESSING OPTIONS 
 NOF      SPACE  4,10 
**        NOF - DISCONNECT FROM NETWORK ACCESS SUBSYSTEM. 
* 
*         ISSUE NETWORK *NETOFF* REQUEST. 
* 
*         ENTRY  (NTON) = ZERO IF NOT CONNECTED TO NETWORK. 
*                (ATMC) = MESSAGE COUNT USED TO CONTROL 
*                         PROCESSING OF TRACE OUTPUT FILE.
*                       = ZERO, IF TRACE IS NOT SELECTED. 
*                       = NEGATIVE, IF PROCESS TRACE FILE AT
*                         IAF TERMINATION ONLY. 
* 
*         MACROS NETOFF, NETREL.
  
  
 NOF      SUBR               ENTRY/EXIT 
          SA2    NTON        CHECK NETON STATUS 
          ZR     X2,NOFX     IF NOT CONNECTED 
          NETOFF             ISSUE *NETOFF* CALL
          SA1    ATMC        GET TRACE MESSAGE COUNT
          SB1    1           RESET CONSTANT B1=1
          ZR     X1,NOFX     IF TRACE IS NOT SELECTED 
          NG     X1,NOFX     IF NO TRACE FILE END PROCESSING
          NETREL JPTO,MXLT,RWTF  COMPLETE PROCESSING OF TRACE FILE
          SB1    1
          EQ     NOFX        RETURN 
 NON      SPACE  4,30 
**        NON - CONNECT TO NETWORK ACCESS SUBSYSTEM.
* 
*         SET PARALLEL MODE AND ISSUE *NETON* REQUEST.
* 
*         ENTRY  (VNTP) = NETWORK TERMINAL POINTER. 
*                (STIM) = REAL TIME CLOCK (SECONDS).
*                (NFRT) = REAL TIME (SECONDS) OF LAST NETON 
*                         ATTEMPT OR OF INITIAL LOAD. 
*                (NONB) = NONZERO IF REQUEST ACTIVE.
* 
*         EXIT   (NTON) = ON IF SUCCESSFUL *NETON*. 
*                (NONB) = NONZERO IF REQUEST ACTIVE.
*                PARALLEL PROCESSING MODE SET.
*                (TMSI) = FIRST NETWORK TERMINAL NUMBER.
*                (HACN) = FIRST NETWORK TERMINAL NUMBER.
*                (IBSY) = 0.
*                (NBSY) = 0.
*                (SHDF) = 0.
*                (PCRX) = 0.
*                (SUPA) = SET IF SUPERVISORY MESSAGE AVAILABLE. 
* 
*         USES   (NCPA) = LOWER ACN LIMIT.
*                (NCPB) = UPPER ACN LIMIT.
*                (NCPC) = STATUS REPLY WORD.
* 
*         CALLS  ABT, IAT, IDM. 
* 
*         MACROS NETCHEK, NETON, NETSETP. 
  
  
 NON      SUBR               ENTRY/EXIT 
  
*         TEST FOR INCOMPLETED PREVIOUS NETON REQUEST AND CHECK 
*         IF DELAY TIME HAS ELAPSED SINCE COMPLETED REQUEST.
  
          SA3    NONB        TEST IF REQUEST STILL ACTIVE 
          SA1    STIM        GET CURRENT REAL-TIME CLOCK
          NZ     X3,NON1     IF REQUEST STILL ACTIVE
          SA2    NFRT        TIME OF LAST NETON ATTEMPT 
          SX6    NODT        DELAY TIME 
          BX7    X1 
          IX2    X1-X2       ELAPSED TIME 
          IX2    X2-X6
          NG     X2,NONX     IF DELAY TIME NOT ELAPSED, RETURN
          SA7    A2          RESET TIME OF NETON
  
*         SET ACN LIMIT CALL PARAMETERS.
  
          TX6    0,VNTP      SET LOWER ACN LIMIT
          TX7    0,VNTP,LWA  SET UPPER ACN LIMIT
          SA6    NCPA        SET NETON CALL PARAMETERS
          SA7    NCPB 
  
*         REQUEST CONNECTION TO NETWORK.
  
          RJ     IAT         INITIALIZE AIP TRACE OUTPUT FILE 
          NETSETP =0         SELECT PARALLEL MODE 
          NETON  =3HIAF,NSUP,NCPC,NCPA,NCPB 
          SX7    1           FLAG REQUEST ACTIVE
          SA7    NONB 
  
*         CHECK STATUS OF NETON REQUEST.
  
 NON1     NETCHEK            CHECK PARALLEL STATUS
          SA1    NSUP        READ RESPONSE
          SB1    1           RESET CONSTANT B1=1
          PL     X1,NONX     IF CALL NOT COMPLETED
          SX7    B0+         CLEAR REQUEST ACTIVE FLAG
          SA2    NCPC        READ NETON STATUS REPLY
          SA7    NONB 
          NZ     X2,NON2     IF CONNECTION NOT MADE 
          SX6    =C* NETWORK CONNECTED.*
          RJ     IDM         ISSUE DAYFILE MESSAGE
          NETFUNC =2,AIPB    SELECT AIP BUFFERING OF INPUT
          SB1    1           RESET CONSTANT B1=1
          NETPUTS HDRS1,DCTRU,NCZP  SEND *DC/SFTR* TO NAM 
          SB1    1           RESET CONSTANT B1=1
  
*         INITIALIZE CONTROL FLAGS AND POINTERS.
  
          SX6    B1          SET NETON STATUS 
          BX7    X7-X7
          SA6    NTON 
          AX1    55-0        SET SUPERVISORY MESSAGE STATUS 
          BX6    X6*X1
          SA6    SUPA 
          SA7    IBSY        CLEAR STATUS WORDS 
          SA7    NBSY 
          SA7    NONA 
          SA7    OBSY 
          SA7    OTPP 
          SA7    PCRX 
          TX6    B0,VNTP     INITIALIZE MANAGER SCAN
          SA6    TMSI 
          SA6    HACN 
          EQ     NONX        RETURN 
  
*         CHECK NETWORK NOT-CONNECTED RESPONSE. 
  
 NON2     SB7    X2-1        CHECK REPLY
          NZ     B7,NON4     IF NOT *UNAVAILABLE* STATUS
          SA1    NONA        CHECK LAST MESSAGE ADDRESS 
          SX6    =C* WAITING FOR NETWORK.*
          IX1    X1-X6
          ZR     X1,NONX     IF MESSAGE ISSUED, RETURN
          SA6    A1          SET MESSAGE ADDRESS
          RJ     IDM         ISSUE MESSAGE
          EQ     NONX        RETURN 
  
*         PROCESS REJECT. 
  
 NON4     SA1    NONA        GET LAST MESSAGE ADDRESS 
          SX6    =C* NETON REJECT.* 
          IX1    X1-X6
          ZR     X1,NONX     IF MESSAGE ISSUED, RETURN
          SA6    A1          SET MESSAGE ADDRESS
          RJ     IDM         ISSUE DAYFILE MESSAGE
          EQ     NONX        EXIT 
  
  
 NONA     CON    0           MESSAGE-ISSUED ADDRESS 
 NONB     CON    0           REQUEST ACTIVE FLAG
 RTF      SPACE  4,15 
**        RTF - RELEASE NETWORK TRACE FILE. 
* 
*         ENTRY  (ATMC) = MESSAGE COUNT USED TO CONTROL 
*                         PROCESSING OF TRACE OUTPUT FILE.
*                       = ZERO, IF TRACE IS NOT SELECTED. 
*                       = NEGATIVE, IF PROCESS TRACE FILE AT
*                         IAF TERMINATION ONLY. 
* 
*         EXIT   (X6) = NONZERO, IF NAM BUSY. 
* 
*         USES   X - 1, 2, 3, 4, 6. 
*                A - 1, 2.
* 
*         CALLS  CKP. 
* 
*         MACROS NETREL.
  
  
 RTF      SUBR               ENTRY/EXIT 
          SA1    ATMC        CHECK TRACE THRESHOLD
          MX3    -30
          BX6    X6-X6
          ZR     X1,RTFX     IF TRACE IS NOT SELECTED 
          NG     X1,RTFX     IF DO NOT PROCESS TRACE FILE 
          SA2    NSUP        GET MESSAGE COUNT
          BX2    -X3*X2 
          IX4    X2-X1
          NG     X4,RTFX     IF NOT TIME TO PROCESS TRACE FILE
          NETREL JPTO,MXLT,RWTF  PROCESS TRACE FILE 
          RJ     CKP         CHECK NAM STATUS 
          EQ     RTFX        RETURN 
 SCS      SPACE  4,30 
**        SCS - SEND CANNED SUPERVISORY MESSAGE.
* 
*         TRANSMITS IN-CORE MESSAGE TO THE NETWORK.  THE MESSAGE
*         IS TRANSMITTED FROM CORE AS-IS AFTER THE ACN IS PLACED
*         IN THE MESSAGE.  ALTHOUGH PRIMARILY INTENDED FOR SUPER- 
*         VISORY MESSAGES, MAY BE USED FOR TRANSMISSION OF ANY
*         IN-CORE MESSAGE.
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
*                (B2) = ACN TO BE PLACED IN MESSAGE:  
*                     = POSITIVE, THIS IS AN ASYNCHRONOUS 
*                       SUPERVISORY MESSAGE, SO THE ACN 
*                       IS PLACED IN THE FIRST WORD OF THE
*                       MESSAGE TEXT, BITS 35-24. 
*                     = NEGATIVE, THIS IS A SYNCHRONOUS 
*                       SUPERVISORY MESSAGE, SO THE ACN 
*                       IS PLACED IN BITS 53-42 OF THE
*                       MESSAGE HEADER. 
*                (X6) = ADDRESS OF HEADER:  
*                     = ZERO, USE DEFAULT HEADER. 
*                (X7) = ADDRESS OF TEXT.
* 
*         EXIT   (X6)   = NONZERO IF NAM BUSY.
*                (OBSY) = NONZERO IF NAM BUSY.
* 
*         USES   (NCPA) = ADDRESS OF HEADER.
*                (NCPB) = ADDRESS OF TEXT.
*                (NCAS) = SAVE (A0).
*                (NCBS) = SAVE (B2).
* 
*         CALLS  CKP, SCF.
* 
*         MACROS NETPUTS. 
  
  
 SCS      SUBR               ENTRY/EXIT 
          NZ     X6,SCS1     IF HEADER PROVIDED 
          SX6    HDRS1       USE DEFAULT HEADER 
 SCS1     SA6    NCPA        STORE HEADER ADDRESS 
          SA7    NCPB        STORE TEXT ADDRESS 
          SB6    24          SET TEXT ACN SHIFT COUNT 
          PL     B2,SCS2     IF ACN IN TEXT WORD 1
          SB2    -B2
          SX7    X6          SET ADDRESS FOR ACN IN HEADER
          SB6    42          SET HEADER ACN SHIFT COUNT 
 SCS2     SA1    X7+         READ WORD FOR ACN
          MX4    -12
          SX6    B2 
          LX4    X4,B6       SHIFT MASK 
          LX6    X6,B6       SHIFT ACN
          BX1    X4*X1       INSERT ACN 
          BX6    X1+X6
          SA6    A1          REWRITE WORD WITH ACN
  
*         TRANSMIT MESSAGE TO NETWORK.
  
          SX6    B1+         SET OUTPUT BUSY - NO POT POINTER 
          BX7    X7-X7
          SA6    OBSY 
          SA7    OTPP 
          SX6    A0+         SAVE (A0)
          SX7    B2+         SAVE (B2)
          SA6    NCAS 
          SA1    VSHD        CHECK SCP STATUS 
          SA7    NCBS 
          NG     X1,SCF      IF SCP FAILURE 
          SX6    NCZP 
          SA6    NCPC        CLEAR PROCESSING OPTIONS 
          NETPUTS (LIST=NCPA)  SEND MESSAGE TO NAM
          RJ     CKP         CHECK STATUS 
          ZR     X6,SCSX     IF NAM NOT BUSY, RETURN
  
*         INCREMENT NETPUT BUSY COUNT.
  
          SA1    NPBC        GET COUNTER
          SX7    B1          INCREMENT COUNTER
          IX7    X7+X1
          SA7    A1+
          EQ     SCSX        RETURN 
 SSM      SPACE  4,30 
**        SSM - SEND SUPERVISORY MESSAGE. 
* 
*         SEND MESSAGE CONSISTING OF SINGLE POT TO NETWORK. 
*         ALTHOUGH PRIMARILY INTENDED FOR SUPERVISORY MES-
*         SAGES, WHICH NEVER EXCEED ONE POT IN LENGTH, MAY
*         BE USED FOR TRANSMISSION OF ANY SINGLE POT MESSAGE. 
* 
*         ENTRY  (X1) = MESSAGE POT POINTER.
* 
*         EXIT   POT DROPPED IF NAM COMPLETE. 
*                (NBSY) = SET IF NAM BUSY.
*                (OTPP) = POT POINTER IF NAM BUSY.
*                (OBSY) = SET IF NAM BUSY.
*                (X6)   = (NBSY). 
* 
*         USES   (NCPA) = HEADER ADDRESS. 
*                (NCPB) = TEXT ADDRESS. 
*                (NCAS) = SAVE (A0).
*                (NCBS) = SAVE (B2).
* 
*         CALLS  CKP, SCF.
* 
*         MACROS NETPUTS. 
  
  
 SSM      SUBR               ENTRY/EXIT 
          BX7    X1          SET BUSY POINTERS
          SA7    OBSY 
          LX1    3
          SA7    OTPP 
          TX7    X1,VBMP     SET HEADER ADDRESS 
          SA7    NCPA 
          SX7    X7+B1       SET TEXT ADDRESS 
          SA7    A7+B1
          SX6    A0          SAVE (A0)
          SX7    B2          SAVE (B2)
          SA6    NCAS 
          SA1    VSHD        CHECK SCP STATUS 
          SA7    NCBS 
          NG     X1,SCF      IF SCP FAILURE 
          SX6    NCZP 
          SA6    NCPC        CLEAR PROCESSING OPTIONS 
          NETPUTS (LIST=NCPA)  SEND MESSAGE TO NAM
          RJ     CKP         GET STATUS 
          ZR     X6,SSMX     IF NAM NOT BUSY
  
*         INCREMENT NETPUT BUSY COUNT.
  
          SA1    NPBC        GET COUNTER
          SX7    B1          INCREMENT COUNT
          IX7    X7+X1
          SA7    A1+
          EQ     SSMX        RETURN 
          TITLE  NETWORK AIP LINKAGES.
**        NETWORK AIP LINKAGES. 
* 
*         THE NETWORK AIP CALL LINKAGES LINK NETWORK AIP
*         CALLS TO THE ACTUAL, LOADED ENTRY POINTS OF THE 
*         RELOCATABLE AIP SUBROUTINES.  EACH LINKAGE IS REF-
*         ERENCED BY THE NAME OF THE AIP ENTRY POINT TO WHICH 
*         IT LINKS.  A CALL TO A LINKAGE WILL RESET THE AD- 
*         DRESS FIELD OF THE CALLING *RJ* INSTRUCTION TO THE
*         ENTRY POINT OF THE CORRESPONDING AIP SUBROUTINE AND 
*         WILL RE-EXECUTE THE *RJ* TO THE NEW ADDRESS.  THE 
*         AIP RELOCATABLE SUBROUTINE ENTRY POINT ADDRESSES ARE
*         PRESET DURING INITIALIZATION BY THE INITIALIZER OVER- 
*         LAY ROUTINE *LNA* AND THE ENTRY POINTS ARE LINKED 
*         USING THE *TLCK* OR *TLKT* TABLE AND THE
*         *LDREQ PASSLOC* ENTRIES.
* 
*         THE *EXT* PSEUDO-OP, USED WITHIN MOST NETWORK CALL
*         MACROS, MUST BE DISABLED IN ORDER TO PREVENT ASSEMBLY 
*         ERRORS. 
* 
*         THE FOLLOWING DOCUMENTATION IS COMMON TO ALL NETWORK AIP
*         LINKAGES: 
* 
*         ENTRY:  
* 
* ADR     RJ     NAM
*          .
*          .
*          .
* NAM     PS     0           ENTRY
*         SA4    NAM         READ ENTRY POINT 
*         SX5    AIP         SET AIP ENTRY POINT ADDRESS
*         EQ     XRJ         TRANSFER RETURN JUMP 
* 
*                   AIP = AIP ENTRY POINT ADDRESS.  SET BY INI- 
*                         TIALIZATION ROUTINE *LNA*.
*                   ADR = ADDRESS OF *RJ* INSTRUCTION (MUST BE UPPER).
*                   NAM = NAME OF AIP ENTRY POINT (I.E., LINKAGE).
* 
*         EXIT   *RJ* ADDRESS FIELD MODIFIED. 
*                *RJ* RE-EXECUTED.
* 
*         USES   A - 4, 5.
*                X - 4, 5.
* 
*         CALLS  XRJ. 
  
  
**        GENERATE NETWORK AIP CALL LINKAGES USING THE *NETLINK*
*         MACRO:  
  
          NETLINK NETCHEK 
          NETLINK NETFUNC 
          NETLINK NETGETQ 
          NETLINK NETGTLQ 
          NETLINK NETOFF
          NETLINK NETON 
          NETLINK NETPUTS 
          NETLINK NETREL
          NETLINK NETSETP 
          TITLE  GENERAL SUBROUTINES. 
 GENERAL  SPACE  4,10 
**        GENERAL SUBROUTINES.
* 
*         IF THE REGISTER USAGE IS NOT SPECIFIED IN THE HEADER
*         INFORMATION, IT SHOULD BE ASSUMED THAT THE SUBROUTINE 
*         USES ALL REGISTERS EXCEPT THOSE SPECIFIED BELOW:  
* 
*                A - 0. 
*                X - 0. 
*                B - 1, 2.
 ACD      SPACE  4,20 
**        ACD - ASSIGN CANNED DATA MESSAGE. 
* 
*         COPY PREPARED IN-CORE MESSAGE TO POT(S) AND ASSIGN
*         TO TERMINAL TABLE.
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                (B3) = POT POINTER IF POT AVAILABLE. 
*                     = 0 IF ACD TO GET POTS FOR MESSAGE. 
*                (B4) = MESSAGE LENGTH, INCLUDING HEADER, IN CM WORDS.
*                (X6) = FWA OF MESSAGE. 
* 
*         EXIT   (X6) = NONZERO IF MESSAGE ASSIGNED.
*                     = ZERO IF MESSAGE COULD NOT BE ASSIGNED.  CALLER
*                       MUST TRY AGAIN LATER. 
* 
*         CALLS  ANM, CFL, CTP. 
  
  
 ACD      SUBR               ENTRY/EXIT 
  
*         GET REQUIRED POTS FOR MESSAGE.
  
          SX5    X6+         SAVE (X6)
          NZ     B3,ACD2     IF POTS PROVIDED 
          RJ     CFL         CHECK POT SUPPLY 
          SX6    B0+
          NG     X2,ACDX     IF LOW POT SUPPLY, RETURN
 ACD2     SX6    X5          COPY MESSAGE TO POT(S) 
          SB5    B1          SKIP FIRST WORD IN POT 
          RJ     CTP
          ZR     X6,ACDX     IF INSUFFICIENT POTS AVAILABLE 
          LX6    24          SET POT COUNT
          SA6    B4 
          SX7    B3+         SET MESSAGE POT POINTER
          RJ     ANM         ASSIGN MESSAGE 
          SX6    B1          SET EXIT STATUS COMPLETE 
          EQ     ACDX        RETURN 
 ADB      SPACE  4,30 
**        ADB - ASSEMBLE DISPLAY CODED BUFFER.
* 
*         ASSEMBLES DISPLAY CODED STRING BUFFER INTO POTS.
*         THE STRING BUFFER CONSISTS OF 6 BIT DISPLAY CODE
*         OR 12 BIT EXTENDED DISPLAY CODE CHARACTERS, RIGHT 
*         JUSTIFIED, AND IS TERMINATED BY A NEGATIVE WORD.
*         A CHARACTER IS ASSEMBLED AS 12 BITS ONLY IF THE 
*         UPPER 6 BITS ARE NONZERO; THE LOWER SIX BITS ARE
*         ALWAYS ASSEMBLED. 
* 
*         ENTRY  (VDPT) = CURRENT POSITION IN POT.
*                (TBUF) = FIRST CHARACTER TO ASSEMBLE.
* 
*         EXIT   DATA ASSEMBLED INTO POT CHAIN. 
*                (VDPT) = UPDATED.
*                (X0) AND (X5) UNCHANGED. 
* 
*         USES   A - 2, 3, 4, 6.
*                B - 3, 4, 5, 6, 7. 
*                X - 1, 2, 3, 4, 6. 
* 
*         CALLS  ADP. 
  
 ADB      SUBR               ENTRY/EXIT 
          SA2    A0+VDPT     EXTRACT STARTING POSITION
          LX2    24 
          MX3    -12
          BX3    -X3*X2 
          SB3    X3+         (B3) = LAST POT POINTER
          LX3    3
          TB4    X3,VBMP     (B4) = FWA LAST POT
          SB7    B4+VCPC     (B7) = POT LWA+1 
          LX2    6
          MX3    -3 
          BX3    -X3*X2 
          SB6    X3          (B6) = WORD COUNT IN LAST POT
          LX2    6
          MX3    -6 
          BX3    -X3*X2 
          SB5    X3          (B5) = BIT COUNT IN LAST WORD
          SA4    TBUF        GET FIRST CHARACTER
          BX6    X6-X6       CLEAR ASSEMBLY 
          SB4    B4+B6       SET POT STORE ADDRESS
          SB6    60 
          SB6    B6-B5
          ZR     B6,ADB1     IF STARTING AT WORD BOUNDARY 
          SA3    B4          GET PARTIAL WORD 
          LX6    X3,B6       POSITION ASSEMBLY
 ADB1     SB6    6           (B6) = ASSEMBLY SHIFT BIAS 
          SX3    77B         (X3) = DISASSEMBLY MASK
          NG     X4,ADB4     IF END OF BUFFER 
  
*         SPLIT UP 12-BIT CHARACTER.
  
 ADB2     BX1    X3*X4       (X1) = LOWER SIX BITS
          AX2    X4,B6       (X2) = UPPER SIX BITS
          ZR     X2,ADB3     IF NO UPPER SIX BITS 
  
*         INSERT UPPER SIX BITS.
  
          LX6    6           SHIFT ASSEMBLY 
          BX2    X2*X3       CLEAR FLAG BIT 
          SB5    B5-B6       BIAS ASSEMBLY SHIFT
          BX6    X6+X2       MERGE CHARACER 
          NZ     B5,ADB3     IF NOT END OF ASSEMBLY WORD
          SA6    B4          STORE ASSEMBLY 
          SB4    B4+B1       ADVANCE POT ADDRESS
          SX6    B0+         CLEAR ASSEMBLY 
          SB5    60 
          LT     B4,B7,ADB3  IF NOT POT LIMIT 
          RJ     ADP         ADVANCE POT
          SB6    6           RESET ASSEMBLY SHIFT BIAS
          SB7    B4+VCPC
          SX6    B0+         CLEAR ASSEMBLY 
          SX3    77B
  
*         INSERT LOWER SIX BITS.
  
 ADB3     SA4    A4+B1       READ UP NEXT WORD
          LX6    6           SHIFT ASSEMBLY 
          SB5    B5-B6       BIAS ASSEMBLY SHIFT
          BX6    X6+X1       MERGE CHARACTER
          NG     X4,ADB4     IF END OF BUFFER 
          NZ     B5,ADB2     IF NOT END OF ASSEMBLY WORD
          SA6    B4+         STORE ASSEMBLY 
          SB5    60 
          BX6    X6-X6
          SB4    B4+B1
          LT     B4,B7,ADB2  IF NOT END OF POT
          RJ     ADP         ADVANCE POT
          BX6    X6-X6       CLEAR ASSEMBLY 
          SA4    A4          RESTORE NEXT CHARACTER 
          SB7    B4+VCPC     SET LWA+1 OF NEW POT 
          EQ     ADB1 
  
*         STORE FINAL WORD OF ASSEMBLY. 
  
 ADB4     LX6    X6,B5       STORE ASSEMBLY 
          SA6    B4 
          SA3    RCCW 
          NZ     X3,ADB6     IF NOT FINISHED WITH THIS BLOCK
          SA3    A0+VDPT
          LX3    59-13
          NG     X3,ADB6     IF NOT MSG BLOCK 
          SB4    B4+B1
          BX6    X6-X6
          LT     B4,B7,ADB5  IF NOT END OF POT
          RJ     ADP         ADVANCE POT
          SB7    B4+VCPC
          SX6    B0+
  
*         SET TERMINATOR WORD IN POT. 
  
 ADB5     SB6    B5-12
          SB5    B0 
          PL     B6,ADB7     IF TERMINATOR NOT NEEDED 
          SA6    B4          STORE TERMINATOR 
 ADB6     NZ     B5,ADB7     IF ROOM IN WORD
          SB5    60          RESET TO WORD BOUNDARY 
          SB4    B4+B1
          LT     B4,B7,ADB7  IF NOT END OF POT
          RJ     ADP         ADVANCE POT
          SB7    B4+VCPC
  
*         REPACK VDPT.
  
 ADB7     SA2    A0+VDPT
          SA3    =77770000700077777777B 
          BX6    X2*X3       PRESERVE FP, FW, FLAGS AND CC
          SX3    B3 
          LX3    36 
          BX6    X6+X3       MERGE NEW LAST POT 
          SB6    B4-B7
          SX3    B6+VCPC
          LX3    30 
          BX6    X6+X3       MERGE WORD COUNT 
          SX3    B5 
          LX3    24 
          BX6    X6+X3       MERGE BIT COUNT
          SA6    A2          REWRITE VDPT 
          EQ     ADBX        RETURN 
 ADP      SPACE  4,10 
**        ADP - ADVANCE POT.
* 
*         ENTRY  (B3) = FULL POT POINTER. 
* 
*         EXIT   (B3) = NEW POT POINTER.
*                (B4) = NEW POT ADDRESS.
*                (B5), (X5), (X1) UNCHANGED.
* 
*         USES   X - 5, 6.
*                A - 5, 6.
*                B - 3, 7.
* 
*         CALLS  GPL, RPT.
* 
*         NOTE   IF *RPT* IS CALLED AND NO POT IS AVAILABLE,
*                (B3) WILL BE RETURNED AS 7777B.  THEREFORE,
*                THIS ROUTINE SHOULD NOT BE USED UNLESS THE 
*                CALLER CAN GUARANTEE THAT A POT WILL BE AVAILABLE
*                IF *RPT* NEEDS TO BE CALLED.  THIS CAN BE
*                DONE BY CALLING *CFL* BEFORE CALLING *ADP*.
  
  
 ADP      SUBR               ENTRY/EXIT 
 ADP1     SB7    B3          SAVE ORIGINAL POT POINTER
          RJ     GPL         GET POT LINK 
          NZ     B3,ADPX     IF NOT END OF CHAIN
          SX6    B5          SAVE EXIT REQUIREMENTS 
          SA6    ADPA 
          BX6    X5 
          SA6    A6+B1
          BX6    X1 
          SA6    A6+B1
          SX5    B7 
          PX5    X5,B1       REQUEST ONE MORE POT 
          RJ     RPT         REQUEST POT
          SB3    X1          SET NEW POT POINTER
          SA5    ADPA        RESTORE EXIT REQUIREMENTS
          SB5    X5 
          SA5    A5+B1
          SA1    A5+B1
          EQ     ADP1        CHECK LINK 
  
  
 ADPA     BSS    3           EXIT REQUIREMENTS
 ANM      SPACE  4,10 
**        ANM - ASSIGN MESSAGE TO NETWORK TERMINAL. 
* 
*         ADDS A MESSAGE TO THE OUTPUT QUEUE IN VSTT.  THE
*         FIRST WORD IN THE FIRST POT OF EACH POT CHAIN IS USED TO
*         LINK THE MESSAGE INTO THE QUEUE, USING THE FORMAT 
* 
*T        30/ 0,6/ NP,12/ LC,12/ NC.
* 
*               NP = NUMBER OF POTS IN THIS MESSAGE.
*               LC = POT POINTER OF LAST CHAIN OF DATA IN QUEUE.
*               NC = POT POINTER OF NEXT CHAIN OF DATA IN QUEUE.
*         THE LC FIELD IS ONLY PRESENT IN THE LINKAGE WORD OF 
*         THE FIRST POT CHAIN IN THE QUEUE.  SUBSEQUENT POT CHAINS USE
*         LC = 0.  THE LAST POT CHAIN IN THE QUEUE WILL 
*         ALWAYS HAVE NC = 0.  IN THE CASE WHERE EXACTLY ONE MESSAGE IS 
*         IN THE QUEUE, THE LC FIELD POINTS TO ITSELF AND 
*         NC = 0.  THE SECOND WORD IN THE FIRST POT IS EITHER A 
*         MESSAGE HEADER OR A SET OF TRANSLATION FLAGS.  IF THE TOP 
*         6 BITS OF THE WORD ARE NON-ZERO, THE WORD IS A MESSAGE
*         HEADER, WHICH MEANS THE MESSAGE STARTING IN WORD THREE HAS
*         ALREADY BEEN TRANSLATED TO ASCII8 FOR TRANSMISSION TO NAM.
*         IF THE TOP 6 BITS ARE ZERO, THEN THE WORD CONTAINS
*         TRANSLATION FLAGS IN THE FOLLOWING FORMAT:  
* 
*T        57/ 0,1/ UF,1/ WR,1/ CS.
* 
*               UF = 1 IF USER FORMAT EFFECTOR MODE IS SET. 
*               WR = 1 IF THIS CHAIN OF OUTPUT MAY NOT BE COMBINED
*                    WITH DATA IN SUBSEQUENT CHAINS.
*               CS = CHARACTER SET AT THE TIME THE OUTPUT WAS SENT TO 
*                    IAF (1=ASCII 6/12,0=NORMAL). 
* 
*         ENTRY  (X7) = MESSAGE POT POINTER.
*                (FW OF POT CHAIN) = POT COUNT IN BITS 29-24. 
* 
*         CALLS  DPT, SAB.
  
  
 ANM2     SA2    ANMA        COUNT DISCARDED OUTPUT 
          IX6    X2+X1
          SA6    A2 
          MX6    24 
          SA2    A0+VFST     GET JSN
          LX6    -6 
          LX2    -6 
          BX2    X2*X6
          SA1    ANMB        PUT JSN IN MESSAGE 
          BX1    -X6*X1 
          BX6    X1+X2
          SA6    A1 
          MESSAGE  ANMB,,R
 ANM3     SB3    X7          DROP THE POT CHAIN 
          SB4    B0 
          RJ     DPT         DROP POTS
  
 ANM      SUBR               ENTRY/EXIT 
          SX1    X7          SET POT ADDRESS
          LX1    3
          TA4    X1,VBMP     GET POT COUNT
          SA2    A0+VSTT
          BX6    X2 
          LX6    59-58       CHECK USER BREAK IN PROGRESS 
          TA1    B2,VMST     CHECK IF ON LINE 
          BX6    -X1+X6 
          MX5    -12
          BX3    -X5*X2 
          NG     X6,ANM3     IF USER BREAK IN PROGRESS
          IX6    X2+X4       ADD IN POT COUNT 
          NZ     X3,ANM1     IF VSTT BUSY 
          BX6    X6+X7
          LX7    12          SET LINKAGE WORD 
          BX7    X7+X4
          SA7    A4+         REWRITE FIRST WORD IN POT CHAIN
          SA6    A2 
          RJ     SAB         SET TERMINAL ACTIVITY BIT
          EQ     ANMX        RETURN 
  
*         ADD CHAIN TO END OF QUEUE IN VSTT.
  
 ANM1     LX3    3
          MX1    6           CHECK FOR POT COUNT OVERFLOW 
          LX1    30 
          BX2    X1*X2       OLD POT COUNT
          IX2    X2+X4
          BX2    -X1*X2 
          SX1    B1 
          LX5    12 
          NZ     X2,ANM2     IF POT COUNT OVERFLOW
          TA1    X3,VBMP
          SA6    A2          REWRITE VSTT 
          BX3    -X5*X1      SAVE PREVIOUS LAST CHAIN 
          BX5    X5*X1
          LX7    12 
          BX6    X5+X7       ADD NEW LAST CHAIN 
          SA6    A1 
          AX7    12 
          LX3    -9 
          TA1    X3,VBMP
          BX7    X1+X7
          SA7    A1 
          EQ     ANMX        EXIT 
  
  
 ANMA     CON    0           DISCARDED OUTPUT COUNT 
 ANMB     DATA   10L **** LOST
          DATA   10L OUTPUT ME
          DATA   6LSSAGE. 
 ASV      SPACE  4,30 
**        ASV - ASSIGN SUPERVISORY MESSAGE. 
* 
*         TRANSMITS SUPERVISORY MESSAGE.  IF NAM IS BUSY, *ASV* 
*         COPIES THE MESSAGE INTO A POT AND ASSIGNS IT TO 
*         THE NULL SUPERVISORY QUEUE. 
* 
*T NSQP   30/LAST POT ,30/FIRST POT.
* 
* 
*         ENTRY  (B2) = ACN TO BE PLACED IN THE FIRST WORD OF 
*                       THE MESSAGE TEXT. 
*                (B4) = TEXT LENGTH; MAXIMUM 7 WORDS. 
*                (X6) = ADDRESS OF HEADER:  
*                     = ZERO, USE DEFAULT HEADER. 
*                (X7) = ADDRESS OF TEXT.  7 WORDS ASSUMED.
* 
*         EXIT   (X6) = ZERO IF NO POTS AVAILABLE.
* 
*         CALLS  CBL, CFL, IBC, RPT, SAB, SCS.
  
  
 ASV      SUBR               ENTRY/EXIT 
          SA6    ASVA        SAVE (X6)
          SA1    NBSY 
          NZ     X1,ASV1     IF NAM BUSY
          RJ     SCS         TRANSMIT MESSAGE 
          SX6    B1          FLAG MESSAGE AS SENT 
          EQ     ASVX        EXIT 
  
*         NAM IS BUSY.  SEE IF A POT IS AVAILABLE INTO WHICH
*         THE MESSAGE CAN BE STORED.
  
 ASV1     RJ     CFL         CHECK POT SUPPLY 
          BX6    X6-X6
          NG     X2,ASVX     IF LOW POT SUPPLY
          SA7    ASVB        SAVE (X7)
          SX7    B4          SAVE (B4)
          SA7    ASVC 
  
*         GET POT FOR MESSAGE.
  
          SA5    NSQP        GET NULL QUEUE POINTER 
          AX5    30          SET POT TO LINK TO 
          PX5    X5,B1       REQUEST ONE POT
          RJ     RPT
          SB3    X1          NEW POT POINTER
          LX1    3
          TB4    X1,VBMP     NEW POT ADDRESS
  
*         ASSIGN POT TO NULL SUPERIVISORY MESSAGE QUEUE.
  
          SA2    NSQP        GET QUEUE POINTER
          MX6    -30
          BX2    -X6*X2      CLEAR LAST POT POINTER 
          NZ     X2,ASV2     IF NOT EMPTY QUEUE 
          SX2    B3+
 ASV2     LX1    30-3        SET NEW LAST POT POINTER 
          BX7    X1+X2
          SA7    A2+         REWRITE QUEUE POINTER
  
*         READ HEADER AND FIRST TEXT WORD OF MESSAGE. 
  
          SA1    ASVA        GET HEADER ADDRESS 
          SA2    ASVB        GET TEXT ADDRESS 
          SA2    X2+         READ FIRST WORD OF TEXT
          NZ     X1,ASV3     IF HEADER PROVIDED BY CALLER 
          SX1    HDRS1       USE DEFAULT HEADER 
 ASV3     SA1    X1          GET HEADER 
          MX3    -12
          LX3    24          SET ACN MASK 
          SX6    B2          SET ACN
  
*         INSERT ACN IN FIRST TEXT WORD, BITS 35-24.
  
          BX2    X3*X2       CLEAR ACN FIELD
          LX6    24          INSERT ACN 
          BX7    X2+X6
  
*         COPY MESSAGE TO POT.
  
          BX6    X1          COPY FIRST TWO WORDS 
          SA6    B4 
          SA7    A6+B1
          SA5    ASVC        GET WORD COUNT 
          SX6    B1+         SET EXIT STATUS
          SB6    X5-1 
 ASV4     ZR     B6,ASVX     IF COPY COMPLETE 
          SA2    A2+B1
          SB6    B6-B1
          BX7    X2          STORE WORD 
          SA7    A7+B1
          EQ     ASV4        CONTINUE TRANSFER
  
 ASVA     CON    0           SAVE (X6) HEADER ADDRESS 
 ASVB     CON    0           SAVE (X7) TEXT ADDRESS 
 ASVC     CON    0           SAVE (B4) TEXT LENGTH
 CBL      SPACE  4,10 
**        CBL - CHECK BLOCK LIMIT.
* 
*         CHECKS TERMINAL DOWNSTREAM BLOCK COUNT TO SEE IF
*         TERMINAL IS CURRENTLY AT BLOCK LIMIT. 
* 
*         EXIT   (X6) = NONZERO IF AT TERMINAL BLOCK LIMIT. 
*                (X3) = APPLICATION BLOCK COUNT. (DOWNSTREAM
*                       BLOCKS NOT YET ACKNOWLEDGED). 
* 
*         USES   A - 3. 
*                X - 3, 4, 6. 
  
  
 CBL      SUBR               ENTRY/EXIT 
          TA3    B2,VMST     READ VMST ENTRY
          MX6    -3 
          AX3    30          SHIFT ABL
          BX4    -X6*X3      SET ABL
          AX3    3           SHIFT ABC
          BX3    -X6*X3      SET ABC
          BX6    X6-X6       ASSUME NOT AT LIMIT
          IX4    X3-X4       ABC - ABL
          NG     X4,CBLX     IF NOT AT LIMIT
          SX6    B1          SET LIMIT EXIT STATUS
          EQ     CBLX        RETURN 
 CCT      SPACE  4,20 
**        CCT - CHECK CYCLE TIME. 
* 
*         CHECKS TO SEE IF IT IS TIME TO CYCLE NETWORK. 
* 
*         ENTRY  (NSCT) = MINIMUM CYCLE TIME (MSECS). 
*                (NFRT) = REAL TIME AT LAST CYCLE.
*                (RTIM) = CURRENT REAL TIME.
* 
*         EXIT   (X6)   = ZERO IF MINIMUM NOT ELAPSED.
*                (NFRT) = (RTIM) IF MINIMUM ELAPSED.
* 
*         USES   A - 2, 3, 4, 6.
*                X - 2, 3, 4, 6.
  
  
 CCT      SUBR               ENTRY/EXIT 
          SA2    RTIM        CURRENT REAL TIME
          SA3    NFRT        LAST FUNCTION REAL TIME
          SX4    NSCT        SET MINIMUM NETWORK SCAN CYCLE TIME
          MX6    -36         MASK MILLISECONDS
          BX3    -X6*X3 
          BX6    -X6*X2 
          IX3    X6-X3       ELAPSED MILLISECONDS 
          BX6    X6-X6
          IX4    X3-X4
          NG     X3,CCT1     IF REAL TIME RESET 
          NG     X4,CCTX     IF LESS THAN MINIMUM, RETURN 
 CCT1     BX6    X2          SET FUNCTION TIME
          SA6    A3 
          EQ     CCTX        RETURN 
 CFX      SPACE  4,20 
**        CFX -  CHECK FOR FORCED EXIT. 
* 
*         CHECKS MONITOR REQUEST AND OTHER DRIVERS CIRCULAR 
*         REQUEST STACKS TO SEE THEY REQUIRE PROCESSING BY
*         MAIN EXECUTIVE.  A STACK REQUIRES PROCESSING IF IT
*         IS HALF-FULL. 
* 
*         EXIT   (X6) = NONZERO IF FORCED EXIT REQUIRED.
*                (DSXC) = UPDATED IF DRIVER STACK EXIT. 
*                (MSXC) = UPDATED IF MONITOR STACK EXIT.
*                (CCFC) = COMPLEMENT OF FUNCTION LIMIT (NFCL).
* 
*         USES   X - 2, 3, 4, 6, 7. 
*                A - 2, 3, 4, 6, 7. 
*                B - 4, 5, 6. 
  
  
 CFX      SUBR               ENTRY/EXIT 
  
*         SET FUNCTION LIMIT COMPLEMENT.  CHECK FOR FULL NETWORK STACK. 
  
          SA3    NDSL 
          SX6    -NFCL
          SA6    CCFC 
          NZ     X3,CFX4.1   IF NETWORK STACK IS FULL 
  
*         CHECK MONITOR REQUEST STACK.
  
          SB5    VTRP        SET STACK FWA
          SB6    VTRP+VTRL   STACK LWA+1
          SX2    MSXC        INDICATE EXIT COUNTER
          SX4    VTRL/2      STACK LENGTH/2 
 CFX1     SA3    B5          READ STACK ENTRY 
          SB5    B5+B1
          ZR     X3,CFX2     IF NO REQUEST
          SX4    X4-1        COUNT ENTRY
          ZR     X4,CFX5     IF STACK HALF FULL 
 CFX2     LT     B5,B6,CFX1  IF NOT DONE WITH STACK, LOOP 
  
*         CHECK DRIVER REQUEST STACKS.
  
          SA3    NSPA        GET NETWORK STACK POINTER ADDRESS
          SB5    VDRL-1      START OF DRIVER STACK POINTERS 
          BX6    X6-X6       ASSUME NO EXIT FORCE 
          SB6    X3          (B6) = NETWORK STACK POINTER ADDRESS 
 CFX3     SB5    B5+B1       ADVANCE POINTER ADDRESS
          EQ     B5,B6,CFX3  IF NETWORK POINTER ADDRESS, IGNORE 
          SA3    B5          READ STACK POINTER 
          NG     X3,CFXX     IF END OF STACK
          ZR     X3,CFX3     IF NULL STACK, IGNORE
          AX3    24          SHIFT STACK POINTER
          SB4    X3+B1       (B4) = ADDRESS OF FIRST
          SA2    B4+1        READ IN
          SA3    A2+1        READ OUT 
          SX2    X2+B1
          IX4    X3-X2       (X4) = OUT-IN-1
          PL     X4,CFX4     IF IN .LE. OUT-1 
          SA2    B4          READ FIRST 
          SA3    A3+B1       READ LIMIT 
          SX2    X2 
          SX3    X3 
          IX4    X4-X2
          IX4    X4+X3       (X4) = (OUT-FIRST)+(LIMIT-IN)-1
 CFX4     SX4    X4-VDSL/2   CHECK LENGTH 
          PL     X4,CFX3     IF LESS THAN HALF FULL 
 CFX4.1   SX2    DSXC 
  
*         UPDATE FORCED EXIT COUNT AND RETURN.
  
 CFX5     SA2    X2          READ EXIT COUNTER WORD 
          SX6    B1          UPDATE EXIT COUNT
          IX7    X6+X2
          SA7    A2 
          EQ     CFXX        RETURN 
          SPACE  4,10 
**        COA - CHECK OUTPUT AVAILABLE. 
* 
*         DETERMINES IF THERE IS ANY OUTPUT BEING OUTPUT TO 
*         THE TERMINAL OR ANY DRIVER REQUESTS PENDING.
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
*                (X1) = VDCT, LEFT SHIFTED NINE BITS. 
* 
*         EXIT   (X4) = 0 IF NO OUTPUT PRESENT. 
*                (X4) .NE. 0 IF OUTPUT PRESENT. 
* 
*         USES   A - 1, 6.
*                X - 1, 4, 6. 
  
  
 COA      SUBR               ENTRY/EXIT 
          LX1    -9          REALIGN VDCT 
          SX4    B1 
          NG     X1,COAX     IF DRIVER REQUEST PENDING
          TA1    B2,VMST     CHECK FOR OUTPUT FLAG
          LX4    52-0 
          BX4    X4*X1
          ZR     X4,COA1     IF NO OUTPUT ON *NAM*
          BX6    -X4*X1      CLEAR OUTPUT FLAG
          SA6    A1          REWRITE VMST 
          EQ     COAX        RETURN 
  
 COA1     SA1    A0+VSTT     CHECK FOR OUTPUT POT 
          MX4    -12
          BX4    -X4*X1 
          EQ     COAX        RETURN 
 DBC      SPACE  4,10 
**        DBC - DECREMENT BLOCK COUNT.
* 
*         DECREMENT TERMINAL APPLICATION BLOCK COUNT. 
* 
*         EXIT   (X6) = NEGATIVE IF BLOCK COUNT ZERO ON ENTRY.
* 
*         USES   A - 3, 6.
*                X - 3, 6.
  
  
 DBC      SUBR               ENTRY/EXIT 
          TA3    B2,VMST     READ VMST ENTRY
          MX6    -3          MASK BLOCK COUNT 
          LX3    -33
          BX6    -X6*X3 
          IX3    X3-X6       CLEAR BLOCK COUNT
          SX6    X6-1        DECREMENT BLOCK COUNT
          NG     X6,DBCX     IF ZERO ON ENTRY 
          BX6    X6+X3       INSERT NEW BLOCK COUNT 
          LX6    33 
          SA6    A3          REWRITE VMST ENTRY 
          BX6    X6-X6       (X6) STATUS = NO ERROR 
          EQ     DBCX        RETURN 
 DCI      SPACE  4,15 
**        DCI - DISCARD INPUT IF NECESSARY. 
* 
*         ENTRY  (X1) = MESSAGE HEADER. 
*                (X6) = 0, IF OVERFLOW ALREADY DETECTED.
*                     = (VMST), IF TESTING FOR DISCARD. 
* 
*         EXIT   (X0) = NONZERO IF INPUT TO DISCARD.
* 
*         USES   A - 1, 2, 3, 6.
*                B - 3, 4, 7. 
*                X - ALL. 
* 
*         CALLS  DPT, ERQ, SRE. 
  
  
 DCI      SUBR               ENTRY/EXIT 
          SA2    A0+VUIT
          SA3    A0+VSTT
          MX7    -12
          LX3    59-56
          BX2    -X7*X2 
          ZR     X2,DCI4     IF NO EJT ORDINAL ASSIGNED, DISCARD DATA 
          NG     X3,DCI4     IF DETACH IN PROGRESS, DISCARD DATA
          ZR     X6,DCI4     IF OVERFLOW ALREADY DETECTED 
          LX1    59-13       CHECK CANCEL LINE FLAG 
          BX5    X1 
          SA1    A0+VDCT
          PL     X5,DCI0     IF CANCEL BIT NOT SET
          LX1    59-49
          PL     X1,DCI0     IF NOT AUTO MODE 
          MX4    1
          LX1    59-53-59+49
          BX7    X4+X1       SET CANCEL AUTO LINE 
          LX7    53-59
          SA7    A1 
          LX7    59-49-59+53
 DCI0     SA1    A0+VDCT
          SA2    A0+VDPT
          LX2    59-12       CHECK DISCARD DATA BIT 
          BX2    X5+X2
          NG     X2,DCI4     IF EITHER SET
          SA2    A0+VSTT
          LX6    59-57       CHECK FOR BREAK IN PROGRESS
          LX1    59-50       CHECK TEXT MODE IN PROGRESS
          PL     X6,DCI1     IF BREAK NOT IN PROGRESS 
          PL     X1,DCI4     IF NOT TEXT MODE, DISCARD INPUT
 DCI1     LX6    59-55-59+57 CHECK END-CONNECTION FLAG
          LX2    59-48       CHECK LOGOUT IN PROGRESS 
          BX7    X6+X2
          NG     X7,DCI4     IF ANY OF THE ABOVE SET, DISCARD 
  
*         DISCARD *BGI* REQUEST.
  
 DCI2     LX1    50-59
          MX5    -12
          BX3    -X5*X1      MASK DRIVER REQUEST
          BX0    X0-X0       SET NORMAL RETURN STATUS 
          PL     X1,DCIX     IF NO DRIVER REQUEST 
          SX3    X3-/1TD/BGI
          NZ     X3,DCI3     IF NOT *BGI* REQUEST 
          MX6    13          CLEAR *BGI* REQUEST
          LX6    12 
          BX6    -X6*X1 
          SA6    A1          REWRITE VDCT 
          EQ     DCIX        RETURN 
  
 DCI3     SX3    X3-/1TD/IIP+/1TD/BGI 
          ZR     X3,DCIX     IF AN *IIP* REQUEST
  
*         DISCARD INPUT.
  
 DCI4     SA1    RCVH        READ MESSAGE HEADER
          SA2    A0+VDPT
          AX1    54 
          SX4    B0 
          SX0    X1-BTMS
          ZR     X0,DCI5     IF MSG BLOCK 
          SX4    10000B      DISCARD DATA BIT 
 DCI5     BX6    X4+X2
          SA6    A2          REWRITE *VDPT* 
          RJ     RIP         RESET INPUT POINTERS IN *VDPT* 
 DCI6     NZ     X0,DCIX     IF NOT MSG BLOCK 
          RJ     SOM         SEND OVERFLOW MESSAGE
          SX0    B1          DISCARD INPUT FLAG 
          EQ     DCIX        EXIT 
 DLP      SPACE  4,20 
**        DLP - DELINK POT. 
* 
*         DELINKS POT FROM CHAIN.  POT REMAINS RESERVED AND 
*         LINK TO FOLLOWING POT IS CLEARED. 
* 
*         ENTRY  (X1) = POT POINTER.
* 
*         EXIT   (X7) = POT POINTER TO WHICH ENTRY POT WAS
*                       ORIGINALLY LINKED.  ZERO IF ENTRY POT 
*                       WAS NOT LINKED. 
* 
*         USES   A - 3, 6.
*                X - 3, 4, 6. 
*                B - 7. 
* 
*         CALLS  ABT. 
  
  
 DLP      SUBR               ENTRY/EXIT 
          SX4    X1          SET PLT RELATIVE ADDRESS 
          ZR     X4,DLP1     IF TRYING TO DELINK POT ZERO 
          LX4    -2 
          TA3    X4,VPLP     READ PLT ENTRY 
          MX6    2
          BX4    X6*X4       MASK BYTE ORDINAL
          LX4    4           BYTE * 4 
          LX6    X4,B1       BYTE * 8 
          IX4    X4+X6       BYTE * 12
          SB7    X4+12       SET LINK BYTE SHIFT COUNT
          LX3    X3,B7       SHIFT LINK BYTE
          MX6    -12
          BX7    -X6*X3      MASK LINK BYTE 
          SB7    B7-60
          BX3    X6*X3       CLEAR LINK BYTE
          AX6    X3,B7       REWRITE PLT ENTRY
          SA6    A3 
          EQ     DLPX        RETURN 
  
 DLP1     SX6    3RDLP
          RJ     ABT
          BX7    X7-X7
          EQ     DLPX        EXIT 
 ECL      SPACE  4,20 
**        ECL - ENTER COMMAND INPUT LINE. 
* 
*         ENTERS DRIVER REQUEST QUEUE ENTRY TO RELEASE INPUT
*         LINE TO THE EXECUTIVE AS A COMMAND LINE.
* 
*         ENTRY  (X1) = (VDPT). 
*                (VDPT) = 12/FP, 12/LP, 3/FW, 3/WC, 6/, 12/FLAGS, 12/.
*                         FP = FIRST POT OF LINE. 
*                         LP = LAST POT OF LINE.
*                         FW = FIRST WORD OF FIRST POT. 
*                         WC = LAST POT WORD COUNT. 
*                (A1) = ADDRESS OF VDPT.
* 
*         EXIT   POTS RELEASED TO EXECUTIVE.
*                (VDPT) = POT POINTERS CLEARED. 
* 
*         CALLS  ERQ. 
  
  
 ECL      SUBR               ENTRY/EXIT 
          SX7    1S16        CLEAR INPUT-INITIATED BIT
          BX1    -X7*X1 
          MX6    -30         CLEAR POT POINTERS 
          BX6    -X6*X1 
          MX2    -12
          SA6    A1+         REWRITE VDPT 
          LX1    12          SET FIRST POT OF LINE
          MX7    -3 
          BX2    -X2*X1 
          LX1    15 
          SX6    /TLX/CLI    SET REQUEST CODE 
          BX7    -X7*X1      SET FIRST WORD OF FIRST POT
          SB3    X2 
          RJ     ERQ         ENTER REQUEST
          SA1    A0+VROT     SEE IF VROT COMPLETE 
          LX1    59-0 
          PL     X1,ECLX     IF CONNECTED TO SMFEX
          LX1    0-59        SET INPUT SATISFIED
          SX7    1S5
          BX7    X1+X7
          SA7    A1          REWRITE VROT 
          EQ     ECLX        EXIT 
 EIL      SPACE  4,15 
**        EIL - PROCESS END OF INPUT LINE.
* 
*         CALLS COMMAND OR SOURCE INPUT LINE PROCESSOR DEPENDING
*         ON TERMINAL MODE AND DATA FORMAT. 
* 
*         ENTRY  (A1) = ADDRESS OF VDPT.
*                (X1) = (VDPT). 
* 
*         EXIT   (VDPT) = UPDATED.
*                (X0) AND (X5) UNCHANGED. 
* 
*         CALLS  ECL, ESL.
  
  
 EIL      SUBR               ENTRY/EXIT 
  
*         SELECT PROCESSOR ACCORDING TO MODE FLAGS. 
  
          SA2    A0+VDCT     READ VDCT
          LX2    59-54       CHECK READ-DATA BIT
          BX5    X1          MOVE (VDPT) FOR TESTING
          NG     X2,EIL1     IF READ-DATA SET 
          LX2    54-50       CHECK TEXT MODE BIT
          MX3    -12
          NG     X2,EIL2     IF TEXT MODE SET 
  
*         SELECT PROCESSOR ACCORDING TO DATA MODE.
  
          LX5    59-15       CHECK FOR BINARY MODE
          NG     X5,EIL2     IF SET 
          LX5    60+12-59+15  GET FIRST POT POINTER 
          BX2    -X3*X5 
          MX4    -3 
          LX5    15          GET FIRST POT FIRST WORD ADDRESS 
          BX4    -X4*X5      MASK FIRST POT WORD INDEX
          SB3    X2          STORE POT POINTER
          LX2    3           SET POT ADDRESS
          TB4    X2,VBMP
          SA3    B4+X4       READ FIRST WORD OF DATA
          MX2    6
          BX4    X2*X3       CHECK FIRST CHARACTER
          LX4    6
          SX2    X4-1R0 
          NG     X2,EIL1     IF ALPHA CHARACTER 
          SX2    X4-1R9-1 
          NG     X2,EIL2     IF NUMERIC 
  
*         ENTER COMMAND LINE. 
  
 EIL1     RJ     ECL         ENTER COMMAND LINE 
          EQ     EILX        RETURN 
  
*         ENTER SOURCE LINE.
  
 EIL2     RJ     ESL         ENTER SOURCE LINE
          EQ     EILX        RETURN 
 ERQ      SPACE  4,30 
**        ERQ - ENTER CIRCULAR STACK REQUEST. 
* 
*         ENTERS DRIVER-TO-EXECUTIVE REQUESTS IN THE DRIVER 
*         CIRCULAR STACK.  THE STACK LIMIT FLAG WILL BE SET 
*         IF THERE ARE LESS THAN THREE WORDS LEFT IN THE
*         STACK TO INHIBIT OPERATIONS WHICH ISSUE MULTIPLE
*         REQUESTS. 
* 
*         ENTRY  (NDSA) = ADDRESS OF CIRCULAR STACK.
*                (X6) = REQUEST CODE. 
*                (X7) = REQUEST BITS 47-24. 
*                (B2) = REQUEST BITS 11-0 (TERMINAL NUMBER).
*                (B3) = REQUEST BITS 23-12. 
* 
*         EXIT   (X6) = NEGATIVE IF ENTRY COULD NOT BE MADE.
*                (X6) = (NDSL) IF ENTRY MADE. 
*                (X7) = STACK REMAINING WORD COUNT. 
*                REQUEST ENTERED IN CIRCULAR STACK. 
*                REQUEST STACK *IN* POINTER UPDATED.
*                (NDSL) = NONZERO IF STACK FULL AFTER ENTRY.
* 
*         USES   A - 1, 2, 3, 4, 6, 7.
*                X - 1, 2, 3, 4, 5, 6, 7. 
*                B - 6. 
* 
*         CALLS  ABT. 
  
  
 ERQ      SUBR               ENTRY/EXIT 
          SB6    X6          SAVE REQUEST CODE FOR PACKING
          MX6    -24
  
*         FORMAT REQUEST STACK ENTRY. 
  
          SA1    NDSA        GET DRIVER STACK ADDRESS 
          SX5    B3          SET BITS 23-12 
          BX7    -X6*X7      SET BITS 47-24 
          SX6    B2          SET BITS 11-0
          LX5    12 
          SA1    X1+2        READ IN
          PX6    X6,B6       PACK REQUEST CODE AND BITS 11-0
          LX7    24 
          BX6    X6+X5       MERGE BITS 23-12 
          IX6    X6+X7       MERGE BITS 47-24 
          SA6    X1          STORE REQUEST
  
*         UPDATE CIRCULAR STACK POINTER.
  
          SX7    X1+B1       UPDATE IN
          SA3    A1+2        READ LIMIT 
          SA4    A1-B1       READ FIRST 
          IX1    X3-X7       LIMIT - IN 
          SA2    A1+B1       READ OUT 
          NZ     X1,ERQ1     IF IN .NE. LIMIT 
          SX7    X4          SET IN = FIRST 
 ERQ1     IX1    X2-X7       LENGTH = OUT-IN
          ZR     X1,ERQ4     IF OUT = IN, ERROR 
          SA7    A1          STORE NEW IN 
          PL     X1,ERQ2     IF OUT > IN
          IX1    X1-X4       LENGTH = (LIMIT-IN) + (OUT-FIRST)
          IX1    X1+X3
 ERQ2     SX6    B1+         INITIALIZE STACK LIMIT FLAG
          SX7    X1-3 
          NG     X7,ERQ3     IF STACK FULL
          SX6    B0+
 ERQ3     SA6    NDSL        SET/CLEAR STACK LIMIT FLAG 
          EQ     ERQX        RETURN 
  
*         PROCESS ERROR IF STACK FULL.
  
 ERQ4     SX6    3RERQ       SET ERROR CODE 
          RJ     ABT
          MX6    59          SET NEGATIVE STATUS
          BX7    X6 
          EQ     ERQ3        RETURN 
 ESL      SPACE  4,20 
**        ESL - ENTER SOURCE INPUT LINE.
* 
*         RELEASES INPUT LINE TO EXECUTIVE AS A SOURCE LINE 
*         OF DATA IF THE LINE CROSSES A POT BOUNDARY.  IF THERE 
*         IS NO POT SWITCH INVOLVED, THE INPUT INITIATED BIT
*         IS SET ONLY.
*         IF THE PRIMARY FILE IS NON-EXISTENT OR LOCKED,
*         THIS ROUTINE ISUES AN APPROPRIATE MESSAGE AND 
*         CLEARS THE POT POINTERS IN *VDPT*.
* 
*         ENTRY  (X1) = (VDPT). 
*                (VDPT) = 12/FP, 12/LP, 3/FW, 3/WC, 6/, 12/FLAGS, 12/.
*                         FP = FIRST POT OF LINE. 
*                         LP = LAST POT OF LINE.
*                         FW = FIRST WORD OF FIRST POT. 
*                         WC = LAST POT WORD COUNT. 
*                (A1) = ADDRESS OF VDPT.
*                (B2) = TERMINAL NUMBER.
*                (B3) = POT POINTER FOR THE INPUT LINE. 
* 
*         EXIT   IF PRIMARY FILE IS PRESENT IN WRITE MODE - 
*                (VDPT) = FIRST POT RESET TO LAST POT.
*                         INPUT INITIATED BIT SET.
*                IF LOCKED OR NO PRIMARY FILE - 
*                (VDPT) = POT POINTERS CLEARED. 
*                         APPROPRIATE MESSAGE ISSUED. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 1, 5, 6. 
*                B - 3, 4, 5, 7.
* 
*         CALLS  ACD, ASV, ERQ, SSP.
  
  
 ESL      SUBR               ENTRY/EXIT 
  
*         CHECK PRIMARY FILE
  
          SA5    A0+VFNT     GET PRIMARY FILE NAME
          MX6    42 
          BX6    X6*X5
          NZ     X6,ESL1     IF PRIMARY FILE EXISTS 
          SX6    DMNP        SET MESSAGE ADDRESS
          SB4    DMNPL       SET MESSAGE LENGTH 
          EQ     ESL2        FINISH PROCESSING
  
 ESL1     LX5    59-12       CHECK WRITE LOCKOUT BIT
          PL     X5,ESL3     IF WRITE LOCKOUT NOT SET 
          SX6    DMLP        SET MESSAGE ADDRESS
          SB4    DMLPL       SET MESSAGE LENGTH 
 ESL2     RJ     ACD         ASSIGN MESSAGE 
  
*         CLEAR POT POINTERS IN VDPT
  
          SA1    A0+VDPT     CLEAR POT POINTERS 
          MX6    30 
          BX6    -X6*X1 
          SA6    A1+         REWRITE VDPT 
          EQ     ESLX        RETURN 
  
*         UPDATE POINTERS IN VDCT.
  
 ESL3     MX5    -3          EXTRACT FIRST WORD 
          LX1    -30
          BX7    -X5*X1      (X7) = FIRST WORD
          LX1    -3          RESET FIRST WORD = WORD COUNT
          BX6    X5*X1
          IX6    X6+X7
          MX5    -12         EXTRACT LAST POT 
          LX6    -3 
          BX1    -X5*X6      (X1) = LAST POT
          LX6    -12         EXTRACT FIRST POT
          BX2    -X5*X6      (X2) = FIRST POT 
          LX7    12          SHIFT WORD COUNT FOR *RIN* REQUEST 
          BX6    X5*X6       RESET FIRST POT = LAST POT 
          IX6    X6+X1
          SX4    1S16        SET INPUT-INITIATED BIT 16 
          LX6    48          REWRITE VDPT 
          IX3    X1-X2       COMPARE POT POINTERS 
          BX6    X6+X4
          SA6    A1 
          ZR     X3,ESLX     IF NO POT CHANGE 
          BX7    X7+X1       MERGE LAST POT, WORD COUNT 
          SB3    X2          SET FIRST POT
          SX6    /TLX/RIN    SET RELEASE-INPUT REQUEST
          RJ     ERQ         ENTER REQUEST
          EQ     ESLX        EXIT 
 ETX      SPACE  4,10 
**        ETX - EXIT FROM TEXT MODE.
* 
*         ENTER *EXIT TEXT MODE* REQUEST. 
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
* 
*         EXIT   THE INPUT-INITIATED FLAG IS CLEARED. 
*                VDPT CLEARED.
*                *EXIT TEXT MODE* REQUEST ENTERED.
* 
*         CALLS  ERQ. 
  
  
 ETX      SUBR               ENTRY/EXIT 
          SA1    A0+VDCT     CLEAR TEXT MODE BIT
          MX6    59 
          LX6    50-0 
          BX6    X6*X1
          SA6    A1          REWRITE VDCT 
          SA1    A0+VDPT     GET POT POINTER
          BX6    X6-X6
          SA6    A1          CLEAR VDPT 
          MX6    -12
          LX1    60-36       EXTRACT LAST POT OF LINE 
          BX6    -X6*X1 
          SB3    X6          (B3)=LAST POT OF LINE
          MX7    -3 
          LX1    36-30       EXTRACT LAST POT WORD COUNT
          BX7    -X7*X1      (X7)=LAST POT WORD COUNT 
          SX6    /TLX/ETX    EXIT TEXT MODE REQUEST 
          RJ     ERQ         ENTER REQUEST
          EQ     ETXX        RETURN 
 GAT      SPACE  4,10 
**        GAT - GET ACTIVE TERMINAL NUMBER. 
* 
*         SEARCHES FOR NEXT TERMINAL WITH ACTIVITY BIT SET. 
* 
*         ENTRY  (B2) = STARTING TERMINAL NUMBER. 
* 
*         EXIT   (B2) = NEXT TERMINAL NUMBER WITH ACTIVITY. 
*                     = ZERO IF NO TERMINAL FOUND.
*                (A0) = (B2) TERMINAL TABLE ADDRESS.
*                (X6) = (B2). 
* 
*         MACROS TTADD. 
  
  
 GAT      SUBR               ENTRY/EXIT 
          SA4    HACN        GET HIGHEST ACTIVE ACN 
          TX2    B2,-VNTP    SET TERMINAL ORDINAL 
          MX7    -5 
          BX3    -X7*X2      TERMINAL ORDINAL MOD 32
          AX2    5           TERMINAL ORDINAL/32
          SB5    X3 
          TA1    X2,VNAT     READ STARTING TABLE ENTRY
          SB6    32          (B6) = BIT TEST SHIFT LIMIT
          SB7    X4          (B7) = HIGHEST ACTIVE ACN
          LX1    X1,B5       SHIFT STARTING TERMINAL BIT
          EQ     GAT2        ENTER TEST LOOP
  
*         ADVANCE TO NEXT TABLE ENTRY.
  
 GAT1     SA1    A1+B1       READ NEXT TABLE ENTRY
          SB5    B0          CLEAR SHIFT COUNT
          NZ     X1,GAT2     IF NOT NULL WORD 
          SB2    B2+32       ADVANCE TERMINAL NUMBER
          LE     B2,B7,GAT1  IF NOT END OF TERMINALS
          EQ     GAT4 
  
*         SEARCH ENTRY WORD FOR ACTIVITY BIT. 
  
 GAT2     NG     X1,GAT3     IF ACTIVITY BIT SET
          SB2    B2+1        ADVANCE TERMINAL NUMBER
          LX1    1           SHIFT NEXT TERMINAL BIT
          GT     B2,B7,GAT4  IF END OF ACTIVE TERMINALS 
          SB5    B5+B1       ADVANCE SHIFT COUNT
          LT     B5,B6,GAT2  IF NOT END OF ENTRY WORD 
          EQ     GAT1        PROCESS NEXT TABLE ENTRY 
  
*         RETURN ENTRY FOUND. 
  
 GAT3     TTADD  B2,A0,X1,X2  SET TERMINAL TABLE ADDRESS
          SX6    B2          RETURN TERMINAL NUMBER 
          EQ     GATX        RETURN 
  
*         RETURN ENTRY NOT FOUND. 
  
 GAT4     SB2    B0          CLEAR RETURN REGISTERS 
          BX6    X6-X6
          EQ     GATX        RETURN 
 IAT      SPACE  4,10 
**        IAT - INITIALIZE AIP TRACE OUTPUT FILE. 
* 
*         ENTRY  (ATMC) = MESSAGE COUNT USED TO CONTROL 
*                         PROCESSING OF TRACE OUTPUT FILE.
*                       = ZERO, IF TRACE IS NOT SELECTED. 
*                       = NEGATIVE, IF PROCESS TRACE FILE AT
*                         IAF TERMINATION ONLY. 
* 
*         EXIT   TRACE OUTPUT FILE INITIALIZED IF REQUIRED. 
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 2, 6. 
* 
*         MACROS NETREL.
  
  
 IAT1     NETREL =0,MXLT,=0  INITIALIZE TRACE FILE FOR T=* OPTION 
          SB1    1
  
 IAT      SUBR               ENTRY/EXIT 
          SA1    ATMC        GET TRACE MESSAGE COUNT
          SA2    IATA        CHECK IF FILE ALREADY INITIALIZED
          ZR     X1,IATX     IF TRACE IS NOT SELECTED 
          NZ     X2,IATX     IF TRACE FILE ALREADY INITIALIZED
          BX6    X1 
          SA6    A2          INDICATE TRACE FILE INITIALIZED
          NG     X1,IAT1     IF T=* OPTION IS SELECTED
          NETREL JPTO,MXLT,RWTF  INITIALIZE TRACE OUTPUT FILE 
          SB1    1
          EQ     IATX        RETURN 
  
 IATA     DATA   0           SET NONZERO WHEN TRACE FILE INITIALIZED
 IBC      SPACE  4,10 
**        IBC - INCREMENT BLOCK COUNT.
* 
*         INCREMENT TERMINAL APPLICATION BLOCK COUNT. 
* 
*         EXIT   (VMST) = BLOCK COUNT INCREMENTED 
* 
*         USES   A - 3, 6.
*                X - 3, 6.
  
  
 IBC      SUBR               ENTRY/EXIT 
          TA3    B2,VMST     READ VMST
          SX6    B1          INCREMENT ABC
          LX6    33-0 
          IX6    X6+X3
          SA6    A3          REWRITE VMST 
          EQ     IBCX        RETURN 
 ILV      SPACE  4,10 
**        ILV - INSERT LOAN STATUS VALUE. 
* 
*         PUT THE LOAN STATUS VALUE IN BYTE 2 OF VROT.
* 
*         ENTRY  (X7) = LOAN STATUS VALUE.
* 
*         EXIT   (X7) = UNCHANGED.
* 
*         USES   A - 1, 6.
*                X - 0, 1, 6. 
  
  
 ILV      SUBR               ENTRY/EXIT 
          SA1    A0+VROT     INSERT LOAN STATUS VALUE IN VROT 
          MX0    -12
          LX0    24-0 
          BX6    X0*X1
          LX1    59-0 
          PL     X1,PCSX     IF VROT BUSY 
          LX7    24-0 
          BX6    X6+X7
          SA6    A1          REWRITE VROT 
          LX7    0-24        REALIGN LOAN STATUS VALUE
          EQ     ILVX        RETURN 
 IPM      SPACE  4,15 
**        IPM - ISSUE PROMPT MESSAGE. 
* 
*         EXIT   (X6) .NE. 0, IF PROMPT WAS ASSIGNED TO TERMINAL, 
*                             OR *MSG* BLOCK ALREADY SENT.
*                     .EQ. 0, IF POT WAS NOT AVAILABLE FOR PROMPT.
* 
*         USES   X - 1, 2, 3, 6.
*                A - 1, 3.
*                B - 3, 4.
* 
*         CALLS  ACD. 
  
  
 IPM      SUBR               ENTRY/EXIT 
          SA1    A0+VROT     CHECK QUEUED INPUT AVAILABLE 
          TA3    B2,VMST
          MX2    -12
          BX3    -X2*X3 
          LX2    36 
          BX1    -X2*X1 
          BX6    X1+X3
          NZ     X6,IPMX     IF INPUT QUEUED, DO NOT SEND PROMPT
          SA1    A0+VDPT     CHECK INPUT MODE 
          SX2    140000B
          SA3    A0+VSTT     CHECK PROMPT MODE
          BX2    X1*X2
          LX3    59-53
          SX6    DMBI        SET NULL MESSAGE ADDRESS 
          SB4    B1+B1       SET TEXT LENGTH
          SB3    B0 
          NG     X3,IPM1     IF PROMPT OFF
          NZ     X2,IPM1     IF TRANSPARENT OR EXTENDED MODE
          LX3    59-55-6
          NG     X3,IPM1     IF USER EFFECT MODE
          SX6    DMIP        SET INPUT PROMPT ADDRESS 
          RJ     ACD         ASSIGN CANNED DATA MESSAGE 
          EQ     IPMX        EXIT 
  
 IPM1     TA3    B2,VMST     READ VMST ENTRY
          LX3    59-53
          NG     X3,IPMX     IF *MSG* BLOCK SENT, EXIT
          RJ     ACD         ASSIGN CANNED DATA MESSAGE 
          EQ     IPMX        EXIT 
 ISW      SPACE  4,10 
**        ISW - ISSUE SHUTDOWN WARNING MESSAGE. 
* 
*         CALLS  ACD, CBL.
  
  
 ISW      SUBR               ENTRY/EXIT 
          RJ     CBL         CHECK BLOCK LIMIT
          NZ     X6,ISWX     IF TERMINAL AT BLOCK LIMIT 
  
*         CHECK FOR BREAK IN PROGRESS, WARNING SENT, OR 
*         END CONNECTION. 
  
          TA1    B2,VMST     READ VMST ENTRY
          SX6    7B          SET BIT MASK 
          LX6    55-0 
          BX6    X6*X1
          NZ     X6,ISWX     IF ANY OF THE ABOVE, RETURN
  
*         CHECK FOR JOB ACTIVE OR OUTPUT ON MASS STORAGE. 
  
          SA1    A0+VROT     READ VROT
          SX6    26B
          BX6    X6*X1
          NZ     X6,ISWX     IF ANY OF THE ABOVE, RETURN
  
*         CHECK FOR OUTPUT CONTINUATION OR LOGOUT.
  
          SA2    A0+VSTT     READ VSTT
          LX1    59-29
          LX2    59-48
          NG     X1,ISWX     IF OUTPUT CONTINUATION 
          NG     X2,ISWX     IF LOGOUT
  
*         CHECK FOR AUTO MODE INPUT.
  
          SA1    A0+VDCT     READ VDCT
          SB3    B0          INDICATE NO POT AVAILABLE FOR MESSAGE
          LX1    59-49
          NG     X1,ISWX     IF AUTO MODE, RETURN 
  
*         ASSIGN MESSAGE. 
  
          SX6    DMSH        MESSAGE ADDRESS
          SB4    DMSHL       MESSAGE LENGTH 
          RJ     ACD         ASSIGN MESSAGE 
          ZR     X6,ISWX     IF MESSAGE NOT ASSIGNED, RETURN
  
*         SET MESSAGE-ISSUED STATUS.
  
          TA1    B2,VMST     READ VMST
          SX6    B1          SET BIT
          LX6    56-0 
          BX6    X1+X6
          SA6    A1          REWRITE VMST 
          EQ     ISWX        RETURN 
 PDR      SPACE  4,10 
**        PDR - PROCESS DRIVER REENTRY. 
* 
*         ENTRY  (VCHT) = REENTRY PARAMETERS. 
* 
*         EXIT   REENTRY PROCESSED. 
*                (X6) = ZERO IF NO REENTRY PRESENT. 
* 
*         CALLS  PCS. 
  
  
 PDR      SUBR               ENTRY/EXIT 
          SA1    A0+VCHT     READ VCHT
          BX6    X6-X6       ASSUME NO REENTRY
          MX2    36 
          BX3    X2*X1       MASK REENTRY 
          ZR     X3,PDRX     IF NO REENTRY, RETURN
          BX6    -X2*X1      CLEAR REENTRY
          AX3    24 
          SA6    A1          REWRITE VCHT 
          BX5    -X2*X3      (X5) = X7 AND B3 REENTRY PARAMETERS
          SX1    B2 
          LX5    12 
          IX5    X5+X1       INSERT (X5) TERMINAL NUMBER
          AX3    24 
          MX2    -12
          BX3    -X2*X3 
          SB7    X3+NDR      SET REENTRY ADDRESS
          RJ     PCS         EXECUTE REENTRY
          SX6    B1+         INDICATE REENTRY PROCESSED 
          EQ     PDRX        RETURN 
 PIN      SPACE  4,30 
**        PIN - PROCESS INPUT DATA. 
* 
*         TRANSLATES INPUT DATA AND PASSES INPUT TO EXECUTIVE.
* 
*         ENTRY  (DIOF) = DIRECT INPUT FLAG.
*                (RCVB) = INPUT DATA. 
*                (RCVH) = INPUT MESSAGE HEADER. 
*                (VDPT) = CURRENT POSITION IN POT.
* 
*         EXIT   (X6) = ZERO IF NOT ENOUGH POTS FOR TRANSLATION.
*                (VDPT) = UPDATED.
*                (X0) = POSITIVE VALUE IF OVERFLOW OCCURRED.
* 
*         CALLS  EIL, ETX, IVD, VBX, VDX. 
  
  
 PIN      SUBR               ENTRY/EXIT 
  
*         INITIALIZE TRANSLATOR CALL PARAMETERS.
  
          SA4    RCVH        READ MESSAGE HEADER
          SA5    A0+VDPT     READ VDPT
          MX6    -12
          BX2    -X6*X4      MASK TEXT LENGTH 
          BX3    -X6*X5      OLD CHARACTER COUNT
          SB7    X2          (B7) = TEXT LENGTH IN CHARACTERS 
          IX1    X2+X3       CUMULATIVE CHARACTER COUNT 
          SX0    X1-VXLL-1
          LX2    18 
          PL     X0,PINX     IF OVERFLOW OCCURRED 
          SA3    A0+VDCT
          BX6    X3 
          LX6    59-47
          NG     X6,PINX     IF CONNECTION IS LOANED
          NE     B7,B1,PIN1  IF NOT ONE CHARACTER MESSAGE 
          LX6    59-50-59+47
          NG     X6,PIN8     IF TEXT MODE 
  
*         SET UP RCCW.
  
 PIN1     SX6    RCVB        FWA BUFFER 
          BX6    X6+X2       COMBINE FWA AND TEXT LENGTH
          SX0    B1 
          LX0    13 
          BX2    X0*X5       CHECK BLK BIT
          NZ     X2,PIN2     IF NOT FIRST BLOCK 
          MX2    1
          BX6    X2+X6       SET FIRST BLOCK BIT
 PIN2     SA6    RCCW 
          MX6    -12
          BX6    X5*X6       CLEAR OLD CC 
          SA4    RCVH 
          BX6    X1+X6       INSERT CUMULATIVE CC 
          BX6    -X0*X6      CLEAR BLK RECEIVED 
          BX1    X4 
          AX1    54 
          SX7    X1+
          SX1    X1-BTMS
          SA7    PINA        SAVE BLOCK TYPE
          ZR     X1,PIN3     IF MSG BLOCK 
          BX6    X0+X6       SET BLK RECEIVED 
 PIN3     SA6    A5+         REWRITE VDPT 
  
*         PROCESS RESOURCE LIMIT FOR TRANSPARENT MODE 
  
          SA1    A0+VROT     CHECK FOR RESOURCE LIMIT 
          LX1    59-19
          MX2    2
          BX5    X2*X1
          ZR     X5,PIN4     IF NO LIMIT
          MX2    1           CLEAR BINARY DATA BIT IN RCVH
          LX2    14-59
          BX7    -X2*X4 
          SA7    A4          REWRITE RCVH 
          BX4    X7 
  
*         SELECT TRANSLATION PROCESSOR. 
  
 PIN4     SX0    4000B       SET BINARY DATA BIT
          SX2    5           CHARACTERS PER WORD
          SX5    7777B       MASK FOR 12 BIT CHARACTERS 
          SX7    B7          SET CHARACTER COUNT FOR ENTRY TO *IVD* 
          LX4    59-14       CHECK HEADER *XPT* BIT 
          LX3    59-52       CHECK ASCII8 MODE
          NG     X4,PIN6     IF BINARY DATA 
          LX4    X3,B1
          LX6    59-14       CHECK TRANSPARENT MODE 
          NG     X4,PIN5     IF EXTENDED MODE 
          NG     X6,PIN5     IF TRANSPARENT MODE
          SX0    B1 
          LX0    58-0        SET ASCII8 BIT 
          NG     X3,PIN6     IF ASCII8
          MX5    7
          LX5    6
          SX2    10D         CHARACTERS PER WORD
 PIN5     RJ     IVD         INITIALIZE VDPT AND POT CHAIN
          ZR     X6,PINX     IF NO POTS 
          RJ     VDX         TRANSLATE TO 6/12
          EQ     PIN7        COMPLETE PROCESSING
  
 PIN6     RJ     IVD         INITIALIZE VDPT AND POT CHAIN
          ZR     X6,PINX     IF NO POTS 
          RJ     VBX         TRANSLATE BINARY DATA
 PIN7     SA1    A0+VDPT
          BX0    X1 
          LX0    59-13
          NG     X0,PINX     IF NOT MSG BLOCK 
          SA2    DIOF 
          MX0    1
          NZ     X2,PINX     IF DIRECT I/O REQUEST
          RJ     EIL         ENTER END-OF-LINE
  
*         CLEAR MODE BITS AND CHARACTER COUNT.
  
          SA1    A0+VDPT     READ VDPT
          MX6    -16
          MX0    1           SET NO OVERFLOW STATUS 
          BX7    X6*X1       CLEAR BITS 
          SA2    A0+VROT     CHECK FOR RESOURCE LIMIT 
          MX5    2
          LX2    59-19
          BX5    X5*X2
          ZR     X5,PIN7.1   IF NO LIMIT HAS OCCURRED 
          LX1    59-15
          BX2    X0*X1       PRESERVE VALUE OF BINARY BIT 
          LX2    15-59
          BX7    X7+X2
 PIN7.1   SA7    A1+         REWRITE VDPT 
          EQ     PINX        RETURN 
  
*         PROCESS TEXT MODE EXIT. 
  
 PIN8     SA4    RCVB        READ INPUT DATA
          AX4    52 
          SX4    X4-ASC.ETX  CHECK FOR *ETX* CODE 
          NZ     X4,PIN1     IF NOT *ETX* 
          SB3    B0+
          RJ     ETX         EXIT FROM TEXT MODE
          SX6    B1 
          MX0    1           SET NORMAL RETURN
          EQ     PINX        RETURN 
  
 PINA     CON    0           BLOCK TYPE 
 PQO      SPACE  4,20 
**        PQO - PROCESS QUEUED OUTPUT.
* 
*         PROCESS THE NEXT OUTPUT MESSAGE QUEUED IN VSTT. 
*         FOR A DESCRIPTION OF HOW POT CHAINS OF DATA ARE LINKED
*         TOGETHER IN THE QUEUE, SEE THE NOTE AT THE BEGINNING
*         OF SUBROUTINE *ANM*.
* 
*         EXIT   (X6) = ZERO IF NO OUTPUT PRESENT.
* 
*         CALLS  CBL, DQO, ERQ, GPL, IBC, SCS, SRE, TDM, UAC, UOC.
  
  
 PQO      SUBR               ENTRY/EXIT 
          TA1    B2,VMST
          NG     X1,PQO0     IF TERMINAL IS ON LINE 
          RJ     DQO         DROP QUEUED OUTPUT 
 PQO0     RJ     CBL         CHECK BLOCK LIMIT
          NZ     X6,PQOX     IF AT BLOCK LIMIT
          SA1    A0+VSTT
          MX6    -12         MASK POT POINTER 
          BX6    -X6*X1 
          ZR     X6,PQOX     IF NO OUTPUT 
          SA1    A0+VDCT     CHECK CONNECTION 
          LX1    59-47
          NG     X1,PQO8     IF LOANED CONNECTION 
          SA3    A0+VDPT     READ VDPT
          LX3    59-16
          NG     X3,PQOX     IF INPUT INITIATED, RETURN 
          SB3    X6 
          LX6    3
          TA2    X6+1,VBMP
          AX6    3
          MX4    6           CHECK FOR BLOCK TYPE 
          BX4    X4*X2
          ZR     X4,PQO3     IF MESSAGE NEEDS TO BE TRANSLATED
          BX6    X2 
          SA6    SNDH        STORE HEADER 
          SB5    6
 PQO1     SA2    A2+B1       TRANSFER DATA INTO SEND BUFFER 
          SB5    B5-B1
          BX6    X2 
          SA6    A6+B1
          NZ     B5,PQO1     IF MORE DATA IN POT
          RJ     GPL
          SA2    B4-1 
          SB5    VCPC 
          NZ     B3,PQO1     IF MORE POTS CONTAINING DATA 
          SA1    SNDH 
          EQ     PQO6        SEND MESSAGE AND DROP POTS 
  
*         ENTRY POINT TO RESUME TRANSLATION OF DATA WHEN A
*         CHAIN OF OUTPUT HAD TO BE BROKEN INTO MORE THAN ONE 
*         DOWNLINE BLOCK.  AN EXAMPLE IS WHEN TRANSPARENT AND 
*         NORMAL DATA ARE MIXED IN THE SAME OUTPUT CHAIN. 
  
PQO2      BSS    0
          SA1    A0+VSTT     CHECK OUTPUT POT POINTER 
          MX6    -12
          BX6    -X6*X1 
          ZR     X6,PQOX     IF POTS HAVE BEEN DROPPED
          SB7    PQO2 
          RJ     CBL         CHECK BLOCK LIMIT
          NZ     X6,PCD      IF AT BLOCK LIMIT, REENTER 
          MX3    -3 
          BX2    -X3*X7      SET UP ENTRY CONDITIONS
          AX7    3
          BX7    -X3*X7 
          SX6    B3 
          SB6    X2 
          SB7    X7 
          EQ     PQO4        RESUME TRANSLATION 
  
 PQO3     SB6    2
          SB7    B0 
 PQO4     RJ     TDM         TRANSLATE DATA INTO BUFFER 
          SX7    B0+         CLEAR USER FORMAT EFFECTOR FLAG
          SA7    TDMG 
          NG     X6,PQO9     IF DATA COULD NOT BE TRANSLATED
          ZR     X6,PQO5     IF ENTIRE POT CHAIN TRANSLATED 
          BX7    X6 
          AX6    6           MAKE REENTRY FOR TRANSLATION CONTINUATION
          SB3    X6 
          SB7    PQO2 
          RJ     SRE
 PQO5     SA1    SNDH        CHECK FOR EMBEDDED FUNCTION REQUESTS 
          MX3    -12
          BX3    -X3*X1 
          ZR     X3,PQO8     IF ZERO LENGTH MESSAGE 
  
*         SET MESSAGE BLOCK SENT FLAG IF CURRENT MESSAGE IS A 
*         MESSAGE BLOCK.
  
 PQO6     TA5    B2,VMST
          AX1    54          EXTRACT BLOCK TYPE 
          SX3    B1 
          SX1    X1-BTMS
          LX3    53-0 
          BX7    -X3*X5      CLEAR PREVIOUS VALUE 
          NZ     X1,PQO7     IF NOT MESSAGE BLOCK 
          BX7    X3+X7       SET MESSAGE BLOCK FLAG 
 PQO7     SA7    A5 
          SX6    SNDH        TRANSMIT MESSAGE 
          SX7    SNDB 
          SB2    -B2
          RJ     SCS
          SA1    SNDH        UPDATE OUTPUT ACCOUNTING 
          SX7    B0+
          RJ     UAC
          RJ     IBC         INCREMENT BLOCK COUNT
 PQO8     SA1    A0+VCHT
          AX1    48 
          SX6    B1 
          NZ     X1,PQOX     IF A REENTRY WAS MADE, DO NOT DROP CHAIN 
 PQO9     RJ     UOC         UPDATE OUTPUT CHAINS 
          SX7    B0 
          SX6    /TLX/RES 
          RJ     ERQ         ENTER RESTART REQUEST
          SX6    B1 
          EQ     PQOX        RETURN 
 PRP      SPACE  4,15 
**        PRP - PROCESS RETURN TO PRIMARY.
* 
*         UPON RETURNING FROM A SECONDARY APPLICATION, CHECK LOGOUT 
*         AND INTERLOCK CONDITIONS, AND INSERT THE LOAN STATUS
*         VALUE IN VROT.
* 
*         ENTRY  (X7) = LOAN STATUS VALUE.
* 
*         EXIT   (X7) = UNCHANGED.
* 
*         USES   A - 1. 
*                B - 3. 
*                X - 1. 
* 
*         CALLS  ILV. 
  
  
 PRP      SUBR               ENTRY/EXIT 
          SB3    B0          CLEAR SUPERVISORY FUNCTION CODE
          SA1    A0+VSTT     CHECK LOGOUT BIT 
          LX1    59-48
          NG     X1,PCSX     IF LOGOUT IN PROGRESS
          RJ     ILV         INSERT LOAN STATUS VALUE IN VROT 
          EQ     PRPX        EXIT 
 QTI      SPACE  4,10 
**        QTI - QUEUE TYPEAHEAD INTERNALLY. 
* 
*         QUEUES INPUT DATA TO A DEPTH OF *TAPC* POTS, THEN 
*         INITIATES NAM TYPEAHEAD MODE TO PREVENT OVERFLOW. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6. 
*                B - 3, 4, 5, 7.
* 
*         CALLS  ASV, CTP, LEP, MVA, SRE. 
  
  
 QTI      SUBR               ENTRY/EXIT 
          SA1    RCVH        CALCULATE BUFFER LENGTH
          SB3    B0          START NEW POT CHAIN
          MX7    -12
          BX2    -X7*X1      CHARACTER COUNT
          LX2    1           TIMES TWO
          SX2    X2+14
          SX1    15 
          IX1    X2/X1       NUMBER OF WORDS IN MESSAGE 
          SB4    X1+B1       ADD ONE FOR THE HEADER 
          TA2    B2,VMST     CHECK FOR INPUT QUEUE OVERFLOW 
          AX1    3           MESSAGE POT COUNT
          MX7    -6 
          SB5    X1-77B 
          AX2    12 
          BX2    -X7*X2 
          SB5    X2+B5       TOTAL POT COUNT - 77B
          GE     B5,QTI5     IF THIS MESSAGE WILL OVERFLOW THE QUEUE
          SB5    B1          SKIP FIRST WORD IN POT CHAIN 
          SX6    RCVH        SET MESSAGE ADDRESS
          RJ     CTP         COPY MESSAGE TO POTS 
          SB5    X6          SET POT COUNT
          PX7    X7,B5
          SA6    QTIA        SAVE POT COUNT 
          SA7    B4          SET LINK TO LAST POT 
  
*         LINK ONTO INPUT POT CHAIN.
  
          TA1    B2,VMST     GET CURRENT POT POINTER
          MX6    -12
          BX6    -X6*X1 
          SX2    B3          TRAILING POT 
          NZ     X6,QTI2     IF CURRENT CHAIN 
          BX6    X1+X2
          SA6    A1          REWRITE VMST OR CHAIN HEADER 
          EQ     QTI3        CHECK NAM TYPEAHEAD
  
 QTI2     SB3    X6          LEADING POT
          RJ     LEP         LINK EXISTING POT CHAINS 
 QTI3     TA2    B2,VMST     CHECK NAM TYPEAHEAD MODE 
          SA1    QTIA 
          LX1    12          ADD POT COUNT
          MX6    -6 
          IX7    X1+X2
          SB3    B0 
          SA7    A2+         REWRITE VMST 
          LX2    59-51
          NG     X2,QTIX     IF NAM TYPEAHEAD ALREADY IN EFFECT 
          AX7    12 
          BX1    -X6*X7 
          BX6    X6-X6       INDICATE DEFAULT MESSAGE HEADER
          SX1    X1-TAPC+1
          NG     X1,QTIX     IF NAM TYPEAHEAD NOT REQUIRED
          SB4    B1          TEXT LENGTH
          SX7    LSTHDX      MESSAGE ADDRESS
          RJ     ASV         ASSIGN SUPERVISORY MESSAGE 
          NZ     X6,QTI4     IF ISSUED
          SB3    B0 
          BX7    X7-X7
          SB7    ITM
          RJ     SRE         SET REENTRY
          EQ     QTIX        EXIT 
  
 QTI4     TA1    B2,VMST     SET NAM TYPEAHEAD IN EFFECT
          SX6    B1 
          LX6    51-0 
          BX6    X6+X1
          SA6    A1          REWRITE VMST 
          EQ     QTIX        EXIT 
  
*         SEND MESSAGE TO TERMINAL AND DISCARD INPUT. 
  
 QTI5     SMA    X6,( TYPEAHEAD OVERFLOW, REENTER INPUT.) 
          SB4    B0+
          RJ     MVA         MOVE MESSAGE TO OUTPUT QUEUE 
          SA1    QTIB        COUNT OVERFLOW OCCURRENCE
          SX6    B1 
          IX6    X1+X6
          SA6    A1 
          EQ     QTIX        EXIT 
  
  
 QTIA     CON    0           POT COUNT
 QTIB     CON    0           OVERFLOW OCCURRENCE COUNT
 RIP      SPACE  4,10 
**        RIP - RESET INPUT POINTERS IN *VDPT*. 
* 
*         ENTRY  (A0) = TERMINAL TABLE ADDRESS. 
* 
*         EXIT   (VDPT) RESET TO LAST EOL.
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 6.
  
  
 RIP      SUBR               ENTRY/EXIT 
          SA1    A0+VDPT
          MX2    -9 
          LX2    24 
          BX6    X2*X1       CLEAR WORD COUNT IN CURRENT POT
          LX2    3
          BX2    -X2*X6      GET FIRST WORD 
          AX2    3
          BX6    X6+X2
          MX2    -12
          LX2    36 
          BX6    X2*X6       CLEAR LAST POT 
          LX2    12 
          BX2    -X2*X1 
          LX2    48 
          BX6    X2+X6       REPLACE WITH FIRST POT 
          SA6    A1          REWRITE *VDPT* 
          EQ     RIPX        EXIT 
 SAB      SPACE  4,10 
**        SAB - SET TERMINAL ACTIVITY BIT.
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
* 
*         EXIT   (VNAT) = BIT SET.
*         (MGRB) = SET IF NOT TERMINAL BLOCK LIMIT. 
* 
*         USES   A - 2, 6.
*                X - 2, 6.
*                B - 5. 
* 
*         CALLS  CBL. 
  
  
 SAB      SUBR               ENTRY/EXIT 
          TX2    B2,-VNTP    RELATIVE TERMINAL ORDINAL
          SX6    37B
          BX6    X6*X2       TERMINAL ORDINAL MOD 32
          AX2    5           TERMINAL ORDINAL/32
          TA2    X2,VNAT     READ TABLE ENTRY 
          SB5    X6-59
          MX6    -1 
          AX6    X6,B5
          BX6    -X6+X2      SET BIT
          SA6    A2          REWRITE TABLE ENTRY
          RJ     CBL         CHECK BLOCK LIMIT
          NZ     X6,SABX     IF NO MORE BLOCKS ALLOWED
          SX6    B1+
          SA6    MGRB 
          EQ     SABX        RETURN 
 SFE      SPACE  4,10 
**        SFE - SUPERVISORY FUNCTION CODE ERROR PROCESSOR.
* 
*         ISSUES SUPERVISORY MESSAGE ERROR DAYFILE MESSAGE. 
* 
*         ENTRY  (B2) = TERMINAL NUMBER (ACN).
* 
*         CALLS  IDM, WOD.
  
  
 SFE      SUBR               ENTRY/EXIT 
          SA1    RCVH        PUT RCVH INTO MESSAGE
          RJ     WOD         CONVERT WORD TO OCTAL DISPLAY CODE 
          SA6    SFEB 
          SA7    A6+1 
          SA1    RCVB        ADD RCVB TO MESSAGE
          RJ     WOD         CONVERT WORD TO OCTAL DISPLAY CODE 
          SA6    A7+B1
          SA7    A6+B1
          SX6    SFEA        SET MESSAGE ADDRESS
          RJ     IDM         ISSUE DAYFILE MESSAGE
          SA1    ISMC        UPDATE INCORRECT SUPERVISORY MESSAGE COUNT 
          SX7    B1 
          IX7    X1+X7
          SA7    A1 
          EQ     SFEX        RETURN 
  
 SFEA     DATA   10L SMP ERR
 SFEB     BSSZ   4
 SHA      SPACE  4,20 
**        SHA - SET HIGHEST ACTIVE ACN NUMBER.
* 
*         EXIT   (HACN) = HIGHEST ACTIVE ACN NUMBER.
*                       = 0 IF NO TERMINALS ACTIVE. 
*                (X6)   = (HACN). 
*                       = 0 IF NO TERMINALS ACTIVE. 
*                (B6)   = FIRST NETWORK TERMINAL NUMBER.
*                (B7)   = (HACN). 
* 
*         USES   A - 2, 6.
*                X - 2, 6.
*                B - 6, 7.
  
  
 SHA      SUBR               ENTRY/EXIT 
          TB6    B0,VNTP     SET SEARCH LIMITS
          TB7    B0,VNTP,LWA
 SHA1     TA2    B7,VMST     READ VMST ENTRY
          NZ     X2,SHA2     IF TERMINAL ACTIVE 
          SB7    B7-B1       DECREMENT TERMINAL NUMBER
          GE     B7,B6,SHA1  IF NOT END OF TERMINALS, LOOP
          SB7    B0          ZERO HIGHEST ACTIVE ACN
 SHA2     SX6    B7+         SET HIGHEST ACTIVE ACN 
          SA6    HACN 
          EQ     SHAX        RETURN 
 SOM      SPACE  4,15 
**        SOM - SEND OVERFLOW MESSAGE.
* 
*         SEND EITHER *OVL* OR NULL MESSAGE TO NETWORK
*         DEPENDING ON CHARACTER COUNT IN *VDPT*. 
* 
*         ENTRY  (VDPT) BITS 11-0 = CHARACTER COUNT.
* 
*         EXIT   (VDPT) BITS 23-0 = 0 IF MESSAGE SENT.
* 
*         USES   X - 1, 2, 3, 6.
*                A - 1, 2, 6. 
*                B - 3, 4, 7. 
* 
*         CALLS  ACD, SRE.
  
  
 SOM2     SX2    40000B      PRESERVE ASCII INPUT MODE
          BX3    X3+X2
 SOM3     SA2    A0+VDPT     CLEAR FLAGS AND CHARACTER COUNT
          BX6    X3*X2
          SA6    A2          REWRITE *VDPT* 
  
 SOM      SUBR               ENTRY/EXIT 
          TA1    B2,VMST     CHECK BREAK IN PROGRESS
          SA2    A0+VSTT     CHECK LOGOUT FLAG
          LX1    59-57
          LX2    59-48
          MX3    36 
          BX2    X1+X2
          LX1    59-55-59+57
          BX2    X1+X2
          NG     X2,SOM3     IF LOGOUT, END CONNECTION, OR BREAK
          SX6    DMBI        SET NULL MESSAGE 
          SB4    B1+B1
          MX1    -12
          SA2    A0+VDPT     CHECK CHARACTER COUNT
          BX1    -X1*X2 
          SB3    B0 
          SX1    X1-VXLL
          NG     X1,SOM1     IF NOT OVERFLOW CONDITION
          SX6    DMOV        SET *OVL* MESSAGE
          SB4    DMOVL
 SOM1     RJ     ACD         ASSIGN MESSAGE 
          SA2    A0+VCHT     CHECK DRIVER REENTRY 
          MX3    36 
          BX2    X3*X2
          NZ     X6,SOM2     IF MESSAGE ASSIGNED
          NZ     X2,SOMX     IF REENTRY ALREADY ASSIGNED
          SB7    AOM
          RJ     SRE         SET REENTRY
          EQ     SOMX        EXIT 
 SRE      SPACE  4,20 
**        SRE - SET/CLEAR DRIVER REENTRY. 
* 
*         ENTRY  (B7) = REENTRY ADDRESS IF NONZERO. 
*                (B3) = REENTRY POT POINTER.
*                (X7) = 12 BIT REENTRY PARAMETER. 
* 
*         EXIT   (VCHT(0)) = REENTRY ADDRESS RELATIVE TO *NDR*. 
*                (VCHT(1)) = (X7) PARAMETER.
*                (VCHT(2)) = (B3) POT POINTER.
* 
*         CALLS  ABT, DPT, SAB. 
  
  
 SRE      SUBR               ENTRY/EXIT 
          ZR     B7,SRE1     IF NO REENTRY ADDRESS
          RJ     SAB         SET ACTIVITY BIT 
 SRE1     SA2    A0+VCHT     READ VCHT
          MX3    36 
          BX0    X0-X0
          SX4    B7+         SET REENTRY ADDRESS
          ZR     X4,SRE2     IF NO REENTRY TO BE SET
          SX4    X4-NDR      BIAS REENTRY ADDRESS 
          MX6    -12
          LX4    12 
          BX7    -X6*X7      TRUNCATE (X7) TO 12 BITS 
          SX6    B3+         SET POT POINTER
          BX4    X4+X7       MERGE PARAMETERS 
          LX4    12 
          BX4    X4+X6
          LX4    24 
          BX0    X3*X2       GET OLD PARAMETERS 
 SRE2     BX6    -X3*X2      INSERT NEW PARAMETERS
          MX7    -12
          BX6    X6+X4
          AX2    24 
          SA6    A2          REWRITE VCHT 
          BX6    -X7*X2      MASK PRIOR REENTRY POT POINTER 
          AX2    24 
          BX2    -X7*X2      GET REENTRY INDEX
          SB3    X2+NDR-PQO2
          ZR     B3,SRE2.1   IF TRANSLATION REENTRY 
          SB3    X6 
          SB4    B0 
 SRE2.1   SA2    A0+VDCT     CLEAR INTERRUPT COMPLETE 
          MX6    59 
          LX6    58-0 
          BX6    X2*X6
          SA6    A2          REWRITE VDCT 
          MX7    24 
          BX6    X7*X4       (X6) = REENTRY ADDRESS AND X7
          SA2    SRE         GET RETURN ADDRESS 
          MX7    18 
          LX7    -12
          BX2    X7*X2
          LX2    -18
          BX6    X6+X2       MERGE RETURN ADDRESS IN X6 
          SX2    B2          GET TERMINAL NUMBER
          BX6    X6+X2       MERGE TERMINAL NUMBER IN X6
          SA2    SREC        GET BUFFER POINTER 
          SA6    X2          STORE REENTRY INFORMATION IN BUFFER
          SX6    X2+B1       INCREMENT BUFFER POINTER 
          SB5    X6-SREC
          NG     B5,SRE2.2   IF NOT AT END OF BUFFER
          SX6    SREB        RESET POINTER TO BEGINNING OF BUFFER 
 SRE2.2   SA6    SREC        STORE BUFFER POINTER 
          ZR     X0,SRE3     IF NO ABORT CONDITION
          SX7    B7-HUP 
          ZR     X7,SRE3     IF LOGOUT REQUEST
          SX7    B7-CNB 
          ZR     X7,SRE3     IF CONNECTION BROKEN REQUEST 
          BX6    X0 
          SA6    SREA 
          SX6    3RSRE
          RJ     ABT         PROCESS ABORT
 SRE3     ZR     B3,SREX     IF NO POTS TO DROP 
          RJ     DPT
          EQ     SREX        RETURN 
  
 SREA     CON    0           SAVE OLD REENTRY 
  
*         12/REENTRY ADDR, 12/X7, 6/, 18/RETURN ADDR, 12/TN 
  
 SREB     BSSZ   20          REENTRY INFORMATION BUFFER 
 SREC     CON    SREB        BUFFER POINTER 
 UAC      SPACE  4,20 
**        UAC - UPDATE CHARACTER ACCOUNTING.
* 
*         ADDS BLOCK CHARACTER COUNT TO ACCUMULATOR IN VCHT AND 
*         ENTERS EXECUTIVE ACCOUNTING REQUEST IF ACCUMLATOR 
*         OVERFLOW. 
* 
*         ENTRY  (X1) = BLOCK HEADER. 
*                (X7) = 0 IF OUTPUT ACCOUNTING. 
*                     = 1 IF INPUT ACCOUNTING.
*                (B2) = TERMINAL NUMBER.
* 
*         EXIT   (A0)   = (B2) TERMINAL TABLE ADDRESS.
*                (VCHT) = ACCUMULATOR UPDATED.
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 3, 6.
*                B - 6. 
* 
*         CALLS  ERQ. 
  
  
 UAC      SUBR               ENTRY/EXIT 
  
*         INITIALIZE ACN AND TERMINAL TABLE ADDRESS.
  
          SB6    X7          (B6) = ACCOUNTING TYPE 
          MX7    -12
          TTADD  B2,A0,X2,X3  (A0) = TERMINAL TABLE FWA 
          SA2    A0+VCHT     READ VCHT
          BX3    -X7*X1      (X3) = TEXT LENGTH IN ACT UNITS
          ZR     B6,UAC1     IF OUTPUT ACCOUNTING 
          LX2    -12         SHIFT INPUT ACCOUNTING ACCUMULATOR 
  
*         ADD CHARACTER COUNT TO ACCUMULATOR. 
  
 UAC1     AX1    20          GET CHARACTER TYPE 
          MX6    -4 
          BX1    -X6*X1      (X1) = CHARACTER TYPE CODE (ACT) 
          SX6    B0 
          SX1    X1-TUACL    CHECK ACT
          PL     X1,UACX     IF INCORRECT, RETURN 
          SA1    X1+TUAC+TUACL  READ CONVERSION FACTOR
          IX3    X3*X1       CONVERT TLC TO CHARACTER COUNT 
          BX6    -X7*X2      MASK VCHT ACCUMULATOR
          IX6    X6+X3       ADD CHARACTER COUNT
          BX2    X7*X2       CLEAR VCHT BYTE
          BX3    -X7*X6      TRUNCATE TOTAL TO 12 BITS
          IX7    X3+X2       INSERT UPDATED VALUE 
          AX6    12          SHIFT OFF ALL BUT OVERFLOW 
          ZR     B6,UAC2     IF OUTPUT ACCOUNTING 
          LX7    12          RESTORE VCHT POSITION
 UAC2     SA7    A2          REWRITE VCHT 
          SX7    B6          RESTORE (X7) 
          ZR     X6,UACX     IF NO OVERFLOW, RETURN 
  
*         CALL EXECUTIVE TO ENTER ACCOUNTING MESSAGE. 
  
          SX6    /TLX/IAM    ENTER REQUEST
          SB3    B0+
          RJ     ERQ
          EQ     UACX        RETURN 
  
  
*         TUAC - TABLE OF ACCOUNTING CONVERSION FACTORS.
  
 TUAC     BSS    0
          LOC    0
  
          CON    1
          CON    10 
          CON    1
          CON    1
          CON    1
  
          LOC    *O 
 TUACL    EQU    *-TUAC 
 UNQ      SPACE  4,10 
**        UNQ - UNQUEUE INTERNAL TYPEAHEAD INPUT. 
* 
*         USES   X - 1, 2, 3, 5, 6, 7.
*                A - 1, 2, 5, 6.
*                B - 3, 4, 5, 7.
* 
*         CALLS  ABT, ASV, DLP, DPT, GPL, SRE.
  
  
 UNQ      SUBR               ENTRY/EXIT 
          TA2    B2,VMST     CHECK INTERNAL QUEUE 
          MX3    -12
          BX1    -X3*X2 
          ZR     X1,UNQX     IF NO QUEUE
          BX5    X1          SAVE CURRENT CHAIN POINTER 
          LX1    3           GET POINTER TO NEXT CHAIN
          TA1    X1,VBMP
          SX3    X1+
          NZ     X3,UNQ0     IF LAST POT POINTER PRESENT
  
*         PROCESS ERROR IN TYPEAHEAD LINKAGE. 
  
          SX6    3RUNQ
          RJ     ABT
          TA2    B2,VMST     GET INTERNAL TYPEAHEAD 
          MX3    -12
          BX3    -X3*X2 
          SB3    X3 
          SB4    B0 
          RJ     DPT         DROP POT CHAIN 
          SA2    A2 
          MX3    42 
          BX6    X3*X2       CLEAR TYPEAHEAD POT(S) AND COUNT 
          SA6    A2 
          EQ     UNQ2.1      INGNORE TYPEAHEAD AND CONTINUE 
  
*         UNQUEUE FIRST POT CHAIN IN TYPEAHEAD QUEUE. 
  
 UNQ0     RJ     DLP         DELINK POT CHAIN 
          UX1,B5 X1 
          MX3    -6 
          LX3    12 
          BX3    -X3*X2      PREVIOUS POT COUNT 
          SX6    B5 
          LX6    12 
          IX3    X3-X6       NEW POT COUNT
          MX6    42 
          BX6    X6*X2
          ZR     X7,UNQ1     IF NO POT QUEUED 
          BX6    X7+X6       MERGE POT POINTER
          NG     X3,UNQ1     IF BAD POT COUNT 
          BX6    X3+X6       MERGE POT COUNT
 UNQ1     SA6    A2          REWRITE VMST 
          SB3    X5 
          BX1    X5          SAVE POT POINTER 
          LX5    3
          TB4    X5,VBMP
          SB5    VCPC-2 
          SA5    B4+B1
          BX6    X5 
          SA6    RCVH 
 UNQ2     SA5    A5+B1       TRANSFER FROM POT TO RCVB
          BX6    X5 
          SA6    A6+B1
          SB5    B5-B1
          NZ     B5,UNQ2     IF MORE DATA IN POT
          RJ     GPL         GET POT LINK 
          SA5    B4-B1
          SB5    VCPC 
          NZ     B3,UNQ2     IF MORE DATA IN POTS 
  
*         DROP POTS.
  
          SB3    X1 
          SB4    B0 
          RJ     DPT         DROP POT CHAIN 
  
*         CHECK NAM TYPEAHEAD MODE. 
  
          TA1    B2,VMST
          MX6    -6          CHECK POT COUNT
          AX1    12 
          BX6    -X6*X1 
          LX1    59-51+12 
          PL     X1,UNQX     IF ALREADY OFF 
          SX6    X6-TAPT
          PL     X6,UNQX     IF THRESHOLD NOT REACHED 
 UNQ2.1   SB4    B1          SET TEXT LENGTH
          BX6    X6-X6       USE DEFAULT HEADER 
          SX7    LSTFDX      SET TEXT ADDRESS 
          RJ     ASV         ASSIGN SUPERVISORY MESSAGE 
          NZ     X6,UNQ3     IF MESSAGE ASSIGNED
          SB3    B0 
          BX7    X7-X7
          SB7    CTM         SET REENTRY TO CANCEL TYPEAHEAD MODE 
          RJ     SRE         SET REENTRY
          EQ     UNQX        EXIT 
  
 UNQ3     TA1    B2,VMST     CLEAR TYPEAHEAD MODE 
          MX6    59 
          LX6    51-0 
          BX6    X1*X6
          SA6    A1          REWRITE VMST 
          EQ     UNQX        EXIT 
 UOC      SPACE  4,15 
**        UOC - UPDATE OUTPUT CHAINS. 
* 
*         ENTRY  (VSTT BYTE 4) = CURRENT OUTPUT POT CHAIN POINTER.
* 
*         EXIT   (VSTT BYTE 4) = NEW OUTPUT POT CHAIN POINTER, IF 
*                ANY - ZERO MEANS NO MORE OUTPUT. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 6, 7.
*                B - 3, 4.
* 
*         CALLS  DPT. 
  
  
 UOC      SUBR               ENTRY/EXIT 
          SA1    A0+VSTT
          MX6    -12
          BX2    -X6*X1 
          SB3    X2 
          BX7    X1*X6       CLEAR VSTT POT POINTER 
          LX2    3
          TA2    X2,VBMP
          MX1    6           UPDATE POT COUNT IN VSTT 
          BX3    -X6*X2      GET LINK TO NEXT CHAIN 
          LX1    30 
          BX4    X1*X7       OLD POT COUNT
          BX7    -X1*X7      CLEAR VSTT COUNT 
          BX1    X1*X2       MESSAGE POT COUNT
          ZR     X3,UOC2     IF NO NEXT CHAIN 
          IX1    X4-X1       NEW POT COUNT
          NG     X1,UOC1     IF NEGATIVE POT COUNT
          BX7    X7+X1
 UOC1     LX6    12 
          BX6    -X6*X2      GET LINK TO LAST CHAIN 
          BX7    X3+X7       STORE NEXT POT CHAIN IN VSTT 
          LX3    3
          TA4    X3,VBMP
          BX6    X4+X6
          SA6    A4 
 UOC2     SA7    A1          REWRITE VSTT 
          NG     X2,UOC3     IF *0003* BYTE AUTO MODE 
          SB4    B0 
          RJ     DPT
          EQ     UOCX        RETURN 
  
 UOC3     SA1    A0+VDCT     SAVE AUTO MODE POT POINTER 
          LX1    -24
          MX4    -12
          BX5    -X4*X1      GET POT
          BX1    X4*X1       CLEAR FIELD
          SX7    B3 
          BX7    -X4*X7 
          BX7    X1+X7
          LX7    24 
          SX3    102B        SET AUTO MODE AND READ DATA BITS 
          LX3    48 
          BX7    X3+X7
          SA7    A1 
          SB3    B0 
          ZR     X5,UOCX     IF NO POT
          SB4    B0 
          SB3    X5 
          RJ     DPT
          EQ     UOCX        RETURN 
 VAC      SPACE  4,20 
**        VAC - VALIDATE ACN. 
* 
*         CHECK ACN TO SEE IF ON-LINE NETWORK TERMINAL. 
* 
*         ENTRY  (B2) = ACN.
* 
*         EXIT   (X6) = NEGATIVE IF INCORRECT ACN.
*                (X2) = VMST ENTRY. 
*                (A2) = ADDRESS OF VMST ENTRY.
* 
*         USES   A - 2. 
*                X - 2, 6.
  
  
 VAC      SUBR               ENTRY/EXIT 
          TX6    B2,-VNTP    COMPARE LOWER LIMIT
          NG     X6,VACX     IF INCORRECT 
          SX6    B2-B1       CHECK UPPER LIMIT
          TX6    X6,-VNTP,LWA 
          BX6    -X6         COMPLEMENT 
          NG     X6,VACX     IF INCORRECT NUMBER
          TA2    B2,VMST     READ VMST
          NZ     X2,VACX     IF ON-LINE 
          SX6    -1 
          EQ     VACX        RETURN 
 XRJ      SPACE  4,20 
**        XRJ - TRANSFER RETURN JUMP. 
* 
*         CHANGE ADDRESS FIELD OF RETURN JUMP INSTRUCTION 
*         AND RE-EXECUTE MODIFIED INSTRUCTION.  THE RETURN
*         JUMP INSTUCTION MUST BEGIN IN THE FIRST PARCEL OF 
*         THE INSTRUCTION WORD. 
* 
*         ENTRY  (X4) = 12, 18/ADR+1, 30/.
*                (X5) = NAD.
*                   ADR = ADRESS OF RETURN JUMP INSTUCTION. 
*                   NAD = NEW ADDRESS TO BE INSERTED. 
* 
*         EXIT   TO MODIFIED INSTRUCTION. 
* 
*         USES   A - 4, 6.
*                X - 4, 6.
*                B - 7. 
  
  
 XRJ      BSS    0           ENTRY
          AX4    30          SET ADDRESS OF RETURN JUMP 
          SB7    X4-1 
          SA4    B7          READ INSTRUCTION 
          MX6    -18
          LX4    30          CLEAR ADDRESS FIELD
          BX6    X6*X4
          BX6    X6+X5       INSERT NEW ADDRESS 
          LX6    30          REWRITE INSTRUCTION
          SA6    A4 
          JP     B7          RE-EXECUTE MODIFIED INSTRUCTION
 ZFN      SPACE  4,15 
**        ZFN - ZERO OR BLANK FILL NAME.
* 
*         *ZFN* ZERO FILLS A 42 BIT BLANK PADDED NAME OR BLANK
*         FILLS A ZERO PADDED NAME.  THE BOTTOM 18 BITS REMAIN
*         UNCHANGED.
* 
*         ENTRY  (X1) = NAME TO BE PROCESSED. 
*                (B4) .NE. 0, IF TO PAD NAME WITH BLANKS. 
*                     .EQ. 0, IF TO REMOVE BLANK PADDING. 
* 
*         EXIT   (X6) = PROCESSED NAME. 
*                (B4) = UNCHANGED.
* 
*         USES   X - 1, 2, 3, 4, 5, 6.
*                A - 2. 
  
  
 ZFN      SUBR               ENTRY/EXIT 
          SA2    =10H 
          LX1    42 
          MX5    12 
          BX3    X1 
          NZ     B4,ZFN1     IF NAME TO BE BLANK FILLED 
          BX3    X1-X2
 ZFN1     AX5    6
          BX4    -X5*X3 
          NZ     X4,ZFN1     IF MORE CHARACTERS IN NAME 
          BX3    X1-X3       RESTORE FILL MASK
          BX2    X2-X3
          BX1    X5*X1       REMOVE OLD PADDING 
          BX6    -X5*X2      ADD NEW PADDING
          BX6    X1+X6
          LX6    -42
          EQ     ZFNX        EXIT 
          TITLE  TRANSLATION SUBROUTINES. 
 BHD      SPACE  4,35 
**        BHD - BUILD HEADER FOR DOWNLINE MESSAGE.
* 
*         *BHD* BUILDS THE HEADER WORD FOR THE DOWNLINE BLOCK 
*         OF DATA.  IF MORE DATA REMAINS TO BE TRANSLATED, *BHD*
*         ASSEMBLES ALL INFORMATION NECESSARY TO CONTINUE THE 
*         TRANSLATION LATER.
* 
*         ENTRY  (X6) = CURRENT *WRITE* WORD, WITH CHARACTERS 
*                       RIGHT JUSTIFIED.
*                (B6) = NUMBER OF WHOLE EIGHT-BIT CHARACTERS THAT 
*                       WILL STILL FIT INTO (X6). 
*                (SNDH) = SPECIAL HEADER, IF NEEDED FOR CONTROL BYTE. 
*                (BHDB) = ADDRESS TO CONTINUE AT, IF REENTRY NECESSARY. 
*                (BHDD) = BYTE TO CONTINUE AT, IF REENTRY NECESSARY.
*                (BHDC) .EQ. 0, IF CURRENT CHARACTER COUNT TO BE USED.
*                       .GT. 0, IF TO USE CHARACTER COUNT AT LAST EOL.
* 
*         EXIT   (X6) .EQ. 0, IF NO REENTRY REQUIRED. 
*                     .EQ. 42/0, 12/PP, 3/FB, 3/FW. 
*                             IF REENTRY REQUIRED, WHERE
*                            PP = POT POINTER TO REMAINING DATA.
*                            FW = FIRST WORD OF DATA IN POT PP. 
*                            FB = FIRST BYTE OF DATA IN WORD FW.
* 
*         USES   X - 2, 3, 4, 5, 6, 7.
*                A - 3, 4, 5, 6, 7. 
*                B - 6, 7.
  
  
 BHD      SUBR               ENTRY/EXIT 
  
*         LEFT JUSTIFY AND STORE THE FINAL *WRITE* WORD.
  
          SA3    BHDC 
          SX4    A6-SNDB+2
          LX4    59-0 
          PL     X4,BHD1     IF SECOND WORD OF PAIR 
          LX6    4           ADJUST FOR 7.5 CHARACTER 
 BHD1     SX2    B6 
          LX2    3
          SB7    X2 
          LX6    X6,B7       LEFT JUSTIFY LAST WORD 
          SA6    A6+B1
  
*         PREPARE CHARACTER COUNT FOR HEADER. 
  
          ZR     X3,BHD2     IF CURRENT CHARACTER COUNT TO BE USED
          SA3    CBPA        USE COUNT AT LAST EOL
          BX7    X3 
          EQ     BHD3        ADD COUNT TO HEADER
  
 BHD2     SA3    TDMC        ADD COUNT IN CURRENT WORD TO TOTAL 
          SX2    B6-7 
          IX7    X3-X2
 BHD3     SA5    SNDH 
          NZ     X5,BHD4     IF CONTROL BYTE HEADER 
          SA5    HDRM        USE DEFAULT HEADER FOR MESSAGE 
 BHD4     BX7    X7+X5       ADD CHARACTER COUNT TO HEADER
          SA7    SNDH 
          SX6    B0 
          SA3    BHDB 
          ZR     X3,BHDX     IF REENTRY IS NOT REQUIRED 
  
*         SET UP REENTRY INFORMATION. 
  
          SA4    TDMA        FIRST POT OF REMAINING DATA
          LX4    3
          TB6    X4,VBMP
          LX4    3
          SB7    X3 
          SA3    BHDA        FIRST BYTE OF REMAINING DATA 
          LX3    3
          BX4    X3+X4
          SX6    B7-B6       FIRST WORD OF REMAINING DATA 
          BX6    X4+X6
          EQ     BHDX        EXIT 
  
 BHDA     CON    0           BYTE AT WHICH TO CONTINUE
 BHDB     CON    0           WORD AT WHICH TO CONTINUE
 BHDC     CON    0           CHARACTER COUNT TO USE 
 CBP      SPACE  4,25 
**        CBP - CONTROL BYTE PROCESSOR. 
* 
*         ENTRY  (X2) = CONTROL BYTE. 
* 
*         EXIT   (X4) .NE. 0, IF TO IGNORE ANY REMAINING DATA.
*                (X7) .NE. 0 IF SPECIAL CHARACTER IN X2.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 3, 4, 5, 6, 7. 
* 
*         CALLS  ABT, CFE, ERQ, GNR, TNT, TTL.
* 
*         DEFINE (A0) = TERMINAL TABLE ADDRESS. 
*                (A1) = CURRENT *READ* WORD ADDRESS.
*                (X1) = CURRENT *READ* WORD.
*                (A6) = CURRENT *WRITE* WORD ADDRESS. 
*                (X6) = CURRENT *WRITE* WORD. 
*                (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. 
*                (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. 
*                (B4) = LWA OF CURRENT *READ* POT.
  
  
 CBP      SUBR               ENTRY/EXIT 
          SB7    X2          GET JUMP INDEX 
          JP     B7+CBP1     PROCESS CONTROL BYTE 
  
 CBP1     BSS    0
          LOC    0
          EQ     CB0         *0000* END OF LINE 
          EQ     CB1         *0001* END OF BLOCK
          EQ     CB1         *0002* END OF BLOCK
          EQ     CB3         *0003* AUTO INPUT
          EQ     CB4         *0004* FORCE LOGOUT
          EQ     CB5         *0005* START EXTENDED ASCII INPUT
          EQ     CB6         *0006* START NAM TRANSPARENT INPUT 
          EQ     CB7         *0007* START NAM TRANSPARENT OUTPUT
          EQ     CB10        *0010* TRMDEF - NAM/CDNA 
          EQ     CB11        *0011* START EXTENDED ASCII OUTPUT 
          EQ     CBP2        *0012* UNUSED
          EQ     CB13        *0013* END OF STRING 
          EQ     CB14        *0014* INTERNAL END OF BLOCK 
          EQ     CB15        *0015* INTERNAL AUTO INPUT 
          EQ     CB16        *0016* TRMDEF - NAM/CCP
          LOC    *O 
  
 CBP2     SX6    3RCBP       INCORRECT CONTROL BYTE 
          RJ     ABT
          MX6    1           TRANSLATION ERRORS 
          EQ     TDMX        EXIT 
  
*         *0000* - END OF LINE. 
*         SAVE THE CHARACTER COUNT (INCLUDING THE UNIT SEPARATOR) 
*         AT THE TIME THE EOL IS FOUND.  SAVE BOTH THE ADDRESS
*         OF THE WORD IN WHICH THE UNIT SEPARATOR WILL BE STORED
*         AND ITS CHARACTER POSITION.  CLEAR EXTENDED ASCII MODE
*         IF IT IS SET AND CLEAR PARTIAL LINE FLAG. 
  
 CB0      SX7    A6+B1       SAVE ADDRESS AND POSITION OF EOL 
          PX7    X7,B6
          SA7    CBPB 
          SX7    A1          SAVE ADDRESS OF LAST *READ* WORD EOL 
          BX5    X1 
          SA7    CBPE 
          SA3    TDMC        SAVE CURRENT CHARACTER COUNT 
          SX7    B6-8 
          IX7    X3-X7
          SB3    B1+B1
          SA7    CBPA 
          SX2    ASC.US      RETURN A UNIT SEPARATOR
          SX1    1R.         PRESET FORMAT EFFECTOR FOR NEXT LINE 
          LX1    54 
          SX4    B0          SET TO CONTINUE WITH DATA
          SA3    TDMG        CHECK EFFECT MODE
          PL     X3,CB0.1    IF NOT USER EFFECT MODE
          SB3    B1          RESET NUMBER OF CHARACTERS IN *READ* WORD
          SX1    B0 
          NZ     X5,CB0.1    IF NOT POSSIBLE DEGENERATE LINE
          SA3    A1-B1       CHECK FOR *EOL* IN PREVIOUS WORD 
          MX5    -12
          BX3    -X5*X3 
          NZ     X3,CB0.1    IF CURRENT READ WORD IS *EOL*
          SB3    10 
          SX2    ASC.SP      RETURN A BLANK AS DEFAULT FORMAT EFFECTOR
          SX1    1R 
          LX1    59-5 
 CB0.1    TA3    B2,VMST     CLEAR EXTENDED ASCII AND PARTIAL LINE FLAG 
          MX7    58 
          LX7    23-0 
          BX7    X3*X7
          SA7    A3 
          SX7    B0+         SET NO SPECIAL CHARACTER 
          EQ     CBPX        EXIT 
  
*         *0001*, *0002* - END OF BLOCK.
*         ADD UNIT SEPARATOR TO THE *WRITE* WORD IN *X6*.  CHANGE 
*         THE FORMAT EFFECTOR ON THE CURRENT LINE FROM A PERIOD 
*         TO A COMMA SO THAT THE TERMINAL CARRIAGE WILL NOT ADVANCE 
*         TO THE NEXT LINE. 
  
 CB1      SX7    B7+         SAVE CONTROL BYTE
          SA7    CBPC 
          SX2    ASC.US 
          NZ     B6,CB1.1    IF NOT THE 7.5 CHARACTER 
          LX6    4           ADD TOP HALF OF SEPARATOR TO *X6*
          LX2    -4 
          SX7    X2 
          BX6    X6+X7
          SA6    A6+B1       STORE FIRST WORD 
          MX7    -4 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
          LX2    4
          BX6    -X7*X2      PUT REMAINDER OF SEPARATOR IN *X6* 
          SB6    7
          SA3    TDMC        UPDATE CHARACTER COUNT 
          SX7    X3+8 
          SA7    A3+
          EQ     CB1.2       CHANGE FORMAT EFFECTOR 
  
 CB1.1    BX6    X2+X6       ADD UNIT SEPARATOR 
          SB6    B6-B1
          NZ     B6,CB1.2    IF WORD NOT FULL 
          SX7    A6-SNDB+2
          LX7    59-0 
          NG     X7,CB1.2    IF IN FIRST WORD 
          SA6    A6+B1       STORE SECOND WORD
          SX6    B0 
          SB6    7
          SA3    TDMC        UPDATE CHARACTER COUNT 
          SX7    X3+B6
          SA7    A3 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
 CB1.2    RJ     CFE         CHANGE FORMAT EFFECTOR 
          SA3    CBPC 
          SX4    B1          SET END OF DATA FLAG 
          SX7    X3-2R"IB"
          ZR     X7,CBPX     IF *0014* BYTE 
          EQ     CB0.1       CLEAR EXTENDED ASCII MODE
  
*         *0003* - AUTO INPUT.
*         ANY LINES PRECEEDING THE AUTO INPUT DATA MUST BE
*         TRANSMITTED BEFORE CONTINUING.  THE CARRIAGE
*         WILL BE HELD AFTER THE OUTPUT.
  
 CB3      SA3    CBPA 
          NZ     X3,CB3.0    IF PREVIOUS DATA NOT YET TRANSMITTED 
          SA5    HDRAI       USE AUTO INPUT HEADER
          BX7    X5 
          SA7    SNDH 
          SA5    A0+VSTT     GET OUTPUT POT POINTER 
          MX2    -12
          BX5    -X2*X5 
          LX5    3           CALCULATE POT ADDRESS
          TA2    X5,VBMP
          SX5    A1          SAVE ADDRESS OF *0003* BYTE
          SB5    B3+         SAVE REMAINING CHARACTER COUNT 
          SX7    B3-12B 
          NZ     X7,CB3.4    IF *0003* NOT IN LAST BYTE 
          SX5    A1-B1       RESET ADDRESS
          SB5    B0          RESET CHARACTER COUNT
 CB3.4    PX7    X5,B5
          SA7    A2+B1       SAVE IN POT
          MX7    1
          BX7    X2+X7       SET UPPER BIT AS FLAG
          SA7    A2+
          EQ     CB1         HOLD CARRIAGE AT THIS POINT
  
*         BACK UP TO LAST EOL.
  
 CB3.0    SA1    CBPE        GET LAST *READ* WORD EOL ADDRESS 
          TX3    X1,-VBMP 
          SA1    X1+
          BX7    X3 
          AX7    3
          SA7    TDMA        SAVE *READ* POT POINTER
          LX7    3
          BX3    X3-X7
          SX3    X3-VCPC+1
          NZ     X3,CB3.1    IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 CB3.1    SA1    A1+B1       GET NEXT *READ* WORD 
 CB3.2    SX7    A1 
          SA7    BHDB        SET REENTRY POINT
 CB3.3    SX7    B1          TRANSMIT ALL COMPLETE LINES
          SA7    BHDC 
          SX4    B1          STOP TRANSLATION 
          SX7    B0 
          ZR     B6,CBPX     IF ALREADY RIGHT JUSTIFIED 
          LX6    -8 
          EQ     CBPX        EXIT 
  
*         *0004* - FORCE LOGOUT.
*         ISSUE FORCED LOGOUT DRIVER REQUEST AND DROP REMAINING 
*         OUTPUT. 
  
 CB4      SX0    A6          SAVE (A6)
          SX3    B6          SAVE (B6)
          SA6    CBPD        SAVE (X6)
          LX3    18 
          BX0    X0+X3
          SX7    2           SET FORCE LOGOUT VALUE 
          SB3    B0 
          SX6    /TLX/FLO    FORCE LOGOUT 
          RJ     ERQ         ENTER REQUEST
          SA3    X0 
          AX0    18 
          SB6    X0          RESTORE (B6) 
          BX6    X3 
          SA5    CBPD 
          SA6    A3          RESTORE (A6) 
          BX6    X5          RESTORE (X6) 
          EQ     CB3.3       TRANSMIT ALL COMPLETE LINES
  
*         *0005* - START ASCII INPUT. 
*         SET EXTENDED ASCII INPUT MODE AND DROP REMAINING OUTPUT.
  
 CB5      SA3    A0+VDPT     SET EXTENDED ASCII INPUT MODE
          SX7    1S14 
          BX7    X3+X7
          SA7    A3 
          EQ     CB1         HOLD CARRIAGE AT THIS POINT
  
*         *0006* - START NAM TRANSPARENT INPUT. 
*         ANY LINES PRECEEDING THE *0006* BYTE MUST BE TRANSMITTED
*         BEFORE CONTINUING BECAUSE NAM TRANSPARENT OUTPUT REQUIRES 
*         A SPECIAL SUPERVISORY MESSAGE IN THE FOLLOWING FORMAT.
* 
*T        8/ PFC,8/ SFC,8/ TLF,8/ TLV,8/ INF,8/ INV,8/ C1F,4/ 0 
*T,       4/ C1V,8/ C2F,8/ C2V,8/ TOF,8/ TOV,8/ DAF,8/ DAV,8/ XF
*T,       8/ XV 
* 
*         WHERE PFC = PRIMARY FUNCTION CODE (PFTC)
*               SFC = SECONDARY FUNCTION CODE (SFDM)
*               TLF = TRANSPARENT LINE FUNCTION 
*               TLV = 0 = SINGLE LINE TRANSPARENT MODE
*               INF = INPUT FUNCTION
*               INV = 1 = TRANSPARENT MODE
*               C1F = CHARACTER COUNT FUNCTION (UPPER BYTE) 
*               C1V = CHARACTER COUNT VALUE (UPPER BYTE)
*               C2F = CHARACTER COUNT FUNCTION (LOWER BYTE) 
*               C2V = CHARACTER COUNT VALUE (LOWER BYTE)
*               TOF = TIMEOUT OPTION
*               TOV = 0 IF TIMEOUT NOT SELECTED 
*               DAF = CHARACTER DELIMITER ACTIVE FUNCTION 
*               DAV = 0, DELIMITER INACTIVE IF NO DELIMITER SPECIFIED 
*                   = 1, DELIMITER ACTIVE IF DELIMITER SPECIFIED
*               XF  = DELIMITER FUNCTION
*               XV  = DELIMITER VALUE 
  
  
 CB6      SA3    CBPA 
          NZ     X3,CB3.2    IF PREVIOUS DATA NOT YET TRANSMITTED 
          SA2    DLTDF       STORE MESSAGE HEADER 
          SA3    A2+1        STORE FIRST WORD OF TEXT 
          SA4    A3+B1
          BX7    X2 
          BX6    X3 
          MX2    12          EXTRACT CHARACTER COUNT
          SA7    SNDH 
          BX5    X1*X2
          MX2    8
          NZ     X5,CB6.1    IF CHARACTER COUNT SUPPLIED
          SX5    B1 
          LX5    48          SET DEFAULT COUNT OF ONE 
 CB6.1    LX2    -4          SPLIT CHARACTER COUNT
          BX7    X2*X5       BOTTOM EIGHT BITS
          BX5    X5-X7       TOP FOUR BITS
          LX7    40-48
          SA6    SNDB 
          BX6    X4+X5
          BX6    X6+X7
          SX5    B1 
          LX5    8-0
          SX7    14 
          LX1    12          CHECK FOR DELIMITER CHARACTER
          MX2    8           GET DELIMITER CHARACTER
          NG     X1,CB6.2    IF NO DELIMITER CHARACTER
          LX1    4
          BX6    X5+X6
          SA6    A6+1 
          BX3    X1*X2
          BX6    X3 
          SX7    16 
 CB6.2    SA6    A6+B1
          SA7    CBPA        UPDATE LAST EOL CHARACTER COUNT
          LX5    15-8 
          SA3    A0+VDPT
          BX7    X3+X5       SET TRANSPARENT INPUT MODE 
          SA7    A3          REWRITE VDPT 
          SX3    A1-B4
          NZ     X3,CB6.3    IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 CB6.3    SA1    A1+B1       GET NEXT *READ* WORD 
          SX7    2R"IB" 
          LX7    48 
          BX3    X1-X7
          ZR     X3,CB3.3    IF END OF *READ* DATA
          EQ     CB3.2       SET REENTRY POINT
  
*         *0007* - START NAM TRANSPARENT OUTPUT.
*         ANY LINES PRECEEDING THE *0007* BYTE MUST BE TRANSMITTED
*         BEFORE CONTINUING BECAUSE NAM TRANSPARENT OUTPUT REQUIRES 
*         A SPECIAL MESSAGE HEADER. 
  
 CB7      SA3    CBPA 
          NZ     X3,CB3.2    IF PREVIOUS DATA NOT YET TRANSMITTED 
          RJ     TNT         TRANSLATE NAM TRANSPARENT CHARACTERS 
          SX4    B1 
          SX7    B0 
          EQ     CBPX        EXIT 
  
*         *0010* - DOWNLINE TRMDEF FOR NAM/CDNA TERMINAL. 
*         ANY LINES PRECEEDING THE TRMDEF LINE MUST BE
*         TRANSMITTED BEFORE CONTINUING BECAUSE TRMDEF
*         REQUIRES A SPECIAL MESSAGE HEADER.
  
 CB10     SA3    CBPA 
          NZ     X3,CB3.2    IF PREVIOUS DATA NOT YET TRANSMITTED 
          SX6    B1+
          RJ     TTL         TRANSFER TRMDEF LINE - NAM/CDNA
          SX4    B1 
          SX7    B0 
          EQ     CBPX        EXIT 
  
*         *0011* - START EXTENDED ASCII OUTPUT. 
  
 CB11     TA3    B2,VMST     SET EXTENDED ASCII BIT 
          SX7    B1+
          LX7    23-0 
          BX7    X7+X3
          SA7    A3+
 CB11.1   LX1    6           EXTRACT NEXT *READ* CHARACTER
          MX5    -6 
          BX2    -X5*X1 
          SA2    X2+TVXD     LOOK IT UP IN THE TRANSLATION TABLE
          BX7    X2          SET UP SPECIAL CHARACTER MASK
          AX2    18 
          SX2    X2          GET TRANSLATED VERSION 
          SX4    B0 
          EQ     CBPX        EXIT 
  
*         *0013* - END OF STRING. 
*         TERMINATE LINE WITHOUT CHANGING TERMINAL CARRIAGE.
*         IF FOLLOWED BY ADDITIONAL DATA, THE *0013* BYTE 
*         TREATS THAT DATA AS A PART OF THE CURRENT LINE. 
*         IF FOLLOWED BY ANOTHER CONTROL BYTE, THE *0013* 
*         BYTE HOLDS THE TERMINAL CARRIAGE ON THE CURRENT 
*         LINE AND TREATS THE FOLLOWING CONTROL BYTE AS THE 
*         BEGINNING OF A NEW LINE.
  
 CB13     SX3    A1-B4
          SA4    TDMA        SAVE CURRENT *READ* WORD POSITION
          SB5    X4 
          SB7    B4 
          SX0    A1 
          NZ     X3,CB13.1   IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 CB13.1   SA1    A1+B1       GET NEXT *READ* WORD 
          SB3    10 
          MX7    12 
          BX2    X1*X7
          LX2    12 
          SX7    X2-17B 
          NG     X7,CB13.2   IF WITHIN CONTROL BYTE RANGE 
          TA3    B2,VMST     CLEAR EXTENDED ASCII BIT 
          SX7    B1 
          LX7    23-0 
          BX7    -X7*X3 
          SA7    A3 
          EQ     CB11.1      GET NEXT READ CHARACTER
  
 CB13.2   SX7    B5+         BACKUP TO PREVIOUS *READ* WORD 
          SA7    TDMA 
          SA1    X0 
          SB4    B7 
          SA3    PZDA 
          SB7    X2 
          LX3    X3,B7
          ZR     B6,CB13.3   IF ACCUMULATOR IS RIGHT JUSTIFIED
          LX6    -8 
 CB13.3   RJ     CFE         CHANGE FORMAT EFFECTOR 
          ZR     B6,CB13.4   IF ACCUMULATOR WAS RIGHT JUSTIFIED 
          LX6    8
 CB13.4   SX2    ASC.US 
          SX7    A1          SAVE ADDRESS OF LAST *READ* WORD EOL 
          SA7    CBPE 
          SX7    A6+B1
          PX7    X7,B6
          SA7    CBPB 
          SA3    TDMC        SAVE CHARACTER COUNT 
          SX7    B6-8 
          IX7    X3-X7
          SB3    B1+B1
          SA7    CBPA 
          SX1    1R.
          LX1    54 
          SX4    B0 
          SX7    B0 
          EQ     CBPX        EXIT 
  
*         *0014* - INTERNAL END OF BLOCK. 
*         ALL PRECEEDING DATA WILL BE TRANSMITTED AND THE 
*         CARRIAGE WILL BE HELD AT ITS CURRENT POSITION.
  
 CB14     SX4    B6-6 
          SA5    TDMG        CHECK EFFECT MODE
          PL     X5,CB14.0   IF NOT USER EFFECT MODE
          SX4    B6-7 
 CB14.0   SA5    TDMC 
          IX7    X5-X4
          TA4    B2,VMST
          LX4    59-24
          SA5    CBPA 
          NZ     X5,CB14.1   IF EOL ENCOUNTERED IN THIS POT CHAIN 
          NG     X4,CB14.2   IF NO EOL PRECEEDING *0014* BYTE 
 CB14.1   BX7    X5-X7
          NZ     X7,CB14.2   IF NO EOL PRECEEDING *0014* BYTE 
          MX7    1           CLEAR PARTIAL LINE FLAG
          BX7    -X7*X4 
          LX7    24-59
          SA7    A4 
          EQ     CB3.3       ALLOW CARRIAGE TO ADVANCE
  
 CB14.2   MX7    1           SET PARTIAL LINE FLAG
          BX7    X4+X7
          LX7    24-59
          SA7    A4 
          EQ     CB1         HOLD CARRIAGE
  
*         *0015* - EXECUTIVE AUTO MODE. 
*         THE *AUTO* COMMAND CAUSES A LINE NUMBER TO BE SENT
*         DOWNLINE.  ANY OUTPUT LINES PRECEDING THE AUTO LINE 
*         NUMBER MUST BE TRANSMITTED BEFORE CONTINUING.  THE
*         CARRIAGE WILL BE HELD AFTER THE LINE NUMBER.
* 
 CB15     SA3    CBPA 
          NZ     X3,CB3.0    IF PREVIOUS DATA NOT YET TRANSMITTED 
          SA5    HDRAI       USE AUTO INPUT HEADER
          BX7    X5 
          SA7    SNDH 
          EQ     CB1         HOLD CARRIAGE AT THIS POINT
  
*         *0016* - DOWNLINE TRMDEF  FOR NAM/CCP TERMINAL. 
*         ANY LINES PRECEEDING THE TRMDEF LINE MUST BE
*         TRANSMITTED BEFORE CONTINUING BECAUSE TRMDEFS 
*         REQUIRE A SPECIAL MESSAGE HEADER. 
  
 CB16     SA3    CBPA 
          NZ     X3,CB3.2    IF PREVIOUS DATA NOT YET TRANSMITTED 
          SX6    B0+
          RJ     TTL         TRANSFER TERMDEF LINE - NAM/CCP
          SX4    B1 
          SX7    B0 
          EQ     CBPX        EXIT 
  
 CBPA     CON    0           LAST EOL WORD COUNT
 CBPB     CON    0           ADDRESS OF LAST EOL
 CBPC     CON    0           CONTROL BYTE 
 CBPD     CON    0           SAVE *X6*
 CBPE     CON    0           ADDRESS OF LAST *READ* WORD EOL
 CFE      SPACE  4,30 
**        CFE - CHANGE FORMAT EFFECTOR. 
* 
*         *CFE* CHANGES THE FORMAT EFFECTOR OF THE MOST RECENT
*         LINE FROM A PERIOD TO A COMMA IN ORDER TO PREVENT THE 
*         TERMINAL CARRIAGE FROM ADVANCING AFTER THE LINE IS
*         PRINTED.
* 
*         ENTRY  (CBPB) = ADDRESS OF LAST EOL.
* 
*         EXIT   FORMAT EFFECTOR OF CURRENT LINE CHANGED FROM 
*         A PERIOD TO COMMA UNLESS IN USER EFFECT MODE. 
* 
*         USES   X - 2, 3, 4, 5, 6, 7.
*                A - 3, 7.
*                B - 3, 4, 7. 
* 
*         DEFINE (A0) = TERMINAL TABLE ADDRESS. 
*                (A1) = CURRENT *READ* WORD ADDRESS.
*                (X1) = CURRENT *READ* WORD.
*                (A6) = CURRENT *WRITE* WORD ADDRESS. 
*                (X6) = CURRENT *WRITE* WORD. 
*                (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. 
*                (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. 
*                (B4) = LWA OF CURRENT *READ* POT.
  
  
 CFE      SUBR               ENTRY/EXIT 
          SA3    TDMG        CHECK EFFECT MODE
          NG     X3,CFEX     IF USER EFFECT MODE
          SA3    CBPB 
          NZ     X3,CFE1     IF MORE THAN ONE LINE ALREADY TRANSLATED 
  
*         THE FORMAT EFFECTOR TO BE CHANGED IS THE FIRST CHARACTER
*         IN WORD TWO OF THE FIRST *WRITE* POT. 
  
          SX3    SNDB-1 
          SX7    B1+
          EQ     CFE3        CHANGE FORMAT EFFECTOR 
  
*         THE POSITION OF THE FORMAT EFFECTOR TO BE CHANGED 
*         MUST BE CALCULATED USING THE CONTENTS OF *B6* AT THE
*         TIME THE LAST EOL WAS PROCESSED AND THE ADDRESS OF
*         THE WORD INTO WHICH THE CORRESPONDING UNIT SEPARATOR
*         WAS STORED. 
  
 CFE1     SX7    B1 
          UX3,B7 X3 
          ZR     B7,CFE3     IF UNIT SEPARATOR IS THE 7.5 CHARACTER 
          NE     B7,B1,CFE4  IF NOT AT THE BOTTOM OF A WORD 
          SX5    X3-SNDB+2
          LX5    59-0 
          NG     X5,CFE3     IF UNIT SEPARATOR IS AT END OF SECOND WORD 
          SB7    9           FORMAT EFFECTOR IS THE 7.5 CHARACTER 
          SX3    X3+1 
          EQ     CFE4        COMPARE ADDRESSES
  
 CFE3     SX3    X3+1 
          SB7    8
  
*         COMPARE ADDRESS AGAINST CURRENT *WRITE* WORD ADDRESS. 
  
 CFE4     SX5    A6+B1
          BX5    X3-X5
          NZ     X5,CFE5     IF FORMAT EFFECTOR IN PREVIOUS WORD
  
*         THE FORMAT EFFECTOR TO BE CHANGED IS IN THE CURRENT 
*         *WRITE* WORD BEING BUILT IN *X6*.  USING THE CURRENT
*         VALUE OF *B6*, CALCULATE WHERE THE FORMAT EFFECTOR
*         IS POSITIONED AND CHANGE IT FROM A PERIOD TO A COMMA. 
  
          SX5    B7-B6
          LX5    3
          SB7    X5-15
          LX7    X7,B7
          BX6    -X7*X6      CHANGE FORMAT EFFECTOR 
          EQ     CFEX        EXIT 
  
*         THE FORMAT EFFECTOR TO BE CHANGED IS IN A WORD THAT 
*         HAS PREVIOUSLY BEEN STORED.  LOAD THE WORD, CALCULATE 
*         THE POSITION OF THE FORMAT EFFECTOR, AND CHANGE IT FROM 
*         A PERIOD TO A COMMA.  THEN REWRITE THE WORD IN PLACE. 
  
 CFE5     SX5    B7-B1
          LX5    3
          SB7    X5-3 
          SX5    X3-SNDB+2
          LX5    59-0 
          PL     X5,CFE6     IF IN FIRST WORD OF PAIR 
          SB7    B7-4 
 CFE6     SA3    X3 
          LX7    X7,B7
          BX7    -X7*X3      CHANGE FORMAT EFFECTOR 
          SA7    A3 
          EQ     CFEX        EXIT 
 COC      SPACE  4,10 
**        COC - CHECK OUTPUT CHAINS.
* 
*         ENTRY  (A6, X6, B6) = *WRITE* WORD POSITION.
*                (B7) = RETURN ADDRESS FOR XPT OUTPUT PROCESSING. 
* 
*         EXIT   (B4) = 0, DO NOT CONTINUE TRANSLATION. 
*                     = LWA *READ* POT, IF TRANSLATION TO CONTINE.
*                TRANSLATION REGISTERS SET UP OR PRESERVED -
*                  A6, X6, B6, B7, A1, X1, B3, B4.
*                  *TDMA* AND *TDMF* UPDATED. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
*                B - 3, 4, 6, 7.
* 
*         CALLS  UOC. 
* 
*         NOTES  THE CONCATENATION FIELD IN THE SECOND WORD OF THE POT
*                CHAIN HEADER IS SET BY *1MI* FOR WRITER OR WRITEF
*                *CIO* FUNCTIONS (SEE *ANM*). 
* 
  
  
 COC      SUBR               ENTRY/EXIT 
          SB4    B0          SET NOT TO CONTINUE TRANSLATION
          MX7    -12
          SA3    SNDH 
          NZ     X3,COCX     IF HEADER ALREADY SET
          SA3    A0+VSTT     GET POINTER TO NEXT OUTPUT CHAIN 
          BX3    -X7*X3      CURRENT CHAIN POINTER
          LX3    3
          TA3    X3,VBMP
          BX7    -X7*X3      NEXT CHAIN POINTER 
          LX7    3
          ZR     X7,COCX     IF NO NEXT CHAIN 
          SA4    A3+B1       GET SECOND WORD OF POT CHAIN HEADER
          TA3    X7+1,VBMP   CHECK IF HEADER PROVIDED 
          MX7    6
          BX3    X7*X3
          NZ     X3,COCX     IF HEADER PROVIDED 
          LX4    59-1 
          NG     X4,COCX     IF WRITER OR WRITEF THEN RETURN
          SA3    A3-1 
          LX7    30 
          BX2    X7*X3       POT COUNT IN THIS MESSAGE
          TA3    B2,VMST     GET BLOCKSIZE
          MX7    -5 
          AX3    18 
          BX3    -X7*X3      NUMBER OF POTS IN BSZ
          AX2    24 
          SX2    X2+B1       INSURANCE
          IX3    X3-X2       BSZ-NEXT IN POTS 
          SX2    60D
          IX2    X3*X2       BSZ-NEXT IN CHARACTERS 
          SA3    TDMC 
          IX3    X2-X3
          SX2    2R"IB"      RESET CONTROL BYTE 
          NG     X3,COCX     IF NOT ENOUGH ROOM FOR NEXT CHAIN
          SX7    A6          PRESERVE REGISTERS USED FOR CONTINUATION 
          SA7    COCA 
          SA6    A7+B1
          SX7    B7 
          SX6    B6 
          LX6    30 
          BX7    X6+X7
          SA7    A6+B1
          RJ     UOC         UPDATE OUTPUT CHAINS 
  
*      SET UP REENTRY TO TRANSLATION LOOP.
  
          SA1    COCA        RESTORE CONTINUATION REGISTERS 
          SA2    X1 
          BX6    X2 
          SA6    A2          (A6) RESTORED
          SA2    A1+B1
          BX6    X2          (X6) RESTORED
          SA2    A2+B1
          SB7    X2          (B7) RESTORED
          AX2    30 
          SB6    X2          (B6) RESTORED
          SA1    A0+VSTT     GET POSSIBLE NEW CHARACTER SET 
          MX7    -12
          BX7    -X7*X1 
          SA7    TDMA        UPDATE *READ* POT POINTER
          LX7    3
          TA1    X7+1,VBMP   GET CHARACTER SET
          SB4    A1+VCPC-2
          BX7    X1 
          LX7    59-0 
          SA7    TDMF 
          TA2    B2,VMST     CHECK SPECIAL CONTINUATION 
          MX3    57 
          LX3    25-0 
          BX7    X3*X2       CLEAR POSSIBLE CONTINUATION BITS 
          BX3    -X3*X2 
          SA7    A2          REWRITE VMST 
          ZR     X3,COC3     IF NO SPECIAL CONTINUATION 
          LX3    59-26
          LX2    X3,B1
          NG     X2,COCX     IF TRANSPARENT MODE CONTINUATION 
          SB3    B1 
          SX2    ASC.CF      SET 76 ESCAPE CODE 
          NG     X3,COC1     IF 76 CONTINUATION 
          SX2    ASC.AT      SET 74 ESCAPE CODE 
 COC1     MX7    1           SET UP SPECIAL CONTINUATION
          LX7    59 
          EQ     COCX        RETURN 
  
 COC3     SA2    TDMD        GET OLD RETURN ADDRESS 
          MX7    -18
          SA3    TRAR 
          SB3    TRARL
 COC4     BX4    -X7*X3 
          BX4    X4-X2
          ZR     X4,COC5     IF ADDRESS FOUND 
          SA3    A3+B1
          SB3    B3-B1
          NZ     B3,COC4     IF SEARCH NOT COMPLETE 
          SB3    11          SET UP PSEUDO CONTINUATION 
          SX2    B0 
          EQ     COCX        RETURN 
  
 COC5     AX3    18 
          PL     X3,COC6     IF (X6) OK 
          LX6    -8          REPOSITION *WRITE* WORD
 COC6     MX5    -6          RESET STANDARD CHARACTER MASK
          SB7    X2          RESET OLD RETURN ADDRESS 
          SB3    X3+         GET NEW RETURN ADDRESS 
          JP     B3          RETURN THERE 
  
  
 COCA     BSS    3           CONTINUATION REGISTERS (A6, X6, B6, B7)
 TRAR     SPACE  4,10 
**        TRAR - TABLE OF RETURN ADDRESSES TO RESET.
* 
*T        1/F,23/ 0,18/ NEW ADDRESS,18/ OLD ADDRESS 
*                F = SET IF (X6) NEEDS REPOSITIONING. 
  
  
 TRAR     BSS    0
          VFD    1/1,23/0,18/TDM4,18/TDM6 
          VFD    1/0,23/0,18/TDM9,18/TDM11
          VFD    1/1,23/0,18/TDM12,18/TDM14 
 TRARL    EQU    *-TRAR 
 GNR      SPACE  4,30 
**        GNR - GET NEXT *READ* POT.
* 
*         *GNR* DETERMINES THE NEXT *READ* POT IN THE CHAIN AND SETS
*         UP THE *READ* DEFINED REGISTERS.  IF NO POT IS FOUND, 
*         *GNR* RETURNS A *0014* CONTROL BYTE TO FORCE END OF DATA. 
* 
*         ENTRY  (TDMA) = CURRENT *READ* POT POINTER. 
* 
*         EXIT   (A1) = FIRST WORD ADDRESS OF THE POT - 1.
*                (B4) = LWA OF NEW *READ* POT.
* 
*         USES   X - 1, 5, 6, 7.
*                A - 1, 7.
*                B - 3, 4.
* 
*         CALLS  GPL. 
* 
*         DEFINE (A0) = TERMINAL TABLE ADDRESS. 
*                (A1) = CURRENT *READ* WORD ADDRESS.
*                (X1) = CURRENT *READ* WORD.
*                (A6) = CURRENT *WRITE* WORD ADDRESS. 
*                (X6) = CURRENT *WRITE* WORD. 
*                (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. 
*                (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. 
*                (B4) = LWA OF CURRENT *READ* POT.
*                (B7) = RETURN ADDRESS FOR SPECIAL CHARACTER HANDLING.
  
  
 GNR      SUBR               ENTRY/EXIT 
          SA1    TDMA        CURRENT *READ* POT POINTER 
          BX5    X6 
          SB3    X1 
          RJ     GPL         GET THE NEXT LINK
          SX7    B3 
          SA7    TDMA        UPDATE CURRENT *READ* POT POINTER
          SA1    B4-B1
          BX6    X5 
          SB4    A1+VCPC
          NZ     B3,GNRX     IF ANOTHER LINK IS FOUND 
          SA1    GNRA-1      RETURN A *0014* BYTE 
          EQ     GNRX        EXIT 
  
 GNRA     CON    2L"IB" 
 IVD      SPACE  4,30 
**        IVD - INITIALIZE VIRTUAL ASCII DISASSEMBLY. 
* 
*         GETS POT CHAIN FOR TRANSLATION ROUTINES, AND INITIALIZES
*         VDPT IF NECESSARY.
* 
*         ENTRY  (X2) = NUMBER OF DISPLAY CHARACTERS PER WORD.
*                (X7) = ASCII CHARACTER COUNT.
* 
*         EXIT   (X6) = ZERO IF INSUFFICIENT POTS AVAILABLE.
*                (X0) AND (X5) UNCHANGED. 
*                (VDPT) = INITIALIZED IF FIRST BLOCK OF LOGICAL LINE. 
* 
*         CALLS  GPC. 
  
  
 IVD      SUBR               ENTRY/EXIT 
          BX6    X5          SAVE *X5*
          SA6    IVDA 
          MX3    -3 
          SA1    A0+VDPT
          LX1    30 
          BX3    -X3*X1      GET WORD COUNT 
          SB6    X3          WORD OFFSET IN POT 
          LX1    24-30
          MX6    -12
          BX3    -X6*X1      CURRENT POT
          NZ     X3,IVD1     IF CURRENT POT EXISTS
          LX1    -12
          BX3    -X6*X1      FIRST POT
 IVD1     SB3    X3+         POT TO LINK TO 
  
*         GET POT CHAIN.
  
          IX3    X7+X2       CHARACTERS NEEDED
          IX3    X3/X2       WORDS REQUIRED 
          SB6    B6+X3       PLUS OFFSET
          SB6    B6+2        PLUS TWO 
          RJ     GPC         GET POT CHAIN
          SA5    IVDA        RESTORE *X5* 
          ZR     X6,IVDX     IF NOT ENOUGH POTS 
          SX6    B1          SET EXIT CONDITION 
          SA3    RCCW 
          PL     X3,IVDX     IF NOT FIRST TIME THROUGH
          SA2    A0+VDPT
          MX3    6
          LX3    30 
          BX6    -X3*X2      CLEAR BIT COUNT
          SX3    60D         NEW BIT COUNT
          LX3    24 
          BX6    X3+X6
          MX3    30 
          BX7    X3*X2       CHECK POT POINTERS 
          NZ     X7,IVD2     IF POT POINTERS ALREADY SET
          SX3    B3 
          LX3    36 
          BX6    X3+X6       INSERT LAST POT
          LX3    12 
          BX6    X3+X6       INSERT FIRST POT 
 IVD2     SA6    A2          REWRITE VDPT 
          EQ     IVDX        RETURN 
 IVDA     CON    0           SAVE *X5*
 PZD      SPACE  4,40 
**        PZD - PROCESS ZERO DISPLAY CHARACTER. 
* 
*         *PZD* DETERMINES WHETHER OR NOT A ZERO DISPLAY
*         CHARACTER IS PART OF A CONTROL BYTE OR AN EOL.
* 
*         ENTRY  (X1) = CURRENT *READ* WORD, WITH ZERO CHARACTER IN 
*                       THE BOTTOM SIX BITS.
*                (B3) = NUMBER OF CHARACTERS LEFT TO PROCESS IN X1, 
*                       INCLUDING THE ZERO CHARACTER. 
* 
*         EXIT   (X7) .GE. 0, 
*                       (X2) = COLON, IN ASCII. 
*                       (X1) = CURRENT *READ* WORD, WITH CHARACTER
*                              FOLLOWING THE COLON IN THE TOP SIX 
*                              BITS.
*                       (B3) = NUMBER OF CHARACTERS LEFT TO PROCESS 
*                              IN X1, INCLUDING THE COLON.
*                (X7) .LT. 0, 
*                       (X2) = CONTROL BYTE.
*                       (X1) = CURRENT *READ* WORD, WITH CHARACTER
*                              FOLLOWING THE CONTROL BYTE IN THE TOP
*                              SIX BITS.
*                       (B3) = NUMBER OF CHARACTERS LEFT TO PROCESS 
*                              IN X1, NOT COUNTING THE CONTROL BYTE.
* 
*         USES   X - 1, 2, 3, 4, 5, 7.
*                A - 1, 3, 4, 5, 7. 
*                B - 3, 7.
* 
*         CALLS  GNR, COC.
* 
*         DEFINE (A0) = TERMINAL TABLE ADDRESS. 
*                (A1) = CURRENT *READ* WORD ADDRESS.
*                (X1) = CURRENT *READ* WORD.
*                (A6) = CURRENT *WRITE* WORD ADDRESS. 
*                (X6) = CURRENT *WRITE* WORD. 
*                (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. 
*                (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. 
*                (B4) = LWA OF CURRENT *READ* POT.
  
  
 PZD      SUBR               ENTRY/EXIT 
          SX7    B0+
          SA7    PZDB 
  
*         CHECK FOR END OF LINE CONTROL BYTE FIRST. 
  
          SB3    B3-B1
          NZ     B3,PZD2     IF NOT THE LAST SIX BITS OF WORD 
          SX2    A1-B4
          NZ     X2,PZD1     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 PZD1     SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 PZD2     SX3    B3+         BUILD MASK TO CHECK FOR EOL
          SX2    6
          IX2    X2*X3
          MX7    1
          SB7    X2-1 
          AX7    X7,B7
          BX2    X7*X1
          ZR     X2,PZDX     IF END OF LINE 
  
*         IF THE ZERO CHARACTER IS IN THE LOWER HALF OF A BYTE
*         AND IS IMMEDIATELY FOLLOWED BY ONE OF THE CONTROL 
*         BYTES *0001*, *0002*, *0003*, *0005* OR *0013*, IT WILL 
*         NOT BE PRINTED ON THE TERMINAL. 
  
          LX3    59-0 
          NG     X3,PZD3     IF ZERO CHARACTER IN TOP HALF OF BYTE
          MX7    12          CHECK IF FOLLOWED BY A CONTROL BYTE
          BX2    X7*X1
          LX2    12 
          SX7    X2-17B 
          PL     X7,PZD16    IF NOT IN CONTROL BYTE RANGE 
          SX3    35010B 
          SB7    X2+45
          LX3    X3,B7
          PL     X3,PZD16    IF NOT A VALID CONTROL BYTE
  
*         STORE POSITION OF ZERO CHARACTER IN CASE CONTROL BYTE DOES
*         NOT TURN OUT TO BE VALID. 
  
          SX7    A1 
          PX7    X7,B3
          SA7    PZDB 
          SB3    B3-B1       ADVANCE POINTER TO THE CONTROL BYTE
          LX1    6
  
*         CHECK IF A CONTROL BYTE EXISTS WITH THIS VALUE. 
  
 PZD3     MX7    6           GET LOWER HALF OF THE CONTROL BYTE 
          BX2    X7*X1
          SA3    PZDA 
          LX2    6
          SX7    X2-17B 
          PL     X7,PZD16    IF NOT IN CONTROL BYTE RANGE 
          SB7    X2+
          LX3    X3,B7
          PL     X3,PZD16    IF NOT A VALID CONTROL BYTE
  
*         CHECK IF THE POTENTIAL CONTROL BYTE MUST BE THE FIRST 
*         BYTE OF A WORD AND MUST BE PRECEEDED BY AN END OF LINE. 
  
          LX3    15 
          PL     X3,PZD5     IF FIRST BYTE POSITION NOT REQUIRED
          SX5    B3-9 
          NZ     X5,PZD16    IF NOT THE FIRST BYTE
          SX5    X2-2R"IB"
          ZR     X5,PZD5     IF *0014* BYTE, NO PRECEEDING EOL NEEDED 
          SX4    B6-6        CALCULATE CURRENT CHARACTER COUNT
          SA5    TDMG        CHECK EFFECT MODE
          PL     X5,PZD3.1   IF NOT USER EFFECT MODE
          SX4    B6-7 
 PZD3.1   SA5    TDMC 
          IX7    X5-X4
          TA4    B2,VMST
          LX4    59-24
          SA5    CBPA        COMPARE WITH TOTAL AT LAST EOL 
          NZ     X5,PZD4     IF EOL ENCOUNTERED IN THIS POT CHAIN 
          NG     X4,PZD16    IF NO EOL PRECEEDING CONTROL BYTE
 PZD4     IX7    X5-X7
          NZ     X7,PZD16    IF NO EOL PRECEEDING CONTROL BYTE
  
*         CHECK IF THE POTENTIAL CONTROL BYTE MUST BE FOLLOWED
*         BY AN END OF LINE.
  
 PZD5     LX3    15 
          PL     X3,PZD9     IF TRAILING EOL NOT NECESSARY
          SX5    B3-B1
          ZR     X5,PZD6     IF LAST BYTE OF WORD, LOOK ONE WORD AHEAD
          SX4    6           BUILD MASK TO CHECK FOR EOL
          IX5    X5*X4
          MX7    1
          SB7    X5-1 
          AX7    B7,X7
          LX7    -6 
          BX4    X7*X1
          NZ     X4,PZD16    IF NO EOL FOLLOWING, NOT A CONTROL BYTE
          EQ     PZD9        CONTROL BYTE IS VALID
  
*         PROCESS THE CASE WHERE THE CONTROL BYTE IS THE LAST 
*         BYTE IN A WORD.  CHECK NEXT WORD TO SEE IF IT IS AN 
*         EOL.  STORE CURRENT POSITION IN CASE CONTROL BYTE 
*         IS NOT VALID. 
  
 PZD6     SA4    PZDB        STORE CURRENT POSITION 
          SX7    A1 
          PX7    X7,B3
          NZ     X4,PZD7     IF PRECEEDING COLON POSITION SAVED 
          SA7    A4+
 PZD7     SX4    A1-B4
          NZ     X4,PZD8     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
          SA3    PZDA 
          SB7    X2+30
          LX3    X3,B7
 PZD8     SA1    A1+1        GET NEXT *READ* WORD 
          NZ     X1,PZD16    IF CONTROL BYTE NOT FOLLOWED BY AN EOL 
          SB3    11 
          LX1    -6 
  
*         SOME OF THE CONTROL BYTES HAVE SPECIAL CRITERIA IN
*         ADDITION TO THE ABOVE TESTS WHICH MUST BE MET FOR 
*         THE CONTROL BYTE TO BE CONSIDERED VALID.  PERFORM ANY 
*         SPECIAL CHECKS FOR THE CURRENT CONTROL BYTE.
  
 PZD9     LX3    15 
          PL     X3,PZD15    IF NO SPECIAL CHECKING NECESSARY 
  
*         THE BOTTOM TWO BYTES IN THE DISPLAY CODE WORD IN WHICH
*         A *0006* BYTE OCCURS MUST BE ZERO.
  
 PZD12    SX5    X2-2R"BI"
          NZ     X5,PZD13    IF NOT A *0006* BYTE 
          SX7    7777B
          LX7    6
          BX7    X1*X7
          NZ     X7,PZD16    IF LAST TWO BYTES ARE NOT ZERO 
          EQ     PZD15       CONTROL BYTE IS VALID
  
*         BOTH A *0007* AND A *0016* BYTE MUST BE FOLLOWED BY AT
*         LEAST ONE VALID TRANPARENT-TYPE CHARACTER, IE, THE TOP
*         FOUR BITS OF THE BYTE SHOULD BE *1000*. 
  
 PZD13    SX5    X2-2R"BO"
          ZR     X5,PZD13.1  IF A *0007* BYTE 
          SX5    X2-10B 
          ZR     X5,PZD13.1  IF A *0010* BYTE 
          SX5    X2-16B 
          NZ     X5,PZD13.2  IF NOT A *0016* BYTE 
 PZD13.1  MX7    4
          LX7    -6 
          BX7    X7*X1
          LX7    10 
          SX7    X7-10B 
          NZ     X7,PZD16    IF NOT FOLLOWED BY TRANSPARENT CHARACTER 
          EQ     PZD15       CONTROL BYTE IS VALID
  
*         A *0014* CONTROL BYTE WILL ONLY BE PROCESSED IF 
*         NO MORE OUTPUT DATA CAN BE PROCESSED - IT MUST BE 
*         CHAINED IN VSTT AND FIT IN THE SEND BUFFER FOR
*         TRANSLATION TO BE CONTINUED IGNORING THE *0014*.
  
 PZD13.2  SX5    X2-2R"IB"
          NZ     X5,PZD14    IF NOT *0014*
          RJ     COC         CHECK OUTPUT CHAINS
          ZR     B4,PZD15    IF NO CONTINUATION 
          EQ     PZDX        RETURN 
  
*         A *0015* BYTE MAY ONLY BE USED BY IAF FOR INTERNAL
*         AUTO INPUT MODE.  IT MUST ALSO HAVE A PRECEEDING END OF LINE
*         IN THE DISPLAY CODE WORD IN WHICH IT APPEARS. 
 PZD14    SA5    A0+VDCT     CHECK FOR AUTO MODE BIT SET
          LX5    59-49
          PL     X5,PZD16    IF NOT IAF INTERNAL AUTO MODE
          SA5    TDMC        COMPUTE CHARACTER COUNT AT START OF WORD 
          SX4    B6-7+9 
          IX7    X5-X4
          TA4    B2,VMST
          LX4    59-24
          SA5    CBPA        COMPARE WITH TOTAL AT LAST EOL 
          NZ     X5,PZD14.1  IF EOL ENCOUNTERED IN THIS POT CHAIN 
          NG     X4,PZD16    IF NO EOL PRECEEDING CURRENT WORD
 PZD14.1  IX7    X5-X7
          NG     X7,PZD16    IF NO EOL PRECEEDING CURRENT WORD
  
*         A CONTROL BYTE HAS BEEN FOUND WHICH PASSES ALL CRITERIA.
  
 PZD15    LX1    6
          MX7    1
          SB3    B3-1        GET TO NEXT CHARACTER
          EQ     PZDX        EXIT 
  
*         THE ZERO CHARACTER WAS NOT PART OF A VALID CONTROL
*         BYTE.  SET UP EXIT CONDITIONS, RESTORING ALL *READ* 
*         DEFINED REGISTERS IF NECESSARY. 
  
 PZD16    SX2    ASC.CL 
          SX7    B0          NOT A CONTROL BYTE 
          SB3    B3+B1       BACK UP TO INCLUDE THE COLON 
          SA3    PZDB 
          ZR     X3,PZDX     IF COLON IN CURRENT WORD 
          UX3,B3 X3          BACK UP TO PREVIOUS WORD 
          SA1    X3 
          SX5    6
          SX3    B3-10
          IX3    X3*X5
          SB7    X3 
          AX1    X1,B7       SHIFT *READ* WORD TO CORRECT POSITION
          SB3    B3+B1
          TX7    A1,-VBMP 
          AX7    3
          SA7    TDMA 
          LX7    3
          TB4    X7+VCPC-1,VBMP 
          SX7    B0          RESTORE EXIT CONDITION 
          EQ     PZDX        EXIT 
  
 PZDA     VFD    15/37757B,15/02745B,15/37016B,15/00707B
 PZDB     CON    0
 TDM      SPACE  4,20 
**        TDM - TRANSLATE DISPLAY CODED MESSAGE.
* 
*         TRANSLATES DISPLAY CODED DATA TO IVT ASCII, PACKING 
*         SEVEN AND ONE HALF CHARACTERS PER WORD. 
*         CODE IN THIS SUBROUTINE IS MONOLITHIC BECAUSE OF TIMING 
*         CONSIDERATIONS. 
* 
*         ENTRY  (B2) = TERMINAL NUMBER.
*                (X6) = FIRST *READ* POT POINTER. 
*                (B6) = FWA IN FIRST DISPLAY CODE POT.
*                (B7) = FIRST BYTE IN WORD. 
* 
*         EXIT   (X6) .EQ. 0, IF ALL DATA TRANSLATED. 
*                     .LT. 0, IF TRANSLATION ERROR. 
*                     .EQ. 42/0, 12/PP, 3/FB, 3/FW. 
*                          IF REENTRY REQUIRED, WHERE 
*                            PP = POT POINTER TO REMAINING DATA.
*                            FW = FIRST WORD OF DATA IN POT PP. 
*                            FB = FIRST BYTE OF DATA IN WORD FW.
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 3, 4, 5, 6, 7. 
* 
*         CALLS  BHD, CPB, GNR, PZD, TNT. 
* 
*         DEFINE (A0) = TERMINAL TABLE ADDRESS. 
*                (X5) = CHARACTER MASK. 
*                (A1) = CURRENT *READ* WORD ADDRESS.
*                (X1) = CURRENT *READ* WORD.
*                (A6) = CURRENT *WRITE* WORD ADDRESS. 
*                (X6) = CURRENT *WRITE* WORD. 
*                (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. 
*                (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. 
*                (B4) = LWA OF CURRENT *READ* POT.
*                (B7) = RETURN ADDRESS FOR SPECIAL CHARACTER HANDLING.
  
  
 TDM      SUBR               ENTRY/EXIT 
  
*         INITIALIZE DEFINED REGISTERS AND CELLS. 
  
          SA6    TDMA        SAVE INITIAL *READ* POT POINTER
          SA3    A0+VSTT
          MX7    -12
          LX6    3
          TX1    X6,VBMP
          SB4    X1+VCPC-1   SET LWA OF CURRENT *READ* POT
          SB6    B6-B1
          SA1    X1+B6       (A1) IS *READ* POT ADDRESS - 1 
          BX3    -X7*X3      SAVE OUTPUT CHARACTER SET
          LX3    3
          TA3    X3+1,VBMP
          BX6    X3 
          LX6    59-0 
          SA6    TDMF 
          LX6    0-59+59-2
          SA6    A6+B1       SAVE CURRENT EFFECT MODE 
          ERRNZ  TDMF-TDMG+1  CODE REQUIRES CONTIGUOUS WORDS
          SX7    B0 
          SX6    B0 
          SA7    TDMC        INITIALIZE TRANSLATED CHARACTER COUNT
          SA6    CBPA        INITIALIZE LAST EOL POSITION 
          SA7    A6+B1
          SA7    BHDA        INITIALIZE REENTRY INFORMATION 
          SA6    A7+B1
          SA7    A6+B1
          SA6    SNDH 
          SB6    6           INITIAL *WRITE* WORD CHARACTER COUNT 
          SX6    ASC.PD      INITIAL LINE FORMAT AFFECTOR 
  
*         CHECK IF THIS IS A CONTINUATION OF DATA IN A PREVIOUS 
*         DOWNLINE BLOCK. 
  
          TA2    B2,VMST     GET CONTINUATION FLAGS 
          MX7    -3 
          LX2    59-24
          SA3    TDMG        CHECK EFFECT MODE
          SX4    B1 
          BX4    X2*X4
          NZ     X4,TDM1     IF NAM CONTINUATION
          PL     X2,TDM3     IF NOT PARTIAL LINE
          PL     X3,TDM1     IF NOT USER EFFECT MODE
          SX6    ASC.CM      HOLD CARRIAGE FORMAT AFFECTOR
 TDM1     BX5    -X7*X2      74 - 76 NAM CONTINUATION 
          ZR     X5,TDM3.1   IF NOT CONTINUATION
          MX5    2
          SA4    A0+VROT     CHECK FOR RESOURCE LIMIT 
          LX4    59-19
          BX5    X5*X4
          ZR     X5,TDM1.1   IF NO LIMIT HAS OCCURRED 
          MX7    -2          LEAVE NAM TRANSPARENT CONTINUATION SET 
          LX7    1
 TDM1.1   BX7    X7*X2       CLEAR CONTINUATION FLAGS 
          MX5    -6 
          LX7    25 
          SA1    A1+B1
          SA7    A2 
          SB3    10 
          LX2    59-27+25-0 
          LX6    8
          SB7    TDM6 
          SX4    200B 
          NG     X2,TDM21    IF 74 ESCAPE CODE CONTINUATION 
          LX2    59-26-59+27
          AX4    1
          NG     X2,TDM21    IF 76 ESCAPE CODE CONTINUATION 
          LX6    -8 
  
*         PROCESS NAM TRANSPARENT DATA CONTINUATION.
  
          ZR     X1,TDM2     IF DATA STARTS WITH AN EOL 
          MX7    12 
          BX7    X1*X7
          LX7    4
          SX2    X7-10B 
          ZR     X2,TDM2     IF FIRST CHARACTER IS TRANSPARENT
          LX7    8
          SX7    X7-0007B 
          ZR     X7,TDM2     IF *0007* CONTROL BYTE 
          PL     X3,TDM5     IF NOT USER EFFECT MODE
          SB6    7
          SX6    B0 
          EQ     TDM5        ENTER TRANSLATION LOOP 
  
 TDM2     RJ     TNT         NAM TRANSPARENT CONTINUATION 
          RJ     BHD
          EQ     TDMX        EXIT 
  
*         CHECK IF DATA STARTS AT THE BEGINNING OF THE POT. 
  
 TDM3     PL     X3,TDM3.1   IF NOT USER EFFECT MODE
          SB6    7           WORD EMPTY 
          SX6    B0          CLEAR *WRITE* WORD 
 TDM3.1   SX3    B7+B7       CHARACTER POSITION TO START AT 
          SB7    TDM6 
          MX5    -6 
          ZR     X3,TDM4     IF DATA STARTS ON A WORD BOUNDARY
          SX2    -6 
          SA1    A1+B1       POSITION FIRST WORD TO BEGINNING OF DATA 
          IX7    X2*X3
          SB3    X7+60
          LX1    X1,B3
          SB3    X3 
          EQ     TDM5        ENTER TRANSLATION LOOP 
  
*         BUILD FIRST WORD OF PAIR. 
  
 TDM4     SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 TDM5     LX1    6           EXTRACT NEXT *READ* CHARACTER
          BX2    -X5*X1 
          SA2    X2+TVXD     LOOK IT UP IN THE TRANSLATION TABLE
          LX6    8
          BX7    X2 
          AX2    18          GET TRANSLATED VERSION 
          LX7    59-58
          SX2    X2+
          NG     X7,TDM18    IF CHARACTER NEEDS SPECIAL PROCESSING
 TDM6     SB6    B6-B1
          BX6    X6+X2       ADD CHARACTER TO *WRITE* WORD
          SB3    B3-1 
          ZR     B6,TDM8     IF SEVENTH CHARACTER COMPLETED 
 TDM7     NZ     B3,TDM5     IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TDM4     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
          MX5    -6 
          EQ     TDM4        GET FIRST WORD OF NEW POT
  
*         BUILD 7.5 CHARACTER.
  
 TDM8     NZ     B3,TDM10    IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TDM9     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 TDM9     SA1    A1+B1       GET NEXT *READ* WORD 
          SB3    10 
          MX5    -6 
 TDM10    LX1    6           EXTRACT NEXT *READ* CHARACTER
          BX2    -X5*X1 
          SA2    X2+TVXD     LOOK IT UP IN THE TRANSLATION TABLE
          SB7    TDM11
          BX7    X2 
          AX2    18          GET TRANSLATED VERSION 
          LX7    59-58
          SX2    X2 
          NG     X7,TDM18    IF CHARACTER NEEDS SPECIAL PROCESSING
 TDM11    LX6    4
          LX2    56 
          SX7    X2 
          BX6    X6+X7       ADD TOP HALF OF CHARACTER TO *WRITE* WORD
          SA6    A6+B1       STORE FIRST WORD OF *WRITE* PAIR 
          MX7    -4 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
          LX2    -56
          BX6    -X7*X2 
          SB6    7
          SA3    TDMC        UPDATE TOTAL TRANSLATED CHARACTER COUNT
          SX7    X3+8 
          SB3    B3-B1
          SA7    A3 
          SB7    TDM14
          EQ     TDM15       ENTER TRANSLATION LOOP 
  
*         BUILD SECOND WORD OF PAIR.
  
 TDM12    SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 TDM13    LX1    6           EXTRACT NEXT *READ* CHARACTER
          BX2    -X5*X1 
          SA2    X2+TVXD     LOOK IT UP IN THE TRANSLATION TABLE
          LX6    8
          BX7    X2 
          AX2    18          GET TRANSLATED VERSION 
          LX7    59-58
          SX2    X2+
          NG     X7,TDM18    IF CHARACTER NEEDS SPECIAL PROCESSING
 TDM14    SB6    B6-B1
          BX6    X6+X2       ADD CHARACTER TO *WRITE* WORD
          SB3    B3-1 
          ZR     B6,TDM16    IF SECOND WORD IS FULL 
 TDM15    NZ     B3,TDM13    IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TDM12    IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
          MX5    -6 
          EQ     TDM12       GET FIRST WORD OF NEW POT
  
*         STORE SECOND WORD OF *WRITE* PAIR AND THEN LOOP 
*         BACK AND BEGIN BUILDING THE NEXT WORD PAIR. 
  
 TDM16    SA6    A6+B1       STORE SECOND WORD OF *WRITE* PAIR
          SB6    7
          SX6    B0          CLEAR CHARACTER ACCUMULATOR
          SA2    TDMC        UPDATE TOTAL TRANSLATED CHARACTER COUNT
          SX7    X2+7 
          SA7    A2 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
          SB7    TDM6 
          MX5    -6 
          EQ     TDM7        START NEXT *WRITE* WORD PAIR 
  
*         PROCESS SPECIAL CHARACTERS, WHICH INCLUDE THE 74 AND 76 
*         ESCAPE CODES AND DISPLAY CHARACTER ZERO.
  
 TDM18    SX3    X2-ASC.CL
          ZR     X3,TDM26    IF ZERO DISPLAY CHARACTER
          TA4    B2,VMST
          SA3    TDMF 
          LX4    59-23
          BX3    X3+X4
          PL     X3,TDM29    IF NOT EXTENDED ASCII, PRINT ESCAPE CODE 
          SX7    X2-ASC.AT
          SX4    200B 
          ZR     X7,TDM19    IF 74 ESCAPE 
          SX4    100B        MUST BE 76 ESCAPE
  
*         TRANSLATE NEXT CHARACTER WITH ESCAPE CODE BIAS. 
  
 TDM19    SB3    B3-B1
          NZ     B3,TDM21    IF MORE CHARACTERS IN *READ* WORD
          SX7    A1-B4
          NZ     X7,TDM20    IF NOT AT THE END OF THE *READ* POT
          BX7    X4 
          SA7    TDME 
          RJ     GNR         GET NEXT *READ* POT
          SA4    TDME 
          MX5    -6 
 TDM20    SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 TDM21    LX1    6           EXTRACT NEXT *READ* CHARACTER
          BX2    -X5*X1 
          BX2    X2+X4       ADD BIAS 
          SX3    X2-TVXDL 
          PL     X3,TDM22    IF VALUE TOO LARGE TO BE A CHARACTER 
          SA2    X2+TVXD     LOOK IT UP IN THE TRANSLATION TABLE
          BX7    X2 
          AX2    18 
          SX2    X2          GET TRANSLATED VERSION 
          ZR     X4,TDM28    IF SECOND TIME THROUGH 
          NG     X2,TDM22    IF NO SUCH CHARACTER EXISTS
          LX7    59-58
          PL     X7,TDM29    IF NOT A 7412 CHARACTER
  
*         7412 PROCESSING.  A 7412 CHARACTER IS TREATED AS A
*         UNIT SEPARATOR. 
  
          SX3    45B         PRESET NEXT LINE FORMAT EFFECTOR 
          BX1    X1-X3
          LX1    -6 
          SB3    B3+B1
          SX7    A6+B1
          PX7    X7,B6
          SA7    CBPB 
          JP     B7          RETURN A UNIT SEPARATOR
  
*         PROCESS INCORRECT TWELVE BIT CHARACTERS.  IF THE LAST 
*         SIX BITS OF THE CHARACTER ARE NON-ZERO, IT IS THROWN
*         AWAY.  IF THE LAST SIX BITS ARE THE BEGINNING OF AN 
*         EOL, THEN THE ESCAPE CODE IS PRINTED.  IF THE LAST SIX
*         BITS ARE THE START OF A *0014* BYTE, THEN A TWELVE BIT
*         CHARACTER HAS BEEN SPLIT ACROSS DOWNLINE BLOCKS, SO 
*         THE APPROPRIATE ESCAPE CODE CONTINUATION FLAG IS SET. 
  
 TDM22    BX5    -X5*X1 
          NZ     X5,TDM24    IF NOT A ZERO CHARACTER
          MX5    6
          BX5    X1*X5
          ZR     X5,TDM25    IF A POSSIBLE EOL
          SX5    B3 
          LX5    59-0 
          NG     X5,TDM24    IF NOT A CONTROL BYTE
          SX3    2R"IB"      CHECK FOR A *0014* BYTE
          LX3    54 
          BX3    X1-X3
          NZ     X3,TDM23    IF NOT 74 NOR 76 CONTINUATION
          TA3    B2,VMST     SET CONTINUATION FLAG IN VMST
          LX4    20 
          BX7    X3+X4
          SA7    A3+
 TDM23    SB3    B3+1 
          LX1    -6 
 TDM24    SX4    B0 
          MX5    -6 
          EQ     TDM19       TRANSLATE NEXT CHARACTER 
  
 TDM25    SX4    B7          BUILD AN EOL MASK
          SX3    B3-B1
          SX5    6
          IX5    X3*X5
          MX7    1
          SB7    X5-1 
          AX7    X7,B7
          SB7    X4+
          BX7    X1*X7
          ZR     X7,TDM23    IF A VALID EOL 
          EQ     TDM24       THROW INCORRECT CHARACTER AWAY 
  
*         PROCESS ZERO CHARACTER. 
  
 TDM26    SX7    B7          SAVE RETURN ADDRESS
          SA7    TDMD 
          RJ     PZD         PROCESS ZERO DISPLAY CHARACTER 
          PL     X7,TDM27    IF NOT A CONTROL BYTE
          RJ     CBP         CONTROL BYTE PROCESSOR 
          ZR     X4,TDM27    IF NOT END OF THE DATA 
          RJ     BHD         BUILD MESSAGE HEADER 
          EQ     TDMX        EXIT 
  
 TDM27    SA3    TDMD        RESTORE RETURN ADDRESS 
          SB7    X3+
 TDM28    MX5    -6          RESTORE CHARACTER MASK 
          LX7    59-58
          NG     X7,TDM18    IF SPECIAL CHARACTER 
 TDM29    JP     B7          RETURN TO THE CALLING ROUTINE
  
 TDM30    SX6    3RTDM       OVERFLOW OF SEND BUFFER
          RJ     ABT
          MX6    1
          EQ     TDMX        EXIT 
  
 TDMA     DATA   0           CURRENT *READ* POT POINTER 
 TDMB     DATA   0           CURRENT *WRITE* POT POINTER
 TDMC     DATA   0           TRANSLATED CHARACTER COUNT 
 TDMD     DATA   0           RETURN ADDRESS 
 TDME     DATA   0           74, 76 ESCAPE
 TDMF     DATA   0           EXTENDED MODE FLAG 
 TDMG     DATA   0           USER-SUPPLIED FORMAT EFFECTORS FLAG
 TNT      SPACE  4,25 
**        TNT - TRANSLATE NAM TRANSPARENT LINES.
* 
*         *TNT* TRANSFERS TRANSPARENT CHARACTERS TO THE SEND BUFFER,
*         STRIPPING OFF THE TOP FOUR BITS OF EACH CHARACTER.
*         THE TRANSFER CONTINUES UNTIL END OF DATA, OR UNTIL
*         NON-TRANSPARENT DATA IS FOUND IN WHICH CASE *TNT* SETS
*         UP THE REENTRY WORD AND BYTE ADDRESSES TO ALLOW 
*         TRANSLATION TO CONTINUE ONCE THE TRANSPARENT DATA HAS 
*         BEEN TRANSMITTED. 
* 
*         ENTRY  (X1) = TRANSPARENT DATA, LEFT ADJUSTED.
* 
*         EXIT   TRANSPARENT DATA TRANSFERRED TO SEND BUFFER. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 1, 2, 3, 5, 6, 7.
*                B - 3, 6, 7. 
* 
*         CALLS  GNR, COC.
* 
*         DEFINE (A0) = TERMINAL TABLE ADDRESS. 
*                (A1) = CURRENT *READ* WORD ADDRESS.
*                (X1) = CURRENT *READ* WORD.
*                (A6) = CURRENT *WRITE* WORD ADDRESS. 
*                (X6) = CURRENT *WRITE* WORD. 
*                (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. 
*                (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. 
*                (B4) = LWA OF CURRENT *READ* POT.
  
  
 TNT      SUBR               ENTRY/EXIT 
          SB7    TNT3 
          SB6    7
          MX5    -8 
          SX6    B0          THROW AWAY THE FORMAT EFFECTOR 
          EQ     TNT2        ENTER TRANSLATION LOOP 
  
*         BUILD FIRST WORD OF PAIR. 
  
 TNT1     SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 TNT2     MX3    4           CHECK FOR A VALID NEXT CHARACTER 
          BX3    X3*X1
          LX3    4
          SX3    X3-10B 
          NZ     X3,TNT12    IF NOT A NAM TRANSPARENT CHARACTER 
          LX6    8
          LX1    12 
          BX3    -X5*X1      STRIP OFF TOP FOUR BITS
          BX6    X6+X3       ADD CHARACTER TO *WRITE* WORD
          SB6    B6-B1
          SB3    B3-2 
          ZR     B6,TNT4     IF SEVENTH CHARACTER COMPLETED 
 TNT3     NZ     B3,TNT2     IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TNT1     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
          MX5    -8 
          EQ     TNT1        GET FIRST WORD OF NEW POT
  
*         BUILD 7.5 CHARACTER.
  
 TNT4     NZ     B3,TNT6     IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TNT5     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 TNT5     SA1    A1+B1       GET NEXT *READ* WORD 
          SB3    10 
          MX5    -8 
 TNT6     MX3    4           CHECK FOR A VALID NEXT CHARACTER 
          BX3    X3*X1
          SB7    TNT4 
          LX3    4
          SX3    X3-10B 
          NZ     X3,TNT12    IF NOT A NAM TRANSPARENT CHARACTER 
          LX1    12 
          LX6    4
          BX2    -X5*X1      STRIP OFF TOP FOUR BITS
          LX2    56 
          SX7    X2 
          BX6    X6+X7       ADD TOP HALF OF CHARACTER TO *WRITE* WORD
          SA6    A6+B1       STORE FIRST WORD OF *WRITE* PAIR 
          MX7    -4 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
          LX2    -56
          BX6    -X7*X2 
          SB6    7
          SB3    B3-2 
          SA3    TDMC        UPDATE TOTAL TRANSLATED CHARACTER COUNT
          SX7    X3+8 
          SA7    A3 
          SB7    TNT9 
          EQ     TNT9        BEGIN FILLING SECOND WORD OF PAIR
  
*         BUILD SECOND WORD OF PAIR.
  
 TNT7     SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 TNT8     MX3    4           CHECK FOR A VALID NEXT CHARACTER 
          BX3    X3*X1
          LX3    4
          SX3    X3-10B 
          NZ     X3,TNT12    IF NOT A NAM TRANSPARENT CHARACTER 
          LX6    8
          LX1    12 
          BX3    -X5*X1      STRIP OFF TOP FOUR BITS
          BX6    X3+X6       ADD CHARACTER TO *WRITE* WORD
          SB6    B6-B1
          SB3    B3-2 
          ZR     B6,TNT10    IF SECOND WORD IS FULL 
 TNT9     NZ     B3,TNT8     IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TNT7     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
          MX5    -8 
          EQ     TNT7        GET FIRST WORD OF NEW POT
  
*         STORE SECOND WORD OF *WRITE* PAIR AND THEN LOOP 
*         BACK AND BEGIN BUILDING THE NEXT WORD PAIR. 
  
 TNT10    SA6    A6+B1       STORE SECOND WORD OF *WRITE* PAIR
          SB6    7
          SX6    B0          CLEAR CHARACTER ACCUMULATOR
          SA2    TDMC        UPDATE TOTAL TRANSLATED CHARACTER COUNT
          SX7    X2+7 
          SA7    A2 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
          SB7    TNT3 
          MX5    -8 
          EQ     TNT3        START NEXT *WRITE* WORD PAIR 
  
*         SPECIAL CHARACTER HANDLING. 
*         CHECK FOR A VALID END OF LINE OR A *0007* BYTE. 
*         IF EITHER ONE, THEN CONTINUE TRANSLATING TRANSPARENT
*         DATA. 
  
 TNT12    SX3    B3          BUILD AN EOL MASK
          SX2    6
          IX2    X2*X3
          MX7    1
          SX4    B7 
          SB7    X2-1 
          AX7    X7,B7
          SB7    X4+
          BX2    X7*X1
          NZ     X2,TNT13    IF NOT EOL 
          SB3    B0+
          JP     B7          CONTINUE TRANSLATION 
  
 TNT13    AX2    48 
          SX2    X2-0007B 
          NZ     X2,TNT14    IF NOT *0007* BYTE 
          SB3    B3-2 
          LX1    12 
          JP     B7          CONTINUE TRANSLATION 
  
*         END OF NAM TRANSPARENT LINE.  A SPECIAL MESSAGE HEADER
*         IS REQUIRED MAKING IT NECESSARY TO TRANSMIT THE 
*         TRANSPARENT DATA SEPARATELY FROM ANY DATA FOLLOWING IT. 
*         IF MORE DATA DOES EXIST, MARK TRANSLATION CONTINUATION
*         POINT.
  
 TNT14    SX7    0014B       END OF DATA INDICATOR
          LX7    48 
          BX3    X7-X1
          NZ     X3,TNT15    IF NOT *0014* BYTE 
          TA3    B2,VMST     SET TRANSPARENT CONTINUATION 
          SX4    B1 
          LX4    25-0 
          BX7    X3+X4
          SA7    A3 
          RJ     COC         CHECK OUTPUT CHAINS
          ZR     B4,TNT16    IF NO CONTINUATION 
          SA1    A1+B1       SET UP REGISTERS FOR REENTRY 
          SB3    10 
          MX5    -8 
          JP     B7          CONTINUE TRANSLATION 
  
 TNT15    SX7    A1+
          SA7    BHDB        MARK TRANSLATION CONTINUATION POINT
          SB7    10 
          EQ     B7,B3,TNT16 IF DATA TO CONTINUE AT WORD BOUNDARY 
          SX7    B3          SAVE BYTE POSITION 
          AX7    1
          SA7    BHDA 
 TNT16    SA5    HDRB        USE TRANSPARENT HEADER 
          BX7    X5 
          SA7    SNDH 
          EQ     TNTX        EXIT 
 TTL      SPACE  4,30 
**        TTL - TRANSFER TRMDEF LINE. 
* 
*         *TTL* TRANSFERS TRMDEF BYTES TO THE SEND BUFFER UNTIL AN EOL
*         OR BYTE WITHOUT BIT 11 SET IS FOUND.  SUPERVISORY MESSAGE 
*         PRIMARY AND SUBFUNCTIONS ARE ADDED TO THE BEGINNING OF THE
*         DATA, AND IF ANY DATA FOLLOWS THE TRMDEF LINE, *TTL*
*         SETS UP THE REENTRY ADDRESS TO ALLOW TRANSLATION TO 
*         CONTINUE ONCE THE TRMDEF MESSAGE IS TRANSMITTED.
* 
*         ENTRY  (X1) = TRMDEF DATA, LEFT ADJUSTED. 
*                (X6) .EQ. 0 IF CONTROL BYTE 0016B TO BE SENT.
*                     .EQ. 1 IF CONTROL BYTE 0010B TO BE SENT.
* 
*         EXIT   TRMDEF DATA TRANSFERRED TO SEND BUFFER.
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 1, 2, 3, 6, 7. 
*                B - 3, 5, 6, 7.
* 
*         CALLS  GNR. 
* 
*         DEFINE (A0) = TERMINAL TABLE ADDRESS. 
*                (A1) = CURRENT *READ* WORD ADDRESS.
*                (X1) = CURRENT *READ* WORD.
*                (A6) = CURRENT *WRITE* WORD ADDRESS. 
*                (X6) = CURRENT *WRITE* WORD. 
*                (B3) = NUMBER OF CHARACTERS LEFT IN *READ* WORD. 
*                (B4) = LWA OF CURRENT *READ* POT.
*                (B6) = NUMBER OF CHARACTERS ROOM LEFT IN *WRITE* WORD. 
  
  
 TTL      SUBR               ENTRY/EXIT 
          SB6    5
          MX5    -8 
          SB5    X6          SAVE CONTROL BYTE FLAG 
          NZ     X6,TTL0     IF CONTROL BYTE 0010B TO BE SENT 
          SX6    PFTC*400B+SFDM  SET UP PRIMARY AND SUB-FUNCTIONS 
          EQ     TTL2        ENTER TRANSFER LOOP
  
 TTL0     SX6    PFTC*400B+SFCC  SET UP PRIMARY AND SUB-FUNCTIONS 
          EQ     TTL2        ENTER TRANSFER LOOP
  
*         BUILD FIRST WORD OF PAIR. 
  
 TTL1     SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 TTL2     PL     X1,TTL15    IF END OF TRMDEF DATA REACHED
          LX1    12          EXTRACT NEXT *READ* CHARACTER
          BX2    -X5*X1 
          LX6    8
          BX6    X6+X2       ADD CHARACTER TO *WRITE* WORD
          SB6    B6-1 
          SB3    B3-2 
          ZR     B6,TTL5     IF SEVENTH CHARACTER COMPLETED 
 TTL4     NZ     B3,TTL2     IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TTL1     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
          MX5    -8 
          EQ     TTL1        GET FIRST WORD OF NEW POT
  
*         BUILD 7.5 CHARACTER.
  
 TTL5     NZ     B3,TTL7     IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TTL6     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 TTL6     SA1    A1+B1       GET NEXT *READ* WORD 
          SB3    10 
          MX5    -8 
 TTL7     PL     X1,TTL15    IF END OF TRMDEF DATA REACHED
          LX1    12          EXTRACT NEXT *READ* CHARACTER
          BX2    -X5*X1 
          LX6    4
          LX2    56 
          SX7    X2 
          BX6    X6+X7       ADD TOP HALF OF CHARACTER TO *WRITE* WORD
          SA6    A6+B1       STORE FIRST WORD OF *WRITE* PAIR 
          MX7    -4 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
          LX2    -56
          BX6    -X7*X2 
          SB6    7
          SB3    B3-2 
          SA3    TDMC        UPDATE TOTAL TRANSLATED CHARACTER COUNT
          SX7    X3+8 
          SA7    A3+
          EQ     TTL12       BEGIN FILLING SECOND WORD OF PAIR
  
*         BUILD SECOND WORD OF PAIR.
  
 TTL9     SA1    A1+1        GET NEXT *READ* WORD 
          SB3    10 
 TTL10    PL     X1,TTL15    IF END OF TRMDEF DATA REACHED
          LX1    12          EXTRACT NEXT *READ* CHARACTER
          BX2    -X5*X1 
          LX6    8
          BX6    X2+X6       ADD CHARACTER TO *WRITE* WORD
          SB6    B6-1 
          SB3    B3-2 
          ZR     B6,TTL13    IF SECOND WORD IS FULL 
 TTL12    NZ     B3,TTL10    IF MORE CHARACTERS IN *READ* WORD
          SX3    A1-B4
          NZ     X3,TTL9     IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
          MX5    -8 
          EQ     TTL9        GET FIRST WORD OF NEW POT
  
*         STORE SECOND WORD OF *WRITE* PAIR AND THEN LOOP BACK
*         AND BEGIN BUILDING THE NEXT WORD PAIR.
  
 TTL13    SA6    A6+B1       STORE SECOND WORD OF *WRITE* PAIR
          SB6    7
          SX6    B0          CLEAR CHARACTER ACCUMULATOR
          SA2    TDMC        UPDATE TOTAL TRANSLATED CHARACTER COUNT
          SX7    X2+7 
          SA7    A2 
          MX5    -8 
          SX3    A6-SNDB-SNDL 
          PL     X3,TDM30    IF MESSAGE HAS OVERFLOWED DATA BUFFER
          EQ     TTL4        START NEXT *WRITE* WORD PAIR 
  
*         END OF TRMDEF DATA REACHED.  TRMDEFS ARE SENT DOWNLINE
*         AS SUPERVISORY MESSAGES, MAKING IT NECESSARY TO TRANSMIT
*         THE TRMDEF DATA SEPARATELY FROM ANY DATA FOLLOWING IT.
*         IF MORE DATA DOES EXIST, MARK TRANSLATION CONTINUATION
*         WORD AND BYTE.
  
 TTL15    SA5    DLTDC
          NZ     B5,TTL15.1  IF CONTROL BYTE 0010B TO BE SENT 
          SA5    DLTDF
  
 TTL15.1  SX3    6
          BX7    X5 
          SA7    SNDH 
          SX7    B3          BUILD AN EOL MASK
          IX3    X3*X7
          MX7    1
          SB7    X3-1 
          AX7    X7,B7
          BX7    X1*X7
          ZR     X7,TTL16    IF END OF LINE 
          SX7    A1          SET CONTINUATION WORD
          SA7    BHDB 
          SX7    B3          SET CONTINUATION BYTE
          AX7    1
          SA7    BHDA 
          EQ     TTLX        EXIT 
  
 TTL16    SX3    A1-B4
          NZ     X3,TTL17    IF NOT AT THE END OF THE *READ* POT
          RJ     GNR         GET NEXT *READ* POT
 TTL17    SA1    A1+B1       GET NEXT *READ* WORD 
          SX7    2R"IB" 
          LX7    48 
          BX3    X1-X7
          ZR     X3,TTLX     IF END OF *READ* DATA
          SX7    A1 
          SA7    BHDB        MARK TRANSLATION CONTINUATION POINT
          EQ     TTLX        EXIT 
 VBX      SPACE  4,30 
**        VBX - ASCII TO BINARY CODE CONVERSION.
* 
*         COPIES IVT ASCII CODE TO RECEIVING POTS IN 12 BIT FORMAT, 
*         SETTING UPPER BIT OF EACH 12 BIT BYTE AS NOS BINARY FLAG. 
*         THE FIRST BYTE IS PRESET TO *0007B* AND THE DATA COPY 
*         STARTS AT THE SECOND BYTE OF THE RECEIVING POT. 
* 
*                (RCCW) = 1/F,23/,18/TEXT LENGTH,18/RCVB. 
*                         F = FIRST BLOCK OF LOGICAL LINE IF SET. 
*         ENTRY  (X0) = ASCII8 OR BINARY BIT. 
* 
*         EXIT   (X6) = NONZERO IF CONVERSION COMPLETE. 
*                     = ZERO IF INSUFFICIENT POTS AVAILABLE.
*                (RCCW) = 0.
* 
*         CALLS  ADB. 
  
  
 VBX      SUBR               ENTRY/EXIT 
          SA3    TBUF-1 
          BX7    X3 
          SA7    A3 
          SX7    X0+
          SA3    RCCW 
          ZR     X7,VBX1     IF ASCII8
          PL     X3,VBX1     IF NOT FIRST BLOCK 
          SX7    0007B       SET CONTROL BYTE 
          SX4    B1+
          LX4    58-0 
          BX7    X7+X4       ASSEMBLE 12 BITS 
          SA7    A7+1 
 VBX1     SA2    X3          ADDRESS OF NEXT WORD TO BE CRACKED 
          AX3    18 
          SB7    X3+         CHARACTER COUNT
          SX1    B7-TBUFL+2 
          NG     X1,VBX2     IF CHARACTERS WILL FIT IN BUFFER 
          SB7    TBUFL-2
 VBX2     BX6    X6-X6
          SB5    X3          CHARACTER COUNT
          SB5    B5-B7
          LE     B5,VBX3     IF LAST TIME THROUGH THIS BLOCK
          SX6    B5+         DECREMENT CHARACTER COUNT
          LX6    18 
          SX4    A2+TBUFL*2/15  UPDATE ADDRESS IN RCBF
          BX6    X4+X6
 VBX3     SA6    A3          REWRITE *RCCW* 
          MX6    1           (X6) = EVEN/ODD WORD FLAG
          SX4    377B        (X4) = 8 BIT BYTE MASK 
          LE     B7,B0,VBX6  IF NULL LINE 
  
*         CRACK ASCII DATA INTO TRANSLATION BUFFER. 
  
 VBX4     BX6    -X6         TOGGLE EVEN/ODD WORD FLAG
          LX1    X2          MOVE NEXT WORD TO DISASSEMBLY
          SB6    7           (B6) = ASCII BYTE COUNT PER WORD 
 VBX5     LX1    8           SHIFT NEXT CHARACTER 
          SB7    B7-1        DECREMENT TOTAL CHARACTER COUNT
          BX7    X4*X1       MASK CHARACTER 
          SB6    B6-B1       DECREMENT WORD BYTE COUNT
          BX7    X7+X0       ADD BINARY OR ASCII8 BIT 
          SA7    A7+1        STORE CHARACTER
          LE     B7,B0,VBX6  IF ALL CHARACTERS MOVED
          NZ     B6,VBX5     IF NOT END OF WORD 
          SA2    A2+B1       READ UP NEXT WORD
          NG     X6,VBX4     IF PROCESSING ODD WORD 
  
*         PROCESS HALF-BYTES AT EVEN/ODD WORD BOUNDARY. 
  
          LX1    4           SHIFT UPPER HALF-BYTE
          MX7    -4 
          LX2    4           SHIFT LOWER HALF-BYTE
          BX1    -X7*X1      MASK HALF-BYTE 
          BX7    -X7*X2 
          LX1    4           MERGE HALF-BYTES 
          BX7    X7+X1
          BX7    X7+X0       ADD BINARY OR ASCII8 BIT 
          SA7    A7+B1       STORE ASSEMBLY 
          SB7    B7-1        DECREMENT CHARACTER COUNT
          GT     B7,B0,VBX4  IF NOT END OF DATA 
  
*         REASSEMBLE CRACKED DATA INTO POT CHAIN. 
  
 VBX6     MX7    1           TERMINATE BUFFER 
          SA7    A7+B1
          RJ     ADB         ASSEMBLE BUFFER TO POTS
          SA3    TBUF-1 
          BX7    X3 
          SA7    A3          RESET FWA STRING BUFFER
          SA3    RCCW 
          NZ     X3,VBX1     IF NOT FINISHED WITH THIS BLOCK
          SX6    1
          EQ     VBXX        RETURN 
 VGX      SPACE  4,30 
**        VDX - VIRTUAL ASCII TO DISPLAY CODE TRANSLATION.
* 
*         ENTRY  (X5) = CHARACTER MASK -
*                     = LOWER 6 BITS PLUS BIT 59 IF 6-BIT 
*                       DISPLAY CODE. 
*                     = LOWER 12 BITS IF 6/12-BIT 
*                       EXTENDED DISPLAY CODE.
*                     = LOWER 12 BITS IF 6/12-BIT TRANSPARENT 
*                       DISPLAY CODE. 
*                (RCCW) = 1/F,23/,18/TEXT LENGTH,18/RCVB. 
*                         F = FIRST BLOCK OF LOGICAL LINE IF SET. 
* 
*         EXIT   (X6) = NONZERO IF CONVERSION COMPLETE. 
*                     = ZERO IF INSUFFICIENT POTS AVAILABLE.
*                (RCCW) = 0.
* 
*         CALLS  ADB. 
  
  
 VDX      SUBR               ENTRY/EXIT 
 VDX1     SA3    RCCW 
          SA2    X3          ADDRESS OF NEXT WORD TO BE PROCESSED 
          AX3    18 
          SB7    X3          SET CHARACTER COUNT
          SB5    X3 
          SX1    B7-TBUFL+2 
          NG     X1,VDX2     IF CHARACTERS WILL FIT IN BUFFER 
          SB7    TBUFL-2
 VDX2     BX6    X6-X6
          SB5    B5-B7
          SB4    TBUF        (B4) = STRING BUFFER ADDRESS 
          LE     B5,B0,VDX3  IF LAST SEGMENT OF THIS BLOCK
          SX6    B5+         UPDATE CHARACTER COUNT 
          LX6    18 
          SX4    A2+TBUFL*2/15  UPDATE ADDRESS IN RCBF
          BX6    X4+X6
 VDX3     SA6    A3+         REWRITE RCCW 
          SB5    7           (B5) = NUMBER OF ASCII BYTES PER WORD
          ZR     B7,VDX8     IF NULL LINE 
          SX4    177B        SET 7-BIT ASCII MASK 
  
*         TRANSLATE ASCII WORD TO STRING BUFFER.
  
 VDX4     MX7    1           TOGGLE MASK UPPER BIT
          BX1    X2          MOVE NEXT WORD TO DISASSEMBLY
          BX4    X4-X7
          SB6    B5          (B6) = ASCII BYTE COUNT
 VDX5     LX1    8           SHIFT NEXT ASCII BYTE
          BX7    X4*X1       MASK ASCII BYTE
          SA3    TVXD+X7     READ TRANSLATION 
          SB7    B7-1        DECREMENT COUNTERS 
          SB6    B6-B1
          BX7    X5*X3       MASK TRANSLATION 
          NG     X7,VDX6     IF IGNORE CHARACTER
          SA7    B4+         STORE TRANSLATION
          SB4    B4+B1
          LX3    59-57       CHECK FOR SPECIAL CHARACTERS 
          NG     X3,VDX9     IF SPECIAL CHARACTER 
 VDX6     LE     B7,B0,VDX7  IF END OF DATA 
          GT     B6,B0,VDX5  IF NOT END OF WORD 
          SA2    A2+1        READ NEXT WORD 
          PL     X4,VDX4     IF NOT CROSSING FROM EVEN TO ODD WORD
  
*         PROCESS HALF-BYTES AT EVEN/ODD WORD BOUNDARY. 
  
          LX1    4           SHIFT UPPER HALF-BYTE
          SX7    17B
          LX2    4           SHIFT LOWER HALF-BYTE
          BX1    X7*X1       MASK HALF-BYTES
          BX7    X7*X2
          LX1    4
          BX7    X7+X1       MERGE HALF BYTES 
          BX7    X4*X7       REMOVE ASCII PARITY BIT
          SA3    TVXD+X7     READ TRANSLATION 
          SB7    B7-B1       DECREMENT CHARACTER COUNT
          BX7    X5*X3       MASK TRANSLATION 
          NG     X7,VDX7     IF IGNORE CHARACTER
          SA7    B4          STORE TRANSLATION
          SB4    B4+B1
          LX3    59-57       CHECK FOR SPECIAL CHARACTERS 
          NG     X3,VDX10    IF SPECIAL CHARACTER 
 VDX7     GT     B7,B0,VDX4  IF NOT END OF DATA 
          SA3    B4-1        CHECK LAST CHARACTER OF BUFFER 
          SX7    1R 
          SA2    RCCW 
          NZ     X3,VDX8     IF NOT COLON (*00*)
          SA3    PINA        GET BLOCK TYPE 
          NZ     X2,VDX8     IF NOT END OF BLOCK
          SX3    X3-BTBK
          ZR     X3,VDX8     IF BLK BLOCK TYPE
          SA7    B4          ADD TRAILING BLANK 
          SB4    B4+B1       ADVANCE BUFFER POINTER 
 VDX8     MX7    1           TERMINATE BUFFER 
          SA7    B4 
  
*         REASSEMBLE TRANSLATED CODE INTO POT CHAIN.
  
          RJ     ADB         ASSEMBLE DATA
          SA3    RCCW 
          NZ     X3,VDX1     IF NOT FINISHED WITH THIS BLOCK
          SX6    B1+         SET RETURN STATUS
          EQ     VDXX        RETURN 
  
*         PROCESS SPECIAL CHARACTERS IF IN NORMAL MODE. 
* 
*         ENTRY  (X7) = SPECIAL CHARACTER TRANSLATION.
*                (A7) = CURRENT BUFFER ADDRESS. 
  
 VDX9     LX3    12-59+57    POSITION SPECIAL CHARACTER TRANSLATION 
          BX7    X5*X3
          SX3    X5          SET LOWER 18 BITS OF MODE MASK 
          AX3    6           CHECK IF TRANSPARENT 
          NZ     X3,VDX6     IF TRANSPARENT OR EXTENDED 
          SA7    A7+         REPLACE CHARACTER
          EQ     VDX6        CONTINUE 
  
 VDX10    LX3    12-59+57    POSITION LOWER 18 BITS OF MODE MASK
          BX7    X5*X3
          SX3    X5          SET LOWER 18 BITS OF MODE MASK 
          AX3    6           CHECK IF TRANSPARENT OR EXTENDED 
          NZ     X3,VDX7     IF TRANSPARENT OR EXTENDED 
          SA7    A7+         REPLACE CHARACTER
          EQ     VDX7        CONTINUE 
          TITLE  CPU COMMON DECKS.
          SPACE  4,10 
**        CPU COMMON DECKS. 
  
  
*CALL     COMCCIO 
*CALL     COMCWOD 
          LIST   X
*CALL     COMTVDT 
          LIST   *
          TITLE  DATA TRANSFER BUFFERS. 
          USE    BUFFERS
 RCVB     SPACE  4,10 
**        RCVB  - NETWORK DATA RECEIVE BUFFER.
  
  
 RCVL     EQU    1+2*VXPH/15D  CALCULATE BUFFER LENGTH
  
 RCVH     CON    0           RECEIVE DATA BLOCK HEADER
 RCVB     BSSZ   RCVL        RECEIVE DATA BLOCK BUFFER
 SNDB     SPACE  4,10 
**        SNDB - NETWORK DATA SEND BUFFER.
  
  
 SNDH     CON    0           SEND DATA BLOCK HEADER 
 SNDB     BSSZ   SNDL        SEND DATA BLOCK BUFFER 
          ERRNZ  SNDH-SNDB+1
 VBUF     SPACE  4,10 
**        AIPB - APPLICATION INTERFACE PROCEDURES UPLINE DATA BUFFER. 
  
  
 AIPB     VFD    12/0,12/1,12/1,12/0,12/AIPL
          BSSZ   AIPL 
 TINST    SPACE  4,10 
**        TINST - INSTRUCTION MODIFICATION TABLE. 
  
 TINST    BSS    0
          LIST   -R 
 TINST    HERE               ASSEMBLE REMOTE CODE 
          LIST   R
 TINSTL   EQU    *-TINST
          TTL    IAFEX - TTY EXECUTIVE PROCESSOR. 
 END      SPACE  4,10 
          END 
