2
* $XConsortium: ifparser.h /main/4 1996/09/28 16:15:24 rws $
4
* Copyright 1992 Network Computing Devices, Inc.
6
* Permission to use, copy, modify, and distribute this software and its
7
* documentation for any purpose and without fee is hereby granted, provided
8
* that the above copyright notice appear in all copies and that both that
9
* copyright notice and this permission notice appear in supporting
10
* documentation, and that the name of Network Computing Devices may not be
11
* used in advertising or publicity pertaining to distribution of the software
12
* without specific, written prior permission. Network Computing Devices makes
13
* no representations about the suitability of this software for any purpose.
14
* It is provided ``as is'' without express or implied warranty.
16
* NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
17
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
18
* IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,
19
* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
20
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
21
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
22
* PERFORMANCE OF THIS SOFTWARE.
25
* Network Computing Devices, Inc.
27
* Simple if statement processor
29
* This module can be used to evaluate string representations of C language
30
* if constructs. It accepts the following grammar:
33
* | VALUE BINOP EXPRESSION
35
* VALUE := '(' EXPRESSION ')'
38
* | 'defined' '(' variable ')'
42
* BINOP := '*' | '/' | '%'
45
* | '<' | '>' | '<=' | '>='
50
* The normal C order of precidence is supported.
53
* External Entry Points:
55
* ParseIfExpression parse a string for #if
65
typedef struct _if_parser IfParser;
68
typedef char *(*ErrorHandlerT) (IfParser *, const char *, const char *);
69
typedef long (*EvalVariableT) (IfParser *, const char *, int);
70
typedef int (*EvalDefinedT) (IfParser *, const char *, int);
72
typedef char *(*ErrorHandlerT) ();
73
typedef long (*EvalVariableT) ();
74
typedef int (*EvalDefinedT) ();
78
struct { /* functions */
79
ErrorHandlerT handle_error;
80
EvalVariableT eval_variable;
81
EvalDefinedT eval_defined;
86
char *ParseIfExpression (