TRMDEF
          IDENT  TRMDEF,FETS
          ABS 
          SST 
          ENTRY  TRMDEF 
          ENTRY  ARG= 
          ENTRY  RFL= 
          SYSCOM B1 
          BASE   DECIMAL
*COMMENT  TRMDEF - DEFINE TERMINAL CHARACTERISTICS. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
  
 TRMDEF   TITLE  TRMDEF - DEFINE TERMINAL CHARACTERISTICS.
          SPACE  4,10 
*****     TRMDEF - DEFINE TERMINAL CHARACTERISTICS. 
* 
*         B. M. SLIWINSKI.   79/02/22.
*         J. P. LITTLE.      85/07/12.
* 
*         *TRMDEF* MAKES IT POSSIBLE FOR INTERACTIVE USERS TO CHANGE
*         THE CHARACTERISTICS OF THEIR CONNECTED TERMINAL THROUGH THE 
*         USE OF THE *TRMDEF* COMMAND.
          SPACE  4,10 
***       *TRMDEF* ACCEPTS AS INPUT A SINGLE COMMAND. 
*         VALIDATION OF THE SPECIFIED PARAMETERS FOR CORRECT TYPE,
*         RANGE, AND TERMINAL TYPE IS DONE IN THE ORDER THEY APPEAR 
*         ON THE COMMAND.  THE CONNECTED TERMINAL TYPE IS USED
*         FOR VALIDATIONS OF OTHER PARAMETERS UNTIL A CHANGE OF 
*         TERMINAL CLASS (*TC*) IS ENCOUNTERED.  IF THIS CHANGE IS
*         LEGAL, THEN SUBSEQUENT PARAMETERS WILL USE THIS TERMINAL
*         CLASS FOR VALIDATION. 
* 
*         IF ALL CHANGES ARE LEGAL, A CONTROL BYTE PARAMETER STRING 
*         IS BUILT.  THERE ARE TWO TYPES OF CONTROL BYTE STRINGS THAT 
*         ARE BUILT, 0010B AND 0016B, DEPENDING ON THE TYPE OF NETWORK
*         THAT THE TERMINAL IS CONNECTED TO.  IF THE NETWORK CONNECTION 
*         IS OF TYPE NAM/CDNA, THEN CONTROL BYTE 0010B IS BUILT (UNLESS 
*         ALL THE PARAMETERS ENTERED ARE CCP TERMINAL DEFINITIONS). 
*         IF THE NETWORK CONNECTION IS OF TYPE NAM/CCP, THEN CONTROL
*         BYTE 0016 IS BUILT.  IF CONTROL BYTE 0016 IS BUILT, IT HAS
*         THE FOLLOWING FORM: 
* 
*         12/CB,12/FN,12/FV,...,12/FN,12/FV,EOL 
*                CB = CONTROL BYTE 0016B. 
*                FN = 4000B + FIELD NUMBER. 
*                FV = 4000B + FIELD VALUE.
* 
*         IF CONTROL BYTE 0010B IS BUILT, IT HAS THE FOLLOWING FORM 
* 
*         12/CB,12/AN,12/OC(N),12/AV(0),...,12/AV(N),12/AN,12/AV,EOL
*                CB = CONTROL BYTE 0010B. 
*                AN = 4000B + ATTRIBUTE NUMBER. 
*                OC(N) = OCTET COUNTER. 
*                AV(0) = 4000B + ATTRIBUTE VALUE(0).
*                AV(N) = 4000B + ATTRIBUTE VALUE(N).
* 
*         THIS STRING IS WRITTEN TO *OUTPUT* OR THE FILE SPECIFIED
*         ON THE COMMAND. 
          SPACE  4,10 
***       COMMAND CALL. 
* 
*         TRMDEF,XX=VALUE,...,XX=VALUE,L=FN.
*                            OR 
*         TRMDEF,XX=VALUE/VALUE/...,XX=VALUE,L=FN.
* 
*                XX = ONE - THREE CHARACTER MNEMONIC FOR THE
*                     TERMINAL DEFINITION PARAMETER.
*                VALUE = LEGAL VALUE FOR A GIVEN TERMINAL DEFINITION
*                        PARAMETER.  SOME PARAMETERS MAY HAVE MULTIPLE
*                        VALUES WITH THE FORMAT:  XX=VALUE/VALUE... 
*                L = OUTPUT FILE. 
*                    IF FN IS SPECIFIED, WRITE OUTPUT TO FILE *FN*. 
*                    THE DEFAULT IS *OUTPUT*. 
* 
* 
*         THE POSSIBLE MNEMONICS FOR *XX* ARE AS FOLLOWS. 
* 
*         XX     DESCRIPTION
*         --     -----------
*         AB     ABORT BLOCK
*         BR     BREAK KEY
*         BS     BACKSPACE CHARACTER
*         B1     USER BREAK 1 (INTERRUPTION CHARACTER)
*         B2     USER BREAK 2 (TERMINATION CHARACTER) 
*         CI     CARRIAGE RETURN IDLE COUNT 
*         CN     CANCEL CHARACTER 
*         CP     CURSOR POSITIONING 
*         CT     CONTROL CHARACTER
*         DL     SINGLE MESSAGE TRANSPARENT 
*         EB     END OF BLOCK 
*         EL     END OF LINE
*         EP     ECHOPLEX MODE
*         FA     FULL ASCII 
*         HD     HOST AVAILABILITY DISPLAY
*         IC     INPUT FLOW CONTROL 
*         IN     INPUT DEVICE 
*         LI     LINE FEED IDLE COUNT 
*         LK     LOCK OUT CONTROL 
*         OC     OUTPUT FLOW CONTROL
*         OP     OUTPUT DEVICE
*         PA     PARITY 
*         PG     PAGE WAIT
*         PL     PAGE LENGTH
*         PW     PAGE WIDTH 
*         SE     SPECIAL EDITING MODE 
*         TC     TERMINAL CLASS 
*         XL     MULTI MESSAGE
* 
*         CDCNET TERMINAL DEFINITIONS.
* 
*         AC     ATTENTION CHARACTER
*         ACA    ATTENTION CHARACTER ACTION 
*         BC     BACKSPACE CHARACTER
*         BKA    BREAK KEY ACTION 
*         BLC    BEGIN LINE CHARACTER 
*         CFC    CHARACTER FLOW CONTROL 
*         CLC    CANCEL LINE CHARACTER
*         CRD    CARRIAGE RETURN DELAY
*         CRS    CARRIAGE RETURN SEQUENCE 
*         CS     CODE SET 
*         E      ECHOPLEX 
*         ELC    END LINE CHARACTER 
*         ELP    END LINE POSITIONING 
*         EOS    END OUTPUT SEQUENCE
*         EPA    END PAGE ACTION
*         EPC    END PARTIAL CHARACTER
*         EPP    END PARTIAL POSITION 
*         FFD    FORM FEED DELAY
*         FFS    FORM FEED SEQUENCE 
*         FL     FOLD LINE
*         HP     HOLD PAGE
*         HPO    HOLD PAGE OVER 
*         IBS    INPUT BLOCK SIZE 
*         IEM    INPUT EDITING MODE 
*         IOM    INPUT OUTPUT MODE
*         LFD    LINE FEED DELAY
*         LFS    LINE FEED SEQUENCE 
*         NCC    NETWORK CONTROL CHARACTER
*         P      PARITY TYPE
*         PCF    PARTIAL CHARACTER FORWARDING 
*         PL     PAGE LENGTH
*         PW     PAGE WIDTH 
*         RA     RESPONSE ACTION
*         SA     STATUS ACTION
*         SBC    STORE BACKSPACE CHARACTER
*         SND    STORE NULS DELS
*         TCM    TRANSPARENT CHARACTER MODE 
*         TFC    TRANSPARENT FORWARD CHARACTER
*         TLM    TRANSPARENT LENGTH MODE
*         TM     TERMINAL MODEL 
*         TML    TRANSPARENT MESSAGE LENGTH 
*         TTC    TRANSPARENT TERMINATE CHARACTER
*         TTM    TRANSPARENT TIMEOUT MODE 
* 
*         UNSUPPORTED STANDARD TERMINAL DEFINITIONS.
* 
*         AR     AUTOMATIC CHARACTER RECOGNITION
*         BF     BLOCKING FACTOR - 0, 1, 2
*         CH     DISPLAY TERMINAL CHARACTERISTICS 
*         HN     HOST NODE SELECTION - NUMBER 
*         HS     HOST SELECTION - NAME
*         MS     MESSAGE TO NETWORK OPERATOR - MESSAGETEXT
*         TM     TERMINATE TERMINAL - HOST CONNECTION 
* 
* 
*         VALUES CAN BE SPECIFIED IN THE FOLLOWING WAYS.
* 
*         FORM   DESCRIPTION
*         ----   -----------
*         NN     DECIMAL VALUE
*         Y      ALPHANUMERIC CHARACTER WITH DISPLAY CODE LESS THAN 45B 
*         $Y$    ANY ALPHANUMERIC CHARACTER 
*         IIIB   OCTAL VALUE OF AN *ASCII* CHARACTER
*         XHH    HEXADECIMAL VALUE OF AN *ASCII* CHARACTER
*         T      ALPHANUMERIC DISPLAY CODE CHARACTER OR DECIMAL VALUE 
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         * ATTRIBUTE COMMANDS MUST BE OF ONE NETWORK TYPE.*
*                ATTRIBUTES UNIQUE TO BOTH NAM/CCP AND NAM/CDNA 
*                WERE ENTERED ON ONE *TRMDEF* REQUEST.
* 
*         * ERROR IN TRMDEF ARGUMENT.*
*                THE COMMAND CONTAINED INCORRECT SYNTAX OR AN 
*                UNKNOWN PARAMETER. 
* 
*         * INCORRECT JOB ORIGIN TYPE FOR TRMDEF.*
*                THE JOB ORIGIN TYPE OF THE JOB REQUESTING *TRMDEF* 
*                WAS NOT TIME-SHARING.
* 
*         * INCORRECT TERMINAL TYPE FOR TRMDEF.*
*                THE *TRMDEF* REQUEST CAME FROM A TERMINAL WHICH WAS
*                NOT A NETWORK TERMINAL.
* 
*         * LITERAL STRING IS NOT ALLOWED FOR THIS PARAMETER.*
*                LITERAL STRING PROCESSING HAS BEEN DISABLED FOR
*                THE CDCNET PARAMETERS CRS, EOS, FFS, LFS, TFC, AND 
*                TTC. 
* 
*         * NETWORK TYPE DOES NOT SUPPORT ATTRIBUTE COMMAND.* 
*                THE *TRMDEF* REQUEST CAME FROM A TERMINAL THAT WAS 
*                OF A DIFFERENT NETWORK TYPE THAN THE PARAMETERS
*                ENTERED. 
* 
*         * TRMDEF COMPLETE.* 
*                INDICATES COMMAND PROCESSED WITH NO ERRORS.
*                OUTPUT WRITTEN TO FILE AS DETERMINED BY *L* PARAMETER. 
* 
*         * TRMDEF ERRORS.* 
*                AN INCORRECT VALUE WAS ENTERED FOR ONE OR MORE 
*                PARAMETERS. ADDITIONAL ERROR MESSAGES ARE WRITTEN
*                TO THE FILE SPECIFIED BY THE *L* PARAMETER.
          TITLE  MACRO DEFINITIONS. 
**        VSS - SET UP FIELD VALUE, WORD COUNT, AND EQUIVALENCE 
*               CODE FOR ABBREVIATED AND FULL ATTRIBUTE VALUES. 
* 
*         VSS    STRINGA,STRINGB,S
* 
*         ENTRY  *STRINGA* = ABBREVIATED CHARACTER STRING.
*                *STRINGB* = FULL CHARACTER STRING. 
*                *S* = FIELD VALUE FLAG.
  
  
          PURGMAC  VSS
 VSS      MACRO  STRINGA,STRINGB,S
 V1       MICRO  1,10,*STRINGA* 
 V2       MICRO  1,10,*STRINGB* 
 V3       MICRO  11,10,*STRINGB*
 LEN      SET    1
 .A       IFC    NE,*"V3"** 
 LEN      SET    2
 .A       ENDIF 
 .B       IFC    NE,*S**
 VAL      SET    0
 .B       ELSE
 VAL      SET    VAL+1
 .B       ENDIF 
          VFD    24/0,18/VAL+4000B,18/1 
          VFD    60/0L"V1"
 .C       IFC    EQ,*"V2"** 
          VFD    24/0,18/VAL+4000B,18/2 
 .C       ELSE
          VFD    24/0,18/VAL+4000B,18/LEN 
          VFD    60/0L"V2"
 .D       IFC    NE,*"V3"** 
          VFD    60/0L"V3"
 .D       ENDIF 
 .C       ENDIF 
          ENDM
          TITLE  ASSEMBLY CONSTANTS AND FETS. 
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 CBUFL    EQU    40          PARAMETER STRING BUFFER LENGTH - CCP 
 DBUFL    EQU    40          PARAMETER STRING BUFFER LENGTH - CDNA
 OBUFL    EQU    120         OUTPUT BUFFER LENGTH 
 TTPVL    EQU    50D         PARAMETER VALUE TABLE LENGTH 
 LTCN     EQU    18D         LARGEST TERMINAL CLASS + 1 
 TCNT     EQU    3           TRANSMISSION CODE FOR NETWORK TERMINAL 
 TTFN     EQU    0           INDEX INTO TFLD TABLE--FIRST WORD
 TFVR     EQU    1           INDEX INTO TFLD TABLE--SECOND WORD 
 TFLG     EQU    2           LENGTH OF TABLE ENTRY
  
*         TERMINAL DEFINITION FIELD NUMBERS.
  
