#include "progname.qh"
#include "static.qh"
+ERASEABLE
void RegisterCvars(void(string name, string def, string desc, bool archive, string file) f) {}
+ERASEABLE
bool cvar_value_issafe(string s)
{
if (strstrofs(s, "\"", 0) >= 0) return false;
}
/** escape the string to make it safe for consoles */
+ERASEABLE
string MakeConsoleSafe(string input)
{
input = strreplace("\n", "", input);
return input;
}
+ERASEABLE
void cvar_describe(string name, string desc)
{
localcmd(sprintf("\nset %1$s \"$%1$s\" \"%2$s\"\n", name, MakeConsoleSafe(desc)));
}
+ERASEABLE
void cvar_archive(string name)
{
localcmd(sprintf("\nseta %1$s \"$%1$s\"\n", name));
}
+ERASEABLE
void RegisterCvars_Set(string name, string def, string desc, bool archive, string file)
{
cvar_describe(name, desc);
}
int RegisterCvars_Save_fd;
+ERASEABLE
void RegisterCvars_Save(string name, string def, string desc, bool archive, string file)
{
if (!archive) return;
#define repr_cvar_string(x) (x)
#define repr_cvar_vector(x) (sprintf("%v", x))
+//pseudo prototypes:
+// void AUTOCVAR(<cvar_name>, <qc_var_type>, default_cvar_value, string desc)
+// void AUTOCVAR_SAVE(<cvar_name>, <qc_var_type>, default_cvar_value, string desc)
+// where default_cvar_value has type <qc_var_type>
+// e.g.: AUTOCVAR(mycvar, float, 2.5, "cvar description")
+
#define __AUTOCVAR(file, archive, var, type, desc, default) \
- [[accumulate]] void RegisterCvars(void(string, string, string, bool, string) f) \
+ ACCUMULATE void RegisterCvars(void(string, string, string, bool, string) f) \
{ \
f( #var, repr_cvar_##type(default), desc, archive, file); \
} \