|
|
1.1 ! root 1: #ifndef RE_H ! 2: #define RE_H ! 3: ! 4: # if defined(__cplusplus) ! 5: extern "C" { /* C++ 2.0 */ ! 6: # endif ! 7: ! 8: typedef struct re_bm ! 9: { ! 10: int delta0[256], *delta2; ! 11: unsigned char cmap[256]; ! 12: char *bmpat; ! 13: int patlen; ! 14: } re_bm; ! 15: ! 16: typedef struct re_cw ! 17: { ! 18: int maxdepth, mindepth; ! 19: char seenerror; /* set if we called re_error */ ! 20: long nodeid; ! 21: int step[256]; ! 22: unsigned char map[256]; ! 23: struct Node *root; ! 24: } re_cw; ! 25: ! 26: typedef enum ! 27: { ! 28: Literal, Dot, Carat, Dollar, Charclass, Compcharclass, /* 0-5 */ ! 29: Cat, Alternate, Star, Plus, Quest, Backref, Group, EOP, /* 6-13 */ ! 30: /* not in grammar, just helping */ ! 31: Lpar, Rpar, Backslash, Null ! 32: } Exprtype; ! 33: ! 34: typedef struct Expr ! 35: { ! 36: Exprtype type; ! 37: char reallit; /* just for dollar and -G, dammit! */ ! 38: char backref; /* backref used here or below */ ! 39: char parens; /* parens used here or below */ ! 40: char seenerror; /* set if we called re_error */ ! 41: int id; ! 42: unsigned int lit; ! 43: long flen; ! 44: int *follow; ! 45: struct Expr *l, *r, *parent; ! 46: } Expr; ! 47: typedef enum Parsetype { greparse, grepparse, egrepparse } Parsetype; ! 48: ! 49: #define RE_DOLLAR 256 ! 50: #define RE_CARAT 257 ! 51: #define RE_HIGH 258 /* always 1+last constant */ ! 52: ! 53: typedef struct State ! 54: { ! 55: struct State *tab[RE_HIGH]; ! 56: char out; /* matched */ ! 57: char init; /* inital state */ ! 58: long npos; ! 59: int pos; /* index into posbase */ ! 60: } State; ! 61: ! 62: typedef struct Positionset ! 63: { ! 64: long count; ! 65: int last; ! 66: int *base; ! 67: } Positionset; ! 68: ! 69: typedef enum { ! 70: br_re, br_group, br_br, br_cat, br_alt, br_star, br_plus, br_quest ! 71: } Br_type; ! 72: ! 73: typedef struct Br ! 74: { ! 75: Br_type type; ! 76: Expr *e; ! 77: int group; ! 78: struct re_re *r; ! 79: struct Br *lb, *rb; ! 80: } Br; ! 81: ! 82: typedef struct re_re ! 83: { ! 84: int *posbase; ! 85: int nposalloc, posnext, posreset; ! 86: int maxid; ! 87: Expr *root; ! 88: Expr **ptr; ! 89: unsigned char mymap[256]; ! 90: Positionset firstpos, begin, tmp; ! 91: int nstates, statelim; ! 92: State *states; ! 93: State istate; ! 94: int initialstate; ! 95: int carat; ! 96: int flushed; ! 97: int threshhold; /* resize cache every threshhold flushes */ ! 98: int backref; ! 99: int parens; ! 100: Br *br; ! 101: } re_re; ! 102: ! 103: /* ! 104: matching routine endpoint markers ! 105: */ ! 106: #define RE_BEG 1 /* beginning matches ^ */ ! 107: #define RE_END 2 /* end matches $ */ ! 108: ! 109: # ifdef USE_STDIO ! 110: # include <stdio.h> ! 111: # if defined(__STDC__) || defined(c_plusplus) || defined(__cplusplus) ! 112: extern void re_refile(re_re*, FILE*); ! 113: extern re_re *re_filere(FILE*); ! 114: # else ! 115: extern void re_refile(); ! 116: extern re_re *re_filere(); ! 117: # endif ! 118: # endif /* USE_STDIO */ ! 119: ! 120: # if defined(__STDC__) || defined(c_plusplus) || defined(__cplusplus) ! 121: # define VOID void ! 122: typedef int (*RDFN)(char**, char**); ! 123: typedef int (*MATCHFN)(char**,char**); ! 124: typedef int (*PROCFN)(VOID*, RDFN, MATCHFN); ! 125: extern re_bm *re_bmcomp(char*, char*, unsigned char*); ! 126: extern int re_bmexec(VOID*, RDFN, MATCHFN); ! 127: extern void re_bmfree(re_bm*); ! 128: extern void re_cwadd(re_cw*, unsigned char*, unsigned char*); ! 129: extern void re_cwcomp(re_cw*); ! 130: extern int re_cwexec(VOID*, RDFN, MATCHFN); ! 131: extern void re_cwfree(re_cw*); ! 132: extern re_cw *re_cwinit(unsigned char*); ! 133: extern void re_error(char*); ! 134: extern int re_paren(re_re *e); ! 135: extern re_re *re_recomp(char*, char*, unsigned char*); ! 136: extern re_cw *re_recw(re_re*, unsigned char*); ! 137: extern int re_reexec(re_re*, char*, char*, char*[10][2]); ! 138: extern void re_refree(re_re*); ! 139: #else ! 140: # define VOID char ! 141: typedef int (*RDFN)(); ! 142: typedef int (*MATCHFN)(); ! 143: typedef int (*PROCFN)(); ! 144: extern re_bm *re_bmcomp(); ! 145: extern int re_bmexec(); ! 146: extern void re_bmfree(); ! 147: extern void re_cwadd(); ! 148: extern void re_cwcomp(); ! 149: extern int re_cwexec(); ! 150: extern void re_cwfree(); ! 151: extern re_cw *re_cwinit(); ! 152: extern void re_error(); ! 153: extern int re_paren(); ! 154: extern re_re *re_recomp(); ! 155: extern re_cw *re_recw(); ! 156: extern int re_reexec(); ! 157: extern void re_refree(); ! 158: # endif ! 159: ! 160: # if defined(__cplusplus) ! 161: } /* C++ 2.0 */ ! 162: # endif ! 163: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.