aboutsummaryrefslogtreecommitdiff
path: root/unix/gdev/sgidev/sgidispatch.c
blob: 90201460f828d992bf25ebbb06ae59c3e7b19ee4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define	import_spp
#define	import_error
#define	import_kernel
#define	import_knames
#include <iraf.h>


/*
 * SGIDISPATCH.C -- Determine pathname to the executable for the named SGI
 * translator, and execute the translator.  Pass all command line arguments
 * to the child, which also inherits stdin, stdout, and stderr.
 *
 * Usage: 	sgidispatch translator [args]
 */

#define	DEF_HOST	"unix"		/* default host system        */
#define	F_OK		0		/* access mode `file exists'  */
#ifndef X_OK
#define	X_OK		1		/* access mode `executable'   */
#endif

char	*irafpath();


/* MAIN -- Main entry point for SGIDISPATCH.
 */
int
main (int argc, char *argv[])
{
	char	tpath[SZ_PATHNAME+1];
	char	translator[SZ_PATHNAME+1];
	int	ip;

	/* Do nothing if called with no arguments.
	 */
	if (argc < 2)
	    exit (OSOK);

	/* Construct pathname to translator.
	 */
	strcpy (translator, argv[1]);
	ip = strlen (translator);
	if (strcmp (&translator[ip], ".e") != 0)
	    strcat (translator, ".e");
	sprintf (tpath, "%s", irafpath(translator));

	if (access (tpath, X_OK) == ERR) {
	    fprintf (stderr, "Fatal (sgidispatch): unable to access SGI");
	    fprintf (stderr, " translator `%s'\n", tpath);
	    fflush (stderr);
	    exit (OSOK+1);
	}

	/* Set up i/o for translator and attempt to fork.
	 */
	argv[argc] = 0;
	execv (tpath, &argv[1]);
	fprintf (stderr, "Fatal (sgidispatch): unable to execv(%s, ...)\n",
	    tpath);
	fflush (stderr);
	exit (OSOK+1);
}