*DECK DMLRST
  PROC DMLRST  (FITLIST,RELORD,KEYORD,RECORDORD,
                RELCODE,KL,KT,RKW,RKP,MKL,KEYNAME,REALMORD,ERRRTRN);
  BEGIN 
 #
* *   DMLRST - START RELATION INTERFACE ROUTINE 
*     DAVID T. CLARK                                 11/20/79 
* 
* DC  PURPOSE 
* 
*     ISSUE A START RELATION REQUEST TO CDCS AND
*     CHECK FOR AN ERROR CONDITION UPON RETURNING FROM CDCS.
*     ON ERROR, CAUSES A BRANCH TO AN ALTERNATE RETURN IN THE 
*     APPLICATION PROGRAM IF SPECIFIED, ELSE, RETURNS NORMALLY. 
*     RETURN THE FIT STATUS FIELD TO THE APPLICATION PROGRAM
* 
* DC  ENTRY CONDITIONS
* 
* DC  PARAMETERS
* 
*     FITLIST  --  FITLIST FOR RELATION TO BE POSITIONED
* 
*     RELORD  --  RELATION ORDINAL
* 
*     KEYORD  --  ORDINAL OF KEY SPECIFIED IN START STATEMENT 
* 
*     RECORDORD --  RECORD ORDINAL OF ROOT FILE 
* 
*     RELCODE --  RELATIONAL OPERATOR CODE
*                 1 FOR EQ, 3 FOR GE, 6 FOR GT
* 
*     KL    --  KEY LENGTH
* 
*     KT    --  KEY TYPE
* 
*     RKW   --  RKW FIELD IN FIT
* 
*     RKP   --  RKP FIELD IN FIT
* 
*     MKL   -- MKL FIELD IN FIT 
* 
*     KEYNAME  --  KEY NAMED IN START STATEMENT 
* 
*     REALMORD  --  ORDINAL OF ROOT REALM 
* 
*     ERRRTRN  --  (OPTIONAL) ALTERNATE RETURN ON ERROR (FTN 5 ONLY)
*                  WARNING:  DO NOT REFERENCE - MAY NOT BE PRESENT
* 
* DC  ASSUMPTIONS 
* 
*     COMMON BLOCK DB0000 HAS BEEN GENERATED AND INITIALIZED
*     FIT SAVE AREAS ARE INITIALIZED
* 
* 
* DC  EXIT CONDITIONS 
* 
*     CONTROL IS RETURED AFTER THE START CALL, WITH 
*     THE STATUS FIELDS TRANSFERRED FROM THE FITLIST TO THE USER STATUS 
*     VARIABLES.  THE RETURN POINT CAN BE ALTERED GIVEN AN *ON ERROR* 
*     LABEL AND THE DETECTION OF AN ERROR (FTN 5 ONLY). 
* 
* DC  CALLING ROUTINES
* 
*     DMLRST IS CALLED FROM THE APPLICATION PROGRAM 
*     AS A RESULT OF A DML START RELATION STATEMENT.
* 
* DC  CALLED ROUTINES 
* 
*     DB$RSR  --  CDCS START RELATION INTERFACE ROUTINE 
*     DMLRTRN  --  RETURN ROUTINE--SETS REGISTER TO RETURN PARAMETER
* 
* DC  NON-LOCAL VARIABLES 
* 
*     VARIABLES IN DB0000 WHICH ARE MODIFIED ARE: 
*     DBSTAT, DBSXXXX, DBREALM
*     FIT FIELDS ARE RESTORED FROM THE FIT SAVE AREA. 
* 
* DC  DESCRIPTION 
* 
*     A CALL TO DMLRST IS GENERATED BY THE PREPASS AS 
*     A RESULT OF A DML START RELATION STATEMENT. DMLRST
*     ISSUES THE START RELATION REQUEST TO CDCS,
*     RETURNS THE FIT STATUS RIELDS TO THE APPLICATION
*     PROGRAM, AND RETURNS CONTROL TO THE APPLICATION PROGRAM.
*     WITH FORTRAN 5, AN ALTERNATE RETURN CAN BE SPECIFIED.  IF AN
*     ERROR IS DETECTED, CONTROL IS PASSED TO THE SPECIFIED LABEL 
*     IN THE APPLICATION PROGRAM. 
* 
 #
      CONTROL EJECT;
      CONTROL DISJOINT; 
      CONTROL INERT;
  
                                 #----------------DEFS-----------------#
  
      DEF BLANK     #" "#;       # BLANK                               #
      DEF FITSIZE   #35#;        # SIZE OF FIT IN WORDS                #
  
  
