diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /sys/libc/cenvget.c | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/libc/cenvget.c')
-rw-r--r-- | sys/libc/cenvget.c | 143 |
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)); +} |