93 lines
1.5 KiB
C
93 lines
1.5 KiB
C
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;
|