xref: /plan9/sys/src/cmd/grep/grep.h (revision 82726826a7b3d40fb66339b4b0e95b60314f98b9)
17dd7cddfSDavid du Colombier #include	<u.h>
27dd7cddfSDavid du Colombier #include	<libc.h>
37dd7cddfSDavid du Colombier #include	<bio.h>
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier #ifndef	EXTERN
67dd7cddfSDavid du Colombier #define	EXTERN	extern
77dd7cddfSDavid du Colombier #endif
87dd7cddfSDavid du Colombier 
97dd7cddfSDavid du Colombier typedef	struct	Re	Re;
107dd7cddfSDavid du Colombier typedef	struct	Re2	Re2;
117dd7cddfSDavid du Colombier typedef	struct	State	State;
127dd7cddfSDavid du Colombier 
137dd7cddfSDavid du Colombier struct	State
147dd7cddfSDavid du Colombier {
157dd7cddfSDavid du Colombier 	int	count;
1680ee5cbfSDavid du Colombier 	int	match;
177dd7cddfSDavid du Colombier 	Re**	re;
187dd7cddfSDavid du Colombier 	State*	linkleft;
197dd7cddfSDavid du Colombier 	State*	linkright;
2080ee5cbfSDavid du Colombier 	State*	next[256];
217dd7cddfSDavid du Colombier };
227dd7cddfSDavid du Colombier struct	Re2
237dd7cddfSDavid du Colombier {
247dd7cddfSDavid du Colombier 	Re*	beg;
257dd7cddfSDavid du Colombier 	Re*	end;
267dd7cddfSDavid du Colombier };
277dd7cddfSDavid du Colombier struct	Re
287dd7cddfSDavid du Colombier {
297dd7cddfSDavid du Colombier 	uchar	type;
307dd7cddfSDavid du Colombier 	ushort	gen;
317dd7cddfSDavid du Colombier 	union
327dd7cddfSDavid du Colombier 	{
337dd7cddfSDavid du Colombier 		Re*	alt;	/* Talt */
347dd7cddfSDavid du Colombier 		Re**	cases;	/* case */
357dd7cddfSDavid du Colombier 		struct		/* class */
367dd7cddfSDavid du Colombier 		{
377dd7cddfSDavid du Colombier 			Rune	lo;
387dd7cddfSDavid du Colombier 			Rune	hi;
397dd7cddfSDavid du Colombier 		};
407dd7cddfSDavid du Colombier 		Rune	val;	/* char */
417dd7cddfSDavid du Colombier 	};
427dd7cddfSDavid du Colombier 	Re*	next;
437dd7cddfSDavid du Colombier };
447dd7cddfSDavid du Colombier 
457dd7cddfSDavid du Colombier enum
467dd7cddfSDavid du Colombier {
477dd7cddfSDavid du Colombier 	Talt		= 1,
487dd7cddfSDavid du Colombier 	Tbegin,
497dd7cddfSDavid du Colombier 	Tcase,
507dd7cddfSDavid du Colombier 	Tclass,
517dd7cddfSDavid du Colombier 	Tend,
527dd7cddfSDavid du Colombier 	Tor,
537dd7cddfSDavid du Colombier 
547dd7cddfSDavid du Colombier 	Caselim		= 7,
557dd7cddfSDavid du Colombier 	Nhunk		= 1<<16,
56*82726826SDavid du Colombier 	Cbegin		= Runemax+1,
5759cc4ca5SDavid du Colombier 	Flshcnt		= (1<<9)-1,
587dd7cddfSDavid du Colombier 
597dd7cddfSDavid du Colombier 	Cflag		= 1<<0,
607dd7cddfSDavid du Colombier 	Hflag		= 1<<1,
617dd7cddfSDavid du Colombier 	Iflag		= 1<<2,
627dd7cddfSDavid du Colombier 	Llflag		= 1<<3,
637dd7cddfSDavid du Colombier 	LLflag		= 1<<4,
647dd7cddfSDavid du Colombier 	Nflag		= 1<<5,
657dd7cddfSDavid du Colombier 	Sflag		= 1<<6,
6659cc4ca5SDavid du Colombier 	Vflag		= 1<<7,
6759cc4ca5SDavid du Colombier 	Bflag		= 1<<8
687dd7cddfSDavid du Colombier };
697dd7cddfSDavid du Colombier 
707dd7cddfSDavid du Colombier EXTERN	union
717dd7cddfSDavid du Colombier {
727dd7cddfSDavid du Colombier 	char	string[16*1024];
737dd7cddfSDavid du Colombier 	struct
747dd7cddfSDavid du Colombier 	{
75867bfcc6SDavid du Colombier 		/*
76867bfcc6SDavid du Colombier 		 * if a line requires multiple reads, we keep shifting
77867bfcc6SDavid du Colombier 		 * buf down into pre and then do another read into
78867bfcc6SDavid du Colombier 		 * buf.  so you'll get the last 16-32k of the matching line.
79867bfcc6SDavid du Colombier 		 * if pre were smaller than buf you'd get a suffix of the
80867bfcc6SDavid du Colombier 		 * line with a hole cut out.
81867bfcc6SDavid du Colombier 		 */
82867bfcc6SDavid du Colombier 		uchar	pre[16*1024];	/* to save to previous '\n' */
837dd7cddfSDavid du Colombier 		uchar	buf[16*1024];	/* input buffer */
847dd7cddfSDavid du Colombier 	};
857dd7cddfSDavid du Colombier } u;
867dd7cddfSDavid du Colombier 
877dd7cddfSDavid du Colombier EXTERN	char	*filename;
8882bf8890SDavid du Colombier EXTERN	char	*pattern;
897dd7cddfSDavid du Colombier EXTERN	Biobuf	bout;
907dd7cddfSDavid du Colombier EXTERN	char	flags[256];
917dd7cddfSDavid du Colombier EXTERN	Re**	follow;
927dd7cddfSDavid du Colombier EXTERN	ushort	gen;
937dd7cddfSDavid du Colombier EXTERN	char*	input;
947dd7cddfSDavid du Colombier EXTERN	long	lineno;
957dd7cddfSDavid du Colombier EXTERN	int	literal;
967dd7cddfSDavid du Colombier EXTERN	int	matched;
977dd7cddfSDavid du Colombier EXTERN	long	maxfollow;
987dd7cddfSDavid du Colombier EXTERN	long	nfollow;
997dd7cddfSDavid du Colombier EXTERN	int	peekc;
1007dd7cddfSDavid du Colombier EXTERN	Biobuf*	rein;
1017dd7cddfSDavid du Colombier EXTERN	State*	state0;
1027dd7cddfSDavid du Colombier EXTERN	Re2	topre;
1037dd7cddfSDavid du Colombier 
1047dd7cddfSDavid du Colombier extern	Re*	addcase(Re*);
1057dd7cddfSDavid du Colombier extern	void	appendnext(Re*, Re*);
1067dd7cddfSDavid du Colombier extern	void	error(char*);
1077dd7cddfSDavid du Colombier extern	int	fcmp(void*, void*); 	/* (Re**, Re**) */
1087dd7cddfSDavid du Colombier extern	void	fol1(Re*, int);
1097dd7cddfSDavid du Colombier extern	int	getrec(void);
1107dd7cddfSDavid du Colombier extern	void	increment(State*, int);
1117dd7cddfSDavid du Colombier extern	State*	initstate(Re*);
1127dd7cddfSDavid du Colombier extern	void*	mal(int);
1137dd7cddfSDavid du Colombier extern	void	patchnext(Re*, Re*);
1147dd7cddfSDavid du Colombier extern	Re*	ral(int);
1157dd7cddfSDavid du Colombier extern	Re2	re2cat(Re2, Re2);
1167dd7cddfSDavid du Colombier extern	Re2	re2class(char*);
1177dd7cddfSDavid du Colombier extern	Re2	re2or(Re2, Re2);
1187dd7cddfSDavid du Colombier extern	Re2	re2char(int, int);
1197dd7cddfSDavid du Colombier extern	Re2	re2star(Re2);
1207dd7cddfSDavid du Colombier extern	State*	sal(int);
1217dd7cddfSDavid du Colombier extern	int	search(char*, int);
1227dd7cddfSDavid du Colombier extern	void	str2top(char*);
1237dd7cddfSDavid du Colombier extern	int	yyparse(void);
1247dd7cddfSDavid du Colombier extern	void	reprint(char*, Re*);
1257dd7cddfSDavid du Colombier extern	void	yyerror(char*, ...);
126