*DECK DB$DSFS 
USETEXT CDCSCTX 
      PROC DB$DSFS(FOUND);
      BEGIN 
 #
* *   DB$DSFS - FIND SCHEMA ENTRY                PAGE  1
* *   C F RICHARDS                               DATE  11/30/78 
* 
* DC  PURPOSE 
* 
*     LOCATE THE CORRECT INDEX INTO THE SAL FOR THE IDENTIFIED SCHEMA.
* 
* DC  ENTRY CONDITIONS
# 
      ITEM FOUND B;                # OUTPUT PARAM. TRUE IF SCHEMA FOUND#
# 
*     ASSUMPTIONS 
* 
*     DB$DSSI - CONTAINS A SCHEMA ID, ELSE ZERO.
*     DB$DSSN - CONTAINS A SCHEMA NAME, ELSE BLANKS.
*       (NOTE ONLY ONE OF THE TWO ITEMS WILL CONTAIN A VALUE) 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL EXIT (SCHEMA FOUND)
*       FOUND - SET TO TRUE.
*       SALX CONTAINS THE SAL INDEX FOR THIS SCHEMA.
* 
*     ABNORMAL EXIT (SCHEMA NOT FOUND)
*       FOUND - SET FALSE.
* 
* DC  CALLING ROUTINES
* 
*     DB$DS06 - DOWN AN OBJECT
*     DB$DS07 - IDLE AN OBJECT
*     DB$DS20 - UP AN OBJECT
*     DB$DS27 - LIST STATUS LINES FOR SCHEMA, ETC.
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$FLOP;           # GENERATE FLOW POINT               #
# 
* DC  DESCRIPTION 
* 
*     ASSUME THE SCHEMA WILL NOT BE FOUND.
*     SEARCH THE SAL USING WHICHEVER OF THE ID OR NAME WAS SUPPLIED.
*     IF THE SCHEMA IS FOUND, 
*       SET SALX TO THE PROPER INDEX, 
*       SET FOUND TRUE. 
*     RETURN. 
* 
* DC  NON-LOCAL VARIABLES 
* 
*     SALX - IF SCHEMA ENTRY FOUND, SALX WILL BE THE INDEX INTO THE 
*            SAL OF THAT ENTRY. 
# 
      XREF ITEM DB$DSSI I;         # SCHEMA-ID                         #
      XREF ITEM DB$DSSN C(30);     # SCHEMA-NAME                       #
 #                                                                     #
      CONTROL NOLIST;              # *CALL CDCSCOMMN FOLLOWS           #
      CONTROL LIST; 
  
  
#     LOCAL ITEMS                                                      #
  
      ITEM I I;                    # LOOP INDUCTION VARIABLE           #
  
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ D S F S            #
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("DSFS");
      CONTROL ENDIF;
  
      FOUND = FALSE;               # ASSUME SCHEMA WILL NOT BE FOUND   #
      FOR I = 0 STEP 1             # FOR EACH SAL ENTRY                #
        WHILE I LQ SALL            # WHILE MORE ENTRIES TO CHECK       #
          AND NOT FOUND            # AND HAVE NOT YET FOUND SCHEMA     #
      DO
        BEGIN 
        IF DB$DSSI EQ 0            # IF NO ID GIVEN                    #
        THEN
          BEGIN 
          IF SASCNAME[I] EQ DB$DSSN  # IF SCHEMA NAME MATCHES          #
          THEN
            BEGIN 
            SALX = I;              # SAVE CORRECT SAL INDEX            #
            FOUND = TRUE;          # SCHEMA ENTRY FOUND                #
            END 
          END 
  
        ELSE
          BEGIN 
          IF SASCHID[I] EQ DB$DSSI  # IF SCHEMA ID MATCHES             #
          THEN
            BEGIN 
            SALX = I;              # SAVE CORRECT SAL INDEX            #
            FOUND = TRUE;          # SCHEMA ENTRY FOUND                #
            END 
          END 
        END 
  
      RETURN; 
  
      END 
  
      TERM
