*DECK DB$REL
USETEXT RQPARTX 
      PROC DB$REL (FITLIST,RLORD,PAKORD,RUSLIST); 
      BEGIN 
 #
* *   DB$REL                                     PAGE  1
* *   READ RELATIONAL RANDOM OBJECT-TIME ROUTINE
* *   W P CEAGLIO                                DATE  7/25/76
* *   J J JANIK                                  DATE  11/07/78 
* * 
* DC  PURPOSE 
* 
*     FORMAT THE REQUEST PACKET FOR THE "READ RELATION RANDOM" CALL 
* 
* DC  ENTRY CONDITIONS
* 
*     STANDARD CALLING SEQUENCE WITH THE FOLLOWING PARAMETERS-- 
* 
*           FITLIST     ADDRESS OF LIST OF FITS 
*           RLORD       RELATION ORDINAL
*           PAKORD      PRIMARY/ALTERNATE KEY ORDINAL 
*           RUSLIST     POINTER TO RELATION USAGE LIST
* 
* DC  EXIT CONDITIONS 
* 
*     THE "CALLSS" SUBSYSTEM REQUEST TO CDCS IS MADE VIA "DB$RQST". 
*     IF THE REQUEST WAS SUCCESSFULLY PROCESSED, CONTROL IS RETURNED
*     TO THE RUN-UNIT. IF A FATAL ERROR OCCURRED, THE RUN-UNIT IS 
*     ABORTED.
* 
* DC  CALLING ROUTINES
* 
*     HOST-LANGUAGE 
* 
* DC  CALLED ROUTINES 
* 
*     DB$MFF     FREE MANAGED MEMORY BLOCK
*     DB$RQST    COMPLETE REQUEST PACKET AND ISSUE "CALLSS" REQUEST 
*     DB$RLCK    CHECK STATUS OF REQUEST
*     DB$RLDN    PREPROCESS RESTRICT DATA NAME VALUES 
* 
* DC  DESCRIPTION 
* 
*     THE REQUEST PACKET DEFINED BY DB$RQBF) IS PARTIALLY COMPLETED.
*     DB$RLDN IS CALLED TO PREPROCESS ANY DATA NAME VALUES SUPPLIED IN
*     THE CALL AND TO FILL IN THE APPROPRIATE ENTRIES IN THE REQUEST. 
*     THEN DB$RQST IS CALLED TO FORMAT COMMON PARAMETERS AND TO ISSUE 
*     THE "CALLSS" SUBSYSTEM FUNCTION.  UPON RETURN, THE BUFFER FOR 
*     THE DATA NAME VALUES IS RELEASED IF ALLOCATED.  DB$RLCK IS THEN 
*     CALLED TO CHECK THE STATUS OF THE REQUEST AND TO PERFORM SPECIAL
*     PROCESSING IF AN ERROR OR NULL-RECORD CONDITION WAS DETECTED. 
*     CONTROL IS THEN RETURNED TO THE HOST-LANGUAGE.
* 
 #
      CONTROL NOLIST;         #CDGDFDCLS# 
  
      CONTROL LIST; 
  
  
# PARAMETERS FROM "READ RELATION RANDOM" CALLING SEQUENCE              #
  
      ARRAY FITLIST;                    # ADDRESS OF FIT LIST          #
        ITEM FITADR U(0,42,18); 
      ITEM RLORD;            # ADDRESS OF RELATION ORDINAL             #
      ITEM PAKORD;           # ADDRESS OF PRIMARY/ALTERNATE KEY ORDINAL#
      ITEM RUSLIST;          # ADDRESS OF RELATION USAGE LIST          #
  
# LOCAL ITEMS AND ARRAYS                                               #
  
      BASED ARRAY FIT;;                 # FOR PASSING FIT AS PARAMETER #
  
      CONTROL NOLIST;         #RQPARDCLS# 
# EXTERNAL REFERENCES                                                  #
  
      XREF
        BEGIN 
  
        END 
      CONTROL LIST; 
  
      XREF PROC DB$MFF;                 # FREE MANAGED MEMORY BLOCK    #
      XREF PROC DB$RLCK;                # CHECK STATUS OF REQUEST      #
      XREF PROC DB$RLDN;                # PREPROCESS RESTRICT VALUES   #
      XREF PROC DB$RQST;
      XREF PROC DB$RA0;                 # TERMINATE PARAMETER LIST     #
      CONTROL EJECT;
  
# S T A R T  O F  D B $ R E L  E X E C U T A B L E  C O D E            #
  
#     FILL IN ENTRIES IN REQUEST PACKET                                #
  
      RQPFITLS [0] = LOC(FITLIST);
      RQPRLPAK [0] = PAKORD;
  
#     COLLECT ALL RESTRICT DATA NAME VALUES INTO SINGLE BUFFER         #
  
      DB$RLDN (RLORD,RUSLIST);
  
#     COMPLETE REQUEST PACKET AND ISSUE "CALLSS" REQUEST               #
  
      P<FIT> = FITADR [0];              # POINT TO ROOT FILE FIT       #
      DB$RQST (DFREL,DFWCRELR,FIT); 
  
#     RELEASE BUFFER FOR DATA NAME VALUES IF ONE WAS ALLOCATED         #
  
      IF RQPDNPTR [0] NQ 0  THEN
        DB$MFF (RQPDNPTR[0]); 
#     CHECK STATUS OF REQUEST                                          #
  
      DB$RLCK (FITLIST);
  
      END 
      TERM
