1 /* Console variables */
17 #define CVAR_MAX_LENGTH 1024
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)
35 void cvar_cmd_set(int argc, char **argv)
37 char buf[CVAR_MAX_LENGTH];
43 ret = snprintf(buf, CVAR_MAX_LENGTH, "%s", argv[2]);
44 if (ret >= CVAR_MAX_LENGTH) {
45 con_printf(CON_CRITICAL, "set: value too long (max %d characters)\n", CVAR_MAX_LENGTH);
49 for (i = 3; i < argc; i++) {
50 ret = snprintf(buf, CVAR_MAX_LENGTH, "%s %s", buf, argv[i]);
51 if (ret >= CVAR_MAX_LENGTH) {
52 con_printf(CON_CRITICAL, "set: value too long (max %d characters)\n", CVAR_MAX_LENGTH);
56 cvar_set(argv[1], buf);
62 cmd_addcommand("set", cvar_cmd_set);
69 cvar_t *cvar_find(char *cvar_name)
73 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
74 if (!stricmp(cvar_name, ptr->name))
81 char *cvar_complete(char *text)
84 int len = strlen(text);
89 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
90 if (!strnicmp(text, ptr->name, len))
97 #define cvar_round(x) ((x)>=0?(int)((x)+0.5):(int)((x)-0.5))
100 void cvar_registervariable (cvar_t *cvar)
105 if (!cvar_initialized)
108 Assert(cvar != NULL);
110 stringval = cvar->string;
112 cvar->string = d_strdup(stringval);
113 cvar->value = strtod(cvar->string, (char **) NULL);
114 cvar->intval = cvar_round(cvar->value);
117 if (cvar_list == NULL) {
122 /* insert at end of list */
123 for (ptr = cvar_list; ptr->next != NULL; ptr = ptr->next)
124 Assert(stricmp(cvar->name, ptr->name));
129 /* Set a CVar's value */
130 void cvar_set_cvar(cvar_t *cvar, char *value)
135 d_free(cvar->string);
136 cvar->string = d_strdup(value);
137 cvar->value = strtod(cvar->string, (char **) NULL);
138 cvar->intval = cvar_round(cvar->value);
142 void cvar_set_cvarf(cvar_t *cvar, char *fmt, ...)
145 char buf[CVAR_MAX_LENGTH];
148 va_start (arglist, fmt);
149 n = vsnprintf (buf, CVAR_MAX_LENGTH, fmt, arglist);
152 Assert(!(n < 0 || n > CVAR_MAX_LENGTH));
154 cvar_set_cvar(cvar, buf);
158 void cvar_set (char *cvar_name, char *value)
160 cvar_set_cvar(cvar_find(cvar_name), value);
164 /* Get a CVar's value */
165 float cvar (char *cvar_name)
169 cvar = cvar_find(cvar_name);
172 return 0.0; // If we didn't find the cvar, give up
178 /* Write archive cvars to file */
179 void cvar_write(CFILE *file)
183 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
185 PHYSFSX_printf(file, "%s=%s\n", ptr->name, ptr->string);