diff options
Diffstat (limited to 'apps/plugins/sdl/progs/quake/cvar.c')
-rw-r--r-- | apps/plugins/sdl/progs/quake/cvar.c | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/quake/cvar.c b/apps/plugins/sdl/progs/quake/cvar.c new file mode 100644 index 0000000000..07a761a332 --- /dev/null +++ b/apps/plugins/sdl/progs/quake/cvar.c | |||
@@ -0,0 +1,224 @@ | |||
1 | /* | ||
2 | Copyright (C) 1996-1997 Id Software, Inc. | ||
3 | |||
4 | This program is free software; you can redistribute it and/or | ||
5 | modify it under the terms of the GNU General Public License | ||
6 | as published by the Free Software Foundation; either version 2 | ||
7 | of the License, or (at your option) any later version. | ||
8 | |||
9 | This program is distributed in the hope that it will be useful, | ||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
12 | |||
13 | See the GNU General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with this program; if not, write to the Free Software | ||
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
18 | |||
19 | */ | ||
20 | // cvar.c -- dynamic variable tracking | ||
21 | |||
22 | #include "quakedef.h" | ||
23 | |||
24 | cvar_t *cvar_vars; | ||
25 | char *cvar_null_string = ""; | ||
26 | |||
27 | /* | ||
28 | ============ | ||
29 | Cvar_FindVar | ||
30 | ============ | ||
31 | */ | ||
32 | cvar_t *Cvar_FindVar (char *var_name) | ||
33 | { | ||
34 | cvar_t *var; | ||
35 | |||
36 | for (var=cvar_vars ; var ; var=var->next) | ||
37 | if (!Q_strcmp (var_name, var->name)) | ||
38 | return var; | ||
39 | |||
40 | return NULL; | ||
41 | } | ||
42 | |||
43 | /* | ||
44 | ============ | ||
45 | Cvar_VariableValue | ||
46 | ============ | ||
47 | */ | ||
48 | float Cvar_VariableValue (char *var_name) | ||
49 | { | ||
50 | cvar_t *var; | ||
51 | |||
52 | var = Cvar_FindVar (var_name); | ||
53 | if (!var) | ||
54 | return 0; | ||
55 | return Q_atof (var->string); | ||
56 | } | ||
57 | |||
58 | |||
59 | /* | ||
60 | ============ | ||
61 | Cvar_VariableString | ||
62 | ============ | ||
63 | */ | ||
64 | char *Cvar_VariableString (char *var_name) | ||
65 | { | ||
66 | cvar_t *var; | ||
67 | |||
68 | var = Cvar_FindVar (var_name); | ||
69 | if (!var) | ||
70 | return cvar_null_string; | ||
71 | return var->string; | ||
72 | } | ||
73 | |||
74 | |||
75 | /* | ||
76 | ============ | ||
77 | Cvar_CompleteVariable | ||
78 | ============ | ||
79 | */ | ||
80 | char *Cvar_CompleteVariable (char *partial) | ||
81 | { | ||
82 | cvar_t *cvar; | ||
83 | int len; | ||
84 | |||
85 | len = Q_strlen(partial); | ||
86 | |||
87 | if (!len) | ||
88 | return NULL; | ||
89 | |||
90 | // check functions | ||
91 | for (cvar=cvar_vars ; cvar ; cvar=cvar->next) | ||
92 | if (!Q_strncmp (partial,cvar->name, len)) | ||
93 | return cvar->name; | ||
94 | |||
95 | return NULL; | ||
96 | } | ||
97 | |||
98 | |||
99 | /* | ||
100 | ============ | ||
101 | Cvar_Set | ||
102 | ============ | ||
103 | */ | ||
104 | void Cvar_Set (char *var_name, char *value) | ||
105 | { | ||
106 | cvar_t *var; | ||
107 | qboolean changed; | ||
108 | |||
109 | var = Cvar_FindVar (var_name); | ||
110 | if (!var) | ||
111 | { // there is an error in C code if this happens | ||
112 | Con_Printf ("Cvar_Set: variable %s not found\n", var_name); | ||
113 | return; | ||
114 | } | ||
115 | |||
116 | changed = Q_strcmp(var->string, value); | ||
117 | |||
118 | Z_Free (var->string); // free the old value string | ||
119 | |||
120 | var->string = Z_Malloc (Q_strlen(value)+1); | ||
121 | Q_strcpy (var->string, value); | ||
122 | var->value = Q_atof (var->string); | ||
123 | if (var->server && changed) | ||
124 | { | ||
125 | if (sv.active) | ||
126 | SV_BroadcastPrintf ("\"%s\" changed to \"%s\"\n", var->name, var->string); | ||
127 | } | ||
128 | } | ||
129 | |||
130 | /* | ||
131 | ============ | ||
132 | Cvar_SetValue | ||
133 | ============ | ||
134 | */ | ||
135 | void Cvar_SetValue (char *var_name, float value) | ||
136 | { | ||
137 | char val[32]; | ||
138 | |||
139 | sprintf (val, "%f",value); | ||
140 | Cvar_Set (var_name, val); | ||
141 | } | ||
142 | |||
143 | |||
144 | /* | ||
145 | ============ | ||
146 | Cvar_RegisterVariable | ||
147 | |||
148 | Adds a freestanding variable to the variable list. | ||
149 | ============ | ||
150 | */ | ||
151 | void Cvar_RegisterVariable (cvar_t *variable) | ||
152 | { | ||
153 | char *oldstr; | ||
154 | |||
155 | // first check to see if it has allready been defined | ||
156 | if (Cvar_FindVar (variable->name)) | ||
157 | { | ||
158 | Con_Printf ("Can't register variable %s, allready defined\n", variable->name); | ||
159 | return; | ||
160 | } | ||
161 | |||
162 | // check for overlap with a command | ||
163 | if (Cmd_Exists (variable->name)) | ||
164 | { | ||
165 | Con_Printf ("Cvar_RegisterVariable: %s is a command\n", variable->name); | ||
166 | return; | ||
167 | } | ||
168 | |||
169 | // copy the value off, because future sets will Z_Free it | ||
170 | oldstr = variable->string; | ||
171 | variable->string = Z_Malloc (Q_strlen(variable->string)+1); | ||
172 | Q_strcpy (variable->string, oldstr); | ||
173 | variable->value = Q_atof (variable->string); | ||
174 | |||
175 | // link the variable in | ||
176 | variable->next = cvar_vars; | ||
177 | cvar_vars = variable; | ||
178 | } | ||
179 | |||
180 | /* | ||
181 | ============ | ||
182 | Cvar_Command | ||
183 | |||
184 | Handles variable inspection and changing from the console | ||
185 | ============ | ||
186 | */ | ||
187 | qboolean Cvar_Command (void) | ||
188 | { | ||
189 | cvar_t *v; | ||
190 | |||
191 | // check variables | ||
192 | v = Cvar_FindVar (Cmd_Argv(0)); | ||
193 | if (!v) | ||
194 | return false; | ||
195 | |||
196 | // perform a variable print or set | ||
197 | if (Cmd_Argc() == 1) | ||
198 | { | ||
199 | Con_Printf ("\"%s\" is \"%s\"\n", v->name, v->string); | ||
200 | return true; | ||
201 | } | ||
202 | |||
203 | Cvar_Set (v->name, Cmd_Argv(1)); | ||
204 | return true; | ||
205 | } | ||
206 | |||
207 | |||
208 | /* | ||
209 | ============ | ||
210 | Cvar_WriteVariables | ||
211 | |||
212 | Writes lines containing "set variable value" for all variables | ||
213 | with the archive flag set to true. | ||
214 | ============ | ||
215 | */ | ||
216 | void Cvar_WriteVariables (FILE *f) | ||
217 | { | ||
218 | cvar_t *var; | ||
219 | |||
220 | for (var = cvar_vars ; var ; var = var->next) | ||
221 | if (var->archive) | ||
222 | fprintf (f, "%s \"%s\"\n", var->name, var->string); | ||
223 | } | ||
224 | |||