*DECK DB$MDR1 
USETEXT UTMPTTX 
USETEXT MDBCMTX 
      PROC DB$MDR1; 
      BEGIN 
 #
* *   DB$MDR1 - READ EXISTING MD ENTRIES         PAGE  1
  *   M. D. SAXE                                 DATE  04/07/76 
  *   A. W. LO                                   DATE  05/08/77 
* *   J. G. SERPA - MDU 2.3 ENHANCEMENTS         DATE  07/28/80 
* *   R. L. MCALLESTER - TABLE SEGMENTATION      DATE  05/30/84 
  
  DC  PURPOSE 
  
      READ MD ENTRIES FROM THE NEW MD INTO CORE.
  
  DC  ENTRY CONDITIONS
  
      THE NEW MD FILE MUST HAVE BEEN PREVIOUSLY OPENED, AND 
      ALL NECESSARY TABLES MUST BE IN CORE. 
  
  DC  EXIT CONDITIONS 
  
      TABLES PERTAINING TO A SCHEMA ARE IN CORE.
  
  DC  CALLING ROUTINES
  
      DB$M40M - CONTROLLING ROUTINE FOR THE 4,0 OVERLAY 
  
  DC  CALLED ROUTINES 
  
 #
      XREF
        BEGIN 
 #                                                                     #
        PROC DB$FTMD;        # FIT FOR THE NEW MD                      #
        PROC DB$UALC;        # ALLOCATE SPACE IN MANAGED MEMORY        #
        PROC DB$UAWS;        # ADJUST WORK SPACE IN MANAGED MEMORY     #
        PROC DB$WGET;        # PERFORMS GETS ON WORD ADDRESSABLE FILES #
        PROC DB$ERMD;        # CRM ERROR EXIT FOR THE NEW MD           #
 #                                                                     #
        END 
  
      ITEM GETLNG;           # LG IN WRDS OF THE ENTRY TO BE READ.     #
      ITEM GETWA;            # WORD ADDRESS OF THE ENTRY TO BE READ.   #
      ITEM I;                # SCRATCH ITEM.                           #
  
      BASED ARRAY GETENTRY [0] S;;
  
  PROC DBGET; 
    BEGIN 
      DB$WGET(DB$FTMD,GETENTRY,GETLNG,GETWA,DB$ERMD); 
      RETURN; 
    END 
                                   # MDSCDDCLS, MDARDDCLS, MDARIDCLS,  #
                                   # MDDPDDCLS, MDSBDDCLS              #
      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; 
  
  
  
#     B E G I N   D B $ M D R 1   E X E C U T A B L E   C O D E .      #
  
  
 #
* 
* DC  DESCRIPTION 
* 
*     READ THE CURRENT SCHEMA INFORMATION TABLE 
 #
      P<MDSCENTRY> = SCDRBP + 1;
      P<GETENTRY> = LOC(MDSCINFO);
      GETWA = MDSCWASC[SCHDIRP];
      GETLNG = MDSCSISZ[SCHDIRP];      # LENGTH OF SIT                 #
      DBGET;
 #
*     READ THE AREA DIRECTORY 
 #
      P<MDSCENTRY> = SCDRBP + 1;
      GETWA = MDSCWAAD[SCHDIRP];
      GETLNG = MDSCADSZ[SCHDIRP]; 
      DB$UAWS(LOC(ARDIRBP),GETLNG); 
      P<GETENTRY> = ARDIRBP + 1;
      DBGET;
      P<MDSCENTRY> = SCDRBP + 1;
 #
*     READ THE SUB-SCHEMA DIRECTORY INTO MANAGED MEMORY 
 #
      GETWA = MDSCWASB[SCHDIRP];
      GETLNG = MDSCSSSZ[SCHDIRP]; 
      DB$UAWS(LOC(CSTDIRBP),GETLNG);
      P<GETENTRY> = CSTDIRBP + 1; 
      DBGET;
 #
*     READ AREA AND RELATION CHECKSUM LIST FROM MASTER DIRECTORY FILE.
 #
      P<MDSCENTRY> = SCDRBP + 1;
      GETWA = MDSCCSLWA[SCHDIRP]; 
      GETLNG = MDSCCSLSZ[SCHDIRP];
      DB$UAWS(LOC(MDCHKSMBP),GETLNG); 
      P<GETENTRY> = B<42,18> MDCHKSMBP + 1; 
      DBGET;
 #
*     READ VERSION DIRECTORY TABLE (VDT). 
 #
      P<MDSCENTRY> = SCDRBP + 1;       # POSITION SCHEMA DIR TABLE     #
      GETWA = MDSCWAVD[SCHDIRP];       # WA OF VERSION DIRECTORY TABLE #
      GETLNG = MDSCNOVER[SCHDIRP] * DFMDVDEN;  # LENGTH OF VIT         #
      VERSCNT = GETLNG; 
      DB$UAWS(LOC(VERDIRBP),GETLNG);   # ADJUST SIZE OF BLOCK FOR VDT  #
      P<GETENTRY> = B<42,18>VERDIRBP + 1;  # POSITION TO READ VDT      #
      DBGET;                           # READ IN PERM FILE INFO TABLE  #
  
 #
*     THE VERSION INFORMATION TABLE IS READ BY DB$MDR2. 
 #
    END 
  TERM; 