*         CONTROL BYTE 0016B FIELD NUMBERS
  
 ABFN     EQU    4051B       *AB* 
 BRFN     EQU    4063B       *BR* 
 BSFN     EQU    4047B       *BS* 
 B1FN     EQU    4052B       *B1* 
 B2FN     EQU    4053B       *B2* 
 CBFN     EQU    4102B       *EB=XX*
 CCFN     EQU    4056B       *CI=CA*
 CIFN     EQU    4054B       *CI* 
 CLFN     EQU    4077B       *EL=XX*
 CNFN     EQU    4046B       *CN* 
 CPFN     EQU    4107B       *CP* 
 CTFN     EQU    4050B       *CT* 
 C1FN     EQU    4071B       *DL/XL=CNNNN*
 C2FN     EQU    4072B       *DL/XL=CNNNN*
 EBFN     EQU    4101B       *EB=EB/EL* 
 ELFN     EQU    4076B       *EL=EB/EL* 
 EPFN     EQU    4061B       *EP* 
 FAFN     EQU    4067B       *FA* 
 HDFN     EQU    4041B       *HD* 
 ICFN     EQU    4103B       *IC* 
 INFN     EQU    4065B       *IN* 
 LIFN     EQU    4055B       *LI* 
 LCFN     EQU    4057B       *LI=CA*
 LKFN     EQU    4040B       *LK* 
 MXFN     EQU    4106B       *MMXPT*
 OCFN     EQU    4104B       *OC* 
 OPFN     EQU    4066B       *OP* 
 PAFN     EQU    4062B       *PA* 
 PGFN     EQU    4045B       *PG* 
 PLFN     EQU    4044B       *PL* 
 PWFN     EQU    4043B       *PW* 
 SEFN     EQU    4060B       *SE* 
 TCFN     EQU    4042B       *TC* 
 TOFN     EQU    4074B       *XL=TO*
 XBFN     EQU    4100B       *EB=XHH* 
 XHFN     EQU    4073B       *DL/XL=XHH*
 XLFN     EQU    4075B       *EL=XHH* 
 XPFN     EQU    4064B       *XPT*
 YHFN     EQU    4105B       *XL=YHH* 
  
*         CONTROL BYTE 0010B ATTRIBUTE NUMBERS
  
 IOMF     EQU    4201B       *IOM*
 IEMF     EQU    4202B       *IEM*
 TCMF     EQU    4203B       *TCM*
 TFCF     EQU    4204B       *TFC*
 TTCF     EQU    4205B       *TTC*
 TTMF     EQU    4206B       *TTM*
 TLMF     EQU    4207B       *TLM*
 TMLF     EQU    4210B       *TML*
 PCFF     EQU    4211B       *PCF*
 ACAF     EQU    4212B       *ACA*
 BKAF     EQU    4213B       *BKA*
 IBSF     EQU    4214B       *IBS*
 SNDF     EQU    4215B       *SND*
 SBCF     EQU    4216B       *SBC*
 NCCF     EQU    4300B       *NCC*
 CLCF     EQU    4301B       *CLC*
 ELCF     EQU    4302B       *ELC*
 BLCF     EQU    4303B       *BLC*
 BCFN     EQU    4304B       *BC* 
 EPCF     EQU    4305B       *EPC*
 ACCF     EQU    4306B       *AC* 
 PL2F     EQU    4307B       *PL* 
 PW2F     EQU    4310B       *PW* 
 HPFN     EQU    4311B       *HP* 
 HPOF     EQU    4312B       *HPO*
 FLFN     EQU    4313B       *FL* 
 EOSF     EQU    4314B       *EOS*
 CRSF     EQU    4315B       *CRS*
 LFSF     EQU    4316B       *LFS*
 FFSF     EQU    4317B       *FFS*
 EPAF     EQU    4320B       *EPA*
 CRDF     EQU    4321B       *CRD*
 LFDF     EQU    4322B       *LFD*
 FFDF     EQU    4323B       *FFD*
 ELPF     EQU    4324B       *ELP*
 EPPF     EQU    4325B       *EPP*
 CFCF     EQU    4326B       *CFC*
 TMFN     EQU    4327B       *TM* 
 CSFN     EQU    4330B       *CS* 
 PPFN     EQU    4331B       *P*
 EEFN     EQU    4332B       *E*
 SAFN     EQU    4333B       *SA* 
 RAFN     EQU    4334B       *RA* 
 FKCF     EQU    4337B       *FKC*
****
          SPACE  4
*CALL     COMCMAC 
*CALL     COMSEJT 
          SPACE  4
          ORG    110B 
  
*         FETS. 
  
 FETS     BSS    0
  
 O        BSS    0           OUTPUT FILE FET
 OUTPUT   FILEB  OBUF,OBUFL,FET=8 
  
 Z        BSS    0           TERMINAL FILE FET
 ZZZZZG0  FILEB  TMES,TMESL+1,DTY=2RTT
          TITLE  MAIN PROGRAM.
*         VALIDATE JOB ORIGIN AND TERMINAL TYPE.
  
 TRMDEF   SB1    1
          SA1    JOPR        GET JOB ORIGIN TYPE
          MX0    -12
          LX1    -24
          BX1    -X0*X1 
          SX2    X1-TXOT     TIME-SHARING ORIGIN CODE 
          NZ     X2,ERR2     IF NOT *TXOT* JOB ORIGIN TYPE
          TSTATUS TRMB       GET TERMINAL STATUS
          SA4    TRMB+1      GET CONNECTION STATUS
          MX0    -6 
          LX4    12 
          BX6    -X0*X4 
          SX2    X6-NICS
          ZR     X2,ERR1     IF NOT INTERACTIVE 
          SX2    X6-DTCS
          NZ     X2,TRM0     IF NOT DETACHED
          REQUEST  Z,U,N     ASSIGN FILE TO TERMINAL
          WRITEW Z,TMES,TMESL 
          WRITER Z,R         CAUSE SUSPENSION 
          RETURN Z,R
          EQ     TRMDEF      REISSUE REQUEST
  
 TRM0     LX4    -24         GET TRANSMISSION CODE
          BX2    -X0*X4 
          SX3    X2-TCNT     NETWORK TERMINAL CODE
          LX4    -24
          NZ     X3,ERR1     IF NOT A NETWORK TERMINAL
          MX0    -8 
          BX6    -X0*X4 
          SA6    A4-B1       SAVE TERMINAL CLASS
  
*         PROCESS COMMAND ARGUMENTS.
  
          SB2    CCDR        COMMAND
          RJ     USB         UNPACK DATA BLOCK TO STRING BUFFER 
 TRM0.1   SA1    B6+         SKIP PREFIX $, /, SPACE
          SX1    X1-1R9-1 
          NG     X1,TRM0.2   IF ALPHANUMERIC CHARACTER
          SB6    B6+1 
          EQ     TRM0.1      CHECK NEXT CHARACTER 
  
 TRM0.2   RJ     POP         PICK OUT PARAMETER 
          ZR     B6,ERR3     IF NO ARGUMENTS
          RJ     PCS         PROCESS COMMAND
          NZ     X1,ERR3     IF ERROR IN ARGUMENTS
          SB6    B0+         INITIALIZE TABLE INDEX 
          SX6    B0+         TERMINATE PARAMETER TABLE
          SA6    X5+B1
  
*         VALIDATE EACH PARAMETER FOR CORRECT ARGUMENT TYPE.
  
 TRM1     SA1    TTPV+B6     GET PARAMETER
          ZR     X1,TRM9     IF END OF PARAMETERS 
          SB7    X1+         INDEX
          RJ     CAS         CHECK IF ATTRIBUTE SUPPORTED 
          NG     X2,TRM8     IF ATTRIBUTE UNSUPPORTED 
          RJ     SAF         SET ATTRIBUTE FLAGS
          SA1    TTPV+B6+1   GET PARAMETER VALUE
          MX0    42 
          BX1    X0*X1       ISOLATE VALUE
          SA2    TTFN+B7     GET TABLE ENTRY
          SB5    X2 
          SX6    B0          CLEAR MULTIPLE PARAMETER FLAG
          NE     B5,B1,TRM2  IF NOT MULTIPLE PARAMETER
          RJ     PMP         PROCESS MULTIPLE PARAMETER 
          NZ     X3,TRM9     IF ERROR IN PARAMETER
 TRM2     SA6    PMPA        SET MULTIPLE PARAMETER FLAG
          ZR     B5,TRM6     IF EXPECTING A DECIMAL NUMBER
          NG     B5,TRM3     IF EXPECTING A CHARACTER 
          SB2    10B
          EQ     B2,B5,ERR6.2  IF PARAMETER DISABLED
          GT     B5,B2,TRM2.2  IF EQUIVALENCE VALUE 
          SB2    B2-B1
          EQ     B2,B5,TRM2.1  PROCESS DOUBLE OCTET 
          SB2    B2-B1
          EQ     B2,B5,TRM3  IF *TTC* OR *TFC*
          RJ     VCP         VARIABLE CHARACTER PROCESSOR 
          EQ     TRM8        PROCESS NEXT PARAMETER 
  
 TRM2.1   RJ     PDO         PROCESS DOUBLE OCTET 
          EQ     TRM8        PROCESS NEXT PARAMETER 
  
 TRM2.2   SX6    B0+         CLEAR VALUE
          RJ     PEV         PROCESS EQUIVALENCE VALUE
          ZR     X4,ERR4     IF NO EQUIVALENCE FOUND
          EQ     TRM7        CONTINUE PROCESSING
  
*         PROCESS CHARACTER 
  
 TRM3     RJ     PCP         PROCESS CHARACTER PARAMETER
          NZ     X4,ERR4     IF ERROR ON PARAMETER
          PL     B5,TRM8     IF *TTC* OR *TFC*
  
*         SET UP FIELD NUMBER/FIELD VALUE PAIR. 
  
 TRM4     SA1    PMPA 
          SA2    TMPV+B7     GET FIELD NUMBER 
          LX2    18 
          NZ     X1,TRM5     IF MULTIPLE PARAMETER
          SA2    TTFN+B7     GET FIELD NUMBER 
          LX2    18 
          PL     X2,TRM5     IF NOT *LI* OR *CI* PARAMETER
          MX0    -48
          BX2    -X0*X2 
 TRM5     SX4    X6+4000B    FIELD VALUE
          AX2    36 
          MX0    -12
          BX2    -X0*X2 
          SB2    B1          INDICATE VALIDATE RANGE
          EQ     TRM7        ENTER INTO BUFFER
  
*         PROCESS DECIMAL NUMBER
  
 TRM6     BX5    X1          DECIMAL NUMBER TO BE CONVERTED 
          RJ     DXB         DISPLAY CODE TO BINARY CONVERSION
          ZR     X4,TRM4     IF NO ERROR IN CONVERSION
          SA2    PMPA 
          NZ     X2,ERR4     IF MULTIPLE PARAMETER
          SA2    TTFN+B7     GET TABLE ENTRY
          LX2    18 
          PL     X2,ERR4     IF NOT *CI* OR *LI* PARAMETER
          SA1    TTPV+B6+1   GET ARGUMENT 
          MX0    42 
          BX1    X0*X1
          LX1    12 
          SX6    X1-2RCA
          NZ     X6,ERR4     IF NOT *CA* ARGUMENT 
          SX4    4001B       FIELD VALUE FOR *CA* 
          MX0    12 
          BX2    X0*X2
          LX2    11-59       FIELD NUMBER 
          SB2    -B1         INDICATE DO NOT VALIDATE RANGE 
  
*         ENTER FIELD NUMBER/FIELD VALUE PAIR INTO BUFFER.
  
 TRM7     RJ     VFT         VALIDATE FIELD VALUE 
          NG     X6,ERR4     IF INCORRECT FIELD VALUE 
          RJ     EFP         ENTER FN/FV PAIR - CONTROL BYTE 0016B
          RJ     EFQ         ENTER AN/AV PAIR - CONTROL BYTE 0010B
 TRM8     SB6    B6+2        INCREMENT TABLE INDEX
          EQ     TRM1        PROCESS NEXT PARAMETER 
  
*         COMPLETE PROCESSING.
  
 TRM9     SA1    TRMC        GET ERROR COUNT
          NZ     X1,ERR7     IF ERROR ON COMMAND
          ZR     B6,ERR3     IF NO CHANGES ENTERED
          RJ     CCT         CHECK CONNECTION TYPE
          NZ     X1,ERR1     IF NO NETWORK CONNECTION 
          RJ     CAF         CHECK ATTRIBUTE FLAGS
          NZ     X5,ERR6     IF ATTRIBUTE MIX ERROR 
          NZ     X7,ERR6.1   IF CONNECTION TYPE ERROR 
          NZ     X3,TRM10    IF CONTROL BYTE 0010B SEQUENCE 
          RJ     PPS         PACK PARAMETER STRING - CCP
          EQ     TRM11       IF CONTROL BYTE 0016B SEQUENCE 
 TRM10    SA1    TRMG        GET SPECIAL ERROR COUNT
          NZ     X1,ERR7     IF *PL* OR *PW* ERROR
          RJ     PPT         PACK PARAMETER STRING - CDNA 
 TRM11    WRITEW O,OBUF,B7   OUTPUT PARAMETER STRING
  
*         IT IS NECESSARY TO SPECIFY RECALL ON THE FOLLOWING *WRITER* 
*         IN ORDER TO ASSURE THAT THE DAYFILE MESSAGE FOLLOWING IT
*         IS SENT BACK TO THE TERMINAL.  USING RECALL PREVENTS THE
*         DAYFILE MESSAGE FROM BEING APPENDED TO THE *0016* CONTROL 
*         BYTE PARAMETER STRING AND THEN LOST DURING PROCESSING BY
*         *1TO*.
  
          WRITER O,R
          MESSAGE (=C* TRMDEF COMPLETE.*),3 
 TRM12    ENDRUN
  
 TRMA     CON    1           INDEX TO *CBUF*
 TRMB     BSS    2           TERMINAL CLASS FOR VALIDATION
 TRMC     CON    0           ERROR COUNT
 TRMD     CON    1           INDEX TO *DBUF*
 TRMF     CON    0,0,0       NETWORK ATTRIBUTE FLAGS
 TRMG     CON    0           SPECIAL ERROR COUNT
  
  
*         ERROR MESSAGES ISSUED.
  
 ERR1     MESSAGE (=C* INCORRECT TERMINAL TYPE FOR TRMDEF.*)
          EQ     ERR8        END PROCESSING 
  
 ERR2     MESSAGE (=C* INCORRECT JOB ORIGIN TYPE FOR TRMDEF.*)
          EQ     TRM12       END PROCESSING 
  
 ERR3     MESSAGE (=C* ERROR IN TRMDEF ARGUMENT.*)
          EQ     ERR8        END PROCESSING 
  
 ERR4     SA3    PMPA 
          ZR     X3,ERR5     IF NOT MULTIPLE PARAMETER
          SA1    TMPV+B7     GET TABLE ENTRY
          MX0    6
          BX1    X0*X1       GET PARAMETER OPTION 
          LX1    -12
          LX0    -12
          SA2    BEMC+BEMCL-1  CREATE MULTI-VALUE ERROR MESSAGE 
          BX2    -X0*X2 
          BX6    X1+X2
          SA1    PMPC 
          SB5    X1 
          SA6    A2 
          SA2    BEMC 
          SA1    TTFN+B5     GET TABLE ENTRY
          RJ     BEM         BUILD ERROR MESSAGE
          SA2    =4L-        RESTORE ERROR MESSAGE
          BX2    X6 
          SA6    BEMC+BEMCL-1 
          EQ     TRM8        PROCESS NEXT PARAMETER 
  
 ERR5     SA2    BEMC 
          SA1    TTFN+B7
          RJ     BEM         BUILD ERROR MESSAGE
          EQ     TRM8        PROCESS NEXT PARAMETER 
  
 ERR6     MESSAGE   MSG1
          EQ     ERR7        END PROCESSING 
  
 ERR6.1   MESSAGE   MSG2
          EQ     ERR7        END PROCESSING 
  
 ERR6.2   MESSAGE   MSG3
 ERR7     WRITEW O,OBUF,X1
          WRITER O,R
          MESSAGE (=C* TRMDEF ERRORS.*) 
 ERR8     ABORT 
  
 MSG1     DATA   C* ATTRIBUTE COMMANDS MUST BE OF ONE NETWORK TYPE.*
 MSG2     DATA   C* NETWORK TYPE DOES NOT SUPPORT ATTRIBUTE COMMAND.* 
 MSG3     DATA   C* LITERAL STRING IS NOT ALLOWED FOR THIS PARAMETER.*
          TITLE  SUBROUTINES. 
 BEM      SPACE 4,15
