80122b05df9b6bee0f89cecf99cf4303f0833af4
   1#ifndef GREP_H
   2#define GREP_H
   3
   4enum grep_pat_token {
   5        GREP_PATTERN,
   6        GREP_AND,
   7        GREP_OPEN_PAREN,
   8        GREP_CLOSE_PAREN,
   9        GREP_NOT,
  10        GREP_OR,
  11};
  12
  13struct grep_pat {
  14        struct grep_pat *next;
  15        const char *origin;
  16        int no;
  17        enum grep_pat_token token;
  18        const char *pattern;
  19        regex_t regexp;
  20};
  21
  22enum grep_expr_node {
  23        GREP_NODE_ATOM,
  24        GREP_NODE_NOT,
  25        GREP_NODE_AND,
  26        GREP_NODE_OR,
  27};
  28
  29struct grep_expr {
  30        enum grep_expr_node node;
  31        union {
  32                struct grep_pat *atom;
  33                struct grep_expr *unary;
  34                struct {
  35                        struct grep_expr *left;
  36                        struct grep_expr *right;
  37                } binary;
  38        } u;
  39};
  40
  41struct grep_opt {
  42        struct grep_pat *pattern_list;
  43        struct grep_pat **pattern_tail;
  44        struct grep_expr *pattern_expression;
  45        int prefix_length;
  46        regex_t regexp;
  47        unsigned linenum:1;
  48        unsigned invert:1;
  49        unsigned status_only:1;
  50        unsigned name_only:1;
  51        unsigned unmatch_name_only:1;
  52        unsigned count:1;
  53        unsigned word_regexp:1;
  54        unsigned fixed:1;
  55#define GREP_BINARY_DEFAULT     0
  56#define GREP_BINARY_NOMATCH     1
  57#define GREP_BINARY_TEXT        2
  58        unsigned binary:2;
  59        unsigned extended:1;
  60        unsigned relative:1;
  61        unsigned pathname:1;
  62        int regflags;
  63        unsigned pre_context;
  64        unsigned post_context;
  65};
  66
  67extern void append_grep_pattern(struct grep_opt *opt, const char *pat, const char *origin, int no, enum grep_pat_token t);
  68extern void compile_grep_patterns(struct grep_opt *opt);
  69extern int grep_buffer(struct grep_opt *opt, const char *name, char *buf, unsigned long size);
  70
  71#endif