diff options
Diffstat (limited to 'src/custom.c')
-rw-r--r-- | src/custom.c | 498 |
1 files changed, 275 insertions, 223 deletions
diff --git a/src/custom.c b/src/custom.c index 1f75978..38ad8bc 100644 --- a/src/custom.c +++ b/src/custom.c @@ -37,13 +37,14 @@ #include <string.h> #include <stdlib.h> #include <math.h> +#include <ctype.h> #include "calcurse.h" /* Available configuration variables. */ enum conf_var { - CUSTOM_CONF_NOVARIABLE, CUSTOM_CONF_AUTOSAVE, + CUSTOM_CONF_AUTOGC, CUSTOM_CONF_PERIODICSAVE, CUSTOM_CONF_CONFIRMQUIT, CUSTOM_CONF_CONFIRMDELETE, @@ -59,11 +60,43 @@ enum conf_var { CUSTOM_CONF_NOTIFYBARCLOCK, CUSTOM_CONF_NOTIFYBARWARNING, CUSTOM_CONF_NOTIFYBARCOMMAND, + CUSTOM_CONF_NOTIFYALL, CUSTOM_CONF_OUTPUTDATEFMT, CUSTOM_CONF_INPUTDATEFMT, CUSTOM_CONF_DMON_ENABLE, CUSTOM_CONF_DMON_LOG, - CUSTOM_CONF_VARIABLES + CUSTOM_CONF_INVALID +}; + +struct conf_varname { + enum conf_var var; + const char *name; +}; + +static struct conf_varname conf_varmap[] = +{ + { CUSTOM_CONF_AUTOSAVE, "auto_save" }, + { CUSTOM_CONF_AUTOGC, "auto_gc" }, + { CUSTOM_CONF_PERIODICSAVE, "periodic_save" }, + { CUSTOM_CONF_CONFIRMQUIT, "confirm_quit" }, + { CUSTOM_CONF_CONFIRMDELETE, "confirm_delete" }, + { CUSTOM_CONF_SKIPSYSTEMDIALOGS, "skip_system_dialogs" }, + { CUSTOM_CONF_SKIPPROGRESSBAR, "skip_progress_bar" }, + { CUSTOM_CONF_CALENDAR_DEFAULTVIEW, "calendar_default_view" }, + { CUSTOM_CONF_WEEKBEGINSONMONDAY, "week_begins_on_monday" }, + { CUSTOM_CONF_COLORTHEME, "color-theme" }, + { CUSTOM_CONF_LAYOUT, "layout" }, + { CUSTOM_CONF_SBAR_WIDTH, "side-bar_width" }, + { CUSTOM_CONF_NOTIFYBARSHOW, "notify-bar_show" }, + { CUSTOM_CONF_NOTIFYBARDATE, "notify-bar_date" }, + { CUSTOM_CONF_NOTIFYBARCLOCK, "notify-bar_clock" }, + { CUSTOM_CONF_NOTIFYBARWARNING, "notify-bar_warning" }, + { CUSTOM_CONF_NOTIFYBARCOMMAND, "notify-bar_command" }, + { CUSTOM_CONF_NOTIFYALL, "notify-all" }, + { CUSTOM_CONF_OUTPUTDATEFMT, "output_datefmt" }, + { CUSTOM_CONF_INPUTDATEFMT, "input_datefmt" }, + { CUSTOM_CONF_DMON_ENABLE, "notify-daemon_enable" }, + { CUSTOM_CONF_DMON_LOG, "notify-daemon_log" } }; struct attribute { @@ -73,18 +106,39 @@ struct attribute { static struct attribute attr; -static unsigned -fill_config_var (char *string) +static int +conf_parse_bool (unsigned *dest, char *val) +{ + if (strncmp (val, "yes", 4) == 0) + *dest = 1; + else if (strncmp (val, "no", 3) == 0) + *dest = 0; + else + return 0; + + return 1; +} + +static int +conf_parse_unsigned (unsigned *dest, char *val) { - if (strncmp (string, "yes", 3) == 0) - return 1; - else if (strncmp (string, "no", 2) == 0) + if (is_all_digit (val)) + *dest = atoi (val); + else return 0; + + return 1; +} + +static int +conf_parse_int (int *dest, char *val) +{ + if ((*val == '+' || *val == '-' || isdigit (*val)) && is_all_digit (val + 1)) + *dest = atoi (val); else - { - EXIT (_("wrong configuration variable format.")); - return 0; - } + return 0; + + return 1; } /* @@ -92,8 +146,8 @@ fill_config_var (char *string) * Need to handle calcurse versions prior to 1.8, where colors where handled * differently (number between 1 and 8). */ -static void -custom_load_color (char *color, int background) +static int +conf_parse_color (char *val) { #define AWAITED_COLORS 2 @@ -101,15 +155,12 @@ custom_load_color (char *color, int background) char c[AWAITED_COLORS][BUFSIZ]; int colr[AWAITED_COLORS]; - len = strlen (color); + len = strlen (val); if (len > 1) { /* New version configuration */ - if (sscanf (color, "%s on %s", c[0], c[1]) != AWAITED_COLORS) - { - EXIT (_("missing colors in config file")); - /* NOTREACHED */ - } + if (sscanf (val, "%s on %s", c[0], c[1]) != AWAITED_COLORS) + return 0; for (i = 0; i < AWAITED_COLORS; i++) { @@ -132,17 +183,17 @@ custom_load_color (char *color, int background) else if (!strncmp (c[i], "default", 7)) colr[i] = background; else - { - EXIT (_("wrong color name")); - /* NOTREACHED */ - } + return 0; } init_pair (COLR_CUSTOM, colr[0], colr[1]); } - else if (len > 0 && len < 2) + else if (len == 1) { /* Old version configuration */ - color_num = atoi (color); + if (isdigit (*val)) + color_num = atoi (val); + else + return 0; switch (color_num) { @@ -174,15 +225,13 @@ custom_load_color (char *color, int background) init_pair (COLR_CUSTOM, COLOR_RED, COLR_BLUE); break; default: - EXIT (_("wrong color number")); - /* NOTREACHED */ + return 0; } } else - { - EXIT (_("wrong configuration variable format")); - /* NOTREACHED */ - } + return 0; + + return 1; } /* @@ -233,15 +282,107 @@ custom_remove_attr (WINDOW *win, int attr_num) wattroff (win, attr.nocolor[attr_num]); } +/* Set a configuration variable. */ +static int +custom_set_conf (enum conf_var var, char *val) +{ + unsigned tmp; + + switch (var) + { + case CUSTOM_CONF_AUTOSAVE: + return conf_parse_bool (&conf.auto_save, val); + break; + case CUSTOM_CONF_AUTOGC: + return conf_parse_bool (&conf.auto_gc, val); + break; + case CUSTOM_CONF_PERIODICSAVE: + return conf_parse_unsigned (&conf.periodic_save, val); + break; + case CUSTOM_CONF_CONFIRMQUIT: + return conf_parse_bool (&conf.confirm_quit, val); + break; + case CUSTOM_CONF_CONFIRMDELETE: + return conf_parse_bool (&conf.confirm_delete, val); + break; + case CUSTOM_CONF_SKIPSYSTEMDIALOGS: + return conf_parse_bool (&conf.skip_system_dialogs, val); + break; + case CUSTOM_CONF_SKIPPROGRESSBAR: + return conf_parse_bool (&conf.skip_progress_bar, val); + break; + case CUSTOM_CONF_CALENDAR_DEFAULTVIEW: + calendar_set_view (atoi (val)); + break; + case CUSTOM_CONF_WEEKBEGINSONMONDAY: + return conf_parse_bool (&tmp, val); + if (tmp) + calendar_set_first_day_of_week (MONDAY); + else + calendar_set_first_day_of_week (SUNDAY); + break; + case CUSTOM_CONF_COLORTHEME: + return conf_parse_color (val); + break; + case CUSTOM_CONF_LAYOUT: + wins_set_layout (atoi (val)); + break; + case CUSTOM_CONF_SBAR_WIDTH: + wins_set_sbar_width (atoi (val)); + break; + case CUSTOM_CONF_NOTIFYBARSHOW: + return conf_parse_bool (&nbar.show, val); + break; + case CUSTOM_CONF_NOTIFYBARDATE: + strncpy (nbar.datefmt, val, strlen (val) + 1); + break; + case CUSTOM_CONF_NOTIFYBARCLOCK: + strncpy (nbar.timefmt, val, strlen (val) + 1); + break; + case CUSTOM_CONF_NOTIFYBARWARNING: + return conf_parse_int (&nbar.cntdwn, val); + break; + case CUSTOM_CONF_NOTIFYBARCOMMAND: + strncpy (nbar.cmd, val, strlen (val) + 1); + break; + case CUSTOM_CONF_NOTIFYALL: + return conf_parse_bool(&nbar.notify_all, val); + break; + case CUSTOM_CONF_OUTPUTDATEFMT: + if (val[0] != '\0') + strncpy (conf.output_datefmt, val, strlen (val) + 1); + break; + case CUSTOM_CONF_INPUTDATEFMT: + return conf_parse_int (&conf.input_datefmt, val); + if (conf.input_datefmt <= 0 || conf.input_datefmt >= DATE_FORMATS) + conf.input_datefmt = 1; + break; + case CUSTOM_CONF_DMON_ENABLE: + return conf_parse_bool (&dmon.enable, val); + break; + case CUSTOM_CONF_DMON_LOG: + return conf_parse_bool (&dmon.log, val); + break; + default: + return 0; + break; + } + + return 1; +} + /* Load the user configuration. */ void -custom_load_conf (struct conf *conf, int background) +custom_load_conf (void) { FILE *data_file; char *mesg_line1 = _("Failed to open config file"); char *mesg_line2 = _("Press [ENTER] to continue"); char buf[BUFSIZ], e_conf[BUFSIZ]; + int i; + char *name; enum conf_var var; + char *val; data_file = fopen (path_conf, "r"); if (data_file == NULL) @@ -249,156 +390,57 @@ custom_load_conf (struct conf *conf, int background) status_mesg (mesg_line1, mesg_line2); wnoutrefresh (win[STA].p); wins_doupdate (); - (void)keys_getch (win[STA].p); + keys_getch (win[STA].p, NULL); } - var = CUSTOM_CONF_NOVARIABLE; + pthread_mutex_lock (&nbar.mutex); for (;;) { if (fgets (buf, sizeof buf, data_file) == NULL) + break; + io_extract_data (e_conf, buf, sizeof buf); + + if (*e_conf == '\0') + continue; + + name = e_conf; + val = strchr (e_conf, '='); + if (val) { - break; + *val = '\0'; + val++; } - io_extract_data (e_conf, buf, sizeof buf); - switch (var) + var = CUSTOM_CONF_INVALID; + for (i = 0; i < sizeof (conf_varmap) / sizeof (struct conf_varname); i++) { - case CUSTOM_CONF_NOVARIABLE: - break; - case CUSTOM_CONF_AUTOSAVE: - conf->auto_save = fill_config_var (e_conf); - var = 0; - break; - case CUSTOM_CONF_PERIODICSAVE: - if (atoi (e_conf) < 0) - conf->periodic_save = 0; - else - conf->periodic_save = atoi (e_conf); - var = 0; - break; - case CUSTOM_CONF_CONFIRMQUIT: - conf->confirm_quit = fill_config_var (e_conf); - var = 0; - break; - case CUSTOM_CONF_CONFIRMDELETE: - conf->confirm_delete = fill_config_var (e_conf); - var = 0; - break; - case CUSTOM_CONF_SKIPSYSTEMDIALOGS: - conf->skip_system_dialogs = fill_config_var (e_conf); - var = 0; - break; - case CUSTOM_CONF_SKIPPROGRESSBAR: - conf->skip_progress_bar = fill_config_var (e_conf); - var = 0; - break; - case CUSTOM_CONF_CALENDAR_DEFAULTVIEW: - calendar_set_view (atoi (e_conf)); - var = 0; - break; - case CUSTOM_CONF_WEEKBEGINSONMONDAY: - if (fill_config_var (e_conf)) - calendar_set_first_day_of_week (MONDAY); - else - calendar_set_first_day_of_week (SUNDAY); - var = 0; - break; - case CUSTOM_CONF_COLORTHEME: - custom_load_color (e_conf, background); - var = 0; - break; - case CUSTOM_CONF_LAYOUT: - wins_set_layout (atoi (e_conf)); - var = 0; - break; - case CUSTOM_CONF_SBAR_WIDTH: - wins_set_sbar_width (atoi (e_conf)); - var = 0; - break; - case CUSTOM_CONF_NOTIFYBARSHOW: - nbar.show = fill_config_var (e_conf); - var = 0; - break; - case CUSTOM_CONF_NOTIFYBARDATE: - (void)strncpy (nbar.datefmt, e_conf, strlen (e_conf) + 1); - var = 0; - break; - case CUSTOM_CONF_NOTIFYBARCLOCK: - (void)strncpy (nbar.timefmt, e_conf, strlen (e_conf) + 1); - var = 0; - break; - case CUSTOM_CONF_NOTIFYBARWARNING: - nbar.cntdwn = atoi (e_conf); - var = 0; - break; - case CUSTOM_CONF_NOTIFYBARCOMMAND: - (void)strncpy (nbar.cmd, e_conf, strlen (e_conf) + 1); - var = 0; - break; - case CUSTOM_CONF_OUTPUTDATEFMT: - if (e_conf[0] != '\0') - (void)strncpy (conf->output_datefmt, e_conf, strlen (e_conf) + 1); - var = 0; - break; - case CUSTOM_CONF_INPUTDATEFMT: - conf->input_datefmt = atoi (e_conf); - if (conf->input_datefmt <= 0 || conf->input_datefmt >= DATE_FORMATS) - conf->input_datefmt = 1; - var = 0; - break; - case CUSTOM_CONF_DMON_ENABLE: - dmon.enable = fill_config_var (e_conf); - var = 0; - break; - case CUSTOM_CONF_DMON_LOG: - dmon.log = fill_config_var (e_conf); - var = 0; - break; - default: - EXIT (_("configuration variable unknown")); + if (strncmp (name, conf_varmap[i].name, BUFSIZ) == 0) + { + var = conf_varmap[i].var; + break; + } + } + + if (var == CUSTOM_CONF_INVALID) + { + EXIT (_("configuration variable unknown: \"%s\""), name); /* NOTREACHED */ } - if (strncmp (e_conf, "auto_save=", 10) == 0) - var = CUSTOM_CONF_AUTOSAVE; - else if (strncmp (e_conf, "periodic_save=", 14) == 0) - var = CUSTOM_CONF_PERIODICSAVE; - else if (strncmp (e_conf, "confirm_quit=", 13) == 0) - var = CUSTOM_CONF_CONFIRMQUIT; - else if (strncmp (e_conf, "confirm_delete=", 15) == 0) - var = CUSTOM_CONF_CONFIRMDELETE; - else if (strncmp (e_conf, "skip_system_dialogs=", 20) == 0) - var = CUSTOM_CONF_SKIPSYSTEMDIALOGS; - else if (strncmp (e_conf, "skip_progress_bar=", 18) == 0) - var = CUSTOM_CONF_SKIPPROGRESSBAR; - else if (strncmp (e_conf, "calendar_default_view=", 22) == 0) - var = CUSTOM_CONF_CALENDAR_DEFAULTVIEW; - else if (strncmp (e_conf, "week_begins_on_monday=", 22) == 0) - var = CUSTOM_CONF_WEEKBEGINSONMONDAY; - else if (strncmp (e_conf, "color-theme=", 12) == 0) - var = CUSTOM_CONF_COLORTHEME; - else if (strncmp (e_conf, "layout=", 7) == 0) - var = CUSTOM_CONF_LAYOUT; - else if (strncmp (e_conf, "side-bar_width=", 15) == 0) - var = CUSTOM_CONF_SBAR_WIDTH; - else if (strncmp (e_conf, "notify-bar_show=", 16) == 0) - var = CUSTOM_CONF_NOTIFYBARSHOW; - else if (strncmp (e_conf, "notify-bar_date=", 16) == 0) - var = CUSTOM_CONF_NOTIFYBARDATE; - else if (strncmp (e_conf, "notify-bar_clock=", 17) == 0) - var = CUSTOM_CONF_NOTIFYBARCLOCK; - else if (strncmp (e_conf, "notify-bar_warning=", 19) == 0) - var = CUSTOM_CONF_NOTIFYBARWARNING; - else if (strncmp (e_conf, "notify-bar_command=", 19) == 0) - var = CUSTOM_CONF_NOTIFYBARCOMMAND; - else if (strncmp (e_conf, "output_datefmt=", 15) == 0) - var = CUSTOM_CONF_OUTPUTDATEFMT; - else if (strncmp (e_conf, "input_datefmt=", 14) == 0) - var = CUSTOM_CONF_INPUTDATEFMT; - else if (strncmp (e_conf, "notify-daemon_enable=", 21) == 0) - var = CUSTOM_CONF_DMON_ENABLE; - else if (strncmp (e_conf, "notify-daemon_log=", 18) == 0) - var = CUSTOM_CONF_DMON_LOG; + if (val && (*val == '\0' || *val == '\n')) + { + /* Backward compatibility mode. */ + if (fgets (buf, sizeof buf, data_file) == NULL) + break; + io_extract_data (e_conf, buf, sizeof buf); + val = e_conf; + } + + if (!val || !custom_set_conf (var, val)) + { + EXIT (_("wrong configuration variable format for \"%s\""), name); + /* NOTREACHED */ + } } file_close (data_file, __FILE_POS__); pthread_mutex_unlock (&nbar.mutex); @@ -530,14 +572,14 @@ custom_layout_config (void) " 'a' -> appointment panel\n\n" " 't' -> todo panel\n\n"); - conf_win.p = (WINDOW *)0; - (void)snprintf (label, BUFSIZ, _("layout configuration")); + conf_win.p = NULL; + strncpy (label, _("layout configuration"), BUFSIZ); custom_confwin_init (&conf_win, label); cursor = mark = wins_layout () - 1; display_layout_config (&conf_win, mark, cursor); clear (); - while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT) + while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT) { need_reset = 0; switch (ch) @@ -621,7 +663,7 @@ custom_sidebar_config (void) keys_display_bindings_bar (win[STA].p, binding, 0, binding_size); wins_doupdate (); - while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT) + while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT) { switch (ch) { @@ -654,8 +696,8 @@ custom_sidebar_config (void) else { wins_reinit_panels (); - wins_update_border (); - wins_update_panels (); + wins_update_border (FLAG_ALL); + wins_update_panels (FLAG_ALL); keys_display_bindings_bar (win[STA].p, binding, 0, binding_size); wins_doupdate (); } @@ -681,7 +723,7 @@ custom_confwin_init (struct window *confwin, char *label) { erase_window_part (confwin->p, confwin->x, confwin->y, confwin->x + confwin->w, confwin->y + confwin->h); - (void)delwin (confwin->p); + delwin (confwin->p); } wins_get_config (); @@ -851,7 +893,7 @@ custom_color_config (void) char label[BUFSIZ]; conf_win.p = 0; - (void)snprintf (label, BUFSIZ, _("color theme")); + strncpy (label, _("color theme"), BUFSIZ); custom_confwin_init (&conf_win, label); mark_fore = NBUSERCOLORS; mark_back = SIZE - 1; @@ -860,7 +902,7 @@ custom_color_config (void) display_color_config (&conf_win, &mark_fore, &mark_back, cursor, theme_changed); clear (); - while ((ch = keys_getch (win[STA].p)) != KEY_GENERIC_QUIT) + while ((ch = keys_getch (win[STA].p, NULL)) != KEY_GENERIC_QUIT) { need_reset = 0; theme_changed = 0; @@ -953,7 +995,7 @@ custom_color_theme_name (char *theme_name) }; if (!colorize) - (void)snprintf (theme_name, BUFSIZ, "0"); + strncpy (theme_name, "0", BUFSIZ); else { pair_content (COLR_CUSTOM, &color[0], &color[1]); @@ -969,17 +1011,17 @@ custom_color_theme_name (char *theme_name) /* NOTREACHED */ } } - (void)snprintf (theme_name, BUFSIZ, "%s on %s", color_name[0], - color_name[1]); + snprintf (theme_name, BUFSIZ, "%s on %s", color_name[0], color_name[1]); } } /* Prints the general options. */ static int -print_general_options (WINDOW *win, struct conf *conf) +print_general_options (WINDOW *win) { enum { AUTO_SAVE, + AUTO_GC, PERIODIC_SAVE, CONFIRM_QUIT, CONFIRM_DELETE, @@ -995,6 +1037,7 @@ print_general_options (WINDOW *win, struct conf *conf) int y; char *opt[NB_OPTIONS] = { _("auto_save = "), + _("auto_gc = "), _("periodic_save = "), _("confirm_quit = "), _("confirm_delete = "), @@ -1007,66 +1050,72 @@ print_general_options (WINDOW *win, struct conf *conf) y = 0; mvwprintw (win, y, XPOS, "[1] %s ", opt[AUTO_SAVE]); - print_bool_option_incolor (win, conf->auto_save, y, + print_bool_option_incolor (win, conf.auto_save, y, XPOS + 4 + strlen (opt[AUTO_SAVE])); mvwprintw (win, y + 1, XPOS, _("(if set to YES, automatic save is done when quitting)")); y += YOFF; - mvwprintw (win, y, XPOS, "[2] %s ", opt[PERIODIC_SAVE]); + mvwprintw (win, y, XPOS, "[2] %s ", opt[AUTO_GC]); + print_bool_option_incolor (win, conf.auto_gc, y, + XPOS + 4 + strlen (opt[AUTO_GC])); + mvwprintw (win, y + 1, XPOS, + _("(run the garbage collector when quitting)")); + y += YOFF; + mvwprintw (win, y, XPOS, "[3] %s ", opt[PERIODIC_SAVE]); custom_apply_attr (win, ATTR_HIGHEST); mvwprintw (win, y, XPOS + 4 + strlen (opt[PERIODIC_SAVE]), "%d", - conf->periodic_save); + conf.periodic_save); custom_remove_attr (win, ATTR_HIGHEST); mvwprintw (win, y + 1, XPOS, _("(if not null, automatically save data every 'periodic_save' " "minutes)")); y += YOFF; - mvwprintw (win, y, XPOS, "[3] %s ", opt[CONFIRM_QUIT]); - print_bool_option_incolor (win, conf->confirm_quit, y, + mvwprintw (win, y, XPOS, "[4] %s ", opt[CONFIRM_QUIT]); + print_bool_option_incolor (win, conf.confirm_quit, y, XPOS + 4 + strlen (opt[CONFIRM_QUIT])); mvwprintw (win, y + 1, XPOS, _("(if set to YES, confirmation is required before quitting)")); y += YOFF; - mvwprintw (win, y, XPOS, "[4] %s ", opt[CONFIRM_DELETE]); - print_bool_option_incolor (win, conf->confirm_delete, y, + mvwprintw (win, y, XPOS, "[5] %s ", opt[CONFIRM_DELETE]); + print_bool_option_incolor (win, conf.confirm_delete, y, XPOS + 4 + strlen (opt[CONFIRM_DELETE])); mvwprintw (win, y + 1, XPOS, _("(if set to YES, confirmation is required " "before deleting an event)")); y += YOFF; - mvwprintw (win, y, XPOS, "[5] %s ", opt[SKIP_SYSTEM_DIAGS]); - print_bool_option_incolor (win, conf->skip_system_dialogs, y, + mvwprintw (win, y, XPOS, "[6] %s ", opt[SKIP_SYSTEM_DIAGS]); + print_bool_option_incolor (win, conf.skip_system_dialogs, y, XPOS + 4 + strlen (opt[SKIP_SYSTEM_DIAGS])); mvwprintw (win, y + 1, XPOS, _("(if set to YES, messages about loaded " "and saved data will not be displayed)")); y += YOFF; - mvwprintw (win, y, XPOS, "[6] %s ", opt[SKIP_PROGRESS_BAR]); - print_bool_option_incolor (win, conf->skip_progress_bar, y, + mvwprintw (win, y, XPOS, "[7] %s ", opt[SKIP_PROGRESS_BAR]); + print_bool_option_incolor (win, conf.skip_progress_bar, y, XPOS + 4 + strlen (opt[SKIP_PROGRESS_BAR])); mvwprintw (win, y + 1, XPOS, _("(if set to YES, progress bar will not be displayed " "when saving data)")); y += YOFF; - mvwprintw (win, y, XPOS, "[7] %s ", opt[WEEK_BEGINS_MONDAY]); + mvwprintw (win, y, XPOS, "[8] %s ", opt[WEEK_BEGINS_MONDAY]); print_bool_option_incolor (win, calendar_week_begins_on_monday (), y, XPOS + 4 + strlen (opt[WEEK_BEGINS_MONDAY])); mvwprintw (win, y + 1, XPOS, _("(if set to YES, monday is the first day of the week, " "else it is sunday)")); y += YOFF; - mvwprintw (win, y, XPOS, "[8] %s ", opt[OUTPUT_DATE_FMT]); + mvwprintw (win, y, XPOS, "[9] %s ", opt[OUTPUT_DATE_FMT]); custom_apply_attr (win, ATTR_HIGHEST); mvwprintw (win, y, XPOS + 4 + strlen (opt[OUTPUT_DATE_FMT]), "%s", - conf->output_datefmt); + conf.output_datefmt); custom_remove_attr (win, ATTR_HIGHEST); mvwprintw (win, y + 1, XPOS, _("(Format of the date to be displayed in non-interactive mode)")); y += YOFF; - mvwprintw (win, y, XPOS, "[9] %s ", opt[INPUT_DATE_FMT]); + mvwprintw (win, y, XPOS, "[0] %s ", opt[INPUT_DATE_FMT]); custom_apply_attr (win, ATTR_HIGHEST); mvwprintw (win, y, XPOS + 4 + strlen (opt[INPUT_DATE_FMT]), "%d", - conf->input_datefmt); + conf.input_datefmt); custom_remove_attr (win, ATTR_HIGHEST); mvwprintw (win, y + 1, XPOS, _("(Format to be used when entering a date: ")); mvwprintw (win, y + 2, XPOS, @@ -1091,7 +1140,7 @@ custom_set_swsiz (struct scrollwin *sw) /* General configuration. */ void -custom_general_config (struct conf *conf) +custom_general_config (void) { struct scrollwin cwin; char *number_str = @@ -1110,11 +1159,11 @@ custom_general_config (struct conf *conf) clear (); custom_set_swsiz (&cwin); - (void)snprintf (cwin.label, BUFSIZ, _("general options")); + strncpy (cwin.label, _("general options"), BUFSIZ); wins_scrollwin_init (&cwin); wins_show (cwin.win.p, cwin.label); status_mesg (number_str, keys); - cwin.total_lines = print_general_options (cwin.pad.p, conf); + cwin.total_lines = print_general_options (cwin.pad.p); wins_scrollwin_display (&cwin); buf = mem_malloc (BUFSIZ); @@ -1131,54 +1180,57 @@ custom_general_config (struct conf *conf) wins_scrollwin_up (&cwin, 1); break; case '1': - conf->auto_save = !conf->auto_save; + conf.auto_save = !conf.auto_save; break; case '2': + conf.auto_gc = !conf.auto_gc; + break; + case '3': status_mesg (periodic_save_str, ""); if (updatestring (win[STA].p, &buf, 0, 1) == 0) { int val = atoi (buf); if (val >= 0) - conf->periodic_save = val; - if (conf->periodic_save > 0) - io_start_psave_thread (conf); - else if (conf->periodic_save == 0) + conf.periodic_save = val; + if (conf.periodic_save > 0) + io_start_psave_thread (); + else if (conf.periodic_save == 0) io_stop_psave_thread (); } status_mesg (number_str, keys); break; - case '3': - conf->confirm_quit = !conf->confirm_quit; - break; case '4': - conf->confirm_delete = !conf->confirm_delete; + conf.confirm_quit = !conf.confirm_quit; break; case '5': - conf->skip_system_dialogs = !conf->skip_system_dialogs; + conf.confirm_delete = !conf.confirm_delete; break; case '6': - conf->skip_progress_bar = !conf->skip_progress_bar; + conf.skip_system_dialogs = !conf.skip_system_dialogs; break; case '7': - calendar_change_first_day_of_week (); + conf.skip_progress_bar = !conf.skip_progress_bar; break; case '8': + calendar_change_first_day_of_week (); + break; + case '9': status_mesg (output_datefmt_str, ""); - (void)strncpy (buf, conf->output_datefmt, - strlen (conf->output_datefmt) + 1); + strncpy (buf, conf.output_datefmt, + strlen (conf.output_datefmt) + 1); if (updatestring (win[STA].p, &buf, 0, 1) == 0) { - (void)strncpy (conf->output_datefmt, buf, strlen (buf) + 1); + strncpy (conf.output_datefmt, buf, strlen (buf) + 1); } status_mesg (number_str, keys); break; - case '9': + case '0': status_mesg (input_datefmt_str, ""); if (updatestring (win[STA].p, &buf, 0, 1) == 0) { int val = atoi (buf); if (val > 0 && val <= DATE_FORMATS) - conf->input_datefmt = val; + conf.input_datefmt = val; } status_mesg (number_str, keys); break; @@ -1205,7 +1257,7 @@ custom_general_config (struct conf *conf) } status_mesg (number_str, keys); - cwin.total_lines = print_general_options (cwin.pad.p, conf); + cwin.total_lines = print_general_options (cwin.pad.p); wins_scrollwin_display (&cwin); } mem_free (buf); @@ -1240,7 +1292,7 @@ print_keys_bindings (WINDOW *win, int selected_row, int selected_elm, int yoff) int nbkeys; nbkeys = keys_action_count_keys (action); - (void)snprintf (actionstr, BUFSIZ, "%s", keys_get_label (action)); + snprintf (actionstr, BUFSIZ, "%s", keys_get_label (action)); if (action == selected_row) custom_apply_attr (win, ATTR_HIGHEST); mvwprintw (win, y, XPOS, "%s ", actionstr); @@ -1312,7 +1364,7 @@ custom_keys_config (void) clear (); custom_set_swsiz (&kwin); nbdisplayed = (kwin.win.h - LABELLINES) / LINESPERKEY; - (void)snprintf (kwin.label, BUFSIZ, _("keys configuration")); + strncpy (kwin.label, _("keys configuration"), BUFSIZ); wins_scrollwin_init (&kwin); wins_show (kwin.win.p, kwin.label); custom_keys_config_bar (); @@ -1326,7 +1378,7 @@ custom_keys_config (void) { int ch; - ch = keys_getch (win[STA].p); + ch = keys_getch (win[STA].p, NULL); switch (ch) { case KEY_MOVE_UP: |