*DECK RELSTAT 
USETEXT TSBTBL
  PROC RELSTAT; 
    BEGIN 
      DEF CWPTR # 0 #;
  
      XREF ITEM SBSCHMA;           # CONTAINS THE FIRST WORD ADDRESS   #
                                   # OF THE SUB-SCHEMA IN CORE.        #
      XREF PROC DDLPRNT;           # PRINTS INFORMATION TO OUTPUT.     #
  
      ITEM AREAADR;                # AREA ADDRESS.                     #
      ITEM BLANKLINE C(10) = "          ";
      ITEM CHARCNT;                # KEEPS A COUNT OF CHARACTERS TRANS-#
                                   # FERRED TO PRINT BUFFER.           #
      ITEM DBIWRDS;                # NUMBER OF WORDS OCCUPIED BY DBI   #
                                   # ENTRIES IN A RST.                 #
      ITEM I,J,K;                  # SCRATCH VARIABLES.                #
      ITEM ORDNUM C(10);           # RELATION ORDINAL NUMBER.          #
      ITEM RSTPTR;                 # VARIABLE POINTER FOR ACCESSING    #
                                   # RELATION INFORMATION IN SUBSCHEMA #
                                   # DIRECTORY.                        #
      ITEM STATLINE C(120);        # PRINT BUFFER FOR RELATION STAT-   #
                                   # ISTICS INFORMATION.               #
      ITEM STATHDR C(80) = "               *****                 RELATIO
N   STATISTICS                 *****";
      ITEM TEMPCNT;                # TEMPORARY STORE FOR CHARACTER CNT.#
  
      P<CBWORKBUF> = SBSCHMA;      # POINTS TO SUBSCHEMA IN CORE.      #
      DDLPRNT( BLANKLINE, 10 );    # OUTPUT BLANK LINE.                #
      DDLPRNT( STATHDR, 80 );      # OUTPUT HEADER.                    #
      RSTPTR = SBCWFRSTRELA[CWPTR];  # ADDRESS OF FIRST RELATION ENTRY #
      STATLINE = " "; 
  
    # STEP THRU RELATION ENTRIES.                                      #
      FOR I = 1 STEP 1 UNTIL SBCWNUMRELS[CWPTR] DO
        BEGIN    # BEGIN OF LOOP--1 # 
        CHARCNT = 0;
        K = RSTPTR + RSTNXTRSTPTR[RSTPTR];   # ADDRESS OF NEXT RELATION#
                                             # ENTRY                   #
        AREAADR = 0;
        C<1,9>STATLINE = "RELATION "; 
        CHARCNT = CHARCNT + 10; 
        J = I;
        CONVORDNUM(J);
        C<CHARCNT,3>STATLINE = C<7,3>ORDNUM;  # TRANSFER ORDINAL NO.   #
        CHARCNT = 27; 
        C<CHARCNT,RSTRELNMELC[RSTPTR]>STATLINE =
                         C<0,RSTRELNMELC[RSTPTR]>RSTRELNAME30[RSTPTR];
        CHARCNT = CHARCNT + RSTRELNMELC[RSTPTR];
        C<CHARCNT,7>STATLINE = " JOINS "; 
        CHARCNT = CHARCNT + 7;
        CHARCNT = CHARCNT + 11; 
        DBIWRDS = (RSTHIGHRANK[RSTPTR]-2)*4 + 4; # NUMBER OF WORDS     #
                             # OCCUPIED BY DBIS IN RELATION ENTRY.     #
        RSTPTR = RSTPTR + RSTRELNMELW[RSTPTR] + 2;  # POINTS TO THE    #
                             # START OF THE DBI ENTRIES.               #
        DBIWRDS = RSTPTR + DBIWRDS;      # LAST WORD ADDRESS OF THE    #
                                         # PRESENT RELATION ENTRY.     #
    # LOOP FOR AREA NAMES IN SUBJECT RELATION ENTRY.                   #
        FOR J = RSTPTR STEP 2 UNTIL DBIWRDS - 1 DO
          BEGIN  # BEGIN OF LOOP--2  #
          TEMPCNT = CHARCNT;   # POSITION WHERE "AREA" AND AREA-NAMES  #
                             # ARE TO BE PLACED IN PRINT BUFFER.       #
          IF RSTAREAADR[J] EQ AREAADR THEN   # IF PRESENT AREA IS THE  #
            TEST J;                # SAME AS THE PREVIOUS AREA, SKIP TO#
          ELSE                     # NEXT AREA ADDRESS.                #
            AREAADR = RSTAREAADR[J];
          C<TEMPCNT,7>STATLINE = "AREA - "; 
          TEMPCNT = TEMPCNT + 7;
          C<TEMPCNT,SBARLENGCHAR[AREAADR]>STATLINE =
          C<0,SBARLENGCHAR[AREAADR]>SBARNAME30[AREAADR+ 
                                    SBARNAMEPTR[AREAADR]];
          DDLPRNT( STATLINE, 120 ); 
          STATLINE = " "; 
          END    # END OF LOOP--2  #
        RSTPTR = K; 
        END      # END OF LOOP--1  #
      RETURN; 
  
  PROC CONVORDNUM(ONUM);     # CONVERTS THE BINARY ORDINAL NUMBER TO   #
    BEGIN                    # DISPLAY DECIMAL.                        #
      ITEM ONUM;             # CONTAINS THE BINARY ORDINAL NUMBER.     #
      ITEM C1,C2;            # SCRATCH VARIABLES.                      #
      ORDNUM = "          ";
      FOR C1 = 9 STEP -1 UNTIL 7 DO 
        BEGIN 
        C2 = ONUM/10; 
        C<C1>ORDNUM = ONUM - C2 * 10 + O"33"; 
        ONUM = C2;
        END 
      RETURN; 
    END 
    END 
    TERM; 
