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.
This commit is contained in:
Kevin Easton
2017-10-26 17:36:28 +11:00
parent dc30b852e1
commit 571aafcb45

View File

@@ -1212,78 +1212,73 @@ enum VAR_TYPES var_index = 0;
} }
} }
/* /* save_vars_by_flags()
* 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 * 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) static int save_vars_by_flags(FILE *fp, char int_flags_mask, char int_flags, unsigned short flags_mask, unsigned short flags)
{
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)
{ {
IrcVariable *var; IrcVariable *var;
int count = 0; int count = 0;
for (var = irc_variable; var->name; var++) for (var = irc_variable; var->name; var++)
{ {
if (!(var->flags & VIF_BITCHX)) if ((var->int_flags & int_flags_mask) != int_flags)
continue; continue;
if ((var->flags & flags_mask) != flags)
continue;
count++; count++;
fprintf(fp, "SET ");
switch (var->type) switch (var->type)
{ {
case BOOL_TYPE_VAR: 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]); var_settings[ON] : var_settings[OFF]);
break; break;
case CHAR_TYPE_VAR: case CHAR_TYPE_VAR:
fprintf(fp, "%s %c\n", var->name, var->integer); fprintf(fp, "SET %s %c\n", var->name, var->integer);
break; break;
case INT_TYPE_VAR: case INT_TYPE_VAR:
fprintf(fp, "%s %u\n", var->name, var->integer); fprintf(fp, "SET %s %d\n", var->name, var->integer);
break; break;
case STR_TYPE_VAR: case STR_TYPE_VAR:
if (var->string) if (var->string)
fprintf(fp, "%s %s\n", var->name, fprintf(fp, "SET %s %s\n", var->name, var->string);
var->string);
else else
fprintf(fp, "-%s\n", var->name); fprintf(fp, "SET -%s\n", var->name);
break; 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); bitchsay("Saved %d variables", count);
} }