*DECK DMLINVV 
      PROC DMLINVV(NUMREALMS,FIRSTFIT,SSNAME1,SSNAME2,
                   SSNAME3,CHECKSUM,VERSNAM); 
        BEGIN 
 #
* *   DMLINVV - INVOKE(VERSION) INTERFACE        PAGE  1
* *             ROUTINE 
* *   H.S.WOO                                    DATE  08/06/80 
* 
* DC  PURPOSE 
* 
*     ISSUE AN ALTERNATE INVOKE OR SUBINVOKE
*     REQUEST TO CDCS, PASSING THE VERSION IDENTIFIER.
* 
* DC  ENTRY CONDITIONS
* 
  C   PARAMETERS
* 
*     NUMREALMS  --  NUMBER OF REALMS IN SUBSCHEMA
* 
*     FIRSTFIT  --  ADDRESS OF FIT FOR REALM 1
* 
*     SSNAME1  --  FIRST 10 CHARACTERS OF SUBSCHEMA NAME
* 
*     SSNAME2  --  SECOND 10 CHARACTERS OF SUBSCHEMA NAME 
* 
*     SSNAME3  --  THIRD 10 CHARACTERS OF SUBSCHEMA NAME
* 
*     CHECKSUM -- A NUMERAL GENERATED BY DML TO BE USED BY CDCS.
* 
*     VERSNAM -- VERSION NAME TO BE INVOKED.
* 
* DC  ASSUMPTIONS 
* 
*     COMMON BLOCK DB0000 HAS BEEN CREATED
*     IN THE APPLICATION PROGRAM. 
* 
* DC  EXIT CONDITIONS 
* 
*     WHEN CONTROL RETURNS FROM CDCS, A FLAG INVER IS 
*     SET TO TRUE TO INDICATE THAT A VERSION NAME IS
*     CURRENTLY BEING INVOKED.  IT WILL BE TURNED OFF 
*     WHEN TERMINATE IS ENCOUNTERED.
*     ON ERROR IN INVOKE CALL, CDCS WILL ABORT THE JOB. 
* 
* DC  CALLING ROUTINES
* 
*     DMLINVV IS CALLED FROM THE APPLICATION PROGRAM
*     AS AN ALTERNATE INVOKE CALL AS A RESULT OF
*     A DML INVOKE(VERSION) STATEMENT.
* 
* DC  CALLED ROUTINES 
* 
*     DB$INVV  --  CDCS ALTERNATE INVOKE OBJECT-TIME
*                  ROUTINE
* 
*     DB$INVX  --  CDCS ATERNATE SUBINVOKE OBJECT-TIME
*                  ROUTINE(WITH VERSION PARAMETER)
* 
*     DMLINV  --  DML OBJECT TIME ROUTINE 
* 
* DC  NON-LOCAL VARIABLES MODIFIED
* 
*     FLAG INVER IS SET TO INDICATE THAT
*     INVOKE HAS BEEN PERFORMED.
* 
* DC  DESCRIPTION 
* 
*     A CALL TO DMLINVV IS GENERATED AS A RESULT
*     OF AN ALTERNATE INVOKE(VERSION) OR SUBINVOKE
*     CALL. 
*     IF INVER FLAG IS TRUE, THEN DB$INVX WILL BE CALLED. 
*     IF INVER FLAG IS FALSE(FIRST INVOKE CALL), DB$INVV
*     WILL BE CALLED. 
*     IN ALL THE CASES, DMLINV WILL BE CALLED TO PROCESS
*     FEATURES COMMON TO THE CURRENT INVOKE COMMAND AND 
*     THE NEW COMMAND WITH VERSION PARAMETER. 
*     ON ERROR, CDCS WILL ABORT THE JOB.
* 
 #
        CONTROL EJECT;
#**********************************************************************#
#                                                                      #
#     F O R M A L    P A R A M E T E R    D E C L A R A T I O N S      #
#                                                                      #
        ITEM NUMREALMS  I;         # NUMBER OF REALMS IN SS            #
        ITEM FIRSTFIT   I;         # FIT FOR REALM 1                   #
        ITEM SSNAME1    C(10);     # SSNAME - 1ST 10 CHARS             #
        ITEM SSNAME2    C(10);     # SSNAME - 2ND 10 CHARS             #
        ITEM SSNAME3    C(10);     # SSNAME - 3RD 10 CHARS             #
        ITEM CHECKSUM   U;         # SUBSCHEMA CHECKSUM                #
        ITEM VERSNAM    C(7);      # VERSION NAME                      #
#                                                                      #
#     X R E F/X D E F    D E C L A R A T I O N S                       #
#                                                                      #
        XDEF ITEM INVER  B=FALSE;  # BOOLEAN TO INDICATE SUBINVOKE     #
                                   # SET TO FALSE FOR 1ST INVOKE       #
        XDEF ITEM VERCALL  B = FALSE;  # BOOLEAN - TRUE IF DMLINVV IS  #
                                       # CALLING DMLINV.               #
        XREF PROC DMLINV;          # OLD INVOKE INTERFACE ROUTINE      #
        XREF PROC DB$INVX;         # CDCS SUBINVOKE(VERSION) INTERFACE #
                                   # ROUTINE                           #
        XREF ITEM INVFLAG B;       # SUBINVOKE FLAG                    #
        XREF ITEM SSNAME30 C(30);  # HOLDS SUBSCHEMA NAME              #
        XREF PROC DB$INVV;         # CDCS INVOKE(VERSION) INTERFACE    #
                                   # ROUTINE                           #
#     C O M M O N    B L O C K    D E C L A R A T I O N S              #
#     F O R    F O R T R A N                                           #
#                                                                      #
  
        COMMON DB0000;
*CALL DB0DCLS 
  
#**********************************************************************#
        CONTROL EJECT;
        CONTROL DISJOINT; 
  
#                                                                      #
#     E X E C U T A B L E    C O D E    B E G I N S    H E R E         #
#                                                                      #
        VERCALL = TRUE;            # SET VERCALL FLAG                  #
                                                    # CALL DMLINV TO   #
        DMLINV(NUMREALMS,FIRSTFIT,SSNAME1,SSNAME2,  # PROCESS FEATURES #
               SSNAME3,CHECKSUM);                  # COMMON TO BOTH    #
                                                   # ROUTINES          #
      IF (INVER 
        OR INVFLAG)                #  SUBINVOKE                        #
      THEN
        BEGIN 
       DB$INVX(SSNAME30,DBSCNAM,DBRUID,CHECKSUM,   # CALL CDCS SUB     #
                VERSNAM);                           # INVOKE(VERSION)  #
        RETURN;                                     # ROUTINE          #
      END 
      ELSE                         # IST INVOKE                        #
        BEGIN 
        DB$INVV(SSNAME30,DBSCNAM,DBRUID,CHECKSUM,   # IF IST INVOKE    #
                VERSNAM);                           # CALL CDCS INVOKE #
        END                                         # (VERSION)ROUTINE #
  
# IF THERE IS ERROR IN INVOKE CALL, CDCS WILL ABORT THE JOB            #
  
        VERCALL = FALSE;           # RESET VERCALL FLAG                #
        INVER = TRUE; 
        RETURN; 
        END 
        TERM
