*DECK,CMPCOVS 
USETEXT COMCBEG 
USETEXT COMQDEF 
USETEXT COMQSEL 
    PROC CMPCOVS; 
      BEGIN # CMPCOVS # 
# 
**    CMPCOVS    COMPUTE SELECTION CLASS COVER SET. 
* 
*     COMPUTES FOR EACH SELECTION CLASS THE SET OF ALL
*     SELECTION CLASSES WHOSE SELECTION CRITERIA ARE A SUBSET 
*     OF ITS OWN.  THIS SET IS USED BY QACRESP TO SET THE 
*     PID.SELECTION-CLASS.COVERED SET (PLTSCCOVER) WHEN 
*     A QAC CALL FAILS TO FIND A FILE FOR THE PID/SELECTION-CLASS.
*     THE PURPOSE OF PLTSCCOVER IS TO MINIMIZE THE NUMBER OF QAC/QAF
*     CALLS THAT MUST BE MADE WHEN SEARCHING FOR FILES. 
*     FOR EXAMPLE, IF THERE ARE FOUR SELECTION CLASSES DEFINED, EACH
*     WITH THE SAME SELECTION CRITERIA, IF QAC DOES NOT FIND A FILE 
*     FOR SELECTION CLASS A, THERE IS NO POINT IN CALLING QAC AGAIN 
*     FOR CLASSES B, C, AND D.  HOWEVER, IF SELECTION CLASS E HAS 
*     DIFFERENT SELECTION CRITERIA (I.E. THE FILE SIZE INDEX RANGE
*     IS NOT A SUBRANGE OF THE OTHERS), QAC MUST BE CALLED FOR THIS 
*     CLASS, REGARDLESS OF THE OUTCOME OF THE CALL FOR THE OTHERS.
*     SELQFIL PERIODICALLY RESETS PLTSCCOVER (EVERY SCHSELSECS SECONDS) 
*     TO RETRY ALL AVAILABLE PIDS/CLASSES.
* 
*     ON NOS/BE, CMPCOVS PERFORMS THE ADDITIONAL FUNCTION OF
*     COMPUTING THE FILE SIZE RANGE UPPER BOUNDS VALUES GIVEN 
*     THE SET OF LOWER BOUNDS VALUES.  THESE ARE CHANGED BY 
*     THE *FSIN* PARAMETERS OF THE *SCHED* COMMAND. 
* 
*     PROC CMPCOVS
* 
*     ENTRY      NONE.
* 
*     EXIT       SEL$COVERS COMPUTED FOR EACH SELECTION CLASS.
* 
*     PROCESS    SEE CODE.
* 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC NAME;                 # DEBUG CODE # 
        END 
# 
****  XREF END
# 
  
      ITEM COVERSCSET U;           # SET OF COVERED CLASSES # 
      ITEM I          U;           # LOOP VARIABLE #
      ITEM LFSI       U;           # LOWER-BOUND OF FSI RANGE # 
      ITEM SELCLASS   U;           # SELECTION CLASS #
      ITEM UFSI       U;           # UPPER-BOUND OF FSI RANGE # 
  
        $BEGIN
        NAME("CMPCOVS");             # DEBUG CODE # 
        $END
  
      FOR SELCLASS = 0 STEP 1 UNTIL MXSEL-1 
      DO
        BEGIN 
        COVERSCSET = 0; 
        LFSI = SEL$LFSI[SELCLASS];
        UFSI = SEL$UFSI[SELCLASS];
        FOR I = 0 STEP 1 UNTIL MXSEL-1
        DO
          BEGIN 
          IF (LFSI LE SEL$LFSI[I])
            AND (UFSI GE SEL$UFSI[I]) 
          THEN
            BEGIN 
            COVERSCSET = COVERSCSET LOR (2**I); 
            END 
  
          END 
  
        SEL$COVERS[SELCLASS] = COVERSCSET;
        END 
  
    CONTROL IFEQ OS$NOSBE;
      FOR I = (MNFSI + 1) STEP 1 UNTIL MXFSI
      DO
        BEGIN 
        FSIL[I] = FSIU[I-1] + 1;
        END 
  
    CONTROL ENDIF;
  
      END      # CMPCOVS #
    TERM
