chiark / gitweb /
Drag into the 21st century.
[sw-tools] / src / sw_env.h
1 /* -*-c-*-
2  *
3  * $Id: sw_env.h,v 1.3 2004/04/08 01:52:19 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 #ifndef SW_ENV_H
30 #define SW_ENV_H
31
32 #ifdef __cplusplus
33   extern "C" {
34 #endif
35
36 /*----- Header files ------------------------------------------------------*/
37
38 #include <stdio.h>
39
40 #include <mLib/dstr.h>
41 #include <mLib/env.h>
42 #include <mLib/sym.h>
43
44 /*----- Important constants -----------------------------------------------*/
45
46 enum {
47   ENV_OK = 0,                           /* Parsed OK */
48   ENV_EOF,                              /* End-of-file encountered */
49   ENV_VCHAR,                            /* Bad character in variable name */
50   ENV_SUBST,                            /* Bad parameter substitution */
51   ENV_QUOTE,                            /* Mismatched quote */
52   ENV_BRACE,                            /* Missing brace character */
53   ENV_SYSTEM,                           /* System error (see @errno@) */
54   ENV_INTERNAL                          /* Internal error */
55 };
56
57 enum {
58   EVF_INCSPC = 1,                       /* Allow spaces in values */
59   EVF_BACKTICK = 2,                     /* Make backtick self-delimiting */
60   EVF_SKIP = 4,                         /* Skipping this section of text */
61   EVF_INITSPC = 8                       /* Allow and ignore leading space */
62 };
63
64 /*----- Functions provided ------------------------------------------------*/
65
66 /* --- @env_error@ --- *
67  *
68  * Arguments:   @int e@ = error code
69  *
70  * Returns:     String representation of error.
71  *
72  * Use:         Transforms an error into something a user can understand.
73  */
74
75 extern const char *env_error(int /*e*/);
76
77 /* --- @env_var@ --- *
78  *
79  * Arguments:   @sym_table *t@ = pointer to symbol table
80  *              @FILE *fp@ = pointer to stream to read from
81  *              @dstr *d@ = pointer to output variable
82  *
83  * Returns:     One of the @ENV_@ constants.
84  *
85  * Use:         Scans a variable name from the input stream.
86  */
87
88 extern int env_var(sym_table */*t*/, FILE */*fp*/, dstr */*d*/);
89
90 /* --- @env_value@ --- *
91  *
92  * Arguments:   @sym_table *t@ = pointer to symbol table
93  *              @FILE *fp@ = pointer to stream to read from
94  *              @dstr *d@ = pointer to output variable
95  *              @unsigned f@ = various interesting flags
96  *
97  * Returns:     0 if OK, @EOF@ if end-of-file encountered, or >0 on error.
98  *
99  * Use:         Scans a value from the input stream.  The value read may be
100  *              quoted in a Bourne-shell sort of a way, and contain Bourne-
101  *              shell-like parameter substitutions.  Some substitutions
102  *              aren't available because they're too awkward to implement.
103  */
104
105 extern int env_value(sym_table */*t*/, FILE */*fp*/,
106                      dstr */*d*/, unsigned /*f*/);
107
108 /* --- @env_read@ --- *
109  *
110  * Arguments:   @sym_table *t@ = pointer to symbol table
111  *              @FILE *fp@ = file handle to read
112  *              @unsigned f@ = various flags
113  *
114  * Returns:     Zero if OK, @EOF@ for end-of-file, or error code.
115  *
116  * Use:         Reads the environment assignment statements in the file.
117  */
118
119 extern int env_read(sym_table */*t*/, FILE */*fp*/, unsigned /*f*/);
120
121 /* --- @env_file@ --- *
122  *
123  * Arguments:   @sym_table *t@ = pointer to symbol table
124  *              @const char *name@ = pointer to filename
125  *
126  * Returns:     Zero if OK, or an error code.
127  *
128  * Use:         Reads a named file of environment assignments.
129  */
130
131 extern int env_file(sym_table */*t*/, const char */*name*/);
132
133 /*----- That's all, folks -------------------------------------------------*/
134
135 #ifdef __cplusplus
136   }
137 #endif
138
139 #endif