**        BEM - BUILD ERROR MESSAGE.
* 
*         ENTRY  (X1) = ATTRIBUTE MNEMONIC. 
*                (A2) = ADDRESS OF ERROR MESSAGE TEXT.
* 
*         EXIT   (TRMC) UPDATED.
* 
*         USES   X - 1, 2, 3, 6, 7. 
*                A - 2, 3, 6, 7.
*                B - 5. 
  
  
 BEM      SUBR               ENTRY/EXIT 
          SB5    BEMAL       LENGTH OF ERROR MESSAGE
          ERRNZ  BEMAL-BEMCL MESSAGE NOT SAME LENGTH
          MX6    18 
          BX1    X6*X1       GET ATTRIBUTE
          SA3    TRMC        GET BUFFER INDEX 
          BX6    X2          FORM ERROR MESSAGE 
          SX7    X3+B5       UPDATE BUFFER INDEX
          SA6    X3+OBUF     ENTER INTO OUTPUT BUFFER 
          SB5    B5-B1
          SA7    A3          RESET INDEX
 BEM3     SA2    A2+B1       GET NEXT WORD OF ERROR MESSAGE 
          SB5    B5-B1
          BX6    X2 
          SA6    A6+B1       ENTER INTO OUTPUT BUFFER 
          NE     B5,B1,BEM3  IF NOT LAST WORD OF ERROR MESSAGE
          SA2    A2+B1       PLACE ATTRIBUTE MNEMONIC IN MESSAGE
          LX1    36 
          BX6    X1+X2
          SA6    A6+B1
          EQ     BEMX        RETURN BUILT ERROR MESSAGE 
  
  
 BEMA     DATA   10LUNSUPPORTE
          DATA   10LD ATTRIBUT
          DATA   4LE -
 BEMAL    EQU    *-BEMA 
  
 BEMC     DATA   10LINCORRECT 
          DATA   10LVALUE FOR 
          DATA   4L-
 BEMCL    EQU    *-BEMC 
 CAF      SPACE 4,15
**        CAF - CHECK ATTRIBUTE FLAGS.
* 
*         ENTRY  (X2) = CONNECTION STATUS.
* 
*         EXIT   IF (X3) = 0 THEN BUILD CONTROL BYTE 0016B. 
*                        = 1 THEN BUILD CONTROL BYTE 0010B. 
*                IF (X5) = 0 THEN NO ERROR. 
*                        = 1 THEN ATTRIBUTE MIX ERROR.
*                IF (X7) = 0 THEN NO ERROR. 
*                        = 1 THEN CONNECTION TYPE ERROR.
* 
*         USES   X - 3, 4, 5, 7.
*                A - 4. 
* 
*         DEFINE (TRMF)   = CCP FLAG. 
*                (TRMF+1) = CDNA FLAG.
*                (TRMF+2) = COMMON FLAG.
  
  
 CAF      SUBR               ENTRY/EXIT 
          BX3    X3-X3       INITIALIZE FLAGS 
          BX5    X5-X5
          BX7    X7-X7
          SA4    TRMF 
          NZ     X4,CAF5     IF CCP ATTRIBUTE ON LIST 
          SA4    TRMF+1 
          NZ     X4,CAF3     IF CDNA ATTRIBUTE ON LIST
          SA4    TRMF+2 
          NZ     X4,CAF1     IF COMMON ATTRIBUTE ON LIST
          SX5    B1          SET ATTRIBUTE MIX ERROR FLAG 
          EQ     CAFX        RETURN  (F,F,F)
  
 CAF1     NZ     X2,CAF2     IF NAM/CDNA CONNECTION 
          EQ     CAFX        RETURN  (F,F,T - CCP)
  
 CAF2     SX3    B1+
          EQ     CAFX        RETURN  (F,F,T - CDNA) 
  
 CAF3     NZ     X2,CAF4     IF NAM/CDNA CONNECTION 
          SX7    B1+         SET CONNECTION TYPE ERROR FLAG 
          EQ     CAFX        RETURN  (F,T,TF - CCP) 
  
 CAF4     SX3    B1+
          EQ     CAFX        RETURN  (F,T,TF - CDNA)
  
 CAF5     SA4    TRMF+1 
          NZ     X4,CAF6     IF CDNA ATTRIBUTE ON LIST
          EQ     CAFX        RETURN  (T,F,TF - XOR) 
  
 CAF6     SX5    B1+         SET ATTRIBUTE MIX ERROR FLAG 
          EQ     CAFX        RETURN  (T,T,TF - XOR) 
 CAS      SPACE 4,15
**        CAS - CHECK IF ATTRIBUTE IS SUPPORTED.
* 
*         ENTRY  (B7) = INDEX TO *TFLD* TABLE.
* 
*         EXIT   (X2) = .GE. 0 ATTRIBUTE SUPPORTED. 
*                       .LT. 0 ATTRIBUTE UNSUPPORTED. 
* 
*         USES   X - 1, 2.
*                A - 1, 2.
  
  
 CAS      SUBR               ENTRY/EXIT 
          SA2    TFVR+B7     ATTRIBUTE SUPPORT CHECK
          LX2    59-36       ISOLATE FLAG BIT 
          PL     X2,CASX     IF ATTRIBUTE SUPPORTED 
          SA2    BEMA        *UNSUPPORTED ATTRIBUTE*
          SA1    TTFN+B7
          RJ     BEM         BUILD ERROR MESSAGE
          SX2    -1          SET UNSUPPORTED EXIT CONDITION 
          EQ     CASX        COMPLETE PROCESSING
 CCT      SPACE 4,15
**        CCT - CHECK CONNECTION TYPE.
* 
*         ENTRY  NONE.
* 
*         EXIT   IF (X1) = 0 THEN NO ERROR. 
*                IF (X2) = 0 THEN NAM/CCP CONNECTION. 
*                        = 1 THEN NAM/CDNA CONNECTION.
* 
*         USES   X - 0, 1, 2, 4.
*                A - 1, 4.
  
  
 CCT      SUBR               ENTRY/EXIT 
          BX1    X1-X1       CLEAR ERROR FLAG 
          SA4    TRMB+1      GET CONNECTION TYPE
          MX0    -3 
          LX4    6
          BX4    -X0*X4 
          ZR     X4,CCT1     IF NO NAM CONNECTION 
          SX4    X4-1 
          ZR     X4,CCT2     IF NAM/CCP CONNECTION
          SX4    X4-1 
          ZR     X4,CCT3     IF NAM/CDNA CONNECTION 
  
 CCT1     SX1    B1+         SET ERROR FLAG 
          EQ     CCTX        RETURN 
  
 CCT2     BX2    X2-X2       NAM/CCP CONNECTION 
          EQ     CCTX        RETURN 
  
 CCT3     SX2    B1+         NAM/CDNA CONNECTION
          EQ     CCTX        RETURN 
 EFP      SPACE  4,15 
**        EFP - ENTER FIELD NUMBER/FIELD VALUE PAIR INTO BUFFER.
* 
*         *EFP* CREATES THE PARAMETER STRING FOR CONTROL BYTE 0016B 
*         DATA STREAM PROCESSING. 
* 
*         ENTRY  (X2) = FIELD NUMBER. 
*                (X4) = FIELD VALUE.
*                (TRMA) = INDEX TO BUFFER.
*                (CBUF) = BUFFER OF FIELD NUMBER/FIELD VALUE PAIRS. 
* 
*         EXIT   (TRMA) UPDATED.
* 
*         USES   X - 5, 6, 7. 
*                A - 5, 6, 7. 
* 
*         DEFINE (B6) = POSITION IN PARAMETER LIST. 
*                (B7) = INDEX INTO TABLES.
  
  
 EFP      SUBR               ENTRY/EXIT 
          SA5    TRMA        BUFFER INDEX 
          BX6    X2 
          BX7    X4 
          SA6    X5+CBUF     ENTER FIELD NUMBER INTO BUFFER 
          SX6    X5+2        INCREMENT INDEX
          SA7    A6+B1       ENTER FIELD VALUE INTO BUFFER
          SA6    A5          RESET BUFFER INDEX 
          EQ     EFPX        RETURN 
 EFQ      SPACE  4,15 
**        EFQ - ENTER ATTRIBUTE NUMBER/ATTRIBUTE VALUE PAIR.
* 
*         *EFQ* CREATES THE PARAMETER STRING FOR CONTROL BYTE 0010B 
*         DATA STREAM PROCESSING. 
* 
*         ENTRY  (X2) = ATTRIBUTE NUMBER. 
*                (X4) = ATTRIBUTE VALUE.
*                (TRMD) = INDEX TO BUFFER.
*                (DBUF) = BUFFER OF ATTRIBUTE NUMBER/ATTRIBUTE VALUE
*                         PAIRS.
* 
*         EXIT   (TRMD) UPDATED.
* 
*         USES   X - 5, 6, 7. 
*                A - 5, 6, 7. 
* 
*         DEFINE (B6) = POSITION IN PARAMETER LIST. 
*                (B7) = INDEX INTO TABLES.
  
  
 EFQ      SUBR               ENTRY/EXIT 
          SA5    TRMD        BUFFER INDEX 
          BX6    X2 
          RJ     SPC         SPECIAL PAGE CHECKS FOR CDNA 
          SA6    X5+DBUF     ENTER FIELD NUMBER INTO BUFFER 
          SX6    X5+3        INCREMENT INDEX
          SX7    4001B       ENTER DEFAULT OCTET COUNT
          SA7    A6+B1       ENTER COUNT INTO BUFFER
          BX7    X4 
          SA7    A6+2        ENTER FIELD VALUE INTO BUFFER
          SA6    A5          RESET BUFFER INDEX 
          EQ     EFQX        RETURN 
 HCP      SPACE  4,15 
**        HCP - HEXADECIMAL CHARACTER PROCESSOR.
* 
*         ENTRY  (X1) = PARAMETER FROM COMMAND. 
*                (X2) = FIELD NUMBER. 
*                (A1) = PARAMETER FWA.
*                (B2) = PARAMETER WORD COUNT. 
*                (B5) = RANGE IDENTIFIER (SEE VCP). 
* 
*         EXIT   CONTROL BYTE 0010 UPDATED. 
* 
*         USES   X - ALL. 
*                A - 1, 3, 5, 6, 7. 
*                B - 2, 3, 4, 6.
* 
*         CALLS  EFQ, HXB.
  
  
 HCP      SUBR               ENTRY/EXIT 
          MX0    6           DELETE HEX FLAG
          BX6    -X0*X1 
          LX6    6
          SA6    A1 
          EQ     B2,B1,HCP2  IF VALUE IS FIVE (HEX) CHARACTERS OR LESS
          SA3    A1          ENSURE CHARACTERS NOT SPLIT ACROSS WORDS 
          SB3    B2-B1
 HCP1     SB3    B3-B1
          SA5    A3 
          SA3    A3+B1
          BX4    X0*X3
          LX4    6
          BX6    X5+X4       ADD LOWER HALF OF HEX CHARACTER
          SA6    A5 
          BX7    -X0*X3 
          LX7    6
          SA7    A3 
          NZ     B3,HCP1     IF NOT FINISHED
 HCP2     SB3    3
          SB4    B1          WORD COUNT TO COMPARE
          SA5    A1          RANGE COMPARISON WORD
          MX0    48 
          EQ     B5,B3,HCP3  IF RANGE OF 0-4 CHARACTERS 
          SB3    B3-B1
          MX0    24 
          EQ     B5,B3,HCP3  IF RANGE OF 0-2 CHARACTERS 
          SB3    B3+B3
          SB4    B1+B1
          SA5    A1+B1
          EQ     B5,B3,HCP3  IF RANGE OF 0-7 CHARACTERS 
          SB3    B3+B1       IF RANGE OF 0-25 CHARACTERS
          SA5    A1+B3
          SB4    B3+B1
          MX0    0
 HCP3     GT     B2,B4,ERR5  IF TOO MANY CHARACTERS 
          BX4    -X0*X5 
          MX0    12 
          LT     B2,B4,HCP4  IF FEWER WORDS THAN MAXIMUM
          NZ     X4,ERR5     IF TOO MANY CHARACTERS 
 HCP4     SA1    A1          GET WHOLE PARAMETER VALUE
          NZ     X1,HCP5     IF AT LEAST ONE CHARACTER
          BX6    X2          ENTER ATTRIBUTE NUMBER ONLY
          SA5    TRMD        GET BUFFER INDEX 
          SX7    4000B
          SA6    X5+DBUF
          SX6    X5+2 
          SA7    A6+B1
          SA6    A5 
          EQ     HCPX        RETURN 
  
 HCP5     BX7    X2          PRESERVE X2
          BX5    X0*X1
          RJ     HXB
          NZ     X4,ERR4     IF ERROR ON PARAMETER
          BX2    X7 
          SA0    B1          SET OCTET COUNTER
          SX4    X6+4000B 
          RJ     EFQ
          BX1    -X0*X1      CLEAR CHARACTER
          LX1    12 
          ZR     X1,HCP7     IF NO MORE CHARACTERS REMAIN 
 HCP6     BX5    X0*X1
          RJ     HXB
          NZ     X4,ERR4     IF ERROR ON PARAMETER
          SX7    X6+4000B 
          SA0    A0+B1       INCREMENT OCTET COUNTER
          SA5    TRMD        GET BUFFER INDEX 
          SA7    X5+DBUF     ENTER FIELD VALUE INTO BUFFER
          SX7    X5+B1       INCREMENT INDEX
          SA7    A5 
          BX1    -X0*X1 
          LX1    12 
          NZ     X1,HCP6     IF MORE CHARACTERS REMAIN
 HCP7     SB2    B2-B1
          ZR     B2,HCP8     IF PROCESSING COMPLETE 
          SB6    B6+B1
          SA1    TTPV+B6+1
          NZ     X1,HCP6     IF NOT THROUGH WITH PARAMETER
 HCP8     SA5    TRMD        GET OCTET COUNT BYTE 
          SX6    A0+B1
          IX5    X5-X6
          SX7    A0+4000B 
          SA7    X5+DBUF     ENTER FIELD VALUE INTO BUFFER
          EQ     HCPX        RETURN 
 PCP      SPACE  4,15 
