From 571aafcb45ceb8ab28863ba6d67182a36345e7a5 Mon Sep 17 00:00:00 2001 From: Kevin Easton Date: Thu, 26 Oct 2017 17:36:28 +1100 Subject: [PATCH] Add helper function save_vars_by_flags() for saving variables The majority of save_variables() and savebitchx_variables() were common code, so pull it out into a helper function. --- source/vars.c | 93 ++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 49 deletions(-) diff --git a/source/vars.c b/source/vars.c index 6c3225b..2e45f3e 100644 --- a/source/vars.c +++ b/source/vars.c @@ -1212,78 +1212,73 @@ enum VAR_TYPES var_index = 0; } } -/* - * save_variables: this writes all of the IRCII variables to the given FILE - * pointer in such a way that they can be loaded in using LOAD or the -l switch +/* save_vars_by_flags() + * + * Helper function to save a set of variables that match the given flags to + * a file that can be later /LOADed. + * + * int_flags_mask and flags_mask give the masks of the flags we care about, + * and int_flags and flags give the required values of those flags. */ -void save_variables(FILE *fp, int do_all) -{ - IrcVariable *var; - - for (var = irc_variable; var->name; var++) - { - if (!(var->int_flags & VIF_CHANGED)) - continue; - if (var->flags & VF_NO_SAVE) - continue; - if ((do_all == 1) || !(var->int_flags & VIF_GLOBAL)) - { - fprintf(fp, "SET "); - switch (var->type) - { - case BOOL_TYPE_VAR: - fprintf(fp, "%s %s\n", var->name, var->integer ? - var_settings[ON] : var_settings[OFF]); - break; - case CHAR_TYPE_VAR: - fprintf(fp, "%s %c\n", var->name, var->integer); - break; - case INT_TYPE_VAR: - fprintf(fp, "%s %u\n", var->name, var->integer); - break; - case STR_TYPE_VAR: - if (var->string) - fprintf(fp, "%s %s\n", var->name, - var->string); - else - fprintf(fp, "-%s\n", var->name); - break; - } - } - } -} - -void savebitchx_variables(FILE *fp) +static int save_vars_by_flags(FILE *fp, char int_flags_mask, char int_flags, unsigned short flags_mask, unsigned short flags) { IrcVariable *var; int count = 0; + for (var = irc_variable; var->name; var++) { - if (!(var->flags & VIF_BITCHX)) + if ((var->int_flags & int_flags_mask) != int_flags) continue; + if ((var->flags & flags_mask) != flags) + continue; + count++; - fprintf(fp, "SET "); switch (var->type) { case BOOL_TYPE_VAR: - fprintf(fp, "%s %s\n", var->name, var->integer ? + fprintf(fp, "SET %s %s\n", var->name, var->integer ? var_settings[ON] : var_settings[OFF]); break; case CHAR_TYPE_VAR: - fprintf(fp, "%s %c\n", var->name, var->integer); + fprintf(fp, "SET %s %c\n", var->name, var->integer); break; case INT_TYPE_VAR: - fprintf(fp, "%s %u\n", var->name, var->integer); + fprintf(fp, "SET %s %d\n", var->name, var->integer); break; case STR_TYPE_VAR: if (var->string) - fprintf(fp, "%s %s\n", var->name, - var->string); + fprintf(fp, "SET %s %s\n", var->name, var->string); else - fprintf(fp, "-%s\n", var->name); + fprintf(fp, "SET -%s\n", var->name); break; } } + + return count; +} + +/* save_variables() + * + * Save all of the IRCII variables that have been changed from the defaults + * to a file. + */ +void save_variables(FILE *fp, int do_all) +{ + /* Save only VIF_CHANGED variables. If do_all is not set, + * don't save VIF_GLOBAL variables. */ + char int_flags_mask = VIF_CHANGED | (do_all ? 0 : VIF_GLOBAL); + + save_vars_by_flags(fp, int_flags_mask, VIF_CHANGED, VF_NO_SAVE, 0); +} + +/* savebitchx_variables() + * + * Save all the BitchX-specific variables to a file. + */ +void savebitchx_variables(FILE *fp) +{ + /* Save all VIF_BITCHX variables. */ + int count = save_vars_by_flags(fp, 0, 0, VIF_BITCHX | VF_NO_SAVE, VIF_BITCHX); bitchsay("Saved %d variables", count); }