jediacademy/codemp/botlib/l_libvar.cpp

278 lines
6.8 KiB
C++

/*****************************************************************************
* name: l_libvar.c
*
* desc: bot library variables
*
* $Archive: /MissionPack/code/botlib/l_libvar.c $
* $Author: Zaphod $
* $Revision: 2 $
* $Modtime: 11/21/00 11:33a $
* $Date: 11/21/00 11:49a $
*
*****************************************************************************/
#include "../game/q_shared.h"
#include "l_memory.h"
#include "l_libvar.h"
//list with library variables
libvar_t *libvarlist;
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
float LibVarStringValue(char *string)
{
int dotfound = 0;
float value = 0;
while(*string)
{
if (*string < '0' || *string > '9')
{
if (dotfound || *string != '.')
{
return 0;
} //end if
else
{
dotfound = 10;
string++;
} //end if
} //end if
if (dotfound)
{
value = value + (float) (*string - '0') / (float) dotfound;
dotfound *= 10;
} //end if
else
{
value = value * 10.0 + (float) (*string - '0');
} //end else
string++;
} //end while
return value;
} //end of the function LibVarStringValue
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
libvar_t *LibVarAlloc(char *var_name)
{
libvar_t *v;
v = (libvar_t *) GetMemory(sizeof(libvar_t) + strlen(var_name) + 1);
Com_Memset(v, 0, sizeof(libvar_t));
v->name = (char *) v + sizeof(libvar_t);
strcpy(v->name, var_name);
//add the variable in the list
v->next = libvarlist;
libvarlist = v;
return v;
} //end of the function LibVarAlloc
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
void LibVarDeAlloc(libvar_t *v)
{
if (v->string) FreeMemory(v->string);
FreeMemory(v);
} //end of the function LibVarDeAlloc
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
void LibVarDeAllocAll(void)
{
libvar_t *v;
for (v = libvarlist; v; v = libvarlist)
{
libvarlist = libvarlist->next;
LibVarDeAlloc(v);
} //end for
libvarlist = NULL;
} //end of the function LibVarDeAllocAll
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
libvar_t *LibVarGet(char *var_name)
{
libvar_t *v;
for (v = libvarlist; v; v = v->next)
{
if (!Q_stricmp(v->name, var_name))
{
return v;
} //end if
} //end for
return NULL;
} //end of the function LibVarGet
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
char *LibVarGetString(char *var_name)
{
libvar_t *v;
v = LibVarGet(var_name);
if (v)
{
return v->string;
} //end if
else
{
return "";
} //end else
} //end of the function LibVarGetString
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
float LibVarGetValue(char *var_name)
{
libvar_t *v;
v = LibVarGet(var_name);
if (v)
{
return v->value;
} //end if
else
{
return 0;
} //end else
} //end of the function LibVarGetValue
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
libvar_t *LibVar(char *var_name, char *value)
{
libvar_t *v;
v = LibVarGet(var_name);
if (v) return v;
//create new variable
v = LibVarAlloc(var_name);
//variable string
v->string = (char *) GetMemory(strlen(value) + 1);
strcpy(v->string, value);
//the value
v->value = LibVarStringValue(v->string);
//variable is modified
v->modified = qtrue;
//
return v;
} //end of the function LibVar
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
char *LibVarString(char *var_name, char *value)
{
libvar_t *v;
v = LibVar(var_name, value);
return v->string;
} //end of the function LibVarString
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
float LibVarValue(char *var_name, char *value)
{
libvar_t *v;
v = LibVar(var_name, value);
return v->value;
} //end of the function LibVarValue
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
void LibVarSet(char *var_name, char *value)
{
libvar_t *v;
v = LibVarGet(var_name);
if (v)
{
FreeMemory(v->string);
} //end if
else
{
v = LibVarAlloc(var_name);
} //end else
//variable string
v->string = (char *) GetMemory(strlen(value) + 1);
strcpy(v->string, value);
//the value
v->value = LibVarStringValue(v->string);
//variable is modified
v->modified = qtrue;
} //end of the function LibVarSet
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
qboolean LibVarChanged(char *var_name)
{
libvar_t *v;
v = LibVarGet(var_name);
if (v)
{
return v->modified;
} //end if
else
{
return qfalse;
} //end else
} //end of the function LibVarChanged
//===========================================================================
//
// Parameter: -
// Returns: -
// Changes Globals: -
//===========================================================================
void LibVarSetNotModified(char *var_name)
{
libvar_t *v;
v = LibVarGet(var_name);
if (v)
{
v->modified = qfalse;
} //end if
} //end of the function LibVarSetNotModified