**        PCP - PROCESS CHARACTER PARAMETER VALUE.
* 
*         ENTRY  (X1) = PARAMETER FROM COMMAND. 
*                (B7) = INDEX INTO TABLES.
*                (B5) = *TTC*/*TFC* FLAG. 
* 
*         EXIT   (X4) .NE. 0 IF ERROR IN PARAMETER. 
*                (X6) = CONVERTED CHARACTER.
*                (B7) RESTORED. 
*                (B5) RESTORED. 
* 
*         USES   X - 0, 1, 2, 4, 5, 6, 7. 
*                A - 0, 1, 2, 5, 6, 7.
*                B - 4, 5, 6, 7.
* 
*         CALLS  DXB, HXB.
* 
*         DEFINE (B6) = POSITION IN PARAMETER LIST. 
  
  
 PCP5     SX6    A0 
          IX5    X5-X6
          SX7    X6+4000B 
          SA7    X5+DBUF
  
 PCP      SUBR               ENTRY/EXIT 
          SX7    B5+
          SA7    PCPB 
          NG     B5,PCP0     IF NOT *TTC* OR *TFC*
          ZR     X1,ERR5     IF NOTHING ENTERED 
          SA2    TTFN+B7
          MX0    -12
          AX2    18 
          BX6    -X0*X2      FIELD NUMBER ISOLATED
          SA5    TRMD 
          SA0    B0          INITIALIZE OCTET COUNTER 
          SA6    X5+DBUF
          SX7    4000B
          SA7    A6+B1
          SX6    X5+2 
          SA6    A5 
 PCP0     MX0    -54
          BX4    -X0*X1 
          SA2    PMPA 
          NZ     X2,PCP1     IF MULTIPLE PARAMETER
          ZR     X4,PCP3     IF SINGLE CHARACTER ENTERED
          BX2    X0*X1
          LX2    6
          SX4    X2-1RX 
          ZR     X4,PCP2     IF *XHH* ARGUMENT
          BX5    X1 
          SX7    B7 
          SA7    PCPA        SAVE TABLE INDEX 
          SB7    0           ASSUME OCTAL BASE FOR CONVERSION 
          RJ     DXB         DISPLAY CODE TO BINARY CONVERSION
          SA2    PCPA        RESTORE TABLE INDEX
          SB7    X2+
          EQ     PCP4        CHECK FOR *TTC* OR *TFC* 
  
 PCP1     BX2    X0*X1
          BX5    -X0*X1 
          SX4    B1          RETURN AN ERROR
          LX2    6
          ZR     X5,PCPX     IF NO CHARACTER WAS SPECIFIED
          SX4    X2-1RX 
          ZR     X4,PCP2     IF *XHH* ARGUMENT
          SX4    X2-1RY 
          ZR     X4,PCP2     IF *YHH* ARGUMENT
          EQ     PCPX        RETURN 
  
 PCP2     MX0    -42
          BX4    -X0*X1 
          NZ     X4,PCPX     IF TOO MANY CHARACTERS ENTERED 
          MX0    -54
          BX5    -X0*X1 
          LX5    6
          RJ     HXB         HEX DISPLAY CODE TO BINARY CONVERSION
          EQ     PCP4        CHECK FOR *TTC* OR *TFC* 
  
 PCP3     LX1    6
          SA2    X1+TVXD     GET OCTAL EQUIVALENT 
          LX2    0-18 
          MX0    -12
          BX6    -X0*X2      FIELD VALUE
 PCP4     SA2    PCPB        *TTC*/*TFC* FLAG 
          SB5    X2 
          SA0    A0+B1
          NG     B5,PCPX     IF NOT *TTC* OR *TFC*
          SB4    A0-4 
          GT     B4,ERR5     IF TOO MANY CHARACTERS 
          SA5    TRMD 
          SX6    X6+4000B 
          SA6    X5+DBUF
          SX7    X5+B1
          SA7    A5 
          SA2    TTPV+B6
          SA1    A2+2 
          BX2    X2-X1
          NZ     X2,PCP5     IF NEXT ENTRY NOT *TTC* OR *TFC* 
          SA1    A1+B1       GET PARAMETER VALUE
          SB6    B6+2 
          EQ     PCP0        CHECK NEXT ENTRY 
  
 PCPA     BSS    1           TEMPORARY STORAGE FOR TABLE INDEX
 PCPB     BSS    1           *TTC*/*TFC* FLAG 
 PCS      SPACE  4,20 
**        PCS - PROCESS COMMAND ARGUMENTS.
* 
*         ENTRY  (B6) = ADDRESS OF STRING BUFFER. 
*                     = 0 IF NO MORE PARAMETERS.
*                     SET BY *POP*. 
* 
*         EXIT   *TTPV* TABLE BUILT.
*                OUTPUT FILE NAME SET.
*                (X1) .NE. 0 IF ERROR.
*                (X5) = ADDRESS OF LAST ENTERED PARAMETER IF NO ERROR.
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 2, 3, 4, 6, 7. 
*                B - 3. 
* 
*         CALLS  POP. 
  
  
 PCS      SUBR               ENTRY/EXIT 
          SX1    B0+         CLEAR ERROR
          SX5    TTPV-1      INITIALIZE TABLE ADDRESS 
 PCS1     ZR     B6,PCSX     IF NO MORE ARGUMENTS 
          RJ     POP         PICK OUT NEXT PARAMETER
          MX1    18 
          NG     B5,PCSX     IF ERROR 
          BX2    X2-X2
  
*         SEARCH FOR MATCH IN ARGUMENT TABLE. 
  
          ZR     X6,PCSX     IF BLANK ARGUMENT
          SA3    TFLD        GET FIRST OPTION 
          ZR     B6,PCS2     IF TERMINATOR ENCOUNTERED
          SA2    B6-B1       SEPARATOR
 PCS2     BX7    X1*X3
          ZR     X3,PCSX     IF END OF TABLE
          BX4    X7-X6
          SX7    A3 
          SA3    A3+TFLG     GET NEXT OPTION
          NZ     X4,PCS2     IF NO MATCH
          SX5    X5+B1
          SA7    X5          SAVE TABLE ENTRY ADDRESS 
  
*         PROCESS EQUIVALENCED VALUE. 
  
          SX7    X2-1R= 
          NZ     X7,PCSX     IF ARGUMENT NOT EQUIVALENCED 
          BX4    X6          SAVE ATTRIBUTE 
 PCS3     RJ     POP         PICK OUT VALUE 
          SX1    B1+
          NG     B5,PCSX     IF ERROR 
          RJ     ZCA         ZERO CHARACTER ATTRIBUTE CHECKER 
          SX5    B2          RESTORE *TTPV* POINTER 
          ZR     X3,PCS3.1   IF BLANK ARGUMENT CHECK SKIPPED
          SA2    POPA 
          ZR     X2,PCSX     IF BLANK ARGUMENT
 PCS3.1   BX1    X1-X1       CLEAR ERROR
  
*         ENTER ARGUMENT. 
  
          SA2    X5 
          SX7    X2-TFLD
          NZ     X7,PCS4     IF NOT *L* PARAMETER 
          SX5    X5-1        NO ENTRY FOR *L* 
          SX2    3
          BX6    X6+X2
          SA6    O           SET OUTPUT FILE NAME 
          EQ     PCS1        PROCESS NEXT PARAMETER 
  
 PCS4     SB5    B5+B1       GET PARAMETER WORD LENGTH
          SX7    B5+         INSERT IN *TTPV* ENTRY 
          LX7    59-5 
          BX7    X7+X2       ADD TABLE ADDRESS
          SA7    A2 
          SB2    B0+
 PCS5     SA4    POPA+B2     SAVE PARAMETER VALUE 
          SX5    X5+B1
          BX7    X4 
          SA7    X5 
          SB2    B2+1 
          SB5    B5-B1
          NZ     B5,PCS5     IF NOT THROUGH WITH PARAMETER
          ZR     B6,PCS1     IF TERMINATOR ENCOUNTERED
          SA4    B6-B1       SEPARATOR
          SX7    X4-1R/ 
          NZ     X7,PCS1     IF NOT A MULTI VALUE PARAMETER 
          SX5    A2+2        SAVE TABLE ENTRY ADDRESS 
          BX7    X2 
          SA7    X5 
          EQ     PCS3        PROCESS MULTI VALUE
 PDO      SPACE  4,15 
**        PDO - PROCESS DOUBLE OCTETS.
* 
*         *PDO* ADDS A PAIR OF OCTETS TO CONTROL BYTE 0010B IF
*         THE ATTRIBUTE VALUE IS LARGER THAN WHAT CAN BE CONTAINED
*         IN EIGHT BITS.  THIS ROUTINE IS APPLICABLE FOR THE
*         FOLLOWING ATTRIBUTE NAMES:   CRD, FFD, IBS, LFD, TML. 
* 
*         ENTRY  (X1) = PARAMETER FROM COMMAND. 
*                (B7) = INDEX INTO TABLE. 
* 
*         EXIT   CONTROL BYTE 0010B UPDATED.
* 
*         USES   X - 0, 2, 3, 4, 5, 6, 7. 
*                A - 2, 3, 6, 7.
* 
*         CALLS  DXB, EFQ, VFT. 
  
 PDO      SUBR               ENTRY/EXIT 
          BX5    X1          GET FIELD VALUE
          RJ     DXB         DISPLAY CODE TO BINARY 
          SA2    TTFN+B7     GET FIELD NUMBER 
          NZ     X4,ERR3     IF ERROR IN TRANSLATION
          MX0    -12
          AX2    18 
          BX2    -X0*X2      FIELD NUMBER ISOLATED
          RJ     VFT         VALIDATE FIELD VALUE 
          NG     X6,ERR4     IF INCORRECT FIELD VALUE 
          MX0    -8 
          BX4    -X0*X6      ISOLATE SECOND OCTET 
          SX4    X4+4000B 
          AX6    8
          BX3    -X0*X6      ISOLATE FIRST OCTET
          NZ     X3,PDO1     IF TWO OCTETS REQUIRED FOR VALUE 
          RJ     EFQ         ENTER AN/AV PAIR - CONTROL BYTE 0010B
          EQ     PDOX        RETURN 
  
 PDO1     SA5    TRMD        GET BUFFER INDEX 
          BX6    X2          GET FIELD NUMBER 
          SX7    4002B
          SA6    X5+DBUF     ENTER FIELD NUMBER INTO BUFFER 
          SX6    X5+4        INCREMENT INDEX
          SA7    A6+B1       ENTER OCTER COUNTER INTO BUFFER
          SX7    X3+4000B    GET FIRST OCTET
          SA7    A6+2        ENTER FIRST OCTET INTO BUFFER
          SX7    X4          GET SECOND OCTET 
          SA7    A6+3        ENTER SECOND OCTET INTO BUFFER 
          SA6    A5          RESET BUFFER INDEX 
          EQ     PDOX        RETURN 
 PEV      SPACE  4,15 
**        PEV - PROCESS EQUIVALENCED VALUE ARGUMENT TYPE. 
* 
*         ENTRY  (X1) = PARAMETER FROM COMMAND. 
*                (X2) = TABLE ENTRY FROM *TFLD*.
*                (B5) = ADDRESS OF FIELD VALUE EQUIVALENCED CODE. 
* 
*         EXIT   (X2) = FIELD NUMBER. 
*                (X4) = FIELD VALUE.
*                     = 0 IF EQUIVALENCE VALUE NOT FOUND. 
*                (X6) = NORMALIZED FIELD VALUE TO BE VALIDATED. 
*                (B2) .GE. 0, VALIDATE FIELD VALUE RANGE. 
* 
*         USES   X - 0, 1, 2, 4, 6, 7.
*                A - 1, 4.
*                B - 2, 3, 4, 5, 6. 
* 
*         DEFINE (B6) = POSITION IN PARAMETER LIST. 
*                (B7) = INDEX INTO TABLES.
  
  
 PEV      SUBR               ENTRY/EXIT 
          SB4    3777B       SET FIELD VALUE
          SA1    TTPV+B6     GET PARAMETER WORD COUNT 
          SX7    B5          PRESERVE TABLE INDEX 
          AX1    54 
          SB3    X1 
          SA1    A1+B1       GET WHOLE PARAMETER VALUE
 PEV1     SA4    B5          GET EQUIVALENCE CODE 
          ZR     X4,PEVX     IF NO EQUIVALENCE FOUND
          SB5    B5+B1
          SB2    X4 
          SB4    B4+B1
          MX0    24 
          BX0    X0*X4
          NZ     X0,PEV2     IF SHORT PARAMETER 
          LX4    0-18 
          SB5    B5+B2
          NE     B3,B2,PEV1  IF WORD COUNTS DIFFERENT 
          SB4    X4          SET FIELD VALUE
          SA4    A4+B1       GET EQUIVALENCE CODE 
 PEV2     BX4    X4-X1
          NZ     X4,PEV1     IF NO MATCH
          SB2    B2-B1
          LE     B2,PEV3     IF DONE COMPARING
          SA4    A4+B1
          SA1    A1+B1
          SB6    B6+1 
          EQ     PEV2        CHECK NEXT WORD
  
 PEV3     SX7    X7-BOOL     CHECK FOR TABLE *BOOL* 
          MX0    -1 
          SX4    B4 
          NZ     X7,PEV4     IF NOT SEARCHING TABLE *BOOL*
          BX4    -X0*X4      NORMALIZE BOOLEAN VALUE
          SB4    X4+4000B 
          SX4    B4 
 PEV4     SB4    B4-4000B    GET VALUE TO VALIDATE
          SX6    B4 
          MX0    -12
          LX2    -18
          BX2    -X0*X2      FIELD NUMBER 
          SB2    B1          VALIDATE RANGE 
          EQ     PEVX        RETURN 
 PMP      SPACE  4,20 
**        PMP - PROCESS MULTIPLE VALUE PARAMETER. 
* 
*         ENTRY  (X1) = PARAMETER FROM COMMAND. 
*                (X2) = *TFLD* TABLE ENTRY. 
*                (X6) = 0.
*                (B7) = INDEX TO *TFLD* TABLE.
* 
*         EXIT   (X1) = PARAMETER FROM COMMAND. 
*                (X2) = *TMPV* TABLE ENTRY. 
*                (X3) = 0, IF NO ERROR IN PARAMETER FORMAT. 
*                (X6) = 1, INDICATES A MULTIPLE VALUE PARAMETER.
*                (B5) = EQUIVALENCE TABLE ADDRESS.
*                (B7) = INDEX INTO *TMPV* TABLE.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6, 7.
*                A - 2, 3, 6, 7.
*                B - 3, 5, 7. 
  
  
 PMP      SUBR               ENTRY/EXIT 
          SA3    PMPC        GET PREVIOUS INDEX 
          SB5    X3 
          EQ     B5,B7,PMP1  IF SAME PARAMETER
          SX7    B7          SAVE NEW INDEX 
          SA7    PMPC 
 PMP1     MX0    -12         GET INDEX TO *TMPV* TABLE
          AX2    18 
          BX2    -X0*X2 
          SB3    X2 
          BX3    X1          GET FIRST CHARACTER OF PARAMETER VALUE 
          MX0    6
          BX3    X0*X3
 PMP2     SA2    TMPV+B3     FIND MATCH IN TABLE
          BX4    X0*X2
          BX5    X4-X3
          ZR     X5,PMP3     IF MATCH 
          ZR     X4,PMP3     IF POSSIBLE MATCH
          LX2    24 
          NG     X2,PMP5     IF END OF TABLE
          SB3    B3+B1       INCREMENT INDEX
          EQ     PMP2        CHECK NEXT ENTRY FOR MATCH 
  
 PMP3     LX4    6
          SX5    X4-1RC 
          NZ     X5,PMP4     IF NOT C FORMAT
          MX3    54          STRIP OFF LEADING C
          LX1    6
          BX1    X3*X1
 PMP4     SB7    B3          RETURN INDEX TO *TMPV* TABLE 
          SX6    B1          SET MULTI-PARAMETER FLAG 
          MX3    -18         GET TABLE ADDRESS
          BX3    -X3*X2 
          SB5    X3          RETURN EQUIVALENCE TABLE ADDRESS 
          SX3    B0          CLEAR ERROR FLAG 
          EQ     PMPX        RETURN 
  
 PMP5     SA3    TRMC        INCREMENT ERROR COUNT
          SX3    X3+B1
          BX6    X3 
          SA6    A3 
          EQ     PMPX        RETURN ERROR 
  
  
 PMPA     CON    0           SET IF CURRENT PARAMETER HAS MULTI-VALUES
 PMPC     CON    0           *TTFN* TABLE INDEX 
 POP      SPACE  4,15 
***       POP - PICK OUT TRMDEF PARAMETER FROM STRING BUFFER. 
* 
*                A LITERAL PARAMETER IS DELIMITED BY *$*.  IF THE 
*         LITERAL IS TO CONTAIN A *$*, *$$* MUST BE USED. 
*         EG. - $A B/C$$E$  YIELDS  A B/C$E 
* 
*         THE ASTERISK (*) AND UNDERLINE (_) ARE CONSIDERED TO BE 
*         VALID PARAMETER CHARACTERS, NOT SEPARATORS. 
* 
*         *POPL* DEFINES THE MAXIMUM PARAMETER LENGTH IN WORDS. 
* 
*         NOTE - THIS ROUTINE IS A MODIFIED VERSION OF *COMCPOP*. 
* 
*         ENTRY  (B6) = ADDRESS TO BEGIN ASSEMBLY.
*                (USBC) = ADDRESS OF LAST CHARACTER IN STRING BUFFER. 
* 
*         EXIT   (X6) = LAST PART OF ASSEMBLED PARAMETER OR PARAMETER 
*                            IF .LT. 10 CHARACTERS. 
*                (B5) = PARAMETER LENGTH (IN WORDS) - 1.
*                     = NEGATIVE IF BUFFER EXHAUSTED OR ERROR.
*                (B6) = 0 IF *.* OR *)* ENCOUNTERED.
*                     = POSITIVE, NEXT STRING BUFFER ADDRESS. 
*                (A1) = ADDRESS OF SEPARATOR. 
*                (X1) = SEPARATOR.
*                (X2) = NEGATIVE IF *.* OR *)* ENCOUNTERED
*                     AND NO ERRORS.
*                     = 0 IF CHARACTER ENCOUNTERED WITH 
*                     DISPLAY CODE GREATER THAN 57B (.).
* 
* 
*         USES   A - 1, 6, 7. 
*                X - 1, 2, 3, 6, 7. 
*                B - 1, 2, 3, 4, 5, 6, 7. 
  
  
 POP13    SB5    -1          SET ERROR FLAG 
          EQ     POPX        RETURN 
  
 POP14    SX3    4100B       CHECK FOR VALID TERMINATOR 
          BX7    X7-X7
          AX2    X3,B2
          SA6    POPA+B5     STORE PARAMETER WORD 
          SB2    B4-60       CHECK FOR EMPTY ASSEMBLE REGISTER
          EQ     B2,B0,POP15 IF EMPTY ASSEMBLY REGISTER 
          SB2    B5-POPL     CHECK PARAMETER SIZE 
          PL     B2,POP13    IF PARAMETER TOO LONG
          SA7    A6+1 
 POP15    LX2    59          CHECK TERMINATOR 
          PL     X2,POP16    IF NOT *.* OR *)*
          SB6    B0          SET TERMINATOR ENCOUNTERED 
 POP16    SB4    B4-60
          NE     B4,B0,POPX  IF NOT EMPTY ASSEMBLY REGISTER 
          EQ     B5,B0,POPX  IF .LT. 11D CHARACTERS 
          SB5    B5-1 
  
 POP      SUBR               ENTRY/EXIT 
          SB5    -1          SET PARAMETER LENGTH INDEX 
          LE     B6,POPX     IF NO ASSEMBLY POINTER 
          SA1    USBC        GET LAST CHARACTER LOCATION
          SB7    X1+1 
 POP1     SB4    60          POSITION INDEX 
          BX6    X6-X6       CLEAR ASSEMBLY REGISTER
          SB5    B5+B1
 POP2     SA1    B6 
          LT     B6,B7,POP3  IF MORE CHARACTERS IN STRING BUFFER
          SB3    POPL 
          GT     B5,B3,POP13 IF BUFFER FULL 
          SA6    POPA+B5
          EQ     POP13       SET ERROR FLAG - NO TERMINATOR 
  
 POP3     SX2    X1-1R
          NZ     B4,POP4     IF ASSEMBLY REGISTER NOT FULL
          SA6    POPA+B5     STORE FULL WORD
          SB2    B5-POPL
          NG     B2,POP1     IF PARAMETER NOT TOO LONG
          EQ     POP13       SET ERROR FLAG - PARAMETER TOO LONG
  
 POP4     SX3    X1-1R$ 
          SB6    B6+1 
          SB2    X1-1R9 
          ZR     X3,POP6     IF LITERAL PARAMETER 
          SX3    X1-1R* 
          ZR     X3,POP5     IF CHARACTER = * 
          ZR     X2,POP2     IF CHARACTER = * * 
          ZR     X1,POP14    IF CHARACTER 00
          LE     B2,POP5     IF ALPHANUMERIC
          SX3    X1-65B 
          NZ     X3,POP14    IF NOT UNDERLINE 
 POP5     SB4    B4-6 
          LX7    X1,B4
          BX6    X7+X6
          EQ     POP2        CHECK NEXT CHARACTER 
  
 POP6     SX7    B4-60       CHECK FOR DELIMITER AS FIRST CHARACTER 
          SX3    X7+B5
          NZ     X3,POP13    IF DELIMITER NOT FIRST CHARACTER 
 POP7     SA1    B6 
          SX3    X1-1R$ 
          SB6    B6+B1
          GT     B6,B7,POP13 IF NO MORE CHARACTERS IN STRING BUFFER 
          NZ     X3,POP11    IF NO DELIMITER
          SA1    B6 
          SX3    X1-1R$ 
          SB6    B6+B1
          GT     B6,B7,POP10 IF NO MORE CHARACTERS IN STRING BUFFER 
          ZR     X3,POP11    IF DOUBLE DELIMITER
 POP8     SX3    X1-1R* 
          SB2    X1-1R$ 
          ZR     X3,POP13    IF ILLEGAL SEPARATOR 
          ZR     B2,POP13    IF ILLEGAL SEPARATOR 
          ZR     X1,POP14    IF 00 CHARACTER
          SB2    X1-1R9 
          SX3    X1-1R
          LE     B2,POP13    IF ALPHANUMERIC CHARACTER
          NZ     X3,POP14    IF NOT BLANK 
 POP9     SA1    B6 
          SB6    B6+B1
          LE     B6,B7,POP8  IF MORE CHARACTERS IN STRING BUFFER
 POP10    BSS    0
          EQ     POP13       SET ERROR FLAG - NO TERMINATOR 
  
 POP11    NZ     B4,POP12    IF ASSEMBLY WORD NOT FULL
          SA6    POPA+B5     STORE ASSEMBLY WORD
          SB2    B5-POPL
          PL     B2,POP13    IF PARAMETER TOO LONG
          SB4    60 
          BX6    X6-X6
          SB5    B5+B1
 POP12    SB4    B4-6 
          LX7    X1,B4
          BX6    X6+X7
          EQ     POP7        CHECK NEXT CHARACTER 
  
 POPL     EQU    6           MAXIMUM PARAMETER LENGTH IN WORDS
 POPA     BSS    POPL+1      ASSEMBLY BUFFER
 PPS      SPACE  4,15 
**        PPS - PACK PARAMETER STRING - CONTROL BYTE 0016B. 
* 
*         ENTRY  (TRMA) = NUMBER OF ENTRIES TO PACK.
*                (CBUF) = FIELD NUMBER/FIELD VALUE PAIRS. 
* 
*         EXIT   (OBUF) = PACKED CONTROL BYTE PARAMETER STRING. 
*                (B7) = WORD COUNT OF PACKED STRING.
* 
*         USES   X - 1, 5, 6. 
*                A - 1, 5, 6. 
*                B - 5, 7.
  
  
 PPS      SUBR               ENTRY/EXIT 
          SA5    TRMA        NUMBER OF ENTRIES TO PACK
          SA1    CBUF        GET FIRST ENTRY TO PACK
          SB7    B0+         INDEX TO *OBUF*
 PPS1     BX6    X6-X6
          SB5    5           PACKED ENTRIES PER WORD
 PPS2     BX6    X6+X1
          SB5    B5-B1
          SA1    A1+B1       GET NEXT ENTRY TO PACK 
          LX6    12 
          NZ     B5,PPS2     IF WORD NOT FILLED 
          LX6    -12
          SA6    B7+OBUF     ENTER INTO OUTPUT BUFFER 
          SB7    B7+1        INCREMENT INDEX
          SX5    X5-5 
          PL     X5,PPS1     IF NOT END OF ENTRIES TO PACK
          EQ     PPSX        RETURN 
 PPT      SPACE  4,15 
**        PPT - PACK PARAMETER STRING - CONTROL BYTE 0010B. 
* 
*         ENTRY  (TRMD) = NUMBER OF ENTRIES TO PACK.
*                (DBUF) = FIELD NUMBER/FIELD VALUE PAIRS. 
* 
*         EXIT   (OBUF) = PACKED CONTROL BYTE PARAMETER STRING. 
*                (B7) = WORD COUNT OF PACKED STRING.
* 
*         USES   X - 1, 5, 6. 
*                A - 1, 5, 6. 
*                B - 5, 7.
  
  
 PPT      SUBR               ENTRY/EXIT 
          SA5    TRMD        NUMBER OF ENTRIES TO PACK
          SA1    DBUF        GET FIRST ENTRY TO PACK
          SB7    B0+         INDEX TO *OBUF*
 PPT1     BX6    X6-X6
          SB5    5           PACKED ENTRIES PER WORD
 PPT2     BX6    X6+X1
          SB5    B5-B1
          SA1    A1+B1       GET NEXT ENTRY TO PACK 
          LX6    12 
          NZ     B5,PPT2     IF WORD NOT FILLED 
          LX6    -12
          SA6    B7+OBUF     ENTER INTO OUTPUT BUFFER 
          SB7    B7+1        INCREMENT INDEX
          SX5    X5-5 
          PL     X5,PPT1     IF NOT END OF ENTRIES TO PACK
          EQ     PPTX        RETURN 
 PTP      SPACE  4,15 
**        PTP - PROCESS *TC* PARAMETER. 
* 
*         ENTRY  (X6) = VALUE ENTERED FOR *TC* PARAMETER. 
*                (TRMB) = CURRENT TERMINAL CLASS FOR VALIDATION.
* 
*         EXIT   (X3) .LT. 0 IF ERROR.
*                (TRMB) = NEW TERMINAL CLASS FOR VALIDATION.
* 
*         USES   X - 1, 3, 5, 7.
*                A - 1, 6.
* 
*         DEFINE (B6) = POSITION IN PARAMETER LIST. 
*                (B7) = INDEX INTO TABLES.
*                (X2) = FIELD NUMBER. 
*                (X4) = FIELD VALUE.
  
  
 PTP      SUBR               ENTRY/EXIT 
          SX3    -1          SET ERROR FLAG 
          SX5    X6-1 
          NG     X5,PTPX     IF INCORRECT TERMINAL CLASS
          SX5    X6-LTCN     LARGEST TERMINAL CLASS NUMBER
          PL     X5,PTPX     IF INCORRECT TERMINAL CLASS
  
*         VALIDATE FOR LEGAL TERMINAL CLASS CHANGE. 
  
          SA1    TRMB        GET CONNECTED TERMINAL CLASS 
          BX3    X1-X6
          ZR     X3,PTPX     IF NO TERMINAL CLASS CHANGE
          SA1    X1+TLTC     GET ALLOWED CHANGE LIMITS
          SX7    X1          LOWER BOUND
          LX1    17-35
          SX1    X1          UPPER BOUND
          IX3    X6-X7
          NG     X3,PTPX     IF INCORRECT TERMINAL CLASS CHANGE 
          IX3    X1-X6
          NG     X3,PTPX     IF INCORRECT TERMINAL CLASS CHANGE 
 PTP1     BX3    X3-X3       CLEAR ERROR FLAG 
          SA6    TRMB        SET NEW TERMINAL CLASS 
          EQ     PTPX        RETURN 
 SAF      SPACE  4,20 
**        SAF - SET ATTRIBUTE FLAGS.
* 
*         ENTRY  (B7) = INDEX INTO TABLES.
* 
*         EXIT   (TRMF) POINTERS UPDATED. 
* 
*         USES   X - 2, 7.
*                A - 2, 7.
  
  
 SAF      SUBR               ENTRY/EXIT 
          SX7    B1 
          SA2    TFVR+B7     ATTRIBUTE TYPE CHECK 
          LX2    59-39
          NG     X2,SAF1     IF COMMON ATTRIBUTE
          LX2    1
          NG     X2,SAF2     IF NAM/CDNA ATTRIBUTE
          LX2    1
          NG     X2,SAF3     IF NAM/CCP ATTRIBUTE 
  
 SAF1     SA7    TRMF+2      SET COMMON FLAG
          EQ     SAFX        RETURN 
  
 SAF2     SA7    TRMF+1      SET CDNA FLAG
          EQ     SAFX        RETURN 
  
 SAF3     SA7    TRMF        SET CCP FLAG 
          EQ     SAFX        RETURN 
 SEP      SPACE  4,20 
**        SEP - SEND EXTRA FN/FV PAIR.
* 
*         ENTRY  (X2) = CURRENT FIELD NUMBER. 
*                (X4) = CURRENT FIELD VALUE.
*                (X6) = FIELD VALUE TO BE VALIDATED.
*                (A2) = *TMPV* TABLE ENTRY. 
*                (B5) = 0.
*                (B7) = INDEX INTO TABLES.
* 
*         EXIT   (X2) = CURRENT FIELD NUMBER. 
*                (X4) = CURRENT FIELD VALUE.
*                (X6) = FIELD VALUE TO BE VALIDATED.
*                (B5) .LT. 0, IF *C* VALUE TOO LARGE. 
*                     .GE. 0, IF *C* VALUE LESS THAN 4096.
*                (B7) = INDEX INTO TABLES.
* 
*                EXIT TO VFT3.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6. 
*                A - 1, 2.
*                B - 3, 4, 5. 
* 
*         CALLS  EFP. 
  
  
*         SEND *DL*/*XL* FLAG.
  
 SEP      SX3    B0          FIELD VALUE
          EQ     SEP2        CONTINUE 
  
 SEP1     SX3    B1          FIELD VALUE
 SEP2     SB3    X4          SAVE CURRENT FIELD VALUE 
          SB4    X2          SAVE CURRENT FIELD NUMBER
          SX4    X3+4000B    SET UP DL/XL FLAG
          SX2    MXFN        FIELD NUMBER 
          SX3    X6          SAVE VALUE TO VERIFY 
          RJ     EFP         ENTER FN/FV PAIR - CONTROL BYTE 0016B
          RJ     EFQ         ENTER AN/AV PAIR - CONTROL BYTE 0010B
          SX4    B3          RESTORE CURRENT FIELD VALUE
          SX2    B4          RESTORE CURRENT FIELD NUMBER 
          SX6    X3          RESTORE VALUE TO VALIDATE
          SA1    TMPV+B7     CHECK FIELD VALUE FORMAT 
          MX0    6
          BX1    X0*X1
          LX1    6
          SX5    X1-1RC 
          NZ     X5,SEP3     IF NOT *C* FORMAT
          SX1    X6-256D
          SB7    B7+B1       INCREMENT TABLE INDEX
          SX4    4000B       CLEAR UPPER BYTE 
          SB5    -B1         SET ERROR FLAG 
          NG     X1,SEP2.1   IF LESS THAN 8 BITS
          AX6    8           GET UPPER 4 BITS 
          SX1    X6-16D 
          PL     X1,SEP3     IF VALUE TOO LARGE 
          SX4    X6+4000B    FIELD VALUE
 SEP2.1   ZR     X6,SEP3     IF VALUE TOO SMALL 
          SB5    B0+         CLEAR ERROR FLAG 
          RJ     EFP         ENTER FN/FV PAIR - CONTROL BYTE 0016B
          RJ     EFQ         ENTER AN/AV PAIR - CONTROL BYTE 0010B
          SA2    A2+B1
          AX2    18 
          SX2    X2 
          MX0    -8 
          SX6    X3 
          BX6    -X0*X6 
          SX4    X6+4000B    RESTORE FIELD VALUE
 SEP3     JP     VFT3        RETURN 
  
