home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume32 / xbbs / part05 / bbscsumm.c next >
C/C++ Source or Header  |  1992-09-08  |  5KB  |  239 lines

  1. /* bbscsumm.c         2/5/88 */
  2. /* This code was derived from newest.c by Rick Richardson */
  3.  
  4. #include <ftw.h>
  5. #include <sys/types.h>
  6. #include <sys/stat.h>
  7. #include <time.h>
  8. #include <string.h>
  9. /*
  10. #include "bbscdef.h"
  11. */
  12.  
  13. extern char msg_text[1482];
  14. extern char who_am_I[99];
  15. extern char who_am_i[99];
  16. extern char jnk[2];
  17. extern char buf128[384];
  18. extern char x_pathandfile[99];
  19. extern char f_pathname[99];
  20. extern char x_filename[20];
  21.  
  22. extern int toggle;
  23.  
  24. #define    DAYSIZE    15
  25. #define    SIZSIZE    11
  26. #define    SECS    (60L*60L*24L)
  27. #define    EPOCH    9999999L
  28. #define CRLF    "\n\r"
  29.  
  30. int    unreadable;
  31. long    mtime;
  32. long    atime;
  33. long    Ctime;
  34. long    bigsize;
  35. int    files;
  36. long    bytes;
  37. int    bigflag;
  38. int    timeflag;
  39. char    *base();
  40. static long    dayvec[] =
  41. {
  42.     0L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 10L, 20L, 50L, 100L, 200L, 500L, EPOCH
  43. };
  44.  
  45. static long    sizvec[] =
  46. {
  47.     0L, 1000L, 5000L, 10000L, 20000L, 50000L, 100000L, 200000L, 500000L,
  48.     1000000L, EPOCH
  49. };
  50.  
  51. int    afiles[DAYSIZE];
  52. int    mfiles[DAYSIZE];
  53. int    cfiles[DAYSIZE];
  54. int    sizfiles[SIZSIZE];
  55. long    now;
  56.  
  57. int
  58. in(mindays, maxdays, when)
  59. long    mindays, maxdays;
  60. long    when;
  61. {
  62.     long    minsecs = mindays * SECS;
  63.     long    maxsecs = maxdays * SECS;
  64.  
  65.     if ( (now-when)<maxsecs && (now-when)>=minsecs) return (1);
  66.     return (0);
  67. }
  68.  
  69. int
  70. siz(minsiz, maxsiz, thissiz)
  71. long    minsiz, maxsiz;
  72. long    thissiz;
  73. {
  74.     if ( thissiz<maxsiz && thissiz>=minsiz) return (1);
  75.     return (0);
  76. }
  77.  
  78. int
  79. fn(name, sp, what)
  80. char    *name;
  81. register struct stat    *sp;
  82. {
  83.     register int i;
  84.  
  85.     if (what != FTW_F && what != FTW_D)
  86.     {
  87.         ++unreadable;
  88.         return (0);
  89.     }
  90.     bytes += sp->st_size;
  91.     if (what != FTW_F) return(0);
  92.     ++files;
  93.     for (i = 1; i < DAYSIZE; ++i)
  94.     {
  95.         if (in(dayvec[i-1], dayvec[i], sp->st_mtime)) mfiles[i]++;
  96.         if (in(dayvec[i-1], dayvec[i], sp->st_atime)) afiles[i]++;
  97.         if (in(dayvec[i-1], dayvec[i], sp->st_ctime)) cfiles[i]++;
  98.     }
  99.     for (i = 1; i < SIZSIZE; ++i)
  100.         if (siz(sizvec[i-1], sizvec[i], sp->st_size)) sizfiles[i]++;
  101.     if (sp->st_mtime>mtime)
  102.         {mtime = sp->st_mtime; (void)strcpy(who_am_I, name);}
  103.     if (sp->st_ctime>Ctime)
  104.         {Ctime = sp->st_ctime; (void)strcpy(x_pathandfile, name);}
  105.     if (sp->st_atime>atime)
  106.         {atime = sp->st_atime; (void)strcpy(who_am_i, name);}
  107.     if (sp->st_size>bigsize)
  108.         {bigsize = sp->st_size; (void)strcpy(buf128, name);}
  109.     return (0);
  110. }
  111. summary()
  112. {
  113.     long    time();
  114.     register int i, c, errflag = 0;
  115.     portsout("\n\rCompiling statistics summary .........");
  116.     now = time( (long *) 0);
  117.     init();
  118.     walk(f_pathname);
  119.     stats(f_pathname);
  120.     graf(afiles, mfiles, cfiles);
  121.     return (0);
  122. }
  123.  
  124. init()
  125. {
  126.     register int    i;
  127.  
  128.     unreadable = 0;
  129.     mtime = 0;
  130.     atime = 0;
  131.     Ctime = 0;
  132.     bigsize = 0;
  133.     files = 0;
  134.     bytes = 0;
  135.     for (i = 1; i < DAYSIZE; ++i)
  136.     {
  137.         afiles[i] = 0;
  138.         mfiles[i] = 0;
  139.         cfiles[i] = 0;
  140.     }
  141.     for (i = 1; i < SIZSIZE; ++i)
  142.         sizfiles[i] = 0;
  143. }
  144.  
  145. walk(name)
  146. register char    *name;
  147. {
  148.     while (ftw(name, fn, 10) > 0)
  149.         ;
  150. }
  151.  
  152. stats(name)
  153. char    *name;
  154. {
  155.     portsout("\n\r\n\rDirectory:  ");
  156.     portsout(name);
  157.     portsout("\n\rNewest access:  ");
  158.     portsout(base(who_am_i));
  159.     portsout(" at ");
  160.     portsout(ctime(&atime));
  161.     portsout("\n\rNewest modify:  ");
  162.     portsout(base(who_am_I));
  163.     portsout(" at ");
  164.     portsout(ctime(&mtime));
  165.     portsout("\n\rNewest change:  ");
  166.     portsout(base(x_pathandfile));
  167.     portsout(" at ");
  168.     portsout(ctime(&Ctime));
  169.     portsout("\n\rLargest file:   ");
  170.     portsout(base(buf128));
  171.     portsout(" is ");
  172.     sprintf(x_filename, "%ld", bigsize);
  173.     portsout(x_filename);
  174.     portsout(CRLF);
  175.     if (unreadable)
  176.         portsout("\n\r\n\rUnreadable directories/files found\n\r\n\r");
  177. }
  178.  
  179. char *base(nm)
  180. char *nm;
  181. {
  182.     char *ptr;
  183.     ptr = strrchr(nm, '/');
  184.     ptr++;
  185.     return(ptr);
  186. }
  187.  
  188. graf(avec, mvec, cvec)
  189. int    avec[];
  190. int    mvec[];
  191. int    cvec[];
  192. {
  193.     register int    i;
  194.         for (i = 1; i < DAYSIZE; ++i)
  195.         {
  196.             if (dayvec[i] == EPOCH){
  197.                 (void) sprintf(msg_text,
  198.         "%5ld - EPOCH days: %5d accessed %5d modified %5d changed\n\r",
  199.                     dayvec[i-1], avec[i], mvec[i], cvec[i]);
  200.         portsout(msg_text); }
  201.             else{
  202.                 (void) sprintf(msg_text,
  203.         "%5ld - %5ld days: %5d accessed %5d modified %5d changed\n\r",
  204.                     dayvec[i-1], dayvec[i],
  205.                     avec[i], mvec[i], cvec[i] );
  206.         portsout(msg_text); }
  207.         }
  208.         (void) sprintf(msg_text,
  209.         "                    %5d TOTAL FILES, %7ld TOTAL BYTES\n\r\n\r",
  210.             files, bytes);
  211.         portsout(msg_text);
  212.  
  213.     if(toggle)
  214.         {
  215.         portsout("*** Depress a key to continue .......");
  216.         portsin(jnk, 1);
  217.         portsout("\n\r\n\r");
  218.         }
  219.         for (i = 1; i < SIZSIZE; ++i)
  220.         {
  221.             if (sizvec[i] == EPOCH){
  222.                 (void)sprintf(msg_text,"%7ld -  ULIMIT bytes: %5d files\n\r",
  223.                     sizvec[i-1], sizfiles[i] );
  224.                 portsout(msg_text); }
  225.             else{
  226.                 (void)sprintf(msg_text,"%7ld - %7ld bytes: %5d files\n\r",
  227.                     sizvec[i-1], sizvec[i], sizfiles[i] );
  228.                 portsout(msg_text); }
  229.         }
  230.         (void)sprintf(msg_text,"                    %7ld TOTAL BYTES\n\r", bytes);
  231.         portsout(msg_text);
  232.     if(toggle)
  233.         {
  234.         portsout("\n\r*** Depress a key to continue .......");
  235.         portsin(jnk, 1);
  236.         portsout("\n\r\n\r");
  237.         }
  238. }
  239.