home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / unix / emx / test / dttest.c < prev    next >
C/C++ Source or Header  |  1992-12-26  |  2KB  |  112 lines

  1. /* dttest.c (emx+gcc) */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <getopt.h>
  6. #include <time.h>
  7. #include <sys/dirtree.h>
  8. #include <sys/param.h>
  9.  
  10.  
  11. static int debugging = 0;
  12. static int full_name = 0;
  13. static int show_size = 0;
  14. static int show_time = 0;
  15.  
  16. static char path[MAXPATHLEN+1];
  17.  
  18. static void list (struct _dt_node *p, int level, int len)
  19. {
  20.   struct tm *tp;
  21.   int i;
  22.  
  23.   while (p != NULL)
  24.     {
  25.       if (show_size)
  26.         printf ("%10ld  ", p->size);
  27.       if (show_time)
  28.         {
  29.           tp = localtime (&p->mtime);
  30.           printf ("%.4d/%.2d/%.2d %.2d:%.2d:%.2d  ",
  31.                   tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday,
  32.                   tp->tm_hour, tp->tm_min, tp->tm_sec);
  33.         }
  34.       if (full_name)
  35.         {
  36.           path[len] = 0;
  37.           printf ("%s%s\n", path, p->name);
  38.         }
  39.       else
  40.         printf ("%*s%s\n", level*2, "", p->name);
  41.       if (p->sub != NULL)
  42.         {
  43.           if (full_name)
  44.             {
  45.               i = strlen (p->name);
  46.               memcpy (path+len, p->name, i);
  47.               path[len+i] = '/';
  48.               i += len + 1;
  49.             }
  50.           else
  51.             i = 0;
  52.           list (p->sub, level+1, i);
  53.         }
  54.       p = p->next;
  55.     }
  56. }
  57.  
  58.  
  59. static void usage (void)
  60. {
  61.   fputs ("Usage: dttest [-fst] <filespec>\n", stderr);
  62.   exit (1);
  63. }
  64.  
  65.  
  66. int main (int argc, char *argv[])
  67. {
  68.   char dir[MAXPATHLEN+1];
  69.   char mask[MAXPATHLEN+1];
  70.   struct _dt_tree *dt;
  71.   int c;
  72.  
  73.   opterr = 0;
  74.   while ((c = getopt (argc, argv, "dfst")) != EOF)
  75.     switch (c)
  76.       {
  77.       case 'd':
  78.         debugging = 1;
  79.         break;
  80.       case 'f':
  81.         full_name = 1;
  82.         break;
  83.       case 's':
  84.         show_size = 1;
  85.         break;
  86.       case 't':
  87.         show_time = 1;
  88.         break;
  89.       default:
  90.         usage ();
  91.       }
  92.   if (argc - optind != 1)
  93.     usage ();
  94.   if (_dt_split (argv[optind], dir, mask) != 0)
  95.     perror (argv[1]);
  96.   if (debugging)
  97.     {
  98.       printf ("dir:  %s\n", dir);
  99.       printf ("mask: %s\n", mask);
  100.     }
  101.   dt = _dt_read (dir, mask, _DT_TREE|_DT_NOCPDIR);
  102.   if (dt == NULL)
  103.     perror (argv[optind]);
  104.   else
  105.     {
  106.       _dt_sort (dt, "fnest");
  107.       list (dt->tree, 0, 0);
  108.       _dt_free (dt);
  109.     }
  110.   return (0);
  111. }
  112.