*DECK     DB$FSIO 
USETEXT CDCSCTX 
      PROC DB$FSIO; 
      BEGIN 
 #
* *   DB$FSIO -- FIT SET FOR INTERNAL OPERATION  PAGE  1
* *   R L MCALLESTER                             DATE  07/29/86 
* 
* DC  PURPOSE 
* 
*     WHEN A DELETE, REWRITE OR WRITE IS BEING PERFORMED WITH 
*     MAPPING, LOGGING OR CONSTRAINTS - A READ OF THE SCHEMA RECORD 
*     MUST BE DONE BEFORE THE UPDATE FUNCTION.
* 
*     A FIT IS SELECTED THAT WILL CAUSE THE LEAST INTERFERENCE WITH 
*     ANY OTHER EXISTING FUNCTIONS AND THAT FIT IS SET FOR THE READ.
* 
* DC  ENTRY CONDITIONS
* 
*     P<TQT> IS SET.               TASK QUEUE TABLE.
*     P<OFT> IS SET.               OPEN FILE TABLE. 
* 
* DC  EXIT CONDITIONS 
* 
*     NORMAL EXIT 
*       UFT HAS BEEN SELECTED AND IS SET UP FOR A RANDOM GET. 
*       P<UFT> IS SET.
*       ENTRY CONDITIONS ARE UNCHANGED. 
* 
* DC  CALLING ROUTINES
* 
*     DB$CPRO    CONSTRAINT PROCESSOR 
*     DB$DEL$    DELETE CONTROL SYMBIONT
*     DB$REW$    REWRITE CONTROL SYMBIONT 
*     DB$WR2J    BEFORE IMAGE JOURNAL LOGGING FOR WRITE 
*     DB$WR2K    WRITE AN AK RECORD WITH ZERO KEY VALUE 
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$FLOP;           # IDENTIFY FLOW POINT               #
      XREF PROC DB$PUNT;           # INTERNAL ERROR PROCESSOR          #
# 
* DC  DESCRIPTION 
* 
*     SELECT A FIT TO USE FOR INTERNAL RANDOM I-O.
*     THE ONE THAT IS SELECTED IS THE ONE IN THE OFT. 
*     MARK THE FIT FOR RANDOM USE.
*     SET UP VARIABLE IFT FIELDS FOR THIS I/O OPERATION.
*     RETURN. 
* 
 #
  
  
  
  
#     E X E C U T A B L E   C O D E   F O R   D B $ F S I O            #
  
  
  
      CONTROL IFGR DFFLOP,0;
        DB$FLOP("FSIO");
      CONTROL ENDIF;
  
      IF    RCOFTLOC[0] NQ LOC(OFT) 
        AND RCOFTLOC[0] NQ 0
      THEN
        BEGIN 
        DB$PUNT("DB$FSIO 1"); 
        END 
  
#     THE FIT IN THE OFT IS THE ONE SELECTED.                          #
  
      P<UFT> = LOC(OFUFT);
  
#     MARK THIS UFT AS LAST USED FOR RANDOM I-O.                       #
#     IT RETAINS NO POSITION FOR GET-NEXT.                             #
  
      UFTQT[0] = 0; 
  
#     SET VARIABLE FIELDS IN THE UFT.                                  #
  
      UFFITES[0] = 0;              # CLEAR ERROR STATUS                #
      UFFITFNF[0] = FALSE;         # NO FATAL ERROR                    #
      UFFITWSA[0] = FPFITWSA[0];   # WORKING STORAGE AREA ADDRESS      #
      UFFITMKL[0] = FPFITMKL[0];   # MAJOR KEY LENGTH                  #
      UFFITKA [0] = FPFITKA [0];   # KEY ADDRESS                       #
      UFFITKEYD[0] = FPFITKEYD[0]; # RKW, RKP, KP AND KL               #
  
      RETURN; 
      END 
      TERM
