aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/bootlib/osgetenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'unix/boot/bootlib/osgetenv.c')
-rw-r--r--unix/boot/bootlib/osgetenv.c127
1 files changed, 127 insertions, 0 deletions
diff --git a/unix/boot/bootlib/osgetenv.c b/unix/boot/bootlib/osgetenv.c
new file mode 100644
index 00000000..3ccfb403
--- /dev/null
+++ b/unix/boot/bootlib/osgetenv.c
@@ -0,0 +1,127 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include <string.h>
+#define import_xnames
+#include "bootlib.h"
+
+
+char *_os_getenv();
+
+
+/* OS_GETENV -- Return the value of the named environment variable. Null is
+ * returned if the named variable is not found.
+ */
+char *
+os_getenv (char *envvar)
+{
+ static char irafdir[SZ_PATHNAME+1] = "";
+ static char hostdir[SZ_PATHNAME+1] = "";
+ static char valstr[SZ_COMMAND+1];
+ static char errmsg[] = "environment variable `%s' not found\n";
+ extern char *os_subdir();
+ char *vp;
+
+
+ /* Try the standard environment first. */
+ memset (valstr, 0, SZ_COMMAND+1);
+ if ( (vp = _os_getenv (envvar, valstr, SZ_COMMAND)) )
+ return (vp);
+
+ /* The following maps certain well-known IRAF logical directories
+ * even if there is no regular (VOS) environment facility.
+ */
+ if (irafdir[0] == EOS)
+ if (_os_getenv ("iraf", irafdir, SZ_PATHNAME) == NULL) {
+ fprintf (stderr, errmsg, "iraf");
+ return (NULL);
+ }
+ if (hostdir[0] == EOS)
+ if (_os_getenv ("host", hostdir, SZ_PATHNAME) == NULL) {
+ fprintf (stderr, errmsg, "host");
+ return (NULL);
+ }
+
+ /* Map the names of the well known IRAF logical directories which
+ * are defined portably in terms of iraf$ or host$.
+ */
+ if ( strcmp (envvar, "lib") == 0) /* iraf/. */
+ strcpy (valstr, os_subdir (irafdir, "lib"));
+ else if (strcmp (envvar, "bin") == 0)
+ strcpy (valstr, os_subdir (irafdir, "bin"));
+ else if (strcmp (envvar, "dev") == 0)
+ strcpy (valstr, os_subdir (irafdir, "dev"));
+ else if (strcmp (envvar, "pkg") == 0)
+ strcpy (valstr, os_subdir (irafdir, "pkg"));
+ else if (strcmp (envvar, "sys") == 0)
+ strcpy (valstr, os_subdir (irafdir, "sys"));
+ else if (strcmp (envvar, "math") == 0)
+ strcpy (valstr, os_subdir (irafdir, "math"));
+ else if (strcmp (envvar, "hlib") == 0) /* host/. */
+ strcpy (valstr, os_subdir (hostdir, "hlib"));
+ else if (strcmp (envvar, "as") == 0)
+ strcpy (valstr, os_subdir (hostdir, "as"));
+ else
+ return (NULL);
+
+ return (valstr);
+}
+
+
+#ifdef NOVOS
+/* _OS_GETENV -- Fetch the value of the named environment variable from the
+ * host environment.
+ */
+char *
+_os_getenv (
+ char *envvar, /* name of environment variable */
+ char *outstr, /* receives value */
+ int maxch
+)
+{
+ PKCHAR symbol[SZ_FNAME+1];
+ PKCHAR value[SZ_COMMAND+1];
+ XINT x_maxch = SZ_COMMAND, status=1;
+
+ strcpy ((char *)symbol, envvar);
+ ZGTENV (symbol, value, &x_maxch, &status);
+
+ if (status < 0) {
+ outstr[0] = EOS;
+ return (NULL);
+ } else {
+ strncpy (outstr, (char *)value, maxch);
+ outstr[maxch] = EOS;
+ return (outstr);
+ }
+}
+
+#else
+/* _OS_GETENV -- Fetch the value of the named environment variable from the
+ * host environment.
+ */
+char *
+_os_getenv (
+ char *envvar, /* name of environment variable */
+ char *outstr, /* receives value */
+ int maxch
+)
+{
+ XCHAR x_symbol[SZ_FNAME+1];
+ XCHAR x_value[SZ_COMMAND+1];
+ XINT x_maxch = SZ_COMMAND, status=1;
+ extern XINT ENVFIND();
+
+
+ os_strupk (envvar, x_symbol, SZ_FNAME);
+ status = ENVFIND (x_symbol, x_value, &x_maxch);
+
+ if (status <= 0) {
+ outstr[0] = EOS;
+ return (NULL);
+ } else {
+ os_strpak (x_value, outstr, maxch);
+ return (outstr);
+ }
+}
+#endif