home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-386-Vol-2of3.iso / c / csh4.zip / FEXECVP.C < prev    next >
C/C++ Source or Header  |  1985-09-05  |  1KB  |  52 lines

  1. fexecvp(name, argv)
  2. char *name, **argv;
  3. {
  4.     register char *cp, *xp;
  5.     int result;
  6.     char *getenv(), path[64];
  7.  
  8.     if (666 != (result = tryexec("", name, argv)))
  9.         return result;
  10.     if ((cp = getenv("PATH")) != 0) {
  11.         while (*cp) {
  12.             xp = path;
  13.             while (*cp) {
  14.                 if (*cp == ';') {
  15.                     ++cp;
  16.                     break;
  17.                 }
  18.                 *xp++ = *cp++;
  19.             }
  20.             *xp = 0;
  21.             if (path[0] != 0)
  22.                 if (666 != (result = tryexec(path, name, argv)))
  23.                     return result;
  24.         }
  25.     }
  26.     return 666;
  27. }
  28.  
  29. static
  30. tryexec(dir, name, argv)
  31. char *dir, *name, **argv;
  32. {
  33.     char newname[64];
  34.     register char *cp;
  35.     char *rindex(),*index();
  36.  
  37.     strcpy(newname, dir);
  38.     if (((cp = index(newname, '/')) || (cp = index(newname, '\\')))
  39.                 && *(cp+1) != '\0')
  40.         strcat(newname, "/");
  41.     strcat(newname, name);
  42.     if (index(name, '.') == 0) {
  43.         strcat(newname, ".com");
  44.         if (666 != fexecv(newname, argv))
  45.             return wait();
  46.         strcpy(rindex(newname,'.'), ".exe");
  47.     }
  48.     if (666 != fexecv(newname, argv))
  49.             return wait();
  50.     return 666;
  51. }
  52.