*DECK DB$GOFT 
USETEXT CDCSCTX 
      PROC DB$GOFT(ARID,PVENAM,FOUND);
      BEGIN 
 #
* *   DB$GOFT -- LOCATE OFT IN SCHEMA OFT CHAIN  PAGE  1
* *   W.P CEAGLIO                                DATE  05/01/79 
* *   A W ALLEN - DATABASE VERSIONS              DATE  11/10/80 
* 
* DC  PURPOSE 
* 
*     SEARCH THE SCHEMA OFT CHAIN FOR A GIVEN AREA ID AND PRIMARY 
*     VERSION NAME. 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     SALX IS SET FOR CURRENT SCHEMA
# 
      ITEM ARID    I;              # AREA ID TO BE SEARCHED            #
      ITEM FOUND   B;              # SEARCH RESULT, TRUE IF FOUND      #
      ITEM PVENAM  C(07);          # PRIMARY VERSION NAME              #
# 
* DC  EXIT CONDITIONS 
* 
*     FOUND -- SET *TRUE* IF SEARCH SUCCESSFUL, ELSE SET *FALSE*
* 
*     P<OFT>  POINTS TO MATCHING ENTRY IF SEARCH SUCCESSFUL 
* 
* DC  CALLING ROUTINES
* 
*     DB$ACAI      ATTACH AREA AND INDEX FILES FOR SYSTEM RECOVERY
*     DB$ADAX      ATTACH DATABASE AND INDEX FILES
*     DB$LTSB      SUBSCHEMA RETAIN/RETURN PROCESSOR
*     SETMSG9      INSERT NAME AND ID IN MESSAGE 9 (IN DB$DSCS) 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$FLOP;           # GENERATE FLOW POINT               #
# 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     P<OFT>
* 
* DC  DESCRIPTION 
* 
*     THE OFT CHAIN POINTER IS PICKED FROM THE SAL ENTRY. THE CHAIN IS
*     SEARCHED UNTIL A MATCHING AREA ID AND VERSION NAME ARE FOUND, OR
*     UNTIL THE CHAIN IS EXHAUSTED.  IF THE SEARCH IS SUCCESSFUL, FOUND 
*     IS SET TRUE, OTHERWISE IT IS SET FALSE. 
* 
 #
  
      ITEM K       I;              # SCRATCH -- FOR LOOPS              #
      CONTROL EJECT;
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP ("GOFT");          # GENERATE A FLOW POINT             #
      CONTROL ENDIF;
  
      FOUND = FALSE;
      P<OFT> = LOC(SAOFTLSP[SALX]); 
      FOR K=K WHILE OFNEXT [0] NQ 0 
        AND NOT FOUND 
      DO
        BEGIN 
        P<OFT> = OFNEXT [0];
        IF OFARID [0] EQ ARID 
          AND OFVENAME[0] EQ PVENAM 
        THEN
          BEGIN 
  
          CONTROL IFGR DFFLOP,0;
            DB$FLOP ("GOFT-1");    # GENERATE A FLOW POINT             #
          CONTROL ENDIF;
  
          FOUND = TRUE; 
          RETURN; 
          END 
        END 
      RETURN; 
      END 
      TERM
