/*	parse.h								*/
/*    Structures, etc for parse/test module				*/

#define PARSEH_VERSION "parse.h v 2.2 20 May 2009 "
/*  22 May 09 v 2.2	WJS						*/
/*	Reparametrize a couple of arrays				*/
/*	Get rid of multi-precision stuff.  Able to do this by insisting	*/
/*	  that iovaldouble_ be present					*/
/*  18 Apr 09 v 2.1	WJS						*/
/*	Define varnames_in_sel according to precision			*/
/*   3 Apr 09 v 2.1	WJS						*/
/*	Add some functions to parse_function_struct			*/
/*  14 Feb 09 v 2.0	WJS						*/
/*	Define function entries according to precision			*/
/*	Add ".h" to PARSEH_VERSION					*/
/*	Include precision info in version				*/
/*  20 Jul 07 v 1.0							*/

#include "core.h"

#define N_JG_SEL_TESTS 100	/* Number of relational ops; eg <=	*/
#define N_JG_SEL_OPERATIONS N_JG_SEL_TESTS+50 /* Number of ops; incl &s	*/

#ifdef USE_DOUBLE
#if USE_DOUBLE
#warning "USE_DOUBLE macro obsolete.  Please remove at your convenience. \
See readme.outer"
#else
#error "USE_DOUBLE=FALSE no longer possible.  Function iovaldouble_ needed.  \
See readme.outer"
#endif
#endif

#define FULL_PARSEH_VERSION PARSEH_VERSION"/"COREH_VERSION

struct parse_test_struct {
  int testlev;
  int testvar;
  int testcode;
  double testval;
  char *teststr;
  char *upteststr;
  int lenteststr;
  int testres;
  Logical case_sensitive;
};

struct parse_data {
  int tstcnt;
  int tstproccnt;
  struct parse_test_struct tst[N_JG_SEL_TESTS];
  int tstproc[N_JG_SEL_OPERATIONS];
};

  /*  When parse was part of outer, functions below were in outer	*/
  /*  (except for iovarlevel_ which is documented in outer)		*/
  /*  If parse is NOT called from outer, the equivalent functions must	*/
  /*  be defined.  See the commented function names in the outer source	*/
  /*  to see what these functions must do, their calling sequences, etc	*/
struct parse_functions {
  int (*varname_lookup)();	/*  See varname_lookup		*/
  int (*iovarlevel)();	/*  See iovarlevel_			*/
  void (*err)();	/*  See out_err				*/
  void (*errn)();	/*  See out_errn			*/
  void (*malloc_err)();	/*  See malloc_err			*/
};
