| typedef struct Exec Exec; | 
 | typedef struct Rule Rule; | 
 | typedef struct Ruleset Ruleset; | 
 |  | 
 | /* | 
 |  * Object | 
 |  */ | 
 | enum | 
 | { | 
 | 	OArg, | 
 | 	OAttr, | 
 | 	OData, | 
 | 	ODst, | 
 | 	OPlumb, | 
 | 	OSrc, | 
 | 	OType, | 
 | 	OWdir | 
 | }; | 
 |  | 
 | /* | 
 |  * Verbs | 
 |  */ | 
 | enum | 
 | { | 
 | 	VAdd,	/* apply to OAttr only */ | 
 | 	VClient, | 
 | 	VDelete,	/* apply to OAttr only */ | 
 | 	VIs, | 
 | 	VIsdir, | 
 | 	VIsfile, | 
 | 	VMatches, | 
 | 	VSet, | 
 | 	VStart, | 
 | 	VTo | 
 | }; | 
 |  | 
 | struct Rule | 
 | { | 
 | 	int	obj; | 
 | 	int	verb; | 
 | 	char	*arg;		/* unparsed string of all arguments */ | 
 | 	char	*qarg;	/* quote-processed arg string */ | 
 | 	Reprog	*regex; | 
 | }; | 
 |  | 
 | struct Ruleset | 
 | { | 
 | 	int	npat; | 
 | 	int	nact; | 
 | 	Rule	**pat; | 
 | 	Rule	**act; | 
 | 	char	*port; | 
 | }; | 
 |  | 
 | struct Exec | 
 | { | 
 | 	Plumbmsg	*msg; | 
 | 	char			*match[10]; | 
 | 	int			p0;		/* begin and end of match */ | 
 | 	int			p1; | 
 | 	int			clearclick;	/* click was expanded; remove attribute */ | 
 | 	int			setdata;	/* data should be set to $0 */ | 
 | 	int			holdforclient;	/* exec'ing client; keep message until port is opened */ | 
 | 	/* values of $variables */ | 
 | 	char			*file; | 
 | 	char 			*dir; | 
 | }; | 
 |  | 
 | void		parseerror(char*, ...); | 
 | void		error(char*, ...); | 
 | void*	emalloc(long); | 
 | void*	erealloc(void*, long); | 
 | char*	estrdup(char*); | 
 | Ruleset**	readrules(char*, int); | 
 | void		startfsys(void); | 
 | Exec*	matchruleset(Plumbmsg*, Ruleset*); | 
 | void		freeexec(Exec*); | 
 | char*	startup(Ruleset*, Exec*); | 
 | char*	printrules(void); | 
 | void		addport(char*); | 
 | char*	writerules(char*, int); | 
 | char*	expand(Exec*, char*, char**); | 
 | void		makeports(Ruleset*[]); | 
 | void		printinputstack(void); | 
 | int		popinput(void); | 
 |  | 
 | Ruleset	**rules; | 
 | char		*user; | 
 | char		*home; | 
 | jmp_buf	parsejmp; | 
 | char		*lasterror; | 
 | char		**ports; | 
 | int		nports; | 
 | int		debug; |