summaryrefslogtreecommitdiffstats
path: root/filter/f-util.c
diff options
context:
space:
mode:
authorPavel Machek <pavel@ucw.cz>2000-04-20 12:25:51 +0200
committerPavel Machek <pavel@ucw.cz>2000-04-20 12:25:51 +0200
commit7d6eebae3b87cac2d09fd5201b603d4fd969fe06 (patch)
tree15802c4cf188919cf9b4af76b57dc172dd196f67 /filter/f-util.c
parent77f37ae0994774f6402499e0a79287d85afa6edf (diff)
downloadbird-7d6eebae3b87cac2d09fd5201b603d4fd969fe06.tar
bird-7d6eebae3b87cac2d09fd5201b603d4fd969fe06.zip
Create syntax sugar for add/delete/prepend, so xyzzy.prepend(123) is
possible. That means that milestone 3 was reached.
Diffstat (limited to 'filter/f-util.c')
-rw-r--r--filter/f-util.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/filter/f-util.c b/filter/f-util.c
index cf174e7..ba6e777 100644
--- a/filter/f-util.c
+++ b/filter/f-util.c
@@ -10,6 +10,8 @@
#include "conf/conf.h"
#include "filter/filter.h"
+#define P(a,b) ((a<<8) | b)
+
struct f_inst *
f_new_inst(void)
{
@@ -29,6 +31,27 @@ f_new_dynamic_attr(int type, int f_type, int code)
return f;
}
+/*
+ * Generate set_dynamic( operation( get_dynamic(), argument ) )
+ */
+struct f_inst *
+f_generate_complex(int operation, int operation_aux, struct f_inst *dyn, struct f_inst *argument)
+{
+ struct f_inst *set_dyn = f_new_inst(),
+ *oper = f_new_inst(),
+ *get_dyn = dyn;
+
+ *set_dyn = *get_dyn;
+ get_dyn->code = P('e','a');
+ oper->code = operation;
+ oper->aux = operation_aux;
+ oper->a1.p = get_dyn;
+ oper->a2.p = argument;
+ set_dyn->code = P('e','S');
+ set_dyn->a1.p = oper;
+ return set_dyn;
+}
+
char *
filter_name(struct filter *filter)
{