aboutsummaryrefslogtreecommitdiff
path: root/sys/libc/cenvget.c
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /sys/libc/cenvget.c
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/libc/cenvget.c')
-rw-r--r--sys/libc/cenvget.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/sys/libc/cenvget.c b/sys/libc/cenvget.c
new file mode 100644
index 00000000..2c812226
--- /dev/null
+++ b/sys/libc/cenvget.c
@@ -0,0 +1,143 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+*/
+
+#define import_spp
+#define import_libc
+#define import_xnames
+#include <iraf.h>
+
+
+/*
+** ENVGET[SBI] -- Assorted routines for fetching the values of environment
+** variables.
+** ENVPUTS -- Set or redefine the value of an environment variable.
+** ENVRESET -- Reset (overwrite) the value of an environment variable.
+*/
+
+#define SZ_VALUESTR SZ_COMMAND
+
+static XCHAR valuestr[SZ_VALUESTR+1];
+static XINT len_valuestr = SZ_VALUESTR;
+
+
+/* ENVGET -- (Near) emulation of the UNIX getenv procedure. This is a handy
+** routine for looking up environment variables in C programs. The value is
+** fetched into an internal static array and a pointer to this array is returned
+** as the function value, else NULL if the environment variable is not found.
+** The caller is responsible for using the value string before it is overwritten
+** by the next call.
+*/
+char *
+envget (
+ char *var /* environment variable name */
+)
+{
+ if (ENVFIND (c_sppstr(var), valuestr, &len_valuestr) < 0)
+ return (NULL);
+ else
+ return (c_strpak (valuestr, (char *)valuestr, len_valuestr+1));
+}
+
+
+/* C_ENVGETS -- Fetch the string value of an environment variable into the
+** output string. Return the strlen length of the output string as the
+** function value. If the variable is not found and the process is being
+** used interactively a query is generated. If no value is given in response
+** to the query or the process is noninteractive and the variable is not
+** found, zero is returned.
+*/
+int
+c_envgets (
+ char *var, /* name of variable to be fetched */
+ char *outstr, /* output string */
+ int maxch /* length including EOS */
+)
+{
+ register int nchars;
+
+ if ((nchars = ENVGETS (c_sppstr(var), valuestr, &len_valuestr)) < 0)
+ return (nchars);
+ else {
+ c_strpak (valuestr, outstr, maxch);
+ return (nchars > maxch ? maxch : nchars);
+ }
+}
+
+
+/* C_ENVFIND -- Just like ENVGETS, except that a query will not be generated
+** even if working interactively.
+*/
+int
+c_envfind (
+ char *var, /* name of variable to be fetched */
+ char *outstr, /* output string */
+ int maxch /* length including EOS */
+)
+{
+ register int nchars;
+
+ if ((nchars = ENVFIND (c_sppstr(var), valuestr, &len_valuestr)) < 0)
+ return (nchars);
+ else {
+ c_strpak (valuestr, outstr, maxch);
+ return (nchars > maxch ? maxch : nchars);
+ }
+}
+
+
+/* C_ENVGETB -- Return the boolean value of an environment variable. An error
+** action is taken if the variable is not found or the value string cannot
+** be interpreted as a boolean value.
+*/
+int
+c_envgetb (
+ char *var /* name of variable to be fetched */
+)
+{
+ return ((int) BTOI ((XINT) ENVGETB (c_sppstr(var))));
+}
+
+
+/* C_ENVGETI -- Return the integer value of an environment variable. An error
+** action is taken if the variable is not found or the value string cannot
+** be interpreted as an integer value.
+*/
+int
+c_envgeti (
+ char *var /* name of variable to be fetched */
+)
+{
+ return ((int) ENVGETI (c_sppstr(var)));
+}
+
+
+/* C_ENVPUTS -- Set or redefine the value of an environment variable. If the
+** variable is not defined a new entry is created. If the variable is already
+** defined but has a different value it is redefined, with the new definition
+** having precedence over the former (redefinitions can be undone; see envmark
+** and envfree). If the variable is already defined and the new definition
+** has the same value, it is ignored.
+**
+** Arguments: set var = value
+*/
+void
+c_envputs (
+ char *var, /* name of variable to be set */
+ char *value /* value string */
+)
+{
+ ENVPUTS (c_sppstr(var), c_strupk (value, valuestr, SZ_VALUESTR));
+}
+
+
+/* C_ENVRESET -- Reset (overwrite) the value of an environment variable.
+** If the variable is not defined a new entry is created.
+*/
+void
+c_envreset (
+ char *var, /* name of variable to be set */
+ char *value /* value string */
+)
+{
+ ENVRESET (c_sppstr(var), c_strupk (value, valuestr, SZ_VALUESTR));
+}