COMCRTN 
COMMON
          CTEXT  COMCRTN - READ TERMINAL NETWORK DESCRIPTION. 
 RTN      SPACE  4
          IF     -DEF,QUAL$,1 
          QUAL   COMCRTN
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RTN      SPACE  4
***       RTN - READ TERMINAL NETWORK DESCRIPTION.
*         J.C. BOHNHOFF. 72/09/09.
          SPACE  4
***              RTN READS AND INTERPRETS A RECORD OF DISPLAY CODED 
*         TERMINAL DESCRIPTIONS AND ALLOWS THE FORMATION OF A TABLE 
*         BASED UPON INFORMATION FOUND. 
* 
*                TERMINAL DESCRIPTION FORMAT. 
*         TERMINAL NETWORK DESCRIPTION CONSISTS OF A SET OF DIRECTIVE 
*         CARDS DESCRIBING EACH TERMINAL IN THE NETWORK. CARDS MAY
*         BE UP TO 90 COLUMNS, BUT ONLY COLUMNS 1 THROUGH 72 ARE
*         EXAMINED BY RTN. ANY CARD CONTAINING AN ASTERISK (*) IN 
*         COLUMN 1 IS CONSIDERED A COMMENT CARD AND IS IGNORED. 
*         IF THE FILE IS BEING FORMATTED FOR NETWORK INTERFACE, 
*         THE ONLY DIRECTIVE WHICH WILL BE CONTAINED IN THE FILE WILL 
*         HAVE THE FORMAT 
*         //NAMIAF,NC=NNN.
*                NC.         NUMBER OF CONNECTIONS. 
*                            1-512D.
*         TERMINALS ARE GROUPED INTO SETS BY THE MULTIPLEXOR THROUGH
*         WHICH THEY COMMUNICATE WITH THE SYSTEM. EACH SET IS INTRODUCED
*         BY A MUX DEFINITION IN THE FOLLOWING FORMAT - 
*                //MUXTYPE,P1=N,P2=N
*         A TERMINAL IS CONSIDERED TO BELONG TO THE MUX SET BEGUN WITH
*         THE PRECEDING MUX DEFINITION. 
* 
*         EACH TERMINAL DESCRIPTION IS BEGUN BY A TERMINAL NAME 
*         DIRECTIVE IN THE FORMAT - /NAMENAM
*         THE SLASH (/) IS MANDATORY AND MUST IMMEDIATELY PRECEDE THE 
*         TERMINAL NAME WHICH MAY BE ANY 1 TO 7 ALPHANUMERIC CHARACTERS.
*         FOLLOWING THE TERMINAL NAME AND SEPERATED BY COMMAS ARE 
*         VARIOUS ARGUMENTS DESCRIBING TERMINAL CHARACTERISTICS IN THE
*         FORM - /NAME,AA=AAAA,NN=NNNNNN,...
*         IN THE FOLLOWING ARGUMENT DESCRIPTIONS, ALPHNUMERIC ARGUMENT
*         VALUES ARE DENOTED BY *AAA* AND NUMERIC ARGUMENT VALUES BY
*         *NNN*. NUMERIC VALUES ARE ALWAYS INTEGERS AND MAY BE SPECIFIED
*         IN EITHER OCTAL OR DECIMAL BASE BY INCLUDING A *B* OR *D* 
*         RADIX SYMBOL IMMEDIATELY AFTER THE NUMBER. IN THE ABSENCE OF A
*         RADIX, DECIMAL BASE IS ASSUMED. EACH TERMINAL DESCRIPTION MAY 
*         SPAN SEVERAL CARDS AND SPACES BETWEEN ARGUMENTS ARE IGNORED.
*         AN ARGUMENT NAME OR VALUE MAY NOT BE BROKEN BETWEEN INPUT 
*         CARDS. THE NAME MAY APPEAR ON THE CARD PREVIOUS TO THE VALUE, 
*         BUT THE EQUAL SIGN MUST IMMEDIATELY FOLLOW THE NAME AND BE ON 
*         THE SAME INPUT CARD.
*         IF AN ERROR IS DETECTED, COMCRTN WILL RETURN -
*                THE ADDRESS OF AN ERROR MESSAGE, 
*                THE CARD NUMBER OF THE OFFENDING CARD, 
*                THE ADDRESS OF THE CARD STRING BUFFER. 
*         UPON THE NEXT ENTRY TO ATD AFTER AN ERROR, CHARACTERS ARE 
*         SKIPPED UNTIL A */* IS ENCOUNTERED AND THEN ASSEMBLY BEGINS 
*         ANEW. 
* 
*                THE DESCRIPTION FILE IS EXPECTED TO BE PROPERLY
*         POSITIONED UPON ENTRY TO ATD. 
* 
*                PROGRAMS THAT USE COMCRTN MAY PLACE FURTHER
*         RESTRICTIONS UPON ARGUMENT VALUES THAN THOSE STATED BELOW.
*         IT IS BEST TO CONSULT APPROPRIATE DOCUMENTATION FOR THOSE 
*         PROGRAMS BEFORE WRITING TERMINAL DESCRIPTIONS.
* 
*                AFTER EACH TERMINAL DESCRIPTION HAS BEEN ASSEMBLED, ATD
*         RETURNS TO THE CALLER. TERMINAL DESCRIPTION ARGUMENT VALUES 
*         AT THIS POINT RESIDE IN THE FOLLOWING LOCATIONS - 
*                TN.         TERMINAL NAME. 
*                            1-7 LEFT JUSTIFIED, ZERO FILL, CHARS.
*                DB.         DATA BASE NAME.* 
*                            2 LEFT JUSTIFIED CHARACTERS. 
*                IS.         INITIAL ON/OFF STATUS.*
*                            BINARY 0 OR 1. 1=OFF.
*                LS.         LINE SPEED IN CHARACTERS PER SECOND. 
*                            BINARY VALUE FROM 1-3777B. 
*                PC.         POLLING CODE.
*                            24 BIT BINARY VALUE. 
*                PN.         PORT NUMBER. 
*                            PACKED FLOATING POINT FORMAT VALUE.
*                            COEFFICIENT IS THE PORT NUMBER FROM 0-63.
*                            IF EXPONENT IS NONZERO, A RANGE OF PORTS 
*                            WITH IDENTICAL TERMINALS IS DEFINED. 
*                            IN THIS CASE, THE EXPONENT IS THE NUMBER OF
*                            PORTS IN THE RANGE - 1.
*                RS.         DATA BASE READ SECURITY.*
*                            3 BIT BINARY VALUE.
*                TT.         TERMINAL TYPE. 
*                            BINARY VALUE DEFINED BY SYMBOL IN *COMSNET*
*                            IF BIT 11 IS SET, TERMINAL IS A KTS
*                            TERMINAL.
*                UA.         USER ARGUMENTS.* 
*                            24 BIT BINARY VALUE. 
*                US.         DATA BASE UPDATE SECURITY.*
*                            3 BIT BINARY VALUE.
*                MT.         MULTIPLEXOR TYPE.
*                            BINARY VALUE SYMBOLIZED IN *COMSNET*.
*                CH.         MULTIPLEXOR CHANNEL. 
*                            PACKED FLOATING POINT FORMAT VALUE.
*                            EXPONENT IS ZERO, COEFFICIENT IS CHANNEL.
*                EQ.         MULTIPLEXOR EQUIPMENT (CONTROLLER) NUMBER
*                            PACKED FLOATING POINT FORMAT VALUE.
*                            EXPONENT IS ZERO, COEFFICIENT IS EQUIPMENT.
*                CC          CURRENT INPUT CARD NUMBER. 
*                            BINARY.
*                CD          INPUT CARD STRING BUFFER.
*                            ONE RIGHT JUSTIFIED CHARACTER PER WORD.
* 
*                AFTER ALL TERMINAL DESCRIPTIONS HAVE BEEN ASSEMBLED, 
*         THE USER MAY CALL STB TO SORT A TERMINAL TABLE THAT HE HAS
*         FORMED. THE TABLE ENTRIES ARE SORTED IN ASCENDING ORDER BY
*         CHANNEL, EQUIPMENT, AND PORT NUMBER. TO MINIMIZE SORTING TIME,
*         THE SOURCE DESCRIPTIONS SHOULD BE MAINTAINED IN THIS ORDER. 
* 
*         INTERFACE SPECIFICATIONS FOR *ATD* - ASSEMBLE TERMINAL
*         DESCRIPTION - 
* 
*         ENTRY  (X5) = ADDRESS OF FET FOR DESCRIPTION FILE.
*                (A0) = ADDRESS OF A WORD THAT DESCRIBES A TABLE THAT 
*                       *COMCRTN* CAN USE TO STORE TERMINAL NAMES.
*                (B1) = 1.
*T WORD   12/SCRATCH,18/LENGTH,30/FWA 
*                SCRATCH = USED BY *COMCRTN*. 
*                LENGTH = MAXIMUM TABLE LENGTH. 
*                FWA = ADDRESS OF TABLE.
* 
*         EXIT   (X1) .NE. 0 IF ENCOUNTERED IN DESCRIPTION FILE.
*                IF ERROR ENCOUNTERED, THEN - 
*                (X0) = ADDRESS OF CARD STRING BUFFER.
*                (X2) = ADDRESS OF ERROR MESSAGE. 
*                (X4) = CARD NUMBER WITH ERROR.  IF (X4) = 0, NO
*                       DESCRIPTION CARDS WERE FOUND, IF (X4) .LT. 0, 
*                       AN *EOR* WAS ENCOUNTERED (NO ERROR).
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                A - 1, 2, 3, 4, 6, 7.
*                B - ALL. 
* 
*         CALLS  DXB. 
* 
*         MACROS ABORT, DATE, MACHID, MESSAGE, READS, REWIND. 
* 
*         XREF   COMSNET. 
  
  
*         PROCESS END OF RECORD.
  
 ATD6     SA1    ST          CHECK *STOP* FLAG
          NZ     X1,ATD8     IF *STOP*
          SX6    B1          SET *STOP* 
          SA2    ATDC        MOVE PSEUDO-CARD TO STRING BUFFER
          MX0    -6 
          SA6    A1+
          LX2    6
          BX7    -X0*X2 
          SA7    CD 
 ATD7     LX2    6
          BX7    -X0*X2 
          SA7    A7+1 
          NZ     X7,ATD7
          RJ     EPD         ENTER PREVIOUS DESCRIPTION 
 ATD8     SX1    1           RETURN *EOR* 
          SX4    -1 
  
**        ATD - ASSEMBLE TERMINAL DESCRIPTION.
  
 ATD      PS                 ENTRY/EXIT 
          SA2    ATDA        CHECK *FIRST ENTRY*
          ZR     X2,ATD1     IF NOT *FIRST ENTRY* 
  
*         PROCESS FIRST CALL. 
  
          BX7    X7-X7       CLEAR *FIRST ENTRY*
          SA7    A2 
          READ   X5          INITIATE READ
          RJ     RNC         READ FIRST CARD
          RJ     ANW         ASSEMBLE FIRST WORD
          SX4    0
          NZ     X1,ATD      RETURN - IF EOR/EOF
          SX2    EMDE        * MULTIPLEXOR DESCRIPTION EXPECTED.* 
  
*         RE-ENTER PROGRAM IF NEEDED. 
  
 ATD1     SA1    RE          CHECK RE-ENTRY NEEDED
          ZR     X1,ATD2     IF NONE
          BX6    X6-X6       CLEAR RE-ENTRY 
          SB7    X1          RE-ENTER PROGRAM 
          SA6    RE 
          JP     B7 
  
*         BEGIN NEW MUX/TERMINAL DESCRIPTION. 
  
 ATD2     SA1    WD          VERIFY START OF NEW DESCRIPTION
          MX0    60-6 
          LX1    6
          BX6    -X0*X1 
          SB7    X6-1R/ 
          LX1    6
          NZ     B7,ERR      IF NOT TERMINAL NAME OR MUX DESCRIPTION
          BX6    -X0*X1      CHECK MUX DESCRIPTION
          SB7    X6-1R/ 
          NZ     B7,TNAP     PROCESS TERMINAL NAME
          JP     MUAP        PROCESS MUX DESCRIPTION
  
*         PROCESS MUX/TERMINAL DESCRIPTION ARGUMENTS. 
  
 ATDR     BSS    0           RETURN FROM ARGUMENT PROCESSORS
 ATD3     RJ     ANW         ASSEMBLE NEXT KEYWORD
          NZ     X1,ATD6     IF EOR/EOF 
          SA3    TK          IDENTIFY KEYWORD 
          MX0    42 
          SA3    X3 
          SA1    WD 
          SX2    EUKW        * UNKNOWN KEYWORD.*
 ATD4     ZR     X3,ATD2     IF END OF TABLE
          BX6    X1-X3       COMPARE
          BX7    X0*X6
          ZR     X7,ATD5     IF KEYWORD FOUND 
          SA3    A3+1        READ NEXT TABLE ENTRY
          EQ     ATD4        LOOP 
  
 ATD5     SA1    LC          CHECK SEPERATOR +=+
          SA1    X1 
          SX6    X3          SAVE PROCESSOR ADDRESS 
          SB6    X1-1R= 
          SX2    EKNE        * KEYWORD NOT EQUIVALENCED.* 
          NZ     B6,ERR      IF SEPERATOR NOT +=+ 
          SA6    ATDB 
          RJ     ANW         ASSEMBLE ARGUMENT VALUE
          SX2    EAVM        * ARGUMENT VALUE MISSING.* 
          NZ     X1,ERR      IF EOR/EOF 
          SA1    ATDB        EXECUTE KEYWORD PROCESSOR
          SB7    X1+
          JP     B7 
  
 ATDA     CON    1           *FIRST ENTRY* FLAG 
 ATDB     CON    0           ARGUMENT PROCESSOR ADDRESS HOLD
 ATDC     CON    9L>> EOR << *EOR* PSEUDO-CARD
 TTDK     SPACE  4
**        TTDK - TABLE OF TERMINAL DESCRIPTION KEYWORDS.
*         ONE WORD ENTRY IN FORMAT -
* 
*T        42/ *KEYWORD*,18/ PROC
* 
*         WHERE  KEYWORD= LEFT JUSTIFIED, ZERO FILLED KEYWORD.
*                PROC= ADDRESS OF KEYWORD PROCESSOR.
  
  
 TTDK     BSS    0
          CON    0LDB+DBAP   *DB* 
          CON    0LIS+ISAP   *IS* 
          CON    0LLS+LSAP   *LS* 
          CON    0LPC+PCAP   *PC* 
          CON    0LPL+PLAP   *PL* 
          CON    0LPN+PNAP   *PN* 
          CON    0LRS+RSAP   *RS* 
          CON    0LTT+TTAP   *TT* 
          CON    0LUA+UAAP   *UA* 
          CON    0LUS+USAP   *US* 
          CON    0           TABLE TERMINATOR 
 TMDK     SPACE  4
**        TMDK - TABLE OF MULTIPLEXOR DESCRIPTION KEYWORDS. 
*         SAME FORMAT AS *TTDK*.
  
  
 TMDK     BSS    0
          CON    0LCH+CHAP   *CH* 
          CON    0LEQ+EQAP   *EQ* 
          CON    0
 COM      SPACE  4
*         COMMON STORAGE. 
  
  
 AB       CON    1           ASSEMBLY BYPASS (=0 IF BYPASS) 
 CC       CON    0           CARD COUNT 
 CD       BSS    91          CARD STRING BUFFER 
 CL       CON    0           ADDRESS OF CARD LIMIT
 EB       CON    0           ENTRY BYPASS (=0 IF BYPASS)
 FC       CON    0           ADDRESS OF FIRST CHARACTER OF CURRENT WORD 
 LC       CON    0           ADDRESS OF NEXT CHARACTER TO ASSEMBLE
 MD       CON    0           *PROCESSING MUX DESCRIPTION* FLAG
 NF       CON    0           NETWORK FLAG 
 RE       CON    0           RE-ENTRY ADDRESS 
 ST       CON    0           *STOP* FLAG
 KF       CON    0           KTS FLAG 
 TK       CON    TMDK        ADDRESS OF KEYWORD TABLE 
          CON    0           SACRIFICIAL WORD BEFORE *WD* 
 WD       BSS    8           WORD ASSEMBLY BUFFER 
  
*         TERMINAL ARGUMENT VALUES. 
  
 TARV     BSS    0
 TN.      CON    0           TERMINAL NAME
 DB.      CON    0           DATA BASE NAME 
 IS.      CON    0           INITIAL STATUS 
 LS.      CON    0           LINE SPEED 
 NC.      CON    0           NUMBER OF NAM CONNECTIONS
 PC.      CON    0           POLLING CODE 
 PN.      CON    0           PORT NUMBER
 RS.      CON    0           READ SECURITY
 TT.      CON    0           TERMINAL TYPE
 UA.      CON    0           USER ARGUMENTS 
 US.      CON    0           UPDATE SECURITY
 TARVL    EQU    *-TARV 
  
 MT.      CON    0           MULTIPLEXOR TYPE 
 CH.      CON    0           MULTIPLEXOR CHANNEL
 EQ.      CON    0           MULTIPLEXOR EQUIPMENT
          TITLE  COMCRTN - MULTIPLEXOR DESCRIPTION ARGUMENT PROCESSORS. 
***              MULTIPLEXOR DESCRIPTION ARGUMENT FORMATS.
* 
*         EXAMPLE OF MULTIPLEXOR DESCRIPTION -
* 
*                //6676,CH=1,EQ=4.
* 
*         EXAMPLE OF NETWORK ACCESS METHOD INTERFACE DESCRIPTION -
* 
*                //NAMIAF,NC=10,HS=6. 
 MDAP     SPACE  4
***       //AAAA
*         ** MANDATORY TO START A SET OF TERMINAL DESCRIPTIONS. 
*         DESCRIBE MULTIPLEXOR OF TYPE AAAA.
*         AAAA MAY BE - 
*                6676        6676 MULTIPLEXOR 
*                6671        6671 MULTIPLEXOR 
*                STIM        STIMULATED MULTIPLEXOR 
*                DIAL        PSUEDO MULTIPLEXOR 
*                NAMIAF      NETWORK ACCESS METHOD INTERFACE
  
  
**        MDAP - PROCESS MULTIPLEXOR DESCRIPTION. 
  
  
 MUAP     BSS    0           ENTRY
          RJ     EPD         ENTER PREVIOUS DESCRIPTION 
          SA1    WD          IDENTIFY MUX TYPE
          SA3    TMTD 
          MX0    42 
          SX2    EUMT        * UNKNOWN MULTIPLEXOR TYPE.* 
          LX1    6*2
 MUAP1    ZR     X3,ERR      IF END OF TABLE
          BX6    X1-X3       COMPARE
          BX7    X0*X6
          ZR     X7,MUAP2    IF MATCH FOUND 
          SA3    A3+1        READ NEXT TABLE ENTRY
          EQ     MUAP1       LOOP THROUGH TABLE 
  
 MUAP2    SX7    B1          SET *PROCESSING MUX ENTRY* FLAG
          SX6    X3          STORE MUX TYPE 
          SA7    MD 
          SA6    MT.
          SX6    X6-MXNI     CHECK MUX TYPE 
          ZR     X6,NCAP     IF NAM INTERFACE 
          SX7    0           CLEAR EQUIPMENT AND CHANNEL NUMBERS
          SX6    TMDK        SET MUX DESCRIPTION KEYWORD TABLE
          SA7    CH.
          SA6    TK 
          SA7    EQ.
          JP     ATDR        RETURN 
 TMTD     SPACE  4
**        TMTD - TABLE OF MULTIPLEXOR TYPE DESIGNATIONS.
  
  
 TMTD     BSS    0
          CON    0L6676+MT76 6676 
          CON    0L6671+MT71 6671 
          CON    0LSTIM+MTST STIMULATED 
          CON    0LDIAL+MXPM PSUEDO 
          CON    0LNAMIAF+MXNI  NAM INTERFACE 
          CON    0           TABLE TERMINATOR 
 CHAP     SPACE  4
***       CH=NN.
*         ** MANDATORY ARGUMENT ON MULTIPLEXOR DESCRIPTION. 
*         DECLARE MULTIPLEXOR CHANNEL.
*         NN MAY RANGE FROM 0 TO 13B AND 20B TO 33B.
  
  
**        CHAP - PROCESS *CH*.
  
  
 CHAP     BSS    0           ENTRY
          SB6    CHAPA       PROCESS VALUE
          RJ     PNA
          ZR     X4,CHAP1    IF NO ERROR
          SB6    CHAPB       TRY OTHER RANGE
          RJ     PNA
          SX2    ECHR        * CHANNEL NUMBER OUT OF RANGE.*
          NZ     X4,ERR      IF OUT OF RANGE
 CHAP1    PX6    X6          STORE CHANNEL NUMBER 
          SA6    CH.
          JP     ATDR        RETURN 
  
 CHAPA    VFD    12/2000B,48/14B
 CHAPB    VFD    12/2020B,48/34B
 EQAP     SPACE  4
***       EQ=N. 
*         ** MANDATORY ARGUMENT ON MULTIPLEXOR DESCRIPTION. 
*         DECLARE MULTIPLEXOR EQUIPMENT (CONTROLLER) NUMBER.
*         N MAY RANGE FROM 0 TO 7.
  
  
**        EQAP - PROCESS *EQ*.
  
  
 EQAP     BSS    0           ENTRY
          SB6    EQAPA       PROCESS VALUE
          RJ     PNA
          SX2    EEQR        * EQUIPMENT NUMBER OUT OF RANGE.*
          NZ     X4,ERR      IF OUT OF RANGE
          PX6    X6          STORE EQUIPMENT (CONTROLLER) NUMBER
          SA6    EQ.
          JP     ATDR        RETURN 
  
 EQAPA    VFD    12/2000B,48/10B
 NCAP     SPACE  4,10 
**        NC=N. 
* 
*         ** NC IS A MANDATORY ARGUMENT FOR NAM INTERFACE DESCRIPTION.
*         DECLARE NUMBER OF CONNECTIONS.
*         N MAY RANGE FROM 1 TO 512D. 
  
  
 NCAP     BSS    0           ENTRY
          SA1    NF          CHECK FOR PREVIOUS NAM DEFINITION
          SX2    EMND        * MULTIPLE NAM INTERFACE DEFINITIONS.* 
          NZ     X1,ERR      IF PREVIOUS DEFINITION 
          SA1    KF          CHECK KTS FLAG 
          SX2    EKNI        * KTS AND NAM INCOMPATIBLE.* 
          NZ     X1,ERR      IF KTS DEFINED 
          RJ     ANW         ASSEMBLE KEYWORD 
          SX2    ECCM        * CONNECTION COUNT MISSING.* 
          NZ     X1,ERR      IF EOR/EOF 
          SA1    WD          CHECK KEYWORD
          LX1    12 
          SX1    X1-2RNC
          NZ     X1,ERR      IF NOT *NC*
          SX3    NCA1        SET RETURN ADDRESS 
          EQ     ATD5        PROCESS ARGUMENT 
  
*         RETURN FROM ARGUMENT PROCESSOR. 
  
 NCA1     SB6    NCAPA       PROCESS VALUE
          RJ     PNA
          SX2    EICC        * INVALID CONNECTION COUNT*
          NZ     X4,ERR      IF CONNECTION COUNT ERROR
  
*         SET PARAMETERS FOR RETURN TO CALLER.
  
          SA6    NC.         CONNECTION COUNT 
          SB3    X6-1        CONNECTION COUNT-1 
          SX6    B1          FIRST PORT 
          PX6    X6,B3       FORMAT PORT ENTRY
          SA6    PN.         STORE PORT ENTRY 
          SX7    TTNI        SET TERMINAL TYPE
          SA7    TT.
          SX6    37B         SET DUMMY CHANNEL
          SX7    7           SET DUMMY EQUIPMENT
          SA6    CH.
          SA7    EQ.
          SA6    NF          SET NAM INTERFACE FLAG 
          RJ     ANW         ASSEMBLE KEYWORD 
          SX2    EUKW        * UNKNOWN KEYWORD.*
          ZR     X1,ERR      IF NOT EOR/EOF 
          SX7    NCA2        SET REENTRY ADDRESS
          SA7    RE 
          SX1    B0+         X1 = NO ERRORS 
          JP     ATD         RETURN TO CALLING PROCESSOR
  
*         REENTER TO PROCESS NEXT MUX ENTRY.
  
 NCA2     RJ     CTV         CLEAR TERMINAL VALUES
          SA6    EB          SET ENTRY BYPASS 
          RJ     ANW         ASSEMBLE NEXT KEYWORD
          SX4    -1          INDICATE CARDS PROCESSED 
          NZ     X1,ATD      IF EOR/EOF - RETURN
          SX2    EMDE        * MULTIPLEXER DESCRIPTION EXPECTED.* 
          JP     ATD2        PROCESS NEXT MULTIPLEXER DESCRIPTION 
  
 NCAPA    VFD    12/2001B,48/1018D
 NCAPB    VFD    12/2001B,48/32D
          TITLE  COMCRTN - TERMINAL DESCRIPTION ARGUMENT PROCESSORS.
***              TERMINAL DESCRIPTION ARGUMENT FORMATS. 
* 
*         EXAMPLE OF TIME-SHARING TERMINAL DESCRIPTION -
* 
*                /XXX,LS=10,PN=1,TT=AB. 
* 
*         EXAMPLE OF KTS TERMINAL DESCRIPTION - 
* 
*                /C02001A,DB=LC,IS=ON,LS=15,PC=20B,PN=3,
*                 RS=4,TT=*NIX,UA=015700B,US=4. 
 TNAP     SPACE  4
***       /AAAAAAA
*         ** MANDATORY TO DESCRIBE A TERMINAL.
*         DEFINE TERMINAL NAME AAAAAAA. 
*         AAAAAAA MAY BE ANY 7 OR LESS ALPHANUMERIC CHARACTERS. 
  
  
**        TNAP - PROCESS TERMINAL NAME. 
* 
*         ENTRY  (X2)= ERROR CODE. IF (X2)= *EMDE*, A MUX DESCRIPTION 
*                WAS EXPECTED, SO TREAT AS AN ERROR.
  
  
 TNAP     BSS    0           ENTRY
          SB7    X2-EMDE
          ZR     B7,ERR      IF MUX DESCRIPTION EXPECTED
          RJ     EPD         ENTER PREVIOUS TERMINAL DESCRIPTION
          SX6    TTDK        SET TERMINAL DESCRIPTION KEYWORD TABLE 
          SA1    WD          CHECK NAME .LE. 7 CHARACTERS 
          SA6    TK 
          MX0    60-6 
          LX1    6
          MX4    6*7
          BX3    X0*X1       REMOVE +/+ 
          SX2    ETNL        * TERMINAL NAME TOO LONG.* 
          BX4    -X4*X3      PICK EXCESS CHARACTERS 
          NZ     X4,ERR      IF NAME TOO LONG 
          RJ     STN         CHECK DUPLICATE KTS TERMINAL NAME
          ZR     X2,TNAP1    IF NO DUPLICATE FOUND
          SX2    EDTN        * TERMINAL NAME DUPLICATES THAT OF KTS 
*                            TERMINAL.* 
          JP     ERR
 TNAP1    SA6    TN.         STORE TERMINAL NAME
          JP     ATDR        RETURN 
 DBAP     SPACE  4
***       DB=AA.
*         ** KTS TERMINAL ARGUMENT. 
*         DECLARE DATA BASE TO BE USED BY TERMINAL. 
*         AA MAY BE ANY LEGAL 2 CHARACTER DATA BASE NAME. 
  
  
**        DBAP - PROCESS *DB*.
  
  
 DBAP     BSS    0           ENTRY
          SA1    WD          CHECK NAME IS 2 CHARACTERS 
          MX0    6*2
          MX2    6
          BX6    -X0*X1      EXCESS CHARACTERS PAST 2 
          BX7    -X2*X1      EXCESS CHARACTERS PAST 1 
          SX2    EDBL        * DATA BASE NAME NOT 2 CHARACTERS.*
          NZ     X6,ERR      IF .GT. 2 CHARACTERS 
          ZR     X7,ERR      IF .LT. 2 CHARACTERS 
          SX2    EDBF        * DATA BASE NAME FIRST CHARACTER BAD.* 
          NG     X1,ERR      IF NAME STARTS WITH CHARACTER .GE. 5 
          BX6    X1          STORE DATA BASE NAME 
          SA6    DB.
          JP     ATDR        RETURN 
 ISAP     SPACE  4
***       IS=AAA. 
*         ** KTS TERMINAL ARGUMENT. 
*         DECLARE INITIAL ON/OFF STATUS.
*         AAA MAY BE *ON* OR *OFF*. 
*         DEFAULT VALUE IS *ON*.
  
  
**        ISAP - PROCESS *IS*.
  
  
 ISAP     BSS    0           ENTRY
          SA1    WD          CHECK *ON* 
          SA3    ISAPA
          SX2    EUIS        * UNKNOWN INITIAL STATUS.* 
          SA4    ISAPB       CHECK *OFF*
          BX6    X1-X3
          BX7    X1-X4
          ZR     X6,ISAP1    IF *ON*
          NZ     X7,ERR      IF NOT *OFF* 
          SX6    1
 ISAP1    SA6    IS.         STORE INITIAL STATUS 
          JP     ATDR        RETURN 
  
 ISAPA    CON    0LON 
 ISAPB    CON    0LOFF
 LSAP     SPACE  4
***       LS=NNNN.
*         DECLARE TERMINAL LINE SPEED. (CHARACTER RATE) 
*         NNNN IS IN CHARACTERS PER SECOND AND VALUES MAY RANGE 
*         FROM 1 TO 2047. IF TERMINAL BIT RATE IS NOT INTEGRAL WHEN 
*         EXPRESSED IN CHARACTERS PER SECOND, USE THE NEXT HIGHER 
*         INTEGER.
  
  
**        LSAP - PROCESS *LS*.
  
  
 LSAP     BSS    0           ENTRY
          SB6    LSAPA       PROCESS VALUE
          RJ     PNA
          SA6    LS.         STORE VALUE
          SX2    ELSR        * LINE SPEED OUT OF RANGE.*
          ZR     X4,ATDR     IF VALUE WITHIN RANGE
          JP     ERR         PROCESS ERROR
  
 LSAPA    VFD    12/2001B,48/1S11 
 PCAP     SPACE  4
***       PC=NNNNNNNN.
*         DEFINE TERMINAL POLLING CODE. 
*         NNNNNNNN MAY RANGE FROM 0 TO 16777215. (24 BITS)
  
  
**        PCAP - PROCESS *PC*.
  
  
 PCAP     BSS    0           ENTRY
          SB6    PCAPA       PROCESS VALUE
          RJ     PNA
          SA6    PC.         STORE VALUE
          SX2    EPCR        * POLLING CODE OUT OF RANGE.*
          ZR     X4,ATDR     IF VALUE WITHIN RANGE
          JP     ERR         PROCESS ERROR
  
 PCAPA    VFD    12/2000B,48/1S24 
 PLAP     SPACE  4
***       PL=N. 
*         DEFINE LIMIT OF A RANGE OF PORTS FOR A SET OF IDENTICAL 
*         TERMINALS.
*         N MAY RANGE FROM THE PREVIOUS DECLARED PORT NUMBER *PN* + 1 
*         TO 64 FOR A 6676 MULTIPLEXOR, TO 16 FOR A 6671 MULTIPLEXOR, OR
*         TO 1023 FOR A STIMULATED MULTIPLEXOR. THE *PN* ARGUMENT MUST
*         APPEAR PREVIOUS TO THE *PL* ARGUMENT. 
  
  
**        PLAP - PROCESS *PL*.
  
  
 PLAP     BSS    0           ENTRY
          SA1    PN.         CHECK FIRST PORT DEFINED 
          SA3    MT.         FIND PORT LIMIT FOR MUX TYPE 
          SX2    EFPU        * *PN* DESIGNATION MUST PRECEDE *PL*.* 
          ZR     X1,ERR      IF FIRST PORT UNDEFINED
          SB7    X3 
          UX6    X1 
          SA1    PLAPA+B7    READ UPPER LIMIT FOR MUX TYPE
          SB7    X6+B1       LOWER LIMIT = PN+1 
          PX6    X1,B7
          SA6    PLAPB
          SB6    PLAPB       PROCESS NUMERIC ARGUMENT 
          RJ     PNA
          SX2    EPLR        * PORT LIMIT OUT OF RANGE.*
          NZ     X4,ERR      IF OUT OF RANGE
          SA1    PN.         RESET PORT COUNT 
          UX7    X1 
          IX6    X6-X7       NUMBER OF PORTS - 1
          SB7    X6 
          PX6    X7,B7
          SA6    PN.
          JP     ATDR        RETURN 
  
 PLAPA    CON    65 
          CON    17 
          CON    1024 
 PLAPB    CON    0
 PNAP     SPACE  4
***       PN=N. 
*         DECLARE PORT NUMBER OF THIS TERMINALS LINE. 
*         N MAY RANGE FROM 1 TO 64 IF MULTIPLEXOR IS A 6676, FROM 1 TO
*         16 IF MULTIPLEXOR IS A 6671, FROM 1 TO 4096 IF MULTIPLEXOR
*         IS STIMULATED, AND FROM 0 TO 4096 IF PSUEDO MULTIPLEXOR.
  
  
**        PNAP - PROCESS *PN*.
  
  
 PNAP     BSS    0           ENTRY
          SA1    MT.         SET PROPER VALUE RANGE DEPENDING UPON
*                            MUX TYPE 
          SB6    PNAPA+X1    PROCESS VALUE
          RJ     PNA
          SX2    EPNR        * PORT NUMBER OUT OF RANGE.* 
          NZ     X4,ERR      IF VALUE OUT OF RANGE
          PX6    X6          PACK PORT NUMBER 
          SA6    PN.         STORE VALUE
          JP     ATDR        RETURN 
  
 PNAPA    BSS    0
          VFD    12/2001B,48/65 
          VFD    12/2001B,48/17 
          VFD    12/2001B,48/4096 
          VFD    12/2000B,48/4096 
 RSAP     SPACE  4
***       RS=N. 
*         ** KTS TERMINAL ARGUMENT. 
*         DECLARE DATA BASE READ SECURITY.
*         N MAY RANGE FROM 0 TO 7.
*         DEFAULT VALUE IS 0. 
  
  
**        RSAP - PROCESS *RS*.
  
  
 RSAP     BSS    0           ENTRY
          SB6    RSAPA       PROCESS VALUE
          RJ     PNA
          SA6    RS.         STORE VALUE
          SX2    ERSR        * READ SECURITY OUT OF RANGE.* 
          ZR     X4,ATDR     IF VALUE WITHIN RANGE
          JP     ERR         PROCESS ERROR
  
 RSAPA    VFD    12/2000B,48/8
 TTAP     SPACE  4
***       TT=AAAAAAAA.
*         DECLARE TERMINAL TYPE.
*         AAAAAAAA MAY BE ANY ONE OF THE FOLLOWING -
*                AB          TERMINAL WILL BE IDENTIFIED BY ANSWERBACK. 
*                ID          TERMINAL WILL BE IDENTIFIED BY TERMINAL
*                            OPERATOR ENTRY.
*                NIX         *CYBERLOAN* NIXDORF TERMINAL.
*         IF ANY ONE OF THE ABOVE TERMINAL TYPE MNEMONICS 
*         IS PREFIXED BY +*+, IT IS DEFINED AS BELONGING
*         TO THE KTS TERMINAL NETWORK. FOR EXAMPLE -
*                TT=*NIX
*         DECLARES A KTS NIXDORF TERMINAL.
* 
*         KTS AND NIXDORF TERMINALS ARE INVALID IF NETWORK
*         INTERFACE IS DEFINED. 
  
  
**        TTAP - PROCESS *TT*.
  
  
 TTAP     BSS    0           ENTRY
          SA1    WD          VERIFY TERMINAL TYPE 
          MX0    60-6        CHECK KTS PREFIX (*) 
          LX1    6
          BX4    -X0*X1 
          SB7    B0+         ASSUME NOT KTS 
          LX1    -6 
          SB2    X4-1R* 
          NZ     B2,TTAP1    IF NOT KTS 
          LX1    6           SHIFT OFF *
          SB7    B1 
          SA4    NF          CHECK NETWORK FLAG 
          SX2    EKNI        * KTS AND NAM INCOMPATIBLE.* 
          NZ     X4,ERR      IF NETWORK TERMINALS DEFINED 
          SX7    B1+         SET KTS FLAG 
          SA7    KF 
 TTAP1    SA3    TTCT        SEARCH TERMINAL TYPE TABLE 
          MX0    42 
          SX2    EUTT        * UNKNOWN TERMINAL TYPE.*
 TTAP2    ZR     X3,ERR      IF END OF TABLE
          BX6    X1-X3       COMPARE
          BX7    X0*X6
          ZR     X7,TTAP3    IF MATCH 
          SA3    A3+1        READ NEXT TABLE ENTRY
          EQ     TTAP2       LOOP FOR ALL ENTRIES 
  
 TTAP3    SX7    B7          STORE TERMINAL TYPE CODE AND KTS INDICATOR 
          SX6    X3 
          LX7    11 
          BX6    X6+X7
          SA6    TT.
          JP     ATDR        RETURN 
 TTCT     SPACE  4
**        TTCT - TERMINAL TYPE CODE TABLE.
*         ONE WORD ENTRY IN FORMAT: 
* 
*T TTCT   42/ TERMINAL TYPE MNEMONIC,18/ TYPE CODE
* 
*         IN ORDER OF TYPE CODE.
  
  
 TTCT     BSS    0
          LOC    1
          CON    0LAB+TTAB
          CON    0LID+TTID
          CON    0LNIX+TTNX 
          CON    0           TABLE TERMINATOR 
          LOC    *O 
 UAAP     SPACE  4
***       UA=NNNNNN.
*         ** KTS TERMINAL ARGUMENT. 
*         DEFINE CONTENTS OF USER ARGUMENT AREA.
*         NNNNNN MAY RANGE FROM 0 TO 16777215. (24 BITS)
*         DEFAULT VALUE IS 0. 
  
  
**        UAAP - PROCESS *UA*.
  
  
 UAAP     BSS    0           ENTRY
          SB6    UAAPA       PROCESS VALUE
          RJ     PNA
          SA6    UA.         STORE VALUE
          SX2    EUAR        * USER ARGUMENT OUT OF RANGE.* 
          ZR     X4,ATDR     IF VALUE WITHIN RANGE
          JP     ERR         PROCESS ERROR
  
 UAAPA    VFD    12/2000B,48/1S24 
 USAP     SPACE  4
***       US=N. 
*         ** KTS TERMINAL ARGUMENT. 
*         DECLARE DATA BASE UPDATE SECURITY.
*         N MAY RANGE FROM 0 TO 7.
*         DEFAULT VALUE IS 0. 
  
  
**        USAP - PROCESS *US*.
  
  
 USAP     BSS    0           ENTRY
          SB6    USAPA       PROCESS VALUE
          RJ     PNA
          SA6    US.         STORE VALUE
          SX2    EUSR        * UPDATE SECURITY OUT OF RANGE.* 
          ZR     X4,ATDR     IF VALUE WITHIN RANGE
          JP     ERR         PROCESS ERROR
  
 USAPA    VFD    12/2000B,48/8
 ANW      TITLE  COMCRTN - SUBROUTINES. 
**        ANW - ASSEMBLE NEXT WORD. 
* 
*         ENTRY  (LC)= ADDRESS OF NEXT CHARACTER TO ASSEMBLE. 
*                (CL)= ADDRESS OF CARD LIMIT. 
*                (AB)= ASSEMBLY BYPASS. 
* 
*         EXIT   (X1)= NONZERO IF EOR/EOF.
*                (WD - WD+N)= ASSEMBLED WORD. 
* 
*         USES   B - 2,6. 
*                A - 1,2,7. 
*                X - 1,2,7. 
* 
*         CALLS  AWD,RNC. 
  
  
 ANW2     SX7    1           CLEAR BYPASS 
          SA7    AB 
  
 ANW      PS                 ENTRY/EXIT 
          SA1    AB          CHECK ASSEMBLY BYPASS
          ZR     X1,ANW2     IF BYPASS
 ANW1     SA1    LC          SET SCAN START 
          SA2    CL          SET CARD LIMIT 
          SB2    X1 
          SB6    X2 
          RJ     AWD         ASSEMBLE WORD
          SX1    0
          NZ     X6,ANW      RETURN - IF NOT END OF LINE
          RJ     RNC         READ NEXT CARD 
          ZR     X1,ANW1     IF NOT EOR 
          JP     ANW         RETURN 
 ATN      SPACE  4
**        ATN - ADD TERMINAL NAME TO TABLE. 
* 
*         ENTRY  (X1)= TERMINAL NAME. 
*                (A0)= ADDRESS OF TABLE POINTER WORD. 
* 
*         EXIT   NONE.
* 
*         USES   B - 5,6,7. 
*                A - 3,6,7. 
*                X - 0,2,3,6,7. 
* 
*         CALLS  NONE.
  
  
 ATN      PS                 ENTRY/EXIT 
          SA3    A0          READ TABLE POINTER 
          SB5    X3          FWA
          MX7    -12
          LX3    -30
          BX6    X1          ENTRY
          SB7    X3          LENGTH 
          LX3    -18         EXTRACT *IN* 
          BX7    -X7*X3 
          LX3    -12
          SB6    X7+B1       CHECK ROOM FOR ENTRY + 1 
          SX2    ENTF        * TERMINAL NAME TABLE OVERFLOW.* 
          GE     B6,B7,ATN1  IF OVERFLOW
          MX0    1           ADVANCE *IN* 
          SA6    B5+X7       STORE ENTRY
          LX0    -11
          IX7    X3+X0
          SA7    A0+         RESTORE POINTER
          JP     ATN         RETURN 
  
 ATN1     MX0    12          RESET IN 
          BX7    -X0*X3 
          SA7    A0+
          JP     ERR         PROCESS ERROR
 AWD      SPACE  4
**        AWD - ASSEMBLE WORD.
* 
*         ENTRY  (B2)= ADDRESS OF FIRST CHARACTER TO CHECK. 
*                (B6)= LIMIT OF STRING BUFFER.
* 
*         EXIT   (X6)=0 IF END OF LINE. 
*                (LC)= LWA+1 OF STRING WORD.
*                (FC)= FWA OF STRING WORD.
*                (WD - WD+N)= ASSEMBLED WORD. 
*                (WD-1)= 0. 
* 
*         USES   B - 7. 
*                A - 1,2,3,6,7. 
*                X - 0,1,2,3,6,7. 
* 
*         CALLS  NONE.
  
  
 AWD5     BX7    X3          RESTORE (LWA+1)
          SX6    0
          SA7    B6 
  
 AWD      PS                 ENTRY/EXIT 
          SX6    0           ASSUME END OF LINE 
          GE     B2,B6,AWD   RETURN - IF EOL
          SB5    60          INITIALIZE ASSEMBLY COUNTER
          SB7    B2-CD-72    CHECK BEYOND COL. 72 
          PL     B7,AWD      RETURN - IF PAST COL. 72 
          SX7    1RE         SET IGNORE SCAN STOPPER
          SA3    B6          PRESERVE (LWA+1) 
          SA1    B2-B1       INITIALIZE CHARACTER ADDRESS 
          SA7    B6+
          SA2    AWDA        READ IGNORE/SEPARATOR MASK 
 AWD1     SA1    A1+1        READ CHARACTER 
          SB7    X1 
          LX7    X2,B7
          NG     X7,AWD1     IF IGNORE CHARACTER
          SB7    A1+
          GE     B7,B6,AWD5  IF END OF LINE 
          SX6    1R          SET ASSEMBLY SCAN STOPPER
          SX7    A1          SET FIRST CHARACTER ADDRESS
          SA6    B6 
          SA7    FC 
          SX6    0           INITIALIZE ASSEMBLY DESTINATION ADDRESS
          SA6    WD-1 
          JP     AWD3 
  
 AWD2     SA1    A1+B1       READ CHARACTER 
          NO
          SB7    X1 
          LX7    X2,B7
          NO
          NG     X7,AWD4     IF SEPARATOR 
 AWD3     LX6    6           INSERT CHARACTER 
          SB5    B5-6        COUNT CHARACTER
          BX6    X6+X1
          NZ     B5,AWD2     IF ASSEMBLY NOT FULL 
          SA6    A6+1        STORE WORD 
          SB5    60          RESET ASSEMBLY COUNTER 
          SX6    0           CLEAR ASSEMBLY 
          EQ     AWD2 
  
 AWD4     LX6    X6,B5       LEFT JUSTIFY WORD
          SA6    A6+B1       STORE LAST WORD
          BX7    X3          RESTORE (LWA+1)
          SX6    A1          SET LWA+1 OF STRING WORD 
          SA7    B6 
          SB7    A6 
          SA6    LC 
          MX7    0           TERMINATE WORD 
          SX6    1
          SA7    B7+B1
          JP     AWD         RETURN 
  
 AWDA     BSS    0           IGNORE/SEPERATOR MASK WORD 
          POS    60-1R= 
          VFD    1/1
          POS    60-1R
          VFD    1/1
          POS    60-1R, 
          VFD    1/1
          POS    60-1R. 
          VFD    1/1
          BSS    0
 CTV      SPACE  4
**        CTV - CLEAR TERMINAL VALUES.
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   B - 6,7. 
*                A - 6. 
*                X - 6. 
* 
*         CALLS  NONE.
  
  
 CTV      PS                 ENTRY/EXIT 
          SB7    TARVL-1     CLEAR TABLE
          SX6    0
          SB6    TARV 
 CTV1     SA6    B6+B7
          SB7    B7-B1
          PL     B7,CTV1
          JP     CTV         RETURN 
 EPD      SPACE  4
**        EPD - ENTER PREVIOUS TERMINAL DESCRIPTION INTO TABLE. 
* 
*         ENTRY  NONE.
* 
*         EXIT   NONE.
* 
*         USES   B - 5. 
*                A - 1,3,6,7. 
*                X - 1,2,3,6,7. 
* 
*         CALLS  ATN,CTV,ERR. 
  
  
 EPD4     SX7    1           CLEAR FLAG 
          SA7    EB 
  
 EPD      PS                 ENTRY/EXIT 
          SA1    EB          CHECK ENTRY BYPASS SET 
          ZR     X1,EPD4     IF ENTRY BYPASS
          SA1    MD          CHECK MUX DESCRIPTION ACTIVE 
          NZ     X1,EPD3     IF MUX DESCRIPTION 
  
*         COMPLETE DESCRIPTION PROCESSING.
  
          SA1    PN.         CHECK PORT UNDEFINED 
          SX2    -EPNU       * PORT NUMBER UNDEFINED.*
          NZ     X1,EPD0     IF PORT DEFINED
          SA3    MT.
          PX6    X1 
          BX1    X6 
          SA6    A1+         SET *PN.* VALUE
          SX3    X3-MXPM
          NZ     X3,ERR      IF NOT PSUEDO MULTIPLEXOR
          SB5    0
          JP     EPD0.1 
  
 EPD0     SA2    TT.         CHECK TRANSACTION SUBSYSTEM TERMINAL 
          LX2    59-11
          PL     X2,EPD1     IF NOT KTS 
          UX6,B5 X1          CHECK *PL* SPECIFIED 
 EPD0.1   SX2    -EKPR
          SA1    TN.         ENTER TERMINAL NAME INTO TABLE 
          NZ     B5,ERR      IF *PL* SPECIFIED
          RJ     ATN         ADD TERMINAL NAME TO TABLE 
 EPD1     SX6    EPD2        SET RE-ENTRY ADDRESS 
          SX1    0           INDICATE NO ERROR
          SA6    RE 
          JP     ATD         RETURN 
  
 EPD2     RJ     CTV         CLEAR TERMINAL VALUES
          JP     EPD         RETURN 
  
*         VALIDATE COMPLETE MUX DESCRIPTION.
  
 EPD3     BX6    X6-X6       CLEAR *PROCESSING MUX DESCRIPTION* FLAG
          SA3    MT.         CHECK MULTIPLEXOR TYPE 
          SA6    A1 
          SX7    X3-MXPM
          NZ     X7,EPD3.1   IF NOT PSUEDO MULTIPLEXOR
          SX2    -EPME       * PSUEDO MULTIPLEXOR DESCRIPTION ERROR.* 
          SA1    EQ.
          SA3    CH.         CHECK FOR EQUIPMENT/CHANNEL ASSIGNMENT 
          BX3    X3+X1
          ZR     X3,EPD      IF NO EQUIPMENT/CHANNEL, RETURN
          JP     ERR         PROCESS ERROR
  
 EPD3.1   SA3    EQ.         CHECK EQUIPMENT DESCRIPTION
          SX2    -EMEU       * MULTIPLEXOR EQUIPMENT UNDEFINED.*
          ZR     X3,ERR      IF EQUIPMENT UNDEFINED 
          SA3    CH.         CHECK CHANNEL DEFINED
          SX2    -EMCU       * MULTIPLEXOR CHANNEL UNDEFINED.*
          NZ     X3,EPD      RETURN - IF CHANNEL DEFINED
*         JP     ERR         PROCESS ERROR
 ERR      SPACE  4
**        ERR - PROCESS ERROR.
* 
*         ENTRY  (X2)= ERROR MESSAGE ADDRESS. 
*                IF (X2) .LT. ZERO, START RECOVERY AT CURRENT WORD
*                ELSE, SCAN FOR */* STARTING AT NEXT WORD.
* 
*         EXIT   NONE.
* 
*         USES   B - NONE.
*                A - 1,4,6. 
*                X - 0,1,2,4,6. 
* 
*         CALLS  REC. 
  
  
 ERR      BSS    0           ENTRY
          BX6    X2          CHECK ENTRY BYPASS INDICATOR 
          PL     X2,ERR1     IF *SET ENTRY BYPASS*
          BX2    -X6
 ERR1     SA6    ERRA        SAVE BYPASS INDICATOR
          SA4    CC          INDICATE CARD NUMBER 
          SX1    X2+
          SX6    CEP         SET RE-ENTRY ADDRESS 
          SX0    CD          INDICATE BUFFER ADDRESS
          SA6    RE 
          JP     ATD         RETURN 
  
