diff --git a/Changelog b/Changelog index 897a42c..0d35ddc 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,7 @@ [Changes 1.2.2] +* Add save_dllvar() function exported to modules. (caf) + * Shitlist level 3/4 should kick regardless of /CSET KICK_IF_BANNED. Reported by Ancient. (caf) diff --git a/include/module.h b/include/module.h index e4ca2ec..17128e9 100644 --- a/include/module.h +++ b/include/module.h @@ -10,7 +10,7 @@ * if we change the table below, we change this module number to the * current date (YYYYMMDDxx where xx is a serial number). */ -#define MODULE_VERSION 2017071701UL +#define MODULE_VERSION 2017110601UL #include "struct.h" @@ -92,6 +92,7 @@ char *BX_get_dllstring_var(char *); int BX_get_dllint_var(char *); void BX_set_dllstring_var(char *, char *); void BX_set_dllint_var(char *, unsigned int); +void BX_save_dllvar(FILE *, char *); RawDll *find_raw_proc(char *, char **); int check_version(unsigned long); @@ -418,6 +419,7 @@ enum FUNCTION_VALUE SET_DLLINT_VAR, GET_DLLSTRING_VAR, SET_DLLSTRING_VAR, + SAVE_DLLVAR, GET_INT_VAR, SET_INT_VAR, GET_STRING_VAR, diff --git a/include/modval.h b/include/modval.h index 77a95fd..9b44d37 100644 --- a/include/modval.h +++ b/include/modval.h @@ -463,6 +463,7 @@ extern Function_ptr *global; #define set_dllint_var (*(void (*)(char *, unsigned int ))global[SET_DLLINT_VAR]) #define get_dllstring_var (*(char *(*)(char *))global[GET_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 set_int_var (*(void (*)(enum VAR_TYPES , unsigned int ))global[SET_INT_VAR]) diff --git a/source/modules.c b/source/modules.c index 6ccfe00..0b83b84 100644 --- a/source/modules.c +++ b/source/modules.c @@ -548,11 +548,13 @@ static int already_done = 0; global_table[SET_DLLINT_VAR] = (Function_ptr) BX_set_dllint_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[SAVE_DLLVAR] = (Function_ptr) BX_save_dllvar; #else global_table[GET_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[SET_DLLSTRING_VAR] = (Function_ptr) null_function; + global_table[SAVE_DLLVAR] = (Function_ptr) null_function; #endif global_table[GET_INT_VAR] = (Function_ptr) BX_get_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) { #if defined(HPUX) /* HP machines */