1 /* Console variables */
17 #define FLOAT_STRING_SIZE (3 + DBL_MANT_DIG - DBL_MIN_EXP + 1)
20 /* The list of cvars */
21 cvar_t *cvar_list = NULL;
23 int cvar_initialized = 0;
30 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
42 cvar_t *cvar_find(char *cvar_name)
46 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
47 if (!stricmp(cvar_name, ptr->name))
54 char *cvar_complete(char *text)
57 int len = strlen(text);
62 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
63 if (!strnicmp(text, ptr->name, len))
70 #define cvar_round(x) ((x)>=0?(int)((x)+0.5):(int)((x)-0.5))
73 void cvar_registervariable (cvar_t *cvar)
78 if (!cvar_initialized)
83 stringval = cvar->string;
85 cvar->string = d_strdup(stringval);
86 cvar->value = strtod(cvar->string, (char **) NULL);
87 cvar->intval = cvar_round(cvar->value);
90 if (cvar_list == NULL) {
95 /* insert at end of list */
96 for (ptr = cvar_list; ptr->next != NULL; ptr = ptr->next)
97 Assert(stricmp(cvar->name, ptr->name));
102 /* Set a CVar's value */
103 void cvar_set_cvar(cvar_t *cvar, char *value)
105 d_free(cvar->string);
106 cvar->string = d_strdup(value);
107 cvar->value = strtod(cvar->string, (char **) NULL);
108 cvar->intval = cvar_round(cvar->value);
112 void cvar_set_cvar_value(cvar_t *cvar, float value)
114 char stringval[FLOAT_STRING_SIZE];
116 snprintf(stringval, FLOAT_STRING_SIZE, "%f", value);
118 cvar_set_cvar(cvar, stringval);
122 void cvar_set (char *cvar_name, char *value)
124 cvar_set_cvar(cvar_find(cvar_name), value);
128 void cvar_set_value(char *cvar_name, float value)
130 char stringval[FLOAT_STRING_SIZE];
132 snprintf(stringval, FLOAT_STRING_SIZE, "%f", value);
134 cvar_set_cvar(cvar_find(cvar_name), stringval);
138 /* Get a CVar's value */
139 float cvar (char *cvar_name)
143 cvar = cvar_find(cvar_name);
146 return 0.0; // If we didn't find the cvar, give up
152 /* Write archive cvars to file */
153 void cvar_write(CFILE *file)
157 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
159 PHYSFSX_printf(file, "%s=%s\n", ptr->name, ptr->string);