From 18efc06ff4880debf30e30c9da08d7337486d4b7 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Thu, 16 Feb 2012 11:16:16 +0100 Subject: src/config.c: Add serialization helper Add config_serialize_conf() which can be used to serialize the value of a configuration setting (counterpart to config_parse_conf()). Signed-off-by: Lukas Fleischer --- src/config.c | 237 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 184 insertions(+), 53 deletions(-) (limited to 'src/config.c') diff --git a/src/config.c b/src/config.c index f91b643..5ced483 100644 --- a/src/config.c +++ b/src/config.c @@ -228,6 +228,190 @@ config_set_conf (const char *key, const char *value) return -1; } +static int +config_serialize_bool (char *dest, unsigned *val) +{ + if (*val) + { + dest[0] = 'y'; + dest[1] = 'e'; + dest[2] = 's'; + dest[3] = '\0'; + } + else + { + dest[0] = 'n'; + dest[1] = 'o'; + dest[2] = '\0'; + } + + return 1; +} + +static int +config_serialize_unsigned (char *dest, unsigned *val) +{ + snprintf (dest, BUFSIZ, "%u", *val); + return 1; +} + +static int +config_serialize_int (char *dest, int *val) +{ + snprintf (dest, BUFSIZ, "%d", *val); + return 1; +} + +static int +config_serialize_str (char *dest, const char *val) +{ + strncpy (dest, val, BUFSIZ); + return 1; +} + +/* + * Return a string defining the color theme in the form: + * foreground color 'on' background color + * in order to dump this data in the configuration file. + * Color numbers follow the ncurses library definitions. + * If ncurses library was compiled with --enable-ext-funcs, + * then default color is -1. + */ +void +config_color_theme_name (char *theme_name) +{ +#define MAXCOLORS 8 +#define NBCOLORS 2 +#define DEFAULTCOLOR 255 +#define DEFAULTCOLOR_EXT -1 + + int i; + short color[NBCOLORS]; + char *color_name[NBCOLORS]; + char *default_color = "default"; + char *name[MAXCOLORS] = { + "black", + "red", + "green", + "yellow", + "blue", + "magenta", + "cyan", + "white" + }; + + if (!colorize) + strncpy (theme_name, "0", BUFSIZ); + else + { + pair_content (COLR_CUSTOM, &color[0], &color[1]); + for (i = 0; i < NBCOLORS; i++) + { + if ((color[i] == DEFAULTCOLOR) || (color[i] == DEFAULTCOLOR_EXT)) + color_name[i] = default_color; + else if (color[i] >= 0 && color[i] <= MAXCOLORS) + color_name[i] = name[color[i]]; + else + { + EXIT (_("unknown color")); + /* NOTREACHED */ + } + } + snprintf (theme_name, BUFSIZ, "%s on %s", color_name[0], color_name[1]); + } +} + +/* Serialize the value of a configuration variable. */ +static int +config_serialize_conf (char *buf, const char *key) +{ + if (!key) + return -1; + + if (!strcmp(key, "auto_save")) + return config_serialize_bool (buf, &conf.auto_save); + + if (!strcmp(key, "auto_gc")) + return config_serialize_bool (buf, &conf.auto_gc); + + if (!strcmp(key, "periodic_save")) + return config_serialize_unsigned (buf, &conf.periodic_save); + + if (!strcmp(key, "confirm_quit")) + return config_serialize_bool (buf, &conf.confirm_quit); + + if (!strcmp(key, "confirm_delete")) + return config_serialize_bool (buf, &conf.confirm_delete); + + if (!strcmp(key, "skip_system_dialogs")) + return config_serialize_bool (buf, &conf.skip_system_dialogs); + + if (!strcmp(key, "skip_progress_bar")) + return config_serialize_bool (buf, &conf.skip_progress_bar); + + if (!strcmp(key, "calendar_default_view")) + { + int tmp = calendar_get_view (); + return config_serialize_int (buf, &tmp); + } + + if (!strcmp(key, "week_begins_on_monday")) + { + unsigned tmp = calendar_week_begins_on_monday (); + return config_serialize_bool (buf, &tmp); + } + + if (!strcmp(key, "color-theme")) + { + config_color_theme_name (buf); + return 1; + } + + if (!strcmp(key, "layout")) + { + int tmp = wins_layout (); + return config_serialize_int (buf, &tmp); + } + + if (!strcmp(key, "side-bar_width")) + { + int tmp = wins_sbar_wperc (); + return config_serialize_int (buf, &tmp); + } + + if (!strcmp(key, "notify-bar_show")) + return config_serialize_bool (buf, &nbar.show); + + if (!strcmp(key, "notify-bar_date")) + return config_serialize_str (buf, nbar.datefmt); + + if (!strcmp(key, "notify-bar_clock")) + return config_serialize_str (buf, nbar.timefmt); + + if (!strcmp(key, "notify-bar_warning")) + return config_serialize_int (buf, &nbar.cntdwn); + + if (!strcmp(key, "notify-bar_command")) + return config_serialize_str (buf, nbar.cmd); + + if (!strcmp(key, "notify-all")) + return config_serialize_bool (buf, &nbar.notify_all); + + if (!strcmp(key, "output_datefmt")) + return config_serialize_str (buf, conf.output_datefmt); + + if (!strcmp(key, "input_datefmt")) + return config_serialize_int (buf, &conf.input_datefmt); + + if (!strcmp(key, "notify-daemon_enable")) + return config_serialize_bool (buf, &dmon.enable); + + if (!strcmp(key, "notify-daemon_log")) + return config_serialize_bool (buf, &dmon.log); + + return -1; +} + static void config_file_walk (config_fn_walk_cb_t fn_cb, config_fn_walk_junk_cb_t fn_junk_cb, void *data) @@ -306,59 +490,6 @@ config_load (void) config_file_walk (config_load_cb, NULL, NULL); } -/* - * Return a string defining the color theme in the form: - * foreground color 'on' background color - * in order to dump this data in the configuration file. - * Color numbers follow the ncurses library definitions. - * If ncurses library was compiled with --enable-ext-funcs, - * then default color is -1. - */ -void -config_color_theme_name (char *theme_name) -{ -#define MAXCOLORS 8 -#define NBCOLORS 2 -#define DEFAULTCOLOR 255 -#define DEFAULTCOLOR_EXT -1 - - int i; - short color[NBCOLORS]; - char *color_name[NBCOLORS]; - char *default_color = "default"; - char *name[MAXCOLORS] = { - "black", - "red", - "green", - "yellow", - "blue", - "magenta", - "cyan", - "white" - }; - - if (!colorize) - strncpy (theme_name, "0", BUFSIZ); - else - { - pair_content (COLR_CUSTOM, &color[0], &color[1]); - for (i = 0; i < NBCOLORS; i++) - { - if ((color[i] == DEFAULTCOLOR) || (color[i] == DEFAULTCOLOR_EXT)) - color_name[i] = default_color; - else if (color[i] >= 0 && color[i] <= MAXCOLORS) - color_name[i] = name[color[i]]; - else - { - EXIT (_("unknown color")); - /* NOTREACHED */ - } - } - snprintf (theme_name, BUFSIZ, "%s on %s", color_name[0], color_name[1]); - } -} - - /* Save the user configuration. */ unsigned config_save (void) -- cgit v1.2.3-54-g00ecf