From 2f5e70edeffe4eb649d3a0577e3913cc5fcda6d7 Mon Sep 17 00:00:00 2001 From: reinelt <> Date: Sat, 6 Mar 2004 20:31:16 +0000 Subject: [lcd4linux @ 2004-03-06 20:31:16 by reinelt] Complete rewrite of the evaluator to get rid of the code from mark Morley (because of license issues). The new Evaluator does a pre-compile of expressions, and stores them in trees. Therefore it should be reasonable faster... --- widget_icon.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'widget_icon.c') diff --git a/widget_icon.c b/widget_icon.c index 2580dc6..421ca84 100644 --- a/widget_icon.c +++ b/widget_icon.c @@ -1,4 +1,4 @@ -/* $Id: widget_icon.c,v 1.9 2004/03/03 04:44:16 reinelt Exp $ +/* $Id: widget_icon.c,v 1.10 2004/03/06 20:31:16 reinelt Exp $ * * icon widget handling * @@ -21,6 +21,12 @@ * * * $Log: widget_icon.c,v $ + * Revision 1.10 2004/03/06 20:31:16 reinelt + * Complete rewrite of the evaluator to get rid of the code + * from mark Morley (because of license issues). + * The new Evaluator does a pre-compile of expressions, and + * stores them in trees. Therefore it should be reasonable faster... + * * Revision 1.9 2004/03/03 04:44:16 reinelt * changes (cosmetics?) to the big patch from Martin * hash patch un-applied @@ -135,16 +141,16 @@ void widget_icon_update (void *Self) // evaluate expressions Icon->speed = 100; - if (Icon->speed_expr!=NULL && *Icon->speed_expr!='\0') { - Eval(Icon->speed_expr, &result); + if (Icon->speed_tree!=NULL) { + Eval(Icon->speed_tree, &result); Icon->speed = R2N(&result); if (Icon->speed<10) Icon->speed=10; DelResult(&result); } Icon->visible = 1; - if (Icon->visible_expr!=NULL && *Icon->visible_expr!='\0') { - Eval(Icon->visible_expr, &result); + if (Icon->visible_tree!=NULL) { + Eval(Icon->visible_tree, &result); Icon->visible = R2N(&result); if (Icon->visible<1) Icon->visible=0; DelResult(&result); @@ -184,9 +190,13 @@ int widget_icon_init (WIDGET *Self) memset (Icon, 0, sizeof(WIDGET_ICON)); // get raw expressions (we evaluate them ourselves) - Icon->speed_expr = cfg_get_raw (section, "speed", NULL); + Icon->speed_expr = cfg_get_raw (section, "speed", NULL); Icon->visible_expr = cfg_get_raw (section, "visible", NULL); + // compile'em + Compile (Icon->speed_expr, &Icon->speed_tree); + Compile (Icon->visible_expr, &Icon->visible_tree); + // sanity check if (Icon->speed_expr==NULL || *Icon->speed_expr=='\0') { error ("Icon %s has no speed, using '100'", Self->name); -- cgit v1.2.3