*         TRANSLATE *IN* FIELD VALUE. 
  
 SEP4     SB4    X4-4000B    GET FIELD VALUE
          SA1    SEPA+B4
          MX0    -12
 SEP5     LX1    12          FIND FN/FV PAIR
          BX2    -X0*X1      GET TRUE FIELD NUMBER
          LX1    12 
          BX4    -X0*X1      GET TRUE FIELD VALUE 
          PL     X1,SEP3     IF NOT TWO PAIRS 
          LX1    6
          SX3    X6          SAVE VALUE TO VERIFY 
          RJ     EFP         ENTER FN/FV PAIR - CONTROL BYTE 0016B
          RJ     EFQ         ENTER AN/AV PAIR - CONTROL BYTE 0010B
          SX6    X3          RESTORE VALUE TO VALIDATE
          EQ     SEP5        SET UP NEXT PAIR 
  
  
*         SEPA - TABLE OF EXTRA FN/FV PAIRS.
* 
*T        12/FN,12/FV,6/FLAG,12/FN,12/FV,6/FLAG.
* 
*                FN = FIELD NUMBER. 
*                FV = FIELD VALUE.
*                FLAG = .LT. 0, IF ANOTHER FN/FV PAIR.
*                       .GE. 0, IF NOT ANOTHER FN/FV PAIR.
  
  
 SEPA     BSS    0
          VFD    12/XPFN,12/4000B,6/-1,12/INFN,12/4000B,6/0    *IN=KB*
          VFD    12/XPFN,12/4000B,6/-1,12/INFN,12/4001B,6/0    *IN=PT*
          VFD    12/XPFN,12/4001B,6/-1,12/INFN,12/4001B,6/0    *IN=XP*
          VFD    12/XPFN,12/4001B,6/-1,12/INFN,12/4000B,6/0    *IN=XK*
          VFD    12/INFN,12/4002B,36/0                         *IN=BK*
          VFD    12/XPFN,12/4001B,36/0                         *IN=X* 
          CON    0           END OF TABLE 
 SPC      SPACE  4,15 
