*DECK DB$MDTR 
USETEXT UTMPTTX 
USETEXT MDBCMTX 
  PROC DB$MDTR; 
    BEGIN 
 #
  *   DB$MDTR - TRANSFERS ENTRIES BETWEEN MDS    PAGE  1
  *   M. D. SAXE                                 DATE  04/07/76 
  
  DC  PURPOSE 
  
      TRANSFER ENTRIES FROM THE OLD MD TO THE MEW MD. 
  
  DC  ENTRY CONDITIONS
  
      THE OLD MD AND NEW MD MUST HAVE BEEN OPENED.
  
  DC  EXIT CONDITIONS 
  
      THE ENTRIES IN THE OLD MD NOW RESIDE IN THE NEW MD. 
  
  DC  CALLING ROUTINES
  
      DB$M20M - CONTROLLING ROUTINE FOR THE 2.0 OVERLAY 
  
  DC  CALLED ROUTINES 
 #
      XREF
        BEGIN 
##
        PROC DB$DIAG;        # DIAGNOSTIC PROCESSOR                    #
        PROC DB$ERMD;        # CRM ERROR EXIT FOR THE NEW MD           #
        PROC DB$EROD;        # CRM ERROR EXIT FOR THE OLD MD           #
        PROC DB$FTMD;        # FIT FOR THE NEW MD                      #
        PROC DB$FTOD;        # FIT FOR THE OLD MD                      #
        PROC DB$MDRD;        # READS THE OLD MD ENTRIES INTO CORE      #
        PROC DB$MDWD;        # WRITES THE MD IN CORE TO RMS            #
        PROC DB$UFRE;        # RELEASE VARIABLE POSITION MEMORY BLOCK  #
        PROC DB$WGET;        # READS THE OLD MD.                       #
        PROC DB$WPUT;        # WRITES TO THE NEW MD.                   #
##
        END 
 #
  
  DC  NON-LOCAL VARIABLES 
  
 #
      CONTROL NOLIST; 
      BASED ARRAY MDSCENTRY [0] S;
        BEGIN 
*CALL MDSCDDCLS 
        END 
      BASED ARRAY ARDIR [0] S;
        BEGIN 
*CALL MDARDDCLS 
        END 
      BASED ARRAY ARINFO [0] S; 
        BEGIN 
*CALL MDARIDCLS 
        END 
      BASED ARRAY DBPROC [0] S; 
        BEGIN 
*CALL MDDPDDCLS 
        END 
      BASED ARRAY CSTSSTBL [0] S; 
        BEGIN 
*CALL MDSBDDCLS 
        END 
      CONTROL LIST; 
*CALL MD20CDCLS 
  
  
  
  
#     B E G I N   D B $ M D T R   E X E C U T A B L E   C O D E .      #
  
  
 #
  DC  DESCRIPTION 
  
 #
 #
*     POINT THE SCHEMA DIRECTORY BASED ARRAY TO THE FIRST ENTRY IN THE
*     SCHEMA DIRECTORY. 
 #
      P<MDSCENTRY> = SCDRBP + 1;
 #
*     STEP THRU THE SCHEMA DIRECTORY LOOKING FOR A SCHEMA ENTRY THAT
*     HASNT BEEN COPIED FROM THE OLD MD TO THE NEW MD.
 #
      FOR SCHDIRP=0 STEP DFMDSCDESIZE WHILE SCHDIRP NQ SCHDRSZ DO 
        BEGIN 
          IF NOT MDSCWRTFLG[SCHDIRP]
            AND MDSCIDNT[SCHDIRP] NQ 0
          THEN
            BEGIN 
 #
*       AN UNWRITTEN ENTRY HAS BEEN FOUND 
*         CALL THE ROUTINE THAT READS THE MD ENTRIES FROM THE OLD MD
*         INTO CORE.
 #
              DB$MDRD;
 #
          CALL THE ROUTINE THAT WRITES THE MD ENTRIES FROM CORE TO RMS. 
 #
              DB$MDWD;
 #
          RE-POINT THE SCHEMA DIRECTORY BASED ARRAY TO THE FIRST ENTRY
          IN THE SCHEMA DIRECTORY.
 #
              P<MDSCENTRY> = SCDRBP + 1;
            END 
 #
      RESET THE NEW SCHEMA ENTRY FLAG.
 #
           ELSE 
          MDSCWRTFLG[SCHDIRP] = FALSE;
        END 
 #
*     RELEASE MEMORY BLOCKS, IF THEY HAVE NOT BEEN RELEASED BY DB$MDWD. 
 #
      IF ARDIRBP NQ 0 
      THEN
        BEGIN 
        DB$UFRE(LOC(ARDIRBP));
        DB$UFRE(LOC(ARINFOBP)); 
        DB$UFRE(LOC(KEYINFOBP));
        DB$UFRE(LOC(VERDIRBP)); 
        DB$UFRE(LOC(VERINFBP)); 
        DB$UFRE(LOC(PITBP));
        END 
      IF CUTBP NQ 0 
      THEN
        BEGIN 
        DB$UFRE(LOC(CUTBP));
        END 
      RETURN; 
    END 
  TERM; 