*         COMPLETE ERROR PROCESSING.
  
 CEP      SX6    0
          SA1    ERRA        INDICATE RECOVERY STARTING POINT 
          SA6    EB          SET TABLE ENTRY BYPASS 
          RJ     REC         RECOVER COMPOSURE
          JP     ATDR        CONTINUE 
  
 ERRA     CON    0
 PNA      SPACE  4
**        PNA - PROCESS NUMERIC ARGUMENT. 
* 
*         ENTRY  (B6)= ADDRESS OF MINIMUM AND MAXIMUM VALUES IN 
*                FLOATING FORMAT WHERE THE EXPONENT IS THE MINIMUM AND
*                THE COEFFICIENT IS THE MAXIMUM.
*                (MAXIMUM= MAXIMUM LEGAL VALUE + 1) 
* 
*         EXIT   (X6)= CONVERTED VALUE. 
*                (X4)= 1 IF ERROR.
* 
*         USES   B - 7. 
*                A - 1,2,5. 
*                X - 1,2,4,7. 
* 
*         CALLS  DXB,ERR. 
  
  
 PNA1     SX4    1           RETURN ERROR 
  
 PNA      PS                 ENTRY/EXIT 
          SB7    X5+         SAVE FET ADDRESS 
          SA5    WD          READ VALUE 
          RJ     DXB         CONVERT VALUE
          SA2    WD+1        CHECK TOO MANY DIGITS
          SA1    B6+         READ MINIMUM, MAXIMUM
          SX5    B7          RESTORE FET ADDRESS
          BX4    X2+X4
          SX2    ENCE        * NUMERIC CONSTANT ERROR.* 
          NZ     X4,ERR      IF ILLEGAL NUMBER
          UX2,B7 X1          UNPACK MIN, MAX
          IX7    X6-X2       CHECK VALUE TOO LARGE
          SX2    B7          CHECK VALUE TOO SMALL
          PL     X7,PNA1     IF TOO LARGE 
          IX7    X6-X2
          NG     X7,PNA1     IF TOO SMALL 
          JP     PNA         RETURN 
 RNC      SPACE  4
