Blame | Last modification | View Log | RSS feed
/** $XConsortium: ifparser.h /main/2 1995/08/09 14:10:06 kaleb $** Copyright 1992 Network Computing Devices, Inc.** Permission to use, copy, modify, and distribute this software and its* documentation for any purpose and without fee is hereby granted, provided* that the above copyright notice appear in all copies and that both that* copyright notice and this permission notice appear in supporting* documentation, and that the name of Network Computing Devices may not be* used in advertising or publicity pertaining to distribution of the software* without specific, written prior permission. Network Computing Devices makes* no representations about the suitability of this software for any purpose.* It is provided ``as is'' without express or implied warranty.** NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,* IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL,* INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR* PERFORMANCE OF THIS SOFTWARE.** Author: Jim Fulton* Network Computing Devices, Inc.** Simple if statement processor** This module can be used to evaluate string representations of C language* if constructs. It accepts the following grammar:** EXPRESSION := VALUE* | VALUE BINOP EXPRESSION** VALUE := '(' EXPRESSION ')'* | '!' VALUE* | '-' VALUE* | 'defined' '(' variable ')'* | variable* | number** BINOP := '*' | '/' | '%'* | '+' | '-'* | '<<' | '>>'* | '<' | '>' | '<=' | '>='* | '==' | '!='* | '&' | '|'* | '&&' | '||'** The normal C order of precidence is supported.*** External Entry Points:** ParseIfExpression parse a string for #if*/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#define const /**/typedef int Bool;#define False 0#define True 1typedef struct _if_parser {struct { /* functions */char *(*handle_error) (/* struct _if_parser *, const char *,const char * */);int (*eval_variable) (/* struct _if_parser *, const char *, int */);int (*eval_defined) (/* struct _if_parser *, const char *, int */);} funcs;char *data;} IfParser;char *ParseIfExpression (#ifdef __STDC__IfParser *,const char *,long *#endif);