koreth@ssyx.ucsc.edu (Steven Grimm) (05/16/89)
Submitted-by: ravi@mcnc.org (Ravi Subrahmanyan) Posting-number: Volume 2, Issue 39 Archive-name: which Here's a trivial utility for the ST: basically the same as "which" under unix. #!/bin/sh # shar: Shell Archiver (v1.22) # # Run the following text with /bin/sh to create: # README # WHICH.C # sed 's/^X//' << 'SHAR_EOF' > README && XThis is an ST adaptation of a "which" program somone posted to Xnet.sources many years ago to replace the agonisingly slow XBSD "which" script with a program. I've used it on our un*x Xsystem for years, and finally decided I couldn't do without Xit on the ST any longer.. Anyway, here it is (with source, Xits trivial enough.) To use it just say X X% which haha X Xand it'll add in the ".prg" or ".tos" or ".ttp" while checking for the file. X(it'll look for all three.) It works with the Mark Williams C "msh" PATH, Xbut you can easily modify it for your favourite shell, just change the comma Xin the #define for DELIMETERat the top to whatever the delimeter is for Xthe PATH in your shell. X X-ravi X(ravi@mcnc.org) SHAR_EOF chmod 0600 README || echo "restore of README fails" sed 's/^X//' << 'SHAR_EOF' > WHICH.C && X#define DELIMETER ',' X X#include <stdio.h> X Xchar *getenv(); Xchar *index(); X Xint Xmain(ac,av) Xchar **av; X{ X char *path, *cp; X char buf[200]; X char prog[200]; X char patbuf[512]; X int quit, none; X X if (ac < 2) { X fprintf(stderr, "Usage: %s cmd [cmd, ..]\n", *av); X exit(1); X } X av[ac] = 0; X for(av++ ; *av; av++) { X X quit = 0; X none = 1; X if ((path = getenv("PATH")) == NULL) { X fprintf(stderr, "Null path.\n"); X exit(0); X } X strcpy(patbuf, path); X path = patbuf; X cp = path; X X while(1) { X cp = index(path, DELIMETER); X if (cp == NULL) X quit++; X else X *cp = '\0'; X X if (strcmp(path,"") == (char *)NULL && quit == 0) { X sprintf(buf, "%s.\\%s", path, *av); X } else X sprintf(buf, "%s\\%s", path, *av); X X/* fprintf(stderr,"Trying %s, path %s\n",buf,path); */ X X path = ++cp; X X if (access(buf, 1) == 0) { X printf("%s\n", buf); X none = 0; X } X X sprintf(prog, "%s.%s", buf, "prg"); X if (access(prog, 1) == 0) { X printf("%s\n", prog); X none = 0; X } X X sprintf(prog, "%s.%s", buf, "ttp"); X if (access(prog, 1) == 0) { X printf("%s\n", prog); X none = 0; X } X X sprintf(prog, "%s.%s", buf, "tos"); X if (access(prog, 1) == 0) { X printf("%s\n", prog); X none = 0; X } X if (quit) { X if (none) X printf("No %s in %s\n", *av, getenv("PATH")); X break; X } X } X } X exit(0); X} X X SHAR_EOF chmod 0600 WHICH.C || echo "restore of WHICH.C fails" exit 0