**        RNC - READ NEXT CARD. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (X1)= NONZERO IF EOR DETECTED. 
* 
*         USES   B - 5,7. 
*                A - 1,2,6,7. 
*                X - 1,2,6,7. 
* 
*         CALLS  RDS=.
  
  
 RNC      PS                 ENTRY/EXIT 
 RNC1     READS  X5,CD,90 
          SA2    CC          ADVANCE CARD COUNT 
          SX7    X2+B1
          SA7    A2 
          NZ     X1,RNC      IF EOR - RETURN
          SA1    CD          CHECK COMMENT CARD 
          SB7    X1-1R* 
          ZR     B7,RNC1     IF COMMENT CARD
          SB7    B6-CD       CHECK BLANK CARD 
          SB5    CD+72       SET PROCESSING LIMIT 
          ZR     B7,RNC1     IF BLANK CARD
          SX6    B6+
          LE     B6,B5,RNC2  IF CARD TERMINATES BEFORE COL. 73
          SX6    B5+
 RNC2     SA6    CL          SET CARD PROCESSING LIMIT
          SB6    X6 
          SX7    A1          SET NEXT ASSEMBLY ADDRESS
          SX1    0
          SA7    LC 
          JP     RNC         RETURN 
          SPACE  4
**        REC - RECOVER COMPOSURE AFTER ERROR.
* 
*         ENTRY  (X1) .LT. ZERO, START SCAN FOR */* AT CURRENT WORD.
* 
*         EXIT   (AB)= 0. 
*                (MD)= 0. 
* 
*         USES   B - 7. 
*                A - 1,6. 
*                X - 0,1,6. 
* 
*         CALLS  ANW. 
  
  
 REC3     SX6    0           SET ASSEMBLY BYPASS
          SA6    AB 
          SA6    MD          CLEAR *MUX DESCRIPTION ACTIVE* 
          RJ     CTV         CLEAR TERMINAL ARGUMENT VALUES 
  
 REC      PS                 ENTRY/EXIT 
          PL     X1,REC2     IF NOT *START AT CURRENT WORD* 
 REC1     SA1    WD          CHECK FIRST CHARACTER= +/+ 
          MX0    60-6 
          LX1    6
          BX6    -X0*X1 
          SB7    X6-1R/ 
          ZR     B7,REC3     IF */* 
 REC2     RJ     ANW         ASSEMBLE NEXT WORD 
          ZR     X1,REC1     IF NOT EOR/EOF 
          JP     REC         RETURN 
 STB      SPACE  4
