*DECK,CMDSCH
USETEXT COMCBEG 
USETEXT COMQDEF 
USETEXT COMQKDS 
USETEXT COMQPAR 
USETEXT COMQSCH 
USETEXT COMQSEL 
    PROC CMDSCH;
      BEGIN  # CMDSCH # 
# 
**    CMDSCH     PROCESS *SCHED* COMMAND. 
* 
*     PROCESSES THE OPERATOR *SCHED* COMMAND. 
* 
*     SCHED,SELSECS=I,MAXCONS=I,TIMEOUT=I,DISABLE=I,RETRY=I,LDTRFSH=I 
*         [NOS/BE ONLY] FSI1=N,FSI2=N,FSI3=N,FSI4=N,FSI5=N,FSI6=N 
* 
*     PROC CMDSCH 
* 
*     ENTRY      PARMS = PARSED COMMAND PARAMETERS. 
* 
*     EXIT       PARAMETERS PROCESSED.
* 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC CMPCOVS;              # RECOMPUTE FILE SIZE RANGES # 
        FUNC CMDSCH1    U;         # PROCESS NUMERIC PARAMETER #
        PROC NAME;                 # DEBUG CODE # 
        END 
  
# 
****  XREF END
# 
  
      STATUS KEYST
         SELSECS                   # SELSECS= # 
        ,MAXCONS                   # MAXCONS= # 
        ,TIMEOUT                   # TIMEOUT= # 
        ,DISABLE                   # DISABLE= # 
        ,RETRY                     # RETRY= # 
        ,LDTRFSH                   # LDTRFSH= # 
        ,FSI1                      # FSI1= #
        ,FSI2                      # FSI2= #
        ,FSI3                      # FSI3= #
        ,FSI4                      # FSI4= #
        ,FSI5                      # FSI5= #
        ,FSI6                      # FSI6= #
        ,UNKNOWN                   # *UNKNOWN* #
        ; 
  
      ARRAY FP [KEYST"SELSECS":KEYST"UNKNOWN"] S(1);
        BEGIN 
        ITEM FP$KEY     C(00,00,07) = 
          [ "SELSECS", "MAXCONS", "TIMEOUT", "DISABLE", "RETRY",
            "LDTRFSH", "FSI1"   , "FSI2"   , "FSI3"   , "FSI4" ,
            "FSI5"   , "FSI6"   , "UNKNOWN"]; 
        ITEM FP$MIN     U(00,42,06) = 
          [         1,         1,         1,         1,       1,
                    1,         4,         4,         4,       4,
                    4,         4,         1]; 
        ITEM FP$KEYST   S:KEYST(00,54,06) = 
          [S"SELSECS",S"MAXCONS",S"TIMEOUT",S"DISABLE",S"RETRY",
           S"LDTRFSH",S"FSI1"   ,S"FSI2"   ,S"FSI3"   ,S"FSI4" ,
           S"FSI5"   ,S"FSI6"   ,S"UNKNOWN"]; 
        END 
  
      SWITCH SW$FP:KEYST
         SW$SELSECS:SELSECS        # SELSECS= # 
        ,SW$MAXCONS:MAXCONS        # MAXCONS= # 
        ,SW$TIMEOUT:TIMEOUT        # TIMEOUT= # 
        ,SW$DISABLE:DISABLE        # DISABLE= # 
        ,SW$RETRY  :RETRY          # RETRY= # 
        ,SW$LDTRFSH:LDTRFSH        # LDTRFSH= # 
        ,SW$FSI1   :FSI1           # FSI1= #
        ,SW$FSI2   :FSI2           # FSI2= #
        ,SW$FSI3   :FSI3           # FSI3= #
        ,SW$FSI4   :FSI4           # FSI4= #
        ,SW$FSI5   :FSI5           # FSI5= #
        ,SW$FSI6   :FSI6           # FSI6= #
        ,SW$UNKNOWN:UNKNOWN        # *UNKNOWN* #
        ; 
  
      ITEM FPORD      S:KEYST;     # PARAMETER ORDINAL #
      ITEM I          U;           # LOOP VARIABLE #
      ITEM PCNT       U;           # PARAMETER COUNT #
      ITEM TMPSELSECS U;           # FILE SELECTION RECALL PERIOD # 
      ITEM TMPMAXCONS U;           # MAXIMUM CONNECTIONS #
      ITEM TMPTIMEOUT U;           # NETWORK TIMEOUT PERIOD # 
      ITEM TMPDISABLE U;           # PID/LID DISABLE PERIOD # 
      ITEM TMPRETRY   U;           # TRANSFER RETRYS BEFORE DISABLE # 
      ITEM TMPLDTRFSH U;           # PID/LID TABLE REFRESH #
      ARRAY [MNFSI:MXFSI] S(1); 
        BEGIN 
        ITEM TMPFSIU    U(00,00,60);
        END 
  
        $BEGIN
        NAME("CMDSCH");            # DEBUG CODE # 
        $END
  
      TMPSELSECS = SCHSELSECS;
      TMPMAXCONS = SCHMAXCONS;
      TMPTIMEOUT = SCHTIMEOUT;
      TMPDISABLE = SCHDISABLE;
      TMPRETRY   = SCHRETRY;
      TMPLDTRFSH = SCHLDTRFSH;
  
    CONTROL IFEQ OS$NOSBE;
      FOR I = MNFSI STEP 1 UNTIL (MXFSI - 1)
      DO
        BEGIN 
        TMPFSIU[I] = FSIU[I] * FSIUNIT; 
        END 
  
      TMPFSIU[MXFSI] = FSIU[MXFSI]; 
    CONTROL ENDIF;
  
      SLOWFOR PCNT = 1 STEP 1 WHILE (PCNT LE PARM$PCNT) 
                                AND (PARM$STAT EQ S"OK")
      DO
        BEGIN 
        IF PARM$PLEN[PCNT] EQ 0 
        THEN
          BEGIN 
          PARM$STAT = S"PARMERR"; 
          PARM$ECOL = PARM$COL[PCNT]; 
          CYCLE PCNT; 
          END 
  
        IF PARM$PLEN[PCNT] GT 7 
        THEN
          BEGIN 
          PARM$PLEN[PCNT] = 7;
          END 
  
        FP$KEY[KEYST"UNKNOWN"] = PARM$KEY[PCNT];
        FPORD = S"SELSECS"; 
        ASLONGAS (C<0,PARM$PLEN[PCNT]>FP$KEY[FPORD] 
                    NE C<0,PARM$PLEN[PCNT]>PARM$KEY[PCNT])
              OR (PARM$PLEN[PCNT] LT FP$MIN[FPORD]) 
        DO
          BEGIN 
          FPORD = FPORD + 1;
          END 
  
        GOTO SW$FP[FP$KEYST[FPORD] ];  # CASE STATEMENT # 
  
