X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=cvar.c;h=f0923b02cb9c9546f58488c208a2f5b8ab6526b3;hb=43ee5e136a693ac9cfb40cb03fceea7d3149104f;hp=d38c5ba9eeda565bf22dc6b3c351e0521855c5d5;hpb=8468ffaf8162a4fe8361127385c40141c375661d;p=xonotic%2Fdarkplaces.git diff --git a/cvar.c b/cvar.c index d38c5ba9..f0923b02 100644 --- a/cvar.c +++ b/cvar.c @@ -21,33 +21,57 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" -cvar_t *cvar_vars; -char *cvar_null_string = ""; +cvar_t *cvar_vars = NULL; +char *cvar_null_string = ""; /* ============ Cvar_FindVar ============ */ -cvar_t *Cvar_FindVar (char *var_name) +cvar_t *Cvar_FindVar (const char *var_name) { - cvar_t *var; + cvar_t *var; - for (var=cvar_vars ; var ; var=var->next) + for (var = cvar_vars;var;var = var->next) if (!strcmp (var_name, var->name)) return var; return NULL; } +cvar_t *Cvar_FindVarAfter (const char *prev_var_name, int neededflags) +{ + cvar_t *var; + + if (*prev_var_name) + { + var = Cvar_FindVar (prev_var_name); + if (!var) + return NULL; + var = var->next; + } + else + var = cvar_vars; + + // search for the next cvar matching the needed flags + while (var) + { + if ((var->flags & neededflags) || !neededflags) + break; + var = var->next; + } + return var; +} + /* ============ Cvar_VariableValue ============ */ -float Cvar_VariableValue (char *var_name) +float Cvar_VariableValue (const char *var_name) { - cvar_t *var; + cvar_t *var; var = Cvar_FindVar (var_name); if (!var) @@ -61,7 +85,7 @@ float Cvar_VariableValue (char *var_name) Cvar_VariableString ============ */ -char *Cvar_VariableString (char *var_name) +const char *Cvar_VariableString (const char *var_name) { cvar_t *var; @@ -77,7 +101,7 @@ char *Cvar_VariableString (char *var_name) Cvar_CompleteVariable ============ */ -char *Cvar_CompleteVariable (char *partial) +const char *Cvar_CompleteVariable (const char *partial) { cvar_t *cvar; int len; @@ -104,8 +128,7 @@ char *Cvar_CompleteVariable (char *partial) Thanks to Fett erich@heintz.com */ -int -Cvar_CompleteCountPossible (char *partial) +int Cvar_CompleteCountPossible (const char *partial) { cvar_t *cvar; int len; @@ -134,17 +157,16 @@ Cvar_CompleteCountPossible (char *partial) Thanks to taniwha */ -char ** -Cvar_CompleteBuildList (char *partial) +const char **Cvar_CompleteBuildList (const char *partial) { - cvar_t *cvar; - int len = 0; - int bpos = 0; - int sizeofbuf = (Cvar_CompleteCountPossible (partial) + 1) * sizeof (char *); - char **buf; + const cvar_t *cvar; + int len = 0; + int bpos = 0; + int sizeofbuf = (Cvar_CompleteCountPossible (partial) + 1) * sizeof (const char *); + const char **buf; len = strlen(partial); - buf = qmalloc(sizeofbuf + sizeof (char *)); + buf = Mem_Alloc(tempmempool, sizeofbuf + sizeof (const char *)); // Loop through the alias list and print all matches for (cvar = cvar_vars; cvar; cvar = cvar->next) if (!strncasecmp(partial, cvar->name, len)) @@ -159,25 +181,31 @@ Cvar_CompleteBuildList (char *partial) Cvar_Set ============ */ -void Cvar_Set (char *var_name, char *value) +void Cvar_SetQuick (cvar_t *var, const char *value) { - cvar_t *var; qboolean 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); + if (var == NULL) + { + Con_Printf("Cvar_SetQuick: var == NULL\n"); return; } changed = strcmp(var->string, value); + // LordHavoc: don't reallocate when there is no change + if (!changed) + return; - Z_Free (var->string); // free the old value string + // LordHavoc: don't reallocate when the buffer is the same size + if (!var->string || strlen(var->string) != strlen(value)) + { + Z_Free (var->string); // free the old value string - var->string = Z_Malloc (strlen(value)+1); + var->string = Z_Malloc (strlen(value)+1); + } strcpy (var->string, value); var->value = atof (var->string); + var->integer = (int) var->value; if ((var->flags & CVAR_NOTIFY) && changed) { if (sv.active) @@ -185,12 +213,35 @@ void Cvar_Set (char *var_name, char *value) } } +void Cvar_Set (const char *var_name, const char *value) +{ + cvar_t *var; + var = Cvar_FindVar (var_name); + if (var == NULL) + { + // there is an error in C code if this happens + Con_Printf ("Cvar_Set: variable %s not found\n", var_name); + return; + } + + Cvar_SetQuick(var, value); +} + /* ============ Cvar_SetValue ============ */ -void Cvar_SetValue (char *var_name, float value) +void Cvar_SetValueQuick (cvar_t *var, float value) +{ + char val[32]; + + // LordHavoc: changed from %f to %g to use shortest representation + sprintf (val, "%g",value); + Cvar_SetQuick (var, val); +} + +void Cvar_SetValue (const char *var_name, float value) { char val[32]; @@ -229,6 +280,7 @@ void Cvar_RegisterVariable (cvar_t *variable) variable->string = Z_Malloc (strlen(variable->string)+1); strcpy (variable->string, oldstr); variable->value = atof (variable->string); + variable->integer = (int) variable->value; // link the variable in variable->next = cvar_vars; @@ -290,21 +342,24 @@ Cvar_List */ void Cvar_List_f (void) { - cvar_t *cvar; - char *partial; - int len; - int count; + cvar_t *cvar; + const char *partial; + int len, count; - if (Cmd_Argc() > 1) { + if (Cmd_Argc() > 1) + { partial = Cmd_Argv (1); len = strlen(partial); - } else { + } + else + { partial = NULL; len = 0; } count = 0; - for (cvar = cvar_vars; cvar; cvar = cvar->next) { + for (cvar = cvar_vars; cvar; cvar = cvar->next) + { if (partial && strncmp (partial,cvar->name,len)) continue; @@ -318,3 +373,4 @@ void Cvar_List_f (void) Con_Printf ("\n"); } // 2000-01-09 CvarList command by Maddes +