*DECK DB$MDWU 
USETEXT UTMPTTX 
USETEXT MDDEFTX 
USETEXT MDBCMTX 
  PROC DB$MDWU; 
    BEGIN 
 #
* *   DB$MDWU - WRITE OUT CONTROL WORDS AND SDT  PAGE  1
  *   M. D. SAXE                                 DATE  04/12/76 
* *   J. G. SERPA - MDU 2.3 ENHANCEMENTS         DATE  07/28/80 
* *   R. L. MCALLESTER - TABLE SEGMENTATION      DATE  05/30/84 
  
  DC  PURPOSE 
  
      WRITE THE SCHEMA DIRECTORY TABLE AND THE MASTER DIRECTORY CONTROL 
      WORDS TO THE NEW MD FILE. 
  
  DC  ENTRY CONDITIONS
  
      THE PFN TABLE, SCHEMA DIRECTORY TABLE AND MASTER DIRECTORY CONTROL
      WORDS RESIDE IN CORE. 
  
  DC  EXIT CONDITIONS 
  
      THE TABLES MENTIONED ABOVE ARE WRITTEN TO THE NEW MD. 
  
  DC  CALLING ROUTINES
  
      DB$M20M - CONTROLLING ROUTINE FOR THE (2,0) OVERLAY 
  
  DC  CALLED ROUTINES 
 #
      XREF
        BEGIN 
 #                                                                     #
  
        PROC DB$ERMD;        # ERROR EXIT (CRM) WHEN WRITTING TO THE   #
                             # NEW MD.                                 #
        PROC DB$EROD;        # ERROR EXIT (CRM) WHEN READING THE OLD MD#
        PROC DB$FTMD;        # FIT FOR THE NEW MD                      #
        PROC DB$FTOD;        # FIT FOR THE OLD MD                      #
        PROC DB$MDWS;        # WRITE CONTROLLED LENGTH TABLES          #
        PROC DB$WGET;        # READS THE OLD MD                        #
        PROC DB$WPUT;        # I/O ROUTINE USED TO WRITE FROM CORE TO  #
                             # RMS.                                    #
  
 #                                                                     #
        END 
      BASED ARRAY PFNTABLE [0] S; 
  
        BEGIN 
*CALL MDPFNDCLS 
        END 
  
*CALL MD20CDCLS 
  
# FOLLOWING BASED ARRAY FOR A MASTER DIRECTORY SCHEMA DIRECTORY ENTRY#
  
      BASED ARRAY MDSCENTRY[0:0] S(DFMDSCDESIZE);          # SCH DIR #
  
        BEGIN                # MDSCENTRY BASED ARRAY #
  
*CALL MDSCDDCLS 
  
        END                  # MDSCENTRY BASED ARRAY #
  
  
  
#     B E G I N   D B $ M D W U   E X E C U T A B L E   C O D E .      #
  
  
 #
* 
* DC  DESCRIPTION 
* 
*     WRITE THE PFN TABLE TO THE NEW MD.
 #
      P<TLC> = B<42,18>PFUNCBBP;
      P<PFNTABLE> = LOC(TLC) + TLCHLEN[0];
      MDPFCNT[0] = PFUNCNT; 
      PUTLNG = (PFUNCNT * DFPFUNENT) + 1; 
      MDWAPFN[0] = PUTWA; 
      MDSZPFN[0] = PUTLNG;
      DB$MDWS(LOC(PFUNCBBP)); 
 #
*     WRITE THE SCHEMA DIRECTORY TO THE NEW MD. 
* 
*     SCAN  DIRECTORY TABLE FOR EMPTY ENTRIES AT END OF TABLE.
*     REDUCE TABLE SIZE ACCORDINGLY 
 #
      P<MDSCENTRY> = SCDRBP+1;
      FOR I= SCDRCNT - 1 STEP -1
        WHILE MDSCIDNT[I] EQ 0 AND I GQ 0  DO 
        BEGIN 
        SCDRCNT = I  ;
        END 
      SCHDRSZ = SCDRCNT*DFMDSCDESIZE; 
       MDLSTSID[0]=SCDRCNT; 
      P<PUTENTRY> = SCDRBP + 1; 
      PUTLNG = SCHDRSZ; 
      MDSDNO[0] = SCDRCNT;
      MDSDWA[0] = PUTWA;
      MDSDSIZE[0] = SCHDRSZ;
      DBPUT;
      MDWALUWD[0] = PUTWA;
 #
*     WRITE THE CONTROL WORDS TO THE NEW MD.
 #
      P<PUTENTRY> = LOC(MDCONWD); 
      PUTWA = 1;
      PUTLNG = DFMDNUMCW; 
      DBPUT;
    END 
  TERM; 
