]> mj.ucw.cz Git - umpf.git/blobdiff - umpf.h
cope with old locks
[umpf.git] / umpf.h
diff --git a/umpf.h b/umpf.h
index b5b7df82d6d43b2f08765736077af9c6fd27ac5c..2fd1a04aef2a0e43310e50e199f709500450c4cc 100644 (file)
--- a/umpf.h
+++ b/umpf.h
@@ -4,6 +4,14 @@
 int yylex (void);
 void yyerror (char const *);
 
+enum keyword {
+       K_DISCARD,
+       K_COPY,
+       K_MAIL,
+       K_PIPE,
+       K_EMPTY
+};
+
 struct tree {
        enum {
                ST_IF,
@@ -53,8 +61,8 @@ struct tree {
                } leaf;
 
                struct {
-                       char* kw_left;
-                       char* kw_right; 
+                       enum keyword left;
+                       enum keyword right;
                        struct tree* s;
                } arrow;
 
@@ -79,56 +87,41 @@ void read_conf(char* filename);
 int line;
 FILE* conf;
 
-/* int.c */
-struct hlist {
-       struct node car;
-       char* name;
-       char* value;
-};
-
-struct email {
-       struct list* headers;
-       char* body;
-       int body_len;
-};
-
-struct action {
-       char* l;
-       char* r;
-       char* s;
-       struct email e;
-};
-
-/* ham.c */
-char* default_mailbox;
-
-struct list* current_headers;
-struct email* current_body;
-struct list* make_hlist(void);
-void print_headers(struct list* l);
-void do_action(struct action* a);
-struct email* get_body(void);
-
-/* lock.c */
-void save_gids(void);
-void close_mailbox(int fd, char* path, int is_default_mailbox);
-int open_mailbox(char* path, int is_default_mailbox);
-char* cat(char* l, char* r);
-
 /* code.c */
 #define BUFSIZE 4096 
+#define HASHSIZE 103
+#define MAGIC 19
+
 struct code {
        struct node car;
        enum {
-               SET,
-               JUMP,
-               JUMP_IF,
-               JUMP_UNLESS,
-               DELIVER,
-               CALL_EXT,
-               NOP,
-               CAT,
-               GT
+               OPC_SET,
+               OPC_JUMP,
+               OPC_JUMP_IF,
+               OPC_JUMP_UNLESS,
+               OPC_DELIVER,
+               OPC_CALL_EXT,
+               OPC_NOP,
+               OPC_CAT,
+               OPC_GT,
+               OPC_LT,
+               OPC_LE,
+               OPC_GE,
+               OPC_EQ,
+               OPC_NEQ,
+               OPC_RE,
+               OPC_NRE,
+               OPC_AND,
+               OPC_OR,
+               OPC_XOR,
+               OPC_NOT,
+               OPC_PLUS,
+               OPC_MINUS,
+               OPC_MUL,
+               OPC_DIV,
+               OPC_PIPE,
+               OPC_MAIL,
+               OPC_DISCARD
        } opcode;
 
        union {
@@ -151,26 +144,31 @@ struct code {
                        int l;
                        int r;
                        int res; /* result */
-               } cat;
-               struct {
-               } nop;
+               } tpop;
                struct {
-                       int l;
-                       int r;
+                       int par;
                        int res; /* result */
-               } gt;
+               } dpop;
+               struct {
+                       int copy;
+                       int what;
+               } arrow;
+               struct {
+               } nop;
        } u;
 };
 
 struct variable {
        struct node car;
        char* name;
-       int varcode;    
+       int varcode;
+       int modified;
 };
 
 struct list input_code;
 struct list* var_hash;
 int current_varcode;
+int max_varcode;
 int temp_varcode_start;
 char** var_tab; 
 char** const_tab;
@@ -182,4 +180,43 @@ void compile(struct tree* t, struct list* where);
 int find_var(char* name, struct list* hash);
 int store_const(char* c);
 struct list* new_var_hash(void);
+int get_bucket_number(char* name);
 void print_code(void);
+
+/* int.c */
+struct hlist {
+       struct node car;
+       char* name;
+       char* value;
+       int have_var;
+};
+
+struct email {
+       struct list* headers;
+       char* body;
+       char* tmpfile;
+       int fd;
+       int body_len;
+};
+
+void save_current_headers(struct list* hash);
+void print_vars(struct list* hash);
+void interp(struct list* ins, struct list* hash);
+
+/* ham.c */
+char* default_mailbox;
+
+struct list* current_headers;
+struct email* current_body;
+struct list* make_hlist(void);
+void print_headers(struct list* l);
+struct email* get_body(void);
+int deliver_local_email(char* folder, struct email* email);
+
+/* lock.c */
+void save_gids(void);
+void close_mailbox(int fd, char* path, int is_default_mailbox);
+int open_mailbox(char* path, int is_default_mailbox);
+char* cat(char* l, char* r);
+
+