home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / database / cdbms / dbsize.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-06-01  |  1.5 KB  |  61 lines

  1. /* ---------------------- dbsize.c ------------------------- */
  2. /*    Compute the character size of a database */
  3.  
  4. #include <stdio.h>
  5. #include "cdata.h"
  6.  
  7. void index_m();
  8.  
  9. main()
  10. {
  11.     int f, x;
  12.     long rct [MXFILS];            /* number of records/file     */
  13.     long fsize [MXFILS];        /* file sizes                 */
  14.     long dsize = 0;                /* data base sizes             */
  15.     int m [MXINDEX];            /* btree m values             */
  16.     long xsize [MXFILS] [MXINDEX];    /* index sizes             */
  17.  
  18.     for (f = 0; dbfiles [f]; f++)    {
  19.         printf("\nEnter record count for %-10s: ",dbfiles[f]);
  20.         fflush(stdout);
  21.         scanf("%ld", &rct [f]);
  22.         fsize [f] = rct [f] * rlen(f) + sizeof(FHEADER);
  23.         printf("File size:                       %10ld",
  24.                             fsize [f]);
  25.         dsize += fsize [f];
  26.         index_m(f, m);
  27.         for (x = 0; m [x]; x++)    {
  28.             xsize [f] [x] = (2 + (rct [f] / m [x])) * NODE;
  29.             dsize += xsize [f] [x];
  30.             printf(
  31.                 "\nIndex %d (m=%2d) size:             %10ld",
  32.                     x+1,m[x],xsize[f][x]);
  33.         }
  34.     }
  35.     printf("\n                                 ----------");
  36.     printf("\nData base size:                  %10ld", dsize);
  37. }
  38.  
  39.  
  40.  
  41. /* --- compute the btree m values
  42.             for the indices of a data base file --- */
  43. static void index_m(f, m)
  44. int f;            /* file number */
  45. int *m;            /* array of m values */
  46. {
  47.     int x, x1;
  48.     int len;
  49.  
  50.     for (x = 0; x < MXINDEX; x++)    {
  51.         *m = 0;
  52.         if (index_ele [f] [x] [0] == 0)
  53.             break;
  54.         len = 0;
  55.         for (x1 = 0; index_ele [f] [x] [x1]; x1++)
  56.             len += ellen [index_ele [f] [x] [x1] - 1];
  57.         *m++ = ((NODE-(sizeof(int)*2)
  58.                 -sizeof(RPTR)*4))/(len+sizeof(RPTR));
  59.     }
  60. }
  61.