@deftypefn Extension int pexecute (const char *@var{program}, char * const *@var{argv}, const char *@var{this_pname}, const char *@var{temp_base}, char **@var{errmsg_fmt}, char **@var{errmsg_arg}, int flags) Executes a program. @var{program} and @var{argv} are the arguments to @code{execv}/@code{execvp}. @var{this_pname} is name of the calling program (i.e., @code{argv[0]}). @var{temp_base} is the path name, sans suffix, of a temporary file to use if needed. This is currently only needed for MS-DOS ports that don't use @code{go32} (do any still exist?). Ports that don't need it can pass @code{NULL}. (@code{@var{flags} & PEXECUTE_SEARCH}) is non-zero if @env{PATH} should be searched (??? It's not clear that GCC passes this flag correctly). (@code{@var{flags} & PEXECUTE_FIRST}) is nonzero for the first process in chain. (@code{@var{flags} & PEXECUTE_FIRST}) is nonzero for the last process in chain. The first/last flags could be simplified to only mark the last of a chain of processes but that requires the caller to always mark the last one (and not give up early if some error occurs). It's more robust to require the caller to mark both ends of the chain. The result is the pid on systems like Unix where we @code{fork}/@code{exec} and on systems like WIN32 and OS/2 where we use @code{spawn}. It is up to the caller to wait for the child. The result is the @code{WEXITSTATUS} on systems like MS-DOS where we @code{spawn} and wait for the child here. Upon failure, @var{errmsg_fmt} and @var{errmsg_arg} are set to the text of the error message with an optional argument (if not needed, @var{errmsg_arg} is set to @code{NULL}), and @minus{}1 is returned. @code{errno} is available to the caller to use. @end deftypefn @deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags}) Waits for a program started by @code{pexecute} to finish. @var{pid} is the process id of the task to wait for. @var{status} is the `status' argument to wait. @var{flags} is currently unused (allows future enhancement without breaking upward compatibility). Pass 0 for now. The result is the pid of the child reaped, or -1 for failure (@code{errno} says why). On systems that don't support waiting for a particular child, @var{pid} is ignored. On systems like MS-DOS that don't really multitask @code{pwait} is just a mechanism to provide a consistent interface for the caller. @end deftypefn @undocumented pfinish pfinish: finish generation of script pfinish is necessary for systems like MPW where a script is generated that runs the requested programs.