201 lines · 3.4 KB · C
RawDownload
// cvar.c -- dynamic variable tracking #include <stdlib.h>#include "quakedef.h" cvar_t *cvar_vars;char *cvar_null_string = ""; /*============Cvar_FindVar============*/cvar_t *Cvar_FindVar (char *var_name){	cvar_t *var; 	for (var=cvar_vars ; var ; var=var->next)		if (!strcmp (var_name, var->name))			return var; 	return NULL;} /*============Cvar_VariableValue============*/float Cvar_VariableValue (char *var_name){	cvar_t *var; 	var = Cvar_FindVar (var_name);	if (!var)		return 0;	return strtof (var->string, NULL);} /*============Cvar_VariableString============*/char *Cvar_VariableString (char *var_name){	cvar_t *var; 	var = Cvar_FindVar (var_name);	if (!var)		return cvar_null_string;	return var->string;} /*============Cvar_CompleteVariable============*/char *Cvar_CompleteVariable (char *partial){	cvar_t *cvar;	int len; 	len = strlen(partial); 	if (!len)		return NULL; // check functions	for (cvar=cvar_vars ; cvar ; cvar=cvar->next)		if (!strncmp (partial,cvar->name, len))			return cvar->name; 	return NULL;} /*============Cvar_Set============*/void Cvar_Set (char *var_name, char *value){	cvar_t *var;	bool changed; 	var = Cvar_FindVar (var_name);	if (!var)	{ // there is an error in C code if this happens		Con_Printf ("Cvar_Set: variable %s not found\n", var_name);		return;	} 	changed = strcmp(var->string, value); 	Z_Free (var->string); // free the old value string 	var->string = Z_Malloc (strlen(value)+1);	strcpy (var->string, value);	var->value = strtof (var->string, NULL);	if (var->server && changed)	{		if (sv.active)			SV_BroadcastPrintf ("\"%s\" changed to \"%s\"\n", var->name, var->string);	}} /*============Cvar_SetValue============*/void Cvar_SetValue (char *var_name, float value){	char val[32]; 	sprintf (val, "%f",value);	Cvar_Set (var_name, val);} /*============Cvar_RegisterVariable Adds a freestanding variable to the variable list.============*/void Cvar_RegisterVariable (cvar_t *variable){	char *oldstr; // first check to see if it has allready been defined	if (Cvar_FindVar (variable->name))	{		Con_Printf ("Can't register variable %s, allready defined\n", variable->name);		return;	} // check for overlap with a command	if (Cmd_Exists (variable->name))	{		Con_Printf ("Cvar_RegisterVariable: %s is a command\n", variable->name);		return;	} // copy the value off, because future sets will Z_Free it	oldstr = variable->string;	variable->string = Z_Malloc (strlen(variable->string)+1);	strcpy (variable->string, oldstr);	variable->value = strtof (variable->string, NULL); // link the variable in	variable->next = cvar_vars;	cvar_vars = variable;} /*============Cvar_Command Handles variable inspection and changing from the console============*/bool Cvar_Command (void){	cvar_t *v; // check variables	v = Cvar_FindVar (Cmd_Argv(0));	if (!v)		return false; // perform a variable print or set	if (Cmd_Argc() == 1)	{		Con_Printf ("\"%s\" is \"%s\"\n", v->name, v->string);		return true;	} 	Cvar_Set (v->name, Cmd_Argv(1));	return true;} /*============Cvar_WriteVariables Writes lines containing "set variable value" for all variableswith the archive flag set to true.============*/void Cvar_WriteVariables (FILE *f){	cvar_t *var; 	for (var = cvar_vars ; var ; var = var->next)		if (var->archive)			fprintf (f, "%s \"%s\"\n", var->name, var->string);} 

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t