summaryrefslogtreecommitdiffstats
path: root/funtools/util/parse.h
diff options
context:
space:
mode:
Diffstat (limited to 'funtools/util/parse.h')
-rw-r--r--funtools/util/parse.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/funtools/util/parse.h b/funtools/util/parse.h
new file mode 100644
index 0000000..58339f0
--- /dev/null
+++ b/funtools/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 */