**        SPC - SPECIAL PAGE CHECKS FOR CDNA RANGES.
* 
*         *SPC* CHECKS *PL* AND *PW* FOR SPECIAL RANGE RESTRICTIONS 
*         THAT ARE PRESENT ONLY IN CDCNET.
* 
*         ENTRY  (X4) = ATTRIBUTE VALUE.
*                (X6) = ATTRIBUTE NUMBER. 
* 
*         EXIT   (TRMC) .EQ. 0, IF ATTRIBUTE VALUE WITHIN RANGE.
*                       .NE. 0, IF ERROR. 
*                (X4) = ATTRIBUTE VALUE.
*                (X6) = ATTRIBUTE NUMBER. 
* 
*         USES   X - 7. 
*                A - 7. 
  
 SPC      SUBR               ENTRY/EXIT 
          SX7    X6-PLFN
          ZR     X7,SPC1     IF *PL* ATTRIBUTE
          SX7    X6-PWFN
          ZR     X7,SPC2     IF *PW* ATTRIBUTE
          EQ     SPCX        RETURN 
  
 SPC1     SX6    PL2F 
          SX7    X4-4001B 
          ZR     X7,SPC3     IF INCORRECT VALUE FOR *PL*
          EQ     SPCX        RETURN 
  
 SPC2     SX6    PW2F 
          SX7    X4-4000B 
          ZR     X7,SPCX     IF CORRECT VALUE FOR *PW*
          SX7    X4-4012B 
          NG     X7,SPC3     IF INCORRECT VALUE FOR *PW*
          EQ     SPCX        RETURN 
  
 SPC3     SX7    B1 
          SA7    TRMG        SET ERROR FLAG 
          EQ     SPCX        RETURN 
 VCP      SPACE  4,20 
**        VCP - VARIABLE CHARACTER PROCESSOR. 
* 
*         FOR THOSE ATTRIBUTES WITH A VARIABLE NUMBER OF CHARACTERS,
*         *VCP* WILL OUTPUT THE CORRECT NUMBER OF ATTRIBUTE VALUE 
*         OCTETS. 
* 
*         ENTRY  (X1) = PARAMETER FROM COMMAND. 
*                (B7) = INDEX INTO TABLES.
*                (B5) = VARIABLE CHARACTER RANGE IDENTIFIER.
*                     .EQ. 2 THEN RANGE IS 0-2. 
*                     .EQ. 3 THEN RANGE IS 0-4. 
*                     .EQ. 4 THEN RANGE IS 0-7. 
*                     .EQ. 5 THEN RANGE IS 0-25.
* 
*         EXIT   CONTROL BYTE 0010B UPDATED.
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 5, 6, 7.
*                B - 2, 3, 4, 6.
* 
*         CALLS  EFQ, HCP.
  
  
 VCP      SUBR               ENTRY/EXIT 
          SA1    TTPV+B6     GET PARAMETER WORD COUNT 
          AX1    54 
          SB2    X1 
          SA1    A1+B1       GET WHOLE PARAMETER VALUE
          SA2    TTFN+B7     GET FIELD NUMBER 
          MX0    -12
          AX2    18 
          BX2    -X0*X2      FIELD NUMBER ISOLATED
          BX0    X1 
          AX0    54 
          SX0    X0-1RX 
          NZ     X0,VCP0     IF NOT HEXADECIMAL FORMAT
          RJ     HCP         HEXADECIMAL CHARACTER PROCESSOR
          EQ     VCPX        RETURN 
  
 VCP0     SB3    B1+B1       DETERMINE RANGE SIZE 
          SB4    B1 
          SA5    A1 
          MX0    12 
          EQ     B5,B3,VCP1  IF RANGE OF 0-2 CHARACTERS 
          SB3    B3+B1
          MX0    24 
          EQ     B5,B3,VCP1  IF RANGE OF 0-4 CHARACTERS 
          SB3    B3+B1
          MX0    42 
          EQ     B5,B3,VCP1  IF RANGE OF 0-7 CHARACTERS 
          MX0    30 
          SB4    3
          SA5    A1+2 
 VCP1     GT     B2,B4,ERR5  IF TOO MANY CHARACTERS 
          LT     B2,B4,VCP2  IF FEWER WORDS THAN MAXIMUM
          BX4    -X0*X5 
          NZ     X4,ERR5     IF TOO MANY CHARACTERS 
 VCP2     ZR     X1,VCP6     IF NO CHARACTERS ENTERED 
          LX1    6
          MX0    -6 
          BX3    -X0*X1 
          SA3    X3+TVXD     GET OCTAL EQUIVALENT 
          LX3    0-18 
          SX4    X3+4000B 
          RJ     EFQ         ENTER AN/AV PAIR - CONTROL BYTE 0010B
          BX1    X0*X1
          SB3    B1          SET OCTET COUNTER
          SA5    TRMD        SET BUFFER INDEX 
 VCP3     NZ     X1,VCP5     IF MORE CHARACTERS REMAIN
          SB2    B2-1 
          ZR     B2,VCP4     IF THROUGH WITH PARAMETER
          SB6    B6+1        INCREMENT TABLE INDEX
          SA1    TTPV+B6+1
          NZ     X1,VCP5     IF NOT THROUGH WITH PARAMETER
 VCP4     BX7    X5          GET OCTET COUNT BYTE 
          SA7    A5 
          SX6    B3+B1
          IX5    X5-X6       LOCATE COUNT OCTET 
          SX7    B3+4000B    GET OCTET COUNT
          SA7    X5+DBUF     ENTER FIELD VALUE INTO BUFFER
          EQ     VCPX        RETURN 
  
 VCP5     LX1    6
          BX3    -X0*X1 
          SA3    X3+TVXD     GET OCTAL EQUIVALENT 
          SB3    B3+B1       INCREMENT OCTET COUNTER
          LX3    0-18 
          SX7    X3+4000B 
          SA7    X5+DBUF     ENTER FIELD VALUE INTO BUFFER
          SX5    X5+B1       RESET BUFFER INDEX 
          BX1    X0*X1
          EQ     VCP3        OUTPUT NEXT CHARACTER OCTET
  
 VCP6     SA5    TRMD        GET BUFFER INDEX 
          BX6    X2 
          SX7    4000B
          SA6    X5+DBUF     ENTER FIELD NUMBER INTO BUFFER 
          SX6    X5+2        INCREMENT INDEX
          SA7    A6+B1       ENTER OCTET COUNTER INTO BUFFER
          SA6    A5          RESET BUFFER INDEX 
          EQ     VCPX        RETURN 
 VFT      SPACE  4,20 
**        VFT - VALIDATE FIELD VALUE ACCORDING TO TERMINAL CLASS. 
* 
*         ENTRY  (X6) = CONTENTS TO BE VALIDATED. 
*                (TRMB) = TERMINAL CLASS TO BE USED FOR VALIDATION. 
*                (B2) .LT. 0 IF DO NOT VALIDATE RANGE.
* 
*         EXIT   (X6) .LT. 0, IF ERROR. 
* 
*         USES   X - 0, 1, 3, 5, 6. 
*                A - 1, 3, 5. 
*                B - 3, 4, 5. 
* 
*         CALLS  PTP. 
* 
*         DEFINE (B6) = POSITION IN PARAMETER LIST. 
*                (B7) = ADDRESS OF TABLE ENTRY
*                (X2) = FIELD NUMBER. 
*                (X4) = FIELD VALUE.
  
  
 VFT      SUBR               ENTRY/EXIT 
          SB5    B0          CLEAR ERROR FLAG 
          SA1    TTFN+B7     GET TABLE ENTRY
          MX0    -12
          SA5    PMPA 
          ZR     X5,VFT1     IF NOT MULTIPLE PARAMETER
          SA3    PMPC        GET *TTFN* INDEX 
          SA1    TTFN+X3     GET TABLE ENTRY
 VFT1     MX0    18 
          SB4    B0+
          BX3    X0*X1
 VFT2     SA1    VFTA+B4     MATCH TABLE ENTRY
          SB4    B4+B1
          BX5    X0*X1
          ZR     X5,VFT3     IF END OF TABLE
          BX5    X5-X3
          NZ     X5,VFT2     IF NO MATCH
          MX0    18          GET PROCESSING ROUTINE ADDRESS 
          BX5    -X0*X1 
          SB4    X5 
          SB3    X6          SAVE NUMBER TO BE VALIDATED
          JP     B4          DO SPECIAL PROCESSING
  
 VFT3     NG     B5,VFT5     IF ERROR IN *C* VALUE
          SA1    TRMB        GET TERMINAL CLASS 
          SA3    TFVR+B7     GET VALIDATION RANGE 
          SA5    PMPA 
          ZR     X5,VFT4     IF NOT MULTIPLE PARAMETER
          SA3    TFVM+B7     GET RANGE TABLE ENTRY
 VFT4     SB4    X1 
          LX3    B4 
          NG     X3,VFT5     IF PARAMETER INCORRECT FOR TERMINAL CLASS
          NG     B2,VFTX     IF RANGE NOT TO BE CHECKED 
          LX3    -B4
          SX5    X3          LOWER BOUND
          LX3    17-35
          SX3    X3          UPPER BOUND
          IX5    X6-X5
          IX3    X3-X6
          NG     X5,VFT5     IF VALUE TOO LOW 
          PL     X3,VFTX     IF NO ERROR
 VFT5     SX6    -B1         SET ERROR FLAG 
          EQ     VFTX        RETURN 
  
 VFT6     RJ     PTP         PROCESS *TC* PARAMETER 
          BX6    X3          SET ERROR STATUS 
          EQ     VFTX        RETURN 
  
  
 VFTA     BSS    0
          VFD    18/0LXL,24/0,18/SEP1 
          VFD    18/0LDL,24/0,18/SEP
          VFD    18/0LIN,24/0,18/SEP4 
          VFD    18/0LTC,24/0,18/VFT6 
          CON    0           END OF TABLE 
 ZCA      SPACE  4,20 
