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];
40 if (argc == 2 && !stricmp(argv[1], "-h")) {
41 con_printf(CON_NORMAL, "%s <name> <value>\n", argv[0]);
42 con_printf(CON_NORMAL, " set variable <name> equal to <value>\n");
43 con_printf(CON_NORMAL, "%s <name>\n", argv[0]);
44 con_printf(CON_NORMAL, " show value of <name>\n");
45 con_printf(CON_NORMAL, "%s\n", argv[0]);
46 con_printf(CON_NORMAL, " show value of all variables\n");
53 if ((ptr = cvar_find(argv[1])))
54 con_printf(CON_NORMAL, "%s: %s\n", ptr->name, ptr->string);
56 con_printf(CON_NORMAL, "set: variable %s not found\n", argv[1]);
63 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
64 con_printf(CON_NORMAL, "%s: %s\n", ptr->name, ptr->string);
68 ret = snprintf(buf, CVAR_MAX_LENGTH, "%s", argv[2]);
69 if (ret >= CVAR_MAX_LENGTH) {
70 con_printf(CON_CRITICAL, "set: value too long (max %d characters)\n", CVAR_MAX_LENGTH);
74 for (i = 3; i < argc; i++) {
75 ret = snprintf(buf, CVAR_MAX_LENGTH, "%s %s", buf, argv[i]);
76 if (ret >= CVAR_MAX_LENGTH) {
77 con_printf(CON_CRITICAL, "set: value too long (max %d characters)\n", CVAR_MAX_LENGTH);
81 cvar_set(argv[1], buf);
87 cmd_addcommand("set", cvar_cmd_set);
94 cvar_t *cvar_find(char *cvar_name)
98 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
99 if (!stricmp(cvar_name, ptr->name))
106 char *cvar_complete(char *text)
109 int len = (int)strlen(text);
114 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
115 if (!strnicmp(text, ptr->name, len))
122 /* Register a cvar */
123 void cvar_registervariable (cvar_t *cvar)
128 if (!cvar_initialized)
131 Assert(cvar != NULL);
133 stringval = cvar->string;
135 cvar->string = d_strdup(stringval);
136 cvar->value = fl2f(strtod(cvar->string, (char **) NULL));
137 cvar->intval = (int)strtol(cvar->string, NULL, 10);
140 if (cvar_list == NULL) {
145 /* insert at end of list */
146 for (ptr = cvar_list; ptr->next != NULL; ptr = ptr->next)
147 Assert(stricmp(cvar->name, ptr->name));
152 /* Set a CVar's value */
153 void cvar_set_cvar(cvar_t *cvar, char *value)
158 d_free(cvar->string);
159 cvar->string = d_strdup(value);
160 cvar->value = fl2f(strtod(cvar->string, (char **) NULL));
161 cvar->intval = (int)strtol(cvar->string, NULL, 10);
162 con_printf(CON_VERBOSE, "%s: %s\n", cvar->name, cvar->string);
166 void cvar_set_cvarf(cvar_t *cvar, char *fmt, ...)
169 char buf[CVAR_MAX_LENGTH];
172 va_start (arglist, fmt);
173 n = vsnprintf (buf, CVAR_MAX_LENGTH, fmt, arglist);
176 Assert(!(n < 0 || n > CVAR_MAX_LENGTH));
178 cvar_set_cvar(cvar, buf);
182 void cvar_set (char *cvar_name, char *value)
186 cvar = cvar_find(cvar_name);
189 con_printf(CON_NORMAL, "cvar %s not found\n", cvar_name);
193 cvar_set_cvar(cvar, value);
197 /* Get a CVar's value */
198 fix cvar (char *cvar_name)
202 cvar = cvar_find(cvar_name);
205 return 0.0; // If we didn't find the cvar, give up
211 /* Write archive cvars to file */
212 void cvar_write(CFILE *file)
216 for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
218 PHYSFSX_printf(file, "%s=%s\n", ptr->name, ptr->string);