chiark / gitweb /
Initial revision
[sw-tools] / src / sw_env.h
1 /* -*-c-*-
2  *
3  * $Id: sw_env.h,v 1.1 1999/06/02 16:53:35 mdw Exp $
4  *
5  * Mangling of environment variables
6  *
7  * (c) 1999 EBI
8  */
9
10 /*----- Licensing notice --------------------------------------------------* 
11  *
12  * This file is part of sw-tools.
13  *
14  * sw-tools is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation; either version 2 of the License, or
17  * (at your option) any later version.
18  * 
19  * sw-tools is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  * 
24  * You should have received a copy of the GNU General Public License
25  * along with sw-tools; if not, write to the Free Software Foundation,
26  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27  */
28
29 /*----- Revision history --------------------------------------------------* 
30  *
31  * $Log: sw_env.h,v $
32  * Revision 1.1  1999/06/02 16:53:35  mdw
33  * Initial revision
34  *
35  */
36
37 #ifndef SW_ENV_H
38 #define SW_ENV_H
39
40 #ifdef __cplusplus
41   extern "C" {
42 #endif
43
44 /*----- Header files ------------------------------------------------------*/
45
46 #include <stdio.h>
47
48 #include <mLib/dstr.h>
49 #include <mLib/sym.h>
50
51 /*----- Important constants -----------------------------------------------*/
52
53 enum {
54   ENV_OK = 0,                           /* Parsed OK */
55   ENV_EOF,                              /* End-of-file encountered */
56   ENV_VCHAR,                            /* Bad character in variable name */
57   ENV_SUBST,                            /* Bad parameter substitution */
58   ENV_QUOTE,                            /* Mismatched quote */
59   ENV_BRACE,                            /* Missing brace character */
60   ENV_SYSTEM,                           /* System error (see @errno@) */
61   ENV_INTERNAL                          /* Internal error */
62 };
63
64 enum {
65   EVF_INCSPC = 1,                       /* Allow spaces in values */
66   EVF_BACKTICK = 2,                     /* Make backtick self-delimiting */
67   EVF_SKIP = 4,                         /* Skipping this section of text */
68   EVF_INITSPC = 8                       /* Allow and ignore leading space */
69 };
70
71 /*----- Functions provided ------------------------------------------------*/
72
73 /* --- @env_get@ --- *
74  *
75  * Arguments:   @sym_table *t@ = pointer to a symbol table
76  *              @const char *name@ = pointer to variable name to look up
77  *
78  * Returns:     Pointer to corresponding value string, or null.
79  *
80  * Use:         Looks up an environment variable in the table and returns its
81  *              value.  If the variable can't be found, a null pointer is
82  *              returned.
83  */
84
85 extern char *env_get(sym_table */*t*/, const char */*name*/);
86
87 /* --- @env_put@ --- *
88  *
89  * Arguments:   @sym_table *t@ = pointer to a symbol table
90  *              @const char *name@ = pointer to variable name to set
91  *              @const char *value@ = pointer to value string to assign
92  *
93  * Returns:     ---
94  *
95  * Use:         Assigns a value to a variable.  If the @name@ contains an
96  *              equals character, then it's assumed to be of the form
97  *              `VAR=VALUE' and @value@ argument is ignored.  Otherwise, if
98  *              @value@ is null, the variable is deleted.  Finally, the
99  *              normal case: @name@ is a plain name, and @value@ is a normal
100  *              string causes the variable to be assigned the value in the
101  *              way you'd expect.
102  */
103
104 extern void env_put(sym_table */*t*/,
105                     const char */*name*/, const char */*value*/);
106
107 /* --- @env_import@ --- *
108  *
109  * Arguments:   @sym_table *t@ = pointer to a symbol table
110  *              @char **env@ = pointer to an environment list
111  *
112  * Returns:     ---
113  *
114  * Use:         Inserts all of the environment variables listed into a symbol
115  *              table for rapid access.  Equivalent to a lot of calls to
116  *              @env_put@.
117  */
118
119 extern void env_import(sym_table */*t*/, char **/*env*/);
120
121 /* --- @env_export@ --- *
122  *
123  * Arguments:   @sym_table *t@ = pointer to a symbol table
124  *
125  * Returns:     A big environment list.
126  *
127  * Use:         Extracts an environment table from a symbol table
128  *              representation of an environment.  The table and all of the
129  *              strings are in one big block allocated from the heap.
130  */
131
132 extern char **env_export(sym_table */*t*/);
133
134 /* --- @env_destroy@ --- *
135  *
136  * Arguments:   @sym_table *t@ = pointer to symbol table
137  *
138  * Returns:     ---
139  *
140  * Use:         Destroys all the variables in the symbol table.
141  */
142
143 extern void env_destroy(sym_table */*t*/);
144
145 /* --- @env_error@ --- *
146  *
147  * Arguments:   @int e@ = error code
148  *
149  * Returns:     String representation of error.
150  *
151  * Use:         Transforms an error into something a user can understand.
152  */
153
154 extern const char *env_error(int /*e*/);
155
156 /* --- @env_var@ --- *
157  *
158  * Arguments:   @sym_table *t@ = pointer to symbol table
159  *              @FILE *fp@ = pointer to stream to read from
160  *              @dstr *d@ = pointer to output variable
161  *
162  * Returns:     One of the @ENV_@ constants.
163  *
164  * Use:         Scans a variable name from the input stream.
165  */
166
167 extern int env_var(sym_table */*t*/, FILE */*fp*/, dstr */*d*/);
168
169 /* --- @env_value@ --- *
170  *
171  * Arguments:   @sym_table *t@ = pointer to symbol table
172  *              @FILE *fp@ = pointer to stream to read from
173  *              @dstr *d@ = pointer to output variable
174  *              @unsigned f@ = various interesting flags
175  *
176  * Returns:     0 if OK, @EOF@ if end-of-file encountered, or >0 on error.
177  *
178  * Use:         Scans a value from the input stream.  The value read may be
179  *              quoted in a Bourne-shell sort of a way, and contain Bourne-
180  *              shell-like parameter substitutions.  Some substitutions
181  *              aren't available because they're too awkward to implement.
182  */
183
184 extern int env_value(sym_table */*t*/, FILE */*fp*/,
185                      dstr */*d*/, unsigned /*f*/);
186
187 /* --- @env_read@ --- *
188  *
189  * Arguments:   @sym_table *t@ = pointer to symbol table
190  *              @FILE *fp@ = file handle to read
191  *              @unsigned f@ = various flags
192  *
193  * Returns:     Zero if OK, @EOF@ for end-of-file, or error code.
194  *
195  * Use:         Reads the environment assignment statements in the file.
196  */
197
198 extern int env_read(sym_table */*t*/, FILE */*fp*/, unsigned /*f*/);
199
200 /* --- @env_file@ --- *
201  *
202  * Arguments:   @sym_table *t@ = pointer to symbol table
203  *              @const char *name@ = pointer to filename
204  *
205  * Returns:     Zero if OK, or an error code.
206  *
207  * Use:         Reads a named file of environment assignments.
208  */
209
210 extern int env_file(sym_table */*t*/, const char */*name*/);
211
212 /*----- That's all, folks -------------------------------------------------*/
213
214 #ifdef __cplusplus
215   }
216 #endif
217
218 #endif