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