2 Copyright (C) 1996-1997 Id Software, Inc.
3 Copyright (C) 2006-2021 DarkPlaces contributors
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 cvar_t variables are used to hold scalar or string variables that can be changed or displayed at the console or prog code as well as accessed directly
28 it is sufficient to initialize a cvar_t with just the first two fields, or
29 you can add a ,true flag for variables that you want saved to the configuration
30 file when the game is quit:
32 cvar_t r_draworder = {"r_draworder","1"};
33 cvar_t scr_screensize = {"screensize","1",true};
35 Cvars must be registered before use, or they will have a 0 value instead of the float interpretation of the string. Generally, all cvar_t declarations should be registered in the apropriate init function before any console commands are executed:
36 Cvar_RegisterVariable (&host_framerate);
39 C code usually just references a cvar in place:
40 if ( r_draworder.value )
42 It could optionally ask for the value to be looked up for a string name:
43 if (Cvar_VariableValue ("r_draworder"))
45 Interpreted prog code can access cvars with the cvar(name) or
46 cvar_set (name, value) internal functions:
47 teamplay = cvar("teamplay");
48 cvar_set ("registered", "1");
50 The user can access cvars from the console in two ways:
51 r_draworder prints the current value
52 r_draworder 0 sets the current value to 0
53 Cvars are restricted from having the same names as commands to keep this
54 interface from being ambiguous.
72 const char *description;
77 const char *defstring;
79 void (*callback)(struct cvar_s *var);
84 // this is sufficient for Cvar_RestoreInitState()
85 const char *initstring;
87 int globaldefindex[3];
88 int globaldefindex_stringno[3];
93 typedef struct cvar_hash_s
96 struct cvar_hash_s *next;
99 typedef struct cvar_state_s
102 cvar_hash_t *hashtable[CVAR_HASHSIZE];
106 extern cvar_state_t cvars_all;
107 extern cvar_state_t cvars_null; // used by cmd_serverfromclient which intentionally has no cvars available
109 void Cvar_RegisterVirtual(cvar_t *variable, const char *name );
111 void Cvar_RegisterCallback(cvar_t *variable, void (*callback)(cvar_t *));
113 /// registers a cvar that already has the name, string, and optionally the
114 /// archive elements set.
115 void Cvar_RegisterVariable(cvar_t *variable);
117 qbool Cvar_Readonly (cvar_t *var, const char *cmd_name);
119 void Cvar_Callback(cvar_t *var);
121 /// equivelant to "<name> <variable>" typed at the console
122 void Cvar_Set (cvar_state_t *cvars, const char *var_name, const char *value);
124 /// expands value to a string and calls Cvar_Set
125 void Cvar_SetValue (cvar_state_t *cvars, const char *var_name, float value);
127 void Cvar_SetQuick (cvar_t *var, const char *value);
128 void Cvar_SetValueQuick (cvar_t *var, float value);
130 float Cvar_VariableValueOr (cvar_state_t *cvars, const char *var_name, float def, unsigned neededflags);
131 // returns def if not defined
133 float Cvar_VariableValue (cvar_state_t *cvars, const char *var_name, unsigned neededflags);
134 // returns 0 if not defined or non numeric
136 const char *Cvar_VariableStringOr (cvar_state_t *cvars, const char *var_name, const char *def, unsigned neededflags);
137 // returns def if not defined
139 const char *Cvar_VariableString (cvar_state_t *cvars, const char *var_name, unsigned neededflags);
140 // returns an empty string if not defined
142 const char *Cvar_VariableDefString (cvar_state_t *cvars, const char *var_name, unsigned neededflags);
143 // returns an empty string if not defined
145 const char *Cvar_VariableDescription (cvar_state_t *cvars, const char *var_name, unsigned neededflags);
146 // returns an empty string if not defined
148 const char *Cvar_CompleteVariable (cvar_state_t *cvars, const char *partial, unsigned neededflags);
149 // attempts to match a partial variable name for command line completion
150 // returns NULL if nothing fits
152 void Cvar_PrintHelp(cvar_t *cvar, const char *name, qbool full);
154 void Cvar_CompleteCvarPrint (cvar_state_t *cvars, const char *partial, unsigned neededflags);
156 qbool Cvar_Command (struct cmd_state_s *cmd);
157 // called by Cmd_ExecuteString when Cmd_Argv(cmd, 0) doesn't match a known
158 // command. Returns true if the command was a variable reference that
159 // was handled. (print or change)
161 void Cvar_SaveInitState(cvar_state_t *cvars);
162 void Cvar_RestoreInitState(cvar_state_t *cvars);
164 void Cvar_UnlockDefaults(struct cmd_state_s *cmd);
165 void Cvar_LockDefaults_f(struct cmd_state_s *cmd);
166 void Cvar_ResetToDefaults_All_f(struct cmd_state_s *cmd);
167 void Cvar_ResetToDefaults_NoSaveOnly_f(struct cmd_state_s *cmd);
168 void Cvar_ResetToDefaults_SaveOnly_f(struct cmd_state_s *cmd);
170 void Cvar_WriteVariables (cvar_state_t *cvars, struct qfile_s *f);
171 // Writes lines containing "set variable value" for all variables
172 // with the archive flag set to true.
174 cvar_t *Cvar_FindVar(cvar_state_t *cvars, const char *var_name, unsigned neededflags);
175 cvar_t *Cvar_FindVarAfter(cvar_state_t *cvars, const char *prev_var_name, unsigned neededflags);
177 int Cvar_CompleteCountPossible(cvar_state_t *cvars, const char *partial, unsigned neededflags);
178 const char **Cvar_CompleteBuildList(cvar_state_t *cvars, const char *partial, unsigned neededflags);
179 // Added by EvilTypeGuy - functions for tab completion system
180 // Thanks to Fett erich@heintz.com
183 /// Prints a list of Cvars including a count of them to the user console
184 /// Referenced in cmd.c in Cmd_Init hence it's inclusion here.
185 /// Added by EvilTypeGuy eviltypeguy@qeradiant.com
186 /// Thanks to Matthias "Maddes" Buecher, http://www.inside3d.com/qip/
187 void Cvar_List_f(struct cmd_state_s *cmd);
189 void Cvar_Set_f(struct cmd_state_s *cmd);
190 void Cvar_SetA_f(struct cmd_state_s *cmd);
191 void Cvar_Del_f(struct cmd_state_s *cmd);
192 // commands to create new cvars (or set existing ones)
193 // seta creates an archived cvar (saved to config)
195 /// allocates a cvar by name and returns its address,
196 /// or merely sets its value if it already exists.
197 cvar_t *Cvar_Get(cvar_state_t *cvars, const char *name, const char *value, unsigned flags, const char *newdescription);
199 extern const char *cvar_dummy_description; // ALWAYS the same pointer
201 void Cvar_UpdateAllAutoCvars(cvar_state_t *cvars); // updates ALL autocvars of the active prog to the cvar values (savegame loading)
203 #ifdef FILLALLCVARSWITHRUBBISH
204 void Cvar_FillAll_f(cmd_state_t *cmd);
205 #endif /* FILLALLCVARSWITHRUBBISH */