13b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o/*
23b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o * libecho.c
33b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o *
43b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o * For each argument on the command line, echo it.  Should expand
53b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o * DOS wildcards correctly.
63b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o *
73b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o * Syntax: libecho [-p prefix] list...
83b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o */
93b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o#include <stdio.h>
103b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o#include <io.h>
113b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o#include <string.h>
123b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
133b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'ovoid echo_files(char *, char *);
143b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
153b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'oint
163b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'omain(int argc, char *argv[])
173b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o{
183b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  int i;
193b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  char *prefix;
203b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
213b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  prefix = "";
223b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
233b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  if (argc < 2) {
243b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    fprintf(stderr, "Usage:  libecho [-p prefix] list...\n");
253b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    return 1;
263b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  }
273b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
283b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  for (i = 1 ; i < argc ; i++)
293b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    if (!stricmp(argv[i], "-p"))
303b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o      prefix = argv[++i];
313b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    else
323b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o      echo_files(prefix, argv[i]);
333b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
343b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  return 0;
353b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o}
363b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
373b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'ovoid
383b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'oecho_files(char *prefix, char *f)
393b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o{
403b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  long ff;
413b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  struct _finddata_t fdt;
423b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  char *slash;
433b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  char filepath[256];
443b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
453b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  /*
463b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o   * We're unix based quite a bit here.  Look for normal slashes and
473b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o   * make them reverse slashes.
483b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o   */
493b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  while((slash = strrchr(f, '/')) != NULL)
503b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    *slash = '\\';
513b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
523b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  strcpy(filepath, f);
533b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
543b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  slash = strrchr(filepath, '\\');
553b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
563b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  if (slash) {
573b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    slash++;
583b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    *slash = 0;
593b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  } else {
603b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    filepath[0] = '\0';
613b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  }
623b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
633b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  ff = _findfirst(f, &fdt);
643b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
653b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  if (ff < 0) {
663b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    printf("%s%s\n", prefix, f);
673b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    return;
683b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  }
693b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
703b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  printf("%s%s%s\n", prefix, filepath, fdt.name);
713b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o
723b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  for (;;) {
733b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    if (_findnext(ff, &fdt) < 0)
743b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o      break;
753b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o    printf("%s%s%s\n", prefix, filepath, fdt.name);
763b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  }
773b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o  _findclose(ff);
783b12bf94699a198183de962230c2a86c74e8ca13Theodore Ts'o}
79