|  | 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; |