From 23b1539bf90bfb6b35d9a2be0a2b6b1e311c1460 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Wed, 7 Apr 1999 12:11:08 +0000 Subject: Filters upgraded - a bit. Moved code to filter.c because it is where it belongs. (f-util.c stays there for auxiliary and non-important things.) --- filter/f-util.c | 137 -------------------------------------------------------- 1 file changed, 137 deletions(-) (limited to 'filter/f-util.c') diff --git a/filter/f-util.c b/filter/f-util.c index 6605091..40805f8 100644 --- a/filter/f-util.c +++ b/filter/f-util.c @@ -22,119 +22,6 @@ #include "conf/conf.h" #include "filter/filter.h" -struct f_inst *startup_func = NULL; - -#define runtime(x) do { \ - log( L_ERR, x ); \ - res.type = T_RETURN; \ - res.val.i = F_ERROR; \ - return res; \ - } while(0) - -#define ARG(x,y) \ - x = interpret(what->y); \ - if (x.type == T_RETURN) \ - return x; - -#define ONEARG ARG(v1, arg1) -#define TWOARGS ARG(v1, arg1) \ - ARG(v2, arg2) - -static struct f_val -interpret(struct f_inst *what) -{ - struct symbol *sym; - struct f_val v1, v2, res; - - res.type = T_VOID; - if (!what) - return res; - - switch(what->code) { - case ',': - TWOARGS; - break; - case '+': - TWOARGS; - if (v1.type != v2.type) - runtime( "Can not operate with values of incompatible types" ); - - switch (res.type = v1.type) { - case T_VOID: runtime( "Can not operate with values of type void" ); - case T_INT: res.val.i = v1.val.i + v2.val.i; break; - default: runtime( "Usage of unknown type" ); - } - break; - case '=': - ARG(v2, arg2); - sym = what->arg1; - switch (res.type = v2.type) { - case T_VOID: runtime( "Can not assign void values" ); - case T_INT: - if (sym->class != (SYM_VARIABLE | T_INT)) - runtime( "Variable of bad type" ); - sym->aux = v2.val.i; - break; - } - break; - case 'c': - res.type = T_INT; - res.val.i = (int) what->arg1; - break; - case 'i': - res.type = T_INT; - res.val.i = * ((int *) what->arg1); - break; - case 'p': - ONEARG; - printf( "Printing: " ); - switch (v1.type) { - case T_VOID: printf( "(void)" ); break; - case T_INT: printf( "%d", v1.val.i ); break; - default: runtime( "Print of variable of unknown type" ); - } - printf( "\n" ); - break; - case '?': - ONEARG; - if (v1.type != T_INT) - runtime( "If requires integer expression" ); - if (v1.val.i) { - ARG(res,arg2); - } - break; - case 'D': - printf( "DEBUGGING PRINT\n" ); - break; - case '0': - printf( "No operation\n" ); - break; - case 'd': - printf( "Puts: %s\n", (char *) what->arg1 ); - break; - case '!': - switch ((int) what->arg1) { - case F_QUITBIRD: - die( "Filter asked me to die" ); - case F_ACCEPT: - /* Should take care about turning ACCEPT into MODIFY */ - case F_ERROR: - case F_REJECT: - res.type = T_RETURN; - res.val.i = (int) what->arg1; - break; - default: - bug( "unknown return type: can not happen"); - } - break; - default: - bug( "Unknown instruction %d (%c)", what->code, what->code & 0xff); - } - if (what->next) - return interpret(what->next); - return res; -} - struct f_inst * f_new_inst(void) { @@ -145,21 +32,6 @@ f_new_inst(void) return ret; } -int -f_run(struct filter *filter, struct rte **rte, struct ea_list **tmp_attrs, struct linpool *tmp_pool) -{ - struct f_inst *inst; - struct f_val res; - debug( "Running filter `%s'...", filter->name ); - - inst = filter->root; - res = interpret(inst); - if (res.type != T_RETURN) - return F_ERROR; - debug( "done (%d)\n", res.val.i ); - return res.val.i; -} - char * filter_name(struct filter *filter) { @@ -170,12 +42,3 @@ filter_name(struct filter *filter) else return filter->name; } - -void -filters_postconfig(void) -{ - printf( "Launching startup function..." ); - if (startup_func) - interpret(startup_func); - printf( "done\n" ); -} -- cgit v1.2.3