/* * 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 #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STDLIB_H #include #endif #ifdef HAVE_MALLOC_H #include #endif #ifdef HAVE_GETOPT_H #include #endif #include #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 */