Subversion Repositories planix.SVN

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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;