*DECK DMLSTR
      PROC DMLSTR (FIT,REALMORD,KEYORD,RECORDORD,RELCODE, 
                   KL,KT,RKW,RKP,MKL,KEYNAME,ERRRTRN);
      BEGIN 
 #
* *   DMLSTR - START INTERFACE ROUTINE
*     DAVID T. CLARK                                 11/20/79 
* 
* DC  PURPOSE 
* 
*     ISSUE A START 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
* 
*     FIT  --    APPLICATION PROGRAM FIT FOR REALM TO BE POSITIONED 
* 
*     REALMORD  -- ORDINAL OF THE REALM TO BE POSITIONED
* 
*     KEYORD --  KEY ORDINAL OF THE USER-SPECIFIED KEY
* 
*     RECORDORD  --  RECORD ORDINAL 
* 
*     RELCODE  --  CRM CODE FOR RELATIONAL OPERATOR 
*                  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 
* 
*     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
* 
* 
* DC  EXIT CONDITIONS 
* 
*     UPON RETURN FROM CDCS, THE FIT ES FIELD IS STORED 
*     IN DBSTAT AND IN DBSXXXX AND DBREALM IS SET TO THE
*     NAME OF THE REALM IN THE DML STATEMENT. 
*     CONTROL IS RETURNED TO THE APPLICATION PROGRAM. 
*     THE RETURN POINT CAN BE ALTERED GIVEN AN *ON ERROR* 
*     LABEL AND THE DETECTION OF AN ERROR (FTN 5 ONLY). 
* 
* DC  CALLING ROUTINES
* 
*     DMLSTR IS CALLED FROM THE APPLICATION PROGRAM 
*     AS A RESULT OF A DML START STATEMENT. 
* 
* DC  CALLED ROUTINES 
* 
*     DB$STR  --     CDCS START INTERFACE ROUTINE 
*     DMLRTRN --     RETURN ROUTINE--SETS REGISTER TO RETURN PARAMETER
* 
* DC  NON-LOCAL VARIABLES 
* 
*     VARIABLES IN DB0000 WHICH ARE MODIFIED ARE: 
*     DBSTAT, DBSXXXX, DBREALM
*     RELEVANT FIT FIELDS ARE RESTORED TO THEIR SAVE AREA VALUES
*     OR SET TO VALUES PASSED AS PARAMETERS.
* 
* DC  DESCRIPTION 
* 
*     A CALL TO DMLSTR IS GENERATED BY THE PREPASS AS 
*     A RESULT OF A DML START STATEMENT.
*     THE RECORD ORDINAL AND KEY ORDINAL ARE PACKED INTO A
*     ONE WORD PARAMETER FOR CDCS.  THE FIT FIELDS PASSED AS PARAMETERS 
*     ARE STORED IN THE FIT AND OTHER RELEVANT FIT FIELDS ARE RESTORED
*     TO THEIR SAVE AREA VALUES. 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 FITSIZE     #35#;             # SIZE OF FIT IN WORDS         #
  
# THE FOLLOWING ARE PARAMETERS FROM THE CALLING SEQUENCE               #
  
      ARRAY FIT;                        # FIT FOR THE REALM            #
*CALL FITDCLS 
  
      ITEM REALMORD;             # REALM ORDINAL                       #
      ITEM KEYORD;               # KEY ORDINAL                         #
      ITEM RECORDORD;            # RECORD ORDINAL                      #
      ITEM RELCODE;              # CODE FOR RELATIONAL OPERATOR        #
                                 # 1 FOR EQ, 3 FOR GE, 6 FOR GT        #
      ITEM KL;                   # KEY LENGTH                          #
      ITEM KT;                   # KEY TYPE                            #
      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 STMT             #
      ITEM ERRRTRN;              # ERROR RETURN PARAMETER              #
                                 # WARNING: DO NOT REFERENCE           #
  
                                 # PARM 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 
  
# THE FOLLOWING DESCRIBES THE COMMON BLOCK CREATED IN THE FORTRAN      #
# PROGRAM                                                              #
  
      COMMON DB0000;
*CALL DB0DCLS 
                                 #-----------------XREFS---------------#
      XREF
        BEGIN 
          PROC DB$STR;           # START INTERFACE ROUTINE             #
          PROC DMLRTRN;          # SET RETURN REGISTER ROUTINE         #
        END 
  
                                 #------------LOCAL ITEMS--------------#
  
      ITEM RTNPARM;              # RETURN PARAMETER - DMLRTRN          #
  
      CONTROL EJECT;
  
# SET UP POINTER TO REALM BLOCK AND SAVE AREA                          #
  
      P<REALMBLOCK> = LOC(FIT) - 4; 
      P<DBTXXXX> = LOC(FIT) + FITSIZE;
  
# SET UP PARAMETER 3 FOR CDCS                                          #
  
      P3WORD[0] = 0;             # ZERO FILL                           #
      RORD[0] = RECORDORD;
      KORD[0] = KEYORD; 
  
# FILL IN FIT FIELDS FROM PARAMTERS                                    #
  
      FITREL[0] = RELCODE;       # RELATIONAL OPERATOR CODE            #
      FITKL[0] = KL;
      FITKT[0] = KT;
      FITRKW[0] = RKW;
      FITRKP[0] = RKP;
      FITKP[0] = RKP; 
      FITMKL[0] = MKL;
      FITKA[0] = LOC(KEYNAME);
  
# FILL IN FIT FIELDS FROM INVOKE SAVE AREA - RL, WSA, MRL              #
  
      FITWSA[0] = DBWSA[0]; 
      FITMRL[0] = DBMRL[0]; 
      FITRL[0] = DBMRL[0];
  
# PERFORM REALM START                                                  #
  
          DB$STR(FIT,            # FIT PASSED FROM FORTRAN PROGRAM     #
                 REALMORD,       # REALM ORDINAL                       #
                 PARM3);         # RECORD ORDINAL AND KEY ORDINAL      #
  
# RETURN STATUS OF IO REQUEST                                          #
  
  
      DBSTAT = FITES[0];
      DBSXXXX = FITES[0]; 
      DBREALM = DBRXXXX;
  
# CHECK ERROR STATUS ON CDCS CALL                                      #
  
      IF (FITES[0] 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
