diff options
Diffstat (limited to 'util/parse.h')
-rw-r--r-- | util/parse.h | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/util/parse.h b/util/parse.h new file mode 100644 index 0000000..58339f0 --- /dev/null +++ b/util/parse.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2004 Smithsonian Astrophysical Observatory + */ + +/* + * + * parse.h - include file for the indexed man pager + * + */ + +#ifndef __parse_h +#define __parse_h + +#if HAVE_CONFIG_H +#include "conf.h" +#endif + +#include <stdio.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#ifdef HAVE_STRING_H +#include <string.h> +#endif +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif +#ifdef HAVE_MALLOC_H +#include <malloc.h> +#endif +#ifdef HAVE_GETOPT_H +#include <getopt.h> +#endif +#include <ctype.h> + +#include "prsetup.h" +#include "strtod.h" +#include "xalloc.h" +#include "word.h" +#include "gio.h" +#include "longlong.h" + +#define PARSE_DEBUG 1 +#if PARSE_DEBUG +#define FPRINTF(x) fprintf x +#define PERROR(x) perror x +#else +#define FPRINTF(x) +#define PERROR(x) +#endif + +#define PARSE_TABLE_SIZE 256 +#define PARSE_TOKEN_INCR 1024 +#define PARSE_DEFAULT_DELIMS " \t\n" +#define PARSE_DEFAULT_COMCHARS "#\n" +#define PARSE_DEFAULT_CONVERT 1 +#define PARSE_DEFAULT_NULLVALUES "nullvalue=false" +#define PARSE_DEFAULT_WHITESPACE "whitespace=true" +#define PARSE_DEFAULT_UNITS "units=false" +#define PARSE_DEFAULT_COMEOT "comeot=1" +#define PARSE_DEFAULT_LAZYEOT "lazyeot=1" +#define PARSE_DEFAULT_ALEN 16 + +/* token types */ +#define PARSE_COMMENT 'c' +#define PARSE_DASH 'd' +#define PARSE_EOL 'e' +#define PARSE_FLOAT 'f' +#define PARSE_HEXINT 'h' +#define PARSE_INTEGER 'i' +#define PARSE_NULL 'n' +#define PARSE_STRING 's' +#define PARSE_EOT 'z' + + +/* machine states */ +#define PARSE_STATE_INITIAL 1 +#define PARSE_STATE_STRING 2 +#define PARSE_STATE_DATA 4 +#define PARSE_STATE_BADMATCH 8 +#define PARSE_STATE_BADMAX 16 +#define PARSE_STATE_BADTYPE 32 +#define PARSE_STATE_NEXTLINE 64 +#define PARSE_STATE_REDOLINE 128 +#define PARSE_STATE_UNKNOWN 256 +#define PARSE_STATE_EOT 512 + +/* define if a change from numeric columns to an ascii column signals EOT, + instead of BADTYPE */ +#define PARSE_LOOSELY 1 + +#define PARSE_STATE_BAD (PARSE_STATE_BADMATCH|PARSE_STATE_BADMAX|PARSE_STATE_BADTYPE|PARSE_STATE_UNKNOWN) +#define PARSE_ISCOMMENT(line) (line->types[0] == PARSE_COMMENT) + +typedef struct parsedtokenRec{ + char *sval; + double dval; + longlong lval; + int type; + int delim; +} *ParsedToken, ParsedTokenRec; + +typedef struct parsedlineRec{ + int state; + int ntoken; + char *types; + int ntypes[PARSE_TABLE_SIZE]; + int maxtoken; + ParsedToken tokens; +} *ParsedLine, ParsedLineRec; + +typedef struct eotRec{ + int nline; + int maxline; + int ncur; + char **lines; +} *ParsedEOT, ParsedEOTRec; + +typedef struct parseRec{ + char *delims; + char *comchars; + char *mode; + int debug; + int delimtab[PARSE_TABLE_SIZE]; + int comtab[PARSE_TABLE_SIZE]; + ParsedEOT eot; + int nullvalues; + int whitespace; + int needheader; + int needunits; + int comeot; + int lazyeot; + int i2f; + int convert; + int nline; + ParsedLine prev2; + ParsedLine prev; + ParsedLine cur; + ParsedLine header; + ParsedLine units; + ParsedLine data1; + int state; + int ntoken; + int data; + char *types; + ParsedToken tokens; +} *Parse, ParseRec; + +_PRbeg + +Parse ParseNew _PRx((char *delims, char *comchars, char *eot, char *mode)); + +ParsedLine ParseLineDup _PRx((Parse parse, ParsedLine line)); + +int ParseWord _PRx((int *delims, int *comtab, int nullvalues, int whitespace, + char *lbuf, void *token, int tmax, + int *lptr, int *lastd)); + +int ParseLine _PRx((Parse parse, char *lbuf, char *mode)); + +int ParseAnalyze _PRx((Parse *parsers, int nparser, char *lbuf)); + +int ParseReset _PRx((Parse parse, ParsedLine line, int state)); + +int ParseFree _PRx((Parse parse)); + +int ParseDataType _PRx((char *s, double *dval, longlong *ival)); + +_PRend + +#endif /* __parse.h */ |