|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T w
Length: 1873 (0x751)
Types: TextFile
Names: »which.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/euug-87hel/sec1/install/which.c«
#include <stdio.h>
static char SCCSID[] = "@(#)which.c Ver. 1.1, 86/12/29 13:46:31";
char *progname;
int all = 0; /* find all occurrences */
int cwd = 1; /* check cwd */
int warn = 1; /* give a warning if not found */
main(argc,argv)
int argc;
char *argv[];
{
char *getenv(), *path = getenv("PATH");
int c, getopt();
extern int optind;
extern char *optarg;
progname = *argv;
while((c = getopt(argc, argv, "aohq")) != EOF)
switch(c) {
case 'a':
all++;
break;
case 'o':
cwd = 0;
break;
case 'q':
warn = 0;
break;
case 'h':
default:
help();
exit(1);
}
switch(argc - optind) {
case 0:
help();
break;
default:
for(; optind<argc; optind++) {
/*if(cwd) putchar('\n');*/
which(argv[optind], path);
}
}
/*if(cwd) putchar('\n');*/
exit(0);
}
help()
{
fprintf(stderr, "Usage: %s [-ao] file [...]\n", progname);
fprintf(stderr, "\t\tOptions are:\n");
fprintf(stderr, "\t-a\tfind all occurrences in path\n");
fprintf(stderr, "\t-o\tfind only first occurrence outside cwd\n");
}
/* which - C version of the unix/csh 'which' command
* vix 23jul86 [written]
* vix 24jul86 [don't use dynamic memory]
*/
which(name, path)
char *name, *path;
{
char test[1000], *pc, *malloc(), save;
int len, namelen = strlen(name), found =0;
int count = 0;
pc = path;
if(*path == ':' && cwd && access(name, 01) == 0) { /* in cwd! */
printf("./%s\n", name); /* go on to find other location */
count++;
}
while (*pc != '\0' && (found == 0 || all) )
{
len = 0;
while (*pc != ':' && *pc != '\0')
{
len++;
pc++;
}
save = *pc;
*pc = '\0';
sprintf(test, "%s/%s", pc-len, name);
*pc = save;
if (*pc)
pc++;
found = (0 == access(test, 01)); /* executable */
if (found) {
puts(test);
count++;
}
}
if (count == 0 && warn)
{
printf("No %s (%s)\n", name, path);
}
return(count);
}