Add save_dllvar() function exported to modules

This helper function is for modules to save the contents of their module variables to a file
as SET commands.

It will remove the need to export the raw dll_variable list to modules.
This commit is contained in:
Kevin Easton
2017-11-06 16:54:51 +11:00
parent 4b8ffbc52a
commit 3f047ab2a9
4 changed files with 35 additions and 1 deletions

View File

@@ -1,5 +1,7 @@
[Changes 1.2.2] [Changes 1.2.2]
* Add save_dllvar() function exported to modules. (caf)
* Shitlist level 3/4 should kick regardless of /CSET KICK_IF_BANNED. * Shitlist level 3/4 should kick regardless of /CSET KICK_IF_BANNED.
Reported by Ancient. (caf) Reported by Ancient. (caf)

View File

@@ -10,7 +10,7 @@
* if we change the table below, we change this module number to the * if we change the table below, we change this module number to the
* current date (YYYYMMDDxx where xx is a serial number). * current date (YYYYMMDDxx where xx is a serial number).
*/ */
#define MODULE_VERSION 2017071701UL #define MODULE_VERSION 2017110601UL
#include "struct.h" #include "struct.h"
@@ -92,6 +92,7 @@ char *BX_get_dllstring_var(char *);
int BX_get_dllint_var(char *); int BX_get_dllint_var(char *);
void BX_set_dllstring_var(char *, char *); void BX_set_dllstring_var(char *, char *);
void BX_set_dllint_var(char *, unsigned int); void BX_set_dllint_var(char *, unsigned int);
void BX_save_dllvar(FILE *, char *);
RawDll *find_raw_proc(char *, char **); RawDll *find_raw_proc(char *, char **);
int check_version(unsigned long); int check_version(unsigned long);
@@ -418,6 +419,7 @@ enum FUNCTION_VALUE
SET_DLLINT_VAR, SET_DLLINT_VAR,
GET_DLLSTRING_VAR, GET_DLLSTRING_VAR,
SET_DLLSTRING_VAR, SET_DLLSTRING_VAR,
SAVE_DLLVAR,
GET_INT_VAR, GET_INT_VAR,
SET_INT_VAR, SET_INT_VAR,
GET_STRING_VAR, GET_STRING_VAR,

View File

@@ -463,6 +463,7 @@ extern Function_ptr *global;
#define set_dllint_var (*(void (*)(char *, unsigned int ))global[SET_DLLINT_VAR]) #define set_dllint_var (*(void (*)(char *, unsigned int ))global[SET_DLLINT_VAR])
#define get_dllstring_var (*(char *(*)(char *))global[GET_DLLSTRING_VAR]) #define get_dllstring_var (*(char *(*)(char *))global[GET_DLLSTRING_VAR])
#define set_dllstring_var (*(void (*)(char *, char *))global[SET_DLLSTRING_VAR]) #define set_dllstring_var (*(void (*)(char *, char *))global[SET_DLLSTRING_VAR])
#define save_dllvar (*(void (*)(FILE *, char *))global[SAVE_DLLVAR])
#define get_int_var (*(int (*)(enum VAR_TYPES ))global[GET_INT_VAR]) #define get_int_var (*(int (*)(enum VAR_TYPES ))global[GET_INT_VAR])
#define set_int_var (*(void (*)(enum VAR_TYPES , unsigned int ))global[SET_INT_VAR]) #define set_int_var (*(void (*)(enum VAR_TYPES , unsigned int ))global[SET_INT_VAR])

View File

@@ -548,11 +548,13 @@ static int already_done = 0;
global_table[SET_DLLINT_VAR] = (Function_ptr) BX_set_dllint_var; global_table[SET_DLLINT_VAR] = (Function_ptr) BX_set_dllint_var;
global_table[GET_DLLSTRING_VAR] = (Function_ptr) BX_get_dllstring_var; global_table[GET_DLLSTRING_VAR] = (Function_ptr) BX_get_dllstring_var;
global_table[SET_DLLSTRING_VAR] = (Function_ptr) BX_set_dllstring_var; global_table[SET_DLLSTRING_VAR] = (Function_ptr) BX_set_dllstring_var;
global_table[SAVE_DLLVAR] = (Function_ptr) BX_save_dllvar;
#else #else
global_table[GET_DLLINT_VAR] = (Function_ptr) null_function; global_table[GET_DLLINT_VAR] = (Function_ptr) null_function;
global_table[SET_DLLINT_VAR] = (Function_ptr) null_function; global_table[SET_DLLINT_VAR] = (Function_ptr) null_function;
global_table[GET_DLLSTRING_VAR] = (Function_ptr) null_function; global_table[GET_DLLSTRING_VAR] = (Function_ptr) null_function;
global_table[SET_DLLSTRING_VAR] = (Function_ptr) null_function; global_table[SET_DLLSTRING_VAR] = (Function_ptr) null_function;
global_table[SAVE_DLLVAR] = (Function_ptr) null_function;
#endif #endif
global_table[GET_INT_VAR] = (Function_ptr) BX_get_int_var; global_table[GET_INT_VAR] = (Function_ptr) BX_get_int_var;
global_table[SET_INT_VAR] = (Function_ptr) BX_set_int_var; global_table[SET_INT_VAR] = (Function_ptr) BX_set_int_var;
@@ -759,6 +761,33 @@ void BX_set_dllint_var(char *typestr, unsigned int value)
} }
} }
void BX_save_dllvar(FILE *fp, char *var)
{
IrcVariableDll *dll = lookup_dllvar(var);
if (dll)
{
switch (dll->type)
{
case BOOL_TYPE_VAR:
fprintf(fp, "SET %s %s\n", dll->name, dll->integer ? "ON" : "OFF");
break;
case CHAR_TYPE_VAR:
fprintf(fp, "SET %s %c\n", dll->name, dll->integer);
break;
case INT_TYPE_VAR:
fprintf(fp, "SET %s %d\n", dll->name, dll->integer);
break;
case STR_TYPE_VAR:
if (dll->string)
fprintf(fp, "SET %s %s\n", dll->name, dll->string);
else
fprintf(fp, "SET -%s\n", dll->name);
break;
}
}
}
BUILT_IN_COMMAND(dll_load) BUILT_IN_COMMAND(dll_load)
{ {
#if defined(HPUX) /* HP machines */ #if defined(HPUX) /* HP machines */