***              *STB* SORTS A TABLE IN ASCENDING ORDER BY CHANNEL, 
*         EQUIPMENT (CONTROLLER) NUMBER, AND TERMINAL PORT NUMBER.
*         THESE FIELDS MAY BE IN ANY WORD OF EACH TABLE ENTRY BUT THEY
*         MUST APPEAR IN THE ABOVE ORDER (CHANNEL IN HIGHEST ORDER
*         POSITION) AND MUST ALL BE CONTAINED IN A SINGLE WORD. 
*         USE OF BIT 59 IN THIS WORD SHOULD BE AVOIDED. 
* 
*         INTERFACE SPECIFICATIONS FOR *STB* -
* 
*         ENTRY  (X0)= MASK USED TO EXTRACT CHANNEL, EQUIPMENT AND PORT.
*                (B2)= FWA OF TABLE.
*                (B3)= LENGTH OF TABLE IN WORDS.
*                (B4)= NUMBER OF WORDS IN EACH ENTRY. 
*                (B5)= WORD IN EACH ENTRY WHICH CONTAINS THE SORT KEYS. 
*                      (0 IS THE FIRST WORD)
* 
*         EXIT   NONE.
* 
*         USES   B - 3,6,7. 
*                A - 1,2,6,7. 
*                X - 1,2,3,4,6,7. 
* 
*         CALLS  NONE.
  
  
 STB      PS                 ENTRY/EXIT 
          SB3    B2+B3       LWA+1 OF TABLE 
          SB7    B2-B4       FIRST-1 ENTRY ADDRESS
          SB3    B3-B4       ADDRESS OF LAST ENTRY
 STB1     SB7    B7+B4       ADVANCE TO NEXT PAIR 
          GE     B7,B3,STB3  IF END OF TABLE
          SA1    B7+B5       READ KEY WORD OF FIRST IN PAIR 
          SA2    A1+B4       READ KEY WORD OF SECOND IN PAIR
          BX6    X0*X1       COMPARE
          BX7    X0*X2
          IX3    X7-X6
          PL     X3,STB1     IF PAIR IS IN ORDER
          SB6    B1          INDICATE SWAP
          SX4    B4-B1       SWAP ENTRIES 
 STB2     SA1    B7+X4
          SA2    A1+B4
          BX6    X1 
          LX7    X2 
          SA6    A2 
          SX4    X4-1 
          SA7    A1 
          PL     X4,STB2     LOOP FOR ALL WORDS IN ENTRY
          EQ     STB1 
  
 STB3     ZR     B6,STB      RETURN - IF TABLE SORTED 
          SB6    B0          CLEAR SWAP FLAG
          SB7    B2-B4       RESET TO BEGINNING OF TABLE
          EQ     STB1 
 STN      SPACE  4
