• Home
  • History
  • Annotate
  • 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