Blame


1 8ad51794 2004-03-25 devnull #include <u.h>
2 8ad51794 2004-03-25 devnull #include <libc.h>
3 8ad51794 2004-03-25 devnull #include <bio.h>
4 8ad51794 2004-03-25 devnull
5 8ad51794 2004-03-25 devnull #ifndef EXTERN
6 8ad51794 2004-03-25 devnull #define EXTERN extern
7 8ad51794 2004-03-25 devnull #endif
8 8ad51794 2004-03-25 devnull
9 8ad51794 2004-03-25 devnull typedef struct Re Re;
10 8ad51794 2004-03-25 devnull typedef struct Re2 Re2;
11 8ad51794 2004-03-25 devnull typedef struct State State;
12 8ad51794 2004-03-25 devnull
13 8ad51794 2004-03-25 devnull struct State
14 8ad51794 2004-03-25 devnull {
15 8ad51794 2004-03-25 devnull int count;
16 8ad51794 2004-03-25 devnull int match;
17 8ad51794 2004-03-25 devnull Re** re;
18 8ad51794 2004-03-25 devnull State* linkleft;
19 8ad51794 2004-03-25 devnull State* linkright;
20 8ad51794 2004-03-25 devnull State* next[256];
21 8ad51794 2004-03-25 devnull };
22 8ad51794 2004-03-25 devnull struct Re2
23 8ad51794 2004-03-25 devnull {
24 8ad51794 2004-03-25 devnull Re* beg;
25 8ad51794 2004-03-25 devnull Re* end;
26 8ad51794 2004-03-25 devnull };
27 8ad51794 2004-03-25 devnull struct Re
28 8ad51794 2004-03-25 devnull {
29 8ad51794 2004-03-25 devnull uchar type;
30 8ad51794 2004-03-25 devnull ushort gen;
31 8ad51794 2004-03-25 devnull union
32 8ad51794 2004-03-25 devnull {
33 8ad51794 2004-03-25 devnull Re* alt; /* Talt */
34 8ad51794 2004-03-25 devnull Re** cases; /* case */
35 8ad51794 2004-03-25 devnull struct /* class */
36 8ad51794 2004-03-25 devnull {
37 8ad51794 2004-03-25 devnull Rune lo;
38 8ad51794 2004-03-25 devnull Rune hi;
39 285b4f85 2004-03-25 devnull } x;
40 8ad51794 2004-03-25 devnull Rune val; /* char */
41 285b4f85 2004-03-25 devnull } u;
42 8ad51794 2004-03-25 devnull Re* next;
43 8ad51794 2004-03-25 devnull };
44 8ad51794 2004-03-25 devnull
45 8ad51794 2004-03-25 devnull enum
46 8ad51794 2004-03-25 devnull {
47 8ad51794 2004-03-25 devnull Talt = 1,
48 8ad51794 2004-03-25 devnull Tbegin,
49 8ad51794 2004-03-25 devnull Tcase,
50 8ad51794 2004-03-25 devnull Tclass,
51 8ad51794 2004-03-25 devnull Tend,
52 8ad51794 2004-03-25 devnull Tor,
53 8ad51794 2004-03-25 devnull
54 8ad51794 2004-03-25 devnull Caselim = 7,
55 8ad51794 2004-03-25 devnull Nhunk = 1<<16,
56 8ad51794 2004-03-25 devnull Cbegin = 0x10000,
57 8ad51794 2004-03-25 devnull Flshcnt = (1<<9)-1,
58 8ad51794 2004-03-25 devnull
59 8ad51794 2004-03-25 devnull Cflag = 1<<0,
60 8ad51794 2004-03-25 devnull Hflag = 1<<1,
61 8ad51794 2004-03-25 devnull Iflag = 1<<2,
62 8ad51794 2004-03-25 devnull Llflag = 1<<3,
63 8ad51794 2004-03-25 devnull LLflag = 1<<4,
64 8ad51794 2004-03-25 devnull Nflag = 1<<5,
65 8ad51794 2004-03-25 devnull Sflag = 1<<6,
66 8ad51794 2004-03-25 devnull Vflag = 1<<7,
67 8ad51794 2004-03-25 devnull Bflag = 1<<8
68 8ad51794 2004-03-25 devnull };
69 8ad51794 2004-03-25 devnull
70 8ad51794 2004-03-25 devnull EXTERN union
71 8ad51794 2004-03-25 devnull {
72 8ad51794 2004-03-25 devnull char string[16*1024];
73 8ad51794 2004-03-25 devnull struct
74 8ad51794 2004-03-25 devnull {
75 8ad51794 2004-03-25 devnull /*
76 8ad51794 2004-03-25 devnull * if a line requires multiple reads, we keep shifting
77 8ad51794 2004-03-25 devnull * buf down into pre and then do another read into
78 8ad51794 2004-03-25 devnull * buf. so you'll get the last 16-32k of the matching line.
79 1a84af59 2004-03-25 devnull * if h were smaller than buf you'd get a suffix of the
80 8ad51794 2004-03-25 devnull * line with a hole cut out.
81 8ad51794 2004-03-25 devnull */
82 8ad51794 2004-03-25 devnull uchar pre[16*1024]; /* to save to previous '\n' */
83 8ad51794 2004-03-25 devnull uchar buf[16*1024]; /* input buffer */
84 1a84af59 2004-03-25 devnull } u;
85 8ad51794 2004-03-25 devnull } u;
86 8ad51794 2004-03-25 devnull
87 8ad51794 2004-03-25 devnull EXTERN char *filename;
88 8ad51794 2004-03-25 devnull EXTERN Biobuf bout;
89 8ad51794 2004-03-25 devnull EXTERN char flags[256];
90 8ad51794 2004-03-25 devnull EXTERN Re** follow;
91 8ad51794 2004-03-25 devnull EXTERN ushort gen;
92 8ad51794 2004-03-25 devnull EXTERN char* input;
93 8ad51794 2004-03-25 devnull EXTERN long lineno;
94 8ad51794 2004-03-25 devnull EXTERN int literal;
95 8ad51794 2004-03-25 devnull EXTERN int matched;
96 8ad51794 2004-03-25 devnull EXTERN long maxfollow;
97 8ad51794 2004-03-25 devnull EXTERN long nfollow;
98 8ad51794 2004-03-25 devnull EXTERN int peekc;
99 8ad51794 2004-03-25 devnull EXTERN Biobuf* rein;
100 8ad51794 2004-03-25 devnull EXTERN State* state0;
101 8ad51794 2004-03-25 devnull EXTERN Re2 topre;
102 8ad51794 2004-03-25 devnull
103 8ad51794 2004-03-25 devnull extern Re* addcase(Re*);
104 8ad51794 2004-03-25 devnull extern void appendnext(Re*, Re*);
105 8ad51794 2004-03-25 devnull extern void error(char*);
106 8ad51794 2004-03-25 devnull extern int fcmp(const void*, const void*); /* (Re**, Re**) */
107 8ad51794 2004-03-25 devnull extern void fol1(Re*, int);
108 8ad51794 2004-03-25 devnull extern int getrec(void);
109 8ad51794 2004-03-25 devnull extern void increment(State*, int);
110 8ad51794 2004-03-25 devnull #define initstate grepinitstate
111 8ad51794 2004-03-25 devnull extern State* initstate(Re*);
112 8ad51794 2004-03-25 devnull extern void* mal(int);
113 8ad51794 2004-03-25 devnull extern void patchnext(Re*, Re*);
114 8ad51794 2004-03-25 devnull extern Re* ral(int);
115 8ad51794 2004-03-25 devnull extern Re2 re2cat(Re2, Re2);
116 8ad51794 2004-03-25 devnull extern Re2 re2class(char*);
117 8ad51794 2004-03-25 devnull extern Re2 re2or(Re2, Re2);
118 8ad51794 2004-03-25 devnull extern Re2 re2char(int, int);
119 8ad51794 2004-03-25 devnull extern Re2 re2star(Re2);
120 8ad51794 2004-03-25 devnull extern State* sal(int);
121 8ad51794 2004-03-25 devnull extern int search(char*, int);
122 8ad51794 2004-03-25 devnull extern void str2top(char*);
123 8ad51794 2004-03-25 devnull extern int yyparse(void);
124 8ad51794 2004-03-25 devnull extern void reprint(char*, Re*);
125 8ad51794 2004-03-25 devnull extern void yyerror(char*, ...);