mirror of
https://github.com/FWGS/xash3d-fwgs
synced 2024-11-25 19:30:08 +01:00
common: rewrite cvardef.h from scratch based on Quake definitions
* unify cvar.h and cvardef.h, enable private definitions only for refdll and engine * add FCVAR_REFDLL for easier RefDll cvars cleanup
This commit is contained in:
parent
842e494fa6
commit
9a432a5a13
159
common/cvardef.h
159
common/cvardef.h
@ -1,49 +1,122 @@
|
|||||||
/***
|
/*
|
||||||
*
|
cvardef.h - quake cvar definition
|
||||||
* Copyright (c) 1996-2002, Valve LLC. All rights reserved.
|
Copyright (C) 1997-2001 Id Software, Inc.
|
||||||
*
|
Copyright (C) 2024 Alibek Omarov
|
||||||
* This product contains software technology licensed from Id
|
|
||||||
* Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
|
|
||||||
* All Rights Reserved.
|
|
||||||
*
|
|
||||||
* Use, distribution, and modification of this source code and/or resulting
|
|
||||||
* object code is restricted to non-commercial enhancements to products from
|
|
||||||
* Valve LLC. All other use, distribution, or modification is prohibited
|
|
||||||
* without written permission from Valve LLC.
|
|
||||||
*
|
|
||||||
****/
|
|
||||||
#ifndef CVARDEF_H
|
|
||||||
#define CVARDEF_H
|
|
||||||
|
|
||||||
#define FCVAR_ARCHIVE (1<<0) // set to cause it to be saved to vars.rc
|
This program is free software; you can redistribute it and/or
|
||||||
#define FCVAR_USERINFO (1<<1) // changes the client's info string
|
modify it under the terms of the GNU General Public License
|
||||||
#define FCVAR_SERVER (1<<2) // notifies players when changed
|
as published by the Free Software Foundation; either version 2
|
||||||
#define FCVAR_EXTDLL (1<<3) // defined by external DLL
|
of the License, or (at your option) any later version.
|
||||||
#define FCVAR_CLIENTDLL (1<<4) // defined by the client dll
|
|
||||||
#define FCVAR_PROTECTED (1<<5) // It's a server cvar, but we don't send the data since it's a password, etc. Sends 1 if it's not bland/zero, 0 otherwise as value
|
|
||||||
#define FCVAR_SPONLY (1<<6) // This cvar cannot be changed by clients connected to a multiplayer server.
|
|
||||||
#define FCVAR_PRINTABLEONLY (1<<7) // This cvar's string cannot contain unprintable characters ( e.g., used for player name etc ).
|
|
||||||
#define FCVAR_UNLOGGED (1<<8) // If this is a FCVAR_SERVER, don't log changes to the log file / console if we are creating a log
|
|
||||||
#define FCVAR_NOEXTRAWHITEPACE (1<<9) // strip trailing/leading white space from this cvar
|
|
||||||
#define FCVAR_PRIVILEGED (1<<10) // only available in privileged mode
|
|
||||||
#define FCVAR_FILTERABLE (1<<11) // filtered in unprivileged mode if cl_filterstuffcmd is 1
|
|
||||||
|
|
||||||
// Xash3D extensions
|
This program is distributed in the hope that it will be useful,
|
||||||
#define FCVAR_GLCONFIG (1<<12) // write it into <renderer>.cfg(see RefAPI)
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
#define FCVAR_CHANGED (1<<13) // set each time the cvar is changed
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
#define FCVAR_GAMEUIDLL (1<<14) // defined by the menu DLL
|
|
||||||
#define FCVAR_CHEAT (1<<15) // can not be changed if cheats are disabled
|
|
||||||
|
|
||||||
// a1ba: let's reuse higher bits for flags extensions from now on
|
See the GNU General Public License for more details.
|
||||||
#define FCVAR_LATCH (1<<30) // notify client what this cvar will be applied only after server restart (but don't does more nothing)
|
|
||||||
|
|
||||||
typedef struct cvar_s
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
#ifndef CVAR
|
||||||
|
#define CVAR
|
||||||
|
|
||||||
|
#include STDINT_H
|
||||||
|
#include "xash3d_types.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
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
|
||||||
|
in C code.
|
||||||
|
|
||||||
|
The user can access cvars from the console in three ways:
|
||||||
|
r_draworder prints the current value
|
||||||
|
r_draworder 0 sets the current value to 0
|
||||||
|
set r_draworder 0 as above, but creates the cvar if not present
|
||||||
|
|
||||||
|
Cvars are restricted from having the same names as commands to keep this
|
||||||
|
interface from being ambiguous.
|
||||||
|
|
||||||
|
The are also occasionally used to communicated information between different
|
||||||
|
modules of the program.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum
|
||||||
{
|
{
|
||||||
char *name;
|
// GoldSrc compatibility flags
|
||||||
char *string;
|
FCVAR_ARCHIVE = 1 << 0, // set to cause it to be saved to vars.rc
|
||||||
int flags;
|
FCVAR_USERINFO = 1 << 1, // added to userinfo when changed
|
||||||
float value;
|
FCVAR_SERVER = 1 << 2, // added to serverinfo when changed, will notify clients by default
|
||||||
struct cvar_s *next;
|
FCVAR_EXTDLL = 1 << 3, // defined by server.dll
|
||||||
} cvar_t;
|
FCVAR_CLIENTDLL = 1 << 4, // defined by client.dll
|
||||||
|
FCVAR_PROTECTED = 1 << 5, // private server cvar
|
||||||
|
FCVAR_SPONLY = 1 << 6, // can be set only in singleplayer
|
||||||
|
FCVAR_PRINTABLEONLY = 1 << 7, // only allows printable characters
|
||||||
|
FCVAR_UNLOGGED = 1 << 8, // disables notifying client about server cvar change
|
||||||
|
FCVAR_NOEXTRAWHITESPACE = 1 << 9, // removes space characters from the beginning and the end of the string
|
||||||
|
FCVAR_PRIVILEGED = 1 << 10, // only available in privileged mode
|
||||||
|
FCVAR_FILTERABLE = 1 << 11, // treated as privileged if cl_filterstuffcmd is 1, otherwise ignored
|
||||||
|
|
||||||
#endif//CVARDEF_H
|
// Xash3D public flags
|
||||||
|
// FCVAR_LATCH = 1 << 11, // deprecated Xash3D flag, conflicts with FCVAR_FILTERABLE. Use another FCVAR_LATCH!
|
||||||
|
FCVAR_GLCONFIG = 1 << 12, // set to cause it to be saved to <renderer>.cfg (see RefAPI)
|
||||||
|
FCVAR_CHANGED = 1 << 13, // set each time the cvar changed
|
||||||
|
FCVAR_GAMEUIDLL = 1 << 14, // defined by menu.dll
|
||||||
|
FCVAR_CHEAT = 1 << 15, // cannot be changed if sv_cheats is 0
|
||||||
|
|
||||||
|
#if REF_DLL || ENGINE_DLL // Xash3D internal flags, MUST NOT be used outside of engine
|
||||||
|
FCVAR_RENDERINFO = 1 << 16, // set to cause it to be saved to video.cfg
|
||||||
|
FCVAR_READ_ONLY = 1 << 17, // display only, cannot be set by user at all
|
||||||
|
FCVAR_EXTENDED = 1 << 18, // extended cvar structure
|
||||||
|
FCVAR_ALLOCATED = 1 << 19, // allocated by the engine, must be freed with Mem_Free
|
||||||
|
FCVAR_VIDRESTART = 1 << 20, // triggers video subsystem to recreate/modify window parameters
|
||||||
|
FCVAR_TEMPORARY = 1 << 21, // only used to temporarly hold some value, can be unlinked
|
||||||
|
FCVAR_MOVEVARS = 1 << 22, // access to movevars_t structure, synchornized between client and server
|
||||||
|
FCVAR_USER_CREATED = 1 << 23, // created by a set command
|
||||||
|
|
||||||
|
FCVAR_REFDLL = 1 << 29, // (Xash3D FWGS internal flag) defined by the renderer DLL
|
||||||
|
#endif // REF_DLL || ENGINE_DLL
|
||||||
|
|
||||||
|
FCVAR_LATCH = 1 << 30, // (Xash3D FWGS public flag, was FCVAR_FILTERABLE in Xash3D) save changes until server restart
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cvar_s {
|
||||||
|
char *name;
|
||||||
|
char *string;
|
||||||
|
uint32_t flags;
|
||||||
|
float value;
|
||||||
|
struct cvar_s *next;
|
||||||
|
};
|
||||||
|
typedef struct cvar_s cvar_t;
|
||||||
|
|
||||||
|
STATIC_CHECK_SIZEOF( struct cvar_s, 20, 32 );
|
||||||
|
|
||||||
|
#if REF_DLL || ENGINE_DLL // Xash3D internal cvar format, MUST NOT be used outside of engine
|
||||||
|
struct convar_s {
|
||||||
|
char *name;
|
||||||
|
char *string;
|
||||||
|
uint32_t flags;
|
||||||
|
float value;
|
||||||
|
struct convar_s *next;
|
||||||
|
char *desc;
|
||||||
|
char *def_string;
|
||||||
|
};
|
||||||
|
typedef struct convar_s convar_t;
|
||||||
|
|
||||||
|
#if XASH_64BIT
|
||||||
|
#define CVAR_SENTINEL (uintptr_t)0xDEADBEEFDEADBEEF
|
||||||
|
#else
|
||||||
|
#define CVAR_SENTINEL (uintptr_t)0xDEADBEEF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CVAR_CHECK_SENTINEL( cv ) ((uintptr_t)(cv)->next == CVAR_SENTINEL)
|
||||||
|
|
||||||
|
#define CVAR_DEFINE( cv, cvname, cvstr, cvflags, cvdesc ) \
|
||||||
|
convar_t cv = { (char*)cvname, (char*)cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, (char*)cvdesc, NULL }
|
||||||
|
|
||||||
|
#define CVAR_DEFINE_AUTO( cv, cvstr, cvflags, cvdesc ) CVAR_DEFINE( cv, #cv, cvstr, cvflags, cvdesc )
|
||||||
|
#endif // REF_DLL || ENGINE_DLL
|
||||||
|
|
||||||
|
#endif // CVAR
|
||||||
|
@ -230,7 +230,7 @@ static const char *Cvar_ValidateString( convar_t *var, const char *value )
|
|||||||
if( !COM_CheckStringEmpty( szNew ) ) Q_strncpy( szNew, "empty", sizeof( szNew ));
|
if( !COM_CheckStringEmpty( szNew ) ) Q_strncpy( szNew, "empty", sizeof( szNew ));
|
||||||
}
|
}
|
||||||
|
|
||||||
if( FBitSet( var->flags, FCVAR_NOEXTRAWHITEPACE ))
|
if( FBitSet( var->flags, FCVAR_NOEXTRAWHITESPACE ))
|
||||||
{
|
{
|
||||||
char *szVal = szNew;
|
char *szVal = szNew;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
@ -18,45 +18,6 @@ GNU General Public License for more details.
|
|||||||
|
|
||||||
#include "cvardef.h"
|
#include "cvardef.h"
|
||||||
|
|
||||||
#ifdef XASH_64BIT
|
|
||||||
#define CVAR_SENTINEL 0xDEADBEEFDEADBEEF
|
|
||||||
#else
|
|
||||||
#define CVAR_SENTINEL 0xDEADBEEF
|
|
||||||
#endif
|
|
||||||
#define CVAR_CHECK_SENTINEL( cv ) ((uintptr_t)(cv)->next == CVAR_SENTINEL)
|
|
||||||
|
|
||||||
// NOTE: if this is changed, it must be changed in cvardef.h too
|
|
||||||
typedef struct convar_s
|
|
||||||
{
|
|
||||||
// this part shared with cvar_t
|
|
||||||
char *name;
|
|
||||||
char *string;
|
|
||||||
int flags;
|
|
||||||
float value;
|
|
||||||
struct convar_s *next;
|
|
||||||
|
|
||||||
// this part unique for convar_t
|
|
||||||
char *desc; // variable descrition info
|
|
||||||
char *def_string; // keep pointer to initial value
|
|
||||||
} convar_t;
|
|
||||||
|
|
||||||
// cvar internal flags
|
|
||||||
#define FCVAR_RENDERINFO (1<<16) // save to a seperate config called video.cfg
|
|
||||||
#define FCVAR_READ_ONLY (1<<17) // cannot be set by user at all, and can't be requested by CvarGetPointer from game dlls
|
|
||||||
#define FCVAR_EXTENDED (1<<18) // this is convar_t (sets on registration)
|
|
||||||
#define FCVAR_ALLOCATED (1<<19) // this convar_t is fully dynamic allocated (include description)
|
|
||||||
#define FCVAR_VIDRESTART (1<<20) // recreate the window is cvar with this flag was changed
|
|
||||||
#define FCVAR_TEMPORARY (1<<21) // these cvars holds their values and can be unlink in any time
|
|
||||||
#define FCVAR_MOVEVARS (1<<22) // this cvar is a part of movevars_t struct that shared between client and server
|
|
||||||
#define FCVAR_USER_CREATED (1<<23) // created by a set command (dll's used)
|
|
||||||
|
|
||||||
#define CVAR_DEFINE( cv, cvname, cvstr, cvflags, cvdesc ) \
|
|
||||||
convar_t cv = { (char*)cvname, (char*)cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, (char*)cvdesc, NULL }
|
|
||||||
|
|
||||||
#define CVAR_DEFINE_AUTO( cv, cvstr, cvflags, cvdesc ) \
|
|
||||||
CVAR_DEFINE( cv, #cv, cvstr, cvflags, cvdesc )
|
|
||||||
|
|
||||||
#ifndef REF_DLL
|
|
||||||
cvar_t *Cvar_GetList( void );
|
cvar_t *Cvar_GetList( void );
|
||||||
#define Cvar_FindVar( name ) Cvar_FindVarExt( name, 0 )
|
#define Cvar_FindVar( name ) Cvar_FindVarExt( name, 0 )
|
||||||
convar_t *Cvar_FindVarExt( const char *var_name, int ignore_group );
|
convar_t *Cvar_FindVarExt( const char *var_name, int ignore_group );
|
||||||
@ -81,6 +42,5 @@ qboolean Cvar_CommandWithPrivilegeCheck( convar_t *v, qboolean isPrivileged );
|
|||||||
void Cvar_Init( void );
|
void Cvar_Init( void );
|
||||||
void Cvar_PostFSInit( void );
|
void Cvar_PostFSInit( void );
|
||||||
void Cvar_Unlink( int group );
|
void Cvar_Unlink( int group );
|
||||||
#endif // REF_DLL
|
|
||||||
|
|
||||||
#endif//CVAR_H
|
#endif//CVAR_H
|
||||||
|
@ -110,6 +110,8 @@ def configure(conf):
|
|||||||
conf.env.append_unique('CFLAGS', '-fsanitize=fuzzer-no-link')
|
conf.env.append_unique('CFLAGS', '-fsanitize=fuzzer-no-link')
|
||||||
conf.env.append_unique('LINKFLAGS', '-fsanitize=fuzzer')
|
conf.env.append_unique('LINKFLAGS', '-fsanitize=fuzzer')
|
||||||
|
|
||||||
|
conf.define('ENGINE_DLL', 1)
|
||||||
|
|
||||||
conf.define_cond('XASH_ENGINE_TESTS', conf.env.ENGINE_TESTS)
|
conf.define_cond('XASH_ENGINE_TESTS', conf.env.ENGINE_TESTS)
|
||||||
conf.define_cond('XASH_STATIC_LIBS', conf.env.STATIC_LINKING)
|
conf.define_cond('XASH_STATIC_LIBS', conf.env.STATIC_LINKING)
|
||||||
conf.define_cond('XASH_CUSTOM_SWAP', conf.options.CUSTOM_SWAP)
|
conf.define_cond('XASH_CUSTOM_SWAP', conf.options.CUSTOM_SWAP)
|
||||||
|
@ -31,7 +31,7 @@ GNU General Public License for more details.
|
|||||||
#include "enginefeatures.h"
|
#include "enginefeatures.h"
|
||||||
#include "com_strings.h"
|
#include "com_strings.h"
|
||||||
#include "pm_movevars.h"
|
#include "pm_movevars.h"
|
||||||
#include "common/cvar.h"
|
#include "cvardef.h"
|
||||||
#include "gl_export.h"
|
#include "gl_export.h"
|
||||||
#include "wadfile.h"
|
#include "wadfile.h"
|
||||||
#include "common/mod_local.h"
|
#include "common/mod_local.h"
|
||||||
|
@ -30,7 +30,7 @@ GNU General Public License for more details.
|
|||||||
#include "enginefeatures.h"
|
#include "enginefeatures.h"
|
||||||
#include "com_strings.h"
|
#include "com_strings.h"
|
||||||
#include "pm_movevars.h"
|
#include "pm_movevars.h"
|
||||||
#include "common/cvar.h"
|
#include "cvardef.h"
|
||||||
typedef struct mip_s mip_t;
|
typedef struct mip_s mip_t;
|
||||||
|
|
||||||
typedef int fixed8_t;
|
typedef int fixed8_t;
|
||||||
|
Loading…
Reference in New Issue
Block a user