1 /* Console variables */
18 #define CVAR_MAX_LENGTH 1024
19 #define CVAR_MAX_CVARS 1024
21 /* The list of cvars */
23 cvar_t *cvar_list[CVAR_MAX_CVARS];
30 d_free(cvar_list[Num_cvars]->string);
32 hashtable_free(&cvar_hash);
36 void cvar_cmd_set(int argc, char **argv)
38 char buf[CVAR_MAX_LENGTH];
44 if ((ptr = cvar_find(argv[1])))
45 con_printf(CON_NORMAL, "%s: %s\n", ptr->name, ptr->string);
47 con_printf(CON_NORMAL, "set: variable %s not found\n", argv[1]);
52 for (i = 0; i < Num_cvars; i++)
53 con_printf(CON_NORMAL, "%s: %s\n", cvar_list[i]->name, cvar_list[i]->string);
57 ret = snprintf(buf, sizeof(buf), "%s", argv[2]);
58 if (ret >= CVAR_MAX_LENGTH) {
59 con_printf(CON_CRITICAL, "set: value too long (max %d characters)\n", CVAR_MAX_LENGTH);
63 for (i = 3; i < argc; i++) {
64 ret = snprintf(buf, CVAR_MAX_LENGTH, "%s %s", buf, argv[i]);
65 if (ret >= CVAR_MAX_LENGTH) {
66 con_printf(CON_CRITICAL, "set: value too long (max %d characters)\n", CVAR_MAX_LENGTH);
70 cvar_set(argv[1], buf);
76 hashtable_init( &cvar_hash, CVAR_MAX_CVARS );
78 cmd_addcommand("set", cvar_cmd_set, "set <name> <value>\n" " set variable <name> equal to <value>\n"
79 "set <name>\n" " show value of <name>\n"
80 "set\n" " show value of all variables");
86 cvar_t *cvar_find(char *cvar_name)
90 i = hashtable_search( &cvar_hash, cvar_name );
99 const char *cvar_complete(char *text)
102 size_t len = strlen(text);
107 for (i = 0; i < Num_cvars; i++)
108 if (!strnicmp(text, cvar_list[i]->name, len))
109 return cvar_list[i]->name;
115 /* Register a cvar */
116 void cvar_registervariable(cvar_t *cvar)
121 Assert(cvar != NULL);
123 stringval = cvar->string;
125 cvar->string = d_strdup(stringval);
126 cvar->value = fl2f(strtod(cvar->string, NULL));
127 cvar->intval = (int)strtol(cvar->string, NULL, 10);
129 /* insert at end of list */
130 for (i = 0; i < Num_cvars; i++)
131 Assert(stricmp(cvar->name, cvar_list[i]->name));
132 hashtable_insert(&cvar_hash, cvar->name, Num_cvars);
133 cvar_list[Num_cvars++] = cvar;
137 /* Set a CVar's value */
138 void cvar_set_cvar(cvar_t *cvar, char *value)
143 d_free(cvar->string);
144 cvar->string = d_strdup(value);
145 cvar->value = fl2f(strtod(cvar->string, NULL));
146 cvar->intval = (int)strtol(cvar->string, NULL, 10);
147 con_printf(CON_VERBOSE, "%s: %s\n", cvar->name, cvar->string);
151 void cvar_set_cvarf(cvar_t *cvar, const char *fmt, ...)
154 char buf[CVAR_MAX_LENGTH];
157 va_start (arglist, fmt);
158 n = vsnprintf(buf, sizeof(buf), fmt, arglist);
161 Assert(!(n < 0 || n > CVAR_MAX_LENGTH));
163 cvar_set_cvar(cvar, buf);
167 void cvar_set(char *cvar_name, char *value)
171 cvar = cvar_find(cvar_name);
174 con_printf(CON_NORMAL, "cvar %s not found\n", cvar_name);
178 cvar_set_cvar(cvar, value);
182 /* Write archive cvars to file */
183 void cvar_write(CFILE *file)
187 for (i = 0; i < Num_cvars; i++)
188 if (cvar_list[i]->archive)
189 PHYSFSX_printf(file, "%s=%s\n", cvar_list[i]->name, cvar_list[i]->string);