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