]> mj.ucw.cz Git - umpf.git/blobdiff - umpf.h
fix many little bugs, release 0.1
[umpf.git] / umpf.h
diff --git a/umpf.h b/umpf.h
index e379c8400a0a1120f910c35e7abc044b4ccf3008..0d0697f6804d686a353559b41f6a83384f13afd5 100644 (file)
--- a/umpf.h
+++ b/umpf.h
@@ -1,5 +1,14 @@
+#include <setjmp.h>
 #include "lists.h"
 
+/* definitions of internal variables */
+#define INT_VAR_MAIL_LEN "MAIL_LEN"
+#define INT_VAR_LAST_EXIT "LAST_EXIT_CODE"
+#define INT_VAR_PIPE_RES "LAST_OUTPUT"
+
+/* umpf.c */
+jmp_buf env;
+
 /* cond.h */
 int yylex (void);
 void yyerror (char const *);
@@ -13,6 +22,12 @@ enum keyword {
        K_FILTER
 };
 
+enum var_type {
+       VAR_HEADER,
+       VAR_INTERN,
+       VAR_USER
+};
+
 struct tree {
        enum {
                ST_IF,
@@ -163,7 +178,12 @@ struct variable {
        struct node car;
        char* name;
        int varcode;
-       int modified;
+       enum var_type type;
+};
+
+struct vartab {
+       char* value;
+       int modif;
 };
 
 struct list input_code;
@@ -171,7 +191,7 @@ struct list* var_hash;
 int current_varcode;
 int max_varcode;
 int temp_varcode_start;
-char** var_tab; 
+struct vartab* var_tab; 
 char** const_tab;
 int cur_const_n;
 int cur_const_s;
@@ -179,8 +199,8 @@ char* empty;
 
 void init(void);
 void compile(struct tree* t, struct list* where);
-int find_var(char* name, struct list* hash);
-struct variable* get_var_struct(char* name, struct list* hash);
+int find_var(char* name, enum var_type type, struct list* hash);
+struct variable* get_var_struct(char* name, enum var_type type, struct list* hash);
 int store_const(char* c);
 struct list* new_var_hash(void);
 int get_bucket_number(char* name);
@@ -207,15 +227,18 @@ 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, ...);
+void set_cur_mail_length_var(int len, struct list* hash);
 
 /* ham.c */
 char* default_mailbox;
 int chars_written;
 int curr_email_len;
+char* fromline;
 
 struct list* current_headers;
 struct email* current_body;
 struct list* make_hlist(int fd);
+void new_header(char* buf, struct list* h);
 void print_headers(struct list* l);
 struct email* get_body(int fd);
 int deliver_local_email(char* folder, struct email* email);