**        STN - SEARCH TERMINAL NAME TABLE. 
* 
*         ENTRY  (X1)= SEARCH CRITERION.
*                (A0)= ADDRESS OF TABLE POINTER WORD. 
* 
*         EXIT   (X2)= ZERO IF ENTRY NOT FOUND. 
*                (X6)= UPPER 42 BITS OF CRITERION.
* 
*         USES   B - 6,7. 
*                A - 2,6. 
*                X - 0,2,6,7. 
* 
*         CALLS  NONE.
  
  
 STN2     SX2    0           RETURN *NOT FOUND* 
  
 STN      PS                 ENTRY/EXIT 
          SA2    A0          READ TABLE POINTER 
          MX6    -12
          SB7    X2          FWA
          LX2    -48         EXTRACT *IN* 
          BX7    -X6*X2      *IN* 
          MX0    42 
          SB6    B7+X7       LWA+1
          BX6    X0*X1
          ZR     X7,STN2     IF TABLE EMPTY 
          SA2    B7          READ FIRST ENTRY 
          SA6    B6 
 STN1     BX2    X1-X2       COMPARE
          BX7    X0*X2
          SA2    A2+1        READ NEXT ENTRY
          NZ     X7,STN1     IF NOT MATCH 
          SB7    A2-B6
          SX2    B1 
          NE     B7,B1,STN   RETURN - IF ENTRY FOUND
          JP     STN2        RETURN 
 TMES     SPACE  4