# THE FOLLOWING ARE PARAMETERS FROM THE "START" CALLING SEQUENCE       #
  
      ARRAY FITLIST;             # FIT LIST FOR THIS RELATION          #
        BEGIN 
          ITEM FITLES  U(0,0,9); # ERROR STATUS RETURNED BY CDCS       #
          ITEM FITADR  U(0,42,18); # FIT ADDRESS                       #
        END 
  
      ITEM RELORD;               # RELATION ORDINAL                    #
      ITEM KEYORD;               # KEY ORDINAL                         #
      ITEM RECORDORD;            # RECORD ORDINAL                      #
      ITEM RELCODE;              # RELATIONAL OPERATOR CODE            #
                                 # 1 FOR EQ, 3 FOR GE, 6 FOR GT        #
      ITEM KL;                   # KEY LENGTH FIELD IN FIT             #
      ITEM KT;                   # KEY TYPE FIELD IN FIT               #
      ITEM RKW;                  # RKW FIELD IN FIT                    #
      ITEM RKP;                  # RKP FIELD IN FIT                    #
      ITEM MKL  I;               # MKL FIELD IN FIT                    #
      ITEM KEYNAME C(7);         # KEY NAMED IN START STATEMENT        #
      ITEM REALMORD;             # ORDINAL OF ROOT REALM               #
      ITEM ERRRTRN;              # ERROR RETURN PARAMETER              #
                                 # WARNING: DO NOT REFERENCE           #
  
# THE FOLLOWING DESCRIBES THE COMMON BLOCK CREATED IN THE FORTRAN      #
#     PROGRAM                                                          #
  
      COMMON DB0000;
*CALL DB0DCLS 
      BASED ARRAY FIT;
*CALL FITDCLS 
  
# PARAMETER TO PASS TO CDCS                                            #
  
      ARRAY PARM3[0] S(1);
        BEGIN 
          ITEM P3WORD U(0,0,60); # ENTIRE PARAMETER                    #
          ITEM RORD U(0,36,12);  # RECORD ORDINAL                      #
          ITEM KORD U(0,48,12);  # KEY ORDINAL                         #
        END 
  
      XREF
        BEGIN 
          PROC DB$RSR;           # START RELATION INTERFACE            #
          PROC DMLRTRN;          # SET RETURN REGISTER ROUTINE         #
        END 
  
                                 #-------------LOCAL ITEMS-------------#
  
      ITEM I;                    # SCRATCH ITEM                        #
      ITEM RTNPARM;              # RETURN PARAM - DMLRTRN              #
  
      CONTROL EJECT;
  
# SET UP POINTER TO REALM BLOCK AND SAVE AREA                          #
  
      P<REALMBLOCK> = FITADR[0] - 4;
      P<DBTXXXX> = FITADR[0] + FITSIZE; 
  
# SET UP PARAMETER 3 FOR CDCS                                          #
  
      P3WORD[0] = 0;             # ZERO FILL                           #
      RORD[0] = RECORDORD;
      KORD[0] = KEYORD; 
  
# FILL IN FIT FIELDS FROM PARMS INTO ROOT FIT                          #
  
      P<FIT> = FITADR[0];        # POINT TO ROOT FIT                   #
      FITREL[0] = RELCODE;       # RELATIONAL OPERATOR CODE            #
      FITKL[0] = KL;
      FITKT[0] = KT;
      FITRKW[0] = RKW;
      FITRKP[0] = RKP;
      FITKA[0] = LOC(KEYNAME);
      FITKP[0] = RKP; 
      FITMKL[0] = MKL;
  
# PERFORM A START RELATION                                             #
  
      DB$RSR(FITLIST,RELORD,PARM3); 
  
# RETURN STATUS OF IO REQUEST                                          #
  
      DBSTAT = FITES[0];
      DBSXXXX = FITES[0]; 
      DBREALM = DBRXXXX;
  
# CHECK ERROR STATUS ON CDCS CALL                                      #
  
      IF DBSTAT NQ 0             # IF CDCS/CRM ERROR OCCURRED          #
      THEN
        RTNPARM = 1;             # SET THE RETURN PARAMETER TO 1       #
      ELSE                       #                 ELSE                #
        RTNPARM = 0;             # SET THE RETURN PARAMETER TO 0       #
  
# SET THE RETURN REGISTER                                              #
  
      DMLRTRN(RTNPARM); 
  
# RETURN TO THE APPLICATION PROGRAM                                    #
  
      RETURN; 
      END 
TERM
