|  |  | 
|  | enum{ | 
|  | Dump		= 0,		/* Actions must be in order of descending importance */ | 
|  | HoldHeader, | 
|  | Hold, | 
|  | SaveLine, | 
|  | Lineoff,			/* Lineoff must be the last action code */ | 
|  | Nactions, | 
|  |  | 
|  | Nhash		= 128, | 
|  |  | 
|  | regexp		= 1,		/* types: literal string or regular expression */ | 
|  | string		= 2, | 
|  |  | 
|  | MaxHtml		= 256, | 
|  | Hdrsize		= 4096, | 
|  | Bodysize	= 8192, | 
|  | Maxread		= 64*1024 | 
|  | }; | 
|  |  | 
|  | typedef struct spat 	Spat; | 
|  | typedef struct pattern	Pattern; | 
|  | typedef	struct patterns	Patterns; | 
|  | struct	spat | 
|  | { | 
|  | char*	string; | 
|  | int	len; | 
|  | int	c1; | 
|  | Spat*	next; | 
|  | Spat*	alt; | 
|  | }; | 
|  |  | 
|  | struct	pattern{ | 
|  | struct	pattern *next; | 
|  | int	action; | 
|  | int	type; | 
|  | Spat*	alt; | 
|  | union{ | 
|  | Reprog*	pat; | 
|  | Spat*	spat[Nhash]; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | struct	patterns { | 
|  | char	*action; | 
|  | Pattern	*strings; | 
|  | Pattern	*regexps; | 
|  | }; | 
|  |  | 
|  | extern	int	debug; | 
|  | extern	Patterns patterns[]; | 
|  | extern	char	header[]; | 
|  | extern	char	cmd[]; | 
|  |  | 
|  | extern	void	conv64(char*, char*, char*, int); | 
|  | extern	int	convert(char*, char*, char*, int, int); | 
|  | extern	void*	Malloc(long n); | 
|  | extern	int	matchpat(Pattern*, char*, Resub*); | 
|  | extern	char*	readmsg(Biobuf*, int*, int*); | 
|  | extern	void	parsepats(Biobuf*); | 
|  | extern	void*	Realloc(void*, ulong); | 
|  | extern	void	xprint(int, char*, Resub*); |