xref: /plan9-contrib/sys/src/cmd/plumb/plumber.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier typedef struct Exec Exec;
27dd7cddfSDavid du Colombier typedef struct Rule Rule;
37dd7cddfSDavid du Colombier typedef struct Ruleset Ruleset;
47dd7cddfSDavid du Colombier 
57dd7cddfSDavid du Colombier /*
67dd7cddfSDavid du Colombier  * Object
77dd7cddfSDavid du Colombier  */
87dd7cddfSDavid du Colombier enum
97dd7cddfSDavid du Colombier {
107dd7cddfSDavid du Colombier 	OArg,
117dd7cddfSDavid du Colombier 	OAttr,
127dd7cddfSDavid du Colombier 	OData,
137dd7cddfSDavid du Colombier 	ODst,
147dd7cddfSDavid du Colombier 	OPlumb,
157dd7cddfSDavid du Colombier 	OSrc,
167dd7cddfSDavid du Colombier 	OType,
1759cc4ca5SDavid du Colombier 	OWdir,
187dd7cddfSDavid du Colombier };
197dd7cddfSDavid du Colombier 
207dd7cddfSDavid du Colombier /*
217dd7cddfSDavid du Colombier  * Verbs
227dd7cddfSDavid du Colombier  */
237dd7cddfSDavid du Colombier enum
247dd7cddfSDavid du Colombier {
257dd7cddfSDavid du Colombier 	VAdd,	/* apply to OAttr only */
267dd7cddfSDavid du Colombier 	VClient,
277dd7cddfSDavid du Colombier 	VDelete,	/* apply to OAttr only */
287dd7cddfSDavid du Colombier 	VIs,
297dd7cddfSDavid du Colombier 	VIsdir,
307dd7cddfSDavid du Colombier 	VIsfile,
317dd7cddfSDavid du Colombier 	VMatches,
327dd7cddfSDavid du Colombier 	VSet,
337dd7cddfSDavid du Colombier 	VStart,
347dd7cddfSDavid du Colombier 	VTo,
357dd7cddfSDavid du Colombier };
367dd7cddfSDavid du Colombier 
377dd7cddfSDavid du Colombier struct Rule
387dd7cddfSDavid du Colombier {
397dd7cddfSDavid du Colombier 	int	obj;
407dd7cddfSDavid du Colombier 	int	verb;
417dd7cddfSDavid du Colombier 	char	*arg;		/* unparsed string of all arguments */
427dd7cddfSDavid du Colombier 	char	*qarg;	/* quote-processed arg string */
437dd7cddfSDavid du Colombier 	Reprog	*regex;
447dd7cddfSDavid du Colombier };
457dd7cddfSDavid du Colombier 
467dd7cddfSDavid du Colombier struct Ruleset
477dd7cddfSDavid du Colombier {
487dd7cddfSDavid du Colombier 	int	npat;
497dd7cddfSDavid du Colombier 	int	nact;
507dd7cddfSDavid du Colombier 	Rule	**pat;
517dd7cddfSDavid du Colombier 	Rule	**act;
527dd7cddfSDavid du Colombier 	char	*port;
537dd7cddfSDavid du Colombier };
547dd7cddfSDavid du Colombier 
557dd7cddfSDavid du Colombier struct Exec
567dd7cddfSDavid du Colombier {
577dd7cddfSDavid du Colombier 	Plumbmsg	*msg;
587dd7cddfSDavid du Colombier 	char			*match[10];
597dd7cddfSDavid du Colombier 	int			p0;		/* begin and end of match */
607dd7cddfSDavid du Colombier 	int			p1;
617dd7cddfSDavid du Colombier 	int			clearclick;	/* click was expanded; remove attribute */
627dd7cddfSDavid du Colombier 	int			setdata;	/* data should be set to $0 */
637dd7cddfSDavid du Colombier 	int			holdforclient;	/* exec'ing client; keep message until port is opened */
647dd7cddfSDavid du Colombier 	/* values of $variables */
657dd7cddfSDavid du Colombier 	char			*file;
667dd7cddfSDavid du Colombier 	char 			*dir;
677dd7cddfSDavid du Colombier };
687dd7cddfSDavid du Colombier 
697dd7cddfSDavid du Colombier void		parseerror(char*, ...);
707dd7cddfSDavid du Colombier void		error(char*, ...);
717dd7cddfSDavid du Colombier void*	emalloc(long);
727dd7cddfSDavid du Colombier void*	erealloc(void*, long);
737dd7cddfSDavid du Colombier char*	estrdup(char*);
747dd7cddfSDavid du Colombier Ruleset**	readrules(char*, int);
75*9a747e4fSDavid du Colombier void		startfsys(void);
767dd7cddfSDavid du Colombier Exec*	matchruleset(Plumbmsg*, Ruleset*);
777dd7cddfSDavid du Colombier void		freeexec(Exec*);
787dd7cddfSDavid du Colombier char*	startup(Ruleset*, Exec*);
797dd7cddfSDavid du Colombier char*	printrules(void);
807dd7cddfSDavid du Colombier void		addport(char*);
817dd7cddfSDavid du Colombier char*	writerules(char*, int);
827dd7cddfSDavid du Colombier char*	expand(Exec*, char*, char**);
837dd7cddfSDavid du Colombier void		makeports(Ruleset*[]);
847dd7cddfSDavid du Colombier void		printinputstack(void);
857dd7cddfSDavid du Colombier int		popinput(void);
867dd7cddfSDavid du Colombier 
877dd7cddfSDavid du Colombier Ruleset	**rules;
887dd7cddfSDavid du Colombier char		*user;
897dd7cddfSDavid du Colombier char		*home;
907dd7cddfSDavid du Colombier jmp_buf	parsejmp;
917dd7cddfSDavid du Colombier char		*lasterror;
927dd7cddfSDavid du Colombier char		**ports;
937dd7cddfSDavid du Colombier int		nports;
94