*DECK DB$FTBZ 
USETEXT CDCSCTX 
      FUNC DB$FTBZ B; 
      BEGIN 
 #
* *   DB$FTBZ -- CHECK FOR BUSY CDCS FIT         PAGE  1
* *   C O GIMBER                                 10/19/77 
* *   R L MCALLESTER                             02/21/86 
* 
* D   PURPOSE 
* 
*     THIS ROUTINE CHECKS ALL DATA FILE FETS TO 
*     DETERMINE WHETHER OR NOT THERE IS AN ACTIVE IO REQUEST.  THIS 
*     IS DONE BEFORE CDCS IS ROLLED OUT WHEN THERE ARE ACTIVE USERS.
* 
*     IT ALSO CHECKS IF ANY USERS ARE WAITING FOR EXTERNAL REQUESTS,
*     LIKE I-O REQUESTS OR SUBSYSTEM FUNCTION REQUESTS. 
* 
* DC  CALLING ROUTINES
* 
*     DB$MTR
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$FLOP;               #GENERATE FLOW POINT.           #
# 
* DC  ENTRY CONDITIONS
* 
*     CDCS ENVIRONMENT
* 
* DC  EXIT CONDITIONS 
* 
*     DB$FTBZ=TRUE IF CDCS HAS A BUSY FET 
*            =FALSE IF CDCS HAS NO BUSY FETS
* 
* DC  NON-LOCAL VARIABLES 
* 
*     CDCS COMMON 
*     AAMARRDEF COMMON--THIS IS ON CRM AAM PL.
*     AAMFSTT COMMON--THIS IS ON CRM AAM PL.
 #
      CONTROL NOLIST;        #*CALL AAMARRDEF#
*CALL AAMARRDEF 
      CONTROL LIST; 
      CONTROL NOLIST;        #*CALL AAMFSTT#
*CALL AAMFSTT 
      CONTROL LIST; 
# 
*     LOCAL VARIABLES.
# 
      ITEM OFTX;#DUMMY VARIABLE FOR OFT SEARCH LOOP#
      ITEM UFTX;#DUMMY VARIABLE FOR UFT SEARCH LOOP#
      BASED ARRAY FET;
        BEGIN 
        ITEM FETCOMP B(0,59,1);        #TRUE IF FET IS COMPLETE#
        END 
  
  
  
  
#     B E G I N   D B $ F T B Z   E X E C U T A B L E   C O D E .      #
  
  
#     GENERATE A FLOW POINT                                            #
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP ("FTBZ"); 
      CONTROL ENDIF;
  
 #
* 
* DC  DESCRIPTION 
* 
*     SEARCH THRU ALL SAL ENTRIES.
 #
      FOR SALX=0 STEP 1 UNTIL SALL DO 
        BEGIN 
 #
*       SEARCH THRU ALL OFT ENTRIES FOR SAL ENTRY.
 #
        P<OFT> = LOC(SAOFTLSP[SALX]); 
        FOR OFTX=OFTX WHILE OFNEXT[0] NQ 0 DO 
          BEGIN 
          P<OFT> = OFNEXT[0]; 
 #
*         SEARCH THRU ALL UFT ENTRIES FOR OFT ENTRY.
 #
          P<UFT> = LOC(OFUFT[0]); 
          IF UFNEXT[0] GR 0 
          THEN
            BEGIN 
 #
*           IF ACTIVE IO CALL ON AREA THEN RETURN TRUE. 
*           (GET FSTT FOR AREA) 
*           (CHECK DATA FILE FET FOR BEING BUSY)
*           (CHECK INDEX FILE FET FOR BEING BUSY) 
 #
            IF UFFITOC[0] EQ DFFITOCOPEN THEN 
              BEGIN 
              P<FSTT$AA> = UFFITFSTT[0];
              P<FET> = FSBZFET[0];
              IF NOT FETCOMP[0] THEN
                BEGIN 
  
                CONTROL IFGR DFFLOP,0;
                  DB$FLOP ("FTBZ-3");  #GENERATE A FLOW POINT.         #
                CONTROL ENDIF;
  
                DB$FTBZ = TRUE; 
                RETURN; 
  
                END 
              IF FSMIPFSTT[0] EQ 0 THEN 
                BEGIN 
                TEST OFTX;
  
                END 
              P<FET> = FSBZFET[FSMIPFSTT[0]-P<FSTT$AA>];
              IF NOT FETCOMP[0] THEN
                BEGIN 
  
                CONTROL IFGR DFFLOP,0;
                  DB$FLOP ("FTBZ-4");  #GENERATE A FLOW POINT.         #
                CONTROL ENDIF;
  
                DB$FTBZ = TRUE; 
                RETURN; 
  
                END 
              TEST OFTX;     #ONLY TEST ONE OPENED FIT PER AREA#
              END #OPEN UFT#
            END #UFT LOOP#
          END #OFT LOOP#
        END #SAL LOOP#
 #
*     SCAN THE ACTIVE RCB'S LOOKING FOR ANY THAT IS WAITING FOR AN
*     EXTERNAL EVENT TO OCCUR.
*     IT MAKES NO DIFFERENCE IF THE EVENT IS COMPLETE OR NOT. 
*     IF NOT COMPLETE, WE COULD NOT ROLL OUT UNTIL THE COMPLETE 
*     BIT HAS BEEN SET. 
*     IF COMPLETE, WE DONT WANT TO ROLL OUT BECAUSE THIS FUNCTION 
*     SHOULD BE CONTINUED.
 #
      P<RCB> = LOC(RCBMTR); 
      P<RCB> = RCNEXT[0]; 
      FOR OFTX=OFTX WHILE P<RCB> NQ LOC(RCBMTR) 
      DO
        BEGIN 
        IF RCCT[0] EQ DFWAITXE
          OR RCCT[0] EQ DFWAITIO
        THEN                 # WAITING FOR AN EXTERNAL EVENT           #
          BEGIN 
  
          CONTROL IFGR DFFLOP,0;
            DB$FLOP ("FTBZ-5");    # GENERATE A FLOW POINT.            #
          CONTROL ENDIF;
  
          DB$FTBZ = TRUE; 
          RETURN; 
  
          END 
        P<RCB> = RCNEXT[0]; 
        END 
      DB$FTBZ = FALSE;
      RETURN; 
  
      END  #DB$FTBZ#
      TERM; 
