*DECK NDLNFCM 
USETEXT NDLDATT 
USETEXT NDLER2T 
USETEXT NDLFETT 
USETEXT NDLNCFT 
USETEXT NDLPS2T 
USETEXT NDLTBLT 
      PROC NDLNFCM; 
      BEGIN 
*IF,DEF,IMS 
# 
**    NDL$COM - CHECKS COMMUNICATION ELEMENT STATEMENTS 
* 
*     D.K. ENDO    81/10/12 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROCEDURE TO CHECK A 
*     PARTICULAR COMMUNICATION ELEMENT STATEMENT. 
* 
*     PROC NDL$COM
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH STATEMENT TABLE
*       SELECT THE CASE THAT APPLIES, 
*         CASE 1 (LINE STMT): 
*           IF A LINE RECORD EXISTS,
*             WRITE LINE RECORD TO NCF. 
*           IF A LINE CONFIG ENTRY EXISTS,
*             IF THE LINE IS AN X.25 LINE,
*               PUT PVC COUNT IN LINE CONFIG ENTRY. 
*             WRITE ENTRY TO LINE CONFIG FILE.
*           CALL PROC THAT CHECK LINE AND GROUP STATEMENTS. 
*         CASE 2 (TERMINAL STMT): 
*           CALL PROCEDURE THAT CHECKS TERMINAL STMTS.
*         CASE 3 (DEVICE STMT): 
*           CALL PROCEDURE THAT CHECKS DEVICE STMTS.
*         CASE 4 (TRUNK STMT):  
*           CALL PROCEDURE THAT CHECKS TRUNK STMTS. 
*         CASE 5 (NETWORK ELEMENT STMT OR EOF): 
*           IF A LINE RECORD EXISTS,
*             WRITE LINE RECORD TO NCF. 
*           IF A LINE CONFIG ENTRY EXISTS,
*             IF LINE IS AN X.25 LINE,
*               PUT PVC COUNT IN LINE ENTRY.
*             WRITE ENTRY TO LINE CONFIG FILE.
*           EXIT NDL$COM. 
* 
# 
*ENDIF
# 
****  PROC NDLNFCM - XREF LIST BEGIN. 
# 
      XREF
        BEGIN 
        PROC LFGCKSM;        # CALCULATES CHECK SUM OF GIVEN TABLE     #
        PROC SSTATS;         # ALLOCATES MORE TABLE SPACE ON REQUEST   #
        PROC READW;          # READS GIVEN NUM OF WORD FROM FILE       #
        PROC NDLTRNK;        # PROCESSES TRUNK STATEMENT ENTRY         #
        PROC NDLEM2;                   #  PASS 2 ERROR MESSAGE.        #
        PROC NDLWLCR;        # WRITES LINE CONFIGURE INFO TO FILE      #
        PROC NDLWNCF;        # WRITES TABLES/RECORDS TO NCF            #
        END 
# 
****
# 
      DEF CON$MX$M4A # 1 #;  # MAX NUMBER OC CONSOLES FOR M4A DEV      #
      DEF CR$MAX$M4A # 1 #;  # MAXIMUM NUMBER OF CR-S FOR M4A DEVICES  #
      DEF DEV$MX$M4A # 3 #;  # MAXIMUM NUMBER OF M4A DEVICES ALLOWED   #
      DEF DT7$MX$M4A # 3 #;  # MAXIMUM NUMBER OF USER DT-S FOR M4A     #
      DEF LP$MAX$M4A # 1 #;  # MAXIMUM NUMBER OF LP-S FOR M4A DEVICES  #
      DEF SYNAUTO # 6 #;     # NUMERIC VALUE FOR SYNAUTO TIPTYPE       #
      DEF USR$WID1 # 255 #;  # UPPER LIMIT OF FVAL ALLOWD BY A BYTE    #
      DEF USR$WID2 #  65535 #;  # UPPER LIMIT OF FVAL ALLOWE BY TWO    #
      DEF MPW$2780$LP  # 50 #;  # MINIMUM PAGE WIDTH FOR LP OF 2780    #
      DEF MXPW$2780$LP # 150 #; # MAXIMUM PAGE WIDTH FOR LP OF 2780    #
      STATUS NUM ERR,           # ERROR MODE FOR NUMBER                #
                 DEC,           # DECIMAL                              #
                 HEX;           # HEXIDECIMAL                          #
                               # BYTES                                 #
      STATUS CSET UNKNOWN,   # STATUS LIST FOR CODE SET                #
                  BCD,
                  ASCII,
                  APLTP,
                  APLBP,
                  EBCD, 
                  EBCDAPL,
                  CORRES, 
                  CORAPL, 
                  EBCDIC, 
                  ,,,,, 
                  USER; 
      STATUS CTYP SVC,       # STATUS LIST FOR CIRCUIT TYPE            #
                  PVC,
                  UNKNOWN;
      STATUS DT UNKNOWN,     # STATUS LIST FOR DEVICE TYPE             #
                CON,
                CR, 
                LP, 
                CP, 
                PL, 
                AP, 
                USER; 
      STATUS FN              UNKNOWN   , AL      , #  0 # 
                             LSPEED    , RCOUNT  ,
                             FRAME     ,         ,
                             PVC       , DCE     ,
                             PSN       ,         ,
                             SVC       , LCN     , # 10 # 
                             RTIME     ,         ,
                             DFL       , PL$W    ,
                             DTEA      , IMD     ,
                             RC        ,         ,
                             HN        ,         , # 20 # 
                             AUTOCON   , PRI     ,
                             UBL       , UBZ     ,
                             ABL       , DBL     ,
                             DBZ$MSB   , DBZ$LSB ,
                             XBZ$MSB   , XBZ$LSB , # 30 # 
                             LK        ,         ,
                             TC        , PW      ,
                             PL        , PG      ,
                             CN        , BS      ,
                             CT        , AB      , # 40 # 
                             B1        , B2      ,
                             CI        , LI      ,
                                       ,         ,
                             SE        , EP      ,
                             PA        , BR      , # 50 # 
                             CSET      , IN      ,
                             OP        , FA      ,
                                       , DLC$MSB ,
                             DLC$LSB   , DLX     ,
                             DLTO      , ELX     , # 60 # 
                             ELO       , ELR     ,
                             EBX       , EBO     ,
                             EBR       , IC      ,
                             OC        , XLY     ,
                                       , CP      , # 70 # 
                             W         , CTYP    ,
                             NCIR      , NEN     ,
                             SDT       , RIC     ,
                             BCF       , MREC    ,
                             DO$       ,         , # 80 # 
                                       ,         ,
                                       ,         ,
                                       ,         ,
                             COLLECT   ,         ,
                             P90       , P91     , # 90 # 
                             P92       , P93     ,
                             P94       , P95     ,
                             P96       , P97     ,
                             P98       , P99     ,
                                       ,         , # 100 #
                             MC        ,         ,
                                       ,         ,
                                       ,         ,
                                       ,         ,
                                       , EOF     , # 110 #
                             PAD       ,         ,
                                       ,         ,
                                       ,         ,
                                       ,         ,
                                       ,         , # 120 #
                                       ,         ,
                                       ,         ,
                                       ,         ,
                                       ,         ,
                                       ,         , # 130 #
                                       ,         ,
                                       ,         ,
                                       ,         ,
                                       ,         ,
                                       ,         , # 140 #
                                       ,         ,
                                       , RTS     ,
                                       , MCI     ,
                             MLI       ;
      STATUS LSPD UNKNOWN,   # STATUS LIST FOR LINE SPEED              #
                  $110, 
                  $134, 
                  $150, 
                  $300, 
                  $600, 
                  $1200,
                  $2400,
                  $4800,
                  $9600,
                  $19200, 
                  $38400; 
      STATUS STIP UNKNOWN,   # STATUS LIST FOR SUB-TIP                 #
                  M4A,
                  M4C,
                  $2741,
                  N2741,
                  POST, 
                  PRE,
                  PAD,
                  USER, 
                  XAA,
                  $2780,
                  $3780;
      STATUS TC   UNKNOWN,   # STATUS LIST FOR TERMINAL CLASS          #
                  M33,
                  $713, 
                  $721, 
                  $2741,
                  M40,
                  H2000,
                  $751, 
                  T4014,
                  HASP, 
                  $200UT, 
                  $714X,
                  $711, 
                  $714, 
                  HPRE, 
                  $734, 
                  $2780,
                  $3780,
                  $752, 
                  X364, 
                  $3270,
                  USER; 
      STATUS TIP  UNKNOWN,   # UNKNOWN #
                  ASYNC  ,
                  MODE4  ,
                  HASP   ,
                  X25    ,
                  BSC    ,
                  $3270  ,
                  USER   ;
      ITEM AUTO$REC B;       # FLAG SET IF AUTO OR XAUTO REC LINE      #
      ITEM XAUTO$REC B;      # FLAG SET IF XAUTO REC LINE              #
      ITEM BCF$FLAG B;       # BCF INDICATOR                           #
      ITEM CA$MAP;           # BIT MAP USED TO CHECK UNIQUENESS OF CA  #
      ITEM CKSUM;            # TEMPORARY FOR CHECK SUM VALUE           #
      ITEM COLLECT$FLAG B;
      ITEM COLLECT$USED B;
      ITEM COM$ELMT B;       # INDICATES STAT ENTRY IS A COMMUNIC ELEMT#
      ITEM CP$PL$MAP;        # USED TO CHECK FOR DUPLICATE STREAM      #
      ITEM CRNT$CSET;        # CURRENT CODE SET                        #
      ITEM CRNT$CTYP;        # CURRENT CIRCUIT TYPE                    #
      ITEM CTYP$USED B;      # BOOLEAN TO SEE IF CTYP IS USED          #
      ITEM W$USED B;         # BOOLEAN TO SEE IF W IS USED             #
      ITEM NCIR$USED B;      # BOOLEAN TO SEE IF NCIR USED             #
      ITEM NEN$USED B;       # BOOLEAN TO SEE IF NEN IS USED           #
      ITEM CRNT$DEV;         # POINTER TO CURRENT DEVICE ENTRY         #
      ITEM CRNT$LSPD;        # CURRENT LINE SPEED                      #
      ITEM CRNT$MREC;        # CURRENT MREC VALUE                      #
      ITEM CRNT$NCIR;        # CURRENT NUMBER OF CIRCUITS              #
      ITEM CRNT$EOF B;       # CURRENT EOF FLAG ON TERMINAL STATEMENT  #
      ITEM EOF$USED B;       # FLAG TO SHOW IF EOF IS SPECIFIED        #
      ITEM CRNT$NEN;         # CURRENT NUMBER OF CIRCUITS ENABLED      #
      ITEM CRNT$STIP;        # CURRENT SUB-TIP                         #
      ITEM CRNT$TC;          # CURRENT TERMINAL CLASS                  #
      ITEM CRNT$TERM;        # POINTER TO CURRENT TERMINAL IN LINE REC #
      ITEM CRNT$TIP;         # CURRENT TIPTYPE                         #
      ITEM CRNT$TSPD;        # CURRENT TSPEED VALUE                    #
      ITEM CRNT$W;           # CURRENT -W- VALUE                       #
      ITEM CRNT$DEPAD;       # NUMBER OF 8-BIT PAD ENTRIES FOR DEVICE  #
      ITEM CRNT$DEPADW;      # NUMBER OF WORDS NEEDED FOR PAD ENTRIES  #
      ITEM DEVCNT;           # CRNT NUMBER OF DEVICES DEFINED ON TERM  #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM LCR$EXIST B;      # INDICATES LINE CONFIGURE RECORD EXISTS  #
      ITEM LENGTH;           # LENGTH OF RECORD/TABLE TO BE WRITTEN    #
      ITEM LR$EXIST B;       # INDICATES A LINE RECORD EXISTS          #
      ITEM LTYPE C(10);      # CURRENT LINE TYPE CATEGORY              #
      ITEM MAXDEV;           # MAXIMUM NUMBER DEV STMTS FOR THIS TERM  #
      ITEM MAXTERM;          # MAXIMUM NUMBER OF TERM STMTS FOR LINE   #
      ITEM NSVCERR B;        # FLAG SET IF NSVC VALUE IS IN ERROR      #
      ITEM NWDS16;           # NUMBER OF 16 BIT WORDS                  #
      ITEM PVC$CNT;          # PVC COUNT                               #
      ITEM RIC$FLAG B;       # RESTRICTED INTERACTIVE CAPABILITY FLAG  #
      ITEM SVC$CNT;          # NSVC PARAMETER VALUE                    #
      ITEM XTERMASK;         # MASK FOR TERMINALS PER X.25 STIP        #
      ITEM SVC$SPEC B;       # SVC SPECIFIED FLAG                      #
      ITEM TA$MAP;           # BIT MAP USED TO CHECK UNIQUENESS OF TA  #
      ITEM TERMCNT;          # CRNT NUMBER OF TERMINALS DEFINED ON LINE#
      ITEM TT$USED B;        # TIPTYPE SPECIFIED FLAG                  #
      ITEM VALUE;            # INTEGER TEMPORARY                       #
      ARRAY CRNT$PADVAL [1:MAXPADW] S(1); 
        BEGIN                # PAD VALUE ARRAY FOR TERMINAL            #
        ITEM CRNT$PAD (0,0,60); 
        END 
      DEF MXDT # 7 #;        # MAXIMUM DEVICE TYPE                     #
      ARRAY DO$USED$MAP [1:MXDT] S(1);
        BEGIN 
        ITEM DO$MAP (0,0,60); 
        END 
      ARRAY DT$COUNT$TAB [1:MXDT] S(2);  # DEVICE TYPE COUNT TABLE     #
        BEGIN 
        ITEM DT$CNT (0,0,60);# DEVICE TYPE COUNT                       #
        ITEM DT$MAX (1,0,60);# MAXIMUM NUMBER OF DT ALLOWED            #
        END 
      ARRAY FIRST$DT$TAB [1:MXDT] S(1); 
        BEGIN 
        ITEM FIRST$DT B(0,0,60);       # INDICATES IF 1ST DT IS SENSED #
        END 
      DEF MXTIP # 8 #;       # MAXIMUM NUMBER OF TIPTYPE-S             #
      ARRAY TERMDEV$CNT [0:MXTIP] S(9); 
        BEGIN 
        ITEM TRM$MAX (0,0,60) = [255,  # UNKNOWN                       #
                                   1,  # ASYNC                         #
                                  16,  # MODE4                         #
                                   1,  # HASP                          #
                                 255,  # X25                           #
                                   1,  # BSC                           #
                                  32,  # 3270                          #
                                 255   # USER                          #
                           ]; 
        ITEM DEV$MAX (1,0,60) = [255,  # UNKNOWN                       #
                                   1,  # ASYNC                         #
                                  15,  # MODE4 (M4C)                   #
                                  22,  # HASP                          #
                                   1,  # X25                           #
                                   4,  # BSC                           #
                                  32,  # 3270                          #
                                 255   # USER                          #
                                ];
        ITEM LP$MAX (2,0,60) = [255,   # UNKNOWN                       #
                                  0,   # ASYNC                         #
                                 15,   # MODE4 (M4C)                   #
                                  7,   # HASP                          #
                                  0,   # X25                           #
                                  1,   # BSC                           #
                                 31,   # 3270                          #
                                255,   # USER                          #
                               ]; 
        ITEM CR$MAX (3,0,60) = [255,   # UNKNOWN                       #
                                  0,   # ASYNC                         #
                                  1,   # MODE4 (M4C)                   #
                                  7,   # HASP                          #
                                  0,   # X25                           #
                                  1,   # BSC                           #
                                  0,   # 3270                          #
                                255    # USER                          #
                               ]; 
        ITEM CP$MAX (4,0,60) = [255,   # UNKNOWN                       #
                                  0,   # ASYNC                         #
                                  0,   # MODE4                         #
                                  7,   # HASP                          #
                                  0,   # X25                           #
                                  1,   # BSC                           #
                                  0,   # 3270                          #
                                255    # USER                          #
                               ]; 
        ITEM PL$MAX (5,0,60) = [255,   # UNKNOWN                       #
                                  0,   # ASYNC                         #
                                  0,   # MODE4                         #
                                  7,   # HASP                          #
                                  0,   # X25                           #
                                  0,   # BSC                           #
                                  0,   # 3270                          #
                                255    # USER                          #
                               ]; 
        ITEM DT7$MAX (6,0,60) = [255,  # UNKNOWN                       #
                                   1,  # ASYNC                         #
                                  15,  # MODE4 (M4C)                   #
                                  22,  # HASP                          #
                                   1,  # X25                           #
                                   4,  # BSC                           #
                                  32,  # 3270                          #
                                 255   # USER                          #
                                ];
        ITEM CON$MAX (7,0,60) = [255,  # UNKNOWN                       #
                                   1,  # ASYNC                         #
                                  15,  # MODE4 (M4C)                   #
                                   1,  # HASP                          #
                                   1,  # X25                           #
                                   1,  # BSC                           #
                                  32,  # 3270                          #
                                 255   # USER                          #
                                ];
        ITEM AP$MAX (8,0,60) =  [255,  # UNKNOWN                       #
                                   0,  # ASYNC                         #
                                   0,  # MODE 4 (M4C)                  #
                                   0,  # HASP                          #
                                 255,  # X25                           #
                                   0,  # BSC                           #
                                   0,  # 3270                          #
                                 255   # USER                          #
                                 ]; 
        END 
      ARRAY STRM$USED$MP [1:MXDT] S(1); 
        BEGIN 
        ITEM STRM$MAP (0,0,60); 
        END 
      SWITCH COMJUMP           , # UNKNOWN  # 
                               , # NFILE    # 
                      NET$ELMT , # NPU      # 
                               , # SUPLINK  # 
                               , # COUPLER  # 
                               , # LOGLINK  # 
                      LINE     , # GROUP    # 
                      LINE     , # LINE     # 
                               , #          # 
                      TERMINAL$, # TERMINAL # 
                      DEVICE   , # DEVICE   # 
                      TRUNK    ; # TRUNK    # 
      CONTROL EJECT;
      PROC C$USR$PRM1(PARAM$USED,CLR$WRD);
*IF,DEF,IMS 
# 
**
* 
*     C$USR$PRM1 - CHECKS IF A USER DEFINED TIPTYPE PARAMETER IS
*                  MISSING. 
* 
*     Y. C. YIP    82/10/19 
* 
*     THIS PROCEDURE CHECKS IF A PARAMETER IS NOT SPECIFIED AND 
*     IF SO, A WARNING MESSAGE IS GENERATED. APPLIES ONLY FOR 
*     USER DEFINED TIPTYPE PARAMETERS.
* 
*     ENTRY      PARAM$USED - FLAG TRUE IF PARAMETER IS USED
*                             FALSE OTHERWISE.
*                CLR$WRD    - ARRAY OF 10 CHARACTERS WHICH IS THE 
*                             NAME OF THE KEYWORD REQUIRED. 
* 
*     EXIT       ALL PARAMETERS ARE UNCHANGED.
* 
*     METHOD
* 
*     THE FIRST PARAMETER, PARAM$USED IS CHECKED AND IF IT IS TRUE
*     THEN A WARNING IS GENERATED BY CALLING NDLEM2 USING THE SECOND
*     PARAMETER WHICH IS THE NAME OF THE KEYWORD AS THE CLARIFIER.
* 
*E
# 
*ENDIF
      BEGIN 
      ITEM PARAM$USED B;        # PARAMETER USED OR NOT                #
      ITEM CLR$WRD C(10);       # CLARIFIER WORD                       #
      IF NOT PARAM$USED         # IF PASRAMETER NOT USED               #
      THEN
        BEGIN 
        NDLEM2(ERR161,STLNUM[0],CLR$WRD); # GENERATE WARNING 161       #
        END 
      END # END OF PROC C$USR$PRM1 #
  
      CONTROL EJECT;
      PROC C$USR$PRM2(PARAM$VAL,CLR$WRD); 
*IF,DEF,IMS 
# 
**
* 
*     C$USR$PRM2 - CHECKS A USER DEFINED TIPTYPE PARAMETER IS MISSING 
* 
*     Y. C. YIP    82/10/20 
* 
*     THIS PROCEDURE CHECKS IF A PARAMETER IS SPECIFIED BY
*     THE VALUE OF THE FIRST PARAMETER. IF IT IS NOT SPECIFIED
*     A WARNING IS GENERATED TO THE USER. IT APPLIES ONLY FOR 
*     USER DEFINED TIPTYPE PARAMETERS.
* 
*     ENTRY      PARAM$VAL - VALUE OF THE PARAMETER BEING CHECKED.
*                CLR$WRD   - ARRAY OF 10 CHARACTERS WHICH IS THE
*                            NAME OF THE KEYWORD CHECKED. 
* 
*     EXIT       ALL PARAMETERS REMAIN UNCHANGED. 
* 
*     METHOD
* 
*     THE VALUE OF PARAM$VAL IS CHECKED AND IF IT IS ZERO 
*     A WARNING IS GENERATED WITH THE SECOND PARAMETER WHICH IS 
*     THE NAME OF THE PARAMETER BEING CHECKED AS THE CLARIFIER. 
* 
*E
# 
*ENDIF
      BEGIN 
      ITEM PARAM$VAL ;                 # VALUE OF PARAMETER            #
      ITEM CLR$WRD C(10);              # CLARIFIER WORD                #
      IF PARAM$VAL EQ 0                # IF PARAMETER IS STILL ZERO    #
      THEN
        BEGIN 
        NDLEM2(ERR161,STLNUM[0],CLR$WRD); # GENERATE ERROR MESSAGE     #
        END 
      END # END OF PROC C$USR$PRM2 #
  
      CONTROL EJECT;
      PROC DEVPR; 
      BEGIN 
*IF,DEF,IMS 
# 
**    DEVPR - DEVICE STATEMENT PROC.
* 
*     D.K. ENDO    81/11/02 
* 
*     THIS PROCEDURE CHECKS THE -DT- PARAMETER, DEVICE STMT COUNT, AND
*     CALLS A PROC, BASED ON TIPTYPE, TO CHECK THE REMAINING PARAMETERS.
* 
*     PROC DEVPR
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     INITIALIZE FLAGS AND VALUES.
*     POINT TO NEXT DEVICE ENTRY. 
*     CLEAR FIXED PORTION OF ENTRY. 
*     INCREMENT DEVICE COUNT. 
*     IF LABEL IS O.K., 
*       PUT LABEL FROM STATEMENT TABLE INTO DEVICE ENTRY. 
*       IF GROUP COUNT IS GREATER THAN ZERO,
*       THEN, 
*         FOR EACH ITERATION UNTIL GROUP COUNT, 
*           PUT LABEL INTO DEVICE XREF TABLE FROM LABEL TABLE.
*       OTHERWISE,
*         PUT LABEL FROM STATEMENT TABLE INTO DEVICE XREF TABLE.
*         IF CTYP IS SVC
*           SET SVC IN DEVICE XREF ENTRY. 
*     IF DT WAS NOT SPECIFIED,
*     THEN, 
*    IF TIPTYPE IS X25 AND SUBTIPTYPE IS XAA
*         DEFAULT DT TO APPLICATION (AP)
*       ELSE
*         DEFAULT DT TO CONSOLE 
*         PUT DT VALUE INTO DEVICE ENTRY. 
*     OTHERWISE,
*       IF VALUE IS O.K., 
*         MAP NUMERIC VALUE FOR DT. 
*         IF TIPTYPE AND DT ARE NOT USER, 
*           IF TC IS NOT USER OR UNKNOWN, 
*           THEN, 
*             IF TC AND DT ARE NOT COMPATIBLE,
*               FLAG ERROR -- DT INVALID WITH TC SPECIFIED. 
*           OTHERWISE,
*             IF STIP IS NOT UNKNOWN, 
*             THEN, 
*               IF STIP AND DT ARE NOT COMPATIBLE,
*                 FLAG ERROR -- DT INVALID WITH STIP SPECIFIED. 
*             OTHERWISE,
*               IF TIPTYPE IS NOT UNKNOWN,
*                 IF TIPTYPE AND DT ARE NOT COMPATIBLE, 
*                   FLAG ERROR -- DT INVALID WITH TIPTYPE SPECIFIED.
*     IF DEVICE STATEMENT COUNT IS GREATER THAN MAXIMUM,
*       FLAG ERROR -- MAXIMUM DEVICE STATEMENTS EXCEEDED. 
*     IF TIPTYPE IS NOT USER OR UNKNOWN AND 
*         DT IS USER OR UNKNOWN,
*     THEN, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(ASYNC):  
*           CHECK ASYNC DEVICE STATEMENT. 
*         CASE 2(MODE4):  
*           CHECK MODE4 DEVICE STATEMENT. 
*         CASE 3(HASP): 
*           CHECK HASP DEVICE STATEMENT.
*         CASE 4(X25):  
*           CHECK X25 DEVICE STATEMENT. 
*         CASE 5(BSC):  
*           CHECK BSC DEVICE STATEMENT. 
*     OTHERWISE,
*       CHECK USER DEVICE STATEMENT.
*     IF TIPTYPE IS NOT USER AND DT IS CONSOLE, 
*       IF HN WAS NOT SPECIFIED,
*         AND THE HOST NAMES OF ALL LOGICAL LINKS TERMINATING 
*         AT THE SAME NPU ARE THE SAME
*         THEN, 
*           DEFAULT HN VALUE TO HOST I.D. OF LOGLINK OF THE LAST ENTRY
*           OF THE LOGICAL NAME TABLE 
*           IF AUTOCON WAS NOT SPECIFIED, 
*             DEFAULT AUTOCON TO YES
*         OTHERWISE,
*           IF AUTOCON IS -YES-,
*             FLAG ERROR -- REQUIRED PARAMETER MISSING(HN). 
*     PUT RIC VALUE INTO DEVICE ENTRY.
*     PUT WORD COUNT FOR DEVICE ENTRY.
*     INCREMENT WORD COUNT FOR TERMINAL ENTRY.
* 
# 
*ENDIF
# 
****  PROC DEVPR - XREF LIST BEGINS 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKE ENTRY IN PASS 2 ERROR FILE         #
        FUNC XCHD C(10);     # CONVERTS HEX VALUE TO DISPLAY CODE      #
        END 
# 
****
# 
      DEF MXDVENT # 14 #;    # MAXIMUM WORD SIZE FOR DEVICE ENTRY      #
      DEF SDT$12 # 12 #;     # STARTING USER VALUE FOR SDT             #
      DEF SDT$13 # 13 #;     # INTERNAL VALUE FOR SDT13                #
      DEF SDT$14 # 14 #;     # INTERNAL VALUE FOR SDT14                #
      DEF SDT$15 # 15 #;     # ENDING USER VALUE FOR SDT               #
      DEF FIRST$POS # 24 #;  # FIRST POSITION FOR FNFV PAIR            #
      DEF NO$MATCH # -1 #;   # VALUE FOR SAVE$ENTRY IF NO MATCH FOUND  #
      STATUS CC    UNKNOWN,  # STATUS LIST OF CONTROL CHARACTERISTICS  #
                   AB,
                   CN,
                   B1,
                   B2,
                   CT,
                   BS,
                   ELX, 
                   EBX; 
      ITEM ABL$USED B;
      ITEM AUTOCON$FLAG B;
      ITEM AUTOCON$NO B;
      ITEM BIT$POS; 
      ITEM CRNT$DT; 
      ITEM DBL$USED B;
      ITEM DBZ$USED B;
      ITEM DO$USED B; 
      ITEM HN$USED B; 
      ITEM PL$USED B; 
      ITEM I; 
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM LL$CNT;
      ITEM LLT$PNTR;
      ITEM PWI, PDI;         # PAD WORD INDX., PAD WORD DISPL. INDX.   #
      ITEM STREAM$USED B; 
      ITEM TA$USED B; 
      ITEM UBL$USED B;
      ITEM UBZ$USED B;
      ITEM XBZ$USED B;
      STATUS X$D$GROUP NO,XG,DG; # STATUS VARIABLE FOR XL'S AND DL'S   #
      ITEM GR$SET S: X$D$GROUP;  # STATUS ITEM OF TYPE X$D$GROUP       #
      ITEM SAVE$ENTRY;       # USED FOR COMPARING HOST NAMES IN        #
                             # LLT$TABLE                               #
                             # SET TO 0 IF NO MATCH FOUND 
                                   TO INDEX OF LLT$TABLE ENTRY AT LAST
                                      COMPARISON. 
                                   OR TO -1 IF A MISMATCH IS FOUND     #
      DEF MAXCC # 8 #;
      ARRAY CRNT$CC$TAB[1:MAXCC] S(1);
        BEGIN 
        ITEM CRNT$CC (0,0,60);
        END 
      DEF MXDT # 7 #;        # MAXIMUM NUMBER OF DEVICE TYPES          #
      ARRAY DT$TABLE [1:MXDT] S(1); 
        BEGIN 
        ITEM DTNAME C(0,0,7) = ["CON", # DT CHARACTER VALUES           #
                                "CR", 
                                "LP", 
                                "CP", 
                                "PL", 
                                "AP", 
                                "DT12"
                               ]; 
        ITEM DT$NUMV I(0,42,09) = [0,       # CONSOLE -- INTEGER VALUE #
                                   1,       # CARD READER              #
                                   2,       # LINE PRINTER             #
                                   3,       # CARD PUNCH               #
                                   4,       # PLOTTER                  #
                                   6,       # A-A DEVICE               #
                                  12        # USER DT12                #
                                  ];
        ITEM DT$STAT (0,51,09) = [DT"CON",  # CONSOLE -- STATUS VALUE  #
                                  DT"CR",   # CARD READER              #
                                  DT"LP",   # LINE PRINTER             #
                                  DT"CP",   # CARD PUNCH               #
                                  DT"PL",   # PLOTTER                  #
                                  DT"AP",   # A TO A DEVICE TYPE       #
                                  DT"USER"  # USER                     #
                                 ]; 
        END 
      ARRAY TC$ALLOWED [1:MXDT] S(1);  # BIT MAP FOR TC SUPPORTING DT  #
        BEGIN 
        ITEM DT$TC$MAP U(0,0,30) = [O"3777777000",  # CONSOLE          #
                                    O"0006170000",  # CARD READER      #
                                    O"0007371000",  # LINE PRINTER     #
                                    O"0004130000",  # CARD PUNCH       #
                                    O"0004100000",  # PLOTTER          #
                                    0,              # A-A (NA)         #
                                   ]; 
        END 
      ARRAY STIP$ALLOWED [1:MXDT] S(1);# MAP FOR STIP SUPPORTING DT    #
        BEGIN 
        ITEM DT$STIP$MAP U(0,0,30) = [O"3777000000",  # CONSOLE        #
                                      O"2143000000",  # CARD READER    #
                                      O"3143000000",  # LINE PRINTER   #
                                      O"0143000000",  # CARD PUNCH     #
                                      O"0140000000",  # PLOTTER        #
                                      O"0004000000",  # A-A DEVICE     #
                                     ]; 
        END 
      ARRAY TIP$ALLOWED [1:MXDT] S(1); # MAP FOR TIP SUPPORTING DT     #
        BEGIN 
        ITEM DT$TIP$MAP U(0,0,30) = [O"3740000000",  # CONSOLE         #
                                     O"1500000000",  # CARD READER     #
                                     O"1540000000",  # LINE PRINTER    #
                                     O"0500000000",  # CARD PUNCH      #
                                     O"0400000000",  # PLOTTER         #
                                     O"0200000000",  # A-A DEVICE      #
                                    ];
        END 
      DEF MNKWID # 65 #;
      DEF MXKWID # 131 #; 
      ARRAY KWD$TABLE [MNKWID:MXKWID] S(1); 
        BEGIN 
        ITEM KWDNAME C(0,0,10) =  ["DT",
                                   "SDT", 
                                   "TA",
                                   "ABL", 
                                   "DBZ", 
                                   "UBZ", 
                                   "DBL", 
                                   "UBL", 
                                   "XBZ", 
                                   "DO",
                                   "STREAM",
                                   "HN",
                                       ,
                                   "AUTOCON", 
                                   "PRI", 
                                   "P90", 
                                   "P91", 
                                   "P92", 
                                   "P93", 
                                   "P94", 
                                   "P95", 
                                   "P96", 
                                   "P97", 
                                   "P98", 
                                   "P99", 
                                   "AB",
                                   "BR",
                                   "BS",
                                   "B1",
                                   "B2",
                                   "CI",
                                   "CN",
                                   "CT",
                                   "DLC", 
                                   "DLTO",
                                   "DLX", 
                                   "EP",
                                   "IN",
                                   "LI",
                                   "OP",
                                   "PA",
                                   "PG",
                                   "PL",
                                   "PW",
                                   "SE",
                                   "FA",
                                   "XLC", 
                                   "XLX", 
                                   "XLTO",
                                   "ELO", 
                                   "ELX", 
                                   "ELR", 
                                   "EBO", 
                                   "EBR", 
                                   "CP",
                                   "IC",
                                   "OC",
                                   "LK",
                                   "EBX", 
                                       ,
                                   "MC",
                                   "XLY", 
                                   "EOF", 
                                   "PAD", 
                                   "RTS", 
                                   "MCI", 
                                   "MLI"
                                  ];
        END 
      SWITCH DEVPJUMP   NEXT,          # UNKNOWN -- SWITCH BY TIPTYPE  #
                        ASYNC,         # ASYNC                         #
                        MODE4,         # MODE4                         #
                        HASP,          # HASP                          #
                        X25,           # X25                           #
                        BSC,           # BSC                           #
                        $3270,         # 3270                          #
                        NEXT;          # USER                          #
      CONTROL EJECT;
      PROC CHCONTRL(CHKWID,CHLNUM,STAT,VALUE);
      BEGIN 
*IF,DEF,IMS 
# 
**    CHCONTRL
*     Y. C. YIP 
*     THIS PROCEDURE CHECKS FOR CONTROL CHARACTERS AND ENSURE THAT
*     THE PARAMETER OF A DEVICE STATEMENT DOES NOT USE ANY SPECIAL
*     CHARACTER NOT ALLOWED BY THE TERMINAL ERS.
* 
*     ENTRY CONDITION:  
*                CHKWID=KEYWORD I.D.KEYWORD . 
*                CHLNUM=LINE NUMBER OF INPUT SOURCE 
*                STAT  = INPUT VALUE OF STATUS .
*                VALUE = VALUE OF KEYWORD.
*     EXIT CONDITION: 
*                CHKWID=UNCHANGED.
*                CHLNUM=LINE MUNBER OF SOURCE INPUT.
*                STAT= FALSE IF VALUE OVERLAPS WITH SOME
*                      VALUE DISALLOWED BY THE NDLP ERS.
*                VALUE = UNCHANGED. 
* 
# 
*ENDIF
  
      DEF MAXBAD # 5 # ;        # LENGTH OF ARRAY FOR CHECKING #
      DEF ILLE00 # X"0" # ;     # ILLEGAL CHARACTER 0 # 
      DEF ILLE01 # X"01" #;     # ILLEGAL CHARACTER CHAR 01 # 
      DEF ILLE02 # X"02" #;     # ILLEGAL CHARACTER 02 #
      DEF ILLE20 # X"20" #;     # ILLEGAL CHARACTER 20 #
      DEF ILLE30 # X"30" #;     # ILLEGAL CHARACTER 30 #
      DEF ILLE39 # X"39" #;     # ILLEGAL CHARACTER 39 #
      DEF ILLE3D # X"3D" #;     # ILLEGAL CHARACTER 3D #
      DEF ILLE41 # X"41" #;     # ILLEGAL CHARACTER 41 #
      DEF ILLE5A # X"5A" #;     # ILLEGAL CHARACTER 5A #
      DEF ILLE61 # X"61" #;     # ILLEGAL CHARACTER 61 #
      DEF ILLE7A # X"7A" #;     # ILLEGAL CHARACTER 7A #
      DEF ILLE7F # X"7F" #;     # ILLEGAL CHARACTER 7F #
      ITEM CHKWID;     # I. D. NUMBER OF THE KEYWORD #
      ITEM CHLNUM;     # LINE NUMBER OF CURRENT LINE  # 
      ITEM STAT B ;  # STATUS VARIABLE #
      ITEM VALUE ;   # VALUE OF KEYWORD  #
  
      ARRAY BAD$CHAR [0:MAXBAD] S(1);    # BAD CHAR LIST #
        BEGIN 
        ITEM BAD$LIST = [ILLE00,ILLE01,ILLE02,
                         ILLE20,ILLE3D,ILLE7F]; 
        END 
  
  
      ITEM INDEX1 ;    # LOOP INDEX  #
      IF NOT STAT      # IF OUT OF RANGE ALREADY #
      THEN
        BEGIN 
        RETURN; 
        END            # RETURN TO CALLING ROUTINE CONDEV # 
  
      FOR INDEX1=0 STEP 1 UNTIL MAXBAD
      DO
        BEGIN 
        IF VALUE EQ BAD$LIST[INDEX1]
        THEN                          # BAD CHAR MET #
          BEGIN 
          STAT = FALSE;               #  SET  STAT TO FALSE#
          END 
        END 
      IF ( VALUE GQ ILLE30 AND VALUE LQ ILLE39 )
       OR ( VALUE GQ ILLE41 AND VALUE LQ ILLE5A ) 
       OR ( VALUE GQ ILLE61 AND VALUE LQ ILLE7A ) 
  
      THEN                        # FALL INTO BAD RANGE ? # 
        BEGIN 
        STAT = FALSE;             # STAT SET TO FALSE # 
        END 
      IF NOT STAT                 # IF STATUS IS BAD #
      THEN
        BEGIN 
        NDLEM2(ERR158,CHLNUM,KWDNAME[CHKWID]); # GENERATE 
                                                ERROR MESSAGE # 
        END 
        RETURN ;                    # RETURN TO CALLING ROUTINE # 
      END                           # END OF PROC CHCONTRL   #
  
      CONTROL EJECT;
      PROC ASYDEV;
      BEGIN 
*IF,DEF,IMS 
# 
**    ASYDEV - CHECK ASYNC DEVICE PARAMRTERS. 
* 
*     D.K. ENDO    81/11/02 
* 
*     THIS PROCEDURE CHECKS PARAMETERS THAT ARE APPLICABLE TO ASYNC 
*     DEVICES.
* 
*     PROC ASYDEV 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     PUT DEFAULT CONTROL CHARACTER IN CC TABLE BASED ON STIP AND/OR TC.
*     FOR EACH VALUE DECLARATION IN ENTRY.
*       SELECT CASE THAT APPLIES: 
*         CASE 1(DI,P90 THRU P99, PRI,PW):  
*           CALL GENDEV TO CHECK GENERAL PARAMETER. 
*         CASE 2(HN,AUTOLOG,AUTOCON,AB,BR,BS,B1,B2,CI,CN,CT,
*                DLX,IN,LI,OP,PA,PL,SE,FA,XLC,XLX,LK,XLY):  
*           CALL CONDEV TO CHECK CONSOLE PARAMETER. 
*         CASE 3(ABL,DBZ,DBL,UBL,XBZ,UBZ):  
*           CALL FLOWDEV TO CHECK FLOW CONTROL PARAMETER. 
*         CASE 4(DLC,DLTO,EP,PG,XLTO,ELO,ELX,ELR,EBO,EBR,CP,IC,OC): 
*           IF STIP OR TC IS 2741,
*           THEN, 
*             CALL CONDEV TO CHECK PARAMETER. 
*           OTHERWISE,
*             FLAW ERROR -- PARAM INVALID FOR 2741 DEVICES. 
*         CASE 5(TA,DO,STREAM): 
*           FLAG ERROR -- PARAM INVALID FOR ASYNC DEVICES.
*         CASE 6 (SDT) :  
*           CHECK FOR SDT12-SDT15 AS VALID SDT NAMES ONLY AND 
*           CALL BTCHDEV PROCESSOR
*     IF ABL OR DBZ NOT SPECIFIED 
*       DEFAULT VALUE BY LSPEED.
*     IF DBL,UBL,OR XBZ WAS NOT SPECIFIED 
*       DEFAULT VALUE.
*     CHECK AL,CN,BS,B1,B2,CT FOR UNIQUENESS
*     IF NOT UNIQUE 
*       FLAG ERROR. 
* 
# 
*ENDIF
# 
****  PROC ASYDEV - XREF LIST BEGINS
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRIES IN PASS 2 ERROR FILE      #
        END 
# 
****
# 
      DEF UBL$DEF # 7 #;     # DEFAULT UBL VALUE                       #
      DEF UBZ$DEF # 1 #;     # DEFAULT UBZ VALUE FOR ASYCH TIPTYPE     #
      DEF DBL$DEF # 1 #;     # DEFAULT DBL VALUE FOR ASYCH TIPTYPE     #
      DEF PL$DEF # 64 #;     # DEFAULT PAGE LENGTH TO 64               #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM J;                # SCRATCH ITEM                            #
      ITEM VALUE;            # VALUE TEMPORARY                         #
      ARRAY CC$TABLE [0:1] S(2);       # CONTROL CHARACTERISTICS       #
        BEGIN 
        ITEM AB$DEF (00,00,09) = [X"18",    # N2741 -- DEFAULT AB      #
                                  X"28"     # 2741                     #
                                 ]; 
        ITEM CN$DEF (00,09,09) = [X"18",    # N2741 -- DEFAULT CN      #
                                  X"28"     # 2741                     #
                                 ]; 
        ITEM BS$DEF (00,18,09) = [X"08",    # N2741 -- DEFAULT BS      #
                                  X"08"     # 2741                     #
                                 ]; 
        ITEM B1$DEF (00,27,09) = [X"10",    # N2741 -- DEFAULT B1      #
                                  X"3A"     # 2741                     #
                                 ]; 
        ITEM B2$DEF (00,36,09) = [X"14",    # N2741 -- DEFAULT B2      #
                                  X"29"     # 2741                     #
                                 ]; 
        ITEM CT$DEF (00,45,09) = [X"1B",    # N2741 -- DEFAULT CT      #
                                  X"25"     # 2741                     #
                                 ]; 
        ITEM ELX$DEF (01,00,09) = [X"0D",    # N2741 -- DEFAULT EL     #
                                  -1        # 2741(N/A)                #
                                 ]; 
        ITEM EBX$DEF (01,00,09) = [X"04",    # N2741 -- DEFAULT EB     #
                                  -1        # 2741(N/A)                #
                                 ]; 
        END 
      DEF MXLSPD # 11 #;     # MAXIMUM NUMBER OF LINE SPEEDS           #
      ARRAY FLOW$TABLE [0:MXLSPD] S(2); 
        BEGIN 
        ITEM ABL$DEF (0,0,60) = [,1,   # 110 -- DEFAULT ABL            #
                                  1,   # 134                           #
                                  1,   # 150                           #
                                  1,   # 300                           #
                                  2,   # 600                           #
                                  2,   # 1200                          #
                                  2,   # 2400                          #
                                  2,   # 4800                          #
                                  2,   # 9600                          #
                                  3,   # 19200                         #
                                  3    # 38400                         #
                                 ]; 
        ITEM DBZ$DEF (1,0,60) = [,230, # 110 -- DEFAULT DBZ            #
                                  230, # 134                           #
                                  230, # 150                           #
                                  230, # 300                           #
                                  230, # 600                           #
                                  230, # 1200                          #
                                  230, # 2400                          #
                                  460, # 4800                          #
                                  940, # 9600                          #
                                  885, # 19200                         #
                                  885  # 38400                         #
                                 ]; 
        END 
      SWITCH ASYDJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , GEN$PARAM  , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  , NEXT$ASY   , #         , DT       ,#
                      SDT         , ILLEGAL    , # SDT     , TA       ,#
                      FLOW$PARAM  , FLOW$PARAM , # ABL     , DBZ      ,#
                      FLOW$PARAM  , FLOW$PARAM , # UBZ     , DBL      ,#
                      FLOW$PARAM  , FLOW$PARAM , # UBL     , XBZ      ,#
                      ILLEGAL     , ILLEGAL    , # DO      , STREAM   ,#
                      CON$PARAM   ,            , # HN      , AUTOLOG  ,#
                      CON$PARAM   , GEN$PARAM  , # AUTOCON , PRI      ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  , # P98     , P99      ,#
                      CON$PARAM   , CON$PARAM  , # AB      , BR       ,#
                      CON$PARAM   , CON$PARAM  , # BS      , B1       ,#
                      CON$PARAM   , CON$PARAM  , # B2      , CI       ,#
                      CON$PARAM   , CON$PARAM  , # CN      , CT       ,#
                      CON$PARAM   , N2741$PRM  , # DLC     , DLTO     ,#
                      CON$PARAM   , N2741$PRM  , # DLX     , EP       ,#
                      CON$PARAM   , CON$PARAM  , # IN      , LI       ,#
                      CON$PARAM   , CON$PARAM  , # OP      , PA       ,#
                      N2741$PRM   , CON$PARAM  , # PG      , PL       ,#
                      GEN$PARAM   , CON$PARAM  , # PW      , SE       ,#
                      CON$PARAM   , CON$PARAM  , # FA      , XLC      ,#
                      CON$PARAM   , N2741$PRM  , # XLX     , XLTO     ,#
                      N2741$PRM   , N2741$PRM  , # ELO     , ELX      ,#
                      N2741$PRM   , N2741$PRM  , # ELR     , EBO      ,#
                      N2741$PRM   , N2741$PRM  , # EBR     , CP       ,#
                      N2741$PRM   , N2741$PRM  , # IC      , OC       ,#
                      CON$PARAM   , N2741$PRM  , # LK      , EBX      ,#
                                  , GEN$PARAM  , #         , MC       ,#
                      CON$PARAM   ,            , # XLY     , EOF      ,#
                                  , N2741$PRM  , # PAD     , RTS      ,#
                      GEN$PARAM   , GEN$PARAM  ; # MCI     , MLI       #
      CONTROL EJECT;
#                                                                      #
#                            ASYDEV CODE BEGINS HERE                   #
#                                                                      #
      IF CRNT$STIP EQ STIP"$2741" OR   # IF STIP OR TC IS 2741         #
         CRNT$TC EQ TC"$2741" 
      THEN
        BEGIN                          # SET DEFAULT VALUES FOR 2741   #
        CRNT$CC[CC"AB"] = AB$DEF[1];
        CRNT$CC[CC"CN"] = CN$DEF[1];
        CRNT$CC[CC"BS"] = BS$DEF[1];
        CRNT$CC[CC"B1"] = B1$DEF[1];
        CRNT$CC[CC"B2"] = B2$DEF[1];
        CRNT$CC[CC"CT"] = CT$DEF[1];
        CRNT$CC[CC"ELX"] = ELX$DEF[1];
        CRNT$CC[CC"EBX"] = EBX$DEF[1];
        END 
      ELSE                   # STIP AND TC NOT 2741                    #
        BEGIN                # IF STIP OR TC NOT UNKNOWN               #
        IF CRNT$STIP NQ STIP"UNKNOWN" OR
           CRNT$TC NQ TC"UNKNOWN" 
        THEN
          BEGIN                        #SET DEFAULT VALUES FOR NON-2741#
          CRNT$CC[CC"AB"] = AB$DEF[0];
          CRNT$CC[CC"CN"] = CN$DEF[0];
          CRNT$CC[CC"BS"] = BS$DEF[0];
          CRNT$CC[CC"B1"] = B1$DEF[0];
          CRNT$CC[CC"B2"] = B2$DEF[0];
          CRNT$CC[CC"CT"] = CT$DEF[0];
        CRNT$CC[CC"ELX"] = ELX$DEF[0];
        CRNT$CC[CC"EBX"] = EBX$DEF[0];
          END 
        END 
      FOR I=3 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE DECLARATION ENTRY        #
        BEGIN 
        GOTO ASYDJUMP[STKWID[I]];      # GOTO APPROPRIATE PROC         #
GEN$PARAM:  
        GENDEV(STWORD[I],STLNUM[0]);   # CHECK GENERAL PARAMETERS      #
        TEST I; 
SDT:    IF STVALNAM[I] EQ "SDT12" OR   # IF SDT12 - SDT15 USED         #
           STVALNAM[I] EQ "SDT13" OR
           STVALNAM[I] EQ "SDT14" OR
           STVALNAM[I] EQ "SDT15" 
        THEN
          BEGIN 
          BTCHDEV(STWORD[I],STLNUM[0]);  # CALL BATCH DEVICE PROCESSOR #
          END 
        ELSE
          BEGIN 
          GOTO ILLEGAL; 
          END 
        TEST I; 
CON$PARAM:  
        CONDEV(STWORD[I],STLNUM[0]);   # CHECK CONSOLE PARAMETERS      #
        TEST I; 
FLOW$PARAM: 
        FLOWDEV(STWORD[I],STLNUM[0]);  # CHECK FLOW CONTROL PARAMETERS #
        TEST I; 
N2741$PRM:                             # CHECK NON-2741 PARAMETERS     #
        IF CRNT$TC NQ TC"$2741" AND    # IF TC AND STIP NOT 2741       #
           CRNT$STIP NQ STIP"$2741" 
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                 # TERMINAL IS 2741                        #
          BEGIN              # FLAG ERROR -- INVALID FOR 2741 TERMINALS#
          NDLEM2(ERR131,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
ILLEGAL:                     # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
        NDLEM2(ERR106,STLNUM[0],KWDNAME[STKWID[I]]);
NEXT$ASY: 
        END 
      IF NOT ABL$USED        # IF ABL NOT SPECIFIED                    #
      THEN                   #   DEFAULT BY LINE SPEED                 #
        BEGIN 
        IF CRNT$LSPD NQ LSPD"UNKNOWN"  # CURRENT LSPEED IS SET         #
        THEN
          BEGIN 
          VALUE = ABL$DEF[CRNT$LSPD];  # DEFAULT ABL IN VALUE          #
          END 
        ELSE                 # CURRENT LSPEED IS UNKNOWN               #
          BEGIN 
          IF XAUTO$REC       # IF XAUTO WAS SPECIFIED                  #
          THEN
            BEGIN 
            VALUE = ABL$DEF[LSPD"$600"]; # DEFAULT ABL (FOR 600 BAUD)  #
            END 
          ELSE
            BEGIN 
            VALUE = ABL$DEF[LSPD"$300"]; # DEFAULT ABL (FOR 300 BAUD)  #
            END 
          END 
        DEVFNFV(FN"ABL",VALUE); 
        END 
      IF NOT DBZ$USED        # IF DBZ NOT SPECIFIED                    #
      THEN                             # DEFAULT DBZ BY LINE SPEED     #
        BEGIN 
        IF CRNT$LSPD NQ LSPD"UNKNOWN"  # CURRENT LSPEED IS KNOWN       #
        THEN
          BEGIN 
          VALUE = DBZ$DEF[CRNT$LSPD];  # DEFAULT DBZ IN VALUE          #
          END 
        ELSE                 # CURRENT LSPEED IS UNKNOWN               #
          BEGIN 
          IF CRNT$TSPD NQ LSPD"UNKNOWN" 
           THEN                        # IF TSPEED WAS SPECIFIED       #
            BEGIN 
            VALUE = DBZ$DEF[CRNT$TSPD];# DEFAULT DBZ IN VALUE          #
            END 
          ELSE                         # TSPEED WAS NOT SPECIFIED      #
            BEGIN 
            VALUE = DBZ$DEF[LSPD"$300"]; # DEFAULT DBZ (FOR 300 BAUD)  #
            END 
          END 
        J = B<44,8>VALUE;    # MSB OF DBZ VALUE                        #
        DEVFNFV(FN"DBZ$MSB",J); 
        J = B<52,8>VALUE;    # LSB OF DBZ VALUE                        #
        DEVFNFV(FN"DBZ$LSB",J); 
        END 
      IF NOT DBL$USED        # IF DBL NOT SPECIFIED                    #
      THEN                   #   DEFAULT DBL                           #
        BEGIN 
        DEVFNFV(FN"DBL",DBL$DEF); 
        END 
      IF NOT UBL$USED        # IF UBL NOT SPECIFIED                    #
      THEN                   #   DEFAULT UBL                           #
        BEGIN 
        DEVFNFV(FN"UBL",UBL$DEF); 
        END 
      IF NOT UBZ$USED        # IF UBZ NOT SPECIFIED                    #
      THEN
        BEGIN 
        DEVFNFV(FN"UBZ",UBZ$DEF);     # DEFAULT UBZ                    #
        END 
      IF NOT XBZ$USED        # IF XBZ WAS NOT SPECIFIED                #
      THEN                             # DEFAULT XBZ BY LINE SPEED     #
        BEGIN 
        IF CRNT$LSPD NQ LSPD"UNKNOWN"  # CURRENT LSPEED IS SET         #
        THEN
          BEGIN 
          VALUE = DBZ$DEF[CRNT$LSPD];  # DEFAULT XBZ IN VALUE          #
          END 
        ELSE                 # LSPEED WAS NOT SPECIFIED                #
          BEGIN 
          IF CRNT$TSPD NQ LSPD"UNKNOWN" 
          THEN               # IF TSPEED WAS SPECIFIED                 #
            BEGIN 
            VALUE = DBZ$DEF[CRNT$TSPD]; # DEFAULT XBZ IN VALUE         #
            END 
          ELSE               # TPSEED WAS NOT SPECIFIED                #
            BEGIN 
            VALUE = DBZ$DEF[LSPD"$300"];# DEFAULT XBZ (FOR 300 BAUD)   #
            END 
          END 
        J = B<44,8>VALUE;    # MSB OF XBZ VALUE                        #
        DEVFNFV(FN"XBZ$MSB",J); 
        J = B<52,8>VALUE;    # LSB OF XBZ VALUE                        #
        DEVFNFV(FN"XBZ$LSB",J); 
        END 
      IF NOT PL$USED AND     # IF PL NOT SPECIFIED                     #
         CRNT$DT EQ DT"LP"   # AND DEVICE TYPE IS LINEPRINTER          #
      THEN
        BEGIN 
        DEVFNFV(FN"PL",PL$DEF); 
        END 
      IF CRNT$STIP NQ STIP"UNKNOWN" OR
         CRNT$TC NQ TC"UNKNOWN" 
      THEN                             # IF STIP OR TC NOT UNKNOWN     #
        BEGIN                          #   CHECK FOR UNIQUENESS        #
        FOR I=CC"B1" STEP 1 UNTIL CC"EBX" 
        DO
          BEGIN 
          IF CRNT$CC[CC"AB"] EQ CRNT$CC[I]
          THEN
            BEGIN            # FLAG ERROR -- VALUES NOT UNIQUE         #
            NDLEM2(ERR132,STLNUM[0]," "); 
            END 
          END 
        FOR I=CC"CN" STEP 1 UNTIL CC"BS"
        DO
          BEGIN 
          FOR J=I+1 STEP 1 UNTIL CC"EBX"
          DO
            BEGIN 
            IF CRNT$CC[I] EQ CRNT$CC[J] 
            THEN
              BEGIN          # FLAG ERROR -- VALUES NOT UNIQUE         #
              NDLEM2(ERR132,STLNUM[0]," "); 
              END 
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # ASYDEV #
      CONTROL EJECT;
      PROC BSCDEV;
      BEGIN 
*IF,DEF,IMS 
# 
**    BSCDEV - CHECK BISYNC DEVICE PARAMETER. 
* 
*     D.K. ENDO    81/11/02 
* 
*     THIS PROCEDURE CHECKS PARAMETERS THAT ARE APPLICABLE TO BISYNC
*     DEVICES.
* 
*     PROC BSCDEV 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION IN ENTRY,
*       SELECT CASE THAT APPLIES, 
*         CASE 1(DI,PRI,P90 THRU P99,PW): 
*           CALL GENDEV TO CHECK GENERAL PARAMETER. 
*         CASE 2(DBL):  
*           CALL FLOWDEV TO CHECK FLOW CONTROL PARAMETER. 
*         CASE 3 (UBL): 
*           IF DT IS CONSOLE AND RANGE OF UBL WITHIN 1 TO 7 
*             CALL FLOWDEV TO CHECK FLOW CONTROL PARAMETER. 
*         CASE 4(HN,AUTOLOG,AUTOCON,CT):  
*           IF DT IS CONSOLE
*           THEN
*             CALL CONDEV TO CHECK CONSOLE PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAM NOT ALLOWED WITH DT SPECIFIED.
*         CASE 5(TA): 
*           IF DT IS CARD PUNCH,
*           THEN, 
*             IF STIP IS 3780 OR UNKNOWN, 
*             THEN, 
*               CALL MBDEV TO CHECK MODE4/BSC PARAMETER.
*             OTHERWISE,
*               FLAG ERROR -- INVALID FOR 2780 DEVICES. 
*           OTHERWISE,
*             FLAG ERROR -- VALID FOR CARD PUNCH ONLY.
*         CASE 6(SDT):  
*           IF DT IS LINE PRINTER OR CARD READER, 
*           THEN, 
*             CALL BTCHDEV TO CHECK PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- INVALID WITH DT SPECIFIED.
*         CASE 7(DO,STREAM,AB,BR,BS,B1,B2,CI,CN,DLC,DLTO,DLX,EP,IN,LI,
*                OP,PA,PG,PL,SE,FA,XLC,XLX,XLTO,ELO,ELX,ELR,EBO,EBR,CP, 
*                IC,OC,LK,EBX,HD,XLY):  
*           FLAG ERROR -- INVALID FOR BISYNC DEVICES. 
*         CASE 8(ABL):  
*           IF DT IS CONSOLE, 
*           THEN, 
*             CALL FLOWDEV TO CHECK PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- VALID FOR CONSOLES ONLY.
*         CASE 9(DBZ):  
*           IF DT IS NOT CARD READER, 
*           THEN, 
*             CALL FLOWDEV TO CHECK PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- INVALID FOR CARD READERS. 
*         CASE 10(UBZ): 
*           IF DT IS CONSOLE OR CARD READER 
*              OR LINEPRINTER OR CARD PUNCH,
*           THEN, 
*             CALL FLOWDEV TO CHECK PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- INVALID WITH DT SPECIFIED.
*     IF ABL WAS NOT SPECIFIED AND DT IS CONSOLE, 
*       DEFAULT ABL VALUE.
*     IF DBL OR UBL NOT SPECIFIED,
*       DEFAULT VALUE BY DEVICE TYPE. 
*     IF DBZ NOT SPECIFIED AND DT IS NOT CARD READER. 
*       IF TC IS NOT -USER- OR UNKNOWN, 
*       THEN, 
*         DEFAULT DBZ BY TC.
*       OTHERWISE,
*         IF STIP IS NOT UNKNOWN, 
*           DEFAULT DBZ BY STIP.
*     IF UBZ NOT SPECIFIED AND DT IS -CON- OR -CR-, 
*       DEFAULT UBZ VALUE.
*     IF XBZ NOT SPECIFIED, 
*       IF TC IS NOT -USER- OR UNKNOWN, 
*       THEN, 
*         DEFAULT XBZ VALUE BY TC.
*       OTHERWISE,
*         IF STIP IS NOT UNKNOWN
*           DEFAULT XBZ VALUE BY STIP.
*     IF TA NOT SPECIFIED AND DT IS CARD PUNCH AND
*         STIP IS -3780- AND LINE IS AUTO-REC,
*       FLAG ERROR -- REQUIRED PARAMETER MISSING. 
*     IF MREC WAS SPECIFIED,
*       PUT MREC VALUE IN DEVICE ENTRY. 
*     IF STIP OR TC IS -2780- 
*       PUT BCF VALUE IN DEVICE ENTRY.
*     IF DT IS NOT CONSOLE OR USER, 
*       PUT DO VALUE IN DEVICE ENTRY. 
* 
# 
*ENDIF
# 
****  PROC BSCDEV - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRIES IN PASS 2 ERROR FILE      #
        FUNC XCDD C(10);     # CONVERTS INTEGER TO CHARACTER           #
        END 
# 
****
# 
      DEF ABL$DEF # 2 #;
      DEF DO$DEF # 1 #;      # DEFAULT -DO- VALUE                      #
      DEF UBL$DEF # 7 #;     # DEFAULT ABL VALUE                       #
      ITEM CHARVAL C(10);    # SCRATCH CHARACTER VARIABLE              #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM VALUE;            # INTEGER VALUE TEMPORARY                 #
      ITEM VALUE2;           # INTEGER VALUE TEMPORARY                 #
      DEF MXDT # 4 #; 
      ARRAY DBL$TABLE [1:MXDT] S(1);
        BEGIN 
        ITEM DBL$DEF (0,0,60) = [2,    # CONSOLE -- DEFAULT DBL        #
                                 2,    # CARD READER                   #
                                 1,    # LINE PRINTER                  #
                                 1     # CARD PUNCH                    #
                                ];
        END 
      DEF MXTC # 17 #;
      ARRAY DBZ$TC$TBL [16:MXTC,1:MXDT] S(1); 
        BEGIN 
        ITEM DBZ$DEF (0,0,60) = [[400, # 2780 -- CON DEFAULT DBZ       #
                                  512  # 3780                          #
                                 ]
                                 [  0, # 2780 -- CR DEFAULT DBZ (N/A)  #
                                    0  # 3780                          #
                                 ]
                                 [  1, # 2780 -- LP DEFAULT DBZ        #
                                    1  # 3780                          #
                                 ]
                                 [  1, # 2780 -- CP DEFAULT DBZ        #
                                    1  # 3780                          #
                                 ]];
        END 
      DEF MXSTIP # 11 #;
      ARRAY DBZ$STIP$TBL [10:MXSTIP,1:MXDT] S(1); 
        BEGIN 
        ITEM DBZ$STIP$DEF (0,0,60) = [[400, # 2780 -- CON DEFAULT      #
                                       512  # 3780                     #
                                      ] 
                                      [  0, # 2780 -- CR DEFAULT (N/A) #
                                         0  # 3780                     #
                                      ] 
                                      [  1, # 2780 -- LP DEFAULT       #
                                         1  # 3780                     #
                                      ] 
                                      [  1, # 2780 -- CP DEFAULT       #
                                         1  # 3780                     #
                                      ]]; 
        END 
      ARRAY UBZ$TBL [1:MXDT] S(1);
        BEGIN 
        ITEM UBZ$DEF (0,0,60) = [1,    # CONSOLE -- DEFAULT UBZ        #
                                 1,    # CARD READER                   #
                                 0,    # LINE PRINTER (N/A)            #
                                 0,    # CARD PUNCH (N/A)              #
                                ];
        END 
      ARRAY XBZ$TC$TBL [16:MXTC] S(1);
        BEGIN 
        ITEM XBZ$DEF (0,0,60) = [400, # 2780 -- CON DEFAULT XBZ        #
                                 512  # 3780                           #
                                 ]; 
        END 
      ARRAY XBZ$STIP$TBL [10:MXSTIP] S(1);
        BEGIN 
        ITEM XBZ$STIP$DEF (0,0,60) =  [400, # 2780 -- CON DEFAULT XBZ  #
                                       512  # 3780                     #
                                       ]; 
        END 
      SWITCH BSCDJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , GEN$PARAM  , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  , NEXT$BSC   , #         , DT       ,#
                      SDT         , MB$PARAM   , # SDT     , TA       ,#
                      ABL         , DBZ        , # ABL     , DBZ      ,#
                  UBZ$UBL         , FLOW$PARAM , # UBZ     , DBL      ,#
                  UBZ$UBL         , FLOW$PARAM , # UBL     , XBZ      ,#
                      ILLEGAL     , ILLEGAL    , # DO      , STREAM   ,#
                      CON$PARAM   ,            , # HN      , AUTOLOG  ,#
                      CON$PARAM   , GEN$PARAM  , # AUTOCON , PRI      ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  , # P98     , P99      ,#
                      ILLEGAL     , ILLEGAL    , # AB      , BR       ,#
                      ILLEGAL     , ILLEGAL    , # BS      , B1       ,#
                      ILLEGAL     , ILLEGAL    , # B2      , CI       ,#
                      ILLEGAL     , CON$PARAM  , # CN      , CT       ,#
                      ILLEGAL     , ILLEGAL    , # DLC     , DLTO     ,#
                      ILLEGAL     , ILLEGAL    , # DLX     , EP       ,#
                      ILLEGAL     , ILLEGAL    , # IN      , LI       ,#
                      ILLEGAL     , ILLEGAL    , # OP      , PA       ,#
                      ILLEGAL     , ILLEGAL    , # PG      , PL       ,#
                      GEN$PARAM   , ILLEGAL    , # PW      , SE       ,#
                      ILLEGAL     , ILLEGAL    , # FA      , XLC      ,#
                      ILLEGAL     , ILLEGAL    , # XLX     , XLTO     ,#
                      ILLEGAL     , ILLEGAL    , # ELO     , ELX      ,#
                      ILLEGAL     , ILLEGAL    , # ELR     , EBO      ,#
                      ILLEGAL     , ILLEGAL    , # EBR     , CP       ,#
                      ILLEGAL     , ILLEGAL    , # IC      , OC       ,#
                      ILLEGAL     , ILLEGAL    , # LK      , EBX      ,#
                                  , GEN$PARAM  , #         , MC       ,#
                      ILLEGAL     ,            , # XLY     , EOF      ,#
                                  , ILLEGAL    , # PAD     , RTS       #
                      ILLEGAL     , ILLEGAL    ; # MCI     , MLI       #
      CONTROL EJECT;
#                                                                      #
#                            BSCDEV CODE BEGINS HERE                   #
#                                                                      #
      FOR I=3 STEP 1 UNTIL STWC[0]     # CHECK EACH VALUE-DEC ENTRY    #
      DO
        BEGIN 
        GOTO BSCDJUMP[STKWID[I]];      # GOTO APPROPRIATE PARAGRAPH    #
GEN$PARAM:  
        GENDEV(STWORD[I],STLNUM[0]);   # CHECK GENERAL PARAMETER       #
        TEST I; 
FLOW$PARAM: 
        FLOWDEV(STWORD[I],STLNUM[0]);  # CHECK FLOW CONTROL PARAMETER  #
        TEST I; 
CON$PARAM:  
        IF CRNT$DT EQ DT"CON"          # IF CURRENT DT IS CONSOLE      #
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                           # DT IS NOT CONSOLE             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
MB$PARAM: 
        IF CRNT$DT EQ DT"CP"           # IF DT IS CARD PUNCH           #
        THEN
          BEGIN                    # IF STIP IS 3780 OR UNKNOWN        #
          IF CRNT$STIP EQ STIP"$3780" OR
             CRNT$STIP EQ STIP"UNKNOWN" 
          THEN
            BEGIN                      # CHECK MODE4/BSC PARAMETER     #
            MBDEV(STWORD[I],STLNUM[0]); 
            END 
          ELSE                         # STIP MUST BE 2780             #
            BEGIN            # FLAG ERROR -- INVALID WITH STIP SPEC    #
            NDLEM2(ERR135,STLNUM[0],KWDNAME[STKWID[I]]);
            END 
          END 
        ELSE                           # DT IS NOT CARD PUNCH          #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
SDT:  
        IF CRNT$DT EQ DT"LP" OR        # IF DT IS LINE PRINTER OR      #
           CRNT$DT EQ DT"CR" OR        #   CARD READER                 #
           STVALNAM[I] EQ "SDT12" OR   # IF USER SDT12 THROUGH SDT15   #
           STVALNAM[I] EQ "SDT13" OR
           STVALNAM[I] EQ "SDT14" OR
           STVALNAM[I] EQ "SDT15" 
        THEN
          BEGIN                        # CHECK PASSIVE DEVICE PARAMETER#
          BTCHDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS NOT LP OR CR            #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
ILLEGAL:                     # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS IS AN AUTO-SYNC LINE            #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
ABL:  
        IF CRNT$DT EQ DT"CON"          # IF CURRNT DT IS CONSOLE       #
        THEN
          BEGIN                        # CHECK FLOW CONTROL PARAMETER  #
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS NOT CONSOLE             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
DBZ:  
        IF CRNT$DT NQ DT"CR"           # IF DT IS NOT CARD READER      #
        THEN
          BEGIN                        # CHECK FLOW CONTROL PARAMETER  #
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS CARD READER             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
UBZ$UBL:                     # IF DT IS CONSOLE, CARD READER, LINE     #
                             #   PRINTER, OR CARD PUNCH                #
        IF CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"CR" OR 
           CRNT$DT EQ DT"LP"  OR CRNT$DT EQ DT"CP"
        THEN
          BEGIN 
          IF STKWID[I] EQ KID"UBZ"     # IF UBZ PARAMETER              #
          THEN
            BEGIN 
            FLOWDEV(STWORD[I],STLNUM[0]); 
            END 
          ELSE
            BEGIN                      # ELSE, UBL PARAMETER           #
            IF (CRNT$DT NQ "CON") AND 
               (STVALNUM[I] GQ 1 AND STVALNUM[I] LQ 7)
            THEN
              BEGIN                    # PASSIVE DEVICES: 1 <= UBL <= 7#
              FLOWDEV(STWORD[I],STLNUM[0]); 
              END 
            ELSE
              BEGIN                    # PARAMETER VALUE OUT OF RANGE  #
              CHARVAL=XCDD(STVALNUM[I]);
              NDLEM2(ERR100,STLNUM[0],CHARVAL); 
              END 
            END 
          END 
        ELSE
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
NEXT$BSC: 
        END 
      IF NOT ABL$USED AND              # IF ABL NOT SPECIFIED AND      #
         CRNT$DT EQ DT"CON"            #   CURRENT DT IS CONSOLE       #
      THEN
        BEGIN                          # MAKE FNFV PAIR ENTRY          #
        DEVFNFV(FN"ABL",ABL$DEF); 
        END 
      IF NOT DBL$USED                  # IF DBL NOT SPECIFIED          #
      THEN
        BEGIN                          # MAKE FNFV PAIR ENTRY          #
        DEVFNFV(FN"DBL",DBL$DEF[CRNT$DT]);
        END 
      IF NOT UBL$USED               # IF UBL NOT SPECIFIED          # 
      THEN
        BEGIN                          # MAKE FNFV PAIR ENTRY          #
        DEVFNFV(FN"UBL",UBL$DEF); 
        END 
      IF NOT DBZ$USED AND              # IF DBZ NOT SPECIFIED AND      #
         CRNT$DT NQ DT"CR"             #   CRNT DT IS NOT CARD READER  #
      THEN
        BEGIN 
        VALUE = 0;                     # CLEAR VALUE TEMPORARY         #
        IF CRNT$TC NQ TC"USER" AND     # IF TC IS NOT USER OR UNKNOWN  #
           CRNT$TC NQ TC"UNKNOWN" 
        THEN
          BEGIN                        # DEFAULT DBZ BY TC AND DT      #
          VALUE = DBZ$DEF[CRNT$TC,CRNT$DT]; 
          END 
        ELSE                           # TC IS USER OR UNKNOWN         #
          BEGIN 
          IF CRNT$STIP NQ STIP"UNKNOWN" 
          THEN                         # IF STIP IS NOT UNKNOWN        #
            BEGIN                      # DEFAULT DBZ BY STIP AND DT    #
            VALUE = DBZ$STIP$DEF[CRNT$STIP,CRNT$DT];
            END 
          END 
        IF VALUE NQ 0                  # IF DEFAULT DBZ WAS DETERMINED #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY FOR      #
          VALUE2 = B<44,8>VALUE;       # MSB OF VALUE                  #
          DEVFNFV(FN"DBZ$MSB",VALUE2);
          VALUE2 = B<52,8>VALUE;       # LSB OF VALUE                  #
          DEVFNFV(FN"DBZ$LSB",VALUE2);
          END 
        END 
      IF NOT UBZ$USED AND              # IF UBZ WAS NOT SPECIFIED      #
         (CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"CR")
      THEN
        BEGIN 
        DEVFNFV(FN"UBZ",UBZ$DEF[CRNT$DT]);   # ENTER DEFAULT UBZ       #
        END 
      IF NOT XBZ$USED                  # IF XBZ NOT SPECIFIED          #
      THEN
        BEGIN 
        VALUE = 0;                     # CLEAR VALUE TEMPORARY         #
        IF CRNT$TC NQ TC"USER" AND     # IF TC IS NOT USER OR UNKNOWN  #
           CRNT$TC NQ TC"UNKNOWN" 
        THEN
          BEGIN                        # DEFAULT XBZ BY TC AND DT      #
          VALUE = XBZ$DEF[CRNT$TC]; 
          END 
        ELSE                           # TC IS USER OR UNKNOWN         #
          BEGIN 
          IF CRNT$STIP NQ STIP"UNKNOWN" 
          THEN                         # IF STIP IS NOT UNKNOWN        #
            BEGIN                      # DEFAULT XBZ BY STIP AND DT    #
            VALUE = XBZ$STIP$DEF[CRNT$STIP];
            END 
          END 
        IF VALUE NQ 0                  # DEFAULT XBZ VALUE DETERMINED  #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY FOR      #
          VALUE2 = B<44,8>VALUE;       # MSB OF DEFAULT VALUE          #
          DEVFNFV(FN"XBZ$MSB",VALUE2);
          VALUE2 = B<52,8>VALUE;       # LSB OF DEFAULT VALUE          #
          DEVFNFV(FN"XBZ$LSB",VALUE2);
          END 
        END 
      IF NOT TA$USED AND               # IF TA NOT SPECIFIED AND       #
         CRNT$DT EQ DT"CP"             #   DT IS CARD PUNCH            #
      THEN
        BEGIN 
        IF NOT AUTO$REC AND            # IF AUTO-REC LINE AND          #
           CRNT$STIP EQ STIP"$3780"    #   STIP IS 3780                #
        THEN
          BEGIN              # FLAG ERROR -- REQUIRED PARAMETER MISSING#
          NDLEM2(ERR103,STLNUM[0],"TA");
          END 
        END 
      IF CRNT$MREC NQ 0                # IF MREC VALUE SPECIFIED       #
      THEN
        BEGIN                          # MAKE FNFV PAIR VALUE          #
        DEVFNFV(FN"MREC",CRNT$MREC);
        END 
      IF CRNT$STIP EQ STIP"$2780" OR   # IF STIP OR TC IS 2780         #
         CRNT$TC EQ TC"$2780" 
      THEN
        BEGIN                          # MAKE FNFV PAIR ENTRY FOR BCF  #
        DEVFNFV(FN"BCF",BCF$FLAG);
        END 
      IF CRNT$DT NQ DT"CON" AND 
         CRNT$DT NQ DT"USER"
      THEN                   # IF CURRENT DEVICE IS A PASSIVE DEVICE   #
        BEGIN 
        DEVFNFV(FN"DO$",DO$DEF);       # ENTER DEFAULT -DO- INTO ENTRY #
        END 
      RETURN;                # **** RETURN ****                        #
      END # BSCDEV #
      CONTROL EJECT;
      PROC BTCHDEV(BDWORD,BDLNUM);
      BEGIN 
*IF,DEF,IMS 
# 
**    BTCHDEV - CHECK BATCH DEVICE PARAMETERS.
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS THE PARAMETERS THAT ARE USED FOR BATCH OR 
*     PASSIVE DEVICES.
* 
*     PROC BTCHDEV(BDWORD,BDLNUM) 
* 
*     ENTRY        BDWORD = VALUE DECLARATION ENTRY.
*                  BDLNUM = CURRENT LINE NUMBER.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     SELECT CASE THAT APPLIES: 
*       CASE 1(SDT):  
*         IF VALUE IS O.K., 
*           IF VALUE IS NOT -CCP-,
*             MAP NUMERIC VALUE FOR CHARACTER VALUE.
*             PUT NUMERIC VALUE INTO DEVICE ENTRY 
*               IF TIPTYPE IS NOT USER OR UNKNOWN AND 
*                  DT IS NOT USER OR UNKNOWN AND
*                  SDT VALUE NOT EQUAL SDT12, SDT13, SDT14, OR SDT15
*               THEN, 
*                 IF DT AND SDT ARE NOT COMPATIBLE, 
*                   FLAG ERROR -- VALUE INVALID WITH DT SPECIFIED.
*       CASE 2(DO): 
*         IF VALUE IS O.K., 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT VALUE IN DEVICE ENTRY.
*             IF TIPTYPE IS NOT USER OR UNKNOWN AND 
*                DT IS NOT USER OR UNKNOWN, 
*             THEN, 
*               IF DO VALUE IS NOT UNIQUE FOR DEVICE TYPE,
*                 FLAG ERROR -- DUPLICATE DO VALUE. 
*       CASE 3(STREAM): 
*         IF VALUE IS O.K., 
*           IF VALUE IS -AUTOREC-,
*           THEN, 
*             IF LINE IS NOT AUTO-REC,
*               FLAG ERROR -- VALUE INVALID FOR FIXED LINES.
*           OTHERWISE,
*             CHECK IF VALUE IS IN RANGE. 
*             IF IN RANGE,
*               PUT VALUE IN DEVICE ENTRY.
*               IF TIPTYPE IS NOT USER OR UNKNOWN AND 
*                  DT IS NOT USER OR UNKNOWN, 
*               THEN, 
*                 IF VALUE IS NOT UNIQUE FOR DEVICE TYPE, 
*                 THEN, 
*                   FLAG ERROR -- DUPLICATE STREAM VALUE. 
*                 OTHERWISE,
*                   IF DT IS CARD PUNCH OR PLOTTER, 
*                     IF VALUE IS NOT UNIQUE, 
*                       FLAG ERROR -- DUPLICATE STREAM VALUE. 
* 
# 
*ENDIF
      ARRAY BDWORD [0:0] S(1);         # VALUE-DECLARATION ENTRY       #
        BEGIN 
        ITEM BDKWID U(0,0,9);          # KEYWORD I.D.                  #
        ITEM BDVLERR B(0,17,1);        # VALUE ERROR FLAG              #
        ITEM BDNAME C(0,18,7);         # CHARACTER STRING VALUE        #
        ITEM BDVAL (0,18,42);          # INTEGER VALUE                 #
        END 
      ITEM BDLNUM;           # STATEMENT SOURCE LINE NUMBER            #
# 
****  PROC BTCHDEV - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECKS IF VALUE IS WITH RANGE FOR PARAM #
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      DEF SDT$UNKNOWN # 999 #;         # CONSTANT USED IF SDT IS UNK   #
      ITEM BDSTAT B;         # STATUS RETURNED BY NDLCKRG              #
      ITEM CRNT$SDT;         # POINTER TO SDT TABLE OF CRNT VALUE      #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY FOR STORING WORD COUNT#
      ITEM VALUE;            # INTEGER VALUE TEMPORARY                 #
      DEF MXSDT # 11 #;       # MAXIMUM NUMBER OF SDT-S                #
      ARRAY SDT$TABLE [1:MXSDT] S(1); 
        BEGIN 
        ITEM SDT$NAME C(0,0,7) = ["A6",          # SDT VALUES          #
                                  "B6", 
                                  "A9", 
                                  "29", 
                                  "26", 
                                  "6BIT", 
                                  "8BIT", 
                                  "SDT12",
                                  "SDT13",
                                  "SDT14",
                                  "SDT15" 
                                 ]; 
        ITEM SDT$NUMV U(0,42,9) = [0,            # A6 - SDT NUMERIC VAL#
                                   1,            # B6                  #
                                   2,            # A9                  #
                                   0,            # 29                  #
                                   1,            # 26                  #
                                   0,            # 6BIT                #
                                   1,            # 8BIT                #
                                  12,            # SDT12               #
                                  13,            # SDT13               #
                                  14,            # SDT14               #
                                  15             # SDT15               #
                                  ];
        ITEM DT$ALLW U(0,51,9) = [DT"LP",        # A6 - DT ALLOWED     #
                                  DT"LP",        # B6                  #
                                  DT"LP",        # A9                  #
                                  DT"CR",        # 29                  #
                                  DT"CR",        # 26                  #
                                  DT"PL",        # 6BIT                #
                                  DT"PL",        # 8BIT                #
                                       0,        # SDT12 - NOT CHECKED #
                                       0,        # SDT13 - NOT CHECKED #
                                       0,        # SDT14 - NOT CHECKED #
                                       0         # SDT15 - NOT CHECKED #
                                 ]; 
        END 
      SWITCH BTCHJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  ,            , #         , DT       ,#
                      SDT$        ,            , # SDT     , TA       ,#
                                  ,            , # ABL     , DBZ      ,#
                                  ,            , # UBZ     , DBL      ,#
                                  ,            , # UBL     , XBZ      ,#
                      DO$         , STREAM     , # DO      , STREAM   ,#
                                  ,            , # HN      , AUTOLOG  ,#
                                  ,            , # AUTOCON , PRI      ,#
                                  ,            , # P90     , P91      ,#
                                  ,            , # P92     , P93      ,#
                                  ,            , # P94     , P95      ,#
                                  ,            , # P96     , P97      ,#
                                  ,            , # P98     , P99      ,#
                                  ,            , # AB      , BR       ,#
                                  ,            , # BS      , B1       ,#
                                  ,            , # B2      , CI       ,#
                                  ,            , # CN      , CT       ,#
                                  ,            , # DLC     , DLTO     ,#
                                  ,            , # DLX     , EP       ,#
                                  ,            , # IN      , LI       ,#
                                  ,            , # OP      , PA       ,#
                                  ,            , # PG      , PL       ,#
                                  ,            ; # PW      , SE        #
      CONTROL EJECT;
#                                                                      #
#                            BTCHDEV CODE BEGINS HERE                  #
#                                                                      #
      GOTO BTCHJUMP[BDKWID[0]];        # GOTO APPROPRIATE PARAGRAPH    #
SDT$: 
      IF NOT BDVLERR[0]                # IF VALUE IS O.K.              #
      THEN
        BEGIN 
        IF BDNAME[0] NQ "CCP"          # IF VALUE IS NOT -CCP-         #
        THEN
          BEGIN 
          VALUE = SDT$UNKNOWN;         # SET VALUE TO UNKNOWN          #
          FOR I=1 STEP 1 UNTIL MXSDT   # SEARCH SDT TABLE FOR VALUE    #
          DO
            BEGIN                      # IF VALUE FOUND                #
            IF BDNAME[0] EQ SDT$NAME[I] 
            THEN
              BEGIN 
              VALUE = SDT$NUMV[I];     # SAVE NUMERICAL VALUE          #
              CRNT$SDT = I;            # SAVE POINTER TO ENTRY         #
              END 
            END 
          IF VALUE NQ SDT$UNKNOWN      # IF SDT VALUE WAS FOUND        #
          THEN
            BEGIN                      # MAKE FNFV PAIR ENTRY FOR SDT  #
            DEVFNFV(FN"SDT",VALUE); 
            IF (CRNT$TIP NQ TIP"USER" AND CRNT$TIP NQ TIP"UNKNOWN") AND 
               (CRNT$DT NQ DT"USER" AND CRNT$DT NQ DT"UNKNOWN") AND 
               (VALUE NQ SDT$12 AND VALUE NQ SDT$13 AND 
                VALUE NQ SDT$14 AND VALUE NQ SDT$15)
            THEN                       # IF TIP IS NOT USER OR UNKNOWN #
              BEGIN                    #   AND DT NOT USER OR UNKNOWN  #
              IF CRNT$DT NQ DT$ALLW[CRNT$SDT] 
              THEN                     # IF VALUE NOT ALLOW WITH DT    #
                BEGIN        # FLAG ERROR -- VALUE INVALID WITH DT SPEC#
                NDLEM2(ERR138,BDLNUM,BDNAME[0]);
                END 
              END 
            END 
          END 
        END 
      GOTO NEXT$BTCH; 
DO$:  
      DO$USED = TRUE;                  # SET -DO- SPECIFIED FLAG       #
      IF NOT BDVLERR[0]                # IF VALUE IS O.K.              #
      THEN
        BEGIN                          # CHECK RANGE                   #
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(BDVAL[0],USR$WID1,NUM"DEC",BDSTAT);  # CHECK RANGE #
          END 
        ELSE
          BEGIN 
          NDLCKRG(BDKWID[0],BDVAL[0],BDSTAT);  # OTHERWISE CHECK NORMAL#
          END 
                                               # RANGE                 #
        IF BDSTAT                      # IF VALUE IS WITHIN RANGE      #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY          #
          DEVFNFV(FN"DO$",BDVAL[0]);
          IF (CRNT$TIP NQ TIP"USER" AND CRNT$TIP NQ TIP"UNKNOWN") AND 
             (CRNT$DT NQ DT"USER" AND CRNT$DT NQ DT"UNKNOWN") 
          THEN                         # IF TIP IS NOT USER OR UNKNOWN #
            BEGIN                      #   AND DT NOT USER OR UNKNOWN  #
            IF B<BDVAL[0],1>DO$MAP[CRNT$DT] NQ 1
            THEN                       # IF BIT FOR VALUE NOT SET      #
              BEGIN                    #   SET IT                      #
              B<BDVAL[0],1>DO$MAP[CRNT$DT] = 1; 
              END 
            ELSE                       # -DO- VALUE ALREADY USED       #
              BEGIN          # FLAG ERROR -- DO VALUE NOT UNIQUE FOR DT#
              NDLEM2(ERR139,BDLNUM," ");
              END 
            END 
          END 
        END 
      GOTO NEXT$BTCH; 
STREAM: 
      STREAM$USED = TRUE;              # SET STREAM SPECIFIED FLAG     #
      IF NOT BDVLERR[0]                # IF VALUE IS O.K.              #
      THEN
        BEGIN 
        IF BDNAME[0] NQ "AUTOREC"      # IF VALUE IS NOT -AUTOREC-     #
        THEN
          BEGIN                        # CHECK RANGE                   #
          IF CRNT$TIP EQ TIP"USER"     # IF USER DEFINED TIPTYPES      #
          THEN
            BEGIN 
            USR$RANGE(BDVAL[0],USR$WID1,NUM"DEC",BDSTAT); 
            END 
          ELSE
            BEGIN 
            NDLCKRG(BDKWID[0],BDVAL[0],BDSTAT);   # CHECK NORMAL RANGE #
            END 
          IF BDSTAT                    # IF VALUE IS WITHIN RANGE      #
          THEN
            BEGIN                      # PUT VALUE IN DEVICE ENTRY     #
            DEA2[CRNT$DEV + 2] = BDVAL[0];
            IF (CRNT$TIP NQ TIP"USER" AND CRNT$TIP NQ TIP"UNKNOWN") AND 
               (CRNT$DT NQ DT"USER" AND CRNT$DT NQ DT"UNKNOWN") 
            THEN                       # IF TIP AND DT IS NOT USER OR  #
              BEGIN                    #   UNKNOWN                     #
              IF B<BDVAL[0],1>STRM$MAP[CRNT$DT] NQ 1
              THEN                     # IF BIT FOR VALUE NOT SET      #
                BEGIN                  #   SET IT                      #
                B<BDVAL[0],1>STRM$MAP[CRNT$DT] = 1; 
                IF CRNT$DT EQ DT"CP" OR          # DT IS CP OR PL      #
                   CRNT$DT EQ DT"PL"
                THEN
                  BEGIN                # IF BIT FOR VALUE IS NOT SET   #
                  IF B<BDVAL[0],1>CP$PL$MAP NQ 1
                  THEN
                    BEGIN              # SET IT                        #
                    B<BDVAL[0],1>CP$PL$MAP = 1; 
                    END 
                  ELSE       # VALUE ALREADY USED FOR CR AND PL        #
                    BEGIN    # FLAG ERROR -- PL AND CR STREAM VALUE NOT#
                    NDLEM2(ERR140,BDLNUM," ");   # UNIQUE              #
                    END 
                  END 
                END 
              ELSE                     # STREAM VALUE ALREADY USED     #
                BEGIN        # FLAG ERROR -- STREAM VALUE NOT UNIQUE   #
                NDLEM2(ERR141,BDLNUM," ");
                END 
              END 
            END 
          END 
        ELSE
          BEGIN              # VALUE IS -AUTOREC-                      #
          IF NOT AUTO$REC    # IF NOT ON AN AUTO-REC LINE              #
          THEN
            BEGIN            # FLAG ERROR -- AUTOREC NOT VALID ON FIXED#
            NDLEM2(ERR113,BDLNUM," "); # CONFIGURATION LINES           #
            END 
          END 
        END 
      GOTO NEXT$BTCH; 
NEXT$BTCH:  
      RETURN;                # **** RETURN ****                        #
      END # BTCHDEV # 
      CONTROL EJECT;
      PROC CONDEV(CDWORD,CDLNUM); 
      BEGIN 
*IF,DEF,IMS 
# 
**    CONDEV - CHECK DEVICE STATEMENT CONSOLE PARAMETERS. 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS PARAMETERS THAT ARE ONLY ALLOWED FOR CONSOLE
*     DEVICES.
* 
*     PROC CONDEV(CDWORD,CDLNUM)
* 
*     ENTRY        CDWORD = VALUE DECLARATION ENTRY.
*                  CDLNUM = CURRENT SOURCE LINE NUMBER. 
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     IF VALUE IS O.K. AND NOT -CCP-, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(AL,BS,B1,B2,CN,CT):  
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT VALUE IN DEVICE ENTRY.
*             SAVE VALUE FOR UNIQUENESS TESTING.
*         CASE 2(DLC,CI,DLX,PL,LI,XLY): 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE 
*             PUT VALUE IN DEVICE ENTRY.
*         CASE 3(HN): 
*           IF VALUE IS NOT -NONE-, 
*             CHECK IF VALUE IN RANGE.
*             IF IN RANGE,
*               CHECK IF VALUE IS A LEGAL HOST NODE.
*               IF LEGAL HOST I.D., 
*               THEN, 
*                 PUT VALUE IN DEVICE ENTRY.
*               OTHERWISE,
*                 FLAG ERROR -- INVALID HN VALUE. 
*         CASE 4(AUTOCON,AUTOLOG,BR,DLTO,EP,PG,SE): 
*           IF VALUE IS -YES- 
*             PUT VALUE IN DEVICE ENTRY.
*         CASE 5(PA,OP,IN)
*           MAP NUMERIC VALUE FOR CHARACTER VALUE.
*           PUT NUMERIC VALUE IN DEVICE ENTRY.
* 
# 
*ENDIF
      ARRAY CDWORD [0:0] S(1);         # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM CDKWID U(0,0,9);          # KEYWORD I.D.                  #
        ITEM CDVLERR B(0,17,1);        # VALUE ERROR FLAG              #
        ITEM CDNAME C(0,18,7);         # VALUE NAME                    #
        ITEM CDVAL (0,18,42);          # VALUE NUMBER                  #
        END 
      ITEM CDLNUM;           # STATEMENT SOURCE LINE NUMBER            #
# 
****  PROC CONDEV - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECKS IF VALUE IS WITHIN RANGE         #
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        FUNC XCDD C(10);     # CONVERT INTEGER TO DISPLAY CODE         #
        END 
# 
****
# 
      ITEM CDSTAT B;         # RETURNED STATUS FROM NDLCKRG            #
      ITEM CTEMP C(10);      # CHARACTER TEMPORARY                     #
      ITEM FOUND B;          # FLAG INDICATING ENTRY WAS FOUND         #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM MAX$ENT;          # MAXIMUM ENTRY IN TABLE                  #
      ITEM VALUE1;           # INTEGER TEMPORARY                       #
      ITEM VALUE2;           # INTEGER TEMPORARY                       #
      DEF MNKWD # 76 #;      # MINIMUM KEYWORD I.D. IN TABLE           #
      DEF MXKWD # 129 #;     # MAXIMUM KEYWORD I.D. IN TABLE           #
      ARRAY FN$TABLE [MNKWD:MXKWD] S(1);    # FN VALUE FOR KEYWORDS    #
        BEGIN 
        ITEM CD$FN (0,0,60) = [FN"HN",      # HN                       #
                                     ,      # AUTOLOG                  #
                               FN"AUTOCON", # AUTOCON                  #
                               FN"PRI",     # PRI                      #
                            ,,,,,,,,,, # P90 THRU P99                  #
                               FN"AB",      # AB                       #
                               FN"BR",      # BR                       #
                               FN"BS",      # BS                       #
                               FN"B1",      # B1                       #
                               FN"B2",      # B2                       #
                               FN"CI",      # CI                       #
                               FN"CN",      # CN                       #
                               FN"CT",      # CT                       #
                               FN"DLC$MSB", # DLC                      #
                               FN"DLTO",    # DLTO                     #
                               FN"DLX",     # DLX                      #
                               FN"EP",      # EP                       #
                               FN"IN",      # IN                       #
                               FN"LI",      # LI                       #
                               FN"OP",      # OP                       #
                               FN"PA",      # PA                       #
                               FN"PG",      # PG                       #
                               FN"PL",      # PL                       #
                               FN"PW",      # PW                       #
                               FN"SE",      # SE                       #
                               FN"FA",      # FA                       #
                               FN"DLC$MSB", # XLC                      #
                               FN"DLX",     # XLX                      #
                               FN"DLTO",    # XLTO                     #
                               FN"ELO",     # ELO                      #
                               FN"ELX",     # ELX                      #
                               FN"ELR",     # ELR                      #
                               FN"EBO",     # EBO                      #
                               FN"EBR",     # EBR                      #
                               FN"CP",      # CP                       #
                               FN"IC",      # IC                       #
                               FN"OC",      # OC                       #
                               FN"LK",      # LK                       #
                               FN"EBX",     # EBX                      #
                               ,
                               FN"MC",      # MC                       #
                               FN"XLY",     # XLY                      #
                                      ,     # EOF                      #
                                      ,     # PAD                      #
                               FN"RTS"      # RTS                      #
                           ]; 
        END 
      DEF MXEBR # 4 #;       # MAXIMUM NUMBER OF EBR VALUES            #
      ARRAY EBR$TABLE [1:MXEBR] S(1); 
        BEGIN 
        ITEM EBR$VAL C(0,0,7) = ["NO", # NONE                          #
                                 "CR", # CARRIAGE RETURN -- EBR VALUES #
                                 "LF", # LINE FEED                     #
                                 "CL"  # CARRIAGE RETURN AND LINE FEED #
                                ];
        ITEM EBR$NUMV (0,42,18) = [0,  # NONE - NUMERIC VAL            #
                                   1,  # CARRIAGE RETURN - NUMERIC VAL #
                                   2,  # LINE FEED                     #
                                   3   # CARRIAGE RETURN AND LINE FEED #
                                ];
        END 
      DEF MXELO # 2 #;       # MAXIMUM NUMBER OF ELO/EBO VALUES        #
      ARRAY ELO$TABLE [1:MXELO] S(1); 
        BEGIN 
        ITEM ELO$VAL C(0,0,7) = ["EL", # DEFAULT MODE CHAR - ELO VALUES#
                                 "EB"  # SAME AS EB                    #
                                ];
        ITEM ELO$NUMV (0,42,18) = [1,  # DEFAULT MODE CHAR - NUMERIC   #
                                   2,  # SAME AS EB                    #
                                ];
        END 
      DEF MXIN # 3 #;        # MAXIMUM NUMBER OF IN VALUES             #
      ARRAY IN$TABLE [1:MXIN] S(1); 
        BEGIN 
        ITEM IN$VAL C(0,0,7) = ["KB",  # KEY BOARD -- IN VALUES        #
                                "PT",  # PAPER TAPE                    #
                                "BK"   # BLOCK MODE                    #
                               ]; 
        ITEM IN$NUMV (0,42,18) = [0,   # KEY BOARD -- NUMERICAL VALUE  #
                                  1,   # PAPER TAPE                    #
                                  2,   # BLOCK MODE                    #
                                 ]; 
        END 
      DEF MXOP # 3 #;        # MAXIMUM NUMBER OF OP VALUES             #
      ARRAY OP$TABLE [1:MXOP] S(1); 
        BEGIN 
        ITEM OP$VAL C(0,0,7) = ["DI",  # DISPLAY -- OP VALUES          #
                                "PR",  # PRINTER                       #
                                "PT"   # PAPER TAPE                    #
                               ]; 
        ITEM OP$NUMV (0,42,18) = [1,   # DISPLAY -- NUMERICAL VALUE    #
                                  0,   # PRINTER                       #
                                  2    # PAPER TAPE                    #
                                 ]; 
        END 
      DEF MXPA # 5 #;        # MAXIMUM NUMBER OF PA VALUES             #
      ARRAY PA$TABLE [1:MXPA] S(1); 
        BEGIN 
        ITEM PA$VAL C(0,0,7) = ["Z",   # ZERO PARITY -- PA VALUES      #
                                "O",   # ODD PARITY                    #
                                "E",   # EVEN PARITY                   #
                                "N"    # NO PARITY                     #
                               ,"I"    # IGNORE PARITY (ON XPT DELIM)  #
                               ]; 
        ITEM PA$NUMV (0,42,18) = [0,   # ZERO PARITY -- NUMERICAL VALUE#
                                  1,   # ODD PARITY                    #
                                  2,   # EVEN PARITY                   #
                                  3    # NO PARITY                     #
                                 ,4    # IGNORE PARITY (ON XPT DELIM)  #
                                 ]; 
        END 
      BASED ARRAY TABLE [1:1] S(1);    # TEMPLATE FOR TABLES(PA,OP,IN) #
        BEGIN 
        ITEM VALUE C(0,0,7);           # VALUE CHARACTER STRING        #
        ITEM NUMV (0,42,18);           # NUMERICAL VALUE               #
        END 
      SWITCH CONDJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  ,            , #         , DT       ,#
                                  ,            , # SDT     , TA       ,#
                                  ,            , # ABL     , DBZ      ,#
                                  ,            , # UBZ     , DBL      ,#
                                  ,            , # UBL     , XBZ      ,#
                                  ,            , # DO      , STREAM   ,#
                      HN$         ,            , # HN      , AUTOLOG  ,#
                      AUTOCON     ,            , # AUTOCON , PRI      ,#
                                  ,            , # P90     , P91      ,#
                                  ,            , # P92     , P93      ,#
                                  ,            , # P94     , P95      ,#
                                  ,            , # P96     , P97      ,#
                                  ,            , # P98     , P99      ,#
                      AB$         , YES$NO     , # AB      , BR       ,#
                      BS$         , B1$        , # BS      , B1       ,#
                      B2$         , NUMERIC    , # B2      , CI       ,#
                      CN$         , CT$        , # CN      , CT       ,#
                      DLC$        , DLTO$      , # DLC     , DLTO     ,#
                      DLX$        , YES$NO     , # DLX     , EP       ,#
                      IN$         , NUMERIC    , # IN      , LI       ,#
                      OP$         , PA$        , # OP      , PA       ,#
                      YES$NO      , NUMERIC    , # PG      , PL       ,#
                                  , YES$NO     , # PW      , SE       ,#
                      YES$NO      , DLC$       , # FA      , XLC      ,#
                      DLX$        , DLTO$      , # XLX     , XLTO     ,#
                      ELO$        , ELX$       , # ELO     , ELX      ,#
                      EBR$        , ELO$       , # ELR     , EBO      ,#
                      EBR$        , YES$NO     , # EBR     , CP       ,#
                      YES$NO      , YES$NO     , # IC      , OC       ,#
                      YES$NO      , EBX$       , # LK      , EBX      ,#
                                  ,            , #         , MC       ,#
                         DLX$     ,            , # XLY     , EOF      ,#
                                  , YES$NO     ; # PAD     , RTS       #
  
      CONTROL EJECT;
      PROC T$GROUP(TKWID);
      BEGIN 
*IF,DEF,IMS 
# 
**
* 
* 
*  PROCEDURE T$GROUP
* 
*  THIS PROCEDURE CHECKS IF XL'S AND DL'S ON A DEVICE STATEMENT 
*  ARE MUTUALLY EXCLUSIVE.
* 
*  Y.C. YIP    82/10/09 
* 
* 
*  ENTRY: 
* 
*     TKWID = KEYWORD ID. 
* 
*  EXIT:  
*      TKWID REMAIN UNCHANGED.
* 
# 
*ENDIF
      ITEM IS$XL B;              # BOOLEAN VARIABLE FOR XL'S           #
      ITEM TKWID;              # KEYWORD ID.                           #
  
      IF TKWID GR KID"DLX"       # IF KEYWORD ID ABOVE DL'S            #
      THEN
        BEGIN 
        IS$XL = TRUE;            # KEYWORD MUST BE XL'S                #
        END 
      ELSE
        BEGIN 
        IS$XL = FALSE;           # KEYWORD MUST BE DL'S                #
        END 
      IF GR$SET EQ X$D$GROUP"NO" # IF NO XL'S OR DL'S ARE MET YET      #
      THEN
        BEGIN 
        IF IS$XL
        THEN
          BEGIN                  # IF KEYWORD IS XL'S                  #
          GR$SET = S"XG";        # SET TO XL'S GROUP                   #
          END 
        ELSE
          BEGIN 
          GR$SET = S"DG";        # SET TO DL'S GROUP                   #
          END 
        END 
      ELSE
        BEGIN                    # IF XL'S OR DL'S WERE USED           #
        IF (IS$XL AND (GR$SET EQ X$D$GROUP"DG")) OR 
           ( NOT IS$XL AND (GR$SET EQ X$D$GROUP"XG")) 
                                 # IF XL'S USED AND THE PARAMETER IS
                                   DL'S OR IF DL'S USED AND THE 
                                   PARAMETER IS XL'S.                  #
        THEN
          BEGIN 
          NDLEM2(ERR152,CDLNUM,KWDNAME[TKWID]); 
          END 
        END 
      END  # END OF PROC T$GROUP #
      CONTROL EJECT;
#                                                                      #
#                            CONDEV CODE BEGINS HERE                   #
#                                                                      #
      IF NOT CDVLERR[0] AND            # IF VALUE IS O.K. AND NOT -CCP-#
         CDNAME[0] NQ "CCP" 
      THEN
        BEGIN 
        GOTO CONDJUMP[CDKWID[0]];      # GOTO APPROPRIATE PARAGRAPH    #
AB$:  
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF -AB- VALUE IS IN RANGE               #
        THEN
          BEGIN 
          CRNT$CC[CC"AB"] = CDVAL[0];  # SAVE -AB- VALUE               #
          DEVFNFV(FN"AB",CDVAL[0]);    # MAKE FNFV PAIR ENTRY          #
          END 
        GOTO NEXT$CON;
BS$:  
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF -BS- VALUE IS IN RANGE               #
        THEN
          BEGIN 
          CRNT$CC[CC"BS"] = CDVAL[0];  # SAVE -BS- VALUE               #
          DEVFNFV(FN"BS",CDVAL[0]);    # MAKE FNFV PAIR ENTRY          #
          END 
        GOTO NEXT$CON;
B1$:  
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF -B1- VALUE IS IN RANGE               #
        THEN
          BEGIN 
          CRNT$CC[CC"B1"] = CDVAL[0];  # SAVE -B1- VALUE               #
          DEVFNFV(FN"B1",CDVAL[0]);    # MAKE FNFV PAIR ENTRY          #
          END 
        GOTO NEXT$CON;
B2$:  
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF -B2- VALUE IS IN RANGE               #
        THEN
          BEGIN 
          CRNT$CC[CC"B2"] = CDVAL[0];  # SAVE -B2- VALUE               #
          DEVFNFV(FN"B2",CDVAL[0]);    # MAKE FNFV PAIR ENTRY          #
          END 
        GOTO NEXT$CON;
CN$:  
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF -CN- VALUE IS IN RANGE               #
        THEN
          BEGIN 
          CRNT$CC[CC"CN"] = CDVAL[0];  # SAVE -CN- VALUE               #
          DEVFNFV(FN"CN",CDVAL[0]);    # MAKE FNFV PAIR ENTRY          #
          END 
        GOTO NEXT$CON;
CT$:  
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF -CT- VALUE IS IN RANGE               #
        THEN
          BEGIN 
          CRNT$CC[CC"CT"] = CDVAL[0];  # SAVE -CT- VALUE               #
          DEVFNFV(FN"CT",CDVAL[0]);    # MAKE FNFV PAIR ENTRY          #
          END 
        GOTO NEXT$CON;
ELX$: 
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF VALUE IS IN RANGE                    #
        THEN
          BEGIN 
          CRNT$CC[CC"ELX"] = CDVAL[0];  # SAVE -ELX- VALUE             #
          DEVFNFV(FN"ELX",CDVAL[0]);    # MAKE FNFV PAIR ENTRY         #
          END 
        GOTO NEXT$CON;
EBX$: 
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);  # CEHCK NORMAL RANGE    #
          END 
        CHCONTRL(CDKWID[0],CDLNUM,CDSTAT,CDVAL[0]); 
                            # CHECK RANGE OF CONTROL CHARACTER         #
        IF CDSTAT            # IF VALUE IS IN RANGE                    #
        THEN
          BEGIN 
          CRNT$CC[CC"EBX"] = CDVAL[0];  # SAVE -EBX- VALUE             #
          DEVFNFV(FN"EBX",CDVAL[0]);    # MAKE FNFV PAIR ENTRY         #
          END 
        GOTO NEXT$CON;
DLC$: 
        IF CRNT$TIP NQ TIP"USER"
        THEN
          BEGIN 
          T$GROUP(CDKWID[0]);            # CHECK IF ANY MUTUALLY
                                         EXCLUSIVE KEYWORD WERE USED   #
          END 
        IF CRNT$TIP EQ TIP"USER"     # TIPTYPE IS USER DEFINED         #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID2,NUM"HEX",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);     # CHECK NORMAL RANGE #
          END 
        IF CDSTAT            # IF -DLC- VALUE IS IN RANGE              #
        THEN
          BEGIN 
          VALUE1 = CDVAL[0]; # MAKE FNFV PAIR ENTRY FOR                #
          VALUE2 = B<44,8>VALUE1;      # MSB OF -DLC- VALUE            #
          DEVFNFV(FN"DLC$MSB",VALUE2);
          VALUE2 = B<52,8>VALUE1;      # LSB OF -DLC- VALUE            #
          DEVFNFV(FN"DLC$LSB",VALUE2);
          END 
        GOTO NEXT$CON;
DLTO$:  
        IF CRNT$TIP NQ TIP"USER"
        THEN
          BEGIN 
          T$GROUP(CDKWID[0]); # CHECK IF MUTUALLY EXCLUSIVE KEYWORDS   #
          END 
                              # WERE USED                              #
        GOTO YES$NO;
DLX$: 
        IF CRNT$TIP NQ TIP"USER"
        THEN
          BEGIN 
          T$GROUP(CDKWID[0]); # CHECK IF MUTUALLY EXCLUSIVE KEYWORD ARE 
                              USED                                     #
          END 
NUMERIC:  
        IF CDKWID[0] EQ KID"PL"      # IF PAGE LENGTH SPECIFIED        #
        THEN
          BEGIN 
          PL$USED = TRUE;            # SET PL USED FLAG                #
          END 
        IF CRNT$TIP EQ TIP"USER"     # TIPTYPE IS USER DEFINED         #
        THEN
          BEGIN 
          IF CDKWID[0] EQ KID"DLX" OR 
             CDKWID[0] EQ KID"XLX" OR 
             CDKWID[0] EQ KID"XLY"
          THEN
            BEGIN 
            USR$RANGE(CDVAL[0],USR$WID1,NUM"HEX",CDSTAT); 
            END 
          ELSE
            BEGIN 
            USR$RANGE(CDVAL[0],USR$WID1,NUM"DEC",CDSTAT); 
            END 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);     # CHECK NORMAL RANGE #
          END 
        IF CDSTAT                      # IF VALUE IS WITHIN RANGE      #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY          #
          DEVFNFV(CD$FN[CDKWID[0]],CDVAL[0]); 
          END 
        GOTO NEXT$CON;
HN$:  
        IF CDNAME[0] NQ "NONE"         # IF VALUE IS NOT -NONE-        #
        THEN
          BEGIN 
          HN$USED = TRUE;              # SET HN SPECIFIED FLAG         #
        IF CRNT$TIP EQ TIP"USER"   # TIPTYPE IS USER DEFINED           #
        THEN
          BEGIN 
          USR$RANGE(CDVAL[0],USR$WID1,NUM"DEC",CDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(CDKWID[0],CDVAL[0],CDSTAT);    # CHECK NORMAL RANGE  #
          END 
          IF CDSTAT                    # IF VALUE IS WITHIN RANGE      #
          THEN                         #   CHECK LLT FOR ENTRY         #
            BEGIN 
            FOUND = FALSE;             # SEARCH LLT UNTIL FOUND        #
            FOR I=1 STEP LLTENTSZ WHILE NOT FOUND AND 
                                        I LQ LLTENT[0]
            DO
              BEGIN                    # IF LOGICAL LINK EXISTS BETWEEN#
              IF CDVAL[0] EQ LLTHNID[I] AND      # NPU AND HN NODE     #
                 CRNT$NID EQ LLTNID[I]
              THEN
                BEGIN 
                FOUND = TRUE;          # SET FLAG INDICATING SO        #
                END 
              END 
            IF FOUND                   # IF ENTRY FOUND                #
            THEN
              BEGIN                    # MAKE FNFV PAIR ENTRY FOR HN   #
              DEVFNFV(FN"HN",CDVAL[0]); 
              END 
            ELSE                       # ENTRY NOT FOUND               #
              BEGIN          # FLAG ERROR -- INVALID HN VALUE          #
              CTEMP = XCDD(CDVAL[0]); 
              NDLEM2(ERR136,CDLNUM,CTEMP);
              END 
            END 
          END 
        GOTO NEXT$CON;
AUTOCON:  
        IF CDNAME[0] EQ "YES"          # IF VALUE IS -YES-             #
        THEN
          BEGIN 
          AUTOCON$FLAG = TRUE;         # SET AUTO-CONNECT FLAG         #
          DEVFNFV(FN"AUTOCON",TRUE);   # MAKE FNFV PAIR ENTRY          #
          END 
        ELSE                 # AUTOCON VALUE MUST BE -NO-              #
          BEGIN 
          AUTOCON$NO = TRUE;           # SET AUTOCON = NO FLAG         #
          END 
        GOTO NEXT$CON;
YES:                         # FOR STAND-ALONE KEYWORDS                #
        IF CDNAME[0] EQ "YES"          # IF VALUE IS -YES-             #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY          #
          DEVFNFV(CD$FN[CDKWID[0]],TRUE); 
          END 
        GOTO NEXT$CON;
YES$NO:                      # FOR KEYWORDS REQUIRING YES/NO VALUE     #
        IF CDNAME[0] EQ "YES"          # IF VALUE IS -YES-             #
        THEN
          BEGIN              # MAKE FNFV PAIR ENTRY WITH VALUE -YES-   #
          DEVFNFV(CD$FN[CDKWID[0]],TRUE); 
          END 
        ELSE                           # VALUE MUST BE -NO-            #
          BEGIN              # MAKE FNFV PAIR ENTRY WITH VALUE -NO-    #
          DEVFNFV(CD$FN[CDKWID[0]],FALSE);
          END 
        GOTO NEXT$CON;
PA$:  
        P<TABLE> = LOC(PA$TABLE);      # POINT TO TABLE OF PA VALUES   #
        MAX$ENT = MXPA;                # SAVE MAXIMUM ENTRY COUNT      #
        GOTO MAP$NUM; 
OP$:  
        P<TABLE> = LOC(OP$TABLE);      # POINT TO TABLE OF OP VALUES   #
        MAX$ENT = MXOP;                # SAVE MAXIMUM ENTRY COUNT      #
        GOTO MAP$NUM; 
IN$:  
        P<TABLE> = LOC(IN$TABLE);      # POINT TO TABLE OF IN VALUES   #
        MAX$ENT = MXIN;                # SAVE MAXIMUM ENTRY COUNT      #
        GOTO MAP$NUM; 
ELO$: 
        P<TABLE> = LOC(ELO$TABLE);     # POINT TABLE TO ELO/EBO VALUES #
        MAX$ENT = MXELO;               # SAVE MAXIMUM ENTRY VALUES     #
        GOTO MAP$NUM; 
EBR$: 
        P<TABLE> = LOC(EBR$TABLE);     # POINT TABLE TO EBR VALUES     #
        MAX$ENT = MXEBR;               # SAVE MAXIMUM ENTRY VALUES     #
MAP$NUM:  
        FOR I=1 STEP 1 UNTIL MAX$ENT   # SEARCH TABLE FOR VALUE        #
        DO
          BEGIN 
          IF CDNAME[0] EQ VALUE[I]     # IF VALUE FOUND                #
          THEN
            BEGIN                      # MAKE FNFV PAIR ENTRY          #
            DEVFNFV(CD$FN[CDKWID[0]],NUMV[I]);
            END 
          END 
NEXT$CON: 
        END 
      RETURN;                # **** RETURN ****                        #
      END # CONDEV #
      CONTROL EJECT;
      PROC COUNT$LK;
      BEGIN 
*IF,DEF,IMS 
# 
**
* 
* 
*     COUNT$LK - COUNTS NUMBER OF LOGICAL LINKS TERMINATING AT A NPU. 
* 
*      Y.C. YIP     11/22/1982
* 
*      THIS PROCEDURE COUNTS NUMBER OF LOGICAL LINKS TERMINATING AT 
*      THE SAME NPU, AND CHECK IF THE HOST NAMES ARE THE SAME.
* 
*      PROC COUNT$LK
* 
*      ENTRY        NONE
* 
*      EXIT         NONE
* 
*      METHOD 
* 
*     THE LOGICAL LINK TABLE IS SEARCHED, THE NUMBER OF LOGICAL 
*     LINKS TERMINATING AT THE CRNT$NPU IS CHECKED. 
*     SAVE$ENTRY IS SET TO THE LAST ENTRY OF THE SET OF LOGICAL 
*     LINKS WITH THE SAME HOST NAME DEFINED ON A PARTICULAR NPU.
*     IF ONE OR MORE THAN ONE HOST NAMES ARE DIFFERENT THEN 
*     SAVE$ENTRY IS SET TO -1. INITIALLY,SAVE$ENTRY IS SET TO 
*     0.
* 
# 
*ENDIF
      ITEM I;                      # LOOP INDIX                        #
      CONTROL EJECT;
#                        COUNT$LK CODE BEGINS HERE                     #
      LL$CNT = 0;                  # SETTING LINK COUNT TO 0           #
      SAVE$ENTRY = 0;              # SETTING SAVE$ENTRY TO 0           #
      FOR I=1 STEP 1 UNTIL LLTENT[0]
      DO
        BEGIN                      # COUNT NUMBER OF LOGICAL LINKS     #
        IF LLTNID[I] EQ CRNT$NID   # TO THIS NPU                       #
        THEN
          BEGIN 
          IF SAVE$ENTRY EQ 0       # IF FIRST ENTRY                    #
          THEN
            BEGIN 
            SAVE$ENTRY = I;        # SAVE ENTRY NUMBER                 #
            END 
          ELSE                     # NOT FIRST ENTRY                   #
            BEGIN 
            IF SAVE$ENTRY NQ NO$MATCH # NO MATCH FLAG IS SET           #
            THEN
              BEGIN 
              IF LLTHNAME[SAVE$ENTRY] NQ LLTHNAME[I] # IF HOS NAMES DIF#
              THEN
                BEGIN 
                SAVE$ENTRY = NO$MATCH;# SET SAVE$ENTRY TO -1           #
                END 
              ELSE
                BEGIN 
                SAVE$ENTRY = I;    #   SAVE LAST ENTRY                 #
                END 
              END 
            END 
          LL$CNT = LL$CNT + 1;      # BUMP LINK COUNT                  #
          LLT$PNTR = I;             # SAVE ENTRY                       #
          END 
        END 
      END # END OF PROC COUNT$LK                                       #
      CONTROL EJECT;
      PROC DEVFNFV(FN$VAL,FV$VAL);
      BEGIN 
*IF,DEF,IMS 
# 
**    DEVFNFV - STORE FNFV PAIR IN DEVICE ENTRY.
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE PACKS A GIVEN FNFV PAIR INTO THE CURRENT DEVICE
*     ENTRY A INCREMENTS THE FNFV PAIR COUNT. 
* 
*     PROC DEVFNFV(FN$VAL,FV$VAL) 
* 
*     ENTRY        FN$VAL = FIELD NUMBER VALUE. 
*                  FV$VAL = VALUE FOR FIELD SPECIFIED BY FN$VAL.
* 
*     EXIT         NONE.
* 
*     METHOD: 
* 
*     INCREMENT FNFV COUNT IN CURRENT DEVICE ENTRY. 
*     SET CURRENT STATE TO ZERO.
*     ENTER STATE TABLE:  
*E
*     ***STATE I        0        I        1        I        2        I
*        ***   I                 I                 I                 I
*     STIM  ***I     STORE FN    I     STORE FV    I       EXIT      I
*     ---------+-----------------+-----------------+-----------------+
*              I                 I                 I                 I
*              I                 I                 I                 I
*              I PUT VAL IN WORD I PUT VAL IN WORD I                 I
*     BIT @ 52 I STATE=STATE+1   I STATE=STATE+1   I EXIT STATE TABLEI
*              I BIT=BIT+8       I BIT=BIT+8       I                 I
*              I                 I                 I                 I
*              I                 I                 I                 I
*     ---------+-----------------+-----------------+-----------------+
*              I                 I                 I                 I
*              I INCR WORD COUNT I INCR WORD COUNT I                 I
*              I BIT = 0         I BIT = 0         I                 I
*     BIT \ 60 I PUT VAL IN WORD I PUT VAL IN WORD I EXIT STATE TABLEI
*              I STATE=STATE+1   I STATE=STATE+1   I                 I
*              I BIT=BIT+8       I BIT=BIT+8       I                 I
*              I                 I                 I                 I
*     ---------+-----------------+-----------------+-----------------+
*              I PUT FIRST 4 BITSI PUT FIRST 4 BITSI                 I
*              I    IN WORD      I    IN WORD      I                 I
*              I INCR WORD COUNT I INCR WORD COUNT I                 I
*     BIT = 56 I BIT = 0         I BIT = 0         I EXIT STATE TABLEI
*              I PUT LAST 4 BITS I PUT LAST 4 BITS I                 I
*              I STATE=STATE+1   I STATE=STATE+1   I                 I
*              I BIT=BIT+4       I BIT=BIT+4       I                 I
*     ---------+-----------------+-----------------+-----------------+
* 
# 
*ENDIF
      ITEM FN$VAL;           # FIELD NUMBER TO BE STORED               #
      ITEM FV$VAL;           # FIELD VALUE TO BE STORED                #
      DEF STATE0 # 0 #;      # INITIAL STATE -- STORE FN VALUE         #
      DEF STIM1 # 1 #;       # REPRESENTS BIT POSITION @ 52            #
      DEF STIM2 # 2 #;       # REPRESENTS BIT POSITION \ 60            #
      DEF STIM3 # 3 #;       # REPRESENTS BIT POSITION = 56            #
      STATUS JUMP NEXT$WORD, # INCREMENT TO NEXT WORD BEFORE STORING   #
                  STORE$VAL, # STORE VALUE AND MOVE CRNT BIT POSITION  #
                  STOR$HALF, # STORE HALF VALUE IN CRNT AND NEXT WORD  #
                  EXIT$PROC; # EXIT PROCEDURE -- FNFV PAIR STORED      #
      ITEM CRNT$STIM;        # CURRENT STIMULUS                        #
      ITEM STATE;            # CURRENT STATE                           #
      ARRAY FNFV$VALUE [0:0] S(1);
        BEGIN                # TEMPORARY FOR FN/FV VALUE               #
        ITEM VALUE (0,0,60);
        ITEM FRST$HALF U(0,52,4);      # FIRST HALF OF VALUE           #
        ITEM SCND$HALF U(0,56,4);      # SECOND HALF OF VALUE          #
        END 
      DEF MXSTATE # 2 #;               # MAXIMUM STATE                 #
      DEF MXSTIM  # 3 #;               # MAXIMUM NUMBER OF STIMULUS    #
      ARRAY STATE$TABLE [0:MXSTATE,1:MXSTIM] S(1);
        BEGIN 
        ITEM STATE$TBL (0,0,60) = 
#             STATE  *    STORE FN   *    STORE FV   *     EXIT        #
#     STIMULUS       *               *               *                 #
#                                                                      #
#     BIT$POS @ 52 #[[JUMP"STORE$VAL",JUMP"STORE$VAL",JUMP"EXIT$PROC"]
#                                                                      #
#     BIT$POS \ 60 # [JUMP"NEXT$WORD",JUMP"NEXT$WORD",JUMP"EXIT$PROC"]
#                                                                      #
#     BIT$POS = 56 # [JUMP"STOR$HALF",JUMP"STOR$HALF",JUMP"EXIT$PROC"]
                    ];
        END 
      SWITCH FNFVJUMP NEW$WORD,  # 0 -- NEXT$WORD                      #
                      PUT$VALUE, # 1 -- STORE$VAL                      #
                      PUT$HALF,  # 2 -- STOR$HALF                      #
                      EXIT;      # 3 -- EXIT$PROC                      #
      CONTROL EJECT;
#                                                                      #
#                            DEVFNFV CODE BEGINS HERE                  #
#                                                                      #
      STATE = STATE0;        # INITIALIZE CURRENT STATE                #
      VALUE[0] = FN$VAL;     # PUT FN VALUE IN TEMPORARY               #
                             # INCREMENT FNFV PAIR COUNT               #
      DEFNFV[CRNT$DEV + 1] = DEFNFV[CRNT$DEV + 1] + 1;
START$STATE:  
      IF BIT$POS LQ 52       # IF NET POSITION LESS THAN OR EQUAL TO 56#
      THEN
        BEGIN 
        CRNT$STIM = STIM1;   # SET CURRENT STIMULUS TO TYPE 1          #
        END 
      ELSE                   # BIT POS NOT LESS THAN OR EQUAL TO 56    #
        BEGIN 
        IF BIT$POS GQ 60     # IF BIT POS GREATER THAN OR EQUAL TO 60  #
        THEN
          BEGIN 
          CRNT$STIM = STIM2; # SET CURRENT STIMULUS TO TYPE 2          #
          END 
        ELSE                 # BIT POSITION MUST BE 56                 #
          BEGIN 
          CRNT$STIM = STIM3; # SET CURRENT STIMULUS TO TYPE 3          #
          END 
        END 
                             # JUMP ACCORDING TO STATE TABLE           #
      GOTO FNFVJUMP[STATE$TBL[STATE,CRNT$STIM]];
#                                                                      #
NEW$WORD: 
      LRWC[1] = LRWC[1] + 1;           # INCREMENT WORD COUNT          #
      LRWORD[LRWC[1]] = 0;             # CLEAR THE NEXT WORD           #
      BIT$POS = 0;                     # INITIALIZE BIT POSITION       #
PUT$VALUE:  
      B<BIT$POS,8>LRWORD[LRWC[1]] = VALUE[0];    # STORE VALUE         #
      STATE = STATE + 1;               # SET TO NEXT STATE             #
      VALUE[0] = FV$VAL;               # PUT FV VALUE IN TEMPORARY     #
      BIT$POS = BIT$POS + 8;           # RESET CURRENT BIT POSITION    #
      GOTO START$STATE; 
PUT$HALF:                              # STORE 1ST HALF OF VALUE       #
      B<BIT$POS,4>LRWORD[LRWC[1]] = FRST$HALF[0]; 
      LRWC[1] = LRWC[1] + 1;           # INCREMENT WORD COUNT          #
      LRWORD[LRWC[1]] = 0;             # CLEAR THE NEXT WORD           #
      BIT$POS = 0;                     # INITIALIZE BIT POSITION       #
      B<BIT$POS,4>LRWORD[LRWC[1]] = SCND$HALF[0];  # STORE 2ND HALF    #
      BIT$POS = 4;                     # MOVE BIT POSITION             #
      VALUE[0] = FV$VAL;               # PUT FV VALUE IN TEMPORARY     #
      STATE = STATE + 1;               # SET TO NEXT STATE             #
      GOTO START$STATE; 
EXIT: 
      RETURN;                # **** RETURN ****                        #
      END # DEVFNFV # 
      CONTROL EJECT;
      PROC FLOWDEV(FDWORD,FDLNUM);
      BEGIN 
*IF,DEF,IMS 
# 
**    FLOWDEV - CHECK FLOW CONTROL PARAMETERS ON DEVICE STMT. 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS THE PARAMETERS WHICH ARE USED FOR FLOW
*     CONTROL.
* 
*     PROC FLOWDEV(FDWORD,FDLNUM) 
* 
*     ENTRY        FDWORD = VALUE DECLARATION ENTRY.
*                  FDLNUM = CURRENT SOURCE LINE NUMBER. 
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     SELECT CASE THAT APPLIES, 
*       CASE 1(ABL,DBL,UBL,XBZ):  
*         IF VALUE IS O.K., 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT VALUE INTO DEVICE ENTRY.
*       CASE 2(DBZ):  
*         IF VALUE IS O.K.
*           IF DT IS BATCH DEVICE,
*           THEN, 
*             DIVIDE VALUE BY PRU SIZE. 
*             PUT CONVERTED VALUE INTO DEVICE ENTRY.
*           OTHERWISE,
*             PUT VALUE INTO DEVICE ENTRY.
*       CASE 3(UBZ):  
*         IF VALUE IS O.K., 
*           IF DT IS CONSOLE, 
*           THEN, 
*             IF VALUE IS WITHIN 0 AND 2000,
*             THEN, 
*               DIVIDE VALUE BY 200.
*               PUT CONVERTED VALUE INTO DEVICE ENTRY.
*             OTHERWISE,
*               FLAG ERROR -- VALUE OUT OF RANGE. 
*           OTHERWISE,
*             IF DT IS NOT USER OR UNKNOWN, 
*             THEN, 
*               IF VALUE IS WITHIN 1 AND 2043,
*               THEN, 
*                 DIVIDE VALUE BY PRU SIZE. 
*                 PUT CONVERTED VALUE INTO DEVICE ENTRY.
*               OTHERWISE,
*                 FLAG ERROR -- VALUE OUT OF RANGE. 
*             OTHERWISE,
*               IF VALUE IS LESS THAN 256,
*                 PUT VALUE INTO DEVICE ENTRY.
* 
# 
*ENDIF
      ARRAY FDWORD [0:0] S(1);         # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM FDKWID U(0,0,9);          # KEYWORD I.D.                  #
        ITEM FDVLERR B(0,17,1);        # VALUE ERROR FLAG              #
        ITEM FDNAME C(0,18,7);         # CHARACTER STRING VALUE        #
        ITEM FDVAL U(0,18,42);         # INTEGER VALUE                 #
        END 
      ITEM FDLNUM;           # STATEMENT SOURCE LINE NUMBER            #
# 
****  PROC FLOWDEV - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECK IF VALUE IS WITHIN RANGE          #
        PROC NDLEM2;         # MAKE ENTRY IN PASS 2 ERROR FILE         #
        FUNC XCDD C(10);     # CONVERTS INTEGER TO DECIMAL DISPLAY CODE#
        FUNC XCHD C(10);     # CONERTS INTEGER TO HEX DISPLAY CODE     #
        END 
# 
****
# 
      DEF CONVERT1 # 3 #;    # SWITCH VALUE -- CONVERT AND ENTER 1 FNFV#
      DEF CONVERT2 # 4 #;    # SWITCH VALUE -- CONVERT AND ENTER 2 FNFV#
      DEF DIRECT1  # 1 #;    # SWITCH VALUE -- DIRECT ENTRY WITH 1 FNFV#
      DEF DIRECT2  # 2 #;    # SWITCH VALUE -- DIRECT ENTRY WITH 2 FNFV#
      DEF $NEXT # 0 #;       # SWITCH VALUE -- GOTO NEXT VALUE-DEC     #
      DEF MAX$PRU # 1920 #;  # NUMBER OF CHARACTERS IN THREE PRU-S     #
      DEF MAX$UBZ$CON # 1950 #;        # MAX CHAR COUNT FOR UBZ CONSOLE#
      ITEM CTEMP C(10);      # CHARACTER TEMPORARY                     #
      ITEM FDSTAT B;         # STATUS RETURNED BY NDLCKRG              #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY -- FOR STORING WC     #
      ITEM JMP$INDX;         # JUMP INDEX FOR SWITCH                   #
      ITEM MAX$SZ;           # MAXIMUM SIZE FOR VALUE                  #
      ITEM MULTIPLE;         # MULTIPLE BY WHICH TO CALCULATE NEW VALUE#
      ITEM VALUE;            # INTEGER VALUE TEMPORARY                 #
      ITEM VALUE2;           # INTEGER VALUE TEMPORARY                 #
      ARRAY ERROR$WORD [0:0] S(1);     # BUFFER WORD FOR ERROR MSG     #
        BEGIN 
        ITEM PARAM C(0,0,4) = ["    "];     # PARAMETER                #
        ITEM SLASH C(0,24,1) = ["/"]; 
        ITEM PVALUE C(0,30,5) = ["     "];  # VALUE                    #
        END 
      DEF MNFLW # 68 #; 
      DEF MXFLW # 73 #; 
      ARRAY FN$TABLE [MNFLW:MXFLW] S(1);
        BEGIN 
        ITEM FD$FN (0,0,60) = [FN"ABL",     # ABL -- FIELD NUMBER      #
                               FN"DBZ$MSB", # DBZ(MSB)                 #
                               FN"UBZ",     # UBZ                      #
                               FN"DBL",     # DBL                      #
                               FN"UBL",     # UBL                      #
                               FN"XBZ$MSB", # XBZ(MSB)                 #
                            ];
        END 
      SWITCH CHKJUMP NEXT,             # GO TO NEXT PARAMETER(EXIT)    #
                     D$ENTRY1,         # MAKE DIRECT ENTRY W/O CONVERT #
                     D$ENTRY2,         # MAKE DIRECT ENTRY WITH 2 FNFV #
                     C$ENTRY1,         # CONVERT VALUE -- ENTRY 1 FNFV #
                     C$ENTRY2;         # CONVERT VALUE -- ENTRY 2 FNFV #
      SWITCH FLOWJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  ,            , #         , DT       ,#
                                  ,            , # SDT     , TA       ,#
                      $ABL        , $DBZ       , # ABL     , DBZ      ,#
                      $UBZ        , $DBL       , # UBZ     , DBL      ,#
                      $UBL        , $XBZ       , # UBL     , XBZ      ,#
                                  ,            , # DO      , STREAM   ,#
                                  ,            , # HN      , AUTOLOG  ,#
                                  ,            , # AUTOCON , PRI      ,#
                                  ,            , # P90     , P91      ,#
                                  ,            , # P92     , P93      ,#
                                  ,            , # P94     , P95      ,#
                                  ,            , # P96     , P97      ,#
                                  ,            , # P98     , P99      ,#
                                  ,            , # AB      , BR       ,#
                                  ,            , # BS      , B1       ,#
                                  ,            , # B2      , CI       ,#
                                  ,            , # CN      , CT       ,#
                                  ,            , # DLC     , DLTO     ,#
                                  ,            , # DLX     , EP       ,#
                                  ,            , # IN      , LI       ,#
                                  ,            , # OP      , PA       ,#
                                  ,            , # PG      , PL       ,#
                                  ,            ; # PW      , SE        #
      CONTROL EJECT;
#                                                                      #
#                            FLOWDEV CODE BEGINS HERE                  #
#                                                                      #
      JMP$INDX = $NEXT;                # SET JUMP FOR SWITCH TO -NEXT- #
      GOTO FLOWJUMP[FDKWID[0]];        # GOTO APPROPRIATE PARAGRAPH    #
$ABL: 
      ABL$USED = TRUE;       # SET ABL SPECIFIED FLAG                  #
      IF NOT FDVLERR[0]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        JMP$INDX = DIRECT1;  # SET JUMP FOR DIRECT ENTRY               #
        END 
      GOTO CHECK; 
$DBL: 
      DBL$USED = TRUE;       # SET DBL SPECIFIED FLAG                  #
      IF NOT FDVLERR[0]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        JMP$INDX = DIRECT1;  # SET JUMP FOR DIRECT ENTRY               #
        END 
      GOTO CHECK; 
$DBZ: 
      DBZ$USED = TRUE;       # SET DBZ SPECIFIED FLAG                  #
      IF NOT FDVLERR[0]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$DT EQ DT"CON" OR       # IF DT IS CONSOLE, USER, OR    #
           CRNT$DT EQ DT"USER" OR      #   UNKNOWN                     #
           CRNT$DT EQ DT"UNKNOWN" 
           OR CRNT$TIP EQ TIP"USER"    # USER DEFINED TIPTYPES         #
        THEN
          BEGIN              # SET JUMP TO MAKE DIRECT ENTRY           #
          JMP$INDX = DIRECT2; 
          END 
        ELSE                 # DT MUST BE A PASSIVE DEVICE             #
          BEGIN 
          MULTIPLE = PRU$SZ;           # SET MULTIPLE TO PRU SIZE      #
          MAX$SZ = MAX$PRU;            # SET MAXIMUM SIZE FOR VALUE    #
          JMP$INDX = CONVERT2;         # SET JUMP TO CONVERT DBZ VALUE #
          END 
        END 
      GOTO CHECK; 
$UBL: 
      UBL$USED = TRUE;       # SET UBL SPECIFIED FLAG                  #
      IF NOT FDVLERR[0]      # VALUE IS O.K.                           #
      THEN
        BEGIN 
        JMP$INDX = DIRECT1;  # SET JUMP TO MAKE DIRECT ENTRY           #
        END 
      GOTO CHECK; 
$UBZ: 
      UBZ$USED = TRUE;       # SET UBZ SPECIFIED FLAG                  #
      IF NOT FDVLERR[0]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$DT EQ DT"CON"          # IF DT IS A CONSOLE            #
        AND CRNT$TIP NQ TIP"USER"      # AND TIPTYPE NOT USER DEFINED  #
        THEN
          BEGIN 
          IF FDVAL[0] LS 0 OR 
             FDVAL[0] GR 2000          # IF VALUE IS OUT OF RANGE      #
          THEN
            BEGIN            # FLAG ERROR -- VALUE OUT OF RANGE        #
            CTEMP = XCDD(FDVAL[0]); 
            NDLEM2(ERR100,FDLNUM,CTEMP);
            FDSTAT = FALSE;            # SET STATUS TO NO GOOD         #
            END 
          ELSE               # VALUE IS WITHIN RANGE                   #
            BEGIN 
            FDSTAT = TRUE;             # SET STATUS TO O.K.            #
            END 
          MULTIPLE = UBZ$CON;          # SET MULTIPLE TO UBZ CONSOLE   #
          MAX$SZ = MAX$UBZ$CON;        # SET MAXIMUM SIZE TO UBZ CON   #
          JMP$INDX = CONVERT1;         # SET JUMP TO CONVERT UBZ VALUE #
          END 
        ELSE                           # DT IS NOT A CONSOLE           #
          BEGIN 
          IF CRNT$DT NQ DT"USER" AND   # IF DT IS PASSIVE              #
             CRNT$DT NQ DT"UNKNOWN" 
             AND CRNT$TIP NQ TIP"USER" # AND NOT USER DEFINED TIPTYPE  #
          THEN
            BEGIN 
            IF FDVAL[0] LS 1 OR 
               FDVAL[0] GR 2043        # IF VALUE IS OUT OF RANGE      #
            THEN
              BEGIN          # FLAG ERROR -- VALUE OUT OF RANGE        #
              CTEMP = XCDD(FDVAL[0]); 
              NDLEM2(ERR100,FDLNUM,CTEMP);
              FDSTAT = FALSE;          # SET STATUS TO NO GOOD         #
              END 
            ELSE             # VALUE IS WITHIN RANGE                   #
              BEGIN 
              FDSTAT = TRUE;           # SET STATUS TO O.K.            #
              END 
            MULTIPLE = PRU$SZ;         # SET MULTIPLE TO PRU SIZE      #
            MAX$SZ = MAX$PRU;          # SET MAXIMUM SIZE IS CHARACTERS#
            JMP$INDX = CONVERT1;       # SET JUMP TO CONVERT UBZ VALUE #
            END 
          ELSE                         # DT MUST BE USER OR UNKNOWN    #
            BEGIN 
            IF FDVAL[0] LS 256         # VALUE MUST BE LESS THAN 256   #
            THEN
              BEGIN 
              JMP$INDX = DIRECT1;      # SET JUMP TO MAKE DIRECT ENTRY #
              END 
            ELSE             # VALUE IS TOO BIG                        #
              BEGIN          # FLAG ERROR -- VALUE OUT OF RANGE        #
              CTEMP = XCDD(FDVAL[0]); 
              NDLEM2(ERR100,FDLNUM,CTEMP);
              END 
            END 
          END 
        END 
      GOTO CHECK; 
$XBZ: 
      XBZ$USED = TRUE;       # SET XBZ SPECIFIED FLAG                  #
      IF NOT FDVLERR[0]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        JMP$INDX = DIRECT2;  # SET JUMP TO MAKE DIRECT ENTRY           #
        END 
      GOTO CHECK; 
#                                                                      #
CHECK:  
      GOTO CHKJUMP[JMP$INDX];          # JUMP TO TYPE OF ENTRY         #
D$ENTRY1:                              #   SPECIFIED ABOVE             #
      IF CRNT$TIP EQ TIP"USER"         # IF TIPTYPE IS USER DEFINED    #
      THEN
        BEGIN 
        USR$RANGE(FDVAL[0],USR$WID1,NUM"DEC",FDSTAT); 
        END 
      ELSE
        BEGIN 
        NDLCKRG(FDKWID[0],FDVAL[0],FDSTAT);   # CHECK FOR NORMAL RANGE #
        END 
      IF FDSTAT                        # IF VALUE IS WITHIN RANGE      #
      THEN
        BEGIN                          # MAKE FNFV PAIR ENTRY          #
        DEVFNFV(FD$FN[FDKWID[0]],FDVAL[0]); 
        END 
      GOTO NEXT$FLW;
D$ENTRY2: 
      IF CRNT$TIP EQ TIP"USER"         # IF TIPTYPE IS USER DEFINED    #
      THEN
        BEGIN 
        USR$RANGE(FDVAL[0],USR$WID2,NUM"DEC",FDSTAT); 
        END 
      ELSE
        BEGIN 
        NDLCKRG(FDKWID[0],FDVAL[0],FDSTAT);   # CHECK FOR NORMAL RANGE #
        END 
      IF FDSTAT                        # IF VALUE IS WITHIN RANGE      #
      THEN
        BEGIN                          # MAKE FNFV PAIR ENTRY FOR      #
        VALUE = FDVAL[0]; 
        VALUE2 = B<44,8>VALUE;         # MSB OF VALUE                  #
        DEVFNFV(FD$FN[FDKWID[0]],VALUE2); 
        VALUE2 = B<52,8>VALUE;         # LSB OF VALUE                  #
        DEVFNFV(FD$FN[FDKWID[0]]+1,VALUE2); 
        END 
      GOTO NEXT$FLW;
C$ENTRY1: 
      IF FDSTAT                        # IF VALUE IS WITHIN RANGE      #
      THEN
        BEGIN 
        IF FDVAL[0] LQ MAX$SZ          # IF VALUE IS NOT GREATER THAN  #
        THEN                           #   MAXIMUM SIZE                #
          BEGIN 
          VALUE = FDVAL[0];            # SET VALUE TO BE CONVERTED TO  #
          END                          #   VALUE SPECIFIED             #
        ELSE                           # VALUE IS GREATER THAN MAXIMUM #
          BEGIN 
          VALUE = MAX$SZ;              # SET VALUE TO BE CONVERTED TO  #
          END                          #   MAXIMUM SIZE                #
        VALUE2 = 0; 
        FOR I=VALUE STEP -MULTIPLE WHILE I GR 0 
        DO                             # CONVERT VALUE                 #
          BEGIN 
          VALUE2 = VALUE2 + 1;
          END                          # MAKE FNFV PAIR ENTRY          #
        DEVFNFV(FD$FN[FDKWID[0]],VALUE2); 
        GOTO CHK$WARN;
        END 
      ELSE                   # VALUE NOT IN RANGE                      #
        BEGIN 
        GOTO NEXT$FLW;
        END 
C$ENTRY2: 
      NDLCKRG(FDKWID[0],FDVAL[0],FDSTAT); 
      IF FDSTAT                        # IF VALUE IS WITHIN RANGE      #
      THEN
        BEGIN 
        IF FDVAL[0] LQ MAX$SZ          # IF VALUE IS NOT GREATER THAN  #
        THEN                           #   MAXIMUM SIZE                #
          BEGIN 
          VALUE = FDVAL[0];            # SET VALUE TO BE CONVERTED TO  #
          END                          #   VALUE SPECIFIED             #
        ELSE                           # VALUE IS GREATER THAN MAXIMUM #
          BEGIN 
          VALUE = MAX$SZ;              # SET VALUE TO BE CONVERTED TO  #
          END                          #   MAXIMUM SIZE                #
        VALUE2 = 0; 
        FOR I=VALUE STEP -MULTIPLE WHILE I GR 0 
        DO                             # CONVERT VALUE                 #
          BEGIN 
          VALUE2 = VALUE2 + 1;
          END                          # MAKE FNFV PAIR ENTRIES FOR    #
        VALUE = B<44,8>VALUE2;         #   MSB OF CONVERTED VALUE      #
        DEVFNFV(FD$FN[FDKWID[0]],VALUE);
        VALUE = B<52,8>VALUE2;         #   LSB OF CONVERTED VALUE      #
        DEVFNFV(FD$FN[FDKWID[0]]+1,VALUE);
        GOTO CHK$WARN;
        END 
      ELSE                   # VALUE NOT IN RANGE                      #
        BEGIN 
        GOTO NEXT$FLW;
        END 
CHK$WARN: 
      IF FDVAL[0] NQ (MULTIPLE * VALUE2)
      THEN                             # IF VALUE IS NOT A MULTIPLE    #
        BEGIN                # FLAG WARNING -- VALUE WAS ROUNDED       #
        PARAM[0] = KWDNAME[FDKWID[0]]; # PUT PARAMETER NAME AND        #
        CTEMP = XCDD(MULTIPLE * VALUE2);
        PVALUE[0] = C<5,5>CTEMP;       # VALUE IN ERROR FILE           #
        NDLEM2(ERR137,FDLNUM,ERROR$WORD); 
        END 
NEXT$FLW:   
      RETURN;                # **** RETURN ****                        #
      END # FLOWDEV # 
      CONTROL EJECT;
      PROC GENDEV(GDWORD,GDLNUM); 
      BEGIN 
*IF,DEF,IMS 
# 
**    GENDEV - CHECKS GENERAL PARAMETERS ON THE DEVICE STMT.
* 
*     D.K. ENDO    81/11/20 
* 
*     THE PROCEDURE DOES CHECKING OF PARAMETER THAT ARE COMMON TO ALL 
*     TIPTYPES. 
* 
*     PROC GENDEV(GDWORD,GDLNUM)
* 
*     ENTRY        GDWORD = VALUE DECLARATION ENTRY.
*                  GDLNUM = CURRENT SOURCE LINE NUMBER. 
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     IF VALUE IS O.K., 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(P90,P91,...,P99):  
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT VALUE INTO DEVICE ENTRY.
*         CASE 2(PRI,DI): 
*           IF VALUE IS -YES-,
*             PUT VALUE INTO DEVICE ENTRY.
*         CASE 3(PW): 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE 
*             PUT VALUE INTO DEVICE ENTRY.
*         CASE 4(MC): 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT VALUE INTO DEVICE ENTRY.
* 
# 
*ENDIF
      DEF HEX$00 # X"00" #;            # VALUE HEX 00                  #
      DEF HEX$03 # X"03" #;            # VALUE HEX 03                  #
      DEF HEX$1F # X"1F" #;            # VALUE HEX 1F                  #
      DEF HEX$21 # X"21" #;            # VALUE HEX 21                  #
      DEF HEX$2F # X"2F" #;            # VALUE HEX 2F                  #
      DEF HEX$3A # X"3A" #;            # VALUE HEX 3A                  #
      DEF HEX$3C # X"3C" #;            # VALUE HEX 3C                  #
      DEF HEX$3E # X"3E" #;            # VALUE HEX 3E                  #
      DEF HEX$40 # X"40" #;            # VALUE HEX 40                  #
      DEF HEX$5B # X"5B" #;            # VALUE HEX 5B                  #
      DEF HEX$60 # X"60" #;            # VALUE HEX 60                  #
      DEF HEX$7B # X"7B" #;            # VALUE HEX 7B                  #
      DEF HEX$7E # X"7E" #;            # VALUE HEX 7E                  #
      ARRAY GDWORD [0:0] S(1);         # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM GDKWID U(0,0,9);          # KEYWORD I.D.                  #
        ITEM GDVLERR B(0,17,1);        # VALUE ERROR FLAG              #
        ITEM GDVAL (0,18,42);          # INTEGER VALUE                 #
        ITEM GDNAME C(0,18,7);         # CHARACTER VALUE               #
        END 
      ITEM GDLNUM;                     # STATEMENT LINE NUMBER         #
# 
****  PROC GENDEV - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECKS IF VALUE IS WITHIN RANGE         #
        FUNC XCDD C(10);     # FUNCTION TO CONVERT BINARY TO DISPLAY   #
        END 
# 
****
# 
      ITEM GDSTAT B;         # RETURNED STATUS FROM NDLCKRG            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      SWITCH GENDJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , $DI        , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , #         ,          ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  ,            , #         , DT       ,#
                                  ,            , # SDT     , TA       ,#
                                  ,            , # ABL     , DBZ      ,#
                                  ,            , # UBZ     , DBL      ,#
                                  ,            , # UBL     , XBZ      ,#
                                  ,            , # DO      , STREAM   ,#
                                  ,            , # HN      , AUTOLOG  ,#
                                  , PRI        , # AUTOCON , PRI      ,#
                      USR$PARAM   , USR$PARAM  , # P90     , P91      ,#
                      USR$PARAM   , USR$PARAM  , # P92     , P93      ,#
                      USR$PARAM   , USR$PARAM  , # P94     , P95      ,#
                      USR$PARAM   , USR$PARAM  , # P96     , P97      ,#
                      USR$PARAM   , USR$PARAM  , # P98     , P99      ,#
                                  ,            , # AB      , BR       ,#
                                  ,            , # BS      , B1       ,#
                                  ,            , # B2      , CI       ,#
                                  ,            , # CN      , CT       ,#
                                  ,            , # DLC     , DLTO     ,#
                                  ,            , # DLX     , EP       ,#
                                  ,            , # IN      , LI       ,#
                                  ,            , # OP      , PA       ,#
                                  ,            , # PG      , PL       ,#
                      PW          ,            , # PW      , SE        #
                                  ,            , # FA      , XLC      ,#
                                  ,            , # XLX     , XLTO     ,#
                                  ,            , # ELO     , ELX      ,#
                                  ,            , # ELR     , EBO      ,#
                                  ,            , # EBR     , CP       ,#
                                  ,            , # IC      , OC       ,#
                                  ,            , # LK      , EBX      ,#
                                  , MC         , #         , MC        #
                                  ,            , # XLY     , EOF      ,#
                                  ,            , # PAD     , RTS      ,#
                       MCI        , MLI        ; # MCI     , MLI       #
      CONTROL EJECT;
#                                                                      #
#                            GENDEV CODE BEGINS HERE                   #
#                                                                      #
      IF NOT GDVLERR[0]                # IF VALUE IS O.K.              #
      THEN
        BEGIN 
        GOTO GENDJUMP[GDKWID[0]]; 
USR$PARAM:                             # CHECK RANGE OF USER PRARMETER #
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(GDVAL[0],USR$WID1,NUM"HEX",GDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(GDKWID[0],GDVAL[0],GDSTAT);  # CHECK FOR NORMAL RANGE#
          END 
        IF GDSTAT                      # IF WITHIN RANGE               #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY          #
          DEVFNFV(GDKWID[0]+10,GDVAL[0]); 
          END 
        GOTO NEXT$GEN;
PRI:  
        IF GDNAME[0] EQ "YES"          # IF VALUE IS -YES-             #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY          #
          DEVFNFV(FN"PRI",TRUE);
          END 
        GOTO NEXT$GEN;
$DI:  
        IF GDNAME[0] EQ "YES"          # IF VALUE IS -YES-             #
        THEN
          BEGIN 
          DEST[CRNT$DEV + 2] = TRUE;   # SET STATUS FLAG IN ENTRY      #
          END 
        GOTO NEXT$GEN;
PW: 
        IF GDNAME[0] NQ "CCP"          # IF VALUE IS NOT -CCP-         #
        THEN
          BEGIN                        # CHECK RAMGE FOR PW VALUE      #
          IF CRNT$TIP EQ TIP"USER"     # IF TIPTYPE IS USER DEFINED    #
          THEN
            BEGIN 
            USR$RANGE(GDVAL[0],USR$WID1,NUM"DEC",GDSTAT); 
            END 
          ELSE
            BEGIN 
            NDLCKRG(GDKWID[0],GDVAL[0],GDSTAT);  # CHECK FOR NORMAL    #
                                                 # RANGE               #
            IF GDSTAT                    # IF CHECK STATUS IS O.K.     #
            THEN
              BEGIN 
              IF CRNT$TC EQ TC"$3780" OR      # FURTHER CHECK FOR 3780 #
                 CRNT$TC EQ TC"$2780"         # OR 2780                #
              THEN
                BEGIN 
                IF CRNT$DT EQ DT"LP"     # IF LINEPRINTER              #
                THEN
                  BEGIN 
                  IF GDVAL[0] LS MPW$2780$LP OR 
                     GDVAL[0] GR MXPW$2780$LP 
                  THEN
                    BEGIN 
                    NDLEM2(ERR100,STLNUM[0], XCDD(GDVAL[0])); 
                    GDSTAT = FALSE; 
                    END 
                  END 
                END 
              END 
            END 
          IF GDSTAT                    # IF WITHIN RANGE               #
          THEN
            BEGIN                      # MAKE FNFV PAIR ENTRY          #
            DEVFNFV(FN"PW",GDVAL[0]); 
            END 
          END 
        GOTO NEXT$GEN;
MCI:  
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(GDVAL[0],USR$WID1,NUM"DEC",GDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(GDKWID[0],GDVAL[0],GDSTAT);  # CHECK FOR NORMAL RANGE#
          END 
        IF GDSTAT                      # IF WITHIN RANGE               #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY          #
          DEVFNFV(FN"MCI",GDVAL[0]);
          END 
        GOTO NEXT$GEN;
  
  
MLI:  
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(GDVAL[0],USR$WID1,NUM"DEC",GDSTAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(GDKWID[0],GDVAL[0],GDSTAT);  # CHECK FOR NORMAL RANGE#
          END 
        IF GDSTAT                      # IF WITHIN RANGE               #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY          #
          DEVFNFV(FN"MLI",GDVAL[0]);
          END 
        GOTO NEXT$GEN;
  
MC: 
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYE IS USER             #
        THEN
          BEGIN 
        USR$RANGE(GDVAL[0],USR$WID1,NUM"HEX",GDSTAT); 
          END 
        ELSE                           # IF OTHER TIPTYPE              #
          BEGIN 
          GDSTAT = TRUE;               # PRSET GDSATT TO TRUE          #
          IF NOT ((GDVAL[0] EQ  HEX$00) OR
                  (GDVAL[0] GQ HEX$03 AND GDVAL[0] LQ HEX$1F) OR
                  (GDVAL[0] GQ HEX$21 AND GDVAL[0] LQ HEX$2F) OR
                  (GDVAL[0] GQ HEX$3A AND GDVAL[0] LQ HEX$3C) OR
                  (GDVAL[0] GQ HEX$3E AND GDVAL[0] LQ HEX$40) OR
                  (GDVAL[0] GQ HEX$5B AND GDVAL[0] LQ HEX$60) OR
                  (GDVAL[0] GQ HEX$7B AND GDVAL[0] LQ HEX$7E) 
                  ) 
          THEN
            BEGIN 
            GDSTAT  = FALSE;           # SET GDSTAT  FLAG TO FALSE     #
            NDLEM2(ERR100,STLNUM[0],XCHD(GDVAL[0])); # PASS ERROR      #
            END 
          END 
        IF GDSTAT                  # IF STATUS IS O.K.                 #
        THEN
          BEGIN                        # PUT VALUE IN DEVICE ENTRY     #
          DEVFNFV(FN"MC",GDVAL[0]); 
          END 
        GOTO NEXT$GEN;
NEXT$GEN: 
        END 
      RETURN;                # **** RETURN ****                        #
      END # GENDEV #
      CONTROL EJECT;
      PROC HSPDEV;
      BEGIN 
*IF,DEF,IMS 
# 
**    HSPDEV - CHECK DEVICE STATEMENT FOR PARAMETERS LEGAL FOR HASP TIP.
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS PARAMETER TO BE VALID FOR HASP DEVICES. 
* 
*     PROC HSPDEV 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(DI,PRI,PW,P90,P91,...,P99):  
*           CHECK GENERAL DEVICE PARAMETER. 
*         CASE 2(UBZ,DBL,XBZ):  
*           CHECK FLOW CONTROL PARAMETER. 
*         CASE 3(HN,AUTOLOG,AUTOCON,B1,B2,CN,CT,PG,PL): 
*           IF DT IS CONSOLE, 
*           THEN, 
*             CHECK CONSOLE PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- PARAMETER INVALID WITH DT SPECIFIED.
*         CASE 4(SDT):  
*           IF DT IS NOT CONSOLE OR CARD PUNCH
*             OR SDT VALUE IS SDT12, SDT13, SDT14 OR SDT15, 
*           THEN, 
*             CHECK BATCH DEVICE PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAMETER INVALID WITH DT SPECIFIED.
*         CASE 5(DO,STREAM):  
*           IF DT IS NOT CONSOLE, 
*           THEN, 
*             CHECK BATCH DEVICE PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAMETER NOT ALLOWED WITH DT SPECIFIED.
*         CASE 6(TA,AL,BR,BS,CI,DLC,DLTO,DLX,EP,IN,LI,OP,PA,SE,XLY):  
*           FLAG ERROR -- PARAMETER NOT ALLOWED.
*         CASE 7(ABL):  
*           IF DT IS CONSOLE, 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAMETER NOT ALLOWED WITH DT SPECIFIED.
*         CASE 8(DBZ):  
*           IF DT IS NOT CARD READER, 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAMETER NOT ALLOWED WITH DT SPECIFIED.
*         CASE 9(UBL):  
*           IF DT IS NOT CONSOLE AND WITHIN RANGE 1-7 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAMETER NOT ALLOWED WITH DT SPECIFIED.
*     IF DT IS CONSOLE, 
*     THEN, 
*       IF ABL WAS NOT SPECIFIED, 
*         DEFAULT ABL VALUE INTO DEVICE ENTRY.
*     OTHERWISE,
*       IF DO WAS NOT SPECIFIED,
*         IF THIS IS FIRST DEVICE FOR THIS DT 
*         THEN, 
*           DEFAULT DO VALUE BY ONE.
*           SET BIT IN BIT MAP FOR DO VALUE.
*         OTHERWISE,
*           FLAG ERROR -- REQUIRED PARAMETER MISSING. 
*       IF STREAM WAS NOT SPECIFIED AND LINE IS NOT AUTO-REC, 
*         FLAG ERROR -- REQUIRED PARAMETER MISSING. 
*     IF DBL,UBZ WAS NOT SPECIFIED, 
*       DEFAULT VALUE BY DT.
*     IF UBL WAS NOT SPECIFIED AND DT IS CONSOLE OR CARD READER,
*       DEFAULT UBL VALUE BY DT.
*     IF DBZ WAS NOT SPECIFIED AND DT IS NOT CARD READER, 
*       DEFAULT DBZ VALUE BY DT.
*     IF XBZ WAS NOT SPECIFIED, 
*       DEFAULT XBZ VALUE INTO DEVICE ENTRY.
*     CHECK IS B1,B2,CN,CT ARE UNIQUE,
*     IF NOT UNIQUE,
*       FLAG ERROR -- B1,B2,CN,CT MUST BE UNIQUE. 
* 
# 
*ENDIF
# 
****  PROC HSPDEV - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        FUNC XCDD C(10);     # CONVERTS INTEGER TO CHARACTER           #
        END 
# 
****
# 
      DEF ABL$DEF # 2 #;     # DEFAULT ABL VALUE                       #
      DEF B1$DEF # X"3A" #;  # DEFAULT B1 VALUE                        #
      DEF B2$DEF # X"29" #;  # DEFAULT B2 VALUE                        #
      DEF CN$DEF # X"28" #;  # DEFAULT CN VALUE                        #
      DEF CT$DEF # X"25" #;  # DEFAULT CT VALUE                        #
      DEF DO$DEF # 1 #;      # DEFAULT -DO- VALUE                      #
      DEF STRM$DEF # 1 #;    # DEFAULT STREAM VALUE                    #
      DEF UBL$DEF # 7 #;     # DEFAULT UBL VALUE                       #
      DEF XBZ$DEF # 400 #;   # DEFAULT XBZ VALUE                       #
      DEF PL$DEF # 64 #;     # DEFAULT PAGE LENGTH VALUE               #
      ITEM CHARVAL C(10);    # SCRATCH CHARACTER VARIABLE              #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM J;                # SCRATCH ITEM                            #
      ITEM VALUE;            # INTEGER VALUE TEMPORARY                 #
      DEF MXDT # 5 #; 
      ARRAY FC$DEF$TABLE [1:MXDT] S(2); 
        BEGIN 
        ITEM DBL$DEF (0,0,30) = [2,    # CONSOLE -- DBL DEFAULT        #
                                 2,    # CARD READER                   #
                                 1,    # LINE PRINTER                  #
                                 1,    # CARD PUNCH                    #
                                 1,    # PLOTTER                       #
                                ];
        ITEM DBZ$DEF (0,30,30) = [400, # CONSOLE -- DEFAULT DBZ        #
                                    0, # CARD READER (N/A)             #
                                    1, # LINE PRINTER                  #
                                    1, # CARD PUNCH                    #
                                    1, # PLOTTER                       #
                                 ]; 
        ITEM UBZ$DEF (1,30,30) = [1,   # CONSOLE -- UBZ DEFAULT        #
                                  1,   # CARD READER                   #
                                  2,   # LINE PRINTER                  #
                                  2,   # CARD PUNCH                    #
                                  2    # PLOTTER                       #
                                 ]; 
        END 
      SWITCH HSPDJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , GEN$PARAM  , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  , NEXT$HSP   , #         , DT       ,#
                      SDT         , ILLEGAL    , # SDT     , TA       ,#
                      ABL         , DBZ        , # ABL     , DBZ      ,#
                      UBZ$UBL     , FLOW$PARAM , # UBZ     , DBL      ,#
                      UBZ$UBL     , FLOW$PARAM , # UBL     , XBZ      ,#
                      ORDINAL     , ORDINAL    , # DO      , STREAM   ,#
                      CON$PARAM   ,            , # HN      , AUTOLOG  ,#
                      CON$PARAM   , GEN$PARAM  , # AUTOCON , PRI      ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  , # P98     , P99      ,#
                      ILLEGAL     , ILLEGAL    , # AB      , BR       ,#
                      ILLEGAL     , CON$PARAM  , # BS      , B1       ,#
                      CON$PARAM   , ILLEGAL    , # B2      , CI       ,#
                      CON$PARAM   , CON$PARAM  , # CN      , CT       ,#
                      ILLEGAL     , ILLEGAL    , # DLC     , DLTO     ,#
                      ILLEGAL     , ILLEGAL    , # DLX     , EP       ,#
                      ILLEGAL     , ILLEGAL    , # IN      , LI       ,#
                      ILLEGAL     , ILLEGAL    , # OP      , PA       ,#
                      CON$PARAM   , PL$PARAM   , # PG      , PL       ,#
                      GEN$PARAM   , ILLEGAL    , # PW      , SE       ,#
                      ILLEGAL     , ILLEGAL    , # FA     , XLC       ,#
                      ILLEGAL     , ILLEGAL    , # XLX    , XLTO      ,#
                      ILLEGAL     , ILLEGAL    , # ELO    , ELX       ,#
                      ILLEGAL     , ILLEGAL    , # ELR    , EBO       ,#
                      ILLEGAL     , ILLEGAL    , # EBR    , CP        ,#
                      ILLEGAL     , ILLEGAL    , # IC     , OC        ,#
                      CON$PARAM   , ILLEGAL    , # LK      , EBX      ,#
                      CON$PARAM   , GEN$PARAM  , # HD      , MC       ,#
                      ILLEGAL     ,            , # XLY     , EOF      ,#
                                  , ILLEGAL    , # PAD     , RTS       #
                      ILLEGAL     , ILLEGAL    ; # MCI     , MLI      ,#
  
      CONTROL EJECT;
#                                                                      #
#                            HSPDEV CODE BEGINS HERE                   #
#                                                                      #
      CRNT$CC[CC"CN"] = CN$DEF;        # CN -- DEFAULT CONTROL CHAR    #
      CRNT$CC[CC"B1"] = B1$DEF;        # B1                            #
      CRNT$CC[CC"B2"] = B2$DEF;        # B2                            #
      CRNT$CC[CC"CT"] = CT$DEF;        # CT                            #
      FOR I=3 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE-DECLARATION ENTRY        #
        BEGIN 
        GOTO HSPDJUMP[STKWID[I]];      # GOTO APPROPRIATE PARAGRAPH    #
GEN$PARAM:  
        GENDEV(STWORD[I],STLNUM[0]);   # CHECK GENERAL PARAMETER       #
        TEST I; 
FLOW$PARAM: 
        FLOWDEV(STWORD[I],STLNUM[0]);  # CHECK FLOW CONTROL PARAMETER  #
        TEST I; 
CON$PARAM:  
        IF CRNT$DT EQ DT"CON"          # IF DT IS CONSOLE              #
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                           # DT IS NOT CONSOLE             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
PL$PARAM: 
        IF CRNT$DT EQ DT"CON" OR       # IF DT IS CONSOLE              #
           CRNT$DT EQ DT"LP"           # OF DT IS LINEPRINTER          #
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                           # DT IS NOT CONSOLE             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
SDT:  
        IF(CRNT$DT NQ DT"CON" AND     # IF DT IS NOT CON OR CP        # 
           CRNT$DT NQ DT"CP" ) OR 
           ( STVALNAM[I] EQ "SDT12" OR  # IF SDT12 - SDT15 USED       # 
             STVALNAM[I] EQ "SDT13" OR
             STVALNAM[I] EQ "SDT14" OR
             STVALNAM[I] EQ "SDT15" 
           )
        THEN
          BEGIN                        # CHECK BATCH DEVICE            #
          BTCHDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS CONSOLE OR CARD PUNCH   #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
ORDINAL:  
        IF CRNT$DT NQ DT"CON"          # IF DT IS NOT CONSOLE          #
        THEN
          BEGIN                        # CHECK BATCH PARAMETER         #
          BTCHDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS CONSOLE                 #
          BEGIN 
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
ILLEGAL:                     # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS LINE IS AUTO-SYNC               #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
ABL:  
        IF CRNT$DT EQ DT"CON"          # IF DT IS CONSOLE              #
        THEN
          BEGIN                        # CHECK FLOW CONTROL PARAMETER  #
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS NOT CONSOLE             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
DBZ:  
        IF CRNT$DT NQ DT"CR"           # IF DT IS NOT CARD READER      #
        THEN
          BEGIN                        # CHECK FLOW CONTROL PARAMETER  #
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS CARD READER             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
UBZ$UBL:                     # IF DT IS CONSOLE, CARD READER, LINE     #
                             #   PRINTER, CARD PUNCH, OR PLOTTER       #
        IF CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"CR" OR 
           CRNT$DT EQ DT"LP"  OR CRNT$DT EQ DT"CP" OR 
           CRNT$DT EQ DT"PL"
        THEN
          BEGIN 
          IF STKWID[I] EQ KID"UBZ"     # IF UBZ PARAMETER              #
          THEN
            BEGIN 
            FLOWDEV(STWORD[I],STLNUM[0]); 
            END 
          ELSE
            BEGIN                      # ELSE, UBL PARAMETER           #
            IF  CRNT$DT EQ  DT"CON" 
            THEN
              BEGIN                    # CONSOLE DEVICES  1 <= UBL <=31#
              FLOWDEV(STWORD[I],STLNUM[0]); 
              END 
            ELSE
              BEGIN                    # PASSIVE DEVICE UBL            #
              IF  (STVALNUM[I] GQ 1 AND STVALNUM[I] LQ 7) 
              THEN                     #   1<= UBL <= 7                #
                BEGIN 
                FLOWDEV(STWORD[I],STLNUM[0]); 
                END 
              ELSE
                BEGIN 
                CHARVAL=XCDD(STVALNUM[I]);
                NDLEM2(ERR100,STLNUM[0],CHARVAL); 
                END 
              END 
            END 
          END 
        ELSE
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
NEXT$HSP: 
        END 
      IF CRNT$DT EQ DT"CON"            # IF DT IS CONSOLE              #
      THEN
        BEGIN 
        IF NOT AUTO$REC 
        THEN                 # IF THIS IS NOT ON AN AUTO-REC LINE      #
          BEGIN 
          DEA2[CRNT$DEV + 2] = STRM$DEF; # DEFAULT STREAM VALUE FOR CON#
          END 
        IF NOT ABL$USED                # IF ABL NOT SPECIFIED          #
        THEN
          BEGIN 
          DEVFNFV(FN"ABL",ABL$DEF); 
          END 
        END 
      ELSE                             # DT IS PASSIVE DEVICE          #
        BEGIN 
        IF NOT DO$USED                 # IF -DO- NOT SPECIFIED         #
        THEN
          BEGIN 
          IF FIRST$DT[CRNT$DT]         # IF FIRST DEVICE FOR THIS DT   #
          THEN
            BEGIN 
            DEVFNFV(FN"DO$",DO$DEF);   # PUT DEFAULT DO VALUE FOR DEV  #
            FIRST$DT[CRNT$DT] = FALSE; # CLEAR FLAG FOR DT             #
            END 
          ELSE                         # NOT FIRST DEVICE FOR THIS DT  #
            BEGIN            # FLAG ERROR -- REQUIRED PARAMETER MISSING#
            NDLEM2(ERR103,STLNUM[0],"DO");
            END 
          END 
        IF NOT STREAM$USED AND         # IF STREAM NOT SPECIFIED       #
           NOT AUTO$REC                #   AND NOT AUTO-REC LINE       #
        THEN
          BEGIN              # FLAG ERROR -- REQUIRED PARAMETER MISSING#
          NDLEM2(ERR103,STLNUM[0],"STREAM");
          END 
        END 
      IF NOT DBL$USED                  # IF DBL NOT SPECIFIED          #
      THEN
        BEGIN 
        DEVFNFV(FN"DBL",DBL$DEF[CRNT$DT]);
        END 
      IF NOT UBL$USED               # IF UBL NOT SPECIFIED          # 
      THEN
        BEGIN 
        DEVFNFV(FN"UBL",UBL$DEF); 
        END 
      IF NOT DBZ$USED AND              # IF DBZ NOT SPECIFIED  AND     #
         CRNT$DT NQ DT"CR"             #   DT IS NOT A CARD READER     #
      THEN
        BEGIN 
        VALUE = DBZ$DEF[CRNT$DT]; 
        J = B<44,8>VALUE;    # MSB OF DEFAULT DBZ                      #
        DEVFNFV(FN"DBZ$MSB",J); 
        J = B<52,8>VALUE;    # LSB OF DEFAULT DBZ                      #
        DEVFNFV(FN"DBZ$LSB",J); 
        END 
      IF NOT UBZ$USED AND              # IF UBZ NOT SPECIFIED          #
      (CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"CR") 
      THEN
        BEGIN 
        DEVFNFV(FN"UBZ",UBZ$DEF[CRNT$DT]);
        END 
      IF NOT XBZ$USED                  # IF XBZ NOT SPECIFIED          #
      THEN
        BEGIN 
        VALUE = XBZ$DEF;
        J = B<44,8>VALUE;              # MSB OF DEFAULT XBZ            #
        DEVFNFV(FN"XBZ$MSB",J); 
        J = B<52,8>VALUE;            # LSB OF DEFAULT XBZ            #
        DEVFNFV(FN"XBZ$LSB",J); 
        END 
      IF NOT PL$USED AND               # IF PL NOT SPECIFIED           #
         CRNT$DT EQ DT"LP"             # DEVICE IS LINEPRINTER         #
      THEN
        BEGIN 
        DEVFNFV(FN"PL",PL$DEF); 
        END 
      FOR I=CC"CN" STEP 1 UNTIL CC"CT" - 1
      DO                               # CHECK UNIQUENESS OF CHARS     #
        BEGIN 
        FOR J=I+1 STEP 1 UNTIL CC"CT" 
        DO
          BEGIN 
          IF CRNT$CC[I] EQ CRNT$CC[J] 
          THEN
            BEGIN            # FLAG ERROR -- VALUE IS NOT UNIQUE       #
            NDLEM2(ERR132,STLNUM[0]," "); 
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # HSPDEV #
      CONTROL EJECT;
      PROC MBDEV(MBWORD,MBLNUM);
      BEGIN 
*IF,DEF,IMS 
# 
**    MBDEV - CHECK MODE4/BSC PARAMETER FOR DEVICE STATEMENT. 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS PARAMETERS THAT ARE COMMON TO MODE4 AND HASP
*     DEVICES.
* 
*     PROC MBDEV(MBWORD,MBLNUM) 
* 
*     ENTRY        MBWORD = VALUE DECLARATION ENTRY.
*                  MBLNUM = CURRENT SOURCE LINE NUMBER. 
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     IF VALUE IS O.K.
*       IF VALUE IS -AUTOREC- 
*       THEN, 
*         IF LINE IS NOT AUTO-REC,
*           FLAG ERROR -- VALUE INVALID ON FIXED LINES. 
*       OTHERWISE,
*         IF DT IS USER OR UNKNOWN, 
*         THEN, 
*           PUT VALUE IS DEVICE ENTRY.
*       OTHERWISE,
*         IF TIPTYPE IS BSC,
*         THEN, 
*           IF VALUE IS WITHIN RANGE, 
*           THEN, 
*             PUT VALUE IS DEVICE ENTRY.
*           OTHERWISE,
*             FLAG ERROR -- VALUE OUT OF RANGE. 
*         OTHERWISE,
*           IF TIPTYPE IS MODE4,
*           THEN, 
*             IF STIP IS M4A, 
*             THEN, 
*               IF VALUE IS 60 HEX, 
*               THEN, 
*                 PUT VALUE IN DEVICE ENTRY.
*               OTHERWISE,
*                 FLAG ERROR -- VALUE OUT OF RANGE. 
*             OTHERWISE,
*               IF STIP IS M4C, 
*               THEN, 
*                 IF VALUE IS IN RANGE, 
*                 THEN, 
*                   PUT VALUE IN DEVICE ENTRY.
*                   IF LINE IS NOT AUTO-REC 
*                     CHECK IF VALUE IS UNIQUE. 
*                     IF NOT UNIQUE,
*                       FLAG ERROR -- DUPLICATE TA VALUE. 
*                 OTHERWISE,
*                   FLAG ERROR -- VALUE OUT OF RANGE. 
*               OTHERWISE,
*                 PUT VALUE IN DEVICE ENTRY.
*             OTHERWISE,
*               IF TIPTYPE IS 3270, 
*               THEN
*                 IF VALUE IS WITHIN RANGE, 
*                 THEN
*                   PUT VALUE IN DEVICE ENTRY.
*               OTHERWISE,
*                 PUT VALUE IN DEVICE ENTRY.
* 
# 
*ENDIF
      ARRAY MBWORD [0:0] S(1);         # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM MBKWID U(0,0,9);          # KEYWORD I.D.                  #
        ITEM MBVLERR B(0,17,1);        # VALUE ERROR FLAG              #
        ITEM MBNAME C(0,18,7);         # CHARACTER VALUE               #
        ITEM MBVAL (0,18,42);          # INTEGER VALUE                 #
        END 
      ITEM MBLNUM;           # STATEMENT SOURCE LINE NUMBER            #
# 
****  PROC MBDEV - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        FUNC XCHD C(10);     # CONVERTS INTEGER TO HEX DISPLAY CODE    #
        END 
# 
****
# 
      ITEM CTEMP C(10);      # CHARACTER TEMPORARY                     #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      CONTROL EJECT;
#                                                                      #
#                            MBDEV CODE BEGINS HERE                    #
#                                                                      #
      TA$USED = TRUE;        # SET TA SPECIFIED FLAG                   #
      IF NOT MBVLERR[0]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF MBNAME[0] NQ "AUTOREC"      # IF VALUE IS NOT -AUTOREC-     #
        THEN
          BEGIN 
          IF CRNT$DT NQ DT"USER" AND   # IF DT IS NOT USER OR UNKNOWN  #
             CRNT$DT NQ DT"UNKNOWN" 
          THEN
            BEGIN 
            IF CRNT$TIP EQ TIP"BSC"    # IF TIPTYPE IS -BSC-           #
            THEN
              BEGIN 
              IF MBVAL[0] GQ 2 AND     # IF TA VALUE IS WITHIN RANGE   #
                 MBVAL[0] LQ 3
              THEN
                BEGIN                  # MAKE ENTRY IN LINE RECORD     #
                DEA2[CRNT$DEV + 2] = MBVAL[0];
                END 
              ELSE                     # TA VALUE NOT IN RANGE FOR BSC #
                BEGIN        # FLAG ERROR -- VALUE OUT OF RANGE        #
                CTEMP = XCHD(MBVAL[0]); 
                NDLEM2(ERR100,MBLNUM,CTEMP);
                END 
              END 
            ELSE IF CRNT$TIP EQ TIP"MODE4"
            THEN
              BEGIN                    # IF STIP IS -M4A-              #
              IF CRNT$STIP EQ STIP"M4A" 
              THEN
                BEGIN                  # IF TA IS CORRECT VALUE        #
                IF MBVAL[0] EQ X"60"
                THEN
                  BEGIN                # PUT VALUE IN LINE RECORD      #
                  DEA2[CRNT$DEV + 2] = MBVAL[0];
                  END 
                ELSE                   # TA VALUE NOT VALID            #
                  BEGIN      # FLAG ERROR -- VALUE OUT OF RANGE        #
                  CTEMP = XCHD(MBVAL[0]); 
                  NDLEM2(ERR100,MBLNUM,CTEMP);
                  END 
                END 
              ELSE                     # STIP IS NOT -M4A-             #
                BEGIN                  # IF STIP IS -M4C-              #
                IF CRNT$STIP EQ STIP"M4C" 
                THEN
                  BEGIN                # IF VALUE IS WITHIN RANGE      #
                  IF MBVAL[0] GQ X"61" AND
                     MBVAL[0] LQ X"6F"
                  THEN
                    BEGIN              # PUT VALUE IN LINE RECORD      #
                    DEA2[CRNT$DEV + 2] = MBVAL[0];
                    IF NOT AUTO$REC    # IF NOT AUTO-REC LINE          #
                    THEN               #   CHECK FOR UNIQUE TA         #
                      BEGIN 
                      ITEMP = MBVAL[0] - X"61"; 
                      IF B<ITEMP,1>TA$MAP NQ 1
                      THEN
                        BEGIN 
                        B<ITEMP,1>TA$MAP = 1; 
                        END 
                      ELSE             # TA VALUE NOT UNIQUE           #
                        BEGIN          # FLAG ERROR -- TA NOT UNIQUE   #
                        NDLEM2(ERR143,MBLNUM," ");
                        END 
                      END 
                    END 
                  ELSE                 # VALUE IS NOT WITHIN RANGE     #
                    BEGIN    # FLAG ERROR -- VALUE OUT OF RANGE        #
                    CTEMP = XCHD(MBVAL[0]); 
                    NDLEM2(ERR100,MBLNUM,CTEMP);
                    END 
                  END 
                ELSE                   # STIP MUST BE UNKNOWN          #
                  BEGIN                # PUT VALUE IN LINE RECORD      #
                  DEA2[CRNT$DEV + 2] = MBVAL[0];
                  END 
                END 
              END 
            ELSE IF CRNT$TIP EQ TIP"$3270"
            THEN                         # TIPTYPE IS 3270             #
              BEGIN 
              IF MBVAL[0] GQ 0 AND MBVAL[0] LQ X"1F"
              THEN                       # IF VALUE IS WITHIN RANGE    #
                BEGIN 
                DEA2[CRNT$DEV+2] = MBVAL[0];     # STORE THE VALUE     #
                END 
              ELSE                     # VALUE IS OUT OF RANGE         #
                BEGIN 
                NDLEM2(ERR100,MBLNUM,XCHD(MBVAL[0])); 
                END 
              END 
            ELSE                       # TIPTYPE IS USER OR UNKNOWN    #
              BEGIN 
              DEA2[CRNT$DEV + 2] = MBVAL[0];
              END 
            END 
          ELSE                         # DT IS USER OR UNKNOWN         #
            BEGIN 
            DEA2[CRNT$DEV + 2] = MBVAL[0];
            END 
          END 
        ELSE                 # VALUE IS -AUTOREC-                      #
          BEGIN 
          IF NOT AUTO$REC    # IF NOT AN AUTO-REC LINE                 #
          THEN
            BEGIN            # FLAG ERROR -- VAL INVALID ON FIXED LINES#
            NDLEM2(ERR113,MBLNUM," ");
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # MBDEV # 
      CONTROL EJECT;
      PROC MD4DEV;
      BEGIN 
*IF,DEF,IMS 
# 
**    MD4DEV - CHECK DEVICE STATEMENT PARAMETERS LEGAL FOR MODE4. 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECK PARAMETER TO BE ALLOW FOR MODE4 DEVICES. 
* 
*     PROC MD4DEV 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(PRI,DI,PW,P90,P91,...,P99):  
*           CHECK GENERAL PARAMETER.
*         CASE 2(TA): 
*           CHECK MODE4/BSC PARAMETER.
*         CASE 3(DBL,XBZ):  
*           CHECK FLOW CONTROL PARAMETER. 
*         CASE 4(B1,B2,CN,CT,PG,PL,HN,AUTOLOG,AUTOCON): 
*           IF DT IS CONSOLE, 
*           THEN, 
*             CHECK CONSOLE PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- PARAM NOT ALLOWED WITH DT SPECIFIED.
*         CASE 5(SDT):  
*           IF DT IS LINEPRINTER OR SDT VALUE SPECIFIED 
*             IS SDT12, SDT13, SDT14, SDT15,
*           THEN, 
*             CHECK BATCH DEVICE PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAM NOT ALLOWED WITH DT SPECIFIED.
*         CASE 6(DO): 
*           IF DT IS LINE PRINTER,
*           THEN, 
*             IF STIP IS M4C OR UNKNOWN,
*             THEN, 
*               CHECK BATCH DEVICE PARAMETER. 
*             OTHERWISE,
*               FLAG ERROR -- PARAM INVALID WITH STIP SPECIFIED.
*           OTHERWISE,
*             IF DT IS CARD READER, 
*             THEN, 
*               FLAG ERROR -- PARAM INVALID WITH M4A DEVICES. 
*             OTHERWISE,
*               FLAG ERROR -- PARAM INVALID WITH CONSOLE DEVICES. 
*         CASE 7(ABL):  
*           IF DT IS CONSOLE, 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER
*           OTHERWISE,
*             FLAG ERROR -- INVALID WITH DT SPECIFIED.
*         CASE 8(DBZ):  
*           IF DT IS NOT CARD READER, 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- INVALID WITH DT SPECIFIED.
*         CASE 9(UBZ):  
*           IF DT IS CONSOLE OR CARD READER OR LINEPRINTER, 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- INVALID WITH DT SPECIFIED.
*          CASE 10(UBL):  
*            IF DT IS NOT CONSOLE AND UBL WITHIN RANGE 1-7, 
*              CALL FLOWDEV TO CHECK FLOW CONTROL PARAMETERS. 
*     IF DBL NOT SPECIFIED, 
*       DEFAULT VALUE BY DEVICE TYPE. 
*     IF UBL NOT SPECIFIED, 
*       DEFAULT UBL VALUE.
*     IF DT IS CON AND ABL WAS NOT SPECIFIED, 
*       DEFAULT ABL VALUE.
*     IF DT IS NOT CARD READER AND DBZ WAS NOT SPECIFIED, 
*       IF TC IS NOT USER OR UNKNOWN, 
*       THEN, 
*         DEFAULT VALUE BY DT AND TC. 
*       OTHERWISE,
*         IF STIP IS NOT UNKNOWN, 
*           DEFAULT VALUE BY DT AND STIP. 
*     IF DT IS NOT LINE PRINTER AND UBZ WAS NOT SPECIFIED,
*       IF TC IS NOT USER OR UNKNOWN, 
*       THEN, 
*         DEFAULT VALUE BY DT AND TC. 
*       OTHERWISE,
*         IF STIP IS NOT UNKNOWN, 
*           DEFAULT VALUE BY DT AND STIP. 
*     IF XBZ WAS NOT SPECIFIED, 
*       IF TC IS NOT USER OR UNKNOWN, 
*       THEN
*         DEFAULT VALUE BY DT AND TC. 
*       OTHERWISE,
*         IF STIP IS NOT UNKNOWN, 
*           DEFAULT VALUE BY DT AND STIP. 
*     IF DO WAS NOT SPECIFIED AND DT IS NOT CONSOLE,
*       IF STIP IS M4A OR UNKNOWN,
*       THEN, 
*         DEFAULT DO VALUE TO ONE.
*       OTHERWISE,
*         IF THIS DEVICE IS FIRST LINE PRINTER, 
*         THEN, 
*           DEFAULT DO VALUE TO ONE.
*         OTHERWISE,
*           FLAG ERROR -- REQUIRED PARAMETER MISSING
*     IF TA WAS NOT SPECIFIED AND LINE IS NOT AUTO-REC, 
*       FLAG ERROR -- REQUIRED PARAMETER MISSING. 
*     CHECK CN,B1,B2,CT TO BE UNIQUE. 
*     IF NOT UNIQUE,
*       FLAG ERROR -- CN,B1,B2,CT MUST BE UNIQUE. 
* 
# 
*ENDIF
# 
****  PROC MD4DEV - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        FUNC XCDD C(10);     # CONVERTS INTEGER TO CHARACTER           #
        END 
# 
****
# 
      DEF ABL$DEF # 2 #;     # DEFAULT ABL VALUE                       #
      DEF B1$DEF # X"3A" #;  # DEFAULT B1 VALUE                        #
      DEF B2$DEF # X"29" #;  # DEFAULT B2 VALUE                        #
      DEF CN$DEF # X"28" #;  # DEFAULT CN VALUE                        #
      DEF CT$DEF # X"25" #;  # DEFAULT CT VALUE                        #
      DEF DO$DEF # 1 #;      # DEFAULT DO VALUE                        #
      DEF UBL$DEF # 7 #;     # DEFAULT UBL VALUE                       #
      DEF PL$DEF # 64 #;     # DEFAULT PL VALUE                        #
      ITEM CHARVAL C(10);    # SCRATCH CHARACTER VARIABLE              #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM J;                # SCRATCH ITEM                            #
      ITEM VALUE;            # INTEGER VALUE TEMPORARY                 #
      DEF MXDT # 3 #; 
      ARRAY DBL$TABLE [1:MXDT] S(1);
        BEGIN 
        ITEM DBL$DEF (0,0,60) = [2,    # CONSOLE -- DEFAULT DBL        #
                                 2,    # CARD READER                   #
                                 1     # LINE PRINTER                  #
                                ];
        END 
      DEF MXTC # 15 #;
      ARRAY DBZ$TC$TBL [10:MXTC,1:MXDT] S(1); 
        BEGIN 
        ITEM DBZ$TC$DEF (0,0,60) = [[1040,  # 200UT -- CONSOLE         #
                                     1280,  # 714X                     #
                                     1280,  # 711                      #
                                     1280,  # 714                      #
                                     0,     # HPRE(N/A)                #
                                     1040   # 734                      #
                                    ] 
                                    [  0,   # 200UT -- CARD READER(N/A)#
                                     0,     # 714X(N/A)                #
                                     0,     # 711(N/A)                 #
                                     0,     # 714(N/A)                 #
                                     0,     # HPRE(N/A)                #
                                       0    # 734(N/A)                 #
                                    ] 
                                    [   1,  # 200UT -- LINE PRINTER    #
                                       1,   # 714X                     #
                                     0,     # 711(N/A)                 #
                                        1,  # 714                      #
                                     0,     # HPRE(N/A)                #
                                        1   # 734                      #
                                    ]]; 
        END 
      ARRAY UBZ$TC$TBL [10:MXTC,1:MXDT] S(1); 
        BEGIN 
        ITEM UBZ$TC$DEF (0,0,60) = [[1,   # 200UT -- CONSOLE           #
                                     1,   # 714X                       #
                                     1,   # 711                        #
                                     1,   # 714                        #
                                     0,   # HPRE(N/A)                  #
                                     1    # 734                        #
                                    ] 
                                    [1,   # 200UT -- CARD READER       #
                                     0,   # 714X(N/A)                  #
                                     0,   # 711(N/A)                   #
                                     0,   # 714(N/A)                   #
                                     0,   # HPRE(N/A)                  #
                                     1    # 734                        #
                                    ] 
                                    [0,   # 200UT(N/A) -- LINE PRINTER #
                                     0,   # 714X(N/A)                  #
                                     0,   # 711(N/A)                   #
                                     0,   # 714(N/A)                   #
                                     0,   # HPRE(N/A)                  #
                                     0    # 734(N/A)                   #
                                    ]]; 
        END 
      ARRAY XBZ$TC$TBL [10:MXTC,1:MXDT] S(1); 
        BEGIN 
        ITEM XBZ$TC$DEF (0,0,60) = [[1040,  # 200UT -- CONSOLE         #
                                     1280,  # 714X                     #
                                     1280,  # 711                      #
                                     1280,  # 714                      #
                                     0,     # HPRE(N/A)                #
                                     1040   # 734                      #
                                    ] 
                                    [1040,  # 200UT -- CARD READER     #
                                     0,     # 714X(N/A)                #
                                     0,     # 711(N/A)                 #
                                     0,     # 714(N/A)                 #
                                     0,     # HPRE(N/A)                #
                                     1040   # 734                      #
                                    ] 
                                    [1000,  # 200UT -- LINE PRINTER    #
                                     1280,  # 714X                     #
                                     0,     # 711(N/A)                 #
                                     240,   # 714                      #
                                     0,     # HPRE(N/A)                #
                                     1000   # 734                      #
                                    ]]; 
        END 
      DEF MXSTIP # 2 #; 
      ARRAY DBZ$STIP$TBL [1:MXSTIP,1:MXDT] S(1);
        BEGIN 
        ITEM DBZ$STIP$DEF (0,0,60) = [[1040,# M4A -- CONSOLE           #
                                       1280 # M4C                      #
                                      ] 
                                      [  0, # M4A -- CARD READER(N/A)  #
                                       0    # M4C(N/A)                 #
                                      ] 
                                      [   1,# M4A -- LINE PRINTER      #
                                         1  # M4C                      #
                                      ]]; 
        END 
      ARRAY UBZ$STIP$TBL [1:MXSTIP,1:MXDT] S(1);
        BEGIN 
        ITEM UBZ$STIP$DEF (0,0,60) = [[1,   # M4C -- CONSOLE           #
                                       1    # M4C                      #
                                      ] 
                                      [1,   # M4A -- CARD READER       #
                                       0    # M4C(N/A)                 #
                                      ] 
                                      [0,   # M4A(N/A) -- LINE PRINTER #
                                       0    # M4C(N/A)                 #
                                      ]]; 
        END 
      ARRAY XBZ$STIP$TBL [1:MXSTIP,1:MXDT] S(1);
        BEGIN 
        ITEM XBZ$STIP$DEF (0,0,60) = [[1040,# M4A -- CONSOLE           #
                                       1280 # M4C                      #
                                      ] 
                                      [1040,# M4A -- CARD READER       #
                                       0    # M4C(N/A)                 #
                                      ] 
                                      [1000,# M4A -- LINE PRINTER      #
                                       240  # M4C                      #
                                      ]]; 
        END 
      SWITCH MD4DJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , GEN$PARAM  , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  , NEXT$MD4   , #         , DT       ,#
                      SDT         , MB$PARAM   , # SDT     , TA       ,#
                      ABL         , DBZ        , # ABL     , DBZ      ,#
                      UBZ$UBL     , FLOW$PARAM , # UBZ     , DBL      ,#
                      UBZ$UBL     , FLOW$PARAM , # UBL     , XBZ      ,#
                      $DO         , ILLEGAL    , # DO      , STREAM   ,#
                      CON$PARAM   ,            , # HN      , AUTOLOG  ,#
                      CON$PARAM   , GEN$PARAM  , # AUTOCON , PRI      ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  , # P98     , P99      ,#
                      ILLEGAL     , ILLEGAL    , # AB      , BR       ,#
                      ILLEGAL     , CON$PARAM  , # BS      , B1       ,#
                      CON$PARAM   , ILLEGAL    , # B2      , CI       ,#
                      CON$PARAM   , CON$PARAM  , # CN      , CT       ,#
                      CON$PARAM   , ILLEGAL    , # DLC     , DLTO     ,#
                      CON$PARAM   , ILLEGAL    , # DLX     , EP       ,#
                      ILLEGAL     , ILLEGAL    , # IN      , LI       ,#
                      ILLEGAL     , ILLEGAL    , # OP      , PA       ,#
                      CON$PARAM   , PL$PARAM  ,  # PG      , PL       ,#
                      GEN$PARAM   , ILLEGAL    , # PW      , SE       ,#
                      CON$PARAM   , CON$PARAM  , # FA      , XLC      ,#
                      ILLEGAL     , ILLEGAL    , # XLX     , XLTO     ,#
                      CON$PARAM   , ILLEGAL    , # ELO     , ELX      ,#
                      CON$PARAM   , ILLEGAL    , # ELR     , EBO      ,#
                      ILLEGAL     , ILLEGAL    , # EBR     , CP       ,#
                      ILLEGAL     , ILLEGAL    , # IC      , OC       ,#
                      CON$PARAM   , ILLEGAL    , # LK      , EBX      ,#
                                  , GEN$PARAM  , #         , MC       ,#
                      ILLEGAL     ,            , # XLY     , EOF      ,#
                                  , ILLEGAL    , # PAD     , RTS      ,#
                      ILLEGAL     , ILLEGAL    ; # MCI     , MLI       #
      CONTROL EJECT;
#                                                                      #
#                            MD4DEV CODE BEGINS HERE                   #
#                                                                      #
      CRNT$CC[CC"CN"] = CN$DEF;        # DEFAULT CN AS CURRENT VALUE   #
      CRNT$CC[CC"B1"] = B1$DEF;        # DEFAULT B1 AS CURRENT VALUE   #
      CRNT$CC[CC"B2"] = B2$DEF;        # DEFAULT B2 AS CURRENT VALUE   #
      CRNT$CC[CC"CT"] = CT$DEF;        # DEFAULT CT AS CURRENT VALUE   #
      CRNT$CC[CC"BS"] = -1;            # SET BS TO -NOT APPLICABLE-    #
      FOR I=3 STEP 1 UNTIL STWC[0]
      DO                               # FOR EACH VALUE DEC ENTRY      #
        BEGIN 
        GOTO MD4DJUMP[STKWID[I]];      # GO TO APPROPRIATE PROC        #
GEN$PARAM:  
        GENDEV(STWORD[I],STLNUM[0]);   # CHECK GENERAL PARAMETER       #
        TEST I; 
MB$PARAM: 
        MBDEV(STWORD[I],STLNUM[0]);    # CHECK MODE4/BSC PARAMETER     #
        TEST I; 
FLOW$PARAM: 
        FLOWDEV(STWORD[I],STLNUM[0]);  # CHECK FLOW CONTROL PARAMETER  #
        TEST I; 
ILLEGAL:                     # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS LINE IS AUTO-SYNC               #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
CON$PARAM:  
        IF CRNT$DT EQ DT"CON"          # IF DT IS CONSOLE              #
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                 # DT IS NOT CONSOLE                       #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
PL$PARAM: 
        IF CRNT$DT EQ DT"CON" OR       # IF DT IS CONSOLE              #
           CRNT$DT EQ DT"LP"           # OR DT IS LINEPRINTER          #
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                 # DT IS NOT CONSOLE                       #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
SDT:  
        IF CRNT$DT EQ DT"LP" OR        # IF DT IS LINE PRINTER         #
           STVALNAM[I] EQ "SDT12" OR   # IF SDT12 - SDT15 USED         #
           STVALNAM[I] EQ "SDT13" OR
           STVALNAM[I] EQ "SDT14" OR
           STVALNAM[I] EQ "SDT15" 
        THEN
          BEGIN                        # CHECK BATCH PARAMETER         #
          BTCHDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS CONSOLE OR CARD READER  #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
$DO:  
        IF CRNT$DT EQ DT"LP"           # IF DT IS LINE PRINTER         #
        THEN
          BEGIN                        # AND STIP IS M4C OR UNKNOWN    #
          IF CRNT$STIP EQ STIP"M4C" OR
             CRNT$STIP EQ STIP"UNKNOWN" 
          THEN
            BEGIN                      # CHECK BATCH PARAMETER         #
            BTCHDEV(STWORD[I],STLNUM[0]); 
            END 
          ELSE                         # STIP IS M4A                   #
            BEGIN            # FLAG ERROR -- INVALID FOR M4A DEVICES   #
            NDLEM2(ERR134,STLNUM[0],KWDNAME[STKWID[I]]);
            END 
          END 
        ELSE                           # DT IS CARD READER OR CONSOLE  #
          BEGIN 
          IF CRNT$DT EQ DT"CR"         # IF CURRENT DT IS CR           #
          THEN
            BEGIN            # FLAG ERROR -- INVALID FOR M4A DEVICES   #
            NDLEM2(ERR134,STLNUM[0],KWDNAME[STKWID[I]]);
            END 
          ELSE               # DT MUST BE CONSOLE                      #
            BEGIN            # FLAG ERROR -- INVALID WITH DT SPECIFIED #
            NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
            END 
          END 
        TEST I; 
ABL:  
        IF CRNT$DT EQ DT"CON"          # IF DT IS CONSOLE              #
        THEN
          BEGIN                        # CHECK FLOW CONTROL PARAMETER  #
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS LP OR CR                #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
DBZ:  
        IF CRNT$DT NQ DT"CR"           # IF DT IS NOT A CARD READER    #
        THEN
          BEGIN                        # CHECK FLOW CONTROL PARAMETER  #
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS CARD READER             #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
UBZ$UBL:                     # IF DT IS CONSOLE, CARD READER, OR       #
                             #   LINE PRINTER                          #
        IF CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"CR" OR 
           CRNT$DT EQ DT"LP"
        THEN
          BEGIN 
          IF STKWID[I] EQ KID"UBZ"     # IF UBZ PARAMETER              #
          THEN
            BEGIN 
            FLOWDEV(STWORD[I],STLNUM[0]); 
            END 
          ELSE
            BEGIN                      # ELSE, UBL PARAMETER           #
            IF (CRNT$DT NQ "CON") AND 
               (STVALNUM[I] GQ 1 AND STVALNUM[I] LQ 7)
            THEN
              BEGIN                    # PASSIVE DEVICES: 1 <= UBL <= 7#
              FLOWDEV(STWORD[I],STLNUM[0]); 
              END 
            ELSE
              BEGIN                    # PARAMETER VALUE OUT OF RANGE  #
              CHARVAL=XCDD(STVALNUM[I]);
              NDLEM2(ERR100,STLNUM[0],CHARVAL); 
              END 
            END 
          END 
        ELSE
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
NEXT$MD4: 
        END 
      IF NOT ABL$USED AND    # IF ABL NOT SPECIFIED AND DT IS CONSOLE  #
         CRNT$DT EQ DT"CON" 
      THEN
        BEGIN 
        DEVFNFV(FN"ABL",ABL$DEF); 
        END 
      IF NOT DBL$USED        # IF DBL NOT SPECIFIED                    #
      THEN
        BEGIN 
        VALUE = DBL$DEF[CRNT$DT];      # DEFAULT DBL IN VALUE          #
        DEVFNFV(FN"DBL",VALUE); 
        END 
      IF NOT UBL$USED        # IF UBL NOT SPECIFIED                    #
      THEN
        BEGIN 
        VALUE = UBL$DEF;               # DEFAULT UBL IN VALUE          #
        DEVFNFV(FN"UBL",VALUE); 
        END 
      IF NOT DBZ$USED AND    # IF DBZ NOT SPECIFIED                    #
         CRNT$DT NQ DT"CR"
      THEN
        BEGIN 
        VALUE = 0;                     # CLEAR VALUE TEMPORARY         #
        IF CRNT$TC NQ TC"USER" AND     # IF TC IS NOT USER OR UNKNOWN  #
           CRNT$TC NQ TC"UNKNOWN" 
        THEN
          BEGIN                        # DEFAULT DBZ BY TC AND DT      #
          VALUE = DBZ$TC$DEF[CRNT$TC,CRNT$DT];
          END 
        ELSE                           # TC IS USER OR UNKNOWN         #
          BEGIN                        # IF STIP IS NOT UNKNOWN        #
          IF CRNT$STIP NQ STIP"UNKNOWN" 
          THEN
            BEGIN                      # DEFAULT DBZ BY STIP AND DT    #
            VALUE = DBZ$STIP$DEF[CRNT$STIP,CRNT$DT];
            END 
          END 
        IF VALUE NQ 0                  # IF DEFAULT VALUE IS DETERMINED#
        THEN
          BEGIN 
          J = B<44,8>VALUE;  # MSB OF VALUE                            #
          DEVFNFV(FN"DBZ$MSB",J); 
          J = B<52,8>VALUE;  # LSB OF VALUE                            #
          DEVFNFV(FN"DBZ$LSB",J); 
          END 
        END 
      IF NOT UBZ$USED AND              # IF UBZ NOT SPECIFIED          #
         (CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"CR")
      THEN
        BEGIN 
        VALUE = 0;                     # CLEAR VALUE TEMPORARY         #
        IF CRNT$TC NQ TC"USER" AND     # IF TC IS NOT USER OR UNKNOWN  #
           CRNT$TC NQ TC"UNKNOWN" 
        THEN
          BEGIN                        # DEFAULT UBZ BY TC AND DT      #
          VALUE = UBZ$TC$DEF[CRNT$TC,CRNT$DT];
          END 
        ELSE                           # TC IS USER OR UNKNOWN         #
          BEGIN                        # IF STIP IS NOT UNKNOWN        #
          IF CRNT$STIP NQ STIP"UNKNOWN" 
          THEN
            BEGIN                      # DEFAULT UBZ BY STIP AND DT    #
            VALUE = UBZ$STIP$DEF[CRNT$STIP,CRNT$DT];
            END 
          END 
        IF VALUE NQ 0                  # IF DEFAULT VALUE IS DETERMINED#
        THEN
          BEGIN 
          DEVFNFV(FN"UBZ",VALUE); 
          END 
        END 
      IF NOT XBZ$USED                  # IF XBZ NOT SPECIFIED          #
      THEN
        BEGIN 
        VALUE = 0;                     # CLEAR VALUE TEMPORARY         #
        IF CRNT$TC NQ TC"USER" AND     # IF TC IS NOT USER OR UNKNOWN  #
           CRNT$TC NQ TC"UNKNOWN" 
        THEN
          BEGIN                        # DEFAULT XBZ BY TC AND DT      #
          VALUE = XBZ$TC$DEF[CRNT$TC,CRNT$DT];
          END 
        ELSE                           # TC IS USER OR UNKNOWN         #
          BEGIN                        # IF STIP IS NOT UNKNOWN        #
          IF CRNT$STIP NQ STIP"UNKNOWN" 
          THEN
            BEGIN                      # DEFAULT XBZ BY STIP AND DT    #
            VALUE = XBZ$STIP$DEF[CRNT$STIP,CRNT$DT];
            END 
          END 
        IF VALUE NQ 0                  # IF DEFAULT VALUE IS DETERMINED#
        THEN
          BEGIN 
          J = B<44,8>VALUE;  # MSB OF VALUE                            #
          DEVFNFV(FN"XBZ$MSB",J); 
          J = B<52,8>VALUE;  # LSB OF VALUE                            #
          DEVFNFV(FN"XBZ$LSB",J); 
          END 
        END 
      IF NOT DO$USED AND               # IF DO IS NOT SPECIFIED        #
         CRNT$DT NQ DT"CON"            #   AND DT IS NOT CONSOLE       #
      THEN
        BEGIN 
        IF CRNT$STIP EQ STIP"M4A" OR   # IF STIP IS M4A OR UNKNOWN     #
           CRNT$STIP EQ STIP"UNKNOWN" 
        THEN
          BEGIN 
          DEVFNFV(FN"DO$",DO$DEF);     # PUT DO VALUE IN FOR RBF       #
          END 
        ELSE                 # STIP MUST BE M4C                        #
          BEGIN 
          IF FIRST$DT[DT"LP"]          # IF THIS IS FIRST LP           #
          THEN
            BEGIN                      # MAKE FNFV PAIR ENTRY          #
            DEVFNFV(FN"DO$",DO$DEF);
            B<DO$DEF,1>DO$MAP[DT"LP"] = 1;  # SET BIT FOR DEFAULT      #
            FIRST$DT[DT"LP"] = FALSE;  # CLEAR FLAG FOR DT             #
            END 
          ELSE                         # NOT FIRST LINE PRINTER        #
            BEGIN            # FLAG ERROR -- REQUIRED PARAMETER MISSING#
            NDLEM2(ERR103,STLNUM[0],"DO");
            END 
          END 
        END 
      IF NOT TA$USED AND     # IF TA NOT SPECIFIED AND NOT AUTO-REC    #
         NOT AUTO$REC 
      THEN
        BEGIN                # FLAG ERROR -- REQUIRED PARAMETER MISSING#
        NDLEM2(ERR103,STLNUM[0],"TA");
        END 
      DEVFNFV(FN"EOF",CRNT$EOF);   # PUT EOF ENTRY IN NCB              #
      IF NOT PL$USED AND           # IF PL NOT SPECIFIED               #
         CRNT$DT EQ DT"LP"         # AND DEVICE IS LINEPRINTER         #
      THEN
        BEGIN 
        DEVFNFV(FN"PL",PL$DEF); 
        END 
      FOR I=CC"CN" STEP 1 UNTIL CC"CT"
      DO                     # CHECK CONTROL CHAR FOR UNIQUENESS       #
        BEGIN 
        FOR J=I+1 STEP 1 UNTIL CC"ELX"
        DO
          BEGIN 
          IF CRNT$CC[I] EQ CRNT$CC[J] 
          THEN
            BEGIN            # FLAG ERROR -- VALUE NOT UNIQUE          #
            NDLEM2(ERR132,STLNUM[0]," "); 
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # MD4DEV #
      CONTROL EJECT;
      PROC USRDEV;
*IF,DEF,IMS 
# 
**    USERDEV - CHECK DEVICE STATEMENT PARAMETERS FOR USER TIP. 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMETER 
*     ON THE STATEMENT. 
* 
*     PROC USERDEV
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(DI,PRI,PW,P90,P91,...,P99):  
*           CHECK GENERAL PARAMETER.
*         CASE 2(HN,AUTOCON,AUTOLOG,AB,BR,BS,B1,B2,CI,CN,CT,DLC,DLTO, 
*                DLX,EP,IN,LI,OP,PA,PG,PL,SE,XLY):  
*           CHECK CONSOLE PARAMETER.
*         CASE 3(SDT,DO,STREAM):  
*           CHECK BATCH DEVICE PARAMETER. 
*         CASE 4(TA): 
*           CHECK MODE4/BSC PARAMETER.
*         CASE 5(ABL,DBL,DBZ,UBL,UBZ,XBZ):  
*           CHECK FLOW CONTROL PARAMETER. 
*     IF W SPECIFIED, 
*       ENTER FNFV ENTRY FOR CURRENT VALUE OF W.
*     IF NCIR SPECIFIED,
*       ENTER FNFV ENTRY FOR NCIR 
*       ENTER FNFV ENTRY FOR NEN. 
*       PUT NCIR VALUE IN DEVICE CROSS-REFERENCE TABLE
*     IF EOF SPECIFIED, 
*       ENTER FNFV VALUE FOR EOF. 
*     IF BCF,CTYP,MREC,NCIR,NEN,W,RIC WAS SPECIFIED 
*       PUT VALUE IN DEVICE ENTRY.
* 
# 
*ENDIF
      BEGIN 
      ITEM I;                # SCRATCH ITEM                            #
      ITEM CTEMP C(10);      # CHARACTER TEMP                          #
      SWITCH USRDJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , GEN$PARAM  , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  , NEXT$USR   , #         , DT       ,#
                      BTCH$PARAM  , MB$PARAM   , # SDT     , TA       ,#
                      FLOW$PARAM  , FLOW$PARAM , # ABL     , DBZ      ,#
                      FLOW$PARAM  , FLOW$PARAM , # UBZ     , DBL      ,#
                      FLOW$PARAM  , FLOW$PARAM , # UBL     , XBZ      ,#
                      BTCH$PARAM  , BTCH$PARAM , # DO      , STREAM   ,#
                      CON$PARAM   ,            , # HN      , AUTOLOG  ,#
                      CON$PARAM   , GEN$PARAM  , # AUTOCON , PRI      ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  , # P98     , P99      ,#
                      CON$PARAM   , CON$PARAM  , # AB      , BR       ,#
                      CON$PARAM   , CON$PARAM  , # BS      , B1       ,#
                      CON$PARAM   , CON$PARAM  , # B2      , CI       ,#
                      CON$PARAM   , CON$PARAM  , # CN      , CT       ,#
                      CON$PARAM   , CON$PARAM  , # DLC     , DLTO     ,#
                      CON$PARAM   , CON$PARAM  , # DLX     , EP       ,#
                      CON$PARAM   , CON$PARAM  , # IN      , LI       ,#
                      CON$PARAM   , CON$PARAM  , # OP      , PA       ,#
                      CON$PARAM   , CON$PARAM  , # PG      , PL       ,#
                      GEN$PARAM   , CON$PARAM  , # PW      , SE       ,#
                      CON$PARAM   , CON$PARAM  , # FA      , XLC      ,#
                      CON$PARAM   , CON$PARAM  , # XLX     , XLTO     ,#
                      CON$PARAM   , CON$PARAM  , # ELO     , ELX      ,#
                      CON$PARAM   , CON$PARAM  , # ELR     , EBO      ,#
                      CON$PARAM   , CON$PARAM  , # EBR     , CP       ,#
                      CON$PARAM   , CON$PARAM  , # IC      , OC       ,#
                      CON$PARAM   , CON$PARAM  , # LK      , EBX      ,#
                                  , GEN$PARAM  , #         , MC       ,#
                      CON$PARAM   ,            , # XLY     , EOF      ,#
                                  , CON$PARAM  , # PAD     , RTS      ,#
                      GEN$PARAM   , GEN$PARAM  ; # MCI     , MLI       #
      CONTROL EJECT;
#                                                                      #
#                            USRDEV CODE BEGINS HERE                   #
#                                                                      #
      FOR I=3 STEP 1 UNTIL STWC[0]     # CHECK EACH VALUE-DEC ENTRY    #
      DO
        BEGIN 
        GOTO USRDJUMP[STKWID[I]]; 
GEN$PARAM:  
        GENDEV(STWORD[I],STLNUM[0]);   # CHECK GENERAL PARAMETER       #
        TEST I; 
CON$PARAM:  
        CONDEV(STWORD[I],STLNUM[0]);   # CHECK CONSOLE PARAMETER       #
        TEST I; 
BTCH$PARAM: 
        BTCHDEV(STWORD[I],STLNUM[0]);  # CHECK BATCH/PASSIVE DEV PARAM #
        TEST I; 
MB$PARAM: 
        MBDEV(STWORD[I],STLNUM[0]);    # CHECK MODE4/BSC PARAMETER     #
        TEST I; 
FLOW$PARAM: 
        FLOWDEV(STWORD[I],STLNUM[0]);  # CHECK FLOW CONTROL PARAMETER  #
        TEST I; 
NEXT$USR: 
        END 
      CTEMP = "ABL";
      C$USR$PRM1(ABL$USED,CTEMP); # CHECK IF ABL IS USED               #
      CTEMP = "DT"; 
      C$USR$PRM2(CRNT$DT,CTEMP);  # CHECK CURRENT DEVICE TYPE USED     #
      CTEMP ="DBZ"; 
      C$USR$PRM1(DBZ$USED,CTEMP); # CHECK IF DBZ USED                  #
      CTEMP = "DBL";
      C$USR$PRM1(DBL$USED,CTEMP); # CHECK IF DBL USED                  #
      CTEMP = "UBZ";
      C$USR$PRM1(UBZ$USED,CTEMP); # CHECK IF UBZ USED                 # 
      CTEMP = "UBL";
      C$USR$PRM1(UBL$USED,CTEMP); # CHECK IF UBL USED                  #
      CTEMP = "XBZ";
      C$USR$PRM1(XBZ$USED,CTEMP); # CHECK IF XBZ USED                  #
      IF (CRNT$DT EQ DT"CR") OR (CRNT$DT EQ DT"CP") OR
         (CRNT$DT EQ DT"LP") OR (CRNT$DT EQ DT"PL") 
      THEN                        # VALID ONLY FOR PASSIVE DEVICES     #
        BEGIN 
        CTEMP = "DO"; 
        C$USR$PRM1(DO$USED,CTEMP);# CHECK IF DO IS SPECIFIED           #
        END 
      CTEMP = "AUTOCON";
      C$USR$PRM1((AUTOCON$FLAG OR AUTOCON$NO),CTEMP); # CHECK AUTOCON  #
      CTEMP = "HN"; 
      C$USR$PRM1(HN$USED,CTEMP);                      # CHECK HN       #
      IF CTYP$USED           # IF CTYPE SPECIFIED                      #
      THEN
        BEGIN 
        DEVFNFV(FN"CTYP",CRNT$CTYP); # MAKE FNFV ENTRY                 #
        END 
      IF W$USED              # IF W SPECIFIED                          #
      THEN
        BEGIN 
        DEVFNFV(FN"W",CRNT$W); # MAKE FNFV ENTRY                       #
        END 
      IF NCIR$USED                   # IF NCIR IS SPECIFIED            #
      THEN
        BEGIN 
        DEVFNFV(FN"NCIR",CRNT$NCIR); # MAKE FNFV ENTRY FOR NCIR        #
        DCNCIR[DCWC[1]] = CRNT$NCIR; # PUT NCIR VALUE IN DEVICE XREF   #
        DEVFNFV(FN"NEN",CRNT$NEN);   # MAKE FNFV ENTRY FOR NEN         #
        END 
      IF EOF$USED                    # IF EOF SPECIFIED                #
      THEN
        BEGIN 
        DEVFNFV(FN"EOF",CRNT$EOF);   # MAKE FNFV ENTRY FOR EOF         #
        END 
      RETURN;                # **** RETURN ****                        #
      END # USRDEV #
      CONTROL EJECT;
      PROC X25DEV;
      BEGIN 
*IF,DEF,IMS 
# 
**    X25DEV - CHECK DEVICE STATEMENT PARAMETERS LEGAL FOR X.25 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS PARAMETER TO BE LEGAL FOR X.25 CIRCUITS.
* 
*     PROC X25DEV 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(PW,P90,P91,...,P99,PRI): 
*           CHECK GENERAL DEVICE PARAMETER. 
*         CASE 2(HN,AUTOLOG,AUTOCON,BS,B1,B2,CI,CN,CT,DLX,LI, 
*                PA,PG,PL,XLY,IN):  
*           CHECK CONSOLE DEVICE PARAMETER. 
*         CASE 3(ABL,DBZ,DBL,UBL):  
*           CHECK FLOW CONTROL PARAMETER. 
*         CASE 4(DI,TA,DO,STREAM,AB,BR,DLC,DLTO,EP,OP,SE):  
*           FLAG ERROR -- PARAMETER NOT ALLOW.
*         CASE 5(SDT):  
*           IF SDT VALUE IS SDT12, SDT13, SDT14, OR SDT15,
*             CALL BATCH DEVICE PROCESSOR.
*     IF ABL,DBL,UBL NOT SPECIFIED, 
*       PUT DEFAULT VALUE INTO DEVICE ENTRY.
*     IF DBZ OR UBZ NOT SPECIFIED 
*       PERFORM FNFV ENTRY DEPENDING ON DEVICE TYPE.
*     PUT CTYP VALUE INTO DEVICE ENTRY. 
*     IF CTYP IS SVC, 
*       PUT NCIR AND NEN VALUES INTO DEVICE ENTRY.
*     CHECK BS,CN,B1,B2,CT FOR UNIQUENESS.
*     IF NOT UNIQUE,
*       FLAG ERROR -- VALUE NOT UNIQUE. 
# 
*ENDIF
# 
****  PROC X25DEV - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      DEF ABL$DEF # 2 #;     # DEFAULT ABL VALUE                       #
      DEF BS$DEF # X"08" #;  # DEFAULT BS VALUE                        #
      DEF B1$DEF # X"10" #;  # DEFAULT B1 VALUE                        #
      DEF B2$DEF # X"14" #;  # DEFAULT B2 VALUE                        #
      DEF CN$DEF # X"18" #;  # DEFAULT CN VALUE                        #
      DEF CT$DEF # X"1B" #;  # DEFAULT CT VALUE                        #
      DEF EBX$DEF # X"04" #;  # DEFAULT EBX VALUE                      #
      DEF ELX$DEF # X"0D" #;  # DEFAULT ELX VALUE                      #
      DEF DBL$DEF # 2 #;     # DEFAULT DBL VALUE                       #
      DEF DBZ$DEF # 225 #;   # DEFAULT DBZ VALUE                       #
      DEF DBZ$AP$DEF # 128 #;  # DEFAULT DBZ VALUE FOR DT=AP           #
      DEF UBZ$AP$DEF # 2 #;    # DEFAULT UBZ VALUE FOR DT=AP           #
      DEF UBL$DEF # 7 #;     # DEFAULT UBL VALUE                       #
      DEF UBZ$DEF # 1 #;     # DEFAULT UBZ VALUE                       #
      DEF PL$DEF # 64 #;     # DEFAULT PL VALUE                        #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM J;                # SCRATCH ITEM                            #
      ITEM VALUE;            # INTEGER VALUE TEMPORARY                 #
      SWITCH X25DJUMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , ILLEGAL    , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  , NEXT$X25   , #         , DT       ,#
                      SDT         , ILLEGAL    , # SDT     , TA       ,#
                      FLOW$PARAM  , FLOW$PARAM , # ABL     , DBZ      ,#
                      FLOW$PARAM  , FLOW$PARAM , # UBZ     , DBL      ,#
                      FLOW$PARAM  , ILLEGAL    , # UBL     , XBZ      ,#
                      ILLEGAL     , ILLEGAL    , # DO      , STREAM   ,#
                      CON$PARAM   ,            , # HN      , AUTOLOG  ,#
                      CON$PARAM   , GEN$PARAM  , # AUTOCON , PRI      ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  , # P98     , P99      ,#
                  CON$PARAM     , CON$PARAM    , # AB      , BR       ,#
                      CON$PARAM   , CON$PARAM  , # BS      , B1       ,#
                      CON$PARAM   , CON$PARAM  , # B2      , CI       ,#
                      CON$PARAM   , CON$PARAM  , # CN      , CT       ,#
                      CON$PARAM   , CON$PARAM  , # DLC     , DLTO     ,#
                      CON$PARAM   , CON$PARAM  , # DLX     , EP       ,#
                      IN          , CON$PARAM  , # IN      , LI       ,#
                    CON$PARAM     , CON$PARAM  , # OP      , PA       ,#
                      CON$PARAM   , CON$PARAM  , # PG      , PL       ,#
                      GEN$PARAM   , ILLEGAL    , # PW      , SE       ,#
                      CON$PARAM   , CON$PARAM  , # FA      , XLC      ,#
                      CON$PARAM   , CON$PARAM  , # XLX     , XLTO     ,#
                      CON$PARAM   , CON$PARAM  , # ELO     , ELX      ,#
                      CON$PARAM   , CON$PARAM  , # ELR     , EBO      ,#
                      CON$PARAM   , CON$PARAM  , # EBR     , CP       ,#
                      CON$PARAM   , CON$PARAM  , # IC      , OC       ,#
                      CON$PARAM   , CON$PARAM  , # LK      , EBX      ,#
                                  , GEN$PARAM  , #         , MC       ,#
                      CON$PARAM   ,            , # XLY     , EOF      ,#
                                  , ILLEGAL    , # PAD     , RTS      ,#
                      GEN$PARAM   , GEN$PARAM  ; # MCI     , MLI       #
      CONTROL EJECT;
#                                                                      #
#                            X25DEV CODE BEGINS HERE                   #
#                                                                      #
      CRNT$CC[CC"CN"] = CN$DEF;        # CN -- DEFAULT CONTROL CHAR    #
      CRNT$CC[CC"B1"] = B1$DEF;        # B1                            #
      CRNT$CC[CC"B2"] = B2$DEF;        #  B2                           #
      CRNT$CC[CC"CT"] = CT$DEF;        # CT                            #
      CRNT$CC[CC"BS"] = BS$DEF;        # BS                            #
      CRNT$CC[CC"ELX"] = ELX$DEF;      # ELX                           #
      CRNT$CC[CC"EBX"] = EBX$DEF;      # EBX                           #
      FOR I=3 STEP 1 UNTIL STWC[0]     # CHECK EACH VALUE-DEC ENTRY    #
      DO
        BEGIN 
        GOTO X25DJUMP[STKWID[I]];      # GOTO APPROPRIATE PARAGRAPH    #
GEN$PARAM:  
       IF STKWID[I] EQ KID"MCI" OR     # IF  -MCI- OR -MLI- USED       #
          STKWID[I] EQ KID"MLI" 
       THEN 
         BEGIN
         IF CRNT$STIP EQ STIP"PAD"     # IF STIP IS PAD                #
         THEN 
           BEGIN
           GENDEV(STWORD[I],STLNUM[0]); 
           END
         ELSE 
           BEGIN                       # XAA STIP                      #
           NDLEM2(ERR135,STLNUM[0],KWDNAME[STKWID[I]]); 
           END                         # PARAMETER NOT ALLOWED FOR XAA #
         END
       ELSE 
         BEGIN
         GENDEV(STWORD[I],STLNUM[0]);   # CHECK GENERAL PARAMETER      #
         END
        TEST I; 
SDT:  
        IF STVALNAM[I] EQ "SDT12" OR   # IF SDT12 - SDT15 USED         #
           STVALNAM[I] EQ "SDT13" OR
           STVALNAM[I] EQ "SDT14" OR
           STVALNAM[I] EQ "SDT15" 
        THEN
          BEGIN 
          BTCHDEV(STWORD[I],STLNUM[0]);  # CALL BATCH DEVICE PROCESSOR #
          END 
        ELSE
          BEGIN 
          GOTO ILLEGAL; 
          END 
        TEST I; 
IN: 
        IF CRNT$TIP EQ TIP"X25" AND 
           STVALNAM[I] EQ "PT"
        THEN                           # IN=PT NOT ALLOWED FOR X.25    #
          BEGIN              # FLAG ERROR -- VALUE INVALID WITH TIPTYPE#
          NDLEM2(ERR112,STLNUM[0],STVALNAM[I]); 
          TEST I;            # GET NEXT VALUE DECLARATION              #
          END 
CON$PARAM:  
        CONDEV(STWORD[I],STLNUM[0]);   # CHECK CONSOLE PARAMETER       #
        TEST I; 
FLOW$PARAM: 
        FLOWDEV(STWORD[I],STLNUM[0]);  # CHECK FLOW CONTROL PARAMETER  #
        TEST I; 
ILLEGAL:                     # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
        IF STKWID[I] EQ KID"DI" 
        THEN                 # IF PARAMETER IS -DI-                    #
          BEGIN 
          NDLEM2(ERR106,STLNUM[0],"DI");   # PUT -DI- IN MESSAGE       #
          END 
        ELSE                 # PARAMETER IS NOT -DI-                   #
          BEGIN 
          NDLEM2(ERR106,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
NEXT$X25: 
        END 
      IF NOT ABL$USED        # IF ABL NOT SPECIFIED                    #
      THEN
        BEGIN                # MAKE FNFV PAIR ENTRY FOR DEFAULT ABL    #
        DEVFNFV(FN"ABL",ABL$DEF); 
        END 
      IF NOT DBL$USED        # IF DBL NOT SPECIFIED                    #
      THEN
        BEGIN                # MAKE FNFV PAIR ENTRY FOR DEFAULT DBL    #
        DEVFNFV(FN"DBL",DBL$DEF); 
        END 
      IF NOT DBZ$USED        # IF DBZ NOT SPECIFIED                    #
      THEN
        BEGIN 
        IF CRNT$DT EQ DT"AP"  # IF A-A DEVICE TYPE                     #
        THEN
          BEGIN 
          VALUE = DBZ$AP$DEF; # MAKE FNFV PAIR ENTRY FOR               #
          END 
        ELSE
          BEGIN                # ALL OTHER DEVICE TYPE                 #
          VALUE = DBZ$DEF;
          END 
        J = B<44,8>VALUE;              # MSB OF DEFAULT DBZ            #
        DEVFNFV(FN"DBZ$MSB",J); 
        J = B<52,8>VALUE;              # LSB OF DEFAULT DBZ            #
        DEVFNFV(FN"DBZ$LSB",J); 
        END 
      IF NOT UBL$USED        # IF UBL NOT SPECIFIED                    #
      THEN
        BEGIN                # MAKE FNFV ENTRY WITH DEFAULT UBL        #
        DEVFNFV(FN"UBL",UBL$DEF); 
        END 
      IF NOT UBZ$USED        # IF UBZ NOT SPECIFIED                    #
      THEN
        BEGIN 
        IF CRNT$DT EQ DT"AP"  # IF DEVICE TYPE IS AP                   #
        THEN
          BEGIN 
          DEVFNFV(FN"UBZ",UBZ$AP$DEF);
          END 
        ELSE
          BEGIN 
          DEVFNFV(FN"UBZ",UBZ$DEF);  # ELSE PASS REGULAR DEFAULT       #
          END 
        END 
      IF COLLECT$USED        # IF COLLECT WAS SPECIFIED                #
      THEN
        BEGIN                # PUT VALUE IN ENTRY                      #
        DEVFNFV(FN"COLLECT",COLLECT$FLAG);
        END 
      IF NOT PL$USED AND     # IF PL NOT SPECIFIED                     #
         CRNT$DT EQ DT"LP"   # AND DEVICE IS LINEPRINTER               #
      THEN
        BEGIN 
        DEVFNFV(FN"PL",PL$DEF); 
        END 
#                            MAKE FNFV PAIR ENTRIES FOR CTYP,NEN,NCIR,W#
      DEVFNFV(FN"CTYP",CRNT$CTYP);
      DEVFNFV(FN"W",CRNT$W);
      IF CRNT$CTYP EQ CTYP"SVC"        # IF CURRENT CTYP IS -SVC-      #
      THEN
        BEGIN 
        DEVFNFV(FN"NCIR",CRNT$NCIR);   # PUT FNFV PAIR FOR NCIR        #
        DEVFNFV(FN"NEN",CRNT$NEN);     # PUT FNFV PAIR FOR NEN         #
        DCNCIR[DCWC[1]] = CRNT$NCIR;   # PUT NCIR VALUE IN DEVICE XREF #
        END 
#                            CHECK UNIQUENESS OF CONTROL CHARS         #
      FOR I=CC"CN" STEP 1 UNTIL CC"BS"
      DO
        BEGIN 
        FOR J=I+1 STEP 1 UNTIL CC"EBX"
        DO
          BEGIN 
          IF CRNT$CC[I] EQ CRNT$CC[J] 
          THEN
            BEGIN            # FLAG ERROR -- CONTROL CHAR NOT UNIQUE   #
            NDLEM2(ERR132,STLNUM[0]," "); 
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # X25DEV #
      CONTROL EJECT;
      PROC $3270DEV;
      BEGIN 
*IF,DEF,IMS 
# 
**    $3270DEV - CHECK DEVICE STATEMENT PARAMETERS LEGAL FOR 3270.
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECK PARAMETER TO BE ALLOW FOR MODE4 DEVICES. 
* 
*     PROC $3270DEV 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(PRI,DI,PW,P90,P91,...,P99):  
*           CHECK GENERAL PARAMETER.
*         CASE 2(TA): 
*           CHECK MODE4/BSC PARAMETER.
*         CASE 3(DBL,DBZ,XBZ):  
*           CHECK FLOW CONTROL PARAMETER. 
*         CASE 4(B1,B2,CN,CT,PG,PL,HN,AUTOLOG,AUTOCON): 
*           IF DT IS CONSOLE, 
*           THEN, 
*             CHECK CONSOLE PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- PARAM NOT ALLOWED WITH DT SPECIFIED.
*         CASE 5(ABL):  
*           IF DT IS CONSOLE, 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER
*           OTHERWISE,
*             FLAG ERROR -- INVALID WITH DT SPECIFIED.
*         CASE 6(UBZ):  
*           IF DT IS CONSOLE OR CARD READER OR LINEPRINTER, 
*           THEN, 
*             CHECK FLOW CONTROL PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- INVALID WITH DT SPECIFIED.
*          CASE 7(UBL): 
*            IF DT IS NOT CONSOLE AND UBL WITHIN RANGE 1-7, 
*              CALL FLOWDEV TO CHECK FLOW CONTROL PARAMETERS. 
*          CASE 8(XBZ): 
*            IF DT IS LP OR USER, 
*              CALL FLOWDEV TO CHECK FLOW CONTROL PARAMETERS. 
*            OTHERWISE, 
*              FLAG ERROR -- INVALID WITH DT SPECIFIED. 
*     IF DBL NOT SPECIFIED, 
*       DEFAULT VALUE BY DEVICE TYPE. 
*     IF UBL NOT SPECIFIED, 
*       DEFAULT UBL VALUE.
*     IF DT IS CON AND ABL WAS NOT SPECIFIED, 
*       DEFAULT ABL VALUE.
*     IF DBZ WAS NOT SPECIFIED, 
*       DEFAULT VALUE BY DEVICE TYPE. 
*     IF DT IS A CONSOLE AND UBZ WAS NOT SPECIFIED, 
*       DEFAULT UBZ VALUE.
*     IF DT IS LP AND XBZ WAS NOT SPECIFIED,
*       DEFAULT XBZ VALUE.
*     CHECK CN,B1,B2,CT TO BE UNIQUE. 
*     IF NOT UNIQUE,
*       FLAG ERROR -- CN,B1,B2,CT MUST BE UNIQUE. 
* 
# 
*ENDIF
# 
****  PROC $3270DEV - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        FUNC XCDD C(10);     # CONVERTS INTEGER TO CHARACTER           #
        END 
# 
****
# 
      DEF ABL$DEF # 2 #;     # DEFAULT ABL VALUE                       #
      DEF B1$DEF # X"3A" #;  # DEFAULT B1 VALUE                        #
      DEF B2$DEF # X"29" #;  # DEFAULT B2 VALUE                        #
      DEF CN$DEF # X"28" #;  # DEFAULT CN VALUE                        #
      DEF CT$DEF # X"25" #;  # DEFAULT CT VALUE                        #
      DEF DBL$DEF$CON # 2 #; # DEFAULT DBL VALUE FOR CONSOLES          #
      DEF DBL$DEF$LP  # 1 #; # DEFAULT DBL VALUE FOR LINE PRINTERS     #
      DEF DBZ$DEF$CON # 1280 #;        # DEFAULT DBZ VALUE FOR CONSOLES#
      DEF DBZ$DEF$LP  # 1 #; # DEFAULT DBZ VALUE FOR LINE PRINTERS     #
      DEF DO$DEF      # 1 #;           # DEFAULT DO VALUE              #
      DEF UBL$DEF # 7 #;     # DEFAULT UBL VALUE                       #
      DEF UBZ$DEF # 1 #;     # DEFAULT UBZ VALUE                       #
      DEF XBZ$DEF # 400 #;   # DEFAULT XBZ VALUE                       #
      DEF PL$DEF # 64 #;     # DEFAULT PL VALUE                        #
      ITEM CHARVAL C(10);    # SCRATCH CHARACTER VARIABLE              #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM J;                # SCRATCH ITEM                            #
      ITEM VALUE;            # INTEGER VALUE TEMPORARY                 #
  
      SWITCH $3270JMP             ,            , # UNK     , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , GEN$PARAM  , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  , NEXT$3270  , #         , DT       ,#
                      SDT         , MB$PARAM   , # SDT     , TA       ,#
                      ABL         , FLOW$PARAM , # ABL     , DBZ      ,#
                      UBZ$UBL     , FLOW$PARAM , # UBZ     , DBL      ,#
                      UBZ$UBL     , XBZ        , # UBL     , XBZ      ,#
                      $DO         , ILLEGAL    , # DO      , STREAM   ,#
                      CON$PARAM   ,            , # HN      , AUTOLOG  ,#
                      CON$PARAM   , GEN$PARAM  , # AUTOCON , PRI      ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  , # P98     , P99      ,#
                      ILLEGAL     , ILLEGAL    , # AB      , BR       ,#
                      ILLEGAL     , CON$PARAM  , # BS      , B1       ,#
                      CON$PARAM   , ILLEGAL    , # B2      , CI       ,#
                      CON$PARAM   , CON$PARAM  , # CN      , CT       ,#
                      CON$PARAM   , ILLEGAL    , # DLC     , DLTO     ,#
                      CON$PARAM   , ILLEGAL    , # DLX     , EP       ,#
                      ILLEGAL     , ILLEGAL    , # IN      , LI       ,#
                      ILLEGAL     , ILLEGAL    , # OP      , PA       ,#
                      CON$PARAM   , PL$PARAM   , # PG      , PL       ,#
                      GEN$PARAM   , ILLEGAL    , # PW      , SE       ,#
                      CON$PARAM   , CON$PARAM  , # FA      , XLC      ,#
                      ILLEGAL     , ILLEGAL    , # XLX     , XLTO     ,#
                      CON$PARAM   , ILLEGAL    , # ELO     , ELX      ,#
                      CON$PARAM   , ILLEGAL    , # ELR     , EBO      ,#
                      ILLEGAL     , ILLEGAL    , # EBR     , CP       ,#
                      ILLEGAL     , ILLEGAL    , # IC      , OC       ,#
                      CON$PARAM   , ILLEGAL    , # LK      , EBX      ,#
                                  , GEN$PARAM  , #         , MC       ,#
                      ILLEGAL     ,            , # XLY     , EOF      ,#
                                  , ILLEGAL    , # PAD     , RTS      ,#
                      ILLEGAL     , ILLEGAL    ; # MCI     , MLI       #
      CONTROL EJECT;
#                                                                      #
#                            $3270DEV CODE BEGINS HERE                 #
#                                                                      #
      CRNT$CC[CC"CN"] = CN$DEF;        # DEFAULT CN AS CURRENT VALUE   #
      CRNT$CC[CC"B1"] = B1$DEF;        # DEFAULT B1 AS CURRENT VALUE   #
      CRNT$CC[CC"B2"] = B2$DEF;        # DEFAULT B2 AS CURRENT VALUE   #
      CRNT$CC[CC"CT"] = CT$DEF;        # DEFAULT CT AS CURRENT VALUE   #
      CRNT$CC[CC"BS"] = -1;            # SET BS TO -NOT APPLICABLE-    #
      FOR I=3 STEP 1 UNTIL STWC[0]
      DO                               # FOR EACH VALUE DEC ENTRY      #
        BEGIN 
        GOTO $3270JMP[STKWID[I]];      # GO TO APPROPRIATE PROC        #
GEN$PARAM:  
        GENDEV(STWORD[I],STLNUM[0]);   # CHECK GENERAL PARAMETER       #
        TEST I; 
MB$PARAM: 
        MBDEV(STWORD[I],STLNUM[0]);    # CHECK MODE4/BSC PARAMETER     #
        TEST I; 
FLOW$PARAM: 
        FLOWDEV(STWORD[I],STLNUM[0]);  # CHECK FLOW CONTROL PARAMETER  #
        TEST I; 
ILLEGAL:                     # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS LINE IS AUTO-SYNC               #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
CON$PARAM:  
        IF CRNT$DT EQ DT"CON"          # IF DT IS CONSOLE              #
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                 # DT IS NOT CONSOLE                       #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
PL$PARAM: 
        IF CRNT$DT EQ DT"CON" OR       # IF DT IS CONSOLE              #
           CRNT$DT EQ DT"LP"           # DT IS LINEPRINTER             #
        THEN
          BEGIN 
          CONDEV(STWORD[I],STLNUM[0]); # CHECK CONSOLE PARAMETER       #
          END 
        ELSE                 # DT IS NOT CONSOLE                       #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
SDT:  
        IF CRNT$DT EQ DT"LP" OR        # IF DT IS LINE PRINTER         #
           STVALNAM[I] EQ "SDT12" OR   # IF SDT12 - SDT15 USED         #
           STVALNAM[I] EQ "SDT13" OR
           STVALNAM[I] EQ "SDT14" OR
           STVALNAM[I] EQ "SDT15" 
        THEN
          BEGIN                        # CHECK BATCH PARAMETER         #
          BTCHDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS CONSOLE OR CARD READER  #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
$DO:  
        IF CRNT$DT EQ DT"LP"           # IF DT IS LINE PRINTER         #
        THEN
          BEGIN                        # CHECK BATCH PARAMETER         #
          BTCHDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS NOT LP OR CON           #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
ABL:  
        IF CRNT$DT EQ DT"CON"          # IF DT IS CONSOLE              #
        THEN
          BEGIN                        # CHECK FLOW CONTROL PARAMETER  #
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE                           # DT IS LP OR CR                #
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
UBZ$UBL:                     # IF DT IS CONSOLE, USER, OR LINE PRINTER #
        IF CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"LP" OR 
           CRNT$DT EQ DT"USER"
        THEN
          BEGIN 
          IF STKWID[I] EQ KID"UBZ"     # IF UBZ PARAMETER              #
          THEN
            BEGIN 
            FLOWDEV(STWORD[I],STLNUM[0]); 
            END 
          ELSE
            BEGIN                      # ELSE, UBL PARAMETER           #
            IF (CRNT$DT EQ DT"CON") OR (CRNT$DT EQ DT"USER") OR 
               (STVALNUM[I] GQ 1 AND STVALNUM[I] LQ 7)
            THEN
              BEGIN                    # PASSIVE DEVICES: 1 <= UBL <= 7#
              FLOWDEV(STWORD[I],STLNUM[0]); 
              END 
            ELSE
              BEGIN                    # PARAMETER VALUE OUT OF RANGE  #
              CHARVAL=XCDD(STVALNUM[I]);
              NDLEM2(ERR100,STLNUM[0],CHARVAL); 
              END 
            END 
          END 
        ELSE
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
XBZ:  
        IF CRNT$DT EQ DT"LP" OR 
           CRNT$DT EQ DT"USER"
        THEN
          BEGIN 
          FLOWDEV(STWORD[I],STLNUM[0]); 
          END 
        ELSE
          BEGIN              # FLAG ERROR -- INVALID WITH DT SPECIFIED #
          NDLEM2(ERR133,STLNUM[0],KWDNAME[STKWID[I]]);
          END 
        TEST I; 
NEXT$3270:  
        END 
      IF NOT ABL$USED AND    # IF ABL NOT SPECIFIED AND DT IS CONSOLE  #
         CRNT$DT EQ DT"CON" 
      THEN
        BEGIN 
        DEVFNFV(FN"ABL",ABL$DEF); 
        END 
      IF NOT DBL$USED        # IF DBL NOT SPECIFIED                    #
      THEN
        BEGIN 
        IF CRNT$DT EQ DT"LP"
        THEN
          VALUE = DBL$DEF$LP;          # DEFAULT DBL VALUE FOR LP      #
        ELSE
          VALUE = DBL$DEF$CON;         # DEFAULT DBL VALUE FOR CON/USER#
        DEVFNFV(FN"DBL",VALUE); 
        END 
      IF NOT UBL$USED        # IF UBL NOT SPECIFIED                    #
      THEN
        BEGIN 
        VALUE = UBL$DEF;               # DEFAULT UBL IN VALUE          #
        DEVFNFV(FN"UBL",VALUE); 
        END 
      IF NOT DBZ$USED        # IF DBZ NOT SPECIFIED                    #
      THEN
        BEGIN 
        IF CRNT$DT EQ DT"LP"
        THEN
          VALUE = DBZ$DEF$LP;          # DEFAULT DBZ VALUE FOR LP      #
        ELSE
          VALUE = DBZ$DEF$CON;         # DEFAULT DBZ VALUE FOR CON/USER#
  
        J = B<44,8>VALUE;              # MSB OF VALUE                  #
        DEVFNFV(FN"DBZ$MSB",J); 
        J = B<52,8>VALUE;              # LSB OF VALUE                  #
        DEVFNFV(FN"DBZ$LSB",J); 
        END 
      IF NOT UBZ$USED AND              # IF UBZ NOT SPECIFIED          #
         (CRNT$DT EQ DT"CON" OR CRNT$DT EQ DT"USER")
      THEN
        BEGIN 
        VALUE = UBZ$DEF;
        DEVFNFV(FN"UBZ",VALUE); 
        END 
      IF NOT XBZ$USED AND              # IF XBZ NOT SPECIFIED          #
         CRNT$DT EQ DT"LP"
      THEN
        BEGIN 
        VALUE = XBZ$DEF;
        J = B<44,8>VALUE;              # MSB OF VALUE                  #
        DEVFNFV(FN"XBZ$MSB",J); 
        J = B<52,8>VALUE;              # LSB OF VALUE                  #
        DEVFNFV(FN"XBZ$LSB",J); 
        END 
      IF NOT DO$USED AND               # IF DO IS NOT SPECIFIED        #
         CRNT$DT EQ DT"LP"             #   AND DT IS LINE PRINTER      #
      THEN
        BEGIN 
        DEVFNFV(FN"DO$",DO$DEF);       # PUT DO VALUE IN FOR RBF       #
        END 
      IF NOT PL$USED AND               # IF PL NOT SPECIFIED           #
         CRNT$DT EQ DT"LP"             # AND DT IS LINE PRINTER        #
      THEN
        BEGIN 
        DEVFNFV(FN"PL",PL$DEF); 
        END 
      FOR I=CC"CN" STEP 1 UNTIL CC"CT"
      DO                     # CHECK CONTROL CHAR FOR UNIQUENESS       #
        BEGIN 
        FOR J=I+1 STEP 1 UNTIL CC"ELX"
        DO
          BEGIN 
          IF CRNT$CC[I] EQ CRNT$CC[J] 
          THEN
            BEGIN            # FLAG ERROR -- VALUE NOT UNIQUE          #
            NDLEM2(ERR132,STLNUM[0]," "); 
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # $3270DEV #
      CONTROL EJECT;
#                                                                      #
#                            DEVPR CODE BEGINS HERE                    #
#                                                                      #
      ABL$USED = FALSE;                # INITIALIZE FLAGS AND VALUES   #
      AUTOCON$FLAG = FALSE; 
      AUTOCON$NO = FALSE; 
      BIT$POS = FIRST$POS;
      CRNT$DT = DT"UNKNOWN";
      DBL$USED = FALSE; 
      DBZ$USED = FALSE; 
      DO$USED = FALSE;
      HN$USED = FALSE;
      STREAM$USED = FALSE;
      TA$USED = FALSE;
      UBL$USED = FALSE; 
      UBZ$USED = FALSE; 
      XBZ$USED = FALSE; 
      PL$USED = FALSE;
      GR$SET = S"NO";             # GR$SET INITIALISED TO NO           #
#                                                                      #
      IF LRWC[1]+MXDVENT GQ LR$LENG 
      THEN                   # IF THERE IS NOT ENOUGH ROOM FOR ENTRY   #
        BEGIN 
        SSTATS(P<LINE$RECORD>,MXDVENT); # ALLOC MORE SPACE             #
        END 
      CRNT$DEV = LRWC[1] + 1;          # SET POINTER TO CURRENT DEVICE #
      LRWORD[CRNT$DEV] = 0;            # CLEAR 1ST WORD OF ENTRY       #
      DE$IDENT[CRNT$DEV] = "DEV";      # SET DEVICE ENTRY IDENTIFIER   #
      DEWC[CRNT$DEV] = 3;              # INITIALIZE ENTRY WORD COUNT   #
      LRWC[1] = LRWC[1] + 3;           # INCREMENT LINE RECORD WORD CNT#
      LRWORD[CRNT$DEV + 1] = 0;        # CLEAR 2ND WORD IN ENTRY       #
      LRWORD[CRNT$DEV + 2] = 0;        # CLEAR 3RD WORD IN ENTRY       #
      DEVCNT = DEVCNT + 1;             # INCREMENT DEVICE COUNT        #
      IF NOT STLBERR[1]      # IF LABEL IS O.K.                        #
      THEN
        BEGIN 
        DENAME[CRNT$DEV + 1] = STLABEL[1];  # PUT LABEL IN DEVICE ENTRY#
        IF LCNI[0] GR 0      # IF GROUP COUNT GREATER THAN ZERO        #
        THEN
          BEGIN              # FOR EACH GENERATED NAME PUT IN DEV XREF #
          IF DCWC[1]+LCNI[0] GQ DC$LENG 
          THEN               # IF NEED MORE TABLE SPACE FOR ENTRIES    #
            BEGIN 
            SSTATS(P<DEVICE$XREF>,LCNI[0]+1);  # ALLOCATE MORE SPACE   #
            END 
          FOR I=STLBPNTR[1] STEP 1 UNTIL (STLBPNTR[1] + LCNI[0]) - 1
          DO
            BEGIN 
            DCWC[1] = DCWC[1] + 1;     # INCREMENT WORD COUNT          #
            DCWORD[DCWC[1]] = 0;       # CLEAR ENTRY WORD              #
            DCNAME[DCWC[1]] = LABLNAM[I];        # PUT NAME IN ENTRY   #
            DCPORT[DCWC[1]] = LABLPORT[I];       # PUT PORT NUMBER     #
            DCNID[DCWC[1]] = CRNT$NID;           # PUT NPU NODE I.D.   #
            END 
          IF LCNI[0] EQ 1 
          THEN
            BEGIN 
            DENAME[CRNT$DEV + 1] = LABLNAM[STLBPNTR[1]];
            END 
          END 
        ELSE                 # NO GENERATED NAME FOR DEVICE            #
          BEGIN 
          DCWC[1] = DCWC[1] + 1;       # INCREMENT WORD COUNT          #
          IF DCWC[1] GQ DC$LENG 
          THEN               # IF NEED MORE SPACE FOR ENTRY            #
            BEGIN 
            SSTATS(P<DEVICE$XREF>,100); # ALLOCATE MORE TABLE SPACE    #
            END 
          DCWORD[DCWC[1]] = 0;         # CLEAR ENTRY WORD              #
          DCNAME[DCWC[1]] = STLABEL[1];          # PUT NAME IN ENTRY   #
          DCPORT[DCWC[1]] = LCPORT[1];           # PUT PORT NUMBER     #
          DCNID[DCWC[1]] = CRNT$NID;             # PUT NPU NODE I.D.   #
          IF LTYPE EQ "X25"            # IF LINE IS X25                #
          THEN
            BEGIN 
            IF CRNT$CTYP EQ CTYP"SVC"  # IF CURRENT CTYP IS -SVC-      #
            THEN
              BEGIN 
              DCSVC[DCWC[1]] = TRUE;   # SET SVC FLAG IN DEVICE XREF   #
              END 
            END 
          END 
        END 
      IF STORD1[2] NQ 0      # IF DT IS SPECIFIED                      #
      THEN
        BEGIN 
        IF NOT STVLERR[STORD1[2]]      # IF VALUE IS O.K.              #
        THEN
          BEGIN 
          FOR I=1 STEP 1 UNTIL MXDT    # MAP DT TO NUMERICAL VALUE     #
          DO
            BEGIN                      # IF VALUE FOUND IN TABLE       #
            IF STVALNAM[STORD1[2]] EQ DTNAME[I] 
            THEN
              BEGIN 
              CRNT$DT = DT$STAT[I];    # SET CURRENT DEVICE TYPE       #
              DEDT[CRNT$DEV + 2] = DT$NUMV[I]; # PUT NUM VALUE IN ENTRY#
              END 
            END 
          IF CRNT$TIP NQ TIP"USER" AND
             CRNT$DT NQ DT"USER"       # IF TIPTYPE AND DT NOT USER    #
          THEN
            BEGIN 
            IF CRNT$TC NQ TC"USER" AND
               CRNT$TC NQ TC"UNKNOWN" 
            THEN                       # IF TC IS NOT USER OR UNKNOWN  #
              BEGIN 
              IF B<CRNT$TC,1>DT$TC$MAP[CRNT$DT] NQ 1
              THEN                     # IF TC AND DT NOT COMPATIBLE   #
                BEGIN        # FLAG ERROR -- INVALID WITH TC SPECIFIED #
                NDLEM2(ERR110,STLNUM[0],DTNAME[CRNT$DT]); 
                CRNT$DT = DT"UNKNOWN"; # CLEAR CURRENT DEVICE TYPE     #
                END 
              END 
            ELSE             # TC IS USER OR UNKNOWN                   #
              BEGIN                    # IF STIP IS NOT UNKNOWN        #
              IF CRNT$STIP NQ STIP"UNKNOWN" 
              THEN
                BEGIN                  # IF STIP AND DT NOT COMPATIBLE #
                IF B<CRNT$STIP,1>DT$STIP$MAP[CRNT$DT] NQ 1
                THEN
                  BEGIN      # FLAG ERROR -- INVALID WITH STIP SPEC    #
                  NDLEM2(ERR111,STLNUM[0],DTNAME[CRNT$DT]); 
                  CRNT$DT = DT"UNKNOWN";    # CLEAR CURRENT DT         #
                  END 
                END 
              ELSE           # STIP IS UNKNOWN                         #
                BEGIN                  # IF TIPTYPE IS NOT UNKNOWN     #
                IF CRNT$TIP NQ TIP"UNKNOWN" 
                THEN
                  BEGIN                # IF TIPTYPE AND DT NOT COMPAT  #
                  IF B<CRNT$TIP,1>DT$TIP$MAP[CRNT$DT] NQ 1
                  THEN
                    BEGIN    # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
                    NDLEM2(ERR112,STLNUM[0],DTNAME[CRNT$DT]); 
                    CRNT$DT = DT"UNKNOWN";  # CLEAR CURRENT DT         #
                    END 
                  END 
                END 
              END 
            END 
          END 
        END 
      ELSE                   # DT WAS NOT SPECIFIED                    #
        BEGIN 
        IF CRNT$TIP NQ TIP"USER"       # IF TIP IS NOT USER            #
        THEN
          BEGIN 
          IF CRNT$TIP EQ TIP"X25" AND CRNT$STIP EQ STIP"XAA"
          THEN                          # IF X25 TIP AND XAA STIP      #
            BEGIN 
            CRNT$DT = DT"AP";             # DEFAULT TO AP              #
            DEDT[CRNT$DEV + 2] = DT$NUMV[DT"AP"]; 
            END 
          ELSE
            BEGIN 
            CRNT$DT = DT"CON";          # ELSE CONSOLE IS THE DEFAULT  #
            END 
          END 
        END 
      IF DEVCNT GR MAXDEV    # MAXIMUM NUMBER OF DEVICE STMTS EXCEEDED #
      THEN
        BEGIN                # FLAG ERROR -- MAX DEVICE STMTS EXCEEDED #
        NDLEM2(ERR116,STLNUM[0]," "); 
        END 
      IF CRNT$TIP NQ TIP"USER"  AND 
         CRNT$TIP NQ TIP"UNKNOWN" AND 
         CRNT$DT NQ DT"UNKNOWN" AND 
         NOT AUTO$REC                  # IF TIP IS NOT USER OR UNKNOWN #
      THEN                             #   AND DT IS NOT UNKNOWN       #
        BEGIN                          #   AND NOT AN AUTO-REC LINE    #
        DT$CNT[CRNT$DT] = DT$CNT[CRNT$DT] + 1;   # INCR COUNT FOR DT   #
        IF DT$CNT[CRNT$DT] GR DT$MAX[CRNT$DT] 
        THEN                           # IF COUNT EXCEEDS MAX FOR DT   #
          BEGIN              # FLAG ERROR -- MAX DT EXCEEDED           #
          NDLEM2(ERR142,STLNUM[0],DTNAME[CRNT$DT]); 
          END 
        IF CRNT$TIP EQ TIP"HASP" AND   # IF CURRENT TIPTYPE IS HASP    #
           (CRNT$DT EQ DT"CP" OR CRNT$DT EQ DT"PL") 
        THEN
          BEGIN              # -CP- PLUS -PL- MUST NOT EXCEED MAXIMUM  #
          ITEMP = DT$CNT[DT"CP"] + DT$CNT[DT"PL"];
          IF ITEMP GR DT$MAX[DT"CP"]   # IF SUM EXCEEDS MAXIMUM        #
          THEN
            BEGIN            # FLAG ERROR - MAX NUM OF DEV EXCEEDED    #
            NDLEM2(ERR142,STLNUM[0],DTNAME[CRNT$DT]); 
            END 
          END 
        END 
      IF (CRNT$TIP NQ TIP"USER" AND CRNT$TIP NQ TIP"UNKNOWN") AND 
         (CRNT$DT NQ DT"USER" AND CRNT$DT NQ DT"UNKNOWN") 
      THEN
        BEGIN                # IF TIP AND DT NOT USER OR UNKNOWN       #
        GOTO DEVPJUMP[CRNT$TIP];       # JUMP TO APPROPRIATE PARAGRAPH #
ASYNC:  
        ASYDEV;              # CHECK FOR ASYNC DEVICES                 #
        GOTO NEXT;
MODE4:  
        MD4DEV;              # CHECK FOR MODE4 DEVICES                 #
        GOTO NEXT;
HASP: 
        HSPDEV;              # CHECK FOR HASP DEVICES                  #
        GOTO NEXT;
X25:  
        X25DEV;              # CHECK FOR X25 DEVICES                   #
        GOTO NEXT;
BSC:  
        BSCDEV;              # CHECK FOR BSC DEVICES                   #
        GOTO NEXT;
$3270:  
        $3270DEV;            # CHECK FOR 3270 DEVICES                  #
        GOTO NEXT;
NEXT: 
        END 
      ELSE                   # TIP OR DT IS USER OR UNKNOWN            #
        BEGIN 
        USRDEV;              # CHECK USER DEVICES                      #
        END 
      COUNT$LK;              # CALL LOGLINK COUNTER                    #
      IF CRNT$TIP NQ TIP"USER" AND     # IF TIP IS NOT USER            #
         CRNT$DT EQ DT"CON"            #   AND DT IS CONSOLE           #
      THEN
        BEGIN 
        IF NOT HN$USED       # IF HN WAS NOT SPECIFIED                 #
        THEN
          BEGIN 
          IF LL$CNT EQ 1     # IF ONLY ONE LOGLINK TO THIS NPU         #
          THEN
            BEGIN            # DEFAULT HN VALUE                        #
            DEVFNFV(FN"HN",LLTHNID[LLT$PNTR]);
            IF NOT AUTOCON$FLAG AND    # IF NOT ALREADY SPEC AS -YES-  #
               NOT AUTOCON$NO          #    AND NOT SPECIFIEC AS -NO-  #
            THEN
              BEGIN 
              DEVFNFV(FN"AUTOCON",TRUE);# DEFAULT AUTO CONNECT         #
              END 
            END 
          ELSE               # NONE OR MORE THAN ONE LOGLINK           #
            BEGIN 
            IF AUTOCON$FLAG 
                             # IF AUTO CONNECT SPECIFIED               #
            THEN
              BEGIN          # FLAG ERROR -- REQUIRED PARAMETER MISSING#
              NDLEM2(ERR103,STLNUM[0],"HN");
              END 
            ELSE
              BEGIN 
              IF SAVE$ENTRY GR 0
                             # IF MORE THAN ONE LOGLINK IS FOUND
                               AND HOST NAMES ARE THE SAME             #
              THEN
                BEGIN 
                DEVFNFV(FN"HN",LLTHNID[SAVE$ENTRY]);
                             # DEFAULT TO THE LAST MATCH FOUND         #
                IF NOT AUTOCON$FLAG AND NOT AUTOCON$NO
                THEN         # IF AUTOCON NOT SPECIFIED AS YES OR NO #
                  BEGIN 
                  DEVFNFV(FN"AUTOCON",TRUE); # DEFAULT TO AUTOCON  YES #
                  END 
                END 
              END 
            END 
          END 
        END 
      DEVFNFV(FN"RIC",RIC$FLAG);
                             # NUMBER OF 8-BIT PAD ENTRIES             #
      DEPAD[CRNT$DEV + 1] = CRNT$DEPAD; 
      FOR I = 0 STEP 1 UNTIL CRNT$DEPAD-1 
      DO
        BEGIN                # ASSIGN PAD VALUES FOR THIS DEVICE       #
        PWI = I*8/60 + 1;    # PAD WORD INDEX              (1-RELATIVE)#
        PDI=I*8 -(PWI-1)*60; # PAD WORD DISPLACEMENT INDEX (0-RELATIVE)#
        IF PDI LS 56
        THEN
          BEGIN              # 8-BIT ENTRIES DO NOT CROSS WORD BOUNDARY#
          ITEMP = B<PDI,8>CRNT$PAD[PWI];
          END 
        ELSE
          BEGIN              # NEW WORD BOUNDARY                       #
          B<52,4>ITEMP = B<PDI,4>CRNT$PAD[PWI];  # FIRST 4-BIT NIBBLE  #
          B<56,4>ITEMP = B<0,4>CRNT$PAD[PWI+1];  # SECOND  "    "      #
          END 
        # PAD FNS ASSIGNED IN CONSEC. SEQ., STARTING FROM PAD$FN$FIRST #
        DEVFNFV(PAD$FN$FIRST+I,ITEMP);
 # I=10/I     DIVIDE BY 0 ERROR: TRAP # 
        END 
      DEWC[CRNT$DEV] = (LRWC[1] - CRNT$DEV)+ 1; 
      TEWC[CRNT$TERM] = TEWC[CRNT$TERM] + DEWC[CRNT$DEV]; 
                                                  # SET TERM ENTRY WC  #
      RETURN;                # **** RETURN ****                        #
      END # DEVPR # 
      CONTROL EJECT;
      PROC LINFNFV(FN,FV);
      BEGIN 
*IF,DEF,IMS 
# 
**    LINFNFV - MAKE FNFV ENTRY FOR LINE. 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROC PUTS AN FNFV PAIR INTO THE CURRENT LINE CONFIGURE ENTRY.
* 
*     PROC LINFNFV(FN,FV) 
* 
*     ENTRY        FN = FIELD NUMBER. 
*                  FV = FIELD VALUE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     INCREMENT FNFV PAIR COUNT IN CURRENT LINE CONFIGURE ENTRY.
*     INCREMENT ENTRY WORD COUNT. 
*     PUT FNFV PAIR IN ENTRY. 
* 
# 
*ENDIF
      ITEM FN;               # FIELD NUMBER                            #
      ITEM FV;               # FIELD VALUE                             #
#                                                                      #
#                            LINFNFV CODE BEGINS HERE                  #
#                                                                      #
      LCFNFV[3] = LCFNFV[3] + 1;       # INCREMENT FNFV COUNT          #
      LCWC[0] = LCWC[0] + 1;           # INCREMENT WORD COUNT OF TABLE #
      LCFN[LCWC[0]] = FN;    # PUT FIELD NUMBER IN ENTRY ONE           #
      LCFV[LCWC[0]] = FV;    # PUT FIELD VALUE IN ENTRY ONE            #
      RETURN;                # **** RETURN ****                        #
      END # LINFNFV # 
      CONTROL EJECT;
      PROC LINGRPR; 
      BEGIN 
*IF,DEF,IMS 
# 
**    LINGRPR - LINE/GROUP STATEMENT PROC 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS PARAMETERS ON LINE AND GROUP STATEMENTS.
* 
*     PROC LINGRPR
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     CLEAR AND INITIALIZE FLAG AND VALUES. 
*     CLEAR LINE CONFIG ENTRY BUFFER. 
*     IF LABEL IS O.K., 
*       PUT LABEL FROM STMT ENTRY INTO LINE XREF TABLE. 
*       PUT LABEL IN LINE RECORD. 
*       IF CURRENT STMT IS -GROUP-, 
*         DEFAULT GROUP COUNT IN LINE RECORD. 
*         DEFAULT NI VALUE IN LINE CONFIG ENTRY.
*         PUT LABEL FROM LABEL TABLE INTO LINE XREF TABLE.
*         PUT PORT VALUE FROM LABEL TABLE INTO LINE XREF TABLE. 
*     PUT CURRENT NODE I.D. INTO LINE XREF TABLE. 
*     PUT CURRENT NODE I.D. INTO LINE RECORD. 
*     IF LTYPE WAS SPECIFIED, 
*     THEN, 
*       IF VALUE IS O.K.
*         MAP NUMERIC VALUE FOR LTYPE 
*         PUT NUMERIC VALUE FOR LTYPE INTO LINE CONFIG ENTRY. 
*     OTHERWISE,
*       FLAG ERROR REQUIRED PARAMETER MISSING.
*       SET CURRENT LTYPE TO UNKNOWN. 
*     IF TIPTYPE WAS SPECIFIED, 
*     THEN, 
*       IF VALUE IS O.K.
*         MAP NUMERIC VALUE FOR TIPTYPE 
*         IF TIPTYPE IS USER, 
*         THEN, 
*           SET CURRENT TIPTYPE TO USER 
*           PUT NUMERIC VALUE INTO LINE CONFIG ENTRY. 
*         OTHERWISE,
*           SET CURRENT TIPTYPE 
*           PUT NUMERIC VALUE INTO LINE CONFIG ENTRY. 
*           IF LTYPE IS NOT UNKNOWN,
*             IF LTYPE IS NOT COMPATIBLE WITH TIPTYPE,
*               FLAG ERROR -- LTYPE AND TIPTYPE NOT COMPATIBLE. 
*     OTHERWISE,
*       SET CURRENT TIPTYPE TO UNKNOWN. 
*     IF AUTO OR XAUTO WAS SPECIFIED, 
*       IF CURRENT TIPTYPE IS -X25-,
*       THEN
*         FLAG ERROR -- PARAMETER NOT ALLOWED WITH TIPTYPE SPECIFIED. 
*       OTHERWISE,
*         IF VALUE IS -YES- 
*           SET AUTO-REC FLAG IN LINE CONFIG ENTRY. 
*           SET AUTO-REC FLAG IN LINE RECORD. 
*         IF XAUTO IS SPECIFIED 
*           SET HIGH SPEED FLAG IN LINE CONFIG ENTRY. 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(AL,PORT,NI,DI,SL,P90,P91,...,P99): 
*           CHECK GENERAL LINE PARAMETER. 
*         CASE 2(DFL,FRAME,RTIME,RCOUNT,NSVC,PSN,DCE,DTEA): 
*           IF TIPTYPE IS X25 OR LTYPE IS X.25 AND TIPTYPE IS USER, 
*           THEN, 
*             CHECK X.25 PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- PARAMETER NOT ALLOWED WITH TIPTYPE SPECIFIED
*         CASE 3(LSPEED): 
*           IF TIPTYPE NOT ASYNC OR USER, 
*           THEN, 
*             FLAG ERROR -- LSPEED ALLOWED ON ASYNC NON-AUTO REC LINES. 
*           OTHERWISE,
*             IF TIPTYPE IS ASYNC AND LINE IS AUTO-REC, 
*             THEN, 
*               FLAG ERROR -- ALLOWED ON ASYNC NON-AUTO REC LINES ONLY. 
*             OTHERWISE,
*               MAP NUMERIC VALUE FOR LSPEED. 
*               PUT VALUE IS LINE CONFIG ENTRY. 
*          CASE 4(ARSPEED): 
*            CHECK ASYNC PARAMETERS.
*     IF PORT WAS NOT SPECIFIED,
*       FLAG ERROR -- REQUIRED PARAMETER MISSING. 
*     IF AL WAS NOT SPECIFIED,
*       MAKE FNFV ENTRY FOR DEFAULT AL. 
*     IF AESPEED NOT SPECIFIED, 
*       IF TIPTYPE IS ASYNC AND EITHER AUTO OR XAUTO IS SET TO YES, 
*         SET ARSPEED FLAG TO TRUE IN LINE CONFIGURATION RECORD.
*     IF TIPTYPE IS ASYNC,
*       IF LSPEED WAS NOT SPECIFIED AND LINE IS NON-AUTO REC. 
*         DEFAULT LSPEED IN LINE CONFIG ENTRY.
*     IF TIPTYPE IS X.25, 
*       IF DFL,FRAME,RTIME,PSN NOT SPECIFIED, 
*         FLAG ERROR -- REQUIRED PARAMETER MISSING. 
*       IF RCOUNT,DCE,ACCTYPE NOT SPECIFIED,
*         PUT DEFAULT VALUE IN LINE CONFIG ENTRY. 
*     IF TIPTYPE IS X.25 OR LTYPE IS X.25 AND TIPTYPE IS USER,
*       IF NSVC WAS NOT SPECIFIED 
*         DEFAULT NSVC VALUE INTO LINE CONFIG ENTRY.
*     IF LINE NOT AUTO-REC, 
*       DEFAULT MAXIMUM TERMINAL STATEMENTS BY TIPTYPE. 
* 
# 
*ENDIF
# 
****  PROC LINGRPR - XREF LIST BEGIN. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKE ENTRIES IN ERROR-2-FILE            #
        END 
# 
****
# 
      DEF DEF$DCE # 0 #;     # DEFAULT VALUE FOR DCE                   #
      DEF DEF$LSPD # 4 #;    # DEFAULT VALUE FOR LSPEED                #
      DEF DEF$RCNT # 15 #;   # DEFAULT VALUE FOR RCOUNT                #
      DEF LC$FIX$ENT # 3 #;  # LENGTH OF FIXED PORTION OF LC ENTRY     #
      DEF MXDTEA # 2 #;      # MAXIMUM LENGTH OF DTEA VALUE ALLOWED    #
      DEF ZERO # O"33" #;    # DISPLAY CODE VALUE FOR ZERO             #
      ITEM DCEUSED B;        # DCE DECLARED FLAG                       #
      ITEM DCE$FLG B;        # SET IF DCE WAS SPECIFIED -YES-          #
      ITEM DFLUSED B;        # DFL DECLARED FLAG                       #
      ITEM DTEAUSED B;       # DTEA SPECIFIED FLAG                     #
      ITEM FRMUSED B;        # FRAME DECLARED FLAG                     #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM J;                # SCRATCH ITEM                            #
      ITEM LSPDUSED B;       # LSPEED DECLARED FLAG                    #
      ITEM ARSUSED B;        # ARSPEED DECLARED FLAG                   #
      ITEM NSVCUSED B;       # NSVC DECLARED FLAG                      #
      ITEM PORTUSED B;       # PORT DECLARED FLAG                      #
      ITEM PSNUSED B;        # PSN DECLARED FLAG                       #
      ITEM RCNTUSED B;       # RCOUNT DECLARED FLAG                    #
      ITEM RTMUSED B;        # RTIME DECLARED FLAG                     #
      ITEM AL$USED B;        # AL DECLARED FLAG                        #
  
      ARRAY DTEA$VALUE [0:0] S(1);
        BEGIN 
        ITEM DTEA$VL1  U(00,00,04);    # 1ST DIGIT OF DTEA VALUE       #
        ITEM DTEA$VL2  U(00,04,04);    # 2ND DIGIT OF DTEA VALUE       #
        ITEM DTEA$VAL  U(00,00,08);    # DTEA VALUE                    #
        END 
      DEF MXLTYPE # 9 #;               # MAXIMUM NUMBER OF LINE TYPES  #
      ARRAY LTYPE$TABLE [1:MXLTYPE] S(2);        # LINE TYPE TABLE     #
        BEGIN 
        ITEM LT$VAL C(0,0,7) = ["S1",  # LTYPE VALUES                  #
                                "S2", 
                                "S3", 
                                "S4", 
                                "A1", 
                                "A2", 
                                "A6", 
                                "H1", 
                                "H2"
                               ]; 
        ITEM LT$NUMV (0,42,18) = [1,   # S1      LTYPE NUMERICAL VALUES#
                                  2,   # S2                            #
                                  3,   # S3                            #
                                 11,   # S4                            #
                                  6,   # A1                            #
                                  7,   # A2                            #
                                  9,   # A6                            #
                                 10,   # H1                            #
                                 12    # H2                            #
                                 ]; 
        ITEM LT$CAT C(1,0,10) = ["SYNC",    # S1 LINE TYPE CATEGORY    #
                                "SYNC",     # S2                       #
                                "SYNC",     # S3                       #
                                "SYNC",     # S4                       #
                                "ASYNC",    # A1                       #
                                "ASYNC",    # A2                       #
                                "ASYNC",    # A6                       #
                                "X25",      # H1                       #
                                "X25"       # H2                       #
                               ]; 
        END 
      DEF MXTTYPE # 9 #;               # MAXIMUM NUMBER OF TIP-TYPES   #
      ARRAY TIPTYPE$TABL [1:MXTTYPE] S(1);       # TIPTYPE TABLE       #
        BEGIN 
        ITEM TT$VAL C(0,0,7) = ["ASYNC", # TIPTYPE VALUES              #
                                "MODE4",
                                "HASP", 
                                "X25",
                                "BSC",
                                "TT12", 
                                "TT13", 
                                "TT14", 
                                "3270"
                               ]; 
        ITEM TT$NUMV (0,42,18) = [1,   # ASYNC  TIPTYPE NUMERICAL VALUE#
                                  2,   # MODE4                         #
                                  3,   # HASP                          #
                                  4,   # X25                           #
                                  5,   # BSC                           #
                                 12,   # USER -- TT12                  #
                                 13,   # USER -- TT13                  #
                                 14,   # USER -- TT13                  #
                                 15    # 3270                          #
                                 ]; 
        END 
      DEF MXLSPD # 11 #;               # MAXIMUM NUMBER OF LINE SPEEDS #
      ARRAY LSPD$TABLE [1:MXLSPD] S(1);          # LINE SPEED TABLE    #
        BEGIN 
        ITEM LST$VAL C(0,0,7) = ["110",# LINE SPEED VALUES             #
                                 "134", 
                                 "150", 
                                 "300", 
                                 "600", 
                                 "1200",
                                 "2400",
                                 "4800",
                                 "9600",
                                 "19200", 
                                 "38400"
                                ];
        ITEM LST$NUMV (0,42,18) = [1,  # 110  LSPEED NUMERICAL VALUES  #
                                   2,  # 134                           #
                                   3,  # 150                           #
                                   4,  # 300                           #
                                   5,  # 600                           #
                                   6,  # 1200                          #
                                   7,  # 2400                          #
                                   8,  # 4800                          #
                                   9,  # 9600                          #
                                   10, # 19200                         #
                                   11  # 38400                         #
                                  ];
        END 
      ARRAY X25$PARAMS [KID"DFL":KID"W"] S(1);
        BEGIN 
        ITEM X25$PNAM    C(00,00,10) = ["DFL",    # X25 PARAM NAMES   # 
                                        "FRAME",
                                        "RTIME",
                                        "RCOUNT", 
                                        "NSVC", 
                                        "PSN",
                                        "DCE",
                                        "DTEA", 
                                             ,
                                        "LCN",
                                        ,,,,,,,,,,,,
                                        "W",
                                       ]; 
        END 
      SWITCH LINJUMP  NEXT        ,            , # UNKNOWN , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , GEN$PARAM  , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                      GEN$PARAM   , GEN$PARAM  , # NI      , PORT     ,#
                      NEXT        , NEXT       , # LTYPE   , TIPTYPE  ,#
                      NEXT        , GEN$PARAM  , # AUTO    , AL       ,#
                      ASY$PARAM   , X25$PARAM  , # LSPEED  , DFL      ,#
                      X25$PARAM   , X25$PARAM  , # FRAME   , RTIME    ,#
                      X25$PARAM   , X25$PARAM  , # RCOUNT  , NSVC     ,#
                      X25$PARAM   , X25$PARAM  , # PSN     , DCE      ,#
                      X25$PARAM   , ASY$PARAM  , # DTEA    , ARSPEED  ,#
                      X25$PARAM   , GEN$PARAM  , # LCN     , IMDISC   ,#
                      GEN$PARAM   ,            , # RC      ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                   ,           , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                           NEXT   ,            , # XAUTO   , DT       ,#
                                  ,            , # SDT     , TA       ,#
                                  ,            , # ABL     , DBZ      ,#
                                  ,            , # UBZ     , DBL      ,#
                                  ,            , # UBL     , XBZ      ,#
                                  ,            , # DO      , STREAM   ,#
                                  ,            , # HN      , AUTOLOG  ,#
                                  ,            , # AUTOCON , PI       ,#
                      GEN$PARAM   , GEN$PARAM  , # P90     , P91      ,#
                      GEN$PARAM   , GEN$PARAM  , # P92     , P93      ,#
                      GEN$PARAM   , GEN$PARAM  , # P94     , P95      ,#
                      GEN$PARAM   , GEN$PARAM  , # P96     , P97      ,#
                      GEN$PARAM   , GEN$PARAM  ; # P98     , P99       #
      CONTROL EJECT;
      PROC GENLINE; 
      BEGIN 
*IF,DEF,IMS 
# 
**    GENLINE - CHECK GENERAL LINE PARAMETERS.
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS PARAMETERS WHICH ARE COMMON TO ALL TIPTYPES.
* 
*     PROC GENLINE
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     SELECT THE CASE THAT APPLIES, 
*       CASE 1(PORT): 
*         IF VALUE IS O.K., 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT VALUE IN LINE RECORD. 
*             PUT VALUE IN LINE XREF ENTRY. 
*             IF STATEMENT IS NOT -GROUP-,
*               PUT VALUE IN LINE RECORD INDEX. 
*           CHECK IF PORT VALUE IS UNIQUE FOR CURRENT NPU.
*       CASE 2(DI): 
*         IF VALUE IS O.K.
*           IF VALUE IS -YES-,
*             SET STATUS FLAG IN LINE CONFIG ENTRY. 
*       CASE 3(NI): 
*         IF VALUE IS O.K.
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT THE VALUE MINUS ONE IN THE LINE RECORD
*             PUT VALUE IN LINE CONFIG ENTRY. 
*             IF LABEL IS O.K. AND NI VALUE IS GREATER THAN ONE,
*               FOR EACH ITERATION OF PORT
*                 INCREMENT LINE XREF TABLE ENTRY COUNT.
*                 CLEAR NEXT ENTRY. 
*                 PUT CURRENT NODE I.D. IN ENTRY. 
*                 PUT GENERATED NAME FROM LABEL TABLE IN ENTRY. 
*                 CHECK IF PORT IS IN RANGE.
*                 IF IN RANGE,
*                   PUT PORT VALUE IN ENTRY.
*                   CHECK IF PORT IS UNIQUE FOR CURRENT NPU.
*       CASE 4(AL): 
*         IF VALUE IS WITHIN RANGE, 
*           MAKE FNFV ENTRY FOR AL SPECIFIED. 
*       CASE 5(SL,P90,P91,P92,...,P99): 
*         IF VALUE IS O.K.
*           IF VALUE IS NOT -NONE-, 
*             CHECK IF VALUE IS IN RANGE, 
*             IF IN RANGE,
*               PUT VALUE IN LINE CONFIG ENTRY. 
* 
# 
*ENDIF
# 
****  PROC GENLINE - XREF LIST BEGIN. 
# 
      XREF
        BEGIN 
        PROC NDLCKPT;        # CHECK UNIQUENESS OF PORT NUMBER         #
        PROC NDLCKRG;        # CHECK IF VALUE IS IN RANGE              #
        END 
# 
****
# 
      DEF DI$VAL #  1 #;     # VALUE FOR DISABLED                      #
      ITEM GENL$STAT B;      # RETURNED STATUS FROM CHECK ROUTINES     #
      ITEM J;                # SCRATCH ITEM                            #
#                                                                      #
      SWITCH GENLJUMP  NEXT$PARAM ,            , # UNKNOWN , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  , DI         , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                       NI         , PORT       , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  , AL         , # AUTO    , AL       ,#
                                  ,            , # LSPEED  , DFL      ,#
                                  ,            , # FRAME   , RTIME    ,#
                                  ,            , # RCOUNT  , NSVC     ,#
                                  ,            , # PSN     , DCE      ,#
                                  ,            , # DTEA    ,          ,#
                                  , IMDISC     , #         , IMDISC   ,#
                       RC         ,            , # RC      ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            , # MREC    , W        ,#
                                  ,            , # CTYP    , NCIR     ,#
                                  ,            , # NEN     , COLLECT  ,#
                                  ,            , #         , DT       ,#
                                  ,            , # SDT     , TA       ,#
                                  ,            , # ABL     , DBZ      ,#
                                  ,            , # DBL     , UBZ      ,#
                                  ,            , # UBL     , XBZ      ,#
                                  ,            , # DO      , STREAM   ,#
                                  ,            , # HN      , AUTOLOG  ,#
                                  ,            , # AUTOCON , PRI      ,#
                       USER$PARAM , USER$PARAM , # P90     , P91      ,#
                       USER$PARAM , USER$PARAM , # P92     , P93      ,#
                       USER$PARAM , USER$PARAM , # P94     , P95      ,#
                       USER$PARAM , USER$PARAM , # P96     , P97      ,#
                       USER$PARAM , USER$PARAM ; # P98     , P99       #
      CONTROL EJECT;
#                                                                      #
#                            GENLINE CODE BEGINS HERE                  #
#                                                                      #
      GOTO GENLJUMP[STKWID[I]];        # JUMP BY KEYWORD I.D.          #
PORT: 
      PORTUSED = TRUE;       # SET PORT SPECIFIED FLAG                 #
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$TIP EQ TIP"USER"   # IF TIPTYPE IS USER DEFINED        #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID1,NUM"DEC",GENL$STAT); 
                                                      # MAX USER VALUE #
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],GENL$STAT);  # CHECK FOR MAX   #
                                                     # NORMAL VALUE    #
          END 
        IF GENL$STAT                   # IF VALUE IS WITHIN RANGE      #
        THEN
          BEGIN 
          LRPORT[2] = STVALNUM[I];     # PUT PORT IN LINE-RECORD       #
          LCPORT[1] = STVALNUM[I];     # PUT PORT IN LINE-CONFIG-RECORD#
          IF STSTID[0] NQ STID"GROUP"  # IF THIS STMT IS GROUP         #
          THEN
            BEGIN 
            LCTPORT[LCTWC[1]] = STVALNUM[I]; # PUT PORT IN LINE XREF   #
            END 
          NDLCKPT(STVALNUM[I],CRNT$NID,GENL$STAT); # CHECK PORT        #
          END 
        END 
      GOTO NEXT$PARAM;       # CHECK NEXT PARAMETER                    #
DI: 
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF STVALNAM[I] EQ "YES"        # IF VALUE IS -YES-             #
        THEN
          BEGIN 
          LCST[3] = DI$VAL;            # SET STATUS FLAG IN LINE-CONFIG#
          END                          #   RECORD                      #
        END 
      GOTO NEXT$PARAM;       # CHECK NEXT PARAMETER                    #
IMDISC: 
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF STVALNAM[I] EQ "YES"  # IF YES IS SPECIFIED                 #
        THEN
          BEGIN 
          LINFNFV(FN"IMD",TRUE);  # STORE LINE FNFV                    #
          END 
        ELSE
          BEGIN 
          LINFNFV(FN"IMD",FALSE);  # STORE LINE FNFV                   #
          END 
        END 
      GOTO NEXT$PARAM;       # CHECK NEXT PARAMETER                    #
NI: 
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$TIP EQ TIP"USER"   # IF TIPTYPE IS USER DEFINED        #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID1,NUM"DEC",GENL$STAT); 
                                                      # USER VALUE     #
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],GENL$STAT);  # CHECK FOR MAX   #
                                                     # NORMAL VALUE    #
          END 
        IF GENL$STAT                   # IF VALUE IS WITHIN RANGE      #
        THEN
          BEGIN 
          LRGC[1] = STVALNUM[I] - 1;   # PUT -NI- IN LINE-RECORD       #
          LCNI[0] = STVALNUM[I];       # PUT -NI- IN LINE-CONFIG-RECORD#
          IF LCTWC[1]+LCNI[0] GQ LCT$LENG 
          THEN               # IF NEED MORE SPACE FOR ENTRIES          #
            BEGIN 
            SSTATS(P<LINE$XREF>,LCNI[0]+1); # ALLOCATE MORE TABLE SPACE#
            END 
          IF NOT STLBERR[1] AND STVALNUM[I] GR 1
          THEN               # IF LABEL IS O.K. AND -NI- GREATER THAN 1#
            BEGIN            #   MAKE ENTRY IN LINE-XREF FOR EACH LABEL#
            FOR J=STLBPNTR[1]+1 STEP 1 UNTIL (STLBPNTR[1] + LCNI[0]) - 1
            DO               # BEGINNING WITH THE SECOND LABEL         #
              BEGIN 
              LCTWC[1] = LCTWC[1] + 1; # INCREMENT ENTRY COUNT         #
              LCTWORD[LCTWC[1]] = 0;   # CLEAR ENTRY                   #
              LCTNAME[LCTWC[1]] = LABLNAM[J];    # ENTER LABEL         #
              LCTNID[LCTWC[1]] = CRNT$NID;       # ENTER NPU NODE I.D. #
            IF CRNT$TIP EQ TIP"USER"             # IF TIPTYPE IS USER  #
            THEN
              BEGIN 
              USR$RANGE(LABLPORT[J],USR$WID1,NUM"DEC",GENL$STAT); 
                                                          # VALUE CHECK#
              END 
            ELSE
              BEGIN 
              NDLCKRG(KID"PORT",LABLPORT[J],GENL$STAT);  # CHECK NORMAL#
                                                         # RANGE       #
              END 
              IF GENL$STAT             # IF PORT IS WITHIN RANGE       #
              THEN
                BEGIN 
                LCTPORT[LCTWC[1]] = LABLPORT[J]; # PUT -PORT- IN XREF  #
                NDLCKPT(LABLPORT[J],CRNT$NID,GENL$STAT); # CHECK PORT  #
                END 
              END 
            END 
          END 
        END 
      GOTO NEXT$PARAM;       # CHECK NEXT PARAMETER                    #
AL: 
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$TIP EQ TIP"USER"  # IF TIPTYPE IS USER DEFINED         #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID1,NUM"DEC",GENL$STAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],GENL$STAT);  # CHECK RANGE     #
          END 
        IF GENL$STAT                 # IF VALUE IS WITHIN RANGE        #
        THEN
          BEGIN                      # ENTER FNFV PAIR IN RECORD       #
          AL$USED = TRUE;            # SET AL USED FLAG                #
          B<38,1>STVALNUM[I] = 1;  # SET VALID FLAG                    #
          LINFNFV(FN"AL",STVALNUM[I]);
          END 
        END 
      GOTO NEXT$PARAM;       # CHECK NEXT PARAMETER                    #
RC: 
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF STVALNAM[I] EQ "YES"  # IF YES IS SPECIFIED                 #
        THEN
          BEGIN 
          LINFNFV(FN"RC",TRUE);  # STORE LINE FNFV                     #
          END 
        ELSE
          BEGIN 
          LINFNFV(FN"RC",FALSE);  # STORE LINE FNFV                    #
          END 
        END 
      GOTO NEXT$PARAM;       # CHECK NEXT PARAMETER                    #
  
USER$PARAM: 
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$TIP EQ TIP"USER"   # IF TIPTYPE IS USER DEFINED        #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID1,NUM"HEX",GENL$STAT); 
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],GENL$STAT); # CHECK FOR MAX    #
                                                    # VALUE RANGE      #
          END 
        IF GENL$STAT                   # IF VALUE IS WITHIN RANGE      #
        THEN
          BEGIN                        # MAKE FNFV PAIR ENTRY IN RECORD#
          LINFNFV(STKWID[I]+10,STVALNUM[I]);
          END 
        END 
      GOTO NEXT$PARAM;       # CHECK NEXT PARAMETER                    #
NEXT$PARAM: 
      RETURN;                # **** RETURN ****                        #
      END # GENLINE # 
      CONTROL EJECT;
      PROC X25LINE; 
      BEGIN 
*IF,DEF,IMS 
# 
**    X25LINE - CHECK X.25 LINE PARAMETERS
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS PARAMETERS LEGAL FOR X.25 LINES.
* 
*     PROC X25LINE
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     SELECT CASE THAT APPLIES
*       CASE 1(DFL,FRAME,RCOUNT,NSVC):  
*         IF VALUE IS O.K., 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             PUT VALUE IN LINE CONFIG ENTRY. 
*       CASE 2(RTIME):  
*         IF VALUE IS O.K., 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             DIVIDE VALUE BY 100.
*             PUT RESULT IN LINE CONFIG ENTRY.
*       CASE 3(PSN):  
*         IF VALUE IS O.K., 
*           MAP PSN TO NUMERIC VALUE. 
*           PUT VALUE IN LINE CONFIG ENTRY. 
*       CASE 4(DCE):  
*         IF VALUE IS O.K., 
*           IF VALUE IS -YES-,
*           THEN, 
*             PUT VALUE OF TRUE IN LINE CONFIG ENTRY. 
*           OTHERWISE,
*             PUT VALUE OF FALSE IN LINE CONFIG ENTRY.
*       CASE 5(DTEA): 
*         IF VALUE IS WITH RANGE, 
*             PERFORM FNFV ENTRY FOR DTEA SPECIFIED.
* 
# 
*ENDIF
# 
****  PROC X25LINE - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECKS IF VALUE IS WITHIN RANGE         #
        FUNC XCDD U;         # CONVERT INTEGER TO DECIMAL DISPLAY CODE #
        END 
# 
****
# 
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      ITEM J;                # SCRATCH ITEM                            #
      ITEM VALUE;            # INTEGER TEMPORARY FOR VALUE             #
      ITEM X25$STAT B;       # RETURNED STATUS FROM RANGE CHECK PROC   #
      ARRAY ERROR$WORD [0:0] S(1);     # BUFFER WORD FOR ERROR MESSAGE #
        BEGIN 
        ITEM PARAM C(0,0,4)   = ["    "];   # PARAMETER                #
        ITEM SLASH C(0,24,1)  = ["/"];
        ITEM PVALUE U(0,30,30);             # VALUE                    #
        END 
      DEF MXPSN # 10 #;                # MAXIMUM NUMBER OF PSN VALUES  #
      ARRAY PSN$TABLE [1:MXPSN] S(1); 
        BEGIN 
        ITEM PSN$VAL C(0,0,7) = [ "DATAPAC",     # PSN VALUES          #
                                  "TELENET",
                                  "TRNSPAC",
                                  "TYMNET ",
                                  "CDSN  ", 
                                  "UNINET", 
                                  "C120   ",
                                  "PSN253 ",
                                  "PSN254 ",
                                  "PSN255 " 
                                ];
        ITEM PSN$NUMV (0,42,18) = [  1,          # PSN NUMERICAL VALUES#
                                     2, 
                                     3, 
                                     4, 
                                     5, 
                                     6, 
                                     7, 
                                   253, 
                                   254, 
                                   255
                                  ];
        END 
      SWITCH X25JUMP              ,            , # UNKNOWN , NODE     ,#
                                  ,            , # VARIANT , OPGO     ,#
                                  ,            , # DMP     , LLNAME   ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # HNAME   , LOC      ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NCNAME  , DI       ,#
                                  ,            , # N1      , P1       ,#
                                  ,            , # N2      , P2       ,#
                                  ,            , # NOLOAD1 , NOLOAD2  ,#
                                  ,            , #         ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # NI      , PORT     ,#
                                  ,            , # LTYPE   , TIPTYPE  ,#
                                  ,            , # AUTO    , SL       ,#
                                  , DFL        , # LSPEED  , DFL      ,#
                        FRAME     , RTIME      , # FRAME   , RTIME    ,#
                        RCOUNT    , NSVC       , # RCOUNT  , NSVC     ,#
                        PSN       , DCE        , # PSN     , DCE      ,#
                        DTEA      ,            , # DTEA    ,          ,#
                        LCN       ,            , # LCN     ,          ,#
                                  ,            , #         ,          ,#
                                  ,            , # STIP    , TC       ,#
                                  ,            , # RIC     , CSET     ,#
                                  ,            , # TSPEED  , CA       ,#
                                  ,            , # CO      , BCF      ,#
                                  ,            ; # MREC    , W         #
#                                                                      #
#                            X25LINE CODE BEGINS HERE                  #
#                                                                      #
      GOTO X25JUMP[STKWID[I]];         # CASE ON KEYWORD I.D.          #
DFL:  
      DFLUSED = TRUE;        # SET DFL SPECIFIED FLAG                  #
      IF NOT STVLERR[I]      # IF THE VALUE IS O.K.                    #
      THEN
        BEGIN                          # CHECK IF VALUE IS WITHIN RANGE#
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID2,NUM"DEC",X25$STAT);
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],X25$STAT);  # NORMAL RANGE     #
                                                    # CHECKS           #
          END 
        IF X25$STAT                    # IF IT IS IN RANGE             #
        THEN                           #   STORE DFL VALUE IN LINE     #
          BEGIN                        #   CONFIGURE RECORD            #
          IF CRNT$TIP EQ TIP"X25" 
          THEN
            BEGIN 
            ITEMP = 16;      # SET TO MINIMUM DPLS VALUE               #
            FOR J=4 STEP 1 WHILE ITEMP LS STVALNUM[I] 
            DO               # DETERMINE VALUE (POWER OF TWO)          #
              BEGIN 
              ITEMP = ITEMP * 2;       # SET TO NEXT POWER OF TWO      #
              END 
            LINFNFV(FN"DFL",J);        # STORE DFL VALUE               #
            IF STVALNUM[I] NQ ITEMP 
            THEN                       # VALUE IS NOT POWER OF 2       #
              BEGIN                    # FLAG WARNING                  #
              PARAM[0]  = X25$PNAM[STKWID[I]];  # PARAMETER NAME       #
              PVALUE[0] = XCDD(ITEMP); # STORE VALUE                   #
              NDLEM2(ERR137,STLNUM[0],ERROR$WORD);
              END 
            END 
          ELSE               # MUST BE A USER TIPTYPE                  #
            BEGIN 
            LINFNFV(FN"DFL",STVALNUM[I]);        # STORE DFL VALUE     #
            END 
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
FRAME:  
      FRMUSED = TRUE;        # SET FRAME SPECIFIED FLAG                #
      IF NOT STVLERR[I]      # IF THE VALUE IS O.K.                    #
      THEN
        BEGIN                          # CHECK IF VALUE IS WITHIN RANGE#
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID1,NUM"DEC",X25$STAT);
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],X25$STAT);  # NORMAL RANGE     #
                                                    # CHECKS           #
          END 
        IF X25$STAT                    # IF VALUE IS WITHIN RANGE      #
        THEN                           #   STORE FRAME VALUE           #
          BEGIN 
          LINFNFV(FN"FRAME",STVALNUM[I]); 
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
LCN:  
      IF NOT STVLERR[I]      # IF THE VALUE IS O.K.                    #
      THEN
        BEGIN 
        NDLCKRG(STKWID[I],STVALNUM[I],X25$STAT);  # CHECK RANGE        #
        IF X25$STAT                    # IF VALUE IS WITHIN RANGE      #
        THEN                           # STORE LCN VALUE               #
          BEGIN 
          LINFNFV(FN"LCN",STVALNUM[I]); 
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
  
RTIME:  
      RTMUSED = TRUE;        # SET RTIME SPECIFIED FLAG                #
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # CHECK IF VALUE IS WITHIN RANGE#
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID1*100,NUM"DEC",X25$STAT);
                                                     # MULTIPLES OF 100#
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],X25$STAT);  # NORMAL RANGE     #
                                                    # CHECKS           #
          END 
        IF X25$STAT                    # IF VALUE IS IN RANGE          #
        THEN                           #   DIVIDE THE VALUE BY 100     #
          BEGIN                        #   AND ROUND UP TO THE NEAREST #
          ITEMP = STVALNUM[I];         #   MULTIPLE OF 100             #
          FOR VALUE=0 STEP 1 WHILE ITEMP GR 0 
          DO
            BEGIN 
            ITEMP = ITEMP - 100;
            END                        # STORE VALUE IN LIN$CON$REC    #
          LINFNFV(FN"RTIME",VALUE); 
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
RCOUNT: 
      RCNTUSED = TRUE;       # SET RCOUNT SPECIFIED FLAG               #
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # CHECK IF VALUE IS WITHIN RANGE#
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID1,NUM"DEC",X25$STAT);
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],X25$STAT);  # NORMAL RANGE     #
                                                    # CHECKS           #
          END 
        IF X25$STAT                    # IF VALUE IS WITHIN RANGE      #
        THEN
          BEGIN                        # STORE RCOUNT IN LIN$CON$REC   #
          LINFNFV(FN"RCOUNT",STVALNUM[I]);
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
NSVC: 
      NSVCUSED = TRUE;       # SET NSVC SPECIFIED FLAG                 #
      NSVCERR = TRUE;        # SET NSVC ERROR FLAG                     #
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # CHECK IF VALUE IS WITHIN RANGE#
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(STVALNUM[I],USR$WID2,NUM"DEC",X25$STAT);
          END 
        ELSE
          BEGIN 
          NDLCKRG(STKWID[I],STVALNUM[I],X25$STAT);  # NORMAL RANGE     #
                                                    # CHECKS           #
          END 
        IF X25$STAT                    # IF VALUE IS WITHIN RANGE      #
        THEN
          BEGIN 
          NSVCERR = FALSE;             # CLEAR NSVC ERROR FLAG         #
          SVC$CNT = STVALNUM[I];       # SAVE NSVC VALUE               #
          LINFNFV(FN"SVC",SVC$CNT); 
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
PSN:  
      PSNUSED = TRUE;        # SET PSN SPECIFIED FLAG                  #
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # SEARCH PSN TABLE FOR VALUE    #
        FOR J=1 STEP 1 UNTIL MXPSN
        DO
          BEGIN 
          IF STVALNAM[I] EQ PSN$VAL[J] # IF VALUE IS FOUND             #
          THEN
            BEGIN                      #STORE NUMERICAL VALUE IN RECORD#
            LINFNFV(FN"PSN",PSN$NUMV[J]); 
            END 
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
DCE:  
      DCEUSED = TRUE;        # SET DCE SPECIFIED FLAG                  #
      IF NOT STVLERR[I]      # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF STVALNAM[I] EQ "YES"        # IF VALUE IS YES               #
        THEN
          BEGIN                        # STORE VALUE -TRUE- IN RECORD  #
          LINFNFV(FN"DCE",TRUE);
          DCE$FLG = TRUE;              # SET DCE FLAG                  #
          END 
        ELSE                           # VALUE IS NO                   #
          BEGIN                        # STORE VALUE -FALSE- IN RECORD #
          LINFNFV(FN"DCE",FALSE); 
          END 
        END 
      GOTO NEXT$PARAM;       # GO TO NEXT PARAMETER                    #
DTEA: 
      DTEAUSED = TRUE;       # SET DTEA SPECIFIED FLAG                 #
      IF NOT STVLERR[I] 
      THEN                   # IF VALUE IS O.K.                        #
        BEGIN 
        IF STVALLEN[I] LQ MXDTEA
        THEN                 # IF VALUE IS WITHIN RANGE                #
          BEGIN              # CONVERT VALUE                           #
          DTEA$VAL[0] = 0;   # CLEAR DTEA TEMPORARY                    #
          DTEA$VL1[0] = C<0,1>STVALNAM[I] - ZERO; 
          IF STVALLEN[I] GR 1 
          THEN               # IF VALUE IS TWO DIGITS                  #
            BEGIN 
            DTEA$VL2[0] = C<1,1>STVALNAM[I] - ZERO; 
            END 
          LINFNFV(FN"DTEA",DTEA$VAL[0]);     # PUT VALUE IN LINE ENTRY #
          END 
        ELSE                 # VALUE IS TOO BIG                        #
          BEGIN              # FLAG ERROR -- VALUE OUT OF RANGE        #
          NDLEM2(ERR100,STLNUM[0],STVALNAM[I]); 
          END 
        END 
      GOTO NEXT$PARAM;
      GOTO NEXT$PARAM;
NEXT$PARAM: 
      RETURN;                # **** RETURN ****                        #
      END # X25LINE # 
      CONTROL EJECT;
#                                                                      #
#                            LINGRPR CODE BEGINS HERE                  #
#                                                                      #
      CRNT$LSPD = LSPD"UNKNOWN";       # AND INITIALIZE VALUES         #
      DCEUSED = FALSE;
      DCE$FLG = FALSE;
      DEVCNT = 0; 
      DFLUSED = FALSE;
      DTEAUSED = FALSE; 
      FRMUSED = FALSE;
      LSPDUSED = FALSE; 
      ARSUSED =  FALSE; 
      NSVCUSED = FALSE; 
      PORTUSED = FALSE; 
      AL$USED = FALSE;
      PSNUSED = FALSE;
      RCNTUSED = FALSE; 
      RTMUSED = FALSE;
      LCR$EXIST = TRUE;                # SET LINE CONFIG REC EXISTS FLG#
      LCTWC[1] = LCTWC[1] + 1;         # INCREMENT WORD COUNT IN XREF  #
      LCTWORD[LCTWC[1]] = 0;           # CLEAR ENTRY WORD IN XREF      #
      LR$EXIST = TRUE;                 # SET LINE RECORD EXISTS FLAG   #
      LRWORD[1] = 0;                   # CLEAR WORD 1 IN LINE RECORD   #
      LRWORD[2] = 0;                   # CLEAR WORD 2 IN LINE RECORD   #
      LRWC[1] = 2;                     # SET WORD COUNT IN LINE RECORD #
      LCWORD[0] = 0;                   # CLEAR FIRST WORD IN LC ENTRY  #
      LCWC[0] = LC$FIX$ENT;            # SET WORD COUNT FOR LIN$CON$REC#
      PVC$CNT = 0;                     # CLEAR PVC COUNT               #
      SVC$CNT = 0;                     # CLEAR SVC COUNT               #
      XTERMASK = 0;                    # CLEAR X.25 TERMINAL MASK      #
      SVC$SPEC = FALSE;                # CLEAR SVC SPECIFIED FLAG      #
      FOR I=1 STEP 1 UNTIL LC$LENG     # CLEAR LINE CONFIGURATION      #
      DO                               #   RECORD                      #
        BEGIN 
        LCWORD[I] = 0;
        END 
      IF LCTWC[1] GQ LCT$LENG 
      THEN                   # IF NEED MORE TABLE SPACE FOR ENTRY      #
        BEGIN 
        SSTATS(P<LINE$XREF>,50);        # ALLOCATE MORE SPACE          #
        END 
      IF NOT STLBERR[1]      # IF NO LABEL ERROR                       #
      THEN
        BEGIN 
        LCTNAME[LCTWC[1]] = STLABEL[1];# PUT LABEL IN LINE XREF TABLE  #
        LRNAME[2] = STLABEL[1];        # PUT LABEL IN LINE RECORD      #
        IF STSTID[0] EQ STID"GROUP"    # IF STATEMENT IS A GROUP STMT  #
        THEN
          BEGIN 
          LRGC[1] = 0;       # SET GROUP COUNT TO DEFAULT VALUE IN THE #
          LCNI[0] = 1;       #   LINE RECORD AND LIN$CON$REC           #
          LCTNAME[LCTWC[1]] = LABLNAM[STLBPNTR[1]]; # GENERATED LABEL  #
          LCTPORT[LCTWC[1]] = LABLPORT[STLBPNTR[1]]; # GENERATED PORT  #
          LRPORT[2] = LABLPORT[STLBPNTR[1]];
          END 
        END 
      LCTNID[LCTWC[1]] = CRNT$NID;     # CURRENT NPU NODE I.D. IN XREF #
      LRNID[2] = CRNT$NID;   # PUT CURRENT NODE I.D. IN LINE RECORD    #
      IF STORD1[2] NQ 0      # IF LINE TYPE WAS SPECIFIED              #
      THEN
        BEGIN 
        LTYPE = " ";         # CLEAR CURRENT LINE TYPE                 #
        IF NOT STVLERR[STORD1[2]]      # IF VALUE IS O.K.              #
        THEN
          BEGIN                        # SEARCH FOR LTYPE IN TABLE     #
          FOR I=1 STEP 1 UNTIL MXLTYPE
          DO
            BEGIN                      # IF VALUE IS FOUND IN TABLE    #
            IF STVALNAM[STORD1[2]] EQ LT$VAL[I] 
            THEN
              BEGIN 
              LTYPE = LT$CAT[I];       # STORE LTYPE CATEGORY          #
              LCLTYPE[2] = LT$NUMV[I]; # STORE LTYPE NUMBER            #
              END 
            END 
          END 
        END 
      ELSE                   # LTYPE WAS NOT SPECIFIED                 #
        BEGIN                          # FLAG ERROR -- REQUIRED PARAM  #
        NDLEM2(ERR103,STLNUM[0],"LTYPE");        # MISSING             #
        LTYPE = " ";                   # CLEAR CURRENT LTYPE           #
        END 
      IF STORD2[2] NQ 0      # IF TIPTYPE WAS SPECIFIED                #
      THEN
        BEGIN 
        CRNT$TIP = TIP"UNKNOWN";       # CLEAR CURRENT TIPTYPE         #
        TT$USED = TRUE;                # SET TIPTYPE SPECIFIED FLAG    #
        IF NOT STVLERR[STORD2[2]]      # IF VALUE IS O.K.              #
        THEN
          BEGIN                        # SEARCH TABLE FOR TIPTYPE VALUE#
          FOR I=1 STEP 1 UNTIL MXTTYPE
          DO
            BEGIN                      # IF VALUE IS FOUND             #
            IF STVALNAM[STORD2[2]] EQ TT$VAL[I] 
            THEN
              BEGIN 
              IF TT$NUMV[I] GQ 12 AND  # IF NUMBER VALUE IS BETWEEN    #
                 TT$NUMV[I] LQ 14      # 12 AND 14                     #
              THEN
                BEGIN 
                CRNT$TIP = TIP"USER";  # MUST BE A USER TIPTYPE        #
                LCTTYP$IP[2] = TT$NUMV[I]; # STORE NUMERIC VAL OF TIP  #
                END 
              ELSE           # TIPTYPE IS NOT A USER TIP               #
                BEGIN 
                IF TT$NUMV[I] EQ 15 
                THEN                   # THIS MUST BE 3270             #
                  CRNT$TIP = TIP"$3270";
                ELSE
                  CRNT$TIP = TT$NUMV[I]; # STORE TIPTYPE NUMBER VALUE  #
                LCTTYP$IP[2] = TT$NUMV[I];# STORE NUMBER VALUE OF TIP  #
                IF LTYPE NQ " "        # IF LINE TYPE WAS SPECIFIED    #
                THEN                   #   CHECK IF THEY ARE COMPATIBLE#
                  BEGIN 
                  IF CRNT$TIP EQ TIP"ASYNC" 
                  THEN                 # IF ASYNC TIPTYPE              #
                    BEGIN 
                    IF LTYPE NQ "ASYNC" 
                    THEN               # IF LTYPE IS NOT ASYNC         #
                      BEGIN 
                      NDLEM2(ERR104,STLNUM[0]," "); # FLAG ERROR       #
                      END 
                    END 
                  ELSE       # TIP IS NOT ASYNC                        #
                    BEGIN              # IF X25 TIPTYPE                #
                    IF CRNT$TIP EQ TIP"X25" 
                    THEN
                      BEGIN            # IF LINE TYPE IS NOT X25       #
                      IF LTYPE NQ "X25" 
                      THEN
                        BEGIN 
                        NDLEM2(ERR104,STLNUM[0]," "); # FLAG ERROR     #
                        END 
                      END 
                    ELSE     # NOT ASYNC OR X25 TIPTYPE                #
                      BEGIN            # IF LTYPE IS NOT SYNCHRONOUS   #
                      IF LTYPE NQ "SYNC"
                      THEN
                        BEGIN 
                        NDLEM2(ERR104,STLNUM[0]," "); # FLAG ERROR     #
                        END 
                      END 
                    END 
                  END 
                END 
              END 
            END 
          END 
        END 
      ELSE                   # TIPTYPE WAS NOT SPECIFIED               #
        BEGIN 
        CRNT$TIP = TIP"UNKNOWN";       # CLEAR CURRENT TIPTYPE         #
        TT$USED = FALSE;               # CLEAR TIPTYPE SPECIFIED FLAG  #
        END                                 #   PARAMETER MISSING      #
      AUTO$REC = FALSE;      # CLEAR AUTO RECOGNITION FLAG             #
      XAUTO$REC = FALSE;     # CLEAR XAUTO RECOGNITION FLAG            #
      IF STORD3[2] NQ 0      # IF AUTO PARAMETER WAS SPECIFIED         #
      THEN
        BEGIN 
        IF CRNT$TIP NQ TIP"X25"   # IF TIPTYPE IS NOT X25 OR 3270      #
           AND CRNT$TIP NQ TIP"$3270" 
        THEN
          BEGIN 
          IF STVALNAM[STORD3[2]] EQ "YES" 
          THEN                         # IF VALUE IS YES               #
            BEGIN 
            AUTO$REC = TRUE;           # SET AUTO RECOGNITION FLAG     #
            LCTTYP$A[2] = TRUE;        # SET FLAG IN LIN$CON$REC       #
            LRAUTO[2] = TRUE;          # SET FLAG IN LINE RECORD       #
            IF STKWID[STORD3[2]] EQ KID"XAUTO" # IF XAUTO IS USED      #
            THEN
              BEGIN 
              LC$SRANGE[2] = TRUE;     # SET HIGH SPEED FLAG ON        #
              XAUTO$REC = TRUE;        # SET XAUTO$FLAG ON             #
              END 
            END 
          END 
        ELSE                 # CURRENT TIPTYPE IS X25 OR 3270          #
          BEGIN              # FLAG ERROR -- INVALID WITH TIP SPECIFIED#
          IF STKWID[STORD3[2]] EQ KID"XAUTO" # XAUTO IS USED           #
          THEN
            BEGIN 
            NDLEM2(ERR106,STLNUM[0],"XAUTO"); 
            END 
          ELSE                               # MUST BE AUTO            #
            BEGIN 
            NDLEM2(ERR106,STLNUM[0],"AUTO");
            END 
          END 
        END 
      IF NOT TT$USED         # IF TIPTYPE WAS NOT SPECIFIED            #
      THEN
        BEGIN 
        IF NOT(LTYPE EQ "SYNC" AND     # IF LTYPE IS NOT SYNC          #
               AUTO$REC)     # AND THIS IS NOT AN AUTO-REC LINE        #
        THEN
          BEGIN              # FLAG ERROR -- TIPTYPE MUST BE SPECIFIED #
          NDLEM2(ERR103,STLNUM[0],"TIPTYPE"); 
          END 
        ELSE                 # MUST BE A SYNAUTO LINE                  #
          BEGIN 
          LCTTYP$IP[2] = SYNAUTO;      # PUT SYNAUTO VALUE FOR TIPTYPE #
          END 
        END 
      FOR I=3 STEP 1 UNTIL STWC[0]     # CHECK REMAINDER OF PARAMETERS #
      DO                               #   -- INDEPENDENT PARAMETERS   #
        BEGIN 
        GOTO LINJUMP[STKWID[I]];       # CLASSIFY PARAMETER BY KEYWORD #
GEN$PARAM:                             #   I.D.                        #
        GENLINE;             # GENERAL LINE PARAMETERS                 #
        TEST I; 
X25$PARAM:  
        IF CRNT$TIP EQ TIP"X25" OR
           CRNT$TIP EQ TIP"USER"       # IF CRNT TIP IS X.25 OR USER   #
        THEN
          BEGIN 
          X25LINE;           # CHECK X25 LINE PARAMETERS               #
          END 
        ELSE                 # CRNT TIP IS NOT COMPATIBLE WITH PARAM   #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],X25$PNAM[STKWID[I]]); 
          END 
        TEST I; 
ASY$PARAM:                   # ASYNCHRONOUS LINE PARAMETERS            #
      IF STKWID[I] EQ KID"ARSPEED"     # IF ARSPEED IS THE PARAM       #
      THEN
        BEGIN 
        IF CRNT$TIP EQ TIP"ASYNC" OR
           CRNT$TIP EQ TIP"USER"      # IF ASYNC OR USER TIPTYPE       #
        THEN
          BEGIN 
          IF NOT STVLERR[I]           # IF VALUE  IS O.K.              #
          THEN
            BEGIN 
            ARSUSED = TRUE;           # SET FLAG TO TRUE               #
            LC$ARSPEED[2] = (STVALNAM[I] EQ "YES");# SET FLAG IF YES   #
            END 
          END 
        ELSE
          BEGIN 
          NDLEM2(ERR106,STLNUM[0],"ARSPEED"); # TIPTYPE NOT COMPATIBLE #
          END 
        END 
      ELSE
        BEGIN 
        LSPDUSED = TRUE;               # SET LSPEED SPECIFIED FLAG     #
        IF CRNT$TIP EQ TIP"ASYNC" OR
           CRNT$TIP EQ TIP"USER"
        THEN                 # IF TIPTYPE IS ASYNC OR USER             #
          BEGIN 
          IF CRNT$TIP EQ TIP"ASYNC" AND 
             AUTO$REC 
          THEN               # IF ASYNC TIP AND AUTO REC LINE          #
            BEGIN            #   FLAG ERROR -- LSPEED ALLOWED ON NON-  #
            NDLEM2(ERR105,STLNUM[0]," ");   # AUTO REC ASYNC LINES     #
            END 
          ELSE               # MUST BE NON-AUTO REC OR USER TIP LINE   #
            BEGIN 
            IF NOT STVLERR[I]          # IF VALUE IS O.K.              #
            THEN
              BEGIN                    # SEARCH LSPEED TABLE FOR VALUE #
              FOR J=1 STEP 1 UNTIL MXLSPD 
              DO
                BEGIN                  # IF VALUE IS FOUND             #
                IF STVALNAM[I] EQ LST$VAL[J]
                THEN
                  BEGIN                # MAKE FNFV PAIR ENTRY          #
                  LINFNFV(FN"LSPEED",LST$NUMV[J]);
                  CRNT$LSPD = LST$NUMV[J];  # SAVE CURRENT LSPEED      #
                  END 
                END 
              END 
            END 
          END 
        ELSE                 # TIP IS NOT ASYNC OR USER                #
          BEGIN              # FLAG ERROR -- LSPEED ALLOWED ON NON-AUTO#
          NDLEM2(ERR105,STLNUM[0]," "); # REC ASYNC LINES ONLY         #
          END 
        END 
      TEST I; 
NEXT:                        # GOTO NEXT PARAMETER                     #
        END 
      IF LCNI[0] EQ 1 
      THEN
        BEGIN 
        LRNAME[2] = LABLNAM[STLBPNTR[1]]; 
        END 
      IF NOT PORTUSED        # IF PORT WAS NOT SPECIFIED               #
      THEN
        BEGIN                # FLAG ERROR -- REQUIRED PARAMETER MISSING#
        NDLEM2(ERR103,STLNUM[0],"PORT");
        END 
      IF CRNT$TIP EQ TIP"ASYNC"        # IF TIPTYPE IS ASYNC           #
      THEN
        BEGIN 
        IF NOT AUTO$REC AND  # IF NON-AUTO REC AND LSPEED NOT SPECIFIED#
           NOT LSPDUSED 
        THEN
          BEGIN              # MAKE FNFV PAIR ENTRY WITH DEFAULT LSPEED#
          LINFNFV(FN"LSPEED",DEF$LSPD); 
          CRNT$LSPD = DEF$LSPD;        # SAVE DEFAULT LSPEED           #
          END 
        END 
      IF CRNT$TIP EQ TIP"X25" AND 
         STSTID[0] NQ STID"GROUP"      # X25 TIPTYPE AND NOT GROUP STMT#
      THEN
        BEGIN 
        IF NOT DFLUSED       # IF DFL WAS NOT SPECIFIED                #
        THEN
          BEGIN              # FLAG ERROR -- REQUIRED PARAMETER MISSING#
          NDLEM2(ERR103,STLNUM[0],"DFL"); 
          END 
        IF NOT FRMUSED       # IF FRAME WAS NOT SPECIFIED              #
        THEN
          BEGIN              # FLAG ERROR -- REQUIRED PARAMETER MISSING#
          NDLEM2(ERR103,STLNUM[0],"FRAME"); 
          END 
        IF NOT RTMUSED       # IF RTIME WAS NOT SPECIFIED              #
        THEN
          BEGIN              # FLAG ERROR -- REQUIRED PARAMETER MISSING#
          NDLEM2(ERR103,STLNUM[0],"RTIME"); 
          END 
        IF NOT PSNUSED       # IF PSN WAS NOT SPECIFIED                #
        THEN
          BEGIN              # FLAG ERROR -- REQUIRED PARAMETER MISSING#
          NDLEM2(ERR103,STLNUM[0],"PSN"); 
          END 
        IF NOT RCNTUSED      # IF RCOUNT NOT SPECIFIED                 #
        THEN
          BEGIN              # MAKE FNFV PAIR ENTRY WITH DEFAULT RCOUNT#
          LINFNFV(FN"RCOUNT",DEF$RCNT); 
          END 
        IF NOT DCEUSED       # IF DCE NOT SPECIFIED                    #
        THEN
          BEGIN              # MAKE FNFV PAIR ENTRY WITH DEFAULT DCE   #
          LINFNFV(FN"DCE",DEF$DCE); 
          END 
        IF NOT DCE$FLG AND
           DTEAUSED          # IF DCE WAS NOT SPECIFIED AND DTEA WAS   #
        THEN
          BEGIN              # FLAG ERROR -- DTEA INVALID ON NON DCE LN#
          NDLEM2(ERR156,STLNUM[0]," "); 
          END 
        END 
      IF CRNT$TIP EQ TIP"X25" OR       # IF USER TIP AND X25 LINE      #
         (CRNT$TIP EQ TIP"USER" AND LTYPE EQ "X25") 
      THEN
        BEGIN 
        IF NOT NSVCUSED                # IF NSVC NOT SPECIFED          #
        THEN                           #  PUT DEFAULT IN LIN$CON$REC   #
          BEGIN 
          LINFNFV(FN"SVC",SVC$CNT); 
          END 
        END 
      IF NOT ARSUSED         # IF NOT ARSUSED                          #
      THEN
        BEGIN 
        IF CRNT$TIP EQ TIP"ASYNC"      # IF ASYNC TIPTYPE              #
        THEN
          BEGIN 
          IF AUTO$REC OR XAUTO$REC     # IF AUTO-RECOGNITION LINE      #
          THEN
            BEGIN 
            LC$ARSPEED[2] = TRUE;      # SET FLAG TO TRUE              #
            END 
          END 
        END 
      IF NOT AUTO$REC 
      THEN                   # IF NOT AN AUTO-REC LINE,                #
        BEGIN 
        MAXTERM = TRM$MAX[CRNT$TIP];   # SAVE MAXIMUM NUMBER OF TERMS  #
        TERMCNT = 0;                   # CLEAR TERMINAL STMT COUNT     #
        END 
      IF NOT AL$USED
      THEN
        BEGIN 
        LINFNFV(FN"AL",0);           # MAKE 0 ENTRY FOR AL             #
        END 
      CA$MAP = 0;            # CLEAR -CA- BIT MAP                      #
      RETURN;                # **** RETURN ****                        #
      END # LINGRPR # 
      CONTROL EJECT;
      PROC TERMPR;
      BEGIN 
*IF,DEF,IMS 
# 
**    TERMPR - TERMINAL STATEMENT PROC. 
* 
*     D.K. ENDO    81/11/20 
* 
*     THIS PROCEDURE CHECKS THE TC AND STIP PARAMETERS, TERMINAL STMT 
*     COUNT, AND CALL A PROC, BASED ON TIPTYPE, TO CHECK THE REMAINING
*     PARAMETERS. 
* 
*     PROC TERMPR 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     INITIALIZE FLAGS AND VALUES.
*     INITIALIZE NEXT TERMINAL ENTRY. 
*     IF LINE IS AUTO-REC,
*       CLEAR DEVICE STATEMENT COUNT. 
*       INCREMENT TERMINAL STATEMENT COUNT. 
*       IF TERMINAL COUNT GREATER THAN MAXIMUM ALLOWED, 
*         FLAG ERROR -- MAXIMUM TERMINAL COUNT EXCEEDED.
*     PUT CURRENT TIPTYPE IN TERMINAL ENTRY FROM LINE CONFIG ENTRY. 
*     IF STIP WAS SPECIFIED,
*       IF VALUE IS O.K., 
*         IF VALUE IS -AUTOREC-,
*         THEN, 
*           IF LINE IS NOT AUTO-REC,
*             FLAG ERROR -- INVALID VALUE.
*         OTHERWISE,
*           MAP STIP NUMERIC VALUE. 
*           PUT STIP VALUE IN TERMINAL ENTRY. 
*           IF TIP IS NOT USER OR UNKNOWN,
*             IF TIPTYPE IS NOT COMPATIBLE WITH STIP, 
*               FLAG ERROR -- STIP AND TIPTYPE VALUE NOT COMPATIBLE.
*               SET CURRENT STIP TO UNKNOWN.
*     IF TC WAS SPECIFIED,
*       IF VALUE IS O.K., 
*         IF VALUE IS -CCP-,
*         THEN
*           CLEAR TC SPECIFIED FLAG.
*         OTHERWISE,
*           MAP TC NUMERIC VALUE. 
*           PUT VALUE IN TERMINAL ENTRY.
*           IF TIPTYPE IS NOT USER AND TC IS NOT USER,
*             IF STIP IS NOT UNKNOWN, 
*             THEN, 
*               IF STIP IS NOT COMPATIBLE WITH TC,
*                 FLAG ERROR -- TC AND STIP NOT COMPATIBLE
*                 SET CURRENT TC TO UNKNOWN.
*             OTHERWISE,
*               IF TIPTYPE IS NOT UNKNOWN,
*                 IF TIPTYPE AND TC ARE NOT COMPATIBLE, 
*                   FLAG ERROR -- TC AND TIPTYPE NOT COMPATIBLE.
*                   SET CURRENT TC TO UNKNOWN.
*     IF TIPTYPE IS NOT USER
*       IF STIP WAS NOT SPECIFIED,
*           IF TC WAS SPECIFIED,
*           THEN, 
*             DEFAULT STIP ACCORDING TO TC. 
*             IF TIPTYPE IS X.25, 
*               DEFAULT STIP TO -PAD-.
*             PUT STIP IN TERMINAL ENTRY. 
*           OTHERWISE,
*             FLAG ERROR -- TC OR STIP REQUIRED.
*     IF TIPTYPE IS SYNAUTO,
*       DEFAULT TIPTYPE ACCORDING TO STIP.
*       PUT TIPTYPE VALUE IN TERMINAL ENTRY.
*     SELECT CASE THAT APPLIES, 
*       CASE 1(ASYNC TIP):  
*         CHECK ASYNC TERMINAL STMT ENTRY.
*       CASE 2(MODE4 TIP):  
*         CHECK MODE4 TERMINAL STMT ENTRY.
*       CASE 3(HASP TIP): 
*         CHECK HASP TERMINAL STMT ENTRY. 
*       CASE 4(X25 TIP):  
*         CHECK X25 TERMINAL STMT ENTRY.
*       CASE 5(BSC TIP):  
*         CHECK BSC TERMINAL STMT ENTRY.
*       CASE 6(USER OR UNKNOWN TIP):  
*         CHECK USER TERMINAL STMT ENTRY. 
*     IF CSET WAS NOT SPECIFIED AND NOT AN AUTO-REC LINE, 
*       DEFAULT CSET ACCORDING TO STIP. 
*       PUT VALUE IN TERMINAL ENTRY.
*     IF LINE IS NOT AUTOREC, 
*     THEN, 
*       DEFAULT MAXIMUM DEVICE STMTS ALLOWED ACCORDING TO TIPTYPE.
*     OTHERWISE,
*       SET MAXIMUM NUMBER OF DEVICE STMTS TO 255.
* 
# 
*ENDIF
# 
****  PROC TERMPR - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRIES IN PASS 2 ERROR FILE      #
        END 
# 
****
# 
      DEF MXTRENT # 3 #;     # MAXIMUM WORD COUNT FOR TERMINAL ENTRY   #
      DEF NCIR$DEF # 1 #;    # DEFAULT VALUE FOR NCIR                  #
      ITEM CA$USED B;        # CA SPECIFIED FLAG                       #
      ITEM CSET$USED B;      # CSET SPECIFIED FLAG                     #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM RIC$USED B;       # RIC SPECIFIED FLAG                      #
      ITEM STIP$USED B;      # STIP SPECIFIED FLAG                     #
      ITEM TC$USED B;        # TC SPECIFIED FLAG                       #
      DEF MXTKWD # 78 #;     # MAXIMUM NUMBER TERMINAL KEYWORDS        #
      DEF W$DEF # 2 #;       # W DEFAULT                               #
      ARRAY KYWD$NAM$TAB [0:MXTKWD] S(1); 
        BEGIN 
        ITEM KWDNAME C(0,0,10) = ["STIP", 
                                  "TC", 
                                  "RIC",
                                  "CSET", 
                                  "TSPEED", 
                                  "CA", 
                                  "CO", 
                                  "BCF",
                                  "MREC", 
                                  "W",
                                  "CTYP", 
                                  "NCIR", 
                                  "NEN",
                                  "COLLECT",
                                  ,    # XAUTO                         #
                                  ,    # DT                            #
                                  ,    # SDT                           #
                                  ,    # TA                            #
                                  ,    # ABL                           #
                                  ,    # DBZ                           #
                                  ,    # UBZ                           #
                                  ,    # DBL                           #
                                  ,    # UBL                           #
                                  ,    # XBZ                           #
                                  ,    # DO                            #
                                  ,    # STREAM                        #
                                  ,    # HN                            #
                                  ,    # AUTOLOG                       #
                                  ,    # AUTOCON                       #
                                  ,    # PRI                           #
                                  ,    # P80                           #
                                  ,    # P81                           #
                                  ,    # P82                           #
                                  ,    # P83                           #
                                  ,    # P84                           #
                                  ,    # P85                           #
                                  ,    # P86                           #
                                  ,    # P87                           #
                                  ,    # P88                           #
                                  ,    # P89                           #
                                  ,    # AB                            #
                                  ,    # BR                            #
                                  ,    # BS                            #
                                  ,    # B1                            #
                                  ,    # B2                            #
                                  ,    # CI                            #
                                  ,    # CN                            #
                                  ,    # CT                            #
                                  ,    # DLC                           #
                                  ,    # DLTO                          #
                                  ,    # DLX                           #
                                  ,    # EP                            #
                                  ,    # IN                            #
                                  ,    # LI                            #
                                  ,    # OP                            #
                                  ,    # PA                            #
                                  ,    # PG                            #
                                  ,    # PL                            #
                                  ,    # PW                            #
                                  ,    # SE                            #
                                  ,    # FA                            #
                                  ,    # XLC                           #
                                  ,    # XLX                           #
                                  ,    # XLTO                          #
                                  ,    # ELO                           #
                                  ,    # ELX                           #
                                  ,    # ELR                           #
                                  ,    # EBO                           #
                                  ,    # EBR                           #
                                  ,    # CP                            #
                                  ,    # IC                            #
                                  ,    # OC                            #
                                  ,    # LK                            #
                                  ,    # EBX                           #
                                  ,    # HD                            #
                                  ,    # MC                            #
                                  ,    # XLY                           #
                             "EOF",    # EOF                           #
                             "PAD"     # PAD                           #
                                 ]; 
        END 
      DEF MXSTIP # 11 #;     # MAXIMUM NUMBER OF STIPS                 #
      ARRAY STIP$TABLE [0:MXSTIP] S(2); 
        BEGIN 
        ITEM STIP$VAL C(0,0,7) = [,"M4A",        # STIP VALUES         #
                                   "M4C", 
                                   "2741",
                                   "N2741", 
                                   "POST",
                                   "PRE", 
                                   "PAD", 
                                   "USER",
                                   "XAA", 
                                   "2780",
                                   "3780" 
                                  ];
        ITEM STIP$NUMV U(0,42,3) = [0, # UNKNOWN -- NUMERICAL VALUES   #
                                    1, # M4A                           #
                                    2, # M4C                           #
                                    2, # 2741                          #
                                    1, # N2741                         #
                                    1, # POST                          #
                                    2, # PRE                           #
                                    1, # PAD                           #
                                    6, # USER                          #
                                    3, # XAA                           #
                                    1, # 2780                          #
                                    2, # 3780                          #
                                   ]; 
        ITEM STIP$STATUS U(0,45,5) =[STIP"UNKNOWN", # STIP STATUS VALUE#
                                     STIP"M4A", 
                                     STIP"M4C", 
                                     STIP"$2741", 
                                     STIP"N2741", 
                                     STIP"POST",
                                     STIP"PRE", 
                                     STIP"PAD", 
                                     STIP"USER",
                                     STIP"XAA", 
                                     STIP"$2780", 
                                     STIP"$3780"
                                   ]; 
        ITEM STIP$TIP U(0,50,5) = [TIP"UNKNOWN", # ALLOWABLE TIP VALUE #
                                   TIP"MODE4",
                                   TIP"MODE4",
                                   TIP"ASYNC",
                                   TIP"ASYNC",
                                   TIP"HASP", 
                                   TIP"HASP", 
                                   TIP"X25",
                                   TIP"X25",
                                   TIP"X25",
                                   TIP"BSC",
                                   TIP"BSC" 
                                  ];
        ITEM STIP$TIP$MAP U(1,0,15) = [       0, # TIPTYPE ALLOWED MAP #
                                       O"10000",
                                       O"10000",
                                       O"20000",
                                       O"20000",
                                       O"04000",
                                       O"04000",
                                       O"02000",
                                       O"02000",
                                       O"02000",
                                       O"01000",
                                       O"01000" 
                                      ];
        ITEM CSET$DEF (1,30,15) = [CSET"UNKNOWN",  # UNKNOWN           #
                                   CSET"ASCII",    # M4A               #
                                   CSET"ASCII",    # M4C               #
                                   CSET"CORRES",   # 2741              #
                                   CSET"ASCII",    # N2741             #
                                   CSET"EBCDIC",   # POST              #
                                   CSET"EBCDIC",   # PRE               #
                                   CSET"ASCII",    # PAD               #
                                   CSET"ASCII",    # USER              #
                                   CSET"ASCII",    # XAA               #
                                   CSET"EBCDIC",   # 2780              #
                                   CSET"EBCDIC"    # 3780              #
                                  ];
        END 
      DEF MXTC # 24 #;       # MAXIMUM NUMBER OF TC VALUES             #
      ARRAY TC$TABLE [1:MXTC] S(2); 
        BEGIN 
        ITEM TC$VAL C(0,0,7) = ["M33", # TC VALUES                     #
                                "713",
                                "721",
                                "2741", 
                                "M40",
                                "H2000",
                                "751",
                                "T4014",
                                "HASP", 
                                "200UT",
                                "714X", 
                                "711",
                                "714",
                                "HPRE", 
                                "734",
                                "2780", 
                                "3780", 
                                "752",
                                "X364", 
                                "3270", 
                                "TC28", 
                                "TC29", 
                                "TC30", 
                                "TC31", 
                               ]; 
        ITEM TC$NUMV U(0,45,5) = [1,   # M33 -- TC NUMERICAL VALUE     #
                                  2,   # 713                           #
                                  3,   # 721                           #
                                  4,   # 2741                          #
                                  5,   # M40                           #
                                  6,   # H2000                         #
                                  2,   # 751                           #
                                  8,   # T4014                         #
                                  9,   # HASP                          #
                                 10,   # 200UT                         #
                                 11,   # 714X                          #
                                 12,   # 711                           #
                                 13,   # 714                           #
                                 14,   # HPRE                          #
                                 15,   # 734                           #
                                 16,   # 2780                          #
                                 17,   # 3780                          #
                                  2,   # 752                           #
                                  7,   # X364                          #
                                 18,   # 3270                          #
                                 28,   # TC28                          #
                                 29,   # TC29                          #
                                 30,   # TC30                          #
                                 31,   # TC31                          #
                                 ]; 
        ITEM TC$STATUS U(0,50,5) = [TC"M33",     # TC STATUS VALUE     #
                                    TC"$713", 
                                    TC"$721", 
                                    TC"$2741",
                                    TC"M40",
                                    TC"H2000",
                                    TC"$751", 
                                    TC"T4014",
                                    TC"HASP", 
                                    TC"$200UT", 
                                    TC"$714X",
                                    TC"$711", 
                                    TC"$714", 
                                    TC"HPRE", 
                                    TC"$734", 
                                    TC"$2780",
                                    TC"$3780",
                                    TC"$752", 
                                    TC"X364", 
                                    TC"$3270",
                                    TC"USER", 
                                    TC"USER", 
                                    TC"USER", 
                                    TC"USER", 
                                   ]; 
        ITEM DEF$STIP U(0,55,5) = [STIP"N2741",  # M33 -- DEFAULT STIP #
                                   STIP"N2741",  # 713/751/X364        #
                                   STIP"N2741",  # 721                 #
                                   STIP"$2741",  # 2741                #
                                   STIP"N2741",  # M40                 #
                                   STIP"N2741",  # H2000               #
                                   STIP"N2741",  # 751                 #
                                   STIP"N2741",  # T4014               #
                                   STIP"POST",   # HASP                #
                                   STIP"M4A",    # 200UT               #
                                   STIP"M4C",    # 714X                #
                                   STIP"M4C",    # 711                 #
                                   STIP"M4C",    # 714                 #
                                   STIP"PRE",    # HPRE                #
                                   STIP"M4A",    # 734                 #
                                   STIP"$2780",  # 2780                #
                                   STIP"$3780",  # 3780                #
                                   STIP"N2741",  # 752                 #
                                   STIP"N2741",  # X364                #
                                   STIP"UNKNOWN",# 3270                #
                                   STIP"UNKNOWN",# TC28                #
                                   STIP"UNKNOWN",# TC29                #
                                   STIP"UNKNOWN",# TC30                #
                                   STIP"UNKNOWN",# TC31                #
                                  ];
        ITEM STIP$AMAP U(1,0,15) = [O"02200",    # M33 -- STIP ALLOWED #
                                    O"02200",    # 713                 #
                                    O"02200",    # 721                 #
                                    O"04000",    # 2741                #
                                    O"02200",    # M40                 #
                                    O"02200",    # H2000               #
                                    O"02200",    # 751                 #
                                    O"02200",    # T4014               #
                                    O"01000",    # HASP                #
                                    O"20000",    # 200UT               #
                                    O"10000",    # 714X                #
                                    O"10000",    # 711                 #
                                    O"10000",    # 714                 #
                                    O"00400",    # HPRE                #
                                    O"20000",    # 734                 #
                                    O"00020",    # 2780                #
                                    O"00010",    # 3780                #
                                    O"02200",    # 752                 #
                                    O"02200",    # X364                #
                                           0,    # 3270 -- N/A         #
                                    O"37770",    # TC28                #
                                    O"37770",    # TC29                #
                                    O"37770",    # TC30                #
                                    O"37770",    # TC31                #
                                   ]; 
        ITEM TC$TIP$AMAP U(1,15,15) = [O"22000", # M33 -- TIP ALLOWED  #
                                       O"22000", # 713                 #
                                       O"22000", # 721                 #
                                       O"20000", # 2741                #
                                       O"22000", # M40                 #
                                       O"22000", # H2000               #
                                       O"22000", # 751                 #
                                       O"22000", # T4014               #
                                       O"04000", # HASP                #
                                       O"10000", # 200UT               #
                                       O"10000", # 714X                #
                                       O"10000", # 711                 #
                                       O"10000", # 714                 #
                                       O"04000", # HPRE                #
                                       O"10000", # 734                 #
                                       O"01000", # 2780                #
                                       O"01000", # 3780                #
                                       O"22000", # 752                 #
                                       O"22000", # X364                #
                                       O"00400", # 3270                #
                                       O"37000", # TC28                #
                                       O"37000", # TC29                #
                                       O"37000", # TC30                #
                                       O"37000", # TC31                #
                                      ];
        END 
      SWITCH TRMJUMP USER,   # UNKNOWN TIPTYPE                         #
                     ASYNC,  # ASYNC TIPTYPE                           #
                     MODE4,  # MODE4 TIPTYPE                           #
                     HASP,   # HASP TIPTYPE                            #
                     X25,    # X25 TIPTYPE                             #
                     BSC,    # BISYNC TIPTYPE                          #
                     $3270,  # 3270 TIPTYPE                            #
                     USER;   # USER TIPTYPE                            #
      CONTROL EJECT;
      PROC ASYTERM; 
      BEGIN 
*IF,DEF,IMS 
# 
**    ASYTERM -- CHECKS TERMINAL PARAMETERS LEGAL FOR ASYNC TIP.
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMRTER 
*     ON THE STATEMENT. 
* 
*     PROC ASYTERM
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(RIC,CSET): 
*           CHECK GENERAL PARAMETER.
*         CASE 2(TSPEED): 
*           IF LINE IS AUTO-REC,
*           THEN
*             CHECK ASYNC PARAMETER.
*           OTHERWISE,
*             FLAG ERROR -- TSPEED VALID ON AUTO-REC LINES ONLY.
*         CASE 3(CA,CO,BCF,MREC,W,CTYP,NCIR,NEN,COLLECT,EOF): 
*           FLAG ERROR -- INVALID PARAMETER.
* 
# 
*ENDIF
# 
****  PROC ASYTERM XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      DEF TS2400 # 7 #;      # TERMINAL SPEED 2400                     #
      DEF TS600  # 5 #;      # TERMINAL SPEED 600                      #
      ITEM I;                # SCRATCH ITEM                            #
      ITEM SWITCH$ID;        # USED AS I.D. FOR KEYWORD                #
      SWITCH ASYTJUMP   NEXT$PARAM,    # STIP                          #
                        NEXT$PARAM,    # TC                            #
                        GEN$PARAM ,    # RIC                           #
                        GEN$PARAM ,    # CSET                          #
                        ASY$PARAM ,    # TSPEED                        #
                        OTHERS    ,    # CA                            #
                        OTHERS    ,    # CO                            #
                        OTHERS    ,    # BCF                           #
                        OTHERS    ,    # MREC                          #
                        OTHERS    ,    # W                             #
                        OTHERS    ,    # CTYP                          #
                        OTHERS    ,    # NCIR                          #
                        OTHERS    ,    # NEN                           #
                        OTHERS    ,    # COLLECT                       #
                        OTHERS    ,    # XAUTO                         #
                        OTHERS    ,    # DT                            #
                        OTHERS    ,    # SDT                           #
                        OTHERS    ,    # TA                            #
                        OTHERS    ,    # ABL                           #
                        OTHERS    ,    # DBZ                           #
                        OTHERS    ,    # UBZ                           #
                        OTHERS    ,    # DBL                           #
                        OTHERS    ,    # UBL                           #
                        OTHERS    ,    # XBZ                           #
                        OTHERS    ,    # DO                            #
                        OTHERS    ,    # STREAM                        #
                        OTHERS    ,    # HN                            #
                        OTHERS    ,    # AUTOLOG                       #
                        OTHERS    ,    # AUTOCON                       #
                        OTHERS    ,    # PRI                           #
                        OTHERS    ,    # P80                           #
                        OTHERS    ,    # P81                           #
                        OTHERS    ,    # P82                           #
                        OTHERS    ,    # P83                           #
                        OTHERS    ,    # P84                           #
                        OTHERS    ,    # P85                           #
                        OTHERS    ,    # P86                           #
                        OTHERS    ,    # P87                           #
                        OTHERS    ,    # P88                           #
                        OTHERS    ,    # P89                           #
                        OTHERS    ,    # AB                            #
                        OTHERS    ,    # BR                            #
                        OTHERS    ,    # BS                            #
                        OTHERS    ,    # B1                            #
                        OTHERS    ,    # B2                            #
                        OTHERS    ,    # CI                            #
                        OTHERS    ,    # CN                            #
                        OTHERS    ,    # CT                            #
                        OTHERS    ,    # DLC                           #
                        OTHERS    ,    # DLTO                          #
                        OTHERS    ,    # DLX                           #
                        OTHERS    ,    # EP                            #
                        OTHERS    ,    # IN                            #
                        OTHERS    ,    # LI                            #
                        OTHERS    ,    # OP                            #
                        OTHERS    ,    # PA                            #
                        OTHERS    ,    # PG                            #
                        OTHERS    ,    # PL                            #
                        OTHERS    ,    # PW                            #
                        OTHERS    ,    # SE                            #
                        OTHERS    ,    # FA                            #
                        OTHERS    ,    # XLC                           #
                        OTHERS    ,    # XLX                           #
                        OTHERS    ,    # XLTO                          #
                        OTHERS    ,    # ELO                           #
                        OTHERS    ,    # ELX                           #
                        OTHERS    ,    # ELR                           #
                        OTHERS    ,    # EBO                           #
                        OTHERS    ,    # EBR                           #
                        OTHERS    ,    # CP                            #
                        OTHERS    ,    # IC                            #
                        OTHERS    ,    # OC                            #
                        OTHERS    ,    # LK                            #
                        OTHERS    ,    # EBX                           #
                        OTHERS    ,    # HD                            #
                        OTHERS    ,    # MC                            #
                        OTHERS    ,    # XLY                           #
                        OTHERS    ,    # EOF                           #
                        OTHERS    ;    # PAD                           #
#                                                                      #
#                            ASYTERM CODE BEGINS HERE                  #
#                                                                      #
      FOR I=2 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE-DECLARATION              #
        BEGIN 
        SWITCH$ID = STKWID[I] - KID"STIP";       # CALCULATE SWITCH ID #
        GOTO ASYTJUMP[SWITCH$ID];      # GO TO APPROPRIATE PARAGRAPH   #
GEN$PARAM:  
        GENTERM(SWITCH$ID,STWORD[I],STLNUM[0]);  # GENERAL PARAMETERS  #
        GOTO NEXT$PARAM;
ASY$PARAM:  
        IF AUTO$REC          # IF TERMINAL IS ON A AUTO-REC LINE       #
        THEN
          BEGIN              # CHECK ASYNC PARAMETER                   #
          ATRMPRM(SWITCH$ID,STWORD[I],STLNUM[0]); 
          IF NOT XAUTO$REC   # IF NOT XAUTO FLAG SET                   #
          THEN
            BEGIN 
            IF CRNT$TSPD GR TS2400 # IF TSPEED GR 2400                 #
            THEN
              BEGIN 
              NDLEM2(ERR162,STLNUM[0],"AUTO");
              END 
            END 
          ELSE
            BEGIN 
            IF XAUTO$REC      # IF XAUTO FLAG IS SET                   #
            THEN
              BEGIN 
              IF CRNT$TSPD LS TS600 # IF TSPEED LESS THAN 600          #
              THEN
                BEGIN 
                NDLEM2(ERR162,STLNUM[0],"XAUTO"); 
                END 
              END 
            END 
          END 
        ELSE                 # NON-AUTO-REC LINE                       #
          BEGIN              # FLAG ERROR -- VALID FOR AUTO-REC ONLY   #
          NDLEM2(ERR107,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        GOTO NEXT$PARAM;
OTHERS:                      # ALL OTHER PARAMETERS FLAG AS INVALID    #
        NDLEM2(ERR106,STLNUM[0],KWDNAME[SWITCH$ID]); # FOR ASYNC LINES #
        GOTO NEXT$PARAM;
        IF STKWID[I] EQ KID"PAD"
        THEN
          BEGIN                        # STATEMENT TABLE               #
          I = I + MAXPADW;             # PAD ENTRIES ARE 1+MAXPADW LONG#
          END 
NEXT$PARAM:                  # GO TO NEXT PARAMETER                    #
        END 
      RETURN;                # **** RETURN ****                        #
      END # ASYTERM # 
      CONTROL EJECT;
      PROC ATRMPRM(ASY$ID,ASY$WORD,ASY$LINE); 
      BEGIN 
*IF,DEF,IMS 
# 
**    ATRMPRM -- CHECK ASYNC TERMINAL PARAMETER.
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CHECKS PARAMETERS THAT CAN ONLY BE SPECIFIED FOR 
*     AN ASYNC TERMINAL.
* 
*     PROC ATRMPRM(ASY$ID,ASY$WORD,ASY$LINE)
* 
*     ENTRY        ASY$ID = NUMBER IDENTIFYING KEYWORD. 
*                  ASY$WORD = VALUE DECLARATION ENTRY.
*                  ASY$LINE = CURRENT SOURCE LINE NUMBER. 
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     IF VALUE IS NOT -AUTOREC- 
*     THEN, 
*       IF VALUE IS O.K.
*         MAP NUMERIC VALUE FOR TSPEED. 
*         PUT TSPEED VALUE IN CURRENT TERMINAL ENTRY. 
*         IF TIPTYPE IS NOT USER AND STIP IS NOT UNKNOWN, 
*           IF STIP IS NOT COMPATIBLE WITH TSPEED,
*             FLAG ERROR
*     OTHERWISE,
*       IF LINE IS NOT AUTO-REC,
*         FLAG ERROR -- AUTOREC VALUE NOT VALID.
* 
# 
*ENDIF
      ITEM ASY$ID;           # KEYWORD I.D. FOR SWITCH                 #
      ITEM ASY$LINE;         # STATEMENT LINE NUMBER                   #
      ARRAY ASY$WORD [0:0] S(1);       # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM ASY$VLERR B(0,17,1);      # VALUE ERROR FLAG              #
        ITEM ASY$VALNAM C(0,18,7);     # CHARACTER VALUE               #
        ITEM ASY$VALNUM (0,18,42);     # INTEGER VALUE                 #
        END 
# 
****  PROC ATRMPRM - XREF LIST BEGINS 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRIES IN PASS 2 ERROR FILE      #
        END 
# 
****
# 
      ITEM I;                # SCRATCH ITEM                            #
      DEF MXTSPD # 11 #;     # MAXIMUM NUMBER OF TSPEED VALUES         #
      ARRAY TSPEED$TABLE [1:MXTSPD] S(1); 
        BEGIN 
        ITEM TSPD$VAL C(0,0,7) = ["110",         # TSPEED VALUE        #
                                  "134",
                                  "150",
                                  "300",
                                  "600",
                                  "1200", 
                                  "2400", 
                                  "4800", 
                                  "9600", 
                                  "19200",
                                  "38400" 
                                 ]; 
        ITEM TSPD$ST$ALLW U(00,42,09) = [O"020", # STIP ALLOWED MAP    #
                                         O"040",
                                         O"020",
                                         O"060",
                                         O"020",
                                         O"020",
                                         O"020",
                                         O"020",
                                         O"20", 
                                         O"20", 
                                         O"20"
                                        ];
        ITEM TSPD$NUMV U(0,51,09) = [ 1,         # TSPEED INTEGER VALUE#
                                      2,
                                      3,
                                      4,
                                      5,
                                      6,
                                      7,
                                      8,
                                      9,
                                     10,
                                     11 
                                    ];
        END 
#                                                                      #
#                            ATRMPRM CODE BEGINS HERE                  #
#                                                                      #
      IF ASY$VALNAM[0] NQ "AUTOREC"    # IF VALUE IS NOT AUTOREC       #
      THEN
        BEGIN 
        IF NOT ASY$VLERR[0]            # IF VALUE IS O.K.              #
        THEN
          BEGIN 
          FOR I=0 STEP 1 UNTIL MXTSPD  # SEARCH TABLE FOR TSPEED       #
          DO
            BEGIN                      # IF VALUE IS FOUND             #
            IF ASY$VALNAM[0] EQ TSPD$VAL[I] 
            THEN
              BEGIN                    # PUT INTEGER VAL IN TERM ENTRY #
              TETS[CRNT$TERM + 1] = TSPD$NUMV[I]; 
              CRNT$TSPD = TSPD$NUMV[I]; 
              IF CRNT$TIP NQ TIP"USER" AND
                      CRNT$STIP NQ STIP"UNKNOWN"
              THEN           # CURRENT TIP IS NOT USER AND STIP NOT UNK#
                BEGIN 
                IF B<CRNT$STIP,1>TSPD$ST$ALLW[I] NQ 1 
                THEN         # IF TSPEED NOT ALLOWED WITH STIP         #
                  BEGIN      # FLAG ERROR -- VALUE NOT VALID WITH STIP #
                  NDLEM2(ERR111,ASY$LINE,ASY$VALNAM[0]);
                  END 
                END 
              END 
            END 
          END 
        END 
      ELSE                   # VALUE IS NOT AUTOREC                    #
        BEGIN 
        IF NOT AUTO$REC      # IF FIXED CONFIGURED LINE                #
        THEN
          BEGIN              # FLAG ERROR -- AUTOREC NOT VALID         #
          NDLEM2(ERR113,ASY$LINE," ");
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # ATRMPRM # 
      CONTROL EJECT;
      PROC BSCTERM; 
      BEGIN 
*IF,DEF,IMS 
# 
**    BSCTERM -- CHECK TERMINAL PARAMETERS LEGAL FOR BSC TIP. 
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMETER 
*     ON THE STATEMENT. 
* 
*     PROC BSCTERM
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION ENTRY, 
*       SELECT THE CASE THAT APPLIES, 
*         CASE 1(RIC,CSET): 
*           CHECK GENERAL PARAMETER.
*         CASE 2(CO): 
*           IF LINE IS AUTO-REC,
*           THEN, 
*             CHECK HASP/BSC PARAMETERS.
*           OTHERWISE,
*             FLAG ERROR -- VALID FOR AUTO-REC LINES ONLY.
*         CASE 3(BCF,MREC): 
*           IF STIP IS 3780,
*           THEN, 
*             FLAG ERROR -- PARAMETER VALID FOR 2780 TERMINALS ONLY.
*           OTHERWISE,
*             CHECK BISYNC PARAMETER. 
* 
*         CASE 4(TSPEED,CA,W,CTYP,NCIR,NEN,COLLECT,EOF):  
*           FLAG ERROR -- PARAMETER NOT ALLOWED.
*     IF RIC WAS NOT SPECIFIED, 
*       SET RIC FLAG TO TRUE. 
* 
# 
*ENDIF
# 
****  PROC BSCTERM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      ITEM I;                # SCRATCH ITEM -- POINTS TO CURRNT VAL-DEC#
      ITEM SWITCH$ID;        # USED AS I.D. FOR KEYWORD                #
      SWITCH BSCTJUMP   NEXT$PARAM,    # STIP                          #
                        NEXT$PARAM,    # TC                            #
                        GEN$PARAM ,    # RIC                           #
                        GEN$PARAM ,    # CSET                          #
                        OTHERS    ,    # TSPEED                        #
                        OTHERS    ,    # CA                            #
                        HB$PARAM  ,    # CO                            #
                        BSC$PARAM ,    # BCF                           #
                        BSC$PARAM ,    # MREC                          #
                        OTHERS    ,    # W                             #
                        OTHERS    ,    # CTYP                          #
                        OTHERS    ,    # NCIR                          #
                        OTHERS    ,    # NEN                           #
                        OTHERS    ,    # COLLECT                       #
                        OTHERS    ,    # XAUTO                         #
                        OTHERS    ,    # DT                            #
                        OTHERS    ,    # SDT                           #
                        OTHERS    ,    # TA                            #
                        OTHERS    ,    # ABL                           #
                        OTHERS    ,    # DBZ                           #
                        OTHERS    ,    # UBZ                           #
                        OTHERS    ,    # DBL                           #
                        OTHERS    ,    # UBL                           #
                        OTHERS    ,    # XBZ                           #
                        OTHERS    ,    # DO                            #
                        OTHERS    ,    # STREAM                        #
                        OTHERS    ,    # HN                            #
                        OTHERS    ,    # AUTOLOG                       #
                        OTHERS    ,    # AUTOCON                       #
                        OTHERS    ,    # PRI                           #
                        OTHERS    ,    # P80                           #
                        OTHERS    ,    # P81                           #
                        OTHERS    ,    # P82                           #
                        OTHERS    ,    # P83                           #
                        OTHERS    ,    # P84                           #
                        OTHERS    ,    # P85                           #
                        OTHERS    ,    # P86                           #
                        OTHERS    ,    # P87                           #
                        OTHERS    ,    # P88                           #
                        OTHERS    ,    # P89                           #
                        OTHERS    ,    # AB                            #
                        OTHERS    ,    # BR                            #
                        OTHERS    ,    # BS                            #
                        OTHERS    ,    # B1                            #
                        OTHERS    ,    # B2                            #
                        OTHERS    ,    # CI                            #
                        OTHERS    ,    # CN                            #
                        OTHERS    ,    # CT                            #
                        OTHERS    ,    # DLC                           #
                        OTHERS    ,    # DLTO                          #
                        OTHERS    ,    # DLX                           #
                        OTHERS    ,    # EP                            #
                        OTHERS    ,    # IN                            #
                        OTHERS    ,    # LI                            #
                        OTHERS    ,    # OP                            #
                        OTHERS    ,    # PA                            #
                        OTHERS    ,    # PG                            #
                        OTHERS    ,    # PL                            #
                        OTHERS    ,    # PW                            #
                        OTHERS    ,    # SE                            #
                        OTHERS    ,    # FA                            #
                        OTHERS    ,    # XLC                           #
                        OTHERS    ,    # XLX                           #
                        OTHERS    ,    # XLTO                          #
                        OTHERS    ,    # ELO                           #
                        OTHERS    ,    # ELX                           #
                        OTHERS    ,    # ELR                           #
                        OTHERS    ,    # EBO                           #
                        OTHERS    ,    # EBR                           #
                        OTHERS    ,    # CP                            #
                        OTHERS    ,    # IC                            #
                        OTHERS    ,    # OC                            #
                        OTHERS    ,    # LK                            #
                        OTHERS    ,    # EBX                           #
                        OTHERS    ,    # HD                            #
                        OTHERS    ,    # MC                            #
                        OTHERS    ,    # XLY                           #
                        OTHERS    ,    # EOF                           #
                        OTHERS    ;    # PAD                           #
#                                                                      #
#                            BSCTERM CODE BEGINS HERE                  #
#                                                                      #
      FOR I=2 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE DECLARATION ENTRY        #
        BEGIN 
        SWITCH$ID = STKWID[I] - KID"STIP";       # CALCULATE SWITCH ID #
        GOTO BSCTJUMP[SWITCH$ID];      # GO TO APPROPRIATE PARAGRAPH   #
GEN$PARAM:  
        GENTERM(SWITCH$ID,STWORD[I],STLNUM[0]);  # GENERAL PARAMETERS  #
        GOTO NEXT$PARAM;
HB$PARAM: 
        IF AUTO$REC          # IF TERMINAL IS ON A AUTO-REC LINE       #
        THEN
          BEGIN 
          HBTRMPR(SWITCH$ID,STWORD[I],STLNUM[0]);# HASP/BSC PARAMETERS #
          END 
        ELSE                 # NON-AUTO-REC LINE                       #
          BEGIN              # FLAG ERROR -- VALID FOR AUTO-REC ONLY   #
          NDLEM2(ERR107,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        GOTO NEXT$PARAM;
BSC$PARAM:  
        IF CRNT$STIP NQ STIP"$2780" AND 
           CRNT$STIP NQ STIP"UNKNOWN" 
        THEN                 # IF STIP IS NOT 2780 OR UNKNOWN          #
          BEGIN              # FLAG ERROR -- VALID ON 2780 TERMS ONLY  #
          NDLEM2(ERR108,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        ELSE                 # MUST BE 2780 OR UNKNOWN                 #
          BEGIN 
          BTRMPRM(SWITCH$ID,STWORD[I],STLNUM[0]);# CHECK BSC PARAMETER #
          END 
        GOTO NEXT$PARAM;
OTHERS:                      # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS LINE IS AUTO-SYNC               #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        IF STKWID[I] EQ KID"PAD"
        THEN
          BEGIN                        # STATEMENT TABLE               #
          I = I + MAXPADW;             # PAD ENTRIES ARE 1+MAXPADW LONG#
          END 
NEXT$PARAM:                  # GO TO NEXT PARAMETER                    #
        END 
      IF NOT RIC$USED                  # IF RIC NOT SPECIFIED          #
      THEN
        BEGIN 
        RIC$FLAG = TRUE;               # DEFAULT RIC VALUE             #
        END 
      RETURN;                # **** RETURN ****                        #
      END # BSCTERM # 
      CONTROL EJECT;
      PROC BTRMPRM(BTRM$ID,BTRM$WORD,BTRM$LINE);
      BEGIN 
*IF,DEF,IMS 
# 
**    BTRMPRM -- CHECKS BSC TERMINAL PARAMETERS.
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE PARAMETERS THAT CAN ONLY BE SPECIFIED FOR BISYNC 
*     TERMINALS.
* 
*     PROC BTRMPRM(BTRM$ID,BTRM$WORD,BTRM$LINE) 
* 
*     ENTRY        BTRM$ID = NUMBER IDENTIFYING KEYWORD.
*                  BTRM$WORD = VALUE DECLARATION ENTRY. 
*                  BTRM$LINE = CURRENT SOURCE LINE NUMBER.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     SELECT CASE THAT APPLIES, 
*       CASE 1(BCF):  
*         IF VALUE IS O.K.
*           IF VALUE IS -YES- 
*             SET BCF FLAG. 
*       CASE 2(MREC): 
*         IF VALUE IS O.K., 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             SAVE CURRENT MREC VALUE 
* 
# 
*ENDIF
      ITEM BTRM$ID;                    # KEYWORD I.D. FOR SWITCH       #
      ITEM BTRM$LINE;                  # STATEMENT LINE NUMBER         #
      ARRAY BTRM$WORD [0:0] S(1);      # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM BTRM$KWID (0,0,9);        # KEYWORD I.D. FROM PASS 1      #
        ITEM BTRM$VLERR B(0,17,1);     # VALUE ERROR FLAG              #
        ITEM BTRM$VALNAM C(0,18,7);    # CHARACTER VALUE               #
        ITEM BTRM$VALNUM (0,18,42);    # INTEGER VALUE                 #
        END 
# 
****  PROC BTRMPRM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECK IF VALUE IS WITHIN RANGE          #
        END 
# 
****
# 
      ITEM BTRM$STAT B;      # RETURNED STATUS FROM RANGE CHECK PROC   #
      SWITCH BTRMJUMP      , # STIP                                    #
                           , # TC                                      #
                           , # RIC                                     #
                           , # CSET                                    #
                           , # TSPEED                                  #
                           , # CA                                      #
                           , # CO                                      #
                        BCF, # BCF                                     #
                       MREC; # MREC                                    #
#                                                                      #
#                            BTRMPRM CODE BEGINS HERE                  #
#                                                                      #
      GOTO BTRMJUMP[BTRM$ID];          # CHECK GIVEN VALUE DECLARATION #
BCF:  
      IF NOT BTRM$VLERR[0]             # IF VALUE IS O.K.              #
      THEN
        BEGIN 
        IF BTRM$VALNAM[0] EQ "YES"     # IF VALUE IS -YES-             #
        THEN
          BEGIN 
          BCF$FLAG = TRUE;             # SET BCF FLAG                  #
          END 
        END 
      GOTO NEXT$PARAM;
MREC: 
      IF NOT BTRM$VLERR[0]             # IF VALUE IS O.K.              #
      THEN
        BEGIN                          # CHECK IF VALUE IS WITHIN RANGE#
        IF CRNT$TIP EQ TIP"USER"       # IF USER TIP IS USER DEFINED   #
        THEN
          BEGIN 
          USR$RANGE(BTRM$VALNUM[0],USR$WID1,NUM"DEC",BTRM$STAT);
                                                         # RANGE       #
          END 
        ELSE
          BEGIN 
          NDLCKRG(BTRM$KWID[0],BTRM$VALNUM[0],BTRM$STAT); 
          END 
        IF BTRM$STAT                   # IF WITHIN RANGE               #
        THEN
          BEGIN 
          CRNT$MREC = BTRM$VALNUM[0];  # SAVE MREC VALUE               #
          END 
        END 
      GOTO NEXT$PARAM;
NEXT$PARAM: 
      RETURN;                # **** RETURN ****                        #
      END # BTRMPRM # 
      CONTROL EJECT;
      PROC GENTERM(GTRM$ID,GTRM$WORD,GTRM$LINE);
      BEGIN 
*IF,DEF,IMS 
# 
**    GENTERM -- CHECK GENERAL TERMINAL PARAMETERS. 
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CHECKS TERMINAL PARAMETERS THAT ARE LEGAL FOR ALL
*     TIPTYPES. 
* 
*     PROC GENTERM(GTRM$ID,GTRM$WORD,GTRM$LINE) 
* 
*     ENTRY        GTRM$ID = NUMBER IDENTIFYING KEYWORD.
*                  GTRM$WORD = VALUE DECLARATION ENTRY. 
*                  GTRM$LINE = CURRENT SOURCE LINE NUMBER.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     SELECT CASE THAT APPLIES, 
*       CASE 1(CSET): 
*         IF VALUE IS O.K., 
*           IF VALUE IS NOT -AUTOREC-,
*           THEN, 
*             MAP CSET NUMERIC VALUE. 
*             IF TIPTYPE AND CSET IS NOT -USER- 
*               IF TC IS NOT USER OR UNKNOWN, 
*               THEN, 
*                 IF TC AND CSET ARE NOT COMPATIBLE,
*                   FLAG ERROR. 
*               OTHERWISE,
*                 IF STIP IS NOT UNKNOWN, 
*                 THEN, 
*                   IF STIP AND CSET ARE NOT COMPATIBLE,
*                     FLAG ERROR. 
*                 OTHERWISE,
*                   IF TIPTYPE IS NOT UNKNOWN,
*                     IF TIPTYPE AND CSET ARE NOT COMPATIBLE, 
*                       FLAG ERROR. 
*             PUT CSET VALUE IN CURRENT TERMINAL ENTRY. 
*           OTHERWISE,
*             IF LINE IS NOT AUTO-REC 
*               FLAG ERROR -- AUTOREC VALUE INVALID.
*       CASE 2(RIC):  
*         IF VALUE IS O.K., 
*           IF VALUE IS -YES-,
*             SET RIC FLAG. 
* 
# 
*ENDIF
      ITEM GTRM$ID;                    # KEYWORD I.D. FOR SWITCH       #
      ITEM GTRM$LINE;                  # STATEMENT LINE NUMBER         #
      ARRAY GTRM$WORD [0:0] S(1);      # VALUE DECLARATION ENTRY       #
      BEGIN 
        ITEM GTRM$VLERR B(0,17,1);     # VALUE ERROR FLAG              #
        ITEM GTRM$VALNAM C(0,18,7);    # CHARACTER VALUE               #
        ITEM GTRM$VALNUM  (0,18,42);   # INTEGER VALUE                 #
        END 
# 
****  PROC GENTERM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN ERROR FILE               #
        END 
# 
****
# 
      ITEM I;                # SCRATCH ITEM                            #
      DEF MXCSET # 10 #;     # MAXIMUM NUMBER OF CODE SETS             #
      ARRAY CSET$TABLE [1:MXCSET] S(1); 
        BEGIN 
        ITEM CSET$VAL C(0,0,7) = ["BCD",         # CHARACTER VALUE     #
                                  "ASCII",
                                  "APLTP",
                                  "APLBP",
                                  "EBCD", 
                                  "EBCDAPL",
                                  "CORRES", 
                                  "CORAPL", 
                                  "EBCDIC", 
                                  "CSET15"
                                 ]; 
        ITEM CSET$NUMV (0,42,18) = [1, # BCD     -- INTEGER VALUE      #
                                    2, # ASCII                         #
                                    3, # APLTP                         #
                                    4, # APLBP                         #
                                    5, # EBCD                          #
                                    6, # EBCDAPL                       #
                                    7, # CORRES                        #
                                    8, # CORAPL                        #
                                    9, # EBCDIC                        #
                                   15  # CSET15                        #
                                   ]; 
        END 
      ARRAY CSET$ALLOWED [1:15] S(1);  # CODE SET ALLOWED MAP -- BIT   #
        BEGIN                          #   SET IF PARAM VALUE IS COMPAT#
        ITEM TC$AMAP U(0,0,30) = [O"0002040000", # BCD -- AND TC VALUE #
                                  O"3573646000", # ASCII               #
                                  O"3570000000", # APLTP               #
                                  O"3570000000", # APLBP               #
                                  O"0200000000", # EBCD                #
                                  O"0200000000", # EBCDAPL             #
                                  O"0200000000", # CORRES              #
                                  O"0200000000", # CORAPL              #
                                  O"0004131000", # EBCDIC              #
                                  ,,,,, 
                                  O"3377770000"  # CSET15              #
                                 ]; 
        ITEM STIP$AMAP U(0,30,15) = [O"20000",   # BCD -- AND STIP VAL #
                                     O"32340",   # ASCII               #
                                     O"02000",   # APLTP               #
                                     O"02000",   # APLBP               #
                                     O"04000",   # EBCD                #
                                     O"04000",   # EBCDAPL             #
                                     O"04000",   # CORRES              #
                                     O"04000",   # CORAPL              #
                                     O"01430",   # EBCDIC              #
                                     ,,,,,
                                     O"37770"    # CSET15              #
                                    ];
        ITEM TTYP$AMAP U(0,45,15) =[O"10200",    # BCD -- AND TIPTYPE  #
                                    O"32200",    # ASCII               #
                                    O"20200",    # APLTP               #
                                    O"20200",    # APLBP               #
                                    O"20200",    # EBCD                #
                                    O"20200",    # EBCDAPL             #
                                    O"20200",    # CORRES              #
                                    O"20200",    # CORAPL              #
                                    O"05600",    # EBCDIC              #
                                    ,,,,, 
                                    O"37600"     # CSET15              #
                                   ]; 
        END 
      SWITCH GTRMJUMP     ,  # STIP    #
                          ,  # TC      #
                      RIC ,  # RIC     #
                      CSET$; # CSET    #
      CONTROL EJECT;
#                                                                      #
#                            GTRMPRM CODE BEGINS HERE                  #
#                                                                      #
      GOTO GTRMJUMP[GTRM$ID];          # PROCESS GIVEN PARAMETER       #
CSET$:  
      CSET$USED = TRUE;      # SET CSET SPECIFIED FLAG                 #
      IF NOT GTRM$VLERR[0]   # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF GTRM$VALNAM[0] NQ "AUTOREC"           # IF VALUE IS NOT AUTO#
        THEN
          BEGIN 
          FOR I=1 STEP 1 UNTIL MXCSET            # SEARCH FOR CSET IN  #
          DO                                     #   TABLE             #
            BEGIN 
            IF GTRM$VALNAM[0] EQ CSET$VAL[I]     # IF CSET FOUND       #
            THEN
              BEGIN 
              CRNT$CSET = CSET$NUMV[I];          # SAVE CSET I.D.      #
              END 
            END 
          IF CRNT$TIP NQ TIP"USER" AND           # IF TIPTYPE IS NOT   #
             CRNT$CSET NQ CSET"USER"             #   USER AND CSET IS  #
          THEN                                   #   NOT USER          #
            BEGIN 
            IF CRNT$TC NQ TC"USER" AND           # IF TC IS NOT USER OR#
               CRNT$TC NQ TC"UNKNOWN"            #   UNKNOWN,          #
            THEN                                 # COMPARE TC AGAINST  #
              BEGIN                              #   CSET              #
              IF B<CRNT$TC,1>TC$AMAP[CRNT$CSET] NQ 1
              THEN                     # IF NOT COMPATIBLE             #
                BEGIN                  #   FLAG ERROR -- NOT COMPATIBLE#
                NDLEM2(ERR110,GTRM$LINE,GTRM$VALNAM[0]);
                END 
              END 
            ELSE             # TC IS USER OR UNKNOWN                   #
              BEGIN          #   CHECK CSET AGAINST STIP               #
              IF CRNT$STIP NQ STIP"UNKNOWN" 
              THEN           # IF STIP IS NOT UNKNOWN                  #
                BEGIN 
                IF B<CRNT$STIP,1>STIP$AMAP[CRNT$CSET] NQ 1
                THEN                   # IF NOT COMPATIBLE             #
                  BEGIN                #   FLAG ERROR -- NOT COMPATIBLE#
                  NDLEM2(ERR111,GTRM$LINE,GTRM$VALNAM[0]);
                  END 
                END 
              ELSE           # STIP IS UNKNOWN                         #
                BEGIN        #   CHECK CSET AGAINST TIPTYPE            #
                IF CRNT$TIP NQ TIP"UNKNOWN" 
                THEN         # IF TIPTYPE IS NOT UNKNOWN               #
                  BEGIN      #   CHECK CSET AGAINST TIPTYPE            #
                  IF B<CRNT$TIP,1>TTYP$AMAP[CRNT$CSET] NQ 1 
                  THEN                 # IF NOT COMPATIBLE             #
                    BEGIN              #   FLAG ERROR -- NOT COMPATIBLE#
                    NDLEM2(ERR112,GTRM$LINE,GTRM$VALNAM); 
                    END 
                  END 
                END 
              END 
            END 
          TECD[CRNT$TERM+1] = CRNT$CSET;         # SAVE CSET VALUE     #
          END 
        ELSE                 # CSET VALUE IS AUTO-REC                  #
          BEGIN 
          IF NOT AUTO$REC    # IF FIXED CONFIGURED LINE                #
          THEN
            BEGIN            # FLAG ERROR -- AUTOREC NOT VALID         #
            NDLEM2(ERR113,GTRM$LINE," "); 
            END 
          END 
        END 
      GOTO NEXT$PARAM;
RIC:  
      RIC$USED = TRUE;       # SET RIC SPECIFIED FLAG                  #
      IF NOT GTRM$VLERR[0]   # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF GTRM$VALNAM[0] EQ "YES"
        THEN                 # IF VALUE IS -YES-                       #
          BEGIN 
          RIC$FLAG = TRUE;   # SET RIC FLAG                            #
          END 
        END 
      GOTO NEXT$PARAM;
NEXT$PARAM: 
      RETURN;                # **** RETURN ****                        #
      END # GTRMPRM # 
      CONTROL EJECT;
      PROC HBTRMPR(HBTRM$ID,HBTRM$WORD,HBTRM$LINE); 
      BEGIN 
*IF,DEF,IMS 
# 
**    HBTRMPR -- CHECK HASP/BSC TERMINAL PARAMETERS 
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CHECKS PARAMETERS THAT ARE ONLY LEGAL FOR HASP 
*     AND BSC TERMINALS.
* 
*     PROC HBTRMPR(HBTRM$ID,HBTRM$WORD,HBTRM$LINE)
* 
*     ENTRY        HBTRM$ID = NUMBER IDENTIFYING KEYWORD. 
*                  HBTRM$WORD = VALUE DECLARATION ENTRY.
*                  HBTRM$LINE = CURRENT SOURCE LINE NUMBER. 
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     IF VALUE IS O.K., 
*       IF VALUE IS NOT -AUTOREC-,
*       THEN, 
*         CHECK IF VALUE IS WITHIN RANGE. 
*         IF IN RANGE,
*           PUT CO VALUE IN CURRENT TERMINAL ENTRY. 
*       OTHERWISE,
*         IF LINE IS NOT AUTO-REC 
*           FLAG ERROR -- AUTOREC VALUE IS INVALID. 
* 
# 
*ENDIF
      ITEM HBTRM$ID;                   # KEYWORD I.D. FOR SWITCH       #
      ITEM HBTRM$LINE;                 # STATEMENT LINE NUMBER         #
      ARRAY HBTRM$WORD [0:0] S(1);     # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM HBTRM$KWID (0,0,9);       # KEYWORD I.D. FROM PASS 1      #
        ITEM HBTRM$VLERR B(0,17,1);    # VALUE ERROR FLAG              #
        ITEM HBTRM$VALNAM (0,18,7);    # CHARACTER VALUE               #
        ITEM HBTRM$VALNUM (0,18,42);   # INTEGER VALUE                 #
        END 
# 
****  PROC HBTRMPR - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECKS IF VALUE IS WITHIN RANGE         #
        PROC NDLEM2;         # MAKES ENTRIES IN PASS 2 ERROR FILE      #
        END 
# 
****
# 
      ITEM HBTRM$STAT B;     # RETURNED STATUS FROM RANGE CHECK PROC   #
#                                                                      #
#                            HBTRMPR CODE BEGINS HERE                  #
#                                                                      #
      IF NOT HBTRM$VLERR[0]  # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # IF VALUE IS NOT AUTOREC       #
        IF HBTRM$VALNAM[0] NQ "AUTOREC" 
        THEN
          BEGIN                        # CHECK IF VALUE IS WITHIN RANGE#
          IF CRNT$TIP EQ TIP"USER"     # IF TIPTYPE IS USER DEFINED    #
          THEN
            BEGIN 
            USR$RANGE(HBTRM$VALNUM[0],USR$WID1,NUM"HEX",HBTRM$STAT);
                                                             # USER    #
                                                             # RANGE   #
            END 
          ELSE
            BEGIN 
            NDLCKRG(HBTRM$KWID,HBTRM$VALNUM[0],HBTRM$STAT); 
            END 
          IF HBTRM$STAT                # IF WITHIN RANGE               #
          THEN
            BEGIN                      # PUT CO VALUE IN TERM ENTRY    #
            TEA1[CRNT$TERM + 1] = HBTRM$VALNUM[0];
            END 
          END 
        ELSE
          BEGIN              # VALUE IS AUTOREC                        #
          IF NOT AUTO$REC    # IF NOT A FIXED CONFIGURED LINE          #
          THEN
            BEGIN            # FLAG ERROR -- AUTOREC NOT VALID         #
            NDLEM2(ERR113,HBTRM$LINE," ");
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # HBTRMPR # 
      CONTROL EJECT;
      PROC HSPTERM; 
      BEGIN 
*IF,DEF,IMS 
# 
**    HSPTERM -- CHECK TERMINAL PARAMETERS LEGAL FOR HASP TIP.
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMETER 
*     ON THE STATEMENT. 
* 
*     PROC HSPTERM
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(RIC,CSET): 
*           CHECK GENERAL PARAMETER.
*         CASE 2(CO): 
*           IF AUTO-REC LINE, 
*           THEN, 
*             CHECK HASP/BSC PARAMETER. 
*           OTHERWISE,
*             FLAG ERROR -- ALLOWED ON AUTO-REC LINE ONLY.
*         CASE 3(TSPEED,CA,BCF,MREC,W,CTYP,NCIR,NEN,COLLECT,EOF): 
*           FLAG ERROR -- INVALID PARAMETER.
* 
# 
*ENDIF
# 
****  PROC HSPTERM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      ITEM I;                # SCRATCH ITEM                            #
      ITEM SWITCH$ID;        # USED AS I.D. FOR KEYWORD                #
      SWITCH HSPTJUMP   NEXT$PARAM,    # STIP                          #
                        NEXT$PARAM,    # TC                            #
                        GEN$PARAM ,    # RIC                           #
                        GEN$PARAM ,    # CSET                          #
                        OTHERS    ,    # TSPEED                        #
                        OTHERS    ,    # CA                            #
                        HB$PARAM  ,    # CO                            #
                        OTHERS    ,    # BCF                           #
                        OTHERS    ,    # MREC                          #
                        OTHERS    ,    # W                             #
                        OTHERS    ,    # CTYP                          #
                        OTHERS    ,    # NCIR                          #
                        OTHERS    ,    # NEN                           #
                        OTHERS    ,    # COLLECT                       #
                        OTHERS    ,    # XAUTO                         #
                        OTHERS    ,    # DT                            #
                        OTHERS    ,    # SDT                           #
                        OTHERS    ,    # TA                            #
                        OTHERS    ,    # ABL                           #
                        OTHERS    ,    # DBZ                           #
                        OTHERS    ,    # UBZ                           #
                        OTHERS    ,    # DBL                           #
                        OTHERS    ,    # UBL                           #
                        OTHERS    ,    # XBZ                           #
                        OTHERS    ,    # DO                            #
                        OTHERS    ,    # STREAM                        #
                        OTHERS    ,    # HN                            #
                        OTHERS    ,    # AUTOLOG                       #
                        OTHERS    ,    # AUTOCON                       #
                        OTHERS    ,    # PRI                           #
                        OTHERS    ,    # P80                           #
                        OTHERS    ,    # P81                           #
                        OTHERS    ,    # P82                           #
                        OTHERS    ,    # P83                           #
                        OTHERS    ,    # P84                           #
                        OTHERS    ,    # P85                           #
                        OTHERS    ,    # P86                           #
                        OTHERS    ,    # P87                           #
                        OTHERS    ,    # P88                           #
                        OTHERS    ,    # P89                           #
                        OTHERS    ,    # AB                            #
                        OTHERS    ,    # BR                            #
                        OTHERS    ,    # BS                            #
                        OTHERS    ,    # B1                            #
                        OTHERS    ,    # B2                            #
                        OTHERS    ,    # CI                            #
                        OTHERS    ,    # CN                            #
                        OTHERS    ,    # CT                            #
                        OTHERS    ,    # DLC                           #
                        OTHERS    ,    # DLTO                          #
                        OTHERS    ,    # DLX                           #
                        OTHERS    ,    # EP                            #
                        OTHERS    ,    # IN                            #
                        OTHERS    ,    # LI                            #
                        OTHERS    ,    # OP                            #
                        OTHERS    ,    # PA                            #
                        OTHERS    ,    # PG                            #
                        OTHERS    ,    # PL                            #
                        OTHERS    ,    # PW                            #
                        OTHERS    ,    # SE                            #
                        OTHERS    ,    # FA                            #
                        OTHERS    ,    # XLC                           #
                        OTHERS    ,    # XLX                           #
                        OTHERS    ,    # XLTO                          #
                        OTHERS    ,    # ELO                           #
                        OTHERS    ,    # ELX                           #
                        OTHERS    ,    # ELR                           #
                        OTHERS    ,    # EBO                           #
                        OTHERS    ,    # EBR                           #
                        OTHERS    ,    # CP                            #
                        OTHERS    ,    # IC                            #
                        OTHERS    ,    # OC                            #
                        OTHERS    ,    # LK                            #
                        OTHERS    ,    # EBX                           #
                        OTHERS    ,    # HD                            #
                        OTHERS    ,    # MC                            #
                        OTHERS    ,    # XLY                           #
                        OTHERS    ,    # EOF                           #
                        OTHERS    ;    # PAD                           #
#                                                                      #
#                            HSPTERM CODE BEGINS HERE                  #
#                                                                      #
      FOR I=2 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE-DECLARATION ENTRY        #
        BEGIN 
        SWITCH$ID = STKWID[I] - KID"STIP";       # CALCULATE SWITCH ID #
        GOTO HSPTJUMP[SWITCH$ID];      # GO TO APPROPRIATE PARAGRAPH   #
GEN$PARAM:  
        GENTERM(SWITCH$ID,STWORD[I],STLNUM[0]);  # GENERAL PARAMETERS  #
        GOTO NEXT$PARAM;
HB$PARAM: 
        IF AUTO$REC          # IF ON AUTO-REC LINE                     #
        THEN
          BEGIN              # CHECK HASP/BISYNC PARAMETER             #
          HBTRMPR(SWITCH$ID,STWORD[I],STLNUM[0]); 
          END 
        ELSE                 # MUST BE ON NON-AUTO-REC LINE            #
          BEGIN              # FLAG ERROR -- VALID FOR AUTO-REC ONLY   #
          NDLEM2(ERR107,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        GOTO NEXT$PARAM;
OTHERS:                      # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS LINE IS AUTO-SYNC               #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        IF STKWID[I] EQ KID"PAD"
        THEN
          BEGIN                        # STATEMENT TABLE               #
          I = I + MAXPADW;             # PAD ENTRIES ARE 1+MAXPADW LONG#
          END 
NEXT$PARAM:                  # GO TO NEXT PARAMETER                    #
        END 
        IF NOT RIC$USED      # IF RIC NOT SPECIFIED                    #
        THEN
          BEGIN 
          RIC$FLAG = TRUE;   # DEFAULT RIC VALUE TO YES                #
          END 
      RETURN;                # **** RETURN ****                        #
      END # HSPTERM # 
      CONTROL EJECT;
      PROC MD4TERM; 
      BEGIN 
*IF,DEF,IMS 
# 
**    MD4TERM -- CHECK TERMINAL PARAMETERS LEGAL FOR MODE4 TIP. 
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMETER 
*     ON THE STATEMENT. 
* 
*     PROC MD4TERM
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(RIC,CSET): 
*           CHECK GENERAL PARAMETER.
*         CASE 2(CA)
*           CHECK MODE4 PARAMETER.
*         CASE 3(TSPEED,CO,BCF,MREC,W,CTYP,NCIR,NEN,COLLECT): 
*           FLAG ERROR -- INVALID PARAMETER.
*         CASE 4(EOF):  
*           SET EOF FLAG TO BE TRUE IF VALUE IS "YES".
*     IF CA WAS NOT SPECIFIED AND NOT AN AUTO-REC LINE. 
*       FLAG ERROR -- REQUIRE PARAMETER MISSING.
* 
# 
*ENDIF
# 
****  PROC MD4TERM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      ITEM I;                # SCRATCH ITEM                            #
      ITEM SWITCH$ID;        # USED AS I.D. FOR KEYWORD                #
      SWITCH MD4TJUMP   NEXT$PARAM,    # STIP                          #
                        NEXT$PARAM,    # TC                            #
                        GEN$PARAM ,    # RIC                           #
                        GEN$PARAM ,    # CSET                          #
                        OTHERS    ,    # TSPEED                        #
                        MD4$PARAM ,    # CA                            #
                        OTHERS    ,    # CO                            #
                        OTHERS    ,    # BCF                           #
                        OTHERS    ,    # MREC                          #
                        OTHERS    ,    # W                             #
                        OTHERS    ,    # CTYP                          #
                        OTHERS    ,    # NCIR                          #
                        OTHERS    ,    # NEN                           #
                        OTHERS    ,    # COLLECT                       #
                        OTHERS    ,    # XAUTO                         #
                        OTHERS    ,    # DT                            #
                        OTHERS    ,    # SDT                           #
                        OTHERS    ,    # TA                            #
                        OTHERS    ,    # ABL                           #
                        OTHERS    ,    # DBZ                           #
                        OTHERS    ,    # UBZ                           #
                        OTHERS    ,    # DBL                           #
                        OTHERS    ,    # UBL                           #
                        OTHERS    ,    # XBZ                           #
                        OTHERS    ,    # DO                            #
                        OTHERS    ,    # STREAM                        #
                        OTHERS    ,    # HN                            #
                        OTHERS    ,    # AUTOLOG                       #
                        OTHERS    ,    # AUTOCON                       #
                        OTHERS    ,    # PRI                           #
                        OTHERS    ,    # P80                           #
                        OTHERS    ,    # P81                           #
                        OTHERS    ,    # P82                           #
                        OTHERS    ,    # P83                           #
                        OTHERS    ,    # P84                           #
                        OTHERS    ,    # P85                           #
                        OTHERS    ,    # P86                           #
                        OTHERS    ,    # P87                           #
                        OTHERS    ,    # P88                           #
                        OTHERS    ,    # P89                           #
                        OTHERS    ,    # AB                            #
                        OTHERS    ,    # BR                            #
                        OTHERS    ,    # BS                            #
                        OTHERS    ,    # B1                            #
                        OTHERS    ,    # B2                            #
                        OTHERS    ,    # CI                            #
                        OTHERS    ,    # CN                            #
                        OTHERS    ,    # CT                            #
                        OTHERS    ,    # DLC                           #
                        OTHERS    ,    # DLTO                          #
                        OTHERS    ,    # DLX                           #
                        OTHERS    ,    # EP                            #
                        OTHERS    ,    # IN                            #
                        OTHERS    ,    # LI                            #
                        OTHERS    ,    # OP                            #
                        OTHERS    ,    # PA                            #
                        OTHERS    ,    # PG                            #
                        OTHERS    ,    # PL                            #
                        OTHERS    ,    # PW                            #
                        OTHERS    ,    # SE                            #
                        OTHERS    ,    # FA                            #
                        OTHERS    ,    # XLC                           #
                        OTHERS    ,    # XLX                           #
                        OTHERS    ,    # XLTO                          #
                        OTHERS    ,    # ELO                           #
                        OTHERS    ,    # ELX                           #
                        OTHERS    ,    # ELR                           #
                        OTHERS    ,    # EBO                           #
                        OTHERS    ,    # EBR                           #
                        OTHERS    ,    # CP                            #
                        OTHERS    ,    # IC                            #
                        OTHERS    ,    # OC                            #
                        OTHERS    ,    # LK                            #
                        OTHERS    ,    # EBX                           #
                        OTHERS    ,    # HD                            #
                        OTHERS    ,    # MC                            #
                        OTHERS    ,    # XLY                           #
                        EOF$      ,    # EOF                           #
                        OTHERS    ;    # PAD                           #
#                                                                      #
#                            MD4TERM CODE BEGINS HERE                  #
#                                                                      #
      FOR I=2 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE-DECLARATION ENTRY        #
        BEGIN 
        SWITCH$ID = STKWID[I] - KID"STIP";       # CALCULATE SWITCH ID #
        GOTO MD4TJUMP[SWITCH$ID];      # GO TO APPROPRIATE PARAGRAPH   #
GEN$PARAM:  
        GENTERM(SWITCH$ID,STWORD[I],STLNUM[0]);  # GENERAL PARAMETERS  #
        GOTO NEXT$PARAM;
MD4$PARAM:  
        MTRMPRM(SWITCH$ID,STWORD[I],STLNUM[0]);  # MODE4 PARAMETERS    #
        GOTO NEXT$PARAM;
EOF$:   EOF$USED = TRUE;     #  SET EOF SPECIFIED TO TRUE              #
        CRNT$EOF = ( STVALNAM[I] EQ "YES" );  # IF YES THEN TRUE ELSE  #
                                              # FALSE                  #
        GOTO NEXT$PARAM;
  
OTHERS:                      # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS LINE IS AUTO-SYNC               #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        IF STKWID[I] EQ KID"PAD"
        THEN
          BEGIN                        # STATEMENT TABLE               #
          I = I + MAXPADW;             # PAD ENTRIES ARE 1+MAXPADW LONG#
          END 
NEXT$PARAM:                  # GO TO NEXT PARAMETER                    #
        END 
      IF NOT CA$USED AND               # IF CA NOT SPECIFIED AND NOT   #
         NOT AUTO$REC                  #   AN AUTO-REC LINE            #
      THEN
        BEGIN                # FLAG ERROR -- CA PARAMETER MISSING      #
        NDLEM2(ERR103,STLNUM[0],"CA");
        END 
      RETURN;                # **** RETURN ****                        #
      END # MD4TERM # 
      CONTROL EJECT;
      PROC MTRMPRM(MTRM$ID,MTRM$WORD,MTRM$LINE);
      BEGIN 
*IF,DEF,IMS 
# 
**    MTRMPRM -- CHECK MODE4 TERMINAL PARAMETERS. 
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CHECKS PARAMETERS THAT ARE ONLY LEGAL FOR MODE4
*     TERMINALS.
* 
*     PROC MTRMPRM(MTRM$ID,MTRM$WORD,MTRM$LINE) 
* 
*     ENTRY        MTRM$ID = NUMBER IDENTIFYING KEYWORD.
*                  MTRM$WORD = VALUE DECLARATION ENTRY. 
*                  MTRM$LINE = CURRENT SOURCE LINE NUMBER.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     IF VALUE IS O.K., 
*       IF VALUE IS NOT -AUTO-REC-, 
*       THEN, 
*         CHECK IF VALUE IS IN RANGE, 
*         IF IN RANGE,
*           IF VALUE IS NOT UNIQUE, 
*             FLAG ERROR -- CA VALUE IS NOT UNIQUE. 
*           PUT CA VALUE IN CURRENT TERMINAL ENTRY. 
*       OTHERWISE,
*         IF CURRENT LINE IS AUTO-REC,
*           FLAG ERROR -- AUTOREC VALUE NOT VALID.
* 
# 
*ENDIF
      ITEM MTRM$ID;                    # KEYWORD I.D. FOR SWITCH       #
      ITEM MTRM$LINE;                  # STATEMENT LINE NUMBER         #
      ARRAY MTRM$WORD [0:0] S(1);      # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM MTRM$KWID (0,0,9);        # KEYWORD I.D. FROM PASS 1      #
        ITEM MTRM$VLERR B(0,17,1);     # VALUE ERROR FLAG              #
        ITEM MTRM$VALNAM C(0,18,7);    # CHARACTER VALUE               #
        ITEM MTRM$VALNUM (0,18,42);    # INTEGER VALUE                 #
        END 
# 
****  PROC MTRMPRM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECK IF VALUE IS IN RANGE              #
        PROC NDLEM2;         # MAKE ENTRY IN PASS 2 ERROR FILE         #
        FUNC XCHD;           # CONVERTS HEX VALUE TO HEX DISPLAY CODE  #
        END 
# 
****
# 
      ITEM ITEMP;            # INTEGER TEMPORARY                       #
      DEF ZERO # 0 #;        # ZERO = 0                                #
      DEF MAX$USR # 255 #;   # MAXIMUM VALUE OF CA FOR USER            #
      ITEM MTRM$STAT B;      # RETURNED STATUS FROM RANGE CHECK PROC   #
      CONTROL EJECT;
#                                                                      #
#                            MTRMPRM CODE BEGINS HERE                  #
#                                                                      #
      CA$USED = TRUE;        # SET CA SPECIFIED FLAG                   #
      IF NOT MTRM$VLERR[0]   # VALUE IS O.K.                           #
      THEN
        BEGIN 
        IF MTRM$VALNAM NQ "AUTOREC"    # IF VALUE IS NOT AUTOREC       #
        THEN
          BEGIN                        # CHECK IF CA IS WITHIN RANGE   #
          IF CRNT$TIP EQ TIP"USER"
          THEN
            BEGIN 
            MTRM$STAT = TRUE;          # SET STATUS TO TRUE            #
            IF MTRM$VALNUM[0] LS ZERO OR
               MTRM$VALNUM[0] GR MAX$USR
            THEN
              BEGIN 
              NDLEM2(ERR100,STLNUM[0],XCHD(MTRM$VALNUM[0]));
                                       # GENERATE ERR100               #
              MTRM$STAT = FALSE;
              END 
            END 
          ELSE IF CRNT$TIP EQ TIP"$3270"
          THEN
            BEGIN                      # IF TIPTYPE IS 3270            #
            MTRM$STAT = TRUE;          # SET STATUS TO O.K.            #
            IF MTRM$VALNUM[0] LS 0 OR 
               MTRM$VALNUM[0] GR 31 
            THEN                       # VALUE IS OUT OF RANGE         #
              BEGIN                    #    FLAG ERROR --->            #
              NDLEM2(ERR100,STLNUM[0],XCHD(MTRM$VALNUM[0]));
              MTRM$STAT = FALSE;       # SET ERROR STATUS              #
              END 
            END 
          ELSE
            BEGIN                      # ALL OTHER TIPTYPES            #
            NDLCKRG(MTRM$KWID[0],MTRM$VALNUM[0],MTRM$STAT); 
                                       # CALL THE CHECK RANGE PROC     #
            END 
          IF MTRM$STAT                 # IF IT IS WITHIN RANGE         #
          THEN
            BEGIN                      # IF TIPTYPE IS NOT USER OR     #
            IF CRNT$TIP NQ TIP"USER" AND         # UNKNOWN, AND NOT AN #
               CRNT$TIP NQ TIP"UNKNOWN" AND      # AUTO-REC LINE       #
               NOT AUTO$REC 
            THEN                       # CHECK FOR DUPLICATE CA VALUE  #
              BEGIN 
              IF CRNT$TIP NQ TIP"$3270" 
              THEN
                ITEMP = MTRM$VALNUM[0] - X"70"; 
              ELSE
                ITEMP = MTRM$VALNUM[0];# FOR 3270                      #
              IF B<ITEMP,1>CA$MAP EQ 1
              THEN                     # IF CA VALUE IS ALREADY USED   #
                BEGIN                  #   FLAG ERROR -- DUPLICATE CA  #
                NDLEM2(ERR109,MTRM$LINE," "); 
                END 
              ELSE           # CA VALUE HAS NOT BEEN USED              #
                BEGIN                  # SET FLAG FOR VALUE            #
                B<ITEMP,1>CA$MAP = 1; 
                END 
              END 
            TEA1[CRNT$TERM+1] = MTRM$VALNUM[0]; 
            END 
          END 
        ELSE                 # VALUE IS AUTOREC                        #
          BEGIN 
          IF NOT AUTO$REC    # IF NOT AN AUTO-REC LINE                 #
          THEN
            BEGIN            # FLAG ERROR -- AUTOREC NOT VALID         #
            NDLEM2(ERR113,MTRM$LINE," "); 
            END 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # MTRMPRM # 
      CONTROL EJECT;
      PROC USRTERM; 
      BEGIN 
*IF,DEF,IMS 
# 
**    USRTERM -- CHECK TERMINALS PARAMETERS LEGAL FOR USER TIP. 
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMETER 
*     ON THE STATEMENT. 
* 
*     PROC USRTERM
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(RIC,CSET): 
*           CHECK GENERAL PARAMETER.
*         CASE 2(TSPEED): 
*           CHECK ASYNC PARAMETER.
*         CASE 3(CA): 
*           CHECK MODE4 PARAMETER.
*         CASE 4(CO): 
*           CHECK HASP/BSC PARAMETER. 
*         CASE 5(EOF):  
*           SET EOF FLAG TO TRUE IF VALUE IS "YES". 
*         CASE 6(W,CTYP,NCIR,NEN,COLLECT):  
*           CHECK X.25 PARAMETER. 
*         CASE 7(BCF,MREC): 
*           CHECK BSC PARAMETER.
*       IF NEN IS NOT USED, 
*         SET VALUE OF NEN TO BE CURRENT VALEU OF NCIR. 
* 
# 
*ENDIF
      ITEM I;                # SCRATCH ITEM -- POINTS TO CURRNT VAL-DEC#
      ITEM CTEMP C(10);      # CHARACTER TEMPORARY                     #
      ITEM SWITCH$ID;        # USED AS I.D. FOR KEYWORD                #
      SWITCH USRTJUMP   NEXT$PARAM,    # STIP                          #
                        NEXT$PARAM,    # TC                            #
                        GEN$PARAM ,    # RIC                           #
                        GEN$PARAM ,    # CSET                          #
                        ASY$PARAM ,    # TSPEED                        #
                        MD4$PARAM ,    # CA                            #
                        HB$PARAM  ,    # CO                            #
                        BSC$PARAM ,    # BCF                           #
                        BSC$PARAM ,    # MREC                          #
                        X25$PARAM ,    # W                             #
                        X25$PARAM ,    # CTYP                          #
                        X25$PARAM ,    # NCIR                          #
                        X25$PARAM ,    # NEN                           #
                        X25$PARAM ,    # COLLECT                       #
                        NEXT$PARAM,    # XAUTO                         #
                        NEXT$PARAM,    # DT                            #
                        NEXT$PARAM,    # SDT                           #
                        NEXT$PARAM,    # TA                            #
                        NEXT$PARAM,    # ABL                           #
                        NEXT$PARAM,    # DBZ                           #
                        NEXT$PARAM,    # UBZ                           #
                        NEXT$PARAM,    # DBL                           #
                        NEXT$PARAM,    # UBL                           #
                        NEXT$PARAM,    # XBZ                           #
                        NEXT$PARAM,    # DO                            #
                        NEXT$PARAM,    # STREAM                        #
                        NEXT$PARAM,    # HN                            #
                        NEXT$PARAM,    # AUTOLOG                       #
                        NEXT$PARAM,    # AUTOCON                       #
                        NEXT$PARAM,    # PRI                           #
                        NEXT$PARAM,    # P80                           #
                        NEXT$PARAM,    # P81                           #
                        NEXT$PARAM,    # P82                           #
                        NEXT$PARAM,    # P83                           #
                        NEXT$PARAM,    # P84                           #
                        NEXT$PARAM,    # P85                           #
                        NEXT$PARAM,    # P86                           #
                        NEXT$PARAM,    # P87                           #
                        NEXT$PARAM,    # P88                           #
                        NEXT$PARAM,    # P89                           #
                        NEXT$PARAM,    # AB                            #
                        NEXT$PARAM,    # BR                            #
                        NEXT$PARAM,    # BS                            #
                        NEXT$PARAM,    # B1                            #
                        NEXT$PARAM,    # B2                            #
                        NEXT$PARAM,    # CI                            #
                        NEXT$PARAM,    # CN                            #
                        NEXT$PARAM,    # CT                            #
                        NEXT$PARAM,    # DLC                           #
                        NEXT$PARAM,    # DLTO                          #
                        NEXT$PARAM,    # DLX                           #
                        NEXT$PARAM,    # EP                            #
                        NEXT$PARAM,    # IN                            #
                        NEXT$PARAM,    # LI                            #
                        NEXT$PARAM,    # OP                            #
                        NEXT$PARAM,    # PA                            #
                        NEXT$PARAM,    # PG                            #
                        NEXT$PARAM,    # PL                            #
                        NEXT$PARAM,    # PW                            #
                        NEXT$PARAM,    # SE                            #
                        NEXT$PARAM,    # FA                            #
                        NEXT$PARAM,    # XLC                           #
                        NEXT$PARAM,    # XLX                           #
                        NEXT$PARAM,    # XLTO                          #
                        NEXT$PARAM,    # ELO                           #
                        NEXT$PARAM,    # ELX                           #
                        NEXT$PARAM,    # ELR                           #
                        NEXT$PARAM,    # EBO                           #
                        NEXT$PARAM,    # EBR                           #
                        NEXT$PARAM,    # CP                            #
                        NEXT$PARAM,    # IC                            #
                        NEXT$PARAM,    # OC                            #
                        NEXT$PARAM,    # LK                            #
                        NEXT$PARAM,    # EBX                           #
                        NEXT$PARAM,    # HD                            #
                        NEXT$PARAM,    # MC                            #
                        NEXT$PARAM,    # XLY                           #
                        EOF$      ,    # EOF                           #
                        X25$PARAM ;    # PAD                           #
#                                                                      #
#                            USRTERM CODE BEGINS HERE                  #
#                                                                      #
      FOR I=2 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE DECLARATION ENTRY        #
        BEGIN 
        SWITCH$ID = STKWID[I] - KID"STIP";       # CALCULATE SWITCH ID #
        GOTO USRTJUMP[SWITCH$ID];      # GO TO APPROPRIATE PARAGRAPH   #
GEN$PARAM:                             # CHECK GENERAL PARAMETERS      #
        GENTERM(SWITCH$ID,STWORD[I],STLNUM[0]); 
        GOTO NEXT$PARAM;
ASY$PARAM:                             # CHECK ASYNC PARAMETERS        #
        ATRMPRM(SWITCH$ID,STWORD[I],STLNUM[0]); 
        GOTO NEXT$PARAM;
MD4$PARAM:                             # CHECK MODE4 PARAMETERS        #
        MTRMPRM(SWITCH$ID,STWORD[I],STLNUM[0]); 
        GOTO NEXT$PARAM;
EOF$:   EOF$USED = TRUE;               # SET EOF USED TO TRUE          #
        CRNT$EOF = (STVALNAM[I] EQ "YES");
        GOTO NEXT$PARAM;
  
HB$PARAM:                              # CHECK HASP/BSC PARAMETERS     #
        HBTRMPR(SWITCH$ID,STWORD[I],STLNUM[0]); 
        GOTO NEXT$PARAM;
X25$PARAM:                             # CHECK X25 PARAMETERS          #
        XTRMPRM(SWITCH$ID,STMT$TABLE[I],STLNUM[0]); 
        IF STKWID[I] EQ KID"PAD"
        THEN
          BEGIN                        # STATEMENT TABLE               #
          I = I + MAXPADW;             # PAD ENTRIES ARE 1+MAXPADW LONG#
          END 
        GOTO NEXT$PARAM;
BSC$PARAM:                             # CHECK BSC PARAMETERS          #
        BTRMPRM(SWITCH$ID,STWORD[I],STLNUM[0]); 
        GOTO NEXT$PARAM;
NEXT$PARAM:                            # GO TO NEXT PARAMETER          #
        END 
      CTEMP = "STIP"; 
      C$USR$PRM2(CRNT$STIP,CTEMP);  # CHECK IF STIP IS USED            #
      CTEMP = "TC"; 
      C$USR$PRM2(CRNT$TC,CTEMP);    # CHECK IF TC IS SPECIFIED         #
      IF NOT NEN$USED 
      THEN                          # IF NEN IS NOT USED, CHECK THE    #
        BEGIN                       # CURRENT NEN VALUE AGAIN          #
        CRNT$NEN = CRNT$NCIR;       # ASSUME LATEST VALUE OF NCIR      #
        END 
      RETURN;                # **** RETURN ****                        #
      END # USRTERM # 
      CONTROL EJECT;
      PROC XTRMPRM(XTRM$ID,XTRM$WORD,XTRM$LINE);
      BEGIN 
*IF,DEF,IMS 
# 
**    XTRMPRM -- CHECK X.25 TERMINAL PARAMETER. 
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CHECK PARAMETERS THAT ARE ONLY LEGAL FOR X.25
*     TERMINALS.
* 
*     PROC XTRMPRM(XTRM$ID,XTRM$WORD,XTRM$LINE) 
* 
*     ENTRY        XTRM$ID = NUMBER IDENTIFYING KEYWORD.
*                  XTRM$WORD = VALUE DECLARATION ENTRY. 
*                  XTRM$LINE = CURRENT SOURCE LINE NUMBER.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     SELECT CASE THAT APPLIES, 
*       CASE 1(W):  
*         IF VALUE IS O.K.
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             SAVE CURRENT W VALUE. 
*       CASE 2(CTYP): 
*         IF VALUE IS O.K., 
*           IF VALUE IS PVC,
*           THEN
*             SET CURRENT CTYP TO PVC.
*             INCREMENT PVC COUNT.
*             IF SUBTIPTYPE IS NOT XAA, 
*               FLAG ERROR - SUBTIP MUST BE XAA FOR PVC.
*             IF SVC WAS PREVIOUSLY SPECIFIED,
*               FLAG ERROR -- ALL PVC-S MUST BE SPECIFIED BEFORE ANY SVC
*           OTHERWISE,
*             SET CURRENT CTYP TO SVC.
*       CASE 3(NCIR): 
*         IF VALUE IS O.K.
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             SAVE CURRENT NCIR VALUE.
*       CASE 4(NEN):  
*         IF VALUE IS O.K., 
*           CHECK IF VALUE IS IN RANGE. 
*           IF IN RANGE,
*             SAVE CURRENT NEN VALUE. 
*       CASE 5(COLLECT):  
*         SET COLLECT SPECIFIED FLAG. 
*         IF STIP IS NOT *PAD*
*           FLAG ERROR -- PARAM INVALID WITH SSTIP SPECIFIED. 
*         IF VALUE IS *YES* 
*           SET THE COLLECT FLAG. 
* 
# 
*ENDIF
      ITEM XTRM$ID;                    # KEYWORD I.D. FOR SWITCH       #
      ITEM XTRM$LINE;                  # STATEMENT LINE NUMBER         #
      ARRAY XTRM$WORD [0:0] S(1);      # VALUE DECLARATION ENTRY       #
        BEGIN 
        ITEM XTRM$KWID (0,0,9);        # KEYWORD I.D. FROM PASS 1      #
        ITEM XTRM$VLERR B(0,17,1);     # VALUE ERROR FLAG              #
        ITEM XTRM$VALNAM C(0,18,7);    # CHARACTER VALUE               #
        ITEM XTRM$VALNUM (0,18,42);    # INTEGER VALUE                 #
        ITEM XTRM$PAD    (0,0,60);     # PAD ENTRY VALUES              #
        END 
# 
****  PROC XTRMPRM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLCKRG;        # CHECK IF VALUE IS WITHIN RANGE          #
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      ITEM XTRM$STAT B;      # STATUS RETURNED BY RANGE CHECK PROC     #
      ITEM I;                # SCRATCH VARIABLE                        #
      SWITCH XTRMJUMP      , # STIP                                    #
                           , # TC                                      #
                           , # RIC                                     #
                           , # CSET                                    #
                           , # TSPEED                                  #
                           , # CA                                      #
                           , # CO                                      #
                           , # BCF                                     #
                           , # MREC                                    #
                          W, # W                                       #
                      CTYP$, # CTYP                                    #
                       NCIR, # NCIR                                    #
                        NEN, # NEN                                     #
                    COLLECT, # COLLECT                                 #
                           , # XAUTO                                   #
                           , # DT                                      #
                           , # SDT                                     #
                           , # TA                                      #
                           , # ABL                                     #
                           , # DBZ                                     #
                           , # UBZ                                     #
                           , # DBL                                     #
                           , # UBL                                     #
                           , # XBZ                                     #
                           , # DO                                      #
                           , # STREAM                                  #
                           , # HN                                      #
                           , # AUTOLOG                                 #
                           , # AUTOCON                                 #
                           , # PRI                                     #
                           , # P80                                     #
                           , # P81                                     #
                           , # P82                                     #
                           , # P83                                     #
                           , # P84                                     #
                           , # P85                                     #
                           , # P86                                     #
                           , # P87                                     #
                           , # P88                                     #
                           , # P89                                     #
                           , # AB                                      #
                           , # BR                                      #
                           , # BS                                      #
                           , # B1                                      #
                           , # B2                                      #
                           , # CI                                      #
                           , # CN                                      #
                           , # CT                                      #
                           , # DLC                                     #
                           , # DLTO                                    #
                           , # DLX                                     #
                           , # EP                                      #
                           , # IN                                      #
                           , # LI                                      #
                           , # OP                                      #
                           , # PA                                      #
                           , # PG                                      #
                           , # PL                                      #
                           , # PW                                      #
                           , # SE                                      #
                           , # FA                                      #
                           , # XLC                                     #
                           , # XLX                                     #
                           , # XLTO                                    #
                           , # ELO                                     #
                           , # ELX                                     #
                           , # ELR                                     #
                           , # EBO                                     #
                           , # EBR                                     #
                           , # CP                                      #
                           , # IC                                      #
                           , # OC                                      #
                           , # LK                                      #
                           , # EBX                                     #
                           , # HD                                      #
                           , # MC                                      #
                           , # XLY                                     #
                           , # EOF                                     #
                      PAD$ ; # PAD                                     #
      CONTROL EJECT;
#                                                                      #
#                            XTRMPRM CODE BEGINS HERE                  #
#                                                                      #
      GOTO XTRMJUMP[XTRM$ID];          # CHECK GIVEN VALUE DECLARATION #
W:  
      W$USED = TRUE;         # SET W SPECIFIED FLAG                    #
      IF NOT XTRM$VLERR      # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # CHECK IF W IS WITHIN RANGE    #
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(XTRM$VALNUM[0],USR$WID1,NUM"DEC",XTRM$STAT);
          END 
        ELSE
          BEGIN 
          NDLCKRG(XTRM$KWID[0],XTRM$VALNUM[0],XTRM$STAT); 
          END 
        IF XTRM$STAT                   # IF IT IS WITHIN RANGE         #
        THEN
          BEGIN 
          CRNT$W = XTRM$VALNUM[0];     # SAVE W VALUE                  #
          END 
        END 
      GOTO NEXT$PARAM;
CTYP$:  
      CTYP$USED = TRUE;      # SET CTYP SPECIFIED FLAG                 #
      IF NOT XTRM$VLERR[0]   # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF XTRM$VALNAM[0] EQ "PVC"     # IF VALUE IS -PVC-             #
        THEN
          BEGIN 
          CRNT$CTYP = CTYP"PVC";       # SET CURRENT CTYP TO BE PVC    #
          PVC$CNT = PVC$CNT + 1;       # INCREMENT PVC COUNT           #
          IF CRNT$STIP NQ STIP"XAA"    # IF STIP IS NOT XAA            #
          THEN
            BEGIN 
            NDLEM2(ERR111,XTRM$LINE,"PVC"); 
            END 
          IF SVC$SPEC        # IF SVC HAS BEEN PREVIOUSLY SPECIFIED    #
          THEN
            BEGIN            # FLAG ERROR -- SPECIFY PVC BEFORE ALL SVC#
            NDLEM2(ERR114,XTRM$LINE," "); 
            END 
          END 
        ELSE                 # VALUE MUST BE -SVC-                     #
          BEGIN 
           CRNT$CTYP = CTYP"SVC";      # SET CRNT CTYP TO SVC          #
          END 
        END 
      GOTO NEXT$PARAM;
NCIR: 
      NCIR$USED = TRUE;      # SET NCIR SPECIFIED FLAG                 #
      IF NOT XTRM$VLERR      # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # CHECK IF NCIR IS WITHIN RANGE #
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
             USR$RANGE(XTRM$VALNUM[0],USR$WID1,NUM"DEC",XTRM$STAT); 
                                       # CHECK USER RANGE              #
          END 
        ELSE
          BEGIN 
          NDLCKRG(XTRM$KWID[0],XTRM$VALNUM[0],XTRM$STAT); 
                                       # CHECK NORMAL RANGE            #
          END 
        CRNT$NCIR = XTRM$VALNUM[0];    # SAVE NCIR VALUE               #
        END 
      GOTO NEXT$PARAM;
NEN:  
      NEN$USED = TRUE;       # SET NEN SPECIFIED FLAG                  #
      IF NOT XTRM$VLERR[0]   # IF VALUE IS O.K.                        #
      THEN
        BEGIN                          # CHECK IF NEN IS WITHIN RANGE  #
        IF CRNT$TIP EQ TIP"USER"       # IF TIPTYPE IS USER DEFINED    #
        THEN
          BEGIN 
          USR$RANGE(XTRM$VALNUM[0],USR$WID1,NUM"DEC",XTRM$STAT);
                                       # CHECK USER RANGE              #
          END 
        ELSE
          BEGIN 
          NDLCKRG(XTRM$KWID[0],XTRM$VALNUM[0],XTRM$STAT); 
                                       # CHECK NORMAL RANGE            #
          END 
        IF XTRM$STAT                   # IF IT IS IN RANGE             #
        THEN
          BEGIN 
          CRNT$NEN = XTRM$VALNUM[0];   # SAVE NEN VALUE                #
          END 
        END 
      GOTO NEXT$PARAM;
COLLECT:  
      COLLECT$USED = TRUE;   # SET COLLECT SPECIFIED FLAG              #
      IF NOT XTRM$VLERR[0]   # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$TIP NQ TIP"USER" AND
           CRNT$STIP NQ STIP"PAD" AND 
           CRNT$STIP NQ STIP"USER"
        THEN
          BEGIN              # FLAG ERROR -- PARAM INVALID WITH STIP   #
          NDLEM2(ERR135,XTRM$LINE,"COLLECT"); 
          END 
        IF XTRM$VALNAM[0] EQ "YES"
        THEN
          BEGIN 
          COLLECT$FLAG = TRUE;
          END 
        END 
      GOTO NEXT$PARAM;
PAD$: 
      IF NOT XTRM$VLERR[0]   # IF VALUE IS O.K.                        #
      THEN
        BEGIN 
        IF CRNT$TIP NQ TIP"USER" AND
           CRNT$STIP NQ STIP"XAA" AND 
           CRNT$STIP NQ STIP"PAD" 
        THEN
          BEGIN              # FLAG ERROR -- PARAM INVALID WITH STIP   #
          NDLEM2(ERR135,XTRM$LINE,"PAD"); 
          END 
        ELSE
          BEGIN              # SAVE NUMBER OF 8-BIT PAD ENTRIES        #
          CRNT$DEPAD = XTRM$VALNUM[0];
          CRNT$DEPADW = (CRNT$DEPAD*8 +59) / 60;   # NO. WORDS FOR PAD #
          FOR I = 1 STEP 1 UNTIL CRNT$DEPADW
          DO
            BEGIN            # SAVE CURRENT PAD VALUE                  #
            CRNT$PAD[I] = XTRM$PAD[I];
            END 
          END 
        END 
      GOTO NEXT$PARAM;
NEXT$PARAM: 
      RETURN;                # **** RETURN ****                        #
      END # XTRMPRM # 
      CONTROL EJECT;
      PROC X25TERM; 
      BEGIN 
*IF,DEF,IMS 
# 
**    X25TERM -- CHECKS TERMINALS PARAMETERS LEGAL FOR X.25 TIP.
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMETER 
*     ON THE STATEMENT. 
* 
*     PROC X25TERM
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES. 
*         CASE 1(RIC,CSET): 
*           CHECK GENERAL PARAMETER.
*         CASE 2(W,CTYP,NCIR,NEN,COLLECT):  
*           CHECK X.25 PARAMETER. 
*         CASE 3(TSPEED,CA,CO,BCF,MREC,EOF):  
*           FLAG ERROR -- ILLEGAL WITH TIPTYPE SPECIFIED. 
*     IF W WAS NOT SPECIFIED, 
*       FLAG ERROR -- REQUIRED PARAMETER MISSING. 
*     IF CTYP WAS NOT SPECIFIED 
*       DEFAULT CTYP TO SVC.
*     IF CTYP IS SVC, 
*     THEN, 
*       IF NCIR IS GREATER THAN NSVC VALUE, 
*         FLAG ERROR -- NCIR VALUE TOO LARGE. 
*       IF NEN WAS NOT SPECIFIED, 
*       THEN, 
*         DEFAULT NEN TO NCIR VALUE.
*       OTHERWISE,
*         IF NEN IS GREATER THAN NCIR VALUE,
*           FLAG ERROR -- NEN VALUE TO LARGE. 
*     OTHERWISE,(CTYP IS PVC) 
*       IF NCIR WAS SPECIFIED,
*         FLAG ERROR -- NCIR ONLY VALID WITH SVC. 
*       IF NEN WAS SPECIFIED, 
*         FLAG ERROR -- NEN ONLY VALID WITH SVC.
* 
# 
*ENDIF
# 
****  PROC X25TERM - XREF LIST BEGINS.
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      ITEM I;                # SCRATCH ITEM                            #
      ITEM SWITCH$ID;        # USED AS I.D. FOR KEYWORD                #
      SWITCH X25TJUMP   NEXT$PARAM,    # STIP                          #
                        NEXT$PARAM,    # TC                            #
                        GEN$PARAM ,    # RIC                           #
                        GEN$PARAM ,    # CSET                          #
                        OTHERS    ,    # TSPEED                        #
                        OTHERS    ,    # CA                            #
                        OTHERS    ,    # CO                            #
                        OTHERS    ,    # BCF                           #
                        OTHERS    ,    # MREC                          #
                        X25$PARAM ,    # W                             #
                        X25$PARAM ,    # CTYP                          #
                        X25$PARAM ,    # NCIR                          #
                        X25$PARAM ,    # NEN                           #
                        X25$PARAM ,    # COLLECT                       #
                        OTHERS    ,    # XAUTO                         #
                        OTHERS    ,    # DT                            #
                        OTHERS    ,    # SDT                           #
                        OTHERS    ,    # TA                            #
                        OTHERS    ,    # ABL                           #
                        OTHERS    ,    # DBZ                           #
                        OTHERS    ,    # UBZ                           #
                        OTHERS    ,    # DBL                           #
                        OTHERS    ,    # UBL                           #
                        OTHERS    ,    # XBZ                           #
                        OTHERS    ,    # DO                            #
                        OTHERS    ,    # STREAM                        #
                        OTHERS    ,    # HN                            #
                        OTHERS    ,    # AUTOLOG                       #
                        OTHERS    ,    # AUTOCON                       #
                        OTHERS    ,    # PRI                           #
                        OTHERS    ,    # P80                           #
                        OTHERS    ,    # P81                           #
                        OTHERS    ,    # P82                           #
                        OTHERS    ,    # P83                           #
                        OTHERS    ,    # P84                           #
                        OTHERS    ,    # P85                           #
                        OTHERS    ,    # P86                           #
                        OTHERS    ,    # P87                           #
                        OTHERS    ,    # P88                           #
                        OTHERS    ,    # P89                           #
                        OTHERS    ,    # AB                            #
                        OTHERS    ,    # BR                            #
                        OTHERS    ,    # BS                            #
                        OTHERS    ,    # B1                            #
                        OTHERS    ,    # B2                            #
                        OTHERS    ,    # CI                            #
                        OTHERS    ,    # CN                            #
                        OTHERS    ,    # CT                            #
                        OTHERS    ,    # DLC                           #
                        OTHERS    ,    # DLTO                          #
                        OTHERS    ,    # DLX                           #
                        OTHERS    ,    # EP                            #
                        OTHERS    ,    # IN                            #
                        OTHERS    ,    # LI                            #
                        OTHERS    ,    # OP                            #
                        OTHERS    ,    # PA                            #
                        OTHERS    ,    # PG                            #
                        OTHERS    ,    # PL                            #
                        OTHERS    ,    # PW                            #
                        OTHERS    ,    # SE                            #
                        OTHERS    ,    # FA                            #
                        OTHERS    ,    # XLC                           #
                        OTHERS    ,    # XLX                           #
                        OTHERS    ,    # XLTO                          #
                        OTHERS    ,    # ELO                           #
                        OTHERS    ,    # ELX                           #
                        OTHERS    ,    # ELR                           #
                        OTHERS    ,    # EBO                           #
                        OTHERS    ,    # EBR                           #
                        OTHERS    ,    # CP                            #
                        OTHERS    ,    # IC                            #
                        OTHERS    ,    # OC                            #
                        OTHERS    ,    # LK                            #
                        OTHERS    ,    # EBX                           #
                        OTHERS    ,    # HD                            #
                        OTHERS    ,    # MC                            #
                        OTHERS    ,    # XLY                           #
                        OTHERS    ,    # EOF                           #
                        X25$PARAM ;    # PAD                           #
#                                                                      #
#                            X25TERM CODE BEGINS HERE                  #
#                                                                      #
      FOR I=2 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE DECLARATION ENTRY        #
        BEGIN 
        SWITCH$ID = STKWID[I] - KID"STIP";       # CALCULATE SWITCH ID #
        GOTO X25TJUMP[SWITCH$ID];      # GOTO APPROPRIATE PARAGRAPH    #
GEN$PARAM:  
        GENTERM(SWITCH$ID,STWORD[I],STLNUM[0]);  # GENERAL PARAMETERS  #
        GOTO NEXT$PARAM;
X25$PARAM:  
        XTRMPRM(SWITCH$ID,STMT$TABLE[I],STLNUM[0]);  # X25 PARAMETERS  #
        IF STKWID[I] EQ KID"PAD"
        THEN
          BEGIN                        # STATEMENT TABLE               #
          I = I + MAXPADW;             # PAD ENTRIES ARE 1+MAXPADW LONG#
          END 
        GOTO NEXT$PARAM;
OTHERS:                      # ALL OTHER PARAMETERS FLAG AS INVALID    #
        NDLEM2(ERR106,STLNUM[0],KWDNAME[SWITCH$ID]); # FOR X25 LINES   #
NEXT$PARAM:                  # GO TO NEXT PARAMETER                    #
        END 
      IF NOT W$USED                    # IF W NOT SPECIFIED            #
      THEN
        BEGIN                # ASSIGN DEFAULT VALUE                    #
        CRNT$W = W$DEF; 
        END 
      IF NOT CTYP$USED                 # IF CTYP NOT SPECIFIED         #
      THEN
        BEGIN 
        CRNT$CTYP = CTYP"SVC";         # DEFAULT CTYP                  #
        END 
      IF SVC$CNT GR 0                  # LINE SUPPORTS SVC             #
      THEN
        BEGIN 
        IF CRNT$CTYP EQ CTYP"SVC" 
        THEN
          BEGIN 
          IF B<CRNT$STIP,1>XTERMASK EQ 0 # NO TERMINAL DEFINED YET     #
          THEN
            BEGIN 
            B<CRNT$STIP,1>XTERMASK = 1; # SET FLAG                     #
            END 
          ELSE
            BEGIN 
            NDLEM2(ERR167,STLNUM[0],STIP$VAL[CRNT$STIP]); 
            END 
          END 
        END 
      IF CRNT$CTYP EQ CTYP"SVC"        # IF CTYP IS SVC                #
      THEN
        BEGIN 
        IF CRNT$NCIR GR SVC$CNT 
        THEN                 # NCIR VALUE LARGER THAN SVC COUNT ALLOTED#
          BEGIN 
          NDLEM2(ERR150,STLNUM[0]," "); # FLAG ERROR -- NCIR TOO BIG   #
          END 
        SVC$SPEC = TRUE;     # SET SVC SPECIFIED FLAG                  #
        IF NOT NEN$USED                # IF NEN NOT SPECIFIED          #
        THEN
          BEGIN 
          CRNT$NEN = CRNT$NCIR;        # DEFAULT NEN IS NCIR VALUE     #
          END 
        ELSE                           # NEN SPECIFIED                 #
          BEGIN 
          IF CRNT$NEN GR CRNT$NCIR     # IF NEN VALUE GREATER THAN NCIR#
          THEN
            BEGIN            # FLAG ERROR -- NEN MUST NOT BE GREATER   #
            NDLEM2(ERR118,STLNUM[0]," "); # THAN NCIR VALUE            #
            END 
          END 
        END 
      ELSE                             # CTYP IS PVC OR UNKNOWN        #
        BEGIN 
        IF NCIR$USED                   # IF NCIR WAS SPECIFIED         #
        THEN
          BEGIN              # FLAG ERROR -- NCIR ONLY VALID WITH SVC  #
          NDLEM2(ERR101,STLNUM[0],"NCIR");
          END 
        IF NEN$USED                    # IF NEN WAS SPECIFIED          #
        THEN
          BEGIN              # FLAG ERROR -- NEN VALID WITH SVC ONLY   #
          NDLEM2(ERR101,STLNUM[0],"NEN"); 
          END 
        END 
      RETURN;                # **** RETURN ****                        #
      END # X25TERM # 
      CONTROL EJECT;
      PROC $3270TRM;
      BEGIN 
*IF,DEF,IMS 
# 
**    $3270TRM -- CHECK TERMINAL PARAMETERS LEGAL FOR MODE4 TIP.
* 
*     D.K. ENDO    81/12/01 
* 
*     THIS PROCEDURE CALLS THE APPROPRIATE PROC TO CHECK EACH PARAMETER 
*     ON THE STATEMENT. 
* 
*     PROC $3270TRM 
* 
*     ENTRY        NONE.
* 
*     EXIT         NONE.
* 
*     METHOD
* 
*     FOR EACH VALUE DECLARATION, 
*       SELECT CASE THAT APPLIES, 
*         CASE 1(RIC,CSET): 
*           CHECK GENERAL PARAMETER.
*         CASE 2(CA)
*           CHECK MODE4 PARAMETER.
*         CASE 3(TSPEED,CO,BCF,MREC,W,CTYP,NCIR,NEN,COLLECT,EOF): 
*           FLAG ERROR -- INVALID PARAMETER.
*     IF CA WAS NOT SPECIFIED AND NOT AN AUTO-REC LINE. 
*       FLAG ERROR -- REQUIRE PARAMETER MISSING.
* 
# 
*ENDIF
# 
****  PROC $3270TRM - XREF LIST BEGINS. 
# 
      XREF
        BEGIN 
        PROC NDLEM2;         # MAKES ENTRY IN PASS 2 ERROR FILE        #
        END 
# 
****
# 
      ITEM I;                # SCRATCH ITEM                            #
      ITEM SWITCH$ID;        # USED AS I.D. FOR KEYWORD                #
      SWITCH $3270JMP   NEXT$PARAM,    # STIP                          #
                        NEXT$PARAM,    # TC                            #
                        GEN$PARAM ,    # RIC                           #
                        GEN$PARAM ,    # CSET                          #
                        OTHERS    ,    # TSPEED                        #
                        MD4$PARAM ,    # CA                            #
                        OTHERS    ,    # CO                            #
                        OTHERS    ,    # BCF                           #
                        OTHERS    ,    # MREC                          #
                        OTHERS    ,    # W                             #
                        OTHERS    ,    # CTYP                          #
                        OTHERS    ,    # NCIR                          #
                        OTHERS    ,    # NEN                           #
                        OTHERS    ,    # COLLECT                       #
                        OTHERS    ,    # XAUTO                         #
                        OTHERS    ,    # DT                            #
                        OTHERS    ,    # SDT                           #
                        OTHERS    ,    # TA                            #
                        OTHERS    ,    # ABL                           #
                        OTHERS    ,    # DBZ                           #
                        OTHERS    ,    # UBZ                           #
                        OTHERS    ,    # DBL                           #
                        OTHERS    ,    # UBL                           #
                        OTHERS    ,    # XBZ                           #
                        OTHERS    ,    # DO                            #
                        OTHERS    ,    # STREAM                        #
                        OTHERS    ,    # HN                            #
                        OTHERS    ,    # AUTOLOG                       #
                        OTHERS    ,    # AUTOCON                       #
                        OTHERS    ,    # PRI                           #
                        OTHERS    ,    # P80                           #
                        OTHERS    ,    # P81                           #
                        OTHERS    ,    # P82                           #
                        OTHERS    ,    # P83                           #
                        OTHERS    ,    # P84                           #
                        OTHERS    ,    # P85                           #
                        OTHERS    ,    # P86                           #
                        OTHERS    ,    # P87                           #
                        OTHERS    ,    # P88                           #
                        OTHERS    ,    # P89                           #
                        OTHERS    ,    # AB                            #
                        OTHERS    ,    # BR                            #
                        OTHERS    ,    # BS                            #
                        OTHERS    ,    # B1                            #
                        OTHERS    ,    # B2                            #
                        OTHERS    ,    # CI                            #
                        OTHERS    ,    # CN                            #
                        OTHERS    ,    # CT                            #
                        OTHERS    ,    # DLC                           #
                        OTHERS    ,    # DLTO                          #
                        OTHERS    ,    # DLX                           #
                        OTHERS    ,    # EP                            #
                        OTHERS    ,    # IN                            #
                        OTHERS    ,    # LI                            #
                        OTHERS    ,    # OP                            #
                        OTHERS    ,    # PA                            #
                        OTHERS    ,    # PG                            #
                        OTHERS    ,    # PL                            #
                        OTHERS    ,    # PW                            #
                        OTHERS    ,    # SE                            #
                        OTHERS    ,    # FA                            #
                        OTHERS    ,    # XLC                           #
                        OTHERS    ,    # XLX                           #
                        OTHERS    ,    # XLTO                          #
                        OTHERS    ,    # ELO                           #
                        OTHERS    ,    # ELX                           #
                        OTHERS    ,    # ELR                           #
                        OTHERS    ,    # EBO                           #
                        OTHERS    ,    # EBR                           #
                        OTHERS    ,    # CP                            #
                        OTHERS    ,    # IC                            #
                        OTHERS    ,    # OC                            #
                        OTHERS    ,    # LK                            #
                        OTHERS    ,    # EBX                           #
                        OTHERS    ,    # HD                            #
                        OTHERS    ,    # MC                            #
                        OTHERS    ,    # XLY                           #
                        OTHERS    ,    # EOF                           #
                        OTHERS    ;    # PAD                           #
#                                                                      #
#                            $3270TRM CODE BEGINS HERE                 #
#                                                                      #
      FOR I=2 STEP 1 UNTIL STWC[0]
      DO                     # FOR EACH VALUE-DECLARATION ENTRY        #
        BEGIN 
        SWITCH$ID = STKWID[I] - KID"STIP";       # CALCULATE SWITCH ID #
        GOTO $3270JMP[SWITCH$ID];      # GO TO APPROPRIATE PARAGRAPH   #
GEN$PARAM:  
        GENTERM(SWITCH$ID,STWORD[I],STLNUM[0]);  # GENERAL PARAMETERS  #
        GOTO NEXT$PARAM;
MD4$PARAM:  
        MTRMPRM(SWITCH$ID,STWORD[I],STLNUM[0]);  # MODE4 PARAMETERS    #
        GOTO NEXT$PARAM;
  
OTHERS:                      # ALL OTHER PARAMETERS FLAG AS INVALID    #
        IF NOT TT$USED       # IF THIS LINE IS AUTO-SYNC               #
        THEN
          BEGIN              # FLAG ERROR -- INVALID WITH STIP/TC SPEC #
          NDLEM2(ERR135,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        ELSE                 # TIPTYPE MUST HAVE BEEN SPECIFIED        #
          BEGIN              # FLAG ERROR -- INVALID WITH TIPTYPE SPEC #
          NDLEM2(ERR106,STLNUM[0],KWDNAME[SWITCH$ID]);
          END 
        IF STKWID[I] EQ KID"PAD"
        THEN
          BEGIN                        # STATEMENT TABLE               #
          I = I + MAXPADW;             # PAD ENTRIES ARE 1+MAXPADW LONG#
          END 
NEXT$PARAM:                  # GO TO NEXT PARAMETER                    #
        END 
      RETURN;                # **** RETURN ****                        #
      END # $3270TRM #
      CONTROL EJECT;
#                                                                      #
#                            TERMPR CODE BEGINS HERE                   #
#                                                                      #
      COLLECT$FLAG = FALSE; 
      COLLECT$USED = FALSE; 
      CRNT$STIP = STIP"UNKNOWN";
      CRNT$TC = TC"UNKNOWN";
      BCF$FLAG = FALSE; 
      CA$USED = FALSE;
      CRNT$CSET = CSET"UNKNOWN";
      CRNT$CTYP = CTYP"UNKNOWN";
      CRNT$MREC = 0;
      CRNT$NCIR = NCIR$DEF; 
      CRNT$NEN = NCIR$DEF;
      CRNT$EOF = FALSE; 
      EOF$USED = FALSE; 
      CRNT$TSPD = LSPD"UNKNOWN";
      CRNT$W = 0; 
      CRNT$DEPAD = 0;                  # INITIALIZE PAD ENTRY COUNT    #
      CRNT$DEPADW = 0;                 # INITIALIZE PAD ENTRY  "(WORDS)#
      CSET$USED = FALSE;
      CTYP$USED = FALSE;
      NCIR$USED = FALSE;
      NEN$USED = FALSE; 
      RIC$FLAG = FALSE; 
      RIC$USED = FALSE; 
      STIP$USED = FALSE;
      TC$USED = FALSE;
      W$USED = FALSE; 
#                                                                      #
      IF LRWC[1]+MXTRENT GQ LR$LENG 
      THEN                   # IF NEED MORE TABLE SPACE FOR ENTRY      #
        BEGIN 
        SSTATS(P<LINE$RECORD>,MXTRENT); # ALLOCATE MORE TABLE SPACE    #
        END 
      CRNT$TERM = LRWC[1] + 1;         # SET POINTER TO CURRENT TERM   #
      LRWORD[CRNT$TERM] = 0;           # CLEAR 1ST WORD IN ENTRY       #
      TE$IDENT[CRNT$TERM] = "TRM";     # ENTER TERMINAL IDENTIFIER     #
      TEWC[CRNT$TERM] = 2;             # ENTER ENTRY WORD COUNT        #
      LRWC[1] = LRWC[1] + 2;           # INCREMENT LINE REC WORD COUNT #
      LRWORD[LRWC[1]] = 0;             # CLEAR 2ND WORD IN ENTRY       #
      IF NOT AUTO$REC        # IF NOT AN AUTO REC LINE                 #
      THEN
        BEGIN 
        DEVCNT = 0;                    # CLEAR DEVICE COUNT            #
        TERMCNT = TERMCNT + 1;         # CLEAR TERMINAL COUNT          #
        IF TERMCNT GR MAXTERM          # IF COUNT EXCEEDS MAX FOR TERMS#
        THEN
          BEGIN              # FLAG ERROR -- MAX TERMS EXCEEDED        #
          NDLEM2(ERR115,STLNUM[0]," "); 
          END 
        END                            # PUT CURRENT TIP IN TERM ENTRY #
      TETP[CRNT$TERM + 1] = LCTTYP$IP[2]; 
      IF LCTTYP$IP[2] EQ SYNAUTO
      THEN                   # IF TIPTYPE IS SYNC AUTO-REC             #
        BEGIN 
        CRNT$TIP = TIP"UNKNOWN";       # CLEAR CURRENT TIPTYPE VALUE   #
        END 
      IF STORD1[1] NQ 0      # IF STIP HAS BEEN SPECIFIED              #
      THEN
        BEGIN 
        STIP$USED = TRUE;              # SET STIP SPECIFIED FLAG       #
        IF NOT STVLERR[STORD1[1]]      # IF VALUE IS O.K.              #
        THEN
          BEGIN                        # IF VALUE IS AUTOREC           #
          IF STVALNAM[STORD1[1]] EQ "AUTOREC" 
          THEN
            BEGIN 
            IF NOT AUTO$REC            # IF NOT AN AUTO-REC LINE       #
            THEN
              BEGIN          # FLAG ERROR -- AUTOREC NOT VALID         #
              NDLEM2(ERR113,STLNUM[0]," "); 
              END 
            ELSE                       # NOT AN AUTO-REC LINE          #
              BEGIN 
              STIP$USED = FALSE;       # CLEAR STIP SPECIFIED FLAG     #
              END 
            END 
          ELSE               # VALUE IS NOT AUTOREC                    #
            BEGIN            # SEARCH STIP TABLE FOR VALUE             #
            FOR I=1 STEP 1 UNTIL MXSTIP 
            DO
              BEGIN          # IF VALUE IS FOUND                       #
              IF STVALNAM[STORD1[1]] EQ STIP$VAL[I] 
              THEN
                BEGIN 
                CRNT$STIP = STIP$STATUS[I];      # SET CURRENT STIP    #
                TESTIP[CRNT$TERM + 1] = STIP$NUMV[I]; #SET FIELD IN ENT#
                END 
              END 
            IF CRNT$TIP NQ TIP"USER" AND         # IF TIPTYPE IS NOT   #
               CRNT$TIP NQ TIP"UNKNOWN"          #   USER OR UNKNOWN   #
            THEN
              BEGIN                    # STIP AND NOT COMPATIBLE       #
              IF B<CRNT$TIP,1>STIP$TIP$MAP[CRNT$STIP] NQ 1
              THEN
                BEGIN                  # FLAG ERROR -- INVALID WITH TIP#
                NDLEM2(ERR112,STLNUM[0],STIP$VAL[CRNT$STIP]); 
                CRNT$STIP = STIP"UNKNOWN";       # CLEAR CURRENT STIP  #
                END 
              END 
            END 
          END 
        END 
      IF STORD2[1] NQ 0                # IF TC WAS SPECIFIED           #
      THEN
        BEGIN 
        TC$USED = TRUE;                # SET TC SPECIFIED FLAG         #
        IF NOT STVLERR[STORD2[1]]      # IF VALUE IS O.K.              #
        THEN
          BEGIN                        # IF VALUE IS CCP               #
          IF STVALNAM[STORD2[1]] EQ "CCP" 
          THEN
            BEGIN 
            TC$USED = FALSE;           # CLEAR TC SPECIFIED FLAG       #
            END 
          ELSE                         # VALUE IS NOT CCP              #
            BEGIN                      # SEARCH TABLE FOR VALUE        #
            FOR I=1 STEP 1 UNTIL MXTC 
            DO
              BEGIN                    # IF VALUE IS FOUND             #
              IF STVALNAM[STORD2[1]] EQ TC$VAL[I] 
              THEN
                BEGIN 
                CRNT$TC = TC$STATUS[I];          # SET CURRENT TC      #
                TETC[CRNT$TERM + 1] = TC$NUMV[I];  # PUT VALUE IN ENTRY#
                END 
              END 
            IF CRNT$TIP NQ TIP"USER" AND         # IF TIPTYPE TC NOT   #
               CRNT$TC NQ TC"USER"               #   USER AND TC IS NOT#
            THEN                                 #   USER              #
              BEGIN 
              IF CRNT$STIP NQ STIP"UNKNOWN"      # IF STIP IS NOT      #
              THEN                               #   UNKNOWN           #
                BEGIN                  # IF STIP AND TC NOT COMPATIBLE #
                IF B<CRNT$STIP,1>STIP$AMAP[CRNT$TC] NQ 1
                THEN
                  BEGIN      # FLAG ERROR -- STIP AND TC NOT COMPATIBLE#
                  NDLEM2(ERR111,STLNUM[0],STVALNAM[STORD2[1]]); 
                  CRNT$TC = TC"UNKNOWN";         # CLEAR CURRENT TC    #
                  END 
                END 
              ELSE                     # CURRENT STIP IS UNKNOWN       #
                BEGIN                  # IF CURRENT TIPTYPE NOT UNKNOWN#
                IF CRNT$TIP NQ TIP"UNKNOWN" 
                THEN
                  BEGIN                # IF TIPTYPE AND TC NOT COMPATBL#
                  IF B<CRNT$TIP,1>TC$TIP$AMAP[CRNT$TC] NQ 1 
                  THEN
                    BEGIN    # FLAG ERROR -- TIPTYPE AND TC NOT COMPAT #
                    NDLEM2(ERR112,STLNUM[0],STVALNAM[STORD2[1]]); 
                    CRNT$TC = TC"UNKNOWN";       # CLEAR CURRENT TC    #
                    END 
                  END 
                END 
              END 
            END 
          END 
        END 
      IF CRNT$TIP NQ TIP"USER"         # IF TIPTYPE IS NOT USER        #
      THEN
        BEGIN 
        IF NOT STIP$USED               # IF STIP NOT SPECIFIED         #
        THEN
          BEGIN 
          IF TC$USED                   # IF TC NOT SPECIFIED           #
          THEN
            BEGIN 
            IF (CRNT$TIP EQ TIP"ASYNC" OR CRNT$TIP EQ TIP"MODE4"
            OR CRNT$TIP EQ TIP"HASP") AND (CRNT$TC EQ TC"USER") 
            THEN
              BEGIN 
              NDLEM2(ERR160,STLNUM[0]," "); 
              END 
            ELSE
              BEGIN 
              CRNT$STIP = DEF$STIP[CRNT$TC];     # SAVE DEFAULT STIP   #
              IF CRNT$TIP EQ TIP"X25"            # IF TIPTYPE IS X25   #
              THEN
                BEGIN 
                CRNT$STIP = STIP"PAD"; # DEFAULT STIP TO PAD           #
                END                    # STORE STIP VALUE IN TERM ENTRY#
              TESTIP[CRNT$TERM + 1] = STIP$NUMV[CRNT$STIP]; 
              END 
            END 
          ELSE               # TC NOT SPECIFIED                        #
            BEGIN            # FLAG ERROR -- TC OR STIP REQUIRED       #
            NDLEM2(ERR117,STLNUM[0]," "); 
            END 
          END 
        END 
      IF NOT TT$USED         # IF TIPTYPE WAS NOT SPECIFIED            #
      THEN
        BEGIN 
        IF LTYPE EQ "SYNC" AND         # IF LTYPE IS SYNCHRONOUS       #
           AUTO$REC                    #   AND AUTO-REC                #
        THEN
          BEGIN              # DEFAULT TIPTYPE BASED ON STIP           #
          TETP[CRNT$TERM+1] = STIP$TIP[CRNT$STIP];
          CRNT$TIP = STIP$TIP[CRNT$STIP]; 
          END 
        END 
      GOTO TRMJUMP[CRNT$TIP];          # CHECK REST OF PARAMETERS      #
ASYNC:  
      ASYTERM;                         # CHECK ASYNC TERMINAL PARAMS   #
      GOTO GEN$CHECK; 
MODE4:  
      MD4TERM;                         # CHECK MODE4 TERMINAL PARAMS   #
      GOTO GEN$CHECK; 
HASP: 
      HSPTERM;                         # CHECK HASP TERMINAL PARAMETERS#
      GOTO GEN$CHECK; 
X25:  
      X25TERM;                         # CHECK X25 TERMINAL PARAMETERS #
      GOTO GEN$CHECK; 
BSC:  
      BSCTERM;                         # CHECK BSC TERMINAL PARAMETERS #
      GOTO GEN$CHECK; 
$3270:  
      $3270TRM; 
      GOTO GEN$CHECK; 
USER: 
      USRTERM;                         # CHECK USER TERMINAL PARAMETERS#
      GOTO NEXT;
GEN$CHECK:                             # FINAL GENERAL CHECKS          #
      IF NOT CSET$USED AND             # IF CSET NOT SPECIFIED AND NOT #
         NOT AUTO$REC                  #   AN AUTO-REC LINE            #
      THEN
        BEGIN                          # DEFAULT CSET                  #
        IF CRNT$TIP EQ TIP"$3270" 
        THEN                           # IF TIP IS 3270                #
          BEGIN 
          CRNT$CSET = CSET"EBCDIC"; 
          TECD[CRNT$TERM+1] = CRNT$CSET;
          END 
        ELSE                           # DEFAULT BY STIP               #
          BEGIN 
          CRNT$CSET = CSET$DEF[CRNT$STIP];
          TECD[CRNT$TERM+1] = CRNT$CSET;
          END 
        END 
NEXT: 
      FOR I=1 STEP 1 UNTIL MXDT 
      DO
        BEGIN 
        DT$CNT[I] = 0;       # CLEAR DEVICE TYPE COUNT                 #
        DO$MAP[I] = 0;       # CLEAR -DO- AND STREAM MAP               #
        STRM$MAP[I] = 0;
        FIRST$DT[I] = TRUE;  # SET FIRST DEVICE TYPE MAP               #
        END 
      CP$PL$MAP = 0;         # CLEAR CP/PL BIT MAP                     #
      TA$MAP = 0;            # CLEAR -TA- MAP                          #
      IF NOT AUTO$REC        # IF NOT AN AUTO-REC LINE                 #
      THEN                   #   SET MAXIMUM NUMBER OF DEVICE TYPES    #
        BEGIN 
        MAXDEV = DEV$MAX[CRNT$TIP];    # SET MAX NUMBER OF DEVICE STMTS#
        IF CRNT$STIP EQ STIP"M4A"      # IF CURRENT STIP IS M4A        #
        THEN
          BEGIN 
          MAXDEV = DEV$MX$M4A;
          DT$MAX[DT"CON"] = CON$MX$M4A; 
          DT$MAX[DT"CR"] = CR$MAX$M4A;
          DT$MAX[DT"LP"] = LP$MAX$M4A;
          DT$MAX[DT"USER"] = DT7$MX$M4A;
          END 
        ELSE                 # ALL OTHER STIP-S                        #
          BEGIN 
          DT$MAX[DT"CON"] = CON$MAX[CRNT$TIP];
          DT$MAX[DT"CR"] = CR$MAX[CRNT$TIP];
          DT$MAX[DT"LP"] = LP$MAX[CRNT$TIP];
          DT$MAX[DT"USER"] = DT7$MAX[CRNT$TIP]; 
          END 
        DT$MAX[DT"CP"] = CP$MAX[CRNT$TIP];
        DT$MAX[DT"PL"] = PL$MAX[CRNT$TIP];
        DT$MAX[DT"AP"] = AP$MAX[CRNT$TIP];
        END 
      ELSE                   # LINE IS AUTO-REC                        #
        BEGIN 
        MAXDEV = 255; 
        END 
      RETURN;                # **** RETURN ****                        #
      END # TERMPR #
      CONTROL EJECT;
      PROC USR$RANGE(UVALNUM,U$RANGE,UMODE,USTAT);
      BEGIN 
*IF,DEF,IMS 
# 
**
*     THIS PROCEDURE CHECKS THE RANGE OF DEVICE, LINE OR TERMINAL 
*     PARAMETERS FOR USER DEFINED TIPTYPES. 
* 
*     Y. C. YIP         11/24/1982
* 
*     PROC USR$RANGE(UVALNUM,U$RANGE,UMODE,USTAT) 
* 
*     ENTRY        UVALNUM = VALUE WHOSE RANGE TO BE CHECKED. 
* 
*                  USTAT = STATUS SET TO FALSE IF OUT OF RANGE
* 
*                  ELSE TO TRUE.
* 
*                  U$RANGE = UPPER RANGE APPLICABLE FOR THIS PARAMETER. 
* 
*                  UMODE = 1 FOR DECIMAL AND 2 FOR HEX. 
*     EXIT          NONE. 
* 
*     METHOD        THIS PROCEDURE PICKS UP THE UVALNUM OF THE PARAMETER
* 
*                   CHECKS IF IT IS GREATER THAN OR EQUAL TO 0 AND
* 
*                   IF IT IS LESS THAN OR EQUAL TO U$RANGE. IF SO,
* 
*                   USTAT IS LEFT SET AT TRUE ELSE IT IS SET TO FALSE.
* 
*                   ALSO, ERR100 IS GENERATED IF VALUE IS OUT OF RANGE. 
* 
# 
*ENDIF
      XREF
        BEGIN 
        FUNC XCDD C(10);           # CONVERTS DECIMAL TO DISPLAY CODE  #
        FUNC XCHD C(10);           # CONVERTS HEXIDECIMAL TO DISPLAY   #
        END 
      DEF ZERO # 0 #;              # VALUE 0                           #
      ITEM UVALNUM ;               # USER VALUE                        #
      ITEM U$RANGE ;               # UPPER LIMIT OF THIS USER PARAMETER#
      ITEM CTEMP C(10);            # CHARACTER TEMPORARY               #
      ITEM UMODE;                  # 1 FOR DECIMAL AND 2 FOR HEX       #
      ITEM USTAT B ;               # USER STATUS                       #
      USTAT = TRUE;                # PRSETTING USTAT IS TRUE           #
      IF NOT (UVALNUM GQ ZERO AND 
         UVALNUM LQ U$RANGE)       # IF NOT WITHIN RANGE               #
      THEN
        BEGIN 
        USTAT = FALSE;             # SET ERROR STATUS FLAG             #
        IF UMODE EQ NUM"DEC"       # IF DECIMAL                        #
        THEN
          BEGIN 
          CTEMP = XCDD(UVALNUM);   # CONVERT TO DECIMAL                #
          END 
        ELSE
          BEGIN 
          CTEMP = XCHD(UVALNUM);   # CONVERTS TO DISPLAY CODE          #
          END 
        NDLEM2(ERR100,STLNUM[0],C<4,6>CTEMP);  # ERROR MESSAGE         #
        END 
      RETURN; 
      END # END OF PROC USR$RANGE # 
  
      CONTROL EJECT;
#                                                                      #
#                            NDLNFCM CODE BEGINS HERE                  #
#                                                                      #
      COM$ELMT = TRUE;       # SET COMMUNICATION ELEMENT FLAG          #
      LCR$EXIST = FALSE;     # CLEAR LINE CONFIG REC EXISTS FLAG       #
      LR$EXIST = FALSE;      # CLEAR LINE RECORD EXISTS FLAG           #
      FOR I=1 WHILE COM$ELMT
      DO                     # WHILE THE ENTRIES DESCRIBE COMMUNICATION#
        BEGIN                #   ELEMENTS                              #
        GOTO COMJUMP[STSTID[0]];       # JUMP TO APPROPRIATE PARAGRAPH #
#                                                                      #
LINE: 
      IF LR$EXIST            # IF A LINE RECORD EXISTS                 #
      THEN                   #   WRITE IT OUT TO NCF                   #
        BEGIN 
        LRWORD[LRWC[1]+1] = 0;         # CLEAR NEXT WORD               #
        NWDS16 = ((LRWC[1]+2)*60)/16;  # CALCULATE NPU WORD COUNT      #
                                       # CALCULATE CHECK SUM           #
        LFGCKSM(LOC(LINE$RECORD),59,NWDS16,CKSUM);
                                       # ADD CHECK SUM TO TOTAL        #
        NPCKSM[NPWC[0]] = NPCKSM[NPWC[0]] + CKSUM;
        LENGTH = LRWC[1] + 1;          # SAVE LENGTH OF RECORD         #
        NDLWNCF(TABLE"LR",P<LINE$RECORD>,LENGTH); # WRITE RECORD TO NCF#
        LR$EXIST = FALSE;              # CLEAR LINE RECORD EXISTS FLAG #
        END 
      IF LCR$EXIST           # IF LINE CONFIGURATION RECORD EXISTS     #
      THEN                   #   WRITE RECORD TO FILE                  #
        BEGIN 
        IF CRNT$TIP EQ TIP"X25" OR     # IF X25 LINE                   #
          (CRNT$TIP EQ TIP"USER" AND LTYPE EQ "X25")
        THEN
          BEGIN                        # STORE PVC COUNT               #
          LINFNFV(FN"PVC",PVC$CNT); 
          END 
        NDLWLCR(CRNT$NPU,FALSE);
          LCR$EXIST = FALSE;           # CLEAR LINE CON REC EXISTS FLAG#
        END 
      READW(STFET,STMT$TABLE[1],STWC[0],STMT$STAT); # READ STMT ENTRY  #
      LINGRPR;                         # CALL PROC TO PROCESS ENTRY    #
      GOTO NEXT;
TERMINAL$:  
      READW(STFET,STMT$TABLE[1],STWC[0],STMT$STAT); # READ STMT ENTRY  #
      TERMPR;                          # CALL PROC TO PROCESS ENTRY    #
      GOTO NEXT;
DEVICE: 
      READW(STFET,STMT$TABLE[1],STWC[0],STMT$STAT); # READ STMT ENTRY  #
      DEVPR;                           # CALL PROC TO PROCESS ENTRY    #
      GOTO NEXT;
TRUNK:  
      READW(STFET,STMT$TABLE[1],STWC[0],STMT$STAT); # READ STMT ENTRY  #
      NDLTRNK;                         # CALL PROC TO PROCESS ENTRY    #
      GOTO NEXT;
NET$ELMT: 
      COM$ELMT = FALSE;      # CLEAR COMMUNICATION ELEMENT FLAG        #
      IF LR$EXIST            # IF A LINE RECORD EXISTS                 #
      THEN                   #   WRITE IT TO THE NCF                   #
        BEGIN 
        LRWORD[LRWC[1]+1] = 0;         # CLEAR NEXT WORD               #
        NWDS16 = ((LRWC[1]+2)*60)/16;  # CALCULATE NPU WORD COUNT      #
                                       # CALCULATE CHECK SUM           #
        LFGCKSM(LOC(LINE$RECORD),59,NWDS16,CKSUM);
                                       # ADD CHECK SUM TO TOTAL        #
        NPCKSM[NPWC[0]] = NPCKSM[NPWC[0]] + CKSUM;
        LENGTH = LRWC[1] + 1;          # SAVE LENGTH OF RECORD         #
        NDLWNCF(TABLE"LR",P<LINE$RECORD>,LENGTH); # WRITE RECORD TO NCF#
        END 
      IF LCR$EXIST           # IF LINE CONFIGURATION RECORD EXISTS     #
      THEN                   #   WRITE RECORD TO FILE                  #
        BEGIN 
        IF CRNT$TIP EQ TIP"X25" OR     # IF X25 LINE                   #
          (CRNT$TIP EQ TIP"USER" AND LTYPE EQ "X25")
        THEN
          BEGIN                        # STORE PVC COUNT               #
          LINFNFV(FN"PVC",PVC$CNT); 
          END 
        NDLWLCR(CRNT$NPU,FALSE);
        END 
      NDLWLCR(CRNT$NPU,TRUE);    # CLEAR LINE CONFIG RECORD BUFFER     #
      TEST I;                # EXIT LOOP                               #
NEXT: 
      READW(STFET,STMT$TABLE,1,STMT$STAT);   # READ HEADER OF NEXT ENT #
      IF STMT$STAT NQ TRNS$OK          # IF NOTHING WAS READ           #
      THEN                             #   DO END PROCESSING           #
        BEGIN 
        GOTO NET$ELMT;
        END 
        END # FOR LOOP #
      RETURN;                # **** RETURN ****                        #
      END # NDLNFCM # 
      TERM
