+
+
+/*
+ * findfl(name) (like execvp, but does path search and finds files)
+ */
+static char fname[128];
+
+char *execat();
+
+char *findfl(name)
+register char *name;
+{
+ register char *p;
+ register struct varblock *cp;
+ struct stat buf;
+ struct varblock *varptr();
+
+ for (p = name; *p; p++)
+ if(*p == '/') return(name);
+
+ cp = varptr("VPATH");
+ if(cp->varval == NULL || *cp->varval == 0)
+ p = ":";
+ else
+ p = cp->varval;
+
+ do
+ {
+ p = execat(p, name, fname);
+ if(stat(fname,&buf) >= 0)
+ return(fname);
+ } while (p);
+ return((char *)-1);
+}
+
+char *execat(s1, s2, si)
+register char *s1, *s2;
+char *si;
+{
+ register char *s;
+
+ s = si;
+ while (*s1 && *s1 != ':' && *s1 != '-')
+ *s++ = *s1++;
+ if (si != s)
+ *s++ = '/';
+ while (*s2)
+ *s++ = *s2++;
+ *s = '\0';
+ return(*s1? ++s1: 0);
+}
+
+
+/* copy s to d, changing file names to file aliases */
+fixname(s, d)
+char *s, *d;
+{
+ register char *r, *q;
+ struct nameblock *pn;
+ char name[BUFSIZ];
+
+ while (*s) {
+ if (isspace(*s)) *d++ = *s++;
+ else {
+ r = name;
+ while (*s) {
+ if (isspace(*s)) break;
+ *r++ = *s++;
+ }
+ *r = '\0';
+
+ if (((pn = srchname(name)) != 0) && (pn->alias))
+ q = pn->alias;
+ else q = name;
+
+ while (*q) *d++ = *q++;
+ }
+ }
+ *d = '\0';
+}