/* * RUN.C * * (c)1986 Matthew Dillon 9 October 1986 * * RUN handles running of external commands. * * Version 2.07M by Steve Drew 10-Sep-87 * * Version 4.00A by Carlo Borreo & Cesare Dieni 13-Jan-90 * */ char *FindIt(); do_run(str) char *str; { int retcode; char buf[200]; /* enough space for 100 char cmd name + path stuff */ char *path, *argline, *trueargline, *copy, *p = av[0]; while(*p++) *p &= 0x7F; /* allow "com mand" */ argline=compile_av(av, 1, ac, ' ', 1); trueargline= (*argline ? argline : "\n"); if (strlen(av[0]) > 100) { ierror(NULL,509); return -1; } sprintf(buf,"res_%s",BaseName(av[0])); if (Getenv(buf, buf+100, 90L) && loadres(av[0])) Setenv(buf,NULL); retcode=SyncRun(av[0],trueargline,0L,0L); if (retcode>=0) { free(argline); return retcode; } if (path = FindIt(av[0],"",buf)) { retcode = SyncRun(path,trueargline,0L,0L); free(argline); return retcode; } else free(argline); if ((path = FindIt(av[0],".sh",buf)) == NULL) { fprintf(stderr,"Command Not Found %s\n",av[0]); return -1; } av[1] = buf; copy = malloc(strlen(str)+3); sprintf(copy,"x %s",str); retcode = do_source(copy); free(copy); return retcode; } char *dofind(cmd, ext, buf) char *cmd, *ext, *buf; { char *ptr, *s; sprintf(buf,"%s%s",cmd,ext); if (exists(buf)) return buf; if (BaseName(buf)==buf) { s = get_var(LEVEL_SET, v_path); while (*s) { for (ptr=buf; *s && *s!=','; ) *ptr++ = *s++; sprintf(ptr, "%s%s", cmd, ext); if (exists(buf)) return buf; if (*s) s++; } } return NULL; } char *FindIt(cmd,ext,buf) char *cmd, *ext, *buf; { char *response; Myprocess->pr_WindowPtr = (APTR)(-1); response=dofind(cmd,ext,buf); Myprocess->pr_WindowPtr = NULL; return response; }