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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user