| %{ | 
 | /* | 
 |  * Help Viewer | 
 |  * | 
 |  * Copyright 1996 Ulrich Schmid | 
 |  */ | 
 |  | 
 | #include <stdlib.h> | 
 | #include "macro.h" | 
 |  | 
 | static int   skip = 0; | 
 | static LPSTR filename; | 
 | static LPSTR windowname; | 
 |  | 
 | %} | 
 | %union | 
 |   { | 
 |     BOOL    bool; | 
 |     LONG    integer; | 
 |     LPSTR   string; | 
 |     BOOL    (*bool_function_void)(VOID); | 
 |     BOOL    (*bool_function_string)(LPCSTR); | 
 |     VOID    (*void_function_void)(VOID); | 
 |     VOID    (*void_function_uint)(LONG); | 
 |     VOID    (*void_function_string)(LPCSTR); | 
 |     VOID    (*void_function_2int_3uint_string)(LONG,LONG,LONG,LONG,LONG,LPCSTR); | 
 |     VOID    (*void_function_2string)(LPCSTR,LPCSTR); | 
 |     VOID    (*void_function_2string_2uint_2string)(LPCSTR,LPCSTR,LONG,LONG,LPCSTR,LPCSTR); | 
 |     VOID    (*void_function_2string_uint)(LPCSTR,LPCSTR,LONG); | 
 |     VOID    (*void_function_2string_uint_string)(LPCSTR,LPCSTR,LONG,LPCSTR); | 
 |     VOID    (*void_function_2string_wparam_lparam_string)(LPCSTR,LPCSTR,WPARAM,LPARAM,LPCSTR); | 
 |     VOID    (*void_function_2uint)(LONG,LONG); | 
 |     VOID    (*void_function_2uint_string)(LONG,LONG,LPCSTR); | 
 |     VOID    (*void_function_3string)(LPCSTR,LPCSTR,LPCSTR); | 
 |     VOID    (*void_function_3string_2uint)(LPCSTR,LPCSTR,LPCSTR,LONG,LONG); | 
 |     VOID    (*void_function_3uint)(LONG,LONG,LONG); | 
 |     VOID    (*void_function_4string)(LPCSTR,LPCSTR,LPCSTR,LPCSTR); | 
 |     VOID    (*void_function_4string_2uint)(LPCSTR,LPCSTR,LPCSTR,LPCSTR,LONG,LONG); | 
 |     VOID    (*void_function_4string_uint)(LPCSTR,LPCSTR,LPCSTR,LPCSTR,LONG); | 
 |     VOID    (*void_function_string_uint)(LPCSTR,LONG); | 
 |     VOID    (*void_function_string_uint_2string)(LPCSTR,LONG,LPCSTR,LPCSTR); | 
 |     VOID    (*void_function_string_uint_string)(LPCSTR,LONG,LPCSTR); | 
 |     VOID    (*void_function_string_wparam_lparam)(LPCSTR,WPARAM,LPARAM); | 
 |   } | 
 | %token							NOT | 
 | %token 							IF_THEN | 
 | %token 							IF_THEN_ELSE | 
 | %token <string>	 					tSTRING | 
 | %token <integer> 					INTEGER | 
 | %token <bool_function_string>				BOOL_FUNCTION_STRING | 
 | %token <bool_function_void>				BOOL_FUNCTION_VOID | 
 | %token <void_function_2int_3uint_string>		VOID_FUNCTION_2INT_3UINT_STRING | 
 | %token <void_function_2string>				VOID_FUNCTION_2STRING | 
 | %token <void_function_2string_2uint_2string>		VOID_FUNCTION_2STRING_2UINT_2STRING | 
 | %token <void_function_2string_uint>			VOID_FUNCTION_2STRING_UINT | 
 | %token <void_function_2string_uint_string>		VOID_FUNCTION_2STRING_UINT_STRING | 
 | %token <void_function_2string_wparam_lparam_string>	VOID_FUNCTION_2STRING_WPARAM_LPARAM_STRING | 
 | %token <void_function_2uint>				VOID_FUNCTION_2UINT | 
 | %token <void_function_2uint_string>			VOID_FUNCTION_2UINT_STRING | 
 | %token <void_function_3string>				VOID_FUNCTION_3STRING | 
 | %token <void_function_3string_2uint>			VOID_FUNCTION_3STRING_2UINT | 
 | %token <void_function_3uint>				VOID_FUNCTION_3UINT | 
 | %token <void_function_4string>				VOID_FUNCTION_4STRING | 
 | %token <void_function_4string_2uint>			VOID_FUNCTION_4STRING_2UINT | 
 | %token <void_function_4string_uint>			VOID_FUNCTION_4STRING_UINT | 
 | %token <void_function_string>				VOID_FUNCTION_STRING | 
 | %token <void_function_string_uint>			VOID_FUNCTION_STRING_UINT | 
 | %token <void_function_string_uint_2string>		VOID_FUNCTION_STRING_UINT_2STRING | 
 | %token <void_function_string_uint_string>		VOID_FUNCTION_STRING_UINT_STRING | 
 | %token <void_function_string_wparam_lparam>		VOID_FUNCTION_STRING_WPARAM_LPARAM | 
 | %token <void_function_uint>				VOID_FUNCTION_UINT | 
 | %token <void_function_void>				VOID_FUNCTION_VOID | 
 | %token <void_function_2string>				VOID_FUNCTION_FILE_WIN | 
 | %token <void_function_3string>				VOID_FUNCTION_FILE_WIN_STRING | 
 | %token <void_function_2string_uint>			VOID_FUNCTION_FILE_WIN_UINT | 
 | %type  <bool> bool_macro | 
 | %% | 
 |  | 
 | macrostring:	macro | | 
 | 		macro macrosep macrostring ; | 
 |  | 
 | macrosep:	';' | | 
 | 		':' ; | 
 |  | 
 | macro:		/* Empty */ | | 
 | 		IF_THEN      '(' bool_macro ','  {if (! $3) skip++;} | 
 |                                  macrostring ')' {if (! $3) skip--;} | | 
 | 		IF_THEN_ELSE '(' bool_macro ','  {if (! $3) skip++;} | 
 |                                  macrostring ',' {if (! $3) skip--; else skip++;} | 
 |                                  macrostring ')' {if (  $3) skip--;} | | 
 | 		VOID_FUNCTION_VOID | 
 | 			'(' ')' | 
 | 			{if (! skip) (*$1)();} | | 
 | 		VOID_FUNCTION_STRING | 
 | 			'(' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3);} | | 
 | 		VOID_FUNCTION_2STRING | 
 | 			'(' tSTRING ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5);} | | 
 | 		VOID_FUNCTION_2STRING_UINT | 
 | 			'(' tSTRING ',' tSTRING ',' INTEGER ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7);} | | 
 | 		VOID_FUNCTION_2STRING_UINT_STRING | 
 | 			'(' tSTRING ',' tSTRING ',' INTEGER ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9);} | | 
 | 		VOID_FUNCTION_2STRING_2UINT_2STRING | 
 | 			'(' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER ',' tSTRING ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} | | 
 | 		VOID_FUNCTION_2STRING_WPARAM_LPARAM_STRING | 
 | 			'(' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9, $11);} | | 
 | 		VOID_FUNCTION_3STRING | 
 | 			'(' tSTRING ',' tSTRING ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7);} | | 
 | 		VOID_FUNCTION_3STRING_2UINT | 
 | 			'(' tSTRING ',' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9, $11);} | | 
 | 		VOID_FUNCTION_4STRING | 
 | 			'(' tSTRING ',' tSTRING ',' tSTRING ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9);} | | 
 | 		VOID_FUNCTION_4STRING_UINT | 
 | 			'(' tSTRING ',' tSTRING ',' tSTRING ',' tSTRING ',' INTEGER')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9, $11);} | | 
 | 		VOID_FUNCTION_4STRING_2UINT | 
 | 			'(' tSTRING ',' tSTRING ',' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} | | 
 | 		VOID_FUNCTION_STRING_UINT | 
 | 			'(' tSTRING ',' INTEGER ')' | 
 | 			{if (! skip) (*$1)($3, $5);} | | 
 | 		VOID_FUNCTION_STRING_UINT_STRING | 
 | 			'(' tSTRING ',' INTEGER ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7);} | | 
 | 		VOID_FUNCTION_STRING_UINT_2STRING | 
 | 			'(' tSTRING ',' INTEGER ',' tSTRING ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9);} | | 
 | 		VOID_FUNCTION_STRING_WPARAM_LPARAM | 
 | 			'(' tSTRING ',' INTEGER ',' INTEGER ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7);} | | 
 | 		VOID_FUNCTION_UINT | 
 | 			'(' INTEGER ')' | 
 | 			{if (! skip) (*$1)($3);} | | 
 | 		VOID_FUNCTION_2UINT | 
 | 			'(' INTEGER ',' INTEGER ')' | 
 | 			{if (! skip) (*$1)($3, $5);} | | 
 | 		VOID_FUNCTION_2UINT_STRING | 
 | 			'(' INTEGER ',' INTEGER ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7);} | | 
 | 		VOID_FUNCTION_3UINT | 
 | 			'(' INTEGER ',' INTEGER ',' INTEGER ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7);} | | 
 | 		VOID_FUNCTION_2INT_3UINT_STRING | 
 | 			'(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} | | 
 | 		VOID_FUNCTION_FILE_WIN | 
 | 			'(' file_win ')' | 
 | 			{if (! skip) (*$1)(filename, windowname);} | | 
 | 		VOID_FUNCTION_FILE_WIN_STRING | 
 | 			'(' file_win ',' tSTRING ')' | 
 | 			{if (! skip) (*$1)(filename, windowname, $5);} | | 
 | 		VOID_FUNCTION_FILE_WIN_UINT | 
 | 			'(' file_win ',' INTEGER ')' | 
 | 			{if (! skip) (*$1)(filename, windowname, $5);} ; | 
 |  | 
 | file_win:	tSTRING | 
 |                 { | 
 | 		  filename = windowname = $1; | 
 | 		  while (*windowname && *windowname != '>') windowname++; | 
 | 		  if (*windowname) *windowname++ = 0; | 
 | 		} ; | 
 |  | 
 | bool_macro:     NOT '(' bool_macro ')' {$$ = ! $3;} | | 
 | 		tSTRING {$$ = MACRO_IsMark($1);} | | 
 | 		BOOL_FUNCTION_VOID '(' ')' {$$ = (*$1)();} | | 
 | 		BOOL_FUNCTION_STRING '(' tSTRING ')' {$$ = (*$1)($3);} ; |