]> icculus.org git repositories - btb/d2x.git/blob - main/cvar.c
convenience function to set numeric cvars
[btb/d2x.git] / main / cvar.c
1 /* Console variables */
2
3
4 #ifdef HAVE_CONFIG_H
5 #include <conf.h>
6 #endif
7
8 #include <stdlib.h>
9
10 #include "cvar.h"
11 #include "error.h"
12 #include "strutil.h"
13 #include "u_mem.h"
14
15
16 /* The list of cvars */
17 cvar_t *cvar_list = NULL;
18
19 int cvar_initialized = 0;
20
21
22 void cvar_free(void)
23 {
24         cvar_t *ptr;
25
26         for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
27                 d_free(ptr->string);
28 }
29
30
31 void cvar_init(void)
32 {
33         atexit(cvar_free);
34         cvar_initialized = 1;
35 }
36
37
38 /* Register a cvar */
39 void cvar_registervariable (cvar_t *cvar)
40 {
41         cvar_t *ptr;
42         char *stringval;
43
44         if (!cvar_initialized)
45                 cvar_init();
46
47         Assert(cvar != NULL);
48
49         stringval = cvar->string;
50         cvar->next = NULL;
51         cvar->value = strtod(cvar->string, (char **) NULL);
52         cvar->string = d_strdup(stringval);
53
54         if (cvar_list == NULL)
55         {
56                 cvar_list = cvar;
57         } else
58         {
59                 for (ptr = cvar_list; ptr->next != NULL; ptr = ptr->next) ;
60                 ptr->next = cvar;
61         }
62 }
63
64
65 /* Set a CVar's value */
66 void cvar_set (char *cvar_name, char *value)
67 {
68         cvar_t *ptr;
69
70         for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
71                 if (!stricmp(cvar_name, ptr->name)) break;
72
73         if (ptr == NULL) return; // If we didn't find the cvar, give up
74
75         d_free(ptr->string);
76         ptr->string = d_strdup(value);
77         ptr->value = strtod(value, (char **) NULL);
78 }
79
80
81 void cvar_set_value(char *cvar_name, float value)
82 {
83         char stringval[16];
84
85         snprintf(stringval, 16, "%f", value);
86
87         cvar_set(cvar_name, stringval);
88 }
89
90
91 /* Get a CVar's value */
92 float cvar (char *cvar_name)
93 {
94         cvar_t *ptr;
95
96         for (ptr = cvar_list; ptr != NULL; ptr = ptr->next)
97                 if (!strcmp(cvar_name, ptr->name)) break;
98
99         if (ptr == NULL) return 0.0; // If we didn't find the cvar, give up
100
101         return ptr->value;
102 }