#include #include #include #include "Ctree.h" #include "defs.h" #include "fsmsubs.h" extern FSMarg *_TMPFSM_getarg(void); static char *instring; void *tree_match_parse(const char *arg0, ...) { va_list ap; int L; int i; const char *txt; void *ptr; char num[12]; static void app(const char *s) { int l; l = strlen(s); instring = realloc(instring,L+l+1); strcpy(instring+L,s); L += l; } va_start(ap,arg0); if (instring) free(instring); instring = malloc(1); L = 0; i = 0; _TMP_ninptrs = 0; _TMP_inptrs = 0; txt = arg0; while (1) { app(txt); ptr = va_arg(ap,void *); if (ptr == 0) break; _TMP_inptrs = realloc(_TMP_inptrs,(_TMP_ninptrs+1)*sizeof(void *)); _TMP_inptrs[_TMP_ninptrs] = ptr; sprintf(&num[0],"%d",_TMP_ninptrs); _TMP_ninptrs ++; app(&num[0]); txt = va_arg(ap,const char *); } va_end(ap); instring[L] = '\0'; _TMP_init_fsmsubs(); if (_TMPFSM_(instring)) return(_TMP_current_tree); return(0); } const char *tree_match_err_at(void) { return(_TMPFSM_getarg()->string); } void _TMP_debug_trace(int state __attribute__((__unused__)), const char *name __attribute__((__unused__))) { #ifdef TRACE_PARSE printf("%s (%d) string %s\n",name,state,tree_match_err_at()); #endif } void _TMP_debug_action(const char *what __attribute__((__unused__))) { #ifdef TRACE_PARSE printf("Calling %s\n",what); #endif }