aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-sexp.c
diff options
context:
space:
mode:
authorNotZed <NotZed@HelixCode.com>2000-02-19 09:55:48 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-02-19 09:55:48 +0800
commitac051f19eea6551b5e8075e30cd00b4f25c9b1cb (patch)
treea3e0fdb76cd22b3932e772385109677c3c4d56fe /filter/filter-sexp.c
parente72c45d304fb6e538aad8ceb9ce07b1d8c59156f (diff)
downloadgsoc2013-evolution-ac051f19eea6551b5e8075e30cd00b4f25c9b1cb.tar
gsoc2013-evolution-ac051f19eea6551b5e8075e30cd00b4f25c9b1cb.tar.gz
gsoc2013-evolution-ac051f19eea6551b5e8075e30cd00b4f25c9b1cb.tar.bz2
gsoc2013-evolution-ac051f19eea6551b5e8075e30cd00b4f25c9b1cb.tar.lz
gsoc2013-evolution-ac051f19eea6551b5e8075e30cd00b4f25c9b1cb.tar.xz
gsoc2013-evolution-ac051f19eea6551b5e8075e30cd00b4f25c9b1cb.tar.zst
gsoc2013-evolution-ac051f19eea6551b5e8075e30cd00b4f25c9b1cb.zip
Now have loader/save, basic gui elements (which i want
to change), and uh, other stuff i forget right now. 2000-02-18 NotZed <NotZed@HelixCode.com> * Uh, more changes, lots, its still work in progress. svn path=/trunk/; revision=1851
Diffstat (limited to 'filter/filter-sexp.c')
-rw-r--r--filter/filter-sexp.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/filter/filter-sexp.c b/filter/filter-sexp.c
index 738ffa3380..04f8a82e6c 100644
--- a/filter/filter-sexp.c
+++ b/filter/filter-sexp.c
@@ -206,10 +206,10 @@ term_eval_and(struct _FilterSEXP *f, int argc, struct _FilterSEXPTerm **argv, vo
a1 = (char **)r1->value.ptrarray->pdata;
l1 = r1->value.ptrarray->len;
- for (j=0;i<l1;j++) {
+ for (j=0;j<l1;j++) {
int n;
- n = (int)g_hash_table_lookup(ht, a1[i]);
- g_hash_table_insert(ht, a1[i], (void *)n+1);
+ n = (int)g_hash_table_lookup(ht, a1[j]);
+ g_hash_table_insert(ht, a1[j], (void *)n+1);
}
} else if ( r1->type == FSEXP_RES_BOOL ) {
bool &= r1->value.bool;
@@ -259,7 +259,7 @@ term_eval_or(struct _FilterSEXP *f, int argc, struct _FilterSEXPTerm **argv, voi
a1 = (char **)r1->value.ptrarray->pdata;
l1 = r1->value.ptrarray->len;
- for (j=0;i<l1;j++) {
+ for (j=0;j<l1;j++) {
g_hash_table_insert(ht, a1[j], (void *)1);
}
} else if (r1->type == FSEXP_RES_BOOL) {
@@ -283,6 +283,22 @@ term_eval_or(struct _FilterSEXP *f, int argc, struct _FilterSEXPTerm **argv, voi
return r;
}
+static FilterSEXPResult *
+term_eval_not(struct _FilterSEXP *f, int argc, struct _FilterSEXPResult **argv, void *data)
+{
+ int res = TRUE;
+ FilterSEXPResult *r;
+
+ if (argc>0) {
+ if (argv[0]->type == FSEXP_RES_BOOL
+ && argv[0]->value.bool)
+ res = FALSE;
+ }
+ r = filter_sexp_result_new(FSEXP_RES_BOOL);
+ r->value.bool = res;
+ return r;
+}
+
/* this should support all arguments ...? */
static FilterSEXPResult *
term_eval_lt(struct _FilterSEXP *f, int argc, struct _FilterSEXPTerm **argv, void *data)
@@ -873,6 +889,7 @@ static struct {
} symbols[] = {
{ "and", (FilterSEXPFunc *)term_eval_and, 1 },
{ "or", (FilterSEXPFunc *)term_eval_or, 1 },
+ { "not", (FilterSEXPFunc *)term_eval_not, 0 },
{ "<", (FilterSEXPFunc *)term_eval_lt, 1 },
{ ">", (FilterSEXPFunc *)term_eval_gt, 1 },
{ "=", (FilterSEXPFunc *)term_eval_eq, 1 },