aboutsummaryrefslogtreecommitdiffstats
path: root/property.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2006-08-13 09:53:10 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2006-08-13 09:53:10 +0000
commit523bb7ba13a5d88588a270cf8ce2f0c0ac882708 (patch)
tree6490997635549846cf304b2cfc4fc256f55d6ca7 /property.c
parent517e84e9fd1b39fdef831c6fc5c6e774bf20a12a (diff)
downloadlcd4linux-523bb7ba13a5d88588a270cf8ce2f0c0ac882708.tar.gz
[lcd4linux @ 2006-08-13 09:53:10 by reinelt]
dynamic properties added (used by 'style' of text widget) git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@690 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'property.c')
-rw-r--r--property.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/property.c b/property.c
new file mode 100644
index 0000000..b2302ba
--- /dev/null
+++ b/property.c
@@ -0,0 +1,133 @@
+/* $Id: property.c,v 1.1 2006/08/13 09:53:10 reinelt Exp $
+ *
+ * dynamic properties
+ *
+ * Copyright (C) 2006 Michael Reinelt <reinelt@eunet.at>
+ * Copyright (C) 2006 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * LCD4Linux is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ * $Log: property.c,v $
+ * Revision 1.1 2006/08/13 09:53:10 reinelt
+ * dynamic properties added (used by 'style' of text widget)
+ *
+ */
+
+
+/*
+ * exported functions:
+ *
+ * void property_load (const char *section, const char *name, const char *defval, PROPERTY *prop)
+ * initializes and loads a property from the config file and pre-compiles it
+ *
+ * void property_free (PROPERTY *prop)
+ * frees all property allocations
+ *
+ *
+ * double P2N(PROPERTY * prop)
+ * returns a (already evaluated) property as number
+ *
+ * char *P2S(PROPERTY * prop)
+ * returns a (already evaluated) property as string
+ *
+ */
+
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "evaluator.h"
+#include "property.h"
+
+#ifdef WITH_DMALLOC
+#include <dmalloc.h>
+#endif
+
+
+void property_load(const char *section, const char *name, const char *defval, PROPERTY * prop)
+{
+ /* initialize structure */
+ prop->name = NULL;
+ prop->expression = NULL;
+ prop->compiled = NULL;
+ DelResult(&prop->result);
+
+ /* remember the name */
+ prop->name = strdup(name);
+
+ /* load expression from config, but do not evaluate it */
+ prop->expression = cfg_get_raw(section, name, defval);
+
+ /* pre-compile the expression */
+ Compile(prop->expression, &prop->compiled);
+
+}
+
+
+void property_eval(PROPERTY * prop)
+{
+ if (prop->compiled != NULL) {
+ DelResult(&prop->result);
+ Eval(prop->compiled, &prop->result);
+ }
+}
+
+
+double P2N(PROPERTY * prop)
+{
+ if (prop == NULL) {
+ error("Property: internal error: NULL property");
+ return 0.0;
+ }
+ return R2N(&prop->result);
+}
+
+
+char *P2S(PROPERTY * prop)
+{
+ if (prop == NULL) {
+ error("Property: internal error: NULL property");
+ return NULL;
+ }
+ return R2S(&prop->result);
+}
+
+void property_free(PROPERTY * prop)
+{
+ if (prop->name != NULL) {
+ free(prop->name);
+ prop->name = NULL;
+ }
+
+ if (prop->expression != NULL) {
+ /* do *not* free expression */
+ prop->expression = NULL;
+ }
+
+ if (prop->compiled != NULL) {
+ free(prop->compiled);
+ prop->compiled = NULL;
+ }
+
+ DelResult(&prop->result);
+}