home *** CD-ROM | disk | FTP | other *** search
- /* dttest.c (emx+gcc) */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <getopt.h>
- #include <time.h>
- #include <sys/dirtree.h>
- #include <sys/param.h>
-
-
- static int debugging = 0;
- static int full_name = 0;
- static int show_size = 0;
- static int show_time = 0;
-
- static char path[MAXPATHLEN+1];
-
- static void list (struct _dt_node *p, int level, int len)
- {
- struct tm *tp;
- int i;
-
- while (p != NULL)
- {
- if (show_size)
- printf ("%10ld ", p->size);
- if (show_time)
- {
- tp = localtime (&p->mtime);
- printf ("%.4d/%.2d/%.2d %.2d:%.2d:%.2d ",
- tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday,
- tp->tm_hour, tp->tm_min, tp->tm_sec);
- }
- if (full_name)
- {
- path[len] = 0;
- printf ("%s%s\n", path, p->name);
- }
- else
- printf ("%*s%s\n", level*2, "", p->name);
- if (p->sub != NULL)
- {
- if (full_name)
- {
- i = strlen (p->name);
- memcpy (path+len, p->name, i);
- path[len+i] = '/';
- i += len + 1;
- }
- else
- i = 0;
- list (p->sub, level+1, i);
- }
- p = p->next;
- }
- }
-
-
- static void usage (void)
- {
- fputs ("Usage: dttest [-fst] <filespec>\n", stderr);
- exit (1);
- }
-
-
- int main (int argc, char *argv[])
- {
- char dir[MAXPATHLEN+1];
- char mask[MAXPATHLEN+1];
- struct _dt_tree *dt;
- int c;
-
- opterr = 0;
- while ((c = getopt (argc, argv, "dfst")) != EOF)
- switch (c)
- {
- case 'd':
- debugging = 1;
- break;
- case 'f':
- full_name = 1;
- break;
- case 's':
- show_size = 1;
- break;
- case 't':
- show_time = 1;
- break;
- default:
- usage ();
- }
- if (argc - optind != 1)
- usage ();
- if (_dt_split (argv[optind], dir, mask) != 0)
- perror (argv[1]);
- if (debugging)
- {
- printf ("dir: %s\n", dir);
- printf ("mask: %s\n", mask);
- }
- dt = _dt_read (dir, mask, _DT_TREE|_DT_NOCPDIR);
- if (dt == NULL)
- perror (argv[optind]);
- else
- {
- _dt_sort (dt, "fnest");
- list (dt->tree, 0, 0);
- _dt_free (dt);
- }
- return (0);
- }
-