*DECK     DB$DSUA 
USETEXT CDCSCTX;
      PROC DB$DSUA(ADDROFT,AREAUSED); 
      BEGIN 
 #
* *   DB$DSUA - RUN UNIT USING AN AREA           PAGE  1
* *   LG WHITE                                   DATE  11/05/79 
* 
* DC  PURPOSE 
* 
*     DETERMINE IF TQT USES A GIVEN AREA
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     SALX POINTS TO SCHEMA 
*     TQT POINTER IS SET TO RUN UNIT
* 
*     PARAMETERS
# 
      ITEM ADDROFT   I;            # INPUT PARAMETER - OFT ADDESS      #
      ITEM AREAUSED  B;            # OUTPUT PARAM - TRUE IF AREA OPEN  #
# 
* DC  EXIT CONDITIONS 
* 
*     OUTPUT PARAMETER AREAUSED IS SET TO TRUE IF TQT HAS AREA OPEN,
*     FALSE OTHERWISE.
* 
* DC  CALLING ROUTINES
* 
*     DB$DS27 - LIST STATUS LINES 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$FLOP;           # GENERATE FLOW POINT               #
      XREF PROC DB$SWPI;           # SWAP IN TABLES FOR TQT            #
# 
*     NON-LOCAL VARIABLES MODIFIED
* 
*     P<ASL>                       ASL POINTER FOR CURRENT
*                                  SUBSCHEMA
*     P<CSFIXED>                   POINTER TO FIXED CST FOR 
*                                  CURRENT SUBSCHEMA
*     P<RSARBLK>                   POINTER TO RSB AREA CONTROL BLOCK
*     P<RSB>                       RSB AREA CONTROL BLOCK POINTER FOR CURRENT US
* 
* DC  DESCRIPTION 
* 
*     IF USER*S TABLES ARE SWAPPED OUT, SWAP TABLES IN.  SET RSB, ASL 
*     AND CST POINTERS.  SET POINTER TO AREA CONTROL BLOCK.  LOOP 
*     THROUGH THE AREA WORK BLOCK UNTIL ADDROFT IS EQ TO THE RSAROFIT.
*     IF THE RSARBLK POINTER TO THE UFT IS NON-ZERO, SET AREAUSED TO
*     TRUE AND RETURN.
 #
  
#     LOCAL VARIABLES                                                  #
  
      ITEM INDEX  I;               # INDUCTION VARIABLE                #
      ITEM OLDASL I;               # OLD ASL POINTER                   #
      ITEM OLDCSF I;               # OLD FIXED-CST POINTER             #
      ITEM OLDRSA I;               # OLD AREA CONTROL BLOCK POINTER    #
      ITEM OLDRSB I;               # OLD RSB POINTER                   #
  
  
  
  
#     B E G I N   E X E C U T A B L E   C O D E   D B $ D S U A        #
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("DSUA");
      CONTROL ENDIF;
  
      AREAUSED = FALSE; 
      IF TQSWPF[0] THEN            # IF TABLES SWAPPED OUT             #
        DB$SWPI;                   # SWAP THEM IN                      #
  
      OLDRSB = P<RSB>;             # SAVE RSB POINTER                  #
      P<RSB> = TQRSB[0];           # SET PTRS TO TABLES NEEDED TO READ #
                                   # AREA CONTROL BLOCK                #
      IF P<RSB> EQ 0
      THEN                         # RSB NOT ALLOCATED YET             #
        BEGIN 
        P<RSB> = OLDRSB;
        RETURN; 
  
        END 
  
      OLDASL = P<ASL>;             # SAVE ASL POINTER                  #
      OLDCSF = P<CSFIXED>;         # SAVE FIXED-CST POINTER            #
      OLDRSA = P<RSARBLK>;         # SAVE AREA CONTROL BLOCK POINTER   #
      P<ASL> = TQASL[0];           # SET ACTIVE SUBSCHEMA LIST POINTER #
      P<CSFIXED> = ASCSTLOC[0]; 
  
      FOR INDEX = 1 STEP 1 WHILE
                    ((NOT AREAUSED) AND (INDEX LQ CSFARENO[0])) DO
        BEGIN 
        P<RSARBLK> = LOC(RSB) + DFRSBFIX + (INDEX-1) * DFARECON;
        IF RSAROFIT[0] EQ ADDROFT  # IF SUBSCH POINTS TO THE OFT       #
        THEN
          BEGIN 
          IF RSARFPT[0] NQ 0 THEN  # SEE IF HAS AREA OPEN              #
            AREAUSED = TRUE;
          END 
        END 
  
      P<RSB> = OLDRSB;             # RESET RSB POINTER                 #
      P<ASL> = OLDASL;             # RESET ASL POINTER                 #
      P<CSFIXED> = OLDCSF;         # RESET FIXED-CST POINTER           #
      P<RSARBLK> = OLDRSA;         # RESET AREA CONTROL BLOCK POINTER  #
      RETURN; 
      END 
      TERM; 
