*DECK DB$RLSF 
USETEXT CDCSCTX 
      PROC DB$RLSF; 
      BEGIN 
 #
* *   DB$RLSF -- DATA FILE RELEASE PROCESSOR     PAGE  1
* *   W P CEAGLIO                                DATE  03/01/79 
* * 
* 
* DC  PURPOSE 
* 
*     RELEASE (RETURN) DATA AND INDEX FILES FOR AN AREA 
* 
* DC  ENTRY CONDITIONS
* 
*     ASSUMPTIONS 
* 
*     P<OFT> POINTS TO OFT FOR AREA TO BE RETURNED
* 
* DC  EXIT CONDITIONS 
* 
*     DATA AND INDEX FILES ARE RETURNED TO PFM.  THE OFT ENTRY IS 
*     DELINKED FROM THE OFT CHAIN UNLESS THE AREA IS IN "DOWN" STATUS 
* 
* DC  CALLING ROUTINES
* 
*     DB$LTSB      SUBSCHEMA RETAIN/RETURN PROCESSOR
*     DB$LTSC      SCHEMA RETAIN/RETURN PROCESSOR 
*     DB$OFTR      PROCESS AN OFT WITH NO USERS 
* 
* DC  CALLED ROUTINES 
* 
# 
      XREF PROC DB$LNKD;           # DELINK CMM BLOCK                  #
      XREF PROC DB$RTN;            # RETURN DATA/INDEX FILE            #
# 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     P<OFT>       POINTER TO OFT ENTRY (CDCSCOMMN) 
* 
# 
      XREF ITEM DB$DNAA I;         # NUMBER OF ACTIVE AREAS            #
# 
* 
* 
* DC  DESCRIPTION 
* 
* 
*     IF NOT A DUMMY OFT ENTRY, DECREMENT THE ACTIVE AREA COUNT AND 
*     RELEASE THE DATA AND INDEX FILES.  RELEASE THE OFT ENTRY UNLESS 
*     THE AREA IS IN*DOWN* STATUS.
* 
 #
      CONTROL EJECT;
  
  
#     S T A R T  O F  D B $ R L S F  E X E C U T A B L E  C O D E      #
  
      IF NOT OFDUMY 
      THEN
        BEGIN 
        DB$DNAA = DB$DNAA - 1;     # DECREMENT ACTIVE AREA COUNT       #
        DB$RTN(OFFITLFN[0]);       # RELEASE DATA FILE                 #
        IF OFFITXN[0] NQ 0         # RELEASE INDEX FILE IF PRESENT     #
        THEN
          BEGIN 
          DB$RTN(OFFITXN[0]); 
          END 
        END 
  
      IF OFSTATUS [0] EQ S"UP"     # DELINK OFT UNLESS AREA "DOWN"     #
        AND OFRETCT [0] EQ 0
      THEN
        BEGIN 
        DB$LNKD(P<OFT>);
        END 
      ELSE
        BEGIN 
        OFDUMY [0] = TRUE;
        OFCOMP [0] = FALSE; 
        END 
  
      END 
      TERM