**        ZCA - ZERO CHARACTER ATTRIBUTE CHECKER. 
* 
*         *ZCA* SETS A FLAG IF VARIABLE LENGTH ATTRIBUTES HAVE A
*         ZERO CHARACTER NAME ENTERED.
* 
*         ENTRY  (X4) = ATTRIBUTE NUMBER. 
*                (X5) = POINTER TO *TTPV*.
*                (X6) = CONTENTS TO BE VALIDATED. 
* 
*         EXIT   (X3) .LT. 0, IF ATTRIBUTE NOT OF VARIABLE LENGTH.
*                     .EQ. 0, IF VALUE LENGTH NOT TO BE CHECKED.
* 
*         USES   X - 0, 2, 3, 5.
*                A - 2. 
*                B - 4. 
  
  
 ZCA      SUBR               ENTRY/EXIT 
          MX0    18 
          SB2    X5          PRESERVE *TTPV* POINTER
          SB4    B0+
          BX3    X0*X4
 ZCA1     SA2    ZCAA+B4     MATCH TABLE ENTRY
          SB4    B4+B1
          BX5    X0*X2
          ZR     X5,ZCA2     IF END OF TABLE
          BX5    X5-X3
          NZ     X5,ZCA1     IF NO MATCH
          SX3    B0+         BLANK ARGUMENT NOT TO BE CHECKED 
          EQ     ZCAX        RETURN 
  
 ZCA2     SX3    -1          BLANK ARGUMENT TO BE CHECKED 
          EQ     ZCAX        RETURN 
  
 ZCAA     BSS    0
          VFD    18/0LTM,42/0 
          VFD    18/0LEOS,42/0
          VFD    18/0LCRS,42/0
          VFD    18/0LLFS,42/0
          VFD    18/0LFFS,42/0
          CON    0           END OF TABLE 
 TFVM     SPACE  4,10 
**        TFVM - TABLE OF VALIDATION RANGES FOR MULTI-VALUE.
* 
*T        18/VBF,6/0,18/UB,18/LB
*         VFB = CORRESPONDING BIT SET IF PARAMETER INCORRECT
*               FOR TERMINAL CLASS. 
*         UB = UPPER BOUND ON PARAMETER VALUE RANGE.
*         LB = LOWER BOUND ON PARAMETER VALUE RANGE.
* 
*         ENTRIES IN *TFVM* AND *TMPV* MUST BE SAME ORDER 
  
  
 TFVM     BSS    1
          VFD    18/00777B,6/0,18/15D,18/0   *CNXXX* FOR *DL* 
          VFD    18/00777B,6/0,18/255D,18/0  *CXNNN* FOR *DL
          VFD    18/20413B,6/0,18/255D,18/0  *XHH* FOR *DL* 
          VFD    18/20777B,6/0,18/1,18/0     *T0* FOR *DL*
          VFD    18/00777B,6/0,18/15D,18/0   *CNXXX* FOR *XL* 
          VFD    18/00777B,6/0,18/255D,18/0  *CXNNN* FOR *XL* 
          VFD    18/20413B,6/0,18/255D,18/0  *XHH* FOR *XL* 
          VFD    18/20777B,6/0,18/1,18/0     *TO* FOR *XL*
          VFD    18/20413B,6/0,18/255D,18/0  *YHH* FOR *XL* 
          VFD    18/413B,6/0,18/127D,18/0    *XHH* FOR *EL* 
          VFD    18/20777B,6/0,18/2,18/0     *EB* OR *EL* FOR *EL*
          VFD    18/20777B,6/0,18/3,18/0     *NO*,*CR*,*LF* OR *CL* 
          VFD    18/20413B,6/0,18/127D,18/0  *XHH* FOR *EB* 
          VFD    18/20777B,6/0,18/2,18/0     *EB* OR *EL* FOR *EB*
          VFD    18/20777B,6/0,18/3,18/0     *NO*,*CR*,*LF* OR *CL* 
          TITLE  TABLES.
 TFVR     SPACE  4,10 
**        TFLD - TABLE OF FIELD VALUE VALIDATION RANGES 
*                AND TERMINAL DEFINITION FIELD NUMBERS. 
* 
*T,TTFN   18/PN,12/SFN,12/FN,18/ADDR
*T,TFVR   18/VBF,6/FLAGS,18/UB,18/LB
*         PN = ONE - THREE CHARACTER PARAMETER NAME MNEMONIC
*              USED FOR COMMAND PROCESSING AND ERROR MESSAGES.
*         SFN = SECOND FIELD NUMBER, IF IT EXISTS.
*         FN = FIELD NUMBER FOR SINGLE VALUE PARAMETERS, OR 
*              INDEX TO *TMPV* TABLE FOR MULTIPLE VALUE 
*              PARAMETERS.
*         ADDR = ADDRESS OF EQUIVALENCE TABLE.
*              IF NEGATIVE, EXPECTING A ONE CHARACTER ARGUMENT. 
*              IF ZERO, EXPECTING A DECIMAL NUMBER. 
*              IF ONE, PARAMETER HAS MULTIPLE FIELD NUMBERS.
*              IF TWO, VALUE HAS A RANGE OF 0-2 CHARACTERS. 
*              IF THREE, VALUE HAS A RANGE OF 0-4 CHARACTERS. 
*              IF FOUR, VALUE HAS A RANGE OF 0-7 CHARACTERS.
*              IF FIVE, VALUE HAS A RANGE OF 0-25 CHARACTERS. 
*              IF SIX, VALUE HAS A RANGE OF 1-4 CHARACTERS. 
*              IF SEVEN, PARAMETER HAS A DOUBLE OCTET VALUE.
*              IF TEN (OCTAL), ATTRIBUTE HAS BEEN DISABLED. 
*         VBF = CORRESPONDING BIT SET IF PARAMETER INCORRECT
*              FOR TERMINAL CLASS.
*         FLAGS = BITS 41 - 40 UNUSED.
*              BIT 39 SET = COMMON ATTRIBUTE. 
*              BIT 38 SET = CDNA ATTRIBUTE. 
*              BIT 37 SET = CCP ATTRIBUTE.
*              BIT 36 SET = UNSUPPORTED ATTRIBUTE.
*         UB = UPPER BOUND ON PARAMETER VALUE RANGE.
*         LB = LOWER BOUND ON PARAMETER VALUE RANGE.
* 
*         THE *L* PARAMETER MUST BE FIRST.
  
  
 TFLD     BSS    0
          VFD    18/1LL,12/0,12/0,18/0           OUTPUT FILE
          VFD    60/0 
          VFD    18/2LTC,12/0,12/TCFN,18/0       TERMINAL CLASS 
          VFD    18/0,6/2,18/17D,18/1 
          VFD    18/2LAB,12/0,12/ABFN,18/-1      ABORT BLOCK
          VFD    18/777B,6/2,18/127D,18/0 
          VFD    18/2LBR,12/0,12/BRFN,18/NYEC    BREAK KEY
          VFD    18/20777B,6/2,18/1,18/0
          VFD    18/2LBS,12/0,12/BSFN,18/-1      BACKSPACE CHARACTER
          VFD    18/777B,6/2,18/127D,18/0 
          VFD    18/2LB1,12/0,12/B1FN,18/-1      USER BREAK 1 
          VFD    18/3B,6/2,18/127D,18/0           (INTERRUPT CHAR)
          VFD    18/2LB2,12/0,12/B2FN,18/-1      USER BREAK 2 
          VFD    18/3B,6/2,18/127D,18/0           (TERMINATION CHAR)
          VFD    18/2LCI,12/CCFN,12/CIFN,18/0    CARRIAGE RETURN IDLE 
          VFD    18/777B,6/2,18/99D,18/0          COUNT 
          VFD    18/2LCN,12/0,12/CNFN,18/-1      CANCEL CHARACTER 
          VFD    18/3B,6/2,18/127D,18/0 
          VFD    18/2LCP,12/0,12/CPFN,18/NYEC    CURSOR POSITIONING 
          VFD    18/20003B,6/2,18/1,18/0
          VFD    18/2LCT,12/0,12/CTFN,18/-1      CONTROL CHARACTER
          VFD    18/0,6/2,18/127D,18/0
          VFD    18/2LDL,12/0,12/DLMV-TMPV,18/1B SINGLE MESSAGE 
          VFD    18/0,6/2,36/0                    TRANSPARENT 
          VFD    18/2LEB,12/0,12/EBMV-TMPV,18/1B END OF BLOCK 
          VFD    18/0,6/2,36/0
          VFD    18/2LEL,12/0,12/ELMV-TMPV,18/1B END OF LINE
          VFD    18/0,6/2,36/0
          VFD    18/2LEP,12/0,12/EPFN,18/NYEC    ECHOPLEX MODE
          VFD    18/20777B,6/2,18/1,18/0
          VFD    18/2LFA,12/0,12/FAFN,18/NYEC    FULL ASCII 
          VFD    18/413B,6/2,18/1,18/0
          VFD    18/2LHD,12/0,12/HDFN,18/NYEC    HOST AVAILABILITY
          VFD    18/3B,6/2,18/1,18/0
          VFD    18/2LIC,12/0,12/ICFN,18/NYEC    INPUT FLOW CONTROL 
          VFD    18/20777B,6/2,18/1,18/0
          VFD    18/2LIN,12/0,12/INFN,18/INEC    INPUT DEVICE 
          VFD    18/3B,6/2,18/5,18/0
          VFD    18/2LLI,12/LCFN,12/LIFN,18/0    LINE FEED IDLE COUNT 
          VFD    18/777B,6/2,18/99D,18/0
          VFD    18/2LLK,12/0,12/LKFN,18/NYEC    LOCK OUT CONTROL 
          VFD    18/0,6/2,18/1,18/0 
          VFD    18/2LOC,12/0,12/OCFN,18/NYEC    OUTPUT FLOW CONTROL
          VFD    18/20777B,6/2,18/1,18/0
          VFD    18/2LOP,12/0,12/OPFN,18/OPEC    OUTPUT DEVICE
          VFD    18/0,6/2,18/2,18/0 
          VFD    18/2LPA,12/0,12/PAFN,18/PAEC    PARITY 
          VFD    18/000413B,6/2,18/5,18/0 
          VFD    18/2LPG,12/0,12/PGFN,18/NYEC    PAGE WAIT
          VFD    18/000413B,6/2,18/1,18/0 
          VFD    18/2LPL,12/0,12/PLFN,18/0       PAGE LENGTH
          VFD    18/0,6/8,18/255D,18/0
          VFD    18/2LPW,12/0,12/PWFN,18/0       PAGE WIDTH 
          VFD    18/0,6/8,18/255D,18/0
          VFD    18/2LSE,12/0,12/SEFN,18/NYEC    SPECIAL EDITING MODE 
          VFD    18/000777B,6/2,18/1,18/0 
          VFD    18/2LXL,12/0,12/XLMV-TMPV,18/1B MULTI MESSAGE
          VFD    18/0,6/2,36/0                    TRANSPARENT MODE
  
