aboutsummaryrefslogtreecommitdiffstats
path: root/plugin_cfg.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-01-13 10:03:01 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2004-01-13 10:03:01 +0000
commit90a08f4f1082f25ab999d8a331dcbea512778a47 (patch)
tree176e34d955f57d8609c83df1ef2f9879c383f6ab /plugin_cfg.c
parent3cac7824479e0eef3b0bc6e33e5b4d157119a646 (diff)
downloadlcd4linux-90a08f4f1082f25ab999d8a331dcbea512778a47.tar.gz
[lcd4linux @ 2004-01-13 10:03:01 by reinelt]
new util 'hash' for associative arrays new plugin 'cpuinfo' git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@309 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'plugin_cfg.c')
-rw-r--r--plugin_cfg.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/plugin_cfg.c b/plugin_cfg.c
new file mode 100644
index 0000000..0b1a229
--- /dev/null
+++ b/plugin_cfg.c
@@ -0,0 +1,125 @@
+/* $Id: plugin_cfg.c,v 1.1 2004/01/13 10:03:01 reinelt Exp $
+ *
+ * plugin for config file access
+ *
+ * Copyright 2003, 2004 Michael Reinelt <reinelt@eunet.at>
+ * Copyright 2004 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: plugin_cfg.c,v $
+ * Revision 1.1 2004/01/13 10:03:01 reinelt
+ * new util 'hash' for associative arrays
+ * new plugin 'cpuinfo'
+ *
+ */
+
+/*
+ * exported functions:
+ *
+ * int plugin_init_cfg (void)
+ * adds cfg() function for config access
+ * initializes variables from the config file
+ *
+ */
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "debug.h"
+#include "evaluator.h"
+#include "plugin.h"
+#include "cfg.h"
+
+
+static void load_variables (void)
+{
+ char *section="Variables";
+ char *list, *key;
+ char *expression;
+ RESULT result = {0, 0.0, NULL};
+
+ list=cfg_list(section);
+ key=strtok(list, "|");
+ while (key!=NULL) {
+ if (strchr(key, '.')!=NULL || strchr(key, ':') !=0) {
+ error ("ignoring variable '%s' from %s: structures not allowed", key, cfg_source());
+ } else {
+ expression=cfg_get (section, key, "");
+ if (expression!=NULL && *expression!='\0') {
+ if (Eval(expression, &result)==0) {
+ debug ("Variable %s = '%s' (%f)", key, R2S(&result), R2N(&result));
+ SetVariable (key, &result);
+ DelResult (&result);
+ } else {
+ error ("error evaluating variable '%s' from %s", key, cfg_source());
+ }
+ }
+ }
+ key=strtok(NULL, "|");
+ }
+ free (list);
+
+}
+
+
+static void my_cfg (RESULT *result, int argc, RESULT *argv[])
+{
+ int i, len;
+ char *value;
+ char *buffer;
+
+ // calculate key length
+ len=0;
+ for (i=0; i<argc; i++) {
+ len+=strlen(R2S(argv[i]))+1;
+ }
+
+ // allocate key buffer
+ buffer=malloc(len+1);
+
+ // prepare key buffer
+ *buffer='\0';
+ for (i=0; i<argc; i++) {
+ strcat (buffer, ".");
+ strcat (buffer, R2S(argv[i]));
+ }
+
+ // buffer starts with '.', so cut off first char
+ value=cfg_get("", buffer+1, "");
+
+ // free buffer again
+ free (buffer);
+
+ // store result
+ SetResult(&result, R_STRING, value);
+}
+
+
+int plugin_init_cfg (void)
+{
+ // load "Variables" section from cfg
+ load_variables();
+
+ // register plugin
+ AddFunction ("cfg", -1, my_cfg);
+
+ return 0;
+}