SW$SELSECS:                        # SELSECS= # 
          TMPSELSECS = CMDSCH1(PCNT, 1, 4095);
          GOTO SW$END;
  
SW$MAXCONS:                        # MAXCONS= # 
          TMPMAXCONS = CMDSCH1(PCNT, 1, LACNMAX); 
          GOTO SW$END;
  
SW$TIMEOUT:                        # TIMEOUT= # 
          TMPTIMEOUT = CMDSCH1(PCNT, 1, 60) * 60; 
          GOTO SW$END;
  
SW$DISABLE:                        # DISABLE= # 
          TMPDISABLE = CMDSCH1(PCNT, 1, 60) * 60; 
          GOTO SW$END;
  
SW$RETRY:                          # RETRY= # 
          TMPRETRY = CMDSCH1(PCNT, 1, 50);
          GOTO SW$END;
  
SW$LDTRFSH:                        # LDTRFSH= # 
          TMPLDTRFSH = CMDSCH1(PCNT, 1, 60) * 60; 
          GOTO SW$END;
  
SW$FSI1:                           # FSI1= #
          TMPFSIU[1] = CMDSCH1(PCNT, 1, 262080);
          GOTO SW$END;
  
SW$FSI2:                           # FSI2= #
          TMPFSIU[2] = CMDSCH1(PCNT, 1, 262080);
          GOTO SW$END;
  
SW$FSI3:                           # FSI3= #
          TMPFSIU[3] = CMDSCH1(PCNT, 1, 262080);
          GOTO SW$END;
  
SW$FSI4:                           # FSI4= #
          TMPFSIU[4] = CMDSCH1(PCNT, 1, 262080);
          GOTO SW$END;
  
SW$FSI5:                           # FSI5= #
          TMPFSIU[5] = CMDSCH1(PCNT, 1, 262080);
          GOTO SW$END;
  
SW$FSI6:                           # FSI6= #
          TMPFSIU[6] = CMDSCH1(PCNT, 1, 262080);
          GOTO SW$END;
  
SW$UNKNOWN:                        # *UNKNOWN* #
          PARM$STAT = S"PARMERR"; 
          GOTO SW$END;
  
SW$END:                            # END OF CASE #
        IF PARM$STAT NE S"OK" 
        THEN
          BEGIN 
          PARM$ECOL = PARM$COL[PCNT]; 
          END 
  
        END 
  
      IF PARM$STAT NE S"OK" 
      THEN
        BEGIN 
        RETURN; 
        END 
  
    CONTROL IFEQ OS$NOSBE;
      FOR I = (MXFSI - 1) STEP -1 UNTIL MNFSI 
      DO
        BEGIN 
        TMPFSIU[I] = (TMPFSIU[I] + (FSIUNIT/2) ) / FSIUNIT; 
        IF (TMPFSIU[I] GE TMPFSIU[I+1]) 
          OR (TMPFSIU[I] LE 0)
        THEN
          BEGIN 
          PARM$STAT = S"PARMERR"; 
          RETURN; 
          END 
  
        END 
  
      FOR I = MNFSI STEP 1 UNTIL MXFSI
      DO
        BEGIN 
        FSIU[I] = TMPFSIU[I]; 
        END 
  
      CMPCOVS;                     # RECOMPUTE LOWER BOUNDS # 
      KS$UPDATE[KDIS"HELP"] = TRUE; 
    CONTROL ENDIF;
  
      IF SCHLDTRFSH NE TMPLDTRFSH 
      THEN
        BEGIN 
        TIMLDTRFSH = 0; 
        END 
  
      TIMSELSECS = 0; 
      SCHSELSECS = TMPSELSECS;
      SCHMAXCONS = TMPMAXCONS;
      SCHTIMEOUT = TMPTIMEOUT;
      SCHDISABLE = TMPDISABLE;
      SCHRETRY   = TMPRETRY;
      SCHLDTRFSH = TMPLDTRFSH;
  
      END  # CMDSCH # 
    TERM
