*DECK DB$M40M 
USETEXT UTMPTTX 
USETEXT MDBCMTX 
  PROC DB$M40M; 
    BEGIN 
 #
  *   DB$M40M - CONTROL ROUTINE FOR MD REPORT    PAGE  1
  *   M D SAXE                                   DATE  05/13/76 
  *   L.G. WHITE  FOR CHECKSUM MODS              DATE  08/30/78 
  *   J. G. SERPA - MDU 2.3 ENHANCEMENTS         DATE  07/28/80 
                                                                         CD2A042
  DC  PURPOSE                                                            CD2A042
                                                                         CD2A042
      DB$M40M IS THE CONTROLLING MODULE THAT MAY CALL VARIOUS OTHER      CD2A042
      MODULES FOR GENERATING THE MASTER DIRECTORY CONTENTS REPORT.       CD2A042
                                                                         CD2A042
  DC  ENTRY CONDITIONS                                                   CD2A042
                                                                         CD2A042
      THE MD CONTROL WORDS AND SCHEMA DIRECTORY MUST BE IN CORE.         CD2A042
                                                                         CD2A042
  DC  EXIT CONDITIONS                                                    CD2A042
                                                                         CD2A042
      THE MASTER DIRECTORY CONTENTS REPORT IS GENERATED AND WRITTEN TO   CD2A042
      THE OUTPUT FILE.                                                   CD2A042
                                                                         CD2A042
  DC  CALLING ROUTINES                                                   CD2A042
                                                                         CD2A042
      DBMSTRD - MASTER DIRECTORY UTILITY MAIN CONTROLLING MODULE         CD2A042
                                                                         CD2A042
  DC  CALLED ROUTINES                                                    CD2A042
                                                                         CD2A042
 #
      XREF
        BEGIN 
        ITEM DB$MDND;        # LFN OF THE NEW MD                       #
 #                                                                     #
        FUNC DB$CDEB C(10);  # CONVERTS BINARY TO DECIMAL DISPLAY.     #
        PROC DB$MDR1;        # READS THE AREA LIST AND SUB-SCHEMA DIR  #
        PROC DB$MDR2;        # FORMATS AND PRINTS THE MD CONTENTS REPRT#
        PROC DB$UALC;        # ALLOCATES SPACE IN MANAGED MEMORY       #
        PROC DB$UENL;        # ALLOCATE ENOUGH LINES FOR PRINTING      #
        PROC DB$UFRE;        # RELEASE A VARIABLE POSITION MEMORY BLOCK#
        PROC DB$UPCH;        # CREATES THE FIRST HDR LINE IN THE PAGE  #
                             # TITLE.                                  #
        PROC DB$UPRT;        # WRITES WSA TO THE OUTPUT FILE           #
 #                                                                     #
        END 
 #
                                                                         CD2A042
  DC  NON-LOCAL VARIABLES MODIFIED
  
      NONE
  
 #
      BASED ARRAY MDSCENTRY[0] S; 
        BEGIN 
*CALL MDSCDDCLS 
        END 
  
      DEF LNELNG #50#;
      DEF DFCR2TITLE #60#;   # LENGTH OF SECOND TITLE LINE             #
  
      ITEM TOTALAR;          # TOTAL NUMBER OF AREAS IN MASTER DIRECT#
      ITEM TOTALSS;          # TOTAL NUMBER OF SUBSCHEMAS IN MAST DIR#
      ITEM TOTALRL;          # TOTAL NUMBER OF RELATIONS IN MD #
      ITEM TOTALSM;          # TOTAL NUMBER OF SCHEMAS IN MD FILE      #
      ITEM TOTALVR;          # TOTAL NUMBER OF VERSIONS IN SCHEMA      #
  
      ARRAY MDCR1TITLE S(5);
        ITEM MDCR1ST C(0,0,60) =
         [" M A S T E R   D I R E C T O R Y   C O N T E N T S"];
      ARRAY MDCR2TITLE S(6);
        ITEM MDCR2ND C(0,00,60) = 
       ["0    (S=SCHEMA, V=VERSION, A=AREA, R=RELATION, SB=SUBSCHEMA)"];
      ARRAY MDCR3TITLE S(5);
        ITEM MDCR3RD C(0,0,50) =
          ["0      NAME                                   ID"]; 
      ARRAY SKIP2LINES [1]; 
        ITEM SKLNE C(0,0,10) = ["-"]; 
      ARRAY OVERALSUM S(5); 
        ITEM OVLSUM C(0,0,50) = ["    OVERALL SUMMARY"];
      ARRAY TOTALSC S (5);
        ITEM TOTSC C(0,0,50) = ["       NUMBER OF SCHEMAS"];
      ARRAY TOTALSSS S (5); 
        ITEM TOTSS C(0,0,50) = ["       NUMBER OF SUBSCHEMAS "];
      ARRAY TOTALRELS S(5); 
        ITEM TOTRELS C(0,0,50) = ["       NUMBER OF RELATIONS"];
      ARRAY TOTALARS S (5); 
        ITEM TOTAR C(0,0,50) = ["       NUMBER OF AREAS"];
      ARRAY DIRSIZE S (5);
        ITEM DRSZ C(0,0,50) = ["       DIRECTORY SIZE (WORDS)"];
      ARRAY TOTALVRS S(5);
        ITEM TOTVR C(0,00,50) = ["       NUMBER OF VERSIONS"];
      ITEM I;                # SCRATCH ITEM                            #
 #
  DC  DESCRIPTION 
                                                                         CD2A042
 #
  
  
  
