1 /* 2 * $XConsortium: ifparser.h,v 1.1 92/08/22 13:05:39 rws Exp $ 3 * 4 * Copyright 1992 Network Computing Devices, Inc. 5 * 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. 15 * 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. 23 * 24 * Author: Jim Fulton 25 * Network Computing Devices, Inc. 26 * 27 * Simple if statement processor 28 * 29 * This module can be used to evaluate string representations of C language 30 * if constructs. It accepts the following grammar: 31 * 32 * EXPRESSION := VALUE 33 * | VALUE BINOP EXPRESSION 34 * 35 * VALUE := '(' EXPRESSION ')' 36 * | '!' VALUE 37 * | '-' VALUE 38 * | 'defined' '(' variable ')' 39 * | variable 40 * | number 41 * 42 * BINOP := '*' | '/' | '%' 43 * | '+' | '-' 44 * | '<<' | '>>' 45 * | '<' | '>' | '<=' | '>=' 46 * | '==' | '!=' 47 * | '&' | '|' 48 * | '&&' | '||' 49 * 50 * The normal C order of precidence is supported. 51 * 52 * 53 * External Entry Points: 54 * 55 * ParseIfExpression parse a string for #if 56 */ 57 58 #include <stdio.h> 59 60 typedef int Bool; 61 #define False 0 62 #define True 1 63 64 typedef struct _if_parser { 65 struct { /* functions */ 66 const char *(*handle_error) (/* struct _if_parser *, const char *, 67 const char * */); 68 int (*eval_variable) (/* struct _if_parser *, const char *, int */); 69 int (*eval_defined) (/* struct _if_parser *, const char *, int */); 70 } funcs; 71 char *data; 72 } IfParser; 73 74 const char *ParseIfExpression (/* IfParser *, const char *, int * */); 75 76