This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
*/
// cvar.h
+struct cmd_state_s;
+typedef struct cmd_state_s cmd_state_t;
+
/*
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
interface from being ambiguous.
*/
+#ifndef CVAR_H
+#define CVAR_H
+
typedef struct cvar_s
{
- char *name;
- char *string;
- qboolean archive; // set to true to cause it to be saved to vars.rc
- qboolean server; // notifies players when changed
- float value;
+ int flags;
+
+ const char *name;
+
+ const char *string;
+ const char *description;
+ int integer;
+ float value;
+ float vector[3];
+
+ const char *defstring;
+
+ void (*callback)(struct cvar_s *var);
+ qbool ignore_callback;
+
+ char **aliases;
+ int aliasindex;
+
+ // values at init (for Cvar_RestoreInitState)
+ qbool initstate; // indicates this existed at init
+ int initflags;
+ const char *initstring;
+ const char *initdescription;
+ int initinteger;
+ float initvalue;
+ float initvector[3];
+ const char *initdefstring;
+
+ int globaldefindex[3];
+ int globaldefindex_stringno[3];
+
struct cvar_s *next;
} cvar_t;
-void Cvar_RegisterVariable (cvar_t *variable);
-// registers a cvar that already has the name, string, and optionally the
-// archive elements set.
+typedef struct cvar_hash_s
+{
+ cvar_t *cvar;
+ struct cvar_hash_s *next;
+} cvar_hash_t;
+
+typedef struct cvar_state_s
+{
+ cvar_t *vars;
+ cvar_hash_t *hashtable[CVAR_HASHSIZE];
+}
+cvar_state_t;
+
+extern cvar_state_t cvars_all;
+extern cvar_state_t cvars_null; // used by cmd_serverfromclient which intentionally has no cvars available
+
+void Cvar_RegisterAlias(cvar_t *variable, const char *alias );
+
+void Cvar_RegisterCallback(cvar_t *variable, void (*callback)(cvar_t *));
+
+/// registers a cvar that already has the name, string, and optionally the
+/// archive elements set.
+void Cvar_RegisterVariable(cvar_t *variable);
+
+qbool Cvar_Readonly (cvar_t *var, const char *cmd_name);
+
+/// equivelant to "<name> <variable>" typed at the console
+void Cvar_Set (cvar_state_t *cvars, const char *var_name, const char *value);
+void Cvar_Set_NoCallback (cvar_t *var, const char *value);
-void Cvar_Set (char *var_name, char *value);
-// equivelant to "<name> <variable>" typed at the console
+/// expands value to a string and calls Cvar_Set
+void Cvar_SetValue (cvar_state_t *cvars, const char *var_name, float value);
-void Cvar_SetValue (char *var_name, float value);
-// expands value to a string and calls Cvar_Set
+void Cvar_SetQuick (cvar_t *var, const char *value);
+void Cvar_SetValueQuick (cvar_t *var, float value);
-float Cvar_VariableValue (char *var_name);
+float Cvar_VariableValueOr (cvar_state_t *cvars, const char *var_name, float def, int neededflags);
+// returns def if not defined
+
+float Cvar_VariableValue (cvar_state_t *cvars, const char *var_name, int neededflags);
// returns 0 if not defined or non numeric
-char *Cvar_VariableString (char *var_name);
+const char *Cvar_VariableStringOr (cvar_state_t *cvars, const char *var_name, const char *def, int neededflags);
+// returns def if not defined
+
+const char *Cvar_VariableString (cvar_state_t *cvars, const char *var_name, int neededflags);
// returns an empty string if not defined
-char *Cvar_CompleteVariable (char *partial);
+const char *Cvar_VariableDefString (cvar_state_t *cvars, const char *var_name, int neededflags);
+// returns an empty string if not defined
+
+const char *Cvar_VariableDescription (cvar_state_t *cvars, const char *var_name, int neededflags);
+// returns an empty string if not defined
+
+const char *Cvar_CompleteVariable (cvar_state_t *cvars, const char *partial, int neededflags);
// attempts to match a partial variable name for command line completion
// returns NULL if nothing fits
-qboolean Cvar_Command (void);
-// called by Cmd_ExecuteString when Cmd_Argv(0) doesn't match a known
+void Cvar_PrintHelp(cvar_t *cvar, const char *name, qbool full);
+
+void Cvar_CompleteCvarPrint (cvar_state_t *cvars, const char *partial, int neededflags);
+
+qbool Cvar_Command (cmd_state_t *cmd);
+// called by Cmd_ExecuteString when Cmd_Argv(cmd, 0) doesn't match a known
// command. Returns true if the command was a variable reference that
// was handled. (print or change)
-void Cvar_WriteVariables (FILE *f);
+void Cvar_SaveInitState(cvar_state_t *cvars);
+void Cvar_RestoreInitState(cvar_state_t *cvars);
+
+void Cvar_UnlockDefaults(cmd_state_t *cmd);
+void Cvar_LockDefaults_f(cmd_state_t *cmd);
+void Cvar_ResetToDefaults_All_f(cmd_state_t *cmd);
+void Cvar_ResetToDefaults_NoSaveOnly_f(cmd_state_t *cmd);
+void Cvar_ResetToDefaults_SaveOnly_f(cmd_state_t *cmd);
+
+void Cvar_WriteVariables (cvar_state_t *cvars, qfile_t *f);
// Writes lines containing "set variable value" for all variables
// with the archive flag set to true.
-cvar_t *Cvar_FindVar (char *var_name);
+cvar_t *Cvar_FindVar(cvar_state_t *cvars, const char *var_name, int neededflags);
+cvar_t *Cvar_FindVarAfter(cvar_state_t *cvars, const char *prev_var_name, int neededflags);
+
+int Cvar_CompleteCountPossible(cvar_state_t *cvars, const char *partial, int neededflags);
+const char **Cvar_CompleteBuildList(cvar_state_t *cvars, const char *partial, int neededflags);
+// Added by EvilTypeGuy - functions for tab completion system
+// Thanks to Fett erich@heintz.com
+// Thanks to taniwha
+
+/// Prints a list of Cvars including a count of them to the user console
+/// Referenced in cmd.c in Cmd_Init hence it's inclusion here.
+/// Added by EvilTypeGuy eviltypeguy@qeradiant.com
+/// Thanks to Matthias "Maddes" Buecher, http://www.inside3d.com/qip/
+void Cvar_List_f(cmd_state_t *cmd);
+
+void Cvar_Set_f(cmd_state_t *cmd);
+void Cvar_SetA_f(cmd_state_t *cmd);
+void Cvar_Del_f(cmd_state_t *cmd);
+// commands to create new cvars (or set existing ones)
+// seta creates an archived cvar (saved to config)
+
+/// allocates a cvar by name and returns its address,
+/// or merely sets its value if it already exists.
+cvar_t *Cvar_Get(cvar_state_t *cvars, const char *name, const char *value, int flags, const char *newdescription);
+
+extern const char *cvar_dummy_description; // ALWAYS the same pointer
+
+void Cvar_UpdateAllAutoCvars(cvar_state_t *cvars); // updates ALL autocvars of the active prog to the cvar values (savegame loading)
+
+#ifdef FILLALLCVARSWITHRUBBISH
+void Cvar_FillAll_f(cmd_state_t *cmd);
+#endif /* FILLALLCVARSWITHRUBBISH */
+
+#endif
-extern cvar_t *cvar_vars;