summaryrefslogtreecommitdiff
path: root/src/configuration.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2009-11-19 23:45:18 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2009-11-19 23:45:18 (GMT)
commitfc363c31cc0a24e026bac74b5f62f33f44bf0143 (patch)
treec8944e1e6b7d2b9faa2658df8cf785648b06232d /src/configuration.c
parent783e5e1977c1e4dadf938befa9fce9a311079413 (diff)
Better supervised the closing of the editor.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@138 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/configuration.c')
-rw-r--r--src/configuration.c114
1 files changed, 110 insertions, 4 deletions
diff --git a/src/configuration.c b/src/configuration.c
index 8823271..5d17072 100644
--- a/src/configuration.c
+++ b/src/configuration.c
@@ -27,6 +27,7 @@
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include "xdg.h"
@@ -73,9 +74,16 @@ configuration *load_configuration(const char *name, config_param *params, unsign
result = (configuration *)calloc(1, sizeof(configuration));
+ printf("reset...\n");
+
+ for (i = 0; i < count; i++)
+ params[i].cur = params[i].def;
+
result->params = params;
result->count = count;
+ printf("init done\n");
+
suffix = strdup("openida/");
suffix = stradd(suffix, name);
suffix = stradd(suffix, ".xml");
@@ -91,6 +99,15 @@ configuration *load_configuration(const char *name, config_param *params, unsign
for (i = 0; i < count; i++)
switch (params[i].type)
{
+ case CVT_BOOLEAN:
+ strval = get_node_text_value(result->context, params[i].path);
+ if (strval != NULL)
+ {
+ set_boolean_config_value(result, i, strcmp(strval, "true") == 0);
+ free(strval);
+ }
+ break;
+
case CVT_STRING:
strval = get_node_text_value(result->context, params[i].path);
set_string_config_value(result, i, strval);
@@ -101,7 +118,7 @@ configuration *load_configuration(const char *name, config_param *params, unsign
break;
}
-
+ printf("loaded\n");
return result;
}
@@ -122,19 +139,52 @@ configuration *load_configuration(const char *name, config_param *params, unsign
void unload_configuration(configuration *config)
{
unsigned int i; /* Boucle de parcours */
+ config_param *params; /* Confort d'utilisation */
printf("Writing '%s'\n", config->filename);
+ close_xml_file(config->xdoc, config->context);
+ create_new_xml_file(&config->xdoc, &config->context);
+
+
for (i = 0; i < config->count; i++)
- switch (1)
+ {
+ params = &config->params[i];
+
+ switch (params->type)
{
- case 1:
+ case CVT_BOOLEAN:
+ if (params->cur.boolean == params->def.boolean)
+ continue;
+
+ add_content_to_node(config->xdoc, config->context,
+ params->path,
+ params->cur.boolean ? "true" : "false");
+
+ break;
+
+ case CVT_STRING:
+
+ if (params->cur.string == NULL && params->def.string == NULL)
+ continue;
+
+ if (params->def.string != NULL && params->def.string != NULL
+ && strcmp(params->cur.string, params->def.string) == 0)
+ continue;
+
add_content_to_node(config->xdoc, config->context,
- config->params[i].path, config->params[i].cur.string);
+ params->path,
+ params->cur.string != NULL ? params->cur.string : "");
+
+ break;
+
+ default:
break;
}
+ }
+
save_xml_file(config->xdoc, config->filename);
free(config);
@@ -148,6 +198,62 @@ void unload_configuration(configuration *config)
* index = indice de l'élément à traiter. *
* value = valeur à considérer comme valeur courante. *
* *
+* Description : Définit une valeur booléenne dans la configuration. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool set_boolean_config_value(configuration *config, unsigned int index, bool value)
+{
+ if (index >= config->count) return false;
+ if (config->params[index].type != CVT_BOOLEAN) return false;
+
+ config->params[index].defined = true;
+
+ config->params[index].cur.boolean = value;
+
+ return true;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : config = configuration à venir consulter. *
+* index = indice de l'élément à traiter. *
+* *
+* Description : Fournit une valeur booléenne issue de la configuration. *
+* *
+* Retour : Valeur courante ou par défaut de la configuration. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool get_boolean_config_value(configuration *config, unsigned int index)
+{
+ bool result; /* Valeur à retourner */
+
+ if (index >= config->count) return NULL;
+ if (config->params[index].type != CVT_BOOLEAN) return NULL;
+
+ if (config->params[index].defined) result = config->params[index].cur.boolean;
+ else result = config->params[index].def.boolean;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : config = configuration à venir consulter. *
+* index = indice de l'élément à traiter. *
+* value = valeur à considérer comme valeur courante. *
+* *
* Description : Définit une chaîne de caractères dans la configuration. *
* *
* Retour : - *