/*
* NeWS is a product of Sun Microsystems, Inc. and is provided for
* unrestricted use provided that this legend is included on all tape
* media and as a part of the software program in whole or part. Users
* may copy or modify NeWS without charge, but are not authorized to
* license or distribute it to anyone else except as part of a product
* or program developed by the user.
*
* NEWS IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
*
* NeWS is provided with no support and without any obligation on the
* part of Sun Microsystems, Inc. to assist in its use, correction,
* modification or enhancement.
*
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY NEWS
* OR ANY PART THEREOF.
*
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even
* if Sun has been advised of the possibility of such damages.
*
* Sun Microsystems, Inc.
* 2550 Garcia Avenue
* Mountain View, California 94043
*/
#ifndef lint
static char sccsid[] = "@(#)psh.c 1.4 87/03/13 Copyright 1985 Sun Micro";
#endif
/*
* Copyright (c) 1985 by Sun Microsystems, Inc.
*/
/*-
NeWS operating system command executer. Used to execute a
program with its input and output connected to the NeWS
server. Based on psh.c. Makes a connection to the server,
sets standard in, out and error to be the connection, sends
the string servicename (which defaults to programname, and can
be set with the -s argument), followed by a newline, and then
exec's the file given by the next arg, passing it the rest of
the args.
psh.c, Sat Feb 14 09:48:11 1987
James Gosling,
Sun Microsystems
psexec.c, Tue Sep 15 22:52:51 EDT 1987
Don Hopkins,
University of Maryland
*/
#define MAXARGS 50
#include
char *programname;
char *servicename;
char *args[MAXARGS];
int nargs;
int input_file;
FILE *PostScript,
*PostScriptInput;
connect_and_exec()
{
if (PostScript == 0 && ps_open_PostScript() == 0) {
fprintf(stderr, "%s: Cannot connect to window server\n",
programname);
exit(0);
}
dup2(fileno(PostScriptInput), 0);
dup2(0, 1);
dup2(0, 2);
fclose(PostScriptInput);
fclose(PostScript);
printf("%s\n", servicename);
fflush(stdout);
execv(args[0], &args[0]);
perror("execv");
}
main(argc, argv)
char **argv;
{
servicename = programname = argv[0];
while (--argc > 0)
if ((++argv)[0][0] == '-' && nargs == 0)
switch (argv[0][1]) {
case 's':
if (--argc <= 0) {
fprintf(stderr, "%s: not enough arguments\n", programname);
exit(1);
}
servicename = (++argv)[0];
break;
default:
fprintf(stderr, "%s: invalid switch '%s'\n",
programname, argv[0]);
exit(1);
}
else if (nargs < MAXARGS)
args[nargs++] = argv[0];
else {
fprintf(stderr, "%s: too many arguments\n", programname);
exit(1);
}
if (nargs == 0) {
fprintf(stderr, "%s: not enough arguments\n", programname);
}
args[nargs] = NULL;
connect_and_exec();
}