#     B E G I N   D B $ M 4 0 M   E X E C U T A B L E   C O D E .      #
  
  
 #
      CALL ROUTINE (DB$UCHD) THAT CREATES THE FIRST HEADER LINE FOR THE 
      MASTER DIRECTORY CONTENTS REPORT. 
 #
      DB$UPCH(DB$MDND); 
 #                                                                       CD2A042
      OUTPUT "MASTER DIRECTORY CONTENTS" LINE AND ZERO TOTAL COUNTERS.   CD2A042
 #                                                                       CD2A042
      DB$UPRT(MDCR1TITLE,LNELNG);  # OUTPUT TITLE LINE 1               #
      TOTALAR = 0;                 # INITIALIZE NUMBER OF AREAS        #
      TOTALRL = 0;                 # INITIALIZE NUMBER OF RELATIONS    #
      TOTALSS = 0;                 # INITIALIZE NUMBER OF SUBSCHEMAS   #
      TOTALVR = 0;                 # INITIALIZE NUMBER OF VERSIONS     #
      TOTALSM = 0;                 # INITIALIZE NUMBER OF SCHEMAS      #
 #                                                                       CD2A042
      IF THERE ARE ANY SCHEMA DIRECTORY ENTRIES INDICATED, LOOP          CD2A042
      THROUGH THE SCHEMA DIRECTORY TO OBTAIN INFORMATION TO BE OUTPUT.   CD2A042
 #                                                                       CD2A042
      IF MDSDNO[0] GR 0                          # IF SCHEMA ENTRIES #   CD2A042
        THEN                                     # PROCESS ENTRIES #     CD2A042
          BEGIN                                                          CD2A042
            DB$UPRT(MDCR2TITLE,DFCR2TITLE); 
            DB$UPRT(MDCR3TITLE,LNELNG);          # OUTPUT TITLE THREE#
            DB$UPRT(SKIP2LINES,10);              # OUTPUT BLANK LINES#
            IF CSTDIRBP NQ 0
            THEN
              BEGIN 
              DB$UFRE(LOC(CSTDIRBP)); 
              END 
            IF MDCHKSMBP NQ 0 
            THEN
              BEGIN 
              DB$UFRE(LOC(MDCHKSMBP));
              END 
            DB$UALC(LOC(ARDIRBP),0,0);           # ALLOCATE CMM BLOCK#   CD2A042
            DB$UALC(LOC(CSTDIRBP),0,0);          # ALLOCATE CMM BLOCK#   CD2A042
            DB$UALC(LOC(MDCHKSMBP),0,0);          # ALLOCATE CMM BLOCK #
            DB$UALC(LOC(VERDIRBP),0,0);  # ALLOCATE EMPTY BLOCK FOR VDT#
            DB$UALC(LOC(VERINFBP),0,0);  # ALLOCATE EMPTY BLOCK FOR VIT#
            FOR SCHDIRP=0 STEP DFMDSCDESIZE WHILE SCHDIRP NQ SCHDRSZ DO  CD2A042
              BEGIN                                                      CD2A042
                P<MDSCENTRY> = SCDRBP + 1;       # POINT SCHEMA ENTRY#   CD2A042
                IF MDSCWRD[SCHDIRP] NQ 0         # IF ENTRY NOT EMPTY#   CD2A042
                  THEN                           # PROCESS ENTRY INFO#   CD2A042
                    BEGIN                                                CD2A042
                      DB$MDR1;                   # READ MD ENTRIES #     CD2A042
                      DB$MDR2(TOTALAR,TOTALSS,TOTALRL,TOTALVR); 
                      TOTALSM = TOTALSM + 1;
                    END                                                  CD2A042
              END                                                        CD2A042
          END                                                            CD2A042
        ELSE DB$UPRT(SKIP2LINES,10);             # OUTPUT BLANK LINES#   CD2A042
 #                                                                       CD2A042
      OUTPUT THE OVERALL SUMMARY LINES INCLUDING TOTAL COUNTER VALUES.   CD2A042
 #                                                                       CD2A042
      DB$UENL(6); 
      DB$UPRT(OVERALSUM,LNELNG);
      C<30,10>TOTSC[0] = DB$CDEB(TOTALSM,10); 
      DB$UPRT(TOTALSC,LNELNG);
      C<30,10>TOTSS[0] = DB$CDEB(TOTALSS,10); 
      DB$UPRT(TOTALSSS,LNELNG); 
      C<30,10>TOTRELS[0] = DB$CDEB(TOTALRL,10); 
      DB$UPRT (TOTALRELS,LNELNG); 
      C<30,10>TOTVR[0] = DB$CDEB(TOTALVR,10); 
      DB$UPRT(TOTALVRS,LNELNG); 
      C<30,10>TOTAR[0] = DB$CDEB(TOTALAR,10); 
      DB$UPRT(TOTALARS,LNELNG); 
      C<30,10>DRSZ[0] = DB$CDEB(MDWALUWD[0],10);
      DB$UPRT(DIRSIZE,LNELNG);
      RETURN; 
    END 
  TERM; 