*         CDCNET TERMINAL DEFINITIONS.
  
          VFD    18/2LAC,12/0,12/ACCF,18/-1      ATTENTION CHARACTER
          VFD    18/0,6/4,18/127D,18/0
          VFD    18/3LACA,12/0,12/ACAF,18/0      ATTENTION CHARACTER
          VFD    18/0,6/4,18/9D,18/0              ACTION
          VFD    18/2LBC,12/0,12/BCFN,18/-1      BACKSPACE CHARACTER
          VFD    18/0,6/4,18/127D,18/0
          VFD    18/3LBKA,12/0,12/BKAF,18/0      BREAK KEY ACTION 
          VFD    18/0,6/4,18/9D,18/0
          VFD    18/3LBLC,12/0,12/BLCF,18/-1     BEGIN LINE CHARACTER 
          VFD    18/0,6/4,18/127D,18/0
          VFD    18/3LCFC,12/0,12/CFCF,18/BOOL   CHARACTER FLOW CONTROL 
          VFD    18/0,6/4,18/5,18/0 
          VFD    18/3LCLC,12/0,12/CLCF,18/-1     CANCEL LINE CHARACTER
          VFD    18/0,6/4,18/127D,18/0
          VFD    18/3LCRD,12/0,12/CRDF,18/7B     CARRIAGE RETURN DELAY
          VFD    18/0,6/4,18/1000D,18/0 
          VFD    18/3LCRS,12/0,12/CRSF,18/2      CARRIAGE RETURN
          VFD    18/0,6/4,36/0                    SEQUENCE
          VFD    18/2LCS,12/0,12/CSFN,18/CSEC    CODE SET 
          VFD    18/0,6/4,18/2,18/0 
          VFD    18/1LE,12/0,12/EEFN,18/BOOL     ECHOPLEX 
          VFD    18/0,6/4,18/5,18/0 
          VFD    18/3LELC,12/0,12/ELCF,18/-1     END LINE CHARACTER 
          VFD    18/0,6/4,18/127D,18/0
          VFD    18/3LELP,12/0,12/ELPF,18/EBEC   END LINE POSITIONING 
          VFD    18/0,6/4,18/3,18/0 
          VFD    18/3LEOS,12/0,12/EOSF,18/3      END OUTPUT SEQUENCE
          VFD    18/0,6/4,36/0
          VFD    18/3LEPA,12/0,12/EPAF,18/EPEC   END PAGE ACTION
          VFD    18/0,6/4,18/1,18/0 
          VFD    18/3LEPC,12/0,12/EPCF,18/-1     END PARTIAL CHARACTER
          VFD    18/0,6/4,18/127D,18/0
          VFD    18/3LEPP,12/0,12/EPPF,18/EBEC   END PARTIAL
          VFD    18/0,6/4,18/3,18/0               POSITIONING 
          VFD    18/3LFFD,12/0,12/FFDF,18/7B     FORM FEED DELAY
          VFD    18/0,6/4,18/3000D,18/0 
          VFD    18/3LFFS,12/0,12/FFSF,18/4      FORM FEED SEQUENCE 
          VFD    18/0,6/4,36/0
          VFD    18/3LFKC,12/0,12/FKCF,18/5B     FUNCTION KEY CLASS 
          VFD    18/0,6/4,36/0
          VFD    18/2LFL,12/0,12/FLFN,18/BOOL    FOLD LINE
          VFD    18/0,6/4,18/5,18/0 
          VFD    18/2LHP,12/0,12/HPFN,18/BOOL    HOLD PAGE
          VFD    18/0,6/4,18/5,18/0 
          VFD    18/3LHPO,12/0,12/HPOF,18/BOOL   HOLD PAGE OVER 
          VFD    18/0,6/4,18/5,18/0 
          VFD    18/3LIBS,12/0,12/IBSF,18/7B     INPUT BLOCK SIZE 
          VFD    18/0,6/4,18/2000D,18/80D 
          VFD    18/3LIEM,12/0,12/IEMF,18/IEEC   INPUT EDITING MODE 
          VFD    18/0,6/4,18/1,18/0 
          VFD    18/3LIOM,12/0,12/IOMF,18/IOEC   OUTPUT EDITING MODE
          VFD    18/0,6/4,18/2,18/0 
          VFD    18/3LLFD,12/0,12/LFDF,18/7B     LINE FEED DELAY
          VFD    18/0,6/4,18/1000D,18/0 
          VFD    18/3LLFS,12/0,12/LFSF,18/2      LINE FEED SEQUENCE 
          VFD    18/0,6/4,36/0
          VFD    18/3LNCC,12/0,12/NCCF,18/-1     NETWORK CONTROL
          VFD    18/0,6/4,18/127D,18/0            CHARACTER 
          VFD    18/1LP,12/0,12/PPFN,18/PEEC     PARITY TYPE
          VFD    18/0,6/4,18/4,18/0 
          VFD    18/3LPCF,12/0,12/PCFF,18/BOOL   PARTIAL CHARACTER
          VFD    18/0,6/4,18/5,18/0                FORWARDING 
          VFD    18/2LRA,12/0,12/RAFN,18/RAEC    RESPONSE ACTION
          VFD    18/0,6/4,18/1,18/0 
          VFD    18/2LSA,12/0,12/SAFN,18/SAEC    STATUS ACTION
          VFD    18/0,6/4,18/2,18/0 
          VFD    18/3LSBC,12/0,12/SBCF,18/BOOL   STORE BACKSPACE
          VFD    18/0,6/4,18/5,18/0                CHARACTER
          VFD    18/3LSND,12/0,12/SNDF,18/BOOL   STORE NULS DELS
          VFD    18/0,6/4,18/5,18/0 
          VFD    18/3LTCM,12/0,12/TCMF,18/TCEC   TRANSPARENT CHARACTER
          VFD    18/0,6/4,18/3,18/0                MODE 
          VFD    18/3LTFC,12/0,12/TFCF,18/6      TRANSPARENT FORWARD
          VFD    18/0,6/4,36/0                     CHARACTER
          VFD    18/3LTLM,12/0,12/TLMF,18/TLEC   TRANSPARENT LENGTH 
          VFD    18/0,6/4,18/3,18/0                MODE 
          VFD    18/2LTM,12/0,12/TMFN,18/5B      TERMINAL MODEL/TERMI-
          VFD    18/0,6/4,36/0                     NATE TERM-HOST CONN. 
          VFD    18/3LTML,12/0,12/TMLF,18/7B     TRANSPARENT MESSAGE
          VFD    18/0,6/4,18/32767,18/1            LENGTH 
          VFD    18/3LTTC,12/0,12/TTCF,18/6      TRANSPARENT TERMINATE
          VFD    18/0,6/4,36/0                     CHARACTER
          VFD    18/3LTTM,12/0,12/TTMF,18/TMEC   TRANSPARENT TIMEOUT
          VFD    18/0,6/4,18/2,18/0                MODE 
  
*         UNSUPPORTED STANDARD TERMINAL DEFINITIONS.
  
          VFD    18/2LAR,12/0,12/0,18/-1         AUTO CHAR RECOGNITION
          VFD    18/0,6/1,36/0
          VFD    18/2LBF,12/0,12/0,18/-1         BLOCKING FACTOR
          VFD    18/0,6/1,36/0
          VFD    18/2LCH,12/0,12/0,18/-1         TERMINAL CHARACTERIS-
          VFD    18/0,6/1,36/0                     TICS 
          VFD    18/2LHN,12/0,12/0,18/-1         HOST NODE SELECTION
          VFD    18/0,6/1,36/0                    - NUMBER
          VFD    18/2LHS,12/0,12/0,18/-1         HOST SELECTION - NAME
          VFD    18/0,6/1,36/0
          VFD    18/2LMS,12/0,12/0,18/-1         MESSAGETEXT
          VFD    18/0,6/1,36/0
          CON    0
 TLTC     SPACE  4,10 
**        TLTC - TABLE OF LEGAL TERMINAL CLASS CHANGES. 
* 
*T        24/0,18/UB,18/LB
*         UB = UPPER BOUND ON RANGE FOR TERMINAL CLASS CHANGE.
*         LB = LOWER BOUND ON RANGE FOR TERMINAL CLASS CHANGE.
  
  
 TLTC     BSS    0
          LOC    0
          VFD    60/0             TC=0  - INCORRECT 
          VFD    24/0,18/8,18/1   TC=1  - MODEL 33, 35, 37, 38 TTY
          VFD    24/0,18/8,18/1   TC=2  - CDC 713-10, 722, 751-1, 756 
          VFD    24/0,18/8,18/1   TC=3  - CDC 721 
          VFD    24/0,18/4,18/4   TC=4  - IBM 2741
          VFD    24/0,18/8,18/1   TC=5  - MODEL 40 TTY
          VFD    24/0,18/8,18/1   TC=6  - HAZELTINE 2000
          VFD    24/0,18/8,18/1   TC=7  - DEC VT100 
          VFD    24/0,18/8,18/1   TC=8  - TEKTRONIX 401X
          VFD    24/0,18/9,18/9   TC=9  - HASP (POST PRINT) 
          VFD    24/0,18/15,18/10 TC=10 - 200 USER TERMINAL 
          VFD    24/0,18/13,18/11 TC=11 - CDC 714-30
          VFD    24/0,18/13,18/11 TC=12 - CDC 711-10
          VFD    24/0,18/13,18/11 TC=13 - CDC 714-10/20 
          VFD    24/0,18/14,18/14 TC=14 - HASP (PRE PRINT)
          VFD    24/0,18/15,18/10 TC=15 - CDC 731-12, 732-12, 734 
          VFD    24/0,18/16,18/16 TC=16 - IBM 2780
          VFD    24/0,18/17,18/17 TC=17 - IBM 3780
          LOC    *O 
 TMPV     SPACE  4,10 
**        TMPV - TABLE OF TERMINAL DEFINITIONS MULTI VALUE NUMBERS. 
* 
*T        6/VT,6/VM,12/0,6/ET,12/FN,18/AD 
* 
*         VT = PARAMETER VALUE TYPE.
*         VM = VALIDATION MASK. 
*         ET = END OF TABLE FLAG. 
*         FN = FIELD NUMBER.
*         AD = ADDRESS OF EQUIVALENCE TABLE.
*              IF 0, EXPECTING A DECIMAL NUMBER.
*              IF -1, EXPECTING A CHARACTER ARGUMENT. 
* 
*         ENTRIES IN THE *TPMV* AND *TFVM* TABLES MUST BE IN THE
*         SAME ORDER. 
  
  
 TMPV     BSS    1
 DLMV     VFD    6/1LC,6/1B,12/0,6/0,12/C1FN,18/0       *DL*
          VFD    6/1LC,6/2B,12/0,6/0,12/C2FN,18/0 
          VFD    6/1LX,6/4B,12/0,6/0,12/XHFN,18/-1
          VFD    6/1LT,6/10B,12/0,6/-1,12/TOFN,18/TOEC
 XLMV     VFD    6/1LC,6/1B,12/0,6/0,12/C1FN,18/0       *XL*
          VFD    6/1LC,6/2B,12/0,6/0,12/C2FN,18/0 
          VFD    6/1LX,6/4B,12/0,6/0,12/XHFN,18/-1
          VFD    6/1LT,6/10B,12/0,6/0,12/TOFN,18/TOEC 
          VFD    6/1LY,6/20B,12/0,6/-1,12/YHFN,18/-1
 ELMV     VFD    6/1LX,6/1B,12/0,6/0,12/XLFN,18/-1      *EL*
          VFD    6/1LE,6/1B,12/0,6/0,12/ELFN,18/ELEC
          VFD    6/0,6/2B,12/0,6/-1,12/CLFN,18/XXEC 
 EBMV     VFD    6/1LX,6/1B,12/0,6/0,12/XBFN,18/-1      *EB*
          VFD    6/1LE,6/1B,12/0,6/0,12/EBFN,18/ELEC
          VFD    6/0,6/2B,12/0,6/-1,12/CBFN,18/XXEC 
          CON    0           END OF TABLE 
 TMPL     EQU    *-TMPV 
 TTFN     SPACE  4,10 
          SPACE  4
*         COMMON DECKS. 
  
*CALL     COMCCIO 
*CALL     COMCDXB 
*CALL     COMCHXB 
*CALL     COMCLFM 
*CALL     COMCSYS 
*CALL     COMCUSB 
*CALL     COMCWTW 
*CALL     COMTVDT 
          SPACE  4
          USE    BUFFERS
          SPACE  4
*         BUFFERS.
  
 CBUF     DATA   0016B       CONTROL BYTE PARAMETER STRING BUFFER 
          BSSZ   CBUFL
 DBUF     DATA   0010B       CONTROL BYTE PARAMETER STRING BUFFER 
          BSSZ   DBUFL
          SPACE  4,5
*         FIELD VALUE EQUIVALENCED CODES. 
*         ENTRIES IN THESE TABLES ARE ORDER DEPENDENT.
  
 INEC     CON    2LKB        INPUT DEVICE CODES 
          CON    2LPT 
          CON    2LXP 
          CON    2LXK 
          CON    2LBK 
          CON    1LX
          CON    0
  
 OPEC     CON    2LPR        OUTPUT DEVICE CODES
          CON    2LDI 
          CON    2LPT 
          CON    0
  
 PAEC     CON    1LZ         PARITY SELECTION CODES 
          CON    1LO
          CON    1LE
          CON    1LN
          CON    1LI
          VFD    42/1LM,18/1
          CON    0
  
 PEEC     CON    4LZERO      PARITY SELECTION CODES (CDCNET)
          CON    4LMARK 
          CON    4LEVEN 
          CON    3LODD
          CON    4LNONE 
          CON    0
  
 NYEC     CON    1LN         EQUIVALENCE CODES FOR XX=N OR XX=Y 
          CON    1LY
          CON    0
  
 BOOL     CON    2LNO        BOOLEAN VALUE CODES
          CON    3LYES
          CON    5LFALSE
          CON    4LTRUE 
          CON    3LOFF
          CON    2LON 
          CON    0
  
 IEEC     VSS    N,NORMAL,S       INPUT EDITING MODE CODES
          VSS    T,TRANSPARENT
          CON    0
  
 IOEC     VSS    U,UNSOLICITED,S  OUTPUT EDITING MODE CODES 
          VSS    S,SOLICITED
          VSS    F,FULLDUPLEX 
          CON    0
  
 RAEC     VSS    S,SEND,S         RESPONSE ACTION CODES 
          VSS    D,DISCARD
          CON    0
  
 SAEC     VSS    S,SEND,S         STATUS ACTION CODES 
          VSS    H,HOLD 
          VSS    D,DISCARD
          CON    0
  
 TCEC     VSS    N,NONE,S         TRANSPARENT CHARACTER MODE CODES
          VSS    T,TERMINATE
          VSS    F,FORWARD
          VSS    FT 
          VFD    42/0LFORWARD,6/65B,12/0LTE 
          VFD    60/0LRMINATE 
          CON    0
  
 TLEC     VSS    N,NONE,S         TRANSPARENT LENGTH MODE CODES 
          VSS    T,TERMINATE
          VSS    F,FORWARD
          VSS    FE 
          VFD    42/0LFORWARD,6/65B,12/0LEX 
          VFD    60/0LACT 
          CON    0
  
 TMEC     VSS    N,NONE,S         TRANSPARENT TIMEOUT MODE CODES
          VSS    T,TERMINATE
          VSS    F,FORWARD
          CON    0
  
 ELEC     CON    2L          NOT *EB* OR *EL* 
          CON    2LEL        *EL* 
          CON    2LEB        *EB* 
          CON    0
  
 TOEC     CON    2L          NOT *TO* 
          CON    2LTO        *TO* 
          CON    0
  
 XXEC     CON    2LNO        *NO* 
          CON    2LCR        *CR* 
          CON    2LLF        *LF* 
          CON    2LCL        *CL* 
          CON    0
  
 CSEC     CON    5LASCII     CODE SET CODES 
          CON    5LBPAPL
          CON    5LTPAPL
          CON    0
  
 EBEC     VFD    60/4LNONE   END BLOCK POSITIONING CODES
          VFD    60/3LCRS 
          VFD    60/3LLFS 
          VFD    60/6LCRSLFS
          VFD    60/0 
  
 EPEC     CON    4LNONE      END PAGE ACTION CODES
          CON    3LFFS
          CON    0
  
 FLEC     VFD    60/3LOFF    FOLD LINE CODES
          VFD    60/2LON
          VFD    60/0 
  
          SPACE  4,5
 TMES     DATA   C* TRMDEF REQUIRES JOB TO BE ON-LINE.* 
 TMESL    EQU    *-TMES 
          CON    0
  
 OBUF     EQU    *
 TTPV     SPACE  4,10 
*         TABLE OF TERMINAL DEFINITION PARAMETER VALUES.
* 
*T        6/WORD COUNT OF ENTERED VALUE, 36/0, 18/INDEX INTO TABLES.
*T        60/ENTERED VALUE. 
*T               .
*T               .
*T        60/ENTERED VALUE. 
* 
*         ENTRIES ARE IN THE ORDER SPECIFIED ON THE COMMAND.
*         NO ENTRY IS MADE FOR THE *L* PARAMETER. 
  
 TTPV     EQU    OBUF+OBUFL 
          SPACE  4
 RFL=     EQU    TTPV+TTPVL 
 ARG=     EQU    0
          END 
