• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * libecho.c
3  *
4  * For each argument on the command line, echo it.  Should expand
5  * DOS wildcards correctly.
6  *
7  * Syntax: libecho [-p prefix] list...
8  */
9 #include <stdio.h>
10 #include <io.h>
11 #include <string.h>
12 
13 void echo_files(char *, char *);
14 
15 int
main(int argc,char * argv[])16 main(int argc, char *argv[])
17 {
18   int i;
19   char *prefix;
20 
21   prefix = "";
22 
23   if (argc < 2) {
24     fprintf(stderr, "Usage:  libecho [-p prefix] list...\n");
25     return 1;
26   }
27 
28   for (i = 1 ; i < argc ; i++)
29     if (!stricmp(argv[i], "-p"))
30       prefix = argv[++i];
31     else
32       echo_files(prefix, argv[i]);
33 
34   return 0;
35 }
36 
37 void
echo_files(char * prefix,char * f)38 echo_files(char *prefix, char *f)
39 {
40   long ff;
41   struct _finddata_t fdt;
42   char *slash;
43   char filepath[256];
44 
45   /*
46    * We're unix based quite a bit here.  Look for normal slashes and
47    * make them reverse slashes.
48    */
49   while((slash = strrchr(f, '/')) != NULL)
50     *slash = '\\';
51 
52   strcpy(filepath, f);
53 
54   slash = strrchr(filepath, '\\');
55 
56   if (slash) {
57     slash++;
58     *slash = 0;
59   } else {
60     filepath[0] = '\0';
61   }
62 
63   ff = _findfirst(f, &fdt);
64 
65   if (ff < 0) {
66     printf("%s%s\n", prefix, f);
67     return;
68   }
69 
70   printf("%s%s%s\n", prefix, filepath, fdt.name);
71 
72   for (;;) {
73     if (_findnext(ff, &fdt) < 0)
74       break;
75     printf("%s%s%s\n", prefix, filepath, fdt.name);
76   }
77   _findclose(ff);
78 }
79