2 Copyright (C) 1996-1997 Id Software, Inc.
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.
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.
13 See the GNU General Public License for more details.
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.
20 // cvar.c -- dynamic variable tracking
25 char *cvar_null_string
= "";
32 cvar_t
*Cvar_FindVar (char *var_name
)
36 for (var
=cvar_vars
; var
; var
=var
->next
)
37 if (!Q_strcmp (var_name
, var
->name
))
48 float Cvar_VariableValue (char *var_name
)
52 var
= Cvar_FindVar (var_name
);
55 return Q_atof (var
->string
);
64 char *Cvar_VariableString (char *var_name
)
68 var
= Cvar_FindVar (var_name
);
70 return cvar_null_string
;
80 char *Cvar_CompleteVariable (char *partial
)
85 len
= Q_strlen(partial
);
91 for (cvar
=cvar_vars
; cvar
; cvar
=cvar
->next
)
92 if (!Q_strncmp (partial
,cvar
->name
, len
))
104 void Cvar_Set (char *var_name
, char *value
)
109 var
= Cvar_FindVar (var_name
);
111 { // there is an error in C code if this happens
112 Con_Printf ("Cvar_Set: variable %s not found\n", var_name
);
116 changed
= Q_strcmp(var
->string
, value
);
118 Z_Free (var
->string
); // free the old value string
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
)
126 SV_BroadcastPrintf ("\"%s\" changed to \"%s\"\n", var
->name
, var
->string
);
135 void Cvar_SetValue (char *var_name
, float value
)
139 sprintf (val
, "%f",value
);
140 Cvar_Set (var_name
, val
);
146 Cvar_RegisterVariable
148 Adds a freestanding variable to the variable list.
151 void Cvar_RegisterVariable (cvar_t
*variable
)
155 // first check to see if it has allready been defined
156 if (Cvar_FindVar (variable
->name
))
158 Con_Printf ("Can't register variable %s, allready defined\n", variable
->name
);
162 // check for overlap with a command
163 if (Cmd_Exists (variable
->name
))
165 Con_Printf ("Cvar_RegisterVariable: %s is a command\n", variable
->name
);
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
);
175 // link the variable in
176 variable
->next
= cvar_vars
;
177 cvar_vars
= variable
;
184 Handles variable inspection and changing from the console
187 qboolean
Cvar_Command (void)
192 v
= Cvar_FindVar (Cmd_Argv(0));
196 // perform a variable print or set
199 Con_Printf ("\"%s\" is \"%s\"\n", v
->name
, v
->string
);
203 Cvar_Set (v
->name
, Cmd_Argv(1));
212 Writes lines containing "set variable value" for all variables
213 with the archive flag set to true.
216 void Cvar_WriteVariables (FILE *f
)
220 for (var
= cvar_vars
; var
; var
= var
->next
)
222 fprintf (f
, "%s \"%s\"\n", var
->name
, var
->string
);