**        TMES - TABLE OF ERROR MESSAGES. 
  
  
 TMES     BSS    0
 EAVM     DIS    ,* ARGUMENT VALUE MISSING.*
 ECCM     DIS    ,* CONNECTION COUNT MISSING.*
 ECHR     DIS    ,* CHANNEL NUMBER OUT OF RANGE.* 
 EDBF     DIS    ,* DATA BASE NAME FIRST CHARACTER BAD.*
 EDBL     DIS    ,* DATA BASE NAME NOT 2 CHARACTERS.* 
 EDTN     DIS    ,* TERMINAL NAME DUPLICATES THAT OF KTS TERMINAL.* 
 EEQR     DIS    ,* EQUIPMENT NUMBER OUT OF RANGE.* 
 EFPU     DIS    ,+ *PN* DESIGNATION MUST PRECEDE *PL*.+
 EICC     DIS    ,* INVALID CONNECTION COUNT.*
 EKNE     DIS    ,* KEYWORD NOT EQUIVALENCED.*
 EKNI     DIS    ,* KTS AND NAM INTERFACE INCOMPATIBLE.*
 EKPR     DIS    ,* PREVIOUS KTS TERMINAL MAY NOT SPECIFY PORT RANGE.*
 ELSR     DIS    ,* LINE SPEED OUT OF RANGE.* 
 EMCU     DATA   C* MULTIPLEXER CHANNEL UNDEFINED ON PREVIOUS MUX DESCRI
