X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=umpf.h;h=32cd804e174d93edaa74863b07d8705e8d48e881;hb=43367dfb74d85a732b8973140a7b87a888b11902;hp=926c4768b55efbf3a9f6920e383977e5d5f7d00c;hpb=0c9fd11c75d2392a8a1041bd8d386cf449f6d183;p=umpf.git diff --git a/umpf.h b/umpf.h index 926c476..32cd804 100644 --- a/umpf.h +++ b/umpf.h @@ -9,7 +9,8 @@ enum keyword { K_COPY, K_MAIL, K_PIPE, - K_EMPTY + K_EMPTY, + K_FILTER }; struct tree { @@ -81,7 +82,7 @@ struct tree* input_tree; #define CC(a,b) ((a<<8)|b) void* xmalloc(size_t size); void* xrealloc(void* buf, size_t size); -char* xstrdup(char* s); +char* xstrdup(const char* s); void __attribute__ ((noreturn)) die(char* msg, ...); void read_conf(char* filename); int line; @@ -100,7 +101,6 @@ struct code { OPC_JUMP_IF, OPC_JUMP_UNLESS, OPC_DELIVER, - OPC_CALL_EXT, OPC_NOP, OPC_CAT, OPC_GT, @@ -121,6 +121,7 @@ struct code { OPC_DIV, OPC_PIPE, OPC_MAIL, + OPC_FILTER, OPC_DISCARD } opcode; @@ -168,11 +169,13 @@ struct variable { struct list input_code; struct list* var_hash; int current_varcode; +int max_varcode; int temp_varcode_start; char** var_tab; char** const_tab; int cur_const_n; int cur_const_s; +char* empty; void init(void); void compile(struct tree* t, struct list* where); @@ -193,21 +196,30 @@ struct hlist { 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); +void free_string(char* c); +void __attribute__ ((noreturn)) bye(int code, char* msg, ...); /* ham.c */ char* default_mailbox; +int chars_written; 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); +int write_email_to_fd(int fd, struct email* email); +char* read_email(struct email* em); +void open_email(void); /* lock.c */ void save_gids(void);