,PTION.*
 EMDE     DATA   C* MULTIPLEXER DESCRIPTION EXPECTED.*
 EMEU     DATA   C* MULTIPLEXER EQUIPMENT UNDEFINED ON PREVIOUS MUX DESC
,RIPTION.*
 EMND     DIS    ,* MULTIPLE NAM INTERFACE DEFINITIONS.*
 ENCE     DIS    ,* NUMERIC CONSTANT ERROR.*
 ENTF     DIS    ,* TERMINAL NAME TABLE OVERFLOW.*
 EPCR     DIS    ,* POLLING CODE OUT OF RANGE.* 
 EPLR     DIS    ,* PORT LIMIT OUT OF RANGE.* 
 EPME     DATA   C* PSUEDO MULTIPLEXER DESCRIPTION ERROR.*
 EPNR     DIS    ,* PORT NUMBER OUT OF RANGE.*
 EPNU     DIS    ,* PORT NUMBER UNDEFINED FOR PREVIOUS TERMINAL.* 
 ERSR     DIS    ,* READ SECURITY OUT OF RANGE.*
 ETNL     DIS    ,* TERMINAL NAME TOO LONG.*
 EUAR     DIS    ,* USER ARGUMENT OUT OF RANGE.*
 EUIS     DIS    ,* UNKNOWN INITIAL STATUS.*
 EUKW     DIS    ,* UNKNOWN KEYWORD.* 
 EUMT     DATA   C* UNKNOWN MULTIPLEXER TYPE.*
 EUSR     DIS    ,* UPDATE SECURITY OUT OF RANGE.*
 EUTT     DIS    ,* UNKNOWN TERMINAL TYPE.* 
          SPACE  4
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 ATD      EQU    /COMCRTN/ATD 
 STB      EQU    /COMCRTN/STB 
 QUAL$    ENDIF 
          ENDX
