summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2009-06-03 18:18:55 +0000
committerAndrey Nazarov <skuller@skuller.net>2009-06-03 18:18:55 +0000
commit9d9b671cc77440e9b3bfcd74288f09a720c0ee6b (patch)
treeecd94136c7742b1aab73f4e43f9e454cd0c63eba
parentbd27c070620fdc96c5c3e222b3bfe43657ce90c2 (diff)
Don't cap maxmsglen on loopback connections.
Use seperate buffer for stuffcmd processing on client so that something like ‘map foobar;wait;wait;wait;give shells’ works (original Q2 used deferred buffer for this). Don't include netgraph code into release builds. Made ‘changing’ and ‘precache’ commands not available from console, since they may confuse the client when typed manually. Client now handles newlines embedded into ‘cstring’ and ‘cstring2’ layout commands properly. Fixed a crash when displaying inventory. Detect zero bytes embedded into config files and refuse to execute them.
-rw-r--r--source/baseq2/g_spawn.c6
-rw-r--r--source/cl_console.c12
-rw-r--r--source/cl_demo.c8
-rw-r--r--source/cl_input.c2
-rw-r--r--source/cl_keys.c12
-rw-r--r--source/cl_local.h6
-rw-r--r--source/cl_main.c89
-rw-r--r--source/cl_null.c3
-rw-r--r--source/cl_parse.c42
-rw-r--r--source/cl_public.h2
-rw-r--r--source/cl_ref.c6
-rw-r--r--source/cl_scrn.c24
-rw-r--r--source/cmd.c113
-rw-r--r--source/com_local.h66
-rw-r--r--source/common.c34
-rw-r--r--source/cvar.c76
-rw-r--r--source/files.c3
-rw-r--r--source/mvd_client.c2
-rw-r--r--source/mvd_local.h2
-rw-r--r--source/net_common.c8
-rw-r--r--source/snd_main.c2
-rw-r--r--source/sv_game.c10
-rw-r--r--source/sv_init.c9
-rw-r--r--source/sv_local.h2
-rw-r--r--source/sv_main.c10
-rw-r--r--source/sv_mvd.c17
-rw-r--r--source/sv_save.c2
-rw-r--r--source/sv_user.c10
-rw-r--r--source/sys_unix.c4
-rw-r--r--source/sys_win.c4
-rw-r--r--source/ui_demos.c2
-rw-r--r--source/ui_menu.c12
-rw-r--r--source/ui_multiplayer.c2
-rw-r--r--source/ui_playerconfig.c6
-rw-r--r--source/ui_script.c2
35 files changed, 335 insertions, 275 deletions
diff --git a/source/baseq2/g_spawn.c b/source/baseq2/g_spawn.c
index a82b115..6ebf279 100644
--- a/source/baseq2/g_spawn.c
+++ b/source/baseq2/g_spawn.c
@@ -434,7 +434,7 @@ static qboolean ED_ParseField (const spawn_field_t *fields, const char *key, con
*(char **)(b+f->ofs) = ED_NewString (value);
break;
case F_VECTOR:
- if( sscanf (value, "%f %f %f", &vec[0], &vec[1], &vec[2]) != 3 ) {
+ if( sscanf (value, "%f %f %f", &vec[0], &vec[1], &vec[2]) != 3 ) {
gi.dprintf( "%s: couldn't parse '%s'\n", __func__, key );
VectorClear( vec );
}
@@ -706,7 +706,7 @@ void SpawnEntities (const char *mapname, const char *entities, const char *spawn
#endif
-char *single_statusbar =
+static const char single_statusbar[] =
"yb -24 "
// health
@@ -764,7 +764,7 @@ char *single_statusbar =
"endif "
;
-char *dm_statusbar =
+static const char dm_statusbar[] =
"yb -24 "
// health
diff --git a/source/cl_console.c b/source/cl_console.c
index 8fe4c6f..8c4927c 100644
--- a/source/cl_console.c
+++ b/source/cl_console.c
@@ -939,9 +939,7 @@ void Con_DrawConsole( void ) {
*/
static void Con_Say( char *msg ) {
- Cbuf_AddText( con.chat == CHAT_TEAM ? "say_team \"" : "say \"" );
- Cbuf_AddText( msg );
- Cbuf_AddText( "\"\n" );
+ CL_ClientCommand( va( "say%s \"%s\"", con.chat == CHAT_TEAM ? "_team" : "", msg ) );
}
static void Con_Action( void ) {
@@ -957,8 +955,8 @@ static void Con_Action( void ) {
if( con.mode == CON_REMOTE ) {
CL_SendRcon( &con.remoteAddress, con.remotePassword, cmd + 1 );
} else {
- Cbuf_AddText( cmd + 1 ); // skip slash
- Cbuf_AddText( "\n" );
+ Cbuf_AddText( &cmd_buffer, cmd + 1 ); // skip slash
+ Cbuf_AddText( &cmd_buffer, "\n" );
}
} else {
if( con.mode == CON_REMOTE ) {
@@ -966,8 +964,8 @@ static void Con_Action( void ) {
} else if( cls.state == ca_active && con.mode == CON_CHAT ) {
Con_Say( cmd );
} else {
- Cbuf_AddText( cmd );
- Cbuf_AddText( "\n" );
+ Cbuf_AddText( &cmd_buffer, cmd );
+ Cbuf_AddText( &cmd_buffer, "\n" );
}
}
diff --git a/source/cl_demo.c b/source/cl_demo.c
index 94de51e..1f33655 100644
--- a/source/cl_demo.c
+++ b/source/cl_demo.c
@@ -558,8 +558,8 @@ static void CL_ParseNextDemoMessage( void ) {
if( !s[0] ) {
Com_Error( ERR_SILENT, "Demo finished" );
}
- Cbuf_AddText( s );
- Cbuf_AddText( "\n" );
+ Cbuf_AddText( &cmd_buffer, s );
+ Cbuf_AddText( &cmd_buffer, "\n" );
Cvar_Set( "nextserver", "" );
cls.state = ca_connected;
return;
@@ -632,7 +632,7 @@ static void CL_PlayDemo_f( void ) {
if( type == 1 ) {
Com_DPrintf( "%s is a MVD file\n", name );
- Cbuf_InsertText( va( "mvdplay --replace @@ /%s\n", name ) );
+ Cbuf_InsertText( &cmd_buffer, va( "mvdplay --replace @@ /%s\n", name ) );
FS_FCloseFile( demofile );
return;
}
@@ -655,7 +655,7 @@ static void CL_PlayDemo_f( void ) {
CL_ParseServerMessage();
while( cls.state == ca_connected ) {
- Cbuf_Execute();
+ Cbuf_Execute( &cl_cmdbuf );
CL_ParseNextDemoMessage();
}
diff --git a/source/cl_input.c b/source/cl_input.c
index 5339ad8..fd6ad46 100644
--- a/source/cl_input.c
+++ b/source/cl_input.c
@@ -121,7 +121,7 @@ IN_Frame
*/
void IN_Frame( void ) {
if( input.modified ) {
- Cbuf_AddText( "in_restart\n" );
+ Cbuf_AddText( &cmd_buffer, "in_restart\n" );
input.modified = qfalse;
} else if( input.initialized ) {
if( input.api.GetEvents ) {
diff --git a/source/cl_keys.c b/source/cl_keys.c
index b747722..c131b25 100644
--- a/source/cl_keys.c
+++ b/source/cl_keys.c
@@ -709,7 +709,7 @@ void Key_Event( unsigned key, qboolean down, unsigned time ) {
!cl.putaway )
{
// put away help computer / inventory
- Cbuf_AddText( "cmd putaway\n" );
+ CL_ClientCommand( "putaway" );
cl.putaway = qtrue;
return;
}
@@ -780,7 +780,7 @@ void Key_Event( unsigned key, qboolean down, unsigned time ) {
if( kb && kb[0] == '+' ) {
Q_snprintf( cmd, sizeof( cmd ), "-%s %i %i\n",
kb + 1, key, time );
- Cbuf_InsertText( cmd );
+ Cbuf_InsertText( &cmd_buffer, cmd );
}
#ifndef USE_CHAR_EVENTS
if( keyshift[key] != key ) {
@@ -788,7 +788,7 @@ void Key_Event( unsigned key, qboolean down, unsigned time ) {
if( kb && kb[0] == '+' ) {
Q_snprintf( cmd, sizeof( cmd ), "-%s %i %i\n",
kb + 1, key, time );
- Cbuf_InsertText( cmd );
+ Cbuf_InsertText( &cmd_buffer, cmd );
}
}
#endif // USE_CHAR_EVENTS
@@ -810,10 +810,10 @@ void Key_Event( unsigned key, qboolean down, unsigned time ) {
if( kb[0] == '+' ) {
// button commands add keynum and time as a parm
Q_snprintf( cmd, sizeof( cmd ), "%s %i %i\n", kb, key, time );
- Cbuf_InsertText( cmd );
+ Cbuf_InsertText( &cmd_buffer, cmd );
} else {
- Cbuf_InsertText( kb );
- Cbuf_InsertText( "\n" );
+ Cbuf_InsertText( &cmd_buffer, kb );
+ Cbuf_InsertText( &cmd_buffer, "\n" );
}
}
return;
diff --git a/source/cl_local.h b/source/cl_local.h
index 1fa4df2..554902a 100644
--- a/source/cl_local.h
+++ b/source/cl_local.h
@@ -319,6 +319,9 @@ typedef struct client_static_s {
extern client_static_t cls;
+extern cmdbuf_t cl_cmdbuf;
+extern char cl_cmdbuf_text[MAX_STRING_CHARS];
+
//=============================================================================
#define NOPART_GRENADE_EXPLOSION 1
@@ -402,7 +405,9 @@ extern cdlight_t cl_dlights[MAX_DLIGHTS];
//=============================================================================
+#ifdef _DEBUG
void CL_AddNetgraph (void);
+#endif
//ROGUE
typedef struct cl_sustain_s {
@@ -523,6 +528,7 @@ void CL_Init (void);
void CL_Quit_f (void);
void CL_Disconnect( comErrorType_t type, const char *text );
void CL_RequestNextDownload (void);
+void CL_CheckForResend( void );
void CL_ClearState (void);
void CL_RestartFilesystem( void );
void CL_RestartRefresh( void );
diff --git a/source/cl_main.c b/source/cl_main.c
index 26ae324..3ea4e69 100644
--- a/source/cl_main.c
+++ b/source/cl_main.c
@@ -98,6 +98,10 @@ client_state_t cl;
centity_t cl_entities[ MAX_EDICTS ];
+// used for executing stringcmds
+cmdbuf_t cl_cmdbuf;
+char cl_cmdbuf_text[MAX_STRING_CHARS];
+
//======================================================================
typedef enum {
@@ -319,10 +323,10 @@ CL_CheckForResend
Resend a connect message if the last one has timed out
=================
*/
-static void CL_CheckForResend( void ) {
- neterr_t ret;
+void CL_CheckForResend( void ) {
char tail[MAX_QPATH];
char userinfo[MAX_INFO_STRING];
+ int maxmsglen;
if ( cls.demo.playback ) {
return;
@@ -366,11 +370,7 @@ static void CL_CheckForResend( void ) {
if ( cls.state == ca_challenging ) {
Com_Printf( "Requesting challenge... %i\n", cls.connect_count );
- ret = OOB_PRINT( NS_CLIENT, &cls.serverAddress, "getchallenge\n" );
- if( ret == NET_ERROR ) {
- Com_Error( ERR_DISCONNECT, "%s to %s\n", NET_ErrorString(),
- NET_AdrToString( &cls.serverAddress ) );
- }
+ OOB_PRINT( NS_CLIENT, &cls.serverAddress, "getchallenge\n" );
return;
}
@@ -381,16 +381,22 @@ static void CL_CheckForResend( void ) {
cls.userinfo_modified = 0;
+ // use maximum allowed msglen for loopback
+ maxmsglen = net_maxmsglen->integer;
+ if( NET_IsLocalAddress( &cls.serverAddress ) ) {
+ maxmsglen = MAX_PACKETLEN_WRITABLE;
+ }
+
// add protocol dependent stuff
switch( cls.serverProtocol ) {
case PROTOCOL_VERSION_R1Q2:
Q_snprintf( tail, sizeof( tail ), " %d %d",
- net_maxmsglen->integer, PROTOCOL_VERSION_R1Q2_CURRENT );
+ maxmsglen, PROTOCOL_VERSION_R1Q2_CURRENT );
cls.quakePort = net_qport->integer & 0xff;
break;
case PROTOCOL_VERSION_Q2PRO:
Q_snprintf( tail, sizeof( tail ), " %d %d %d %d",
- net_maxmsglen->integer, net_chantype->integer, USE_ZLIB,
+ maxmsglen, net_chantype->integer, USE_ZLIB,
PROTOCOL_VERSION_Q2PRO_CURRENT );
cls.quakePort = net_qport->integer & 0xff;
break;
@@ -1462,7 +1468,9 @@ static void CL_PacketEvent( void ) {
CL_ParseServerMessage();
+#ifdef _DEBUG
CL_AddNetgraph();
+#endif
SCR_LagSample();
}
@@ -1513,12 +1521,10 @@ static void CL_FixUpGender( void ) {
info_gender->modified = qfalse;
}
-void CL_UpdateUserinfo( cvar_t *var, cvarSetSource_t source ) {
+void CL_UpdateUserinfo( cvar_t *var, from_t from ) {
int i;
- if( var == info_skin && source != CVAR_SET_CONSOLE &&
- gender_auto->integer )
- {
+ if( var == info_skin && from > FROM_CONSOLE && gender_auto->integer ) {
CL_FixUpGender();
}
if( !cls.netchan ) {
@@ -2347,6 +2353,43 @@ void CL_LocalConnect( void ) {
}
}
+// execute string in server command buffer
+static void exec_server_string( cmdbuf_t *buf, const char *text ) {
+ char *s;
+
+ Cmd_TokenizeString( text, qtrue );
+
+ // execute the command line
+ if( !Cmd_Argc() ) {
+ return; // no tokens
+ }
+
+ s = Cmd_Argv( 0 );
+
+ Com_DPrintf( "stufftext: %s\n", s );
+
+ // handle private client commands
+ if( !strcmp( s, "changing" ) ) {
+ CL_Changing_f();
+ return;
+ }
+ if( !strcmp( s, "precache" ) ) {
+ CL_Precache_f();
+ return;
+ }
+
+ // forbid nearly every command from demos
+ if( cls.demo.playback ) {
+ if( strcmp( s, "play" ) ) {
+ return;
+ }
+ }
+
+ // execute regular commands
+ Cmd_ExecuteCommand( buf );
+}
+
+
static void cl_gun_changed( cvar_t *self ) {
CL_UpdateGunSetting();
}
@@ -2381,13 +2424,13 @@ static const cmdreg_t c_client[] = {
{ "userinfo", CL_Userinfo_f },
{ "snd_restart", CL_RestartSound_f },
{ "play", CL_PlaySound_f, CL_PlaySound_c },
- { "changing", CL_Changing_f },
+ //{ "changing", CL_Changing_f },
{ "disconnect", CL_Disconnect_f },
{ "connect", CL_Connect_f, CL_Connect_c },
{ "passive", CL_PassiveConnect_f },
{ "reconnect", CL_Reconnect_f },
{ "rcon", CL_Rcon_f, CL_Rcon_c },
- { "precache", CL_Precache_f },
+ //{ "precache", CL_Precache_f },
{ "download", CL_Download_f },
{ "serverstatus", CL_ServerStatus_f, CL_ServerStatus_c },
{ "dumpclients", CL_DumpClients_f },
@@ -2654,9 +2697,7 @@ static void CL_CheckForReply( void ) {
return;
}
- Cbuf_AddText( "cmd say \"" );
- Cbuf_AddText( com_version->string );
- Cbuf_AddText( "\"\n" );
+ CL_ClientCommand( va( "say \"%s\"", com_version->string ) );
cl.reply_delta = 0;
}
@@ -2707,6 +2748,8 @@ void CL_Frame( unsigned msec ) {
return;
}
+ Cbuf_Execute( &cl_cmdbuf );
+
ref_extra += msec;
main_extra += msec;
cls.realtime += msec;
@@ -2852,10 +2895,9 @@ void CL_Frame( unsigned msec ) {
time_after_ref = Sys_Milliseconds();
ref_extra = 0;
- //
- // update audio after the 3D view was drawn
- S_Update();
+ // update audio after the 3D view was drawn
+ S_Update();
}
// advance local effects for next frame
@@ -2947,6 +2989,11 @@ void CL_Init( void ) {
Con_PostInit();
Con_RunConsole();
+ cl_cmdbuf.from = FROM_STUFFTEXT;
+ cl_cmdbuf.text = cl_cmdbuf_text;
+ cl_cmdbuf.maxsize = sizeof( cl_cmdbuf_text );
+ cl_cmdbuf.exec = exec_server_string;
+
Cvar_Set( "cl_running", "1" );
}
diff --git a/source/cl_null.c b/source/cl_null.c
index 987dde4..537ece6 100644
--- a/source/cl_null.c
+++ b/source/cl_null.c
@@ -32,9 +32,6 @@ qboolean CL_CheatsOK( void ) {
return qfalse;
}
-void SCR_DebugGraph( float value, int color ) {
-}
-
void CL_RestartFilesystem( void ) {
FS_Restart();
}
diff --git a/source/cl_parse.c b/source/cl_parse.c
index 23fa50f..f85e311 100644
--- a/source/cl_parse.c
+++ b/source/cl_parse.c
@@ -120,17 +120,13 @@ void CL_Download_f( void ) {
Com_Printf( "Must be connected to a server.\n" );
return;
}
-
- if( Cmd_Argc() != 2 ) {
- Com_Printf( "Usage: download <filename>\n" );
+ if( !allow_download->integer ) {
+ Com_Printf( "Downloading is disabled.\n" );
return;
}
- path = Cmd_Argv( 1 );
-
- if( !allow_download->integer ) {
- Com_Printf( "Couldn't download '%s', "
- "downloading is locally disabled.\n", path );
+ if( Cmd_Argc() != 2 ) {
+ Com_Printf( "Usage: download <filename>\n" );
return;
}
@@ -142,6 +138,8 @@ void CL_Download_f( void ) {
return;
}
+ path = Cmd_Argv( 1 );
+
if( FS_LoadFile( path, NULL ) != INVALID_LENGTH ) {
Com_Printf( "File '%s' already exists.\n", path );
return;
@@ -776,7 +774,7 @@ static void CL_ParseServerData( void ) {
int i, protocol, attractloop;
size_t len;
- Cbuf_Execute(); // make sure any stuffed commands are done
+ Cbuf_Execute( &cl_cmdbuf ); // make sure any stuffed commands are done
// wipe the client_state_t struct
CL_ClearState();
@@ -901,7 +899,7 @@ static void CL_ParseServerData( void ) {
Con_Printf( S_COLOR_ALT "%s\n\n", levelname );
#if USE_SYSCON
- Sys_Printf( "\n\n%s\n", levelname );
+ Sys_Printf( "%s\n", levelname );
#endif
// make sure clientNum is in range
@@ -1155,6 +1153,8 @@ static void CL_ParseReconnect( void ) {
cls.state = ca_challenging;
cls.connect_time = cls.realtime - CONNECT_DELAY;
cls.connect_count = 0;
+
+ CL_CheckForResend();
}
#if USE_AUTOREPLY
@@ -1261,29 +1261,15 @@ CL_ParseStuffText
=====================
*/
static void CL_ParseStuffText( void ) {
- char s[MAX_STRING_CHARS], *p;
+ char s[MAX_STRING_CHARS];
MSG_ReadString( s, sizeof( s ) );
- //if( cl_shownet->integer > 2 ) {
- // Com_Printf( " \"%s\"\n", Q_FormatString( s ) );
- //}
-
- // FIXME: this is uuugly...
- if( cls.demo.playback &&
- strcmp( s, "precache\n" ) &&
- strcmp( s, "changing\n" ) &&
- ( strncmp( s, "play ", 5 ) || !( p = strchr( s, '\n' ) ) ||
- p[1] || strchr( s, ';' ) || strchr( s, '$' ) ) &&
- strcmp( s, "reconnect\n" ) )
- {
- Com_DPrintf( "ignored stufftext: %s\n", s );
- return;
+ if( cl_shownet->integer > 2 ) {
+ Com_Printf( " \"%s\"\n", Q_FormatString( s ) );
}
- Com_DPrintf( "stufftext: %s\n", Q_FormatString( s ) );
-
- Cbuf_AddText( s );
+ Cbuf_AddText( &cl_cmdbuf, s );
}
/*
diff --git a/source/cl_public.h b/source/cl_public.h
index b5d8d57..67f36c1 100644
--- a/source/cl_public.h
+++ b/source/cl_public.h
@@ -58,7 +58,7 @@ void CL_Frame (unsigned msec);
void CL_LocalConnect( void );
void CL_RestartFilesystem( void );
void CL_Activate( active_t active );
-void CL_UpdateUserinfo( cvar_t *var, cvarSetSource_t source );
+void CL_UpdateUserinfo( cvar_t *var, from_t from );
qboolean CL_SendStatusRequest( char *buffer, size_t size );
demoInfo_t *CL_GetDemoInfo( const char *path, demoInfo_t *info );
diff --git a/source/cl_ref.c b/source/cl_ref.c
index c164dbc..929abfd 100644
--- a/source/cl_ref.c
+++ b/source/cl_ref.c
@@ -153,7 +153,7 @@ void VID_SetGeometry( vrect_t *rc ) {
Q_snprintf( buffer, sizeof( buffer ), "%dx%d+%d+%d",
rc->width, rc->height, rc->x, rc->y );
- Cvar_SetByVar( vid_geometry, buffer, CVAR_SET_DIRECT );
+ Cvar_SetByVar( vid_geometry, buffer, FROM_CODE );
}
void VID_ToggleFullscreen( void ) {
@@ -161,9 +161,9 @@ void VID_ToggleFullscreen( void ) {
if( !_vid_fullscreen->integer ) {
Cvar_Set( "_vid_fullscreen", "1" );
}
- Cbuf_AddText( "set vid_fullscreen $_vid_fullscreen\n" );
+ Cbuf_AddText( &cmd_buffer, "set vid_fullscreen $_vid_fullscreen\n" );
} else {
- Cbuf_AddText( "set vid_fullscreen 0\n" );
+ Cbuf_AddText( &cmd_buffer, "set vid_fullscreen 0\n" );
}
}
diff --git a/source/cl_scrn.c b/source/cl_scrn.c
index eae8fec..651c3e1 100644
--- a/source/cl_scrn.c
+++ b/source/cl_scrn.c
@@ -33,12 +33,15 @@ cvar_t *scr_centertime;
cvar_t *scr_showpause;
cvar_t *scr_printspeed;
+#ifdef _DEBUG
cvar_t *scr_netgraph;
cvar_t *scr_timegraph;
cvar_t *scr_debuggraph;
cvar_t *scr_graphheight;
cvar_t *scr_graphscale;
cvar_t *scr_graphshift;
+#endif
+
cvar_t *scr_demobar;
cvar_t *scr_fontvar;
cvar_t *scr_scale;
@@ -88,6 +91,7 @@ BAR GRAPHS
===============================================================================
*/
+#ifdef _DEBUG
/*
==============
CL_AddNetgraph
@@ -181,6 +185,7 @@ void SCR_DrawDebugGraph (void)
x--;
}
}
+#endif
static void SCR_DrawPercentBar( int percent ) {
char buffer[16];
@@ -334,7 +339,7 @@ Keybinding command
=================
*/
static void SCR_SizeUp_f( void ) {
- Cvar_SetInteger( scr_viewsize, scr_viewsize->integer + 10, CVAR_SET_CONSOLE );
+ Cvar_SetInteger( scr_viewsize, scr_viewsize->integer + 10, FROM_CONSOLE );
}
/*
@@ -345,7 +350,7 @@ Keybinding command
=================
*/
static void SCR_SizeDown_f( void ) {
- Cvar_SetInteger( scr_viewsize, scr_viewsize->integer - 10, CVAR_SET_CONSOLE );
+ Cvar_SetInteger( scr_viewsize, scr_viewsize->integer - 10, FROM_CONSOLE );
}
/*
@@ -493,6 +498,7 @@ void SCR_Init( void ) {
scr_viewsize = Cvar_Get ("viewsize", "100", CVAR_ARCHIVE);
scr_showpause = Cvar_Get ("scr_showpause", "1", 0);
scr_centertime = Cvar_Get ("scr_centertime", "2.5", 0);
+#ifdef _DEBUG
scr_printspeed = Cvar_Get ("scr_printspeed", "8", 0);
scr_netgraph = Cvar_Get ("netgraph", "0", 0);
scr_timegraph = Cvar_Get ("timegraph", "0", 0);
@@ -500,6 +506,7 @@ void SCR_Init( void ) {
scr_graphheight = Cvar_Get ("graphheight", "32", 0);
scr_graphscale = Cvar_Get ("graphscale", "1", 0);
scr_graphshift = Cvar_Get ("graphshift", "0", 0);
+#endif
scr_demobar = Cvar_Get( "scr_demobar", "1", CVAR_ARCHIVE );
scr_fontvar = Cvar_Get( "scr_font", "conchars", CVAR_ARCHIVE );
scr_fontvar->changed = scr_fontvar_changed;
@@ -625,10 +632,10 @@ STAT PROGRAMS
R_DrawString( x, y, UI_ALTCOLOR, MAX_STRING_CHARS, string, scr_font )
#define HUD_DrawCenterString( x, y, string ) \
- SCR_DrawStringEx( x, y, UI_CENTER, MAX_STRING_CHARS, string, scr_font )
+ SCR_DrawStringMulti( x, y, UI_CENTER, MAX_STRING_CHARS, string, scr_font )
#define HUD_DrawAltCenterString( x, y, string ) \
- SCR_DrawStringEx( x, y, UI_CENTER|UI_ALTCOLOR, MAX_STRING_CHARS, string, scr_font )
+ SCR_DrawStringMulti( x, y, UI_CENTER|UI_ALTCOLOR, MAX_STRING_CHARS, string, scr_font )
@@ -702,7 +709,12 @@ void SCR_DrawInventory( void ) {
// determine scroll point
top = selected_num - DISPLAY_ITEMS / 2;
- clamp( top, 0, num - DISPLAY_ITEMS );
+ if( top > num - DISPLAY_ITEMS ) {
+ top = num - DISPLAY_ITEMS;
+ }
+ if( top < 0 ) {
+ top = 0;
+ }
x = ( scr_hudWidth - 256 ) / 2;
y = ( scr_hudHeight - 240 ) / 2;
@@ -1149,12 +1161,14 @@ void SCR_UpdateScreen( void ) {
Con_DrawConsole();
+#ifdef _DEBUG
if( scr_timegraph->integer )
SCR_DebugGraph( cls.frametime*300, 0 );
if( scr_debuggraph->integer || scr_timegraph->integer || scr_netgraph->integer ) {
SCR_DrawDebugGraph();
}
+#endif
R_EndFrame();
diff --git a/source/cmd.c b/source/cmd.c
index 8e9ac11..35c6ddf 100644
--- a/source/cmd.c
+++ b/source/cmd.c
@@ -40,6 +40,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
char cmd_buffer_text[CMD_BUFFER_SIZE];
cmdbuf_t cmd_buffer;
+// points to the buffer current command is executed from
+cmdbuf_t *cmd_current;
+
/*
============
Cmd_Wait_f
@@ -50,11 +53,13 @@ bind g "impulse 5 ; +attack ; wait ; -attack ; impulse 2"
============
*/
static void Cmd_Wait_f( void ) {
- if( Cmd_Argc() > 1 ) {
- cmd_buffer.waitCount = atoi( Cmd_Argv( 1 ) );
- } else {
- cmd_buffer.waitCount = 1;
+ int count;
+
+ count = atoi( Cmd_Argv( 1 ) );
+ if( count < 1 ) {
+ count = 1;
}
+ cmd_current->waitCount += count;
}
/*
@@ -64,6 +69,7 @@ Cbuf_Init
*/
void Cbuf_Init( void ) {
memset( &cmd_buffer, 0, sizeof( cmd_buffer ) );
+ cmd_buffer.from = FROM_CONSOLE;
cmd_buffer.text = cmd_buffer_text;
cmd_buffer.maxsize = sizeof( cmd_buffer_text );
cmd_buffer.exec = Cmd_ExecuteString;
@@ -76,7 +82,7 @@ Cbuf_AddText
Adds command text at the end of the buffer
============
*/
-void Cbuf_AddTextEx( cmdbuf_t *buf, const char *text ) {
+void Cbuf_AddText( cmdbuf_t *buf, const char *text ) {
size_t l = strlen( text );
if( buf->cursize + l > buf->maxsize ) {
@@ -107,7 +113,7 @@ Adds command text at the beginning of command buffer.
Adds a \n to the text.
============
*/
-void Cbuf_InsertTextEx( cmdbuf_t *buf, const char *text ) {
+void Cbuf_InsertText( cmdbuf_t *buf, const char *text ) {
size_t l = strlen( text );
// add the entire text of the file
@@ -127,31 +133,10 @@ void Cbuf_InsertTextEx( cmdbuf_t *buf, const char *text ) {
/*
============
-Cbuf_ExecuteText
-============
-*/
-void Cbuf_ExecuteText( cbufExecWhen_t exec_when, const char *text ) {
- switch( exec_when ) {
- case EXEC_NOW:
- Cmd_ExecuteString( text );
- break;
- case EXEC_INSERT:
- Cbuf_InsertText( text );
- break;
- case EXEC_APPEND:
- Cbuf_AddText( text );
- break;
- default:
- Com_Error( ERR_FATAL, "%s: bad exec_when", __func__ );
- }
-}
-
-/*
-============
Cbuf_Execute
============
*/
-void Cbuf_ExecuteEx( cmdbuf_t *buf ) {
+void Cbuf_Execute( cmdbuf_t *buf ) {
int i;
char *text;
char line[MAX_STRING_CHARS];
@@ -197,8 +182,8 @@ void Cbuf_ExecuteEx( cmdbuf_t *buf ) {
}
// execute the command line
- buf->exec( line );
-
+ cmd_current = buf;
+ buf->exec( buf, line );
}
buf->aliasCount = 0; // don't allow infinite alias loops
@@ -536,6 +521,10 @@ int cmd_optind;
char *cmd_optarg;
char *cmd_optopt;
+from_t Cmd_From( void ) {
+ return cmd_current->from;
+}
+
size_t Cmd_ArgOffset( int arg ) {
if( arg < 0 ) {
return 0;
@@ -1279,24 +1268,11 @@ void Cmd_Command_g( genctx_t *ctx ) {
}
}
-/*
-============
-Cmd_ExecuteString
-
-A complete command line has been parsed, so try to execute it
-============
-*/
-void Cmd_ExecuteString( const char *text ) {
+void Cmd_ExecuteCommand( cmdbuf_t *buf ) {
cmd_function_t *cmd;
cmdalias_t *a;
cvar_t *v;
-
- Cmd_TokenizeString( text, qtrue );
-
- // execute the command line
- if( !cmd_argc ) {
- return; // no tokens
- }
+ char *text;
// check functions
cmd = Cmd_Find( cmd_argv[0] );
@@ -1316,18 +1292,18 @@ void Cmd_ExecuteString( const char *text ) {
// check aliases
a = Cmd_AliasFind( cmd_argv[0] );
if( a ) {
- if( cmd_buffer.aliasCount == ALIAS_LOOP_COUNT ) {
+ if( buf->aliasCount == ALIAS_LOOP_COUNT ) {
Com_WPrintf( "Runaway alias loop\n" );
return;
}
text = Cmd_MacroExpandString( a->value, qtrue );
if( text ) {
- cmd_buffer.aliasCount++;
- Cbuf_InsertText( text );
+ buf->aliasCount++;
+ Cbuf_InsertText( buf, text );
}
return;
}
-
+
// check variables
v = Cvar_FindVar( cmd_argv[0] );
if( v ) {
@@ -1345,6 +1321,24 @@ void Cmd_ExecuteString( const char *text ) {
}
/*
+============
+Cmd_ExecuteString
+
+A complete command line has been parsed, so try to execute it
+============
+*/
+void Cmd_ExecuteString( cmdbuf_t *buf, const char *text ) {
+ Cmd_TokenizeString( text, qtrue );
+
+ // execute the command line
+ if( !cmd_argc ) {
+ return; // no tokens
+ }
+
+ Cmd_ExecuteCommand( buf );
+}
+
+/*
===============
Cmd_Exec_f
===============
@@ -1352,6 +1346,8 @@ Cmd_Exec_f
static void Cmd_Exec_f( void ) {
char buffer[MAX_QPATH];
char *f;
+ size_t len;
+ int i;
if( Cmd_Argc() != 2 ) {
Com_Printf( "%s <filename> : execute a script file\n", Cmd_Argv( 0 ) );
@@ -1360,24 +1356,33 @@ static void Cmd_Exec_f( void ) {
Cmd_ArgvBuffer( 1, buffer, sizeof( buffer ) );
- FS_LoadFile( buffer, ( void ** )&f );
+ len = FS_LoadFile( buffer, ( void ** )&f );
if( !f ) {
// try with *.cfg extension
COM_DefaultExtension( buffer, ".cfg", sizeof( buffer ) );
- FS_LoadFile( buffer, ( void ** )&f );
+ len = FS_LoadFile( buffer, ( void ** )&f );
if( !f ) {
Com_Printf( "Couldn't exec %s\n", buffer );
return;
}
}
+ for( i = 0; i < len; i++ ) {
+ if( f[i] == 0 ) {
+ Com_Printf( "Refusing to exec binary file\n" );
+ goto finish;
+ }
+ }
+
Com_Printf( "Execing %s\n", buffer );
// FIXME: bad thing to do in place
COM_Compress( f );
- Cbuf_InsertText( f );
+ // FIXME: always insert into generic command buffer
+ Cbuf_InsertText( &cmd_buffer, f );
+finish:
FS_FreeFile( f );
}
@@ -1548,8 +1553,8 @@ static void Cmd_MacroList_f( void ) {
}
static void Cmd_Text_f( void ) {
- Cbuf_AddText( Cmd_Args() );
- Cbuf_AddText( "\n" );
+ Cbuf_AddText( cmd_current, Cmd_Args() );
+ Cbuf_AddText( cmd_current, "\n" );
}
static void Cmd_Complete_f( void ) {
diff --git a/source/com_local.h b/source/com_local.h
index 01b8df3..23f42aa 100644
--- a/source/com_local.h
+++ b/source/com_local.h
@@ -45,18 +45,32 @@ Command text buffering and command execution
#define ALIAS_LOOP_COUNT 16
-typedef struct {
+// where did current command come from?
+typedef enum {
+ FROM_STUFFTEXT,
+ FROM_RCON,
+ //FROM_GAME,
+ FROM_CONSOLE,
+ FROM_CMDLINE,
+ FROM_CODE
+} from_t;
+
+typedef struct cmdbuf_s {
+ from_t from;
char *text; // may not be NULL terminated
size_t cursize;
size_t maxsize;
int waitCount;
int aliasCount; // for detecting runaway loops
- void (*exec)( const char * );
+ void (*exec)( struct cmdbuf_s *, const char * );
} cmdbuf_t;
+// generic console buffer
extern char cmd_buffer_text[CMD_BUFFER_SIZE];
extern cmdbuf_t cmd_buffer;
+extern cmdbuf_t *cmd_current;
+
/*
Any number of commands can be added in a frame, from several different sources.
@@ -72,16 +86,16 @@ The game starts with a Cbuf_AddText ("exec quake.rc\n"); Cbuf_Execute ();
void Cbuf_Init( void );
// allocates an initial text buffer that will grow as needed
-void Cbuf_AddTextEx( cmdbuf_t *buf, const char *text );
+void Cbuf_AddText( cmdbuf_t *buf, const char *text );
// as new commands are generated from the console or keybindings,
// the text is added to the end of the command buffer.
-void Cbuf_InsertTextEx( cmdbuf_t *buf, const char *text );
+void Cbuf_InsertText( cmdbuf_t *buf, const char *text );
// when a command wants to issue other commands immediately, the text is
// inserted at the beginning of the buffer, before any remaining unexecuted
// commands.
-void Cbuf_ExecuteEx( cmdbuf_t *buf );
+void Cbuf_Execute( cmdbuf_t *buf );
// Pulls off \n terminated lines of text from the command buffer and sends
// them through Cmd_ExecuteString. Stops when the buffer is empty.
// Normally called once per frame, but may be explicitly invoked.
@@ -89,10 +103,6 @@ void Cbuf_ExecuteEx( cmdbuf_t *buf );
char *Cbuf_Alloc( cmdbuf_t *buf, size_t len );
-#define Cbuf_AddText( text ) Cbuf_AddTextEx( &cmd_buffer, text )
-#define Cbuf_InsertText( text ) Cbuf_InsertTextEx( &cmd_buffer, text )
-#define Cbuf_Execute() Cbuf_ExecuteEx( &cmd_buffer )
-
//===========================================================================
/*
@@ -102,12 +112,6 @@ then searches for a command or variable that matches the first token.
*/
-typedef enum {
- EXEC_NOW, // don't return until completed
- EXEC_INSERT, // insert at current position, but don't run yet
- EXEC_APPEND // add to end of the command buffer
-} cbufExecWhen_t;
-
typedef struct genctx_s {
const char *partial;
size_t length;
@@ -119,6 +123,7 @@ typedef struct genctx_s {
} genctx_t;
typedef void ( *xcommand_t )( void );
+typedef void ( *xcommandex_t )( cmdbuf_t * );
typedef size_t ( *xmacro_t )( char *, size_t );
typedef void ( *xcompleter_t )( struct genctx_s *, int );
@@ -162,15 +167,15 @@ void Cmd_TokenizeString( const char *text, qboolean macroExpand );
// Takes a null terminated string. Does not need to be /n terminated.
// breaks the string up into arg tokens.
-void Cmd_ExecuteString( const char *text );
+void Cmd_ExecuteCommand( cmdbuf_t *buf );
+// execute already tokenized string
+
+void Cmd_ExecuteString( cmdbuf_t *buf, const char *text );
// Parses a single line of text into arguments and tries to execute it
// as if it was typed at the console
char *Cmd_MacroExpandString( const char *text, qboolean aliasHack );
-void Cbuf_ExecuteText( cbufExecWhen_t exec_when, const char *text );
-// this can be used in place of either Cbuf_AddText or Cbuf_InsertText
-
void Cmd_Register( const cmdreg_t *reg );
void Cmd_AddCommand( const char *cmd_name, xcommand_t function );
// called by the init functions of other parts of the program to
@@ -183,6 +188,7 @@ void Cmd_RemoveCommand( const char *cmd_name );
void Cmd_AddMacro( const char *name, xmacro_t function );
+from_t Cmd_From( void );
int Cmd_Argc( void );
char *Cmd_Argv( int arg );
char *Cmd_Args( void );
@@ -206,7 +212,7 @@ void Cmd_WriteAliases( fileHandle_t f );
#define EXEC_TRIGGER( var ) \
do { \
if( (var)->string[0] ) { \
- Cbuf_AddText( (var)->string ); \
+ Cbuf_AddText( &cmd_buffer, (var)->string ); \
} \
} while( 0 )
@@ -258,19 +264,13 @@ interface from being ambiguous.
#define CVAR_MODIFYMASK (CVAR_INFOMASK|CVAR_FILES|CVAR_REFRESH|CVAR_SOUND)
#define CVAR_EXTENDED_MASK (~31)
-typedef enum {
- CVAR_SET_CONSOLE,
- CVAR_SET_COMMAND_LINE,
- CVAR_SET_DIRECT
-} cvarSetSource_t;
-
extern cvar_t *cvar_vars;
extern int cvar_modified;
-void Cvar_SetByVar( cvar_t *var, const char *value, cvarSetSource_t source );
+void Cvar_SetByVar( cvar_t *var, const char *value, from_t from );
#define Cvar_Reset( x ) \
- Cvar_SetByVar( x, (x)->default_string, CVAR_SET_DIRECT )
+ Cvar_SetByVar( x, (x)->default_string, FROM_CODE )
cvar_t *Cvar_UserSet( const char *var_name, const char *value );
@@ -278,7 +278,7 @@ cvar_t *Cvar_ForceSet (const char *var_name, const char *value);
// will set the variable even if NOSET or LATCH
cvar_t *Cvar_FullSet( const char *var_name, const char *value,
- int flags, cvarSetSource_t source );
+ int flags, from_t from );
int Cvar_ClampInteger( cvar_t *var, int min, int max );
float Cvar_ClampValue( cvar_t *var, float min, float max );
@@ -323,12 +323,12 @@ cvar_t *Cvar_Get( const char *var_name, const char *value, int flags );
cvar_t *Cvar_Ref( const char *var_name );
cvar_t *Cvar_Set( const char *var_name, const char *value );
-cvar_t *Cvar_SetEx( const char *var_name, const char *value, cvarSetSource_t source );
+cvar_t *Cvar_SetEx( const char *var_name, const char *value, from_t from );
// will create the variable if it doesn't exist
-void Cvar_SetValue( cvar_t *var, float value, cvarSetSource_t source );
-void Cvar_SetInteger( cvar_t *var, int value, cvarSetSource_t source );
-void Cvar_SetHex( cvar_t *var, int value, cvarSetSource_t source );
+void Cvar_SetValue( cvar_t *var, float value, from_t from );
+void Cvar_SetInteger( cvar_t *var, int value, from_t from );
+void Cvar_SetHex( cvar_t *var, int value, from_t from );
// expands value to a string and calls Cvar_Set
float Cvar_VariableValue( const char *var_name );
diff --git a/source/common.c b/source/common.c
index de80f6c..f579f8d 100644
--- a/source/common.c
+++ b/source/common.c
@@ -1330,7 +1330,7 @@ static void Com_AddEarlyCommands( qboolean clear ) {
com_argc = i;
break;
}
- Cvar_SetEx( com_argv[ i + 1 ], com_argv[ i + 2 ], CVAR_SET_COMMAND_LINE );
+ Cvar_SetEx( com_argv[ i + 1 ], com_argv[ i + 2 ], FROM_CMDLINE );
if( clear ) {
com_argv[i] = com_argv[ i + 1 ] = com_argv[ i + 2 ] = NULL;
}
@@ -1363,19 +1363,19 @@ static qboolean Com_AddLateCommands( void ) {
}
if( *s == '+' ) {
if( ret ) {
- Cbuf_AddText( "\n" );
+ Cbuf_AddText( &cmd_buffer, "\n" );
}
s++;
} else if( ret ) {
- Cbuf_AddText( " " );
+ Cbuf_AddText( &cmd_buffer, " " );
}
- Cbuf_AddText( s );
+ Cbuf_AddText( &cmd_buffer, s );
ret = qtrue;
}
if( ret ) {
- Cbuf_AddText( "\n" );
- Cbuf_Execute();
+ Cbuf_AddText( &cmd_buffer, "\n" );
+ Cbuf_Execute( &cmd_buffer );
}
return ret;
@@ -1468,7 +1468,7 @@ void Qcommon_Init( int argc, char **argv ) {
// add any system-wide configuration files
Sys_AddDefaultConfig();
- Cbuf_Execute();
+ Cbuf_Execute( &cmd_buffer );
// we need to add the early commands twice, because
// a basedir or cddir needs to be set before execing
@@ -1500,14 +1500,14 @@ void Qcommon_Init( int argc, char **argv ) {
logfile_name->changed = logfile_param_changed;
logfile_enable_changed( logfile_enable );
- Cbuf_AddText( "exec "COM_DEFAULTCFG_NAME"\n" );
- Cbuf_Execute();
+ Cbuf_AddText( &cmd_buffer, "exec "COM_DEFAULTCFG_NAME"\n" );
+ Cbuf_Execute( &cmd_buffer );
- Cbuf_AddText( "exec "COM_CONFIG_NAME"\n" );
- Cbuf_Execute();
+ Cbuf_AddText( &cmd_buffer, "exec "COM_CONFIG_NAME"\n" );
+ Cbuf_Execute( &cmd_buffer );
- Cbuf_AddText( "exec "COM_AUTOEXECCFG_NAME"\n" );
- Cbuf_Execute();
+ Cbuf_AddText( &cmd_buffer, "exec "COM_AUTOEXECCFG_NAME"\n" );
+ Cbuf_Execute( &cmd_buffer );
Com_AddEarlyCommands( qtrue );
@@ -1544,12 +1544,12 @@ void Qcommon_Init( int argc, char **argv ) {
if( !Com_AddLateCommands() ) {
// if the user didn't give any commands, run default action
if( Com_IsDedicated() ) {
- Cbuf_AddText( "dedicated_start\n" );
+ Cbuf_AddText( &cmd_buffer, "dedicated_start\n" );
} else {
// TODO
//Cbuf_AddText( "d1\n" );
}
- Cbuf_Execute();
+ Cbuf_Execute( &cmd_buffer );
}
#if USE_CLIENT
else {
@@ -1657,7 +1657,7 @@ void Qcommon_Frame( void ) {
}
// this is the only place where console commands are processed.
- Cbuf_Execute();
+ Cbuf_Execute( &cmd_buffer );
#if USE_CLIENT
if( host_speeds->integer )
@@ -1693,7 +1693,7 @@ void Qcommon_Frame( void ) {
#endif
if( cvar_modified & CVAR_FILES ) {
- Cbuf_ExecuteText( EXEC_NOW, "fs_restart" );
+ Cmd_ExecuteString( &cmd_buffer, "fs_restart" );
cvar_modified &= ~CVAR_FILES;
}
diff --git a/source/cvar.c b/source/cvar.c
index 8914ab8..ea12b84 100644
--- a/source/cvar.c
+++ b/source/cvar.c
@@ -152,7 +152,7 @@ static void Cvar_ParseString( cvar_t *var ) {
}
}
-static void Cvar_ChangeString( cvar_t *var, const char *value, cvarSetSource_t source ) {
+static void Cvar_ChangeString( cvar_t *var, const char *value, from_t from ) {
// free the old value string
Z_Free( var->string );
@@ -162,13 +162,13 @@ static void Cvar_ChangeString( cvar_t *var, const char *value, cvarSetSource_t s
if( var->flags & CVAR_INFOMASK ) {
#if USE_CLIENT
if( var->flags & CVAR_USERINFO ) {
- CL_UpdateUserinfo( var, source );
+ CL_UpdateUserinfo( var, from );
}
#endif
}
var->modified = qtrue;
- if( source != CVAR_SET_DIRECT ) {
+ if( from != FROM_CODE ) {
cvar_modified |= var->flags & CVAR_MODIFYMASK;
var->flags |= CVAR_MODIFIED;
if( var->changed ) {
@@ -197,7 +197,7 @@ static void Cvar_EngineGet( cvar_t *var, const char *var_value, int flags ) {
( var->flags & CVAR_VOLATILE ) ) &&
strcmp( var_value, var->string ) )
{
- Cvar_ChangeString( var, var_value, CVAR_SET_DIRECT );
+ Cvar_ChangeString( var, var_value, FROM_CODE );
}
} else {
flags &= ~CVAR_GAME;
@@ -294,7 +294,7 @@ cvar_t *Cvar_Ref( const char *var_name ) {
Cvar_SetByVar
============
*/
-void Cvar_SetByVar( cvar_t *var, const char *value, cvarSetSource_t source ) {
+void Cvar_SetByVar( cvar_t *var, const char *value, from_t from ) {
if( !value ) {
value = "";
}
@@ -310,7 +310,7 @@ void Cvar_SetByVar( cvar_t *var, const char *value, cvarSetSource_t source ) {
}
// some cvars may not be changed by user at all
- if( source != CVAR_SET_DIRECT ) {
+ if( from != FROM_CODE ) {
if( var->flags & CVAR_ROM ) {
Com_Printf( "%s is read-only.\n", var->name );
return;
@@ -325,7 +325,7 @@ void Cvar_SetByVar( cvar_t *var, const char *value, cvarSetSource_t source ) {
}
// some cvars may require special processing if set by user from console
- if( source == CVAR_SET_CONSOLE && com_initialized ) {
+ if( from <= FROM_CONSOLE && com_initialized ) {
if( var->flags & CVAR_NOSET ) {
Com_Printf( "%s may be set from command line only.\n", var->name );
return;
@@ -410,7 +410,7 @@ void Cvar_SetByVar( cvar_t *var, const char *value, cvarSetSource_t source ) {
var->latched_string = NULL;
}
- Cvar_ChangeString( var, value, source );
+ Cvar_ChangeString( var, value, from );
}
/*
@@ -418,9 +418,7 @@ void Cvar_SetByVar( cvar_t *var, const char *value, cvarSetSource_t source ) {
Cvar_SetEx
============
*/
-cvar_t *Cvar_SetEx( const char *var_name, const char *value,
- cvarSetSource_t source )
-{
+cvar_t *Cvar_SetEx( const char *var_name, const char *value, from_t from ) {
cvar_t *var;
var = Cvar_FindVar( var_name );
@@ -429,7 +427,7 @@ cvar_t *Cvar_SetEx( const char *var_name, const char *value,
return Cvar_Get( var_name, value, CVAR_CUSTOM );
}
- Cvar_SetByVar( var, value, source );
+ Cvar_SetByVar( var, value, from );
return var;
}
@@ -439,7 +437,7 @@ cvar_t *Cvar_SetEx( const char *var_name, const char *value,
Cvar_FullSet
============
*/
-cvar_t *Cvar_FullSet( const char *var_name, const char *value, int flags, cvarSetSource_t source ) {
+cvar_t *Cvar_FullSet( const char *var_name, const char *value, int flags, from_t from ) {
cvar_t *var;
var = Cvar_FindVar( var_name );
@@ -448,13 +446,13 @@ cvar_t *Cvar_FullSet( const char *var_name, const char *value, int flags, cvarSe
return Cvar_Get( var_name, value, flags | CVAR_CUSTOM );
}
- Cvar_SetByVar( var, value, source );
+ Cvar_SetByVar( var, value, from );
#if USE_CLIENT
// force retransmit of userinfo variables
// needed for compatibility with q2admin
if( ( var->flags | flags ) & CVAR_USERINFO ) {
- CL_UpdateUserinfo( var, source );
+ CL_UpdateUserinfo( var, from );
}
#endif
@@ -470,7 +468,7 @@ Cvar_Set
============
*/
cvar_t *Cvar_Set( const char *var_name, const char *value ) {
- return Cvar_SetEx( var_name, value, CVAR_SET_DIRECT );
+ return Cvar_SetEx( var_name, value, FROM_CODE );
}
/*
@@ -479,7 +477,7 @@ Cvar_UserSet
============
*/
cvar_t *Cvar_UserSet( const char *var_name, const char *value ) {
- return Cvar_SetEx( var_name, value, CVAR_SET_CONSOLE );
+ return Cvar_SetEx( var_name, value, FROM_CONSOLE );
}
@@ -488,7 +486,7 @@ cvar_t *Cvar_UserSet( const char *var_name, const char *value ) {
Cvar_SetValue
============
*/
-void Cvar_SetValue( cvar_t *var, float value, cvarSetSource_t source ) {
+void Cvar_SetValue( cvar_t *var, float value, from_t from ) {
char val[32];
if( value == (int)value )
@@ -496,7 +494,7 @@ void Cvar_SetValue( cvar_t *var, float value, cvarSetSource_t source ) {
else
Q_snprintf( val, sizeof( val ), "%f", value);
- Cvar_SetByVar( var, val, source );
+ Cvar_SetByVar( var, val, from );
}
/*
@@ -504,12 +502,12 @@ void Cvar_SetValue( cvar_t *var, float value, cvarSetSource_t source ) {
Cvar_SetInteger
============
*/
-void Cvar_SetInteger( cvar_t *var, int value, cvarSetSource_t source ) {
+void Cvar_SetInteger( cvar_t *var, int value, from_t from ) {
char val[32];
Q_snprintf( val, sizeof( val ), "%i", value );
- Cvar_SetByVar( var, val, source );
+ Cvar_SetByVar( var, val, from );
}
/*
@@ -517,12 +515,12 @@ void Cvar_SetInteger( cvar_t *var, int value, cvarSetSource_t source ) {
Cvar_SetHex
============
*/
-void Cvar_SetHex( cvar_t *var, int value, cvarSetSource_t source ) {
+void Cvar_SetHex( cvar_t *var, int value, from_t from ) {
char val[32];
Q_snprintf( val, sizeof( val ), "0x%X", value );
- Cvar_SetByVar( var, val, source );
+ Cvar_SetByVar( var, val, from );
}
/*
@@ -535,12 +533,12 @@ int Cvar_ClampInteger( cvar_t *var, int min, int max ) {
if( var->integer < min ) {
Q_snprintf( val, sizeof( val ), "%i", min );
- Cvar_SetByVar( var, val, CVAR_SET_DIRECT );
+ Cvar_SetByVar( var, val, FROM_CODE );
return min;
}
if( var->integer > max ) {
Q_snprintf( val, sizeof( val ), "%i", max );
- Cvar_SetByVar( var, val, CVAR_SET_DIRECT );
+ Cvar_SetByVar( var, val, FROM_CODE );
return max;
}
return var->integer;
@@ -560,7 +558,7 @@ float Cvar_ClampValue( cvar_t *var, float min, float max ) {
} else {
Q_snprintf( val, sizeof( val ), "%f", min );
}
- Cvar_SetByVar( var, val, CVAR_SET_DIRECT );
+ Cvar_SetByVar( var, val, FROM_CODE );
return min;
}
if( var->value > max ) {
@@ -569,7 +567,7 @@ float Cvar_ClampValue( cvar_t *var, float min, float max ) {
} else {
Q_snprintf( val, sizeof( val ), "%f", max );
}
- Cvar_SetByVar( var, val, CVAR_SET_DIRECT );
+ Cvar_SetByVar( var, val, FROM_CODE );
return max;
}
return var->value;
@@ -590,7 +588,7 @@ void Cvar_FixCheats( void ) {
// fix any cheating cvars
for( var = cvar_vars; var; var = var->next ) {
if( var->flags & CVAR_CHEAT ) {
- Cvar_SetByVar( var, var->default_string, CVAR_SET_DIRECT );
+ Cvar_SetByVar( var, var->default_string, FROM_CODE );
}
}
}
@@ -656,7 +654,7 @@ void Cvar_Command( cvar_t *v ) {
}
Com_Printf( "\n" );
} else {
- Cvar_SetByVar( v, Cmd_ArgsFrom( 1 ), CVAR_SET_CONSOLE );
+ Cvar_SetByVar( v, Cmd_ArgsFrom( 1 ), Cmd_From() );
}
}
@@ -698,7 +696,7 @@ void Cvar_Set_f( void ) {
}
if( c == 3 ) {
- Cvar_SetEx( Cmd_Argv( 1 ), Cmd_Argv( 2 ), CVAR_SET_CONSOLE );
+ Cvar_SetEx( Cmd_Argv( 1 ), Cmd_Argv( 2 ), Cmd_From() );
return;
}
@@ -711,12 +709,12 @@ void Cvar_Set_f( void ) {
} else {
goto set;
}
- Cvar_FullSet( Cmd_Argv( 1 ), Cmd_Argv( 2 ), flags, CVAR_SET_CONSOLE );
+ Cvar_FullSet( Cmd_Argv( 1 ), Cmd_Argv( 2 ), flags, Cmd_From() );
return;
}
set:
- Cvar_SetEx( Cmd_Argv( 1 ), Cmd_ArgsFrom( 2 ), CVAR_SET_CONSOLE );
+ Cvar_SetEx( Cmd_Argv( 1 ), Cmd_ArgsFrom( 2 ), Cmd_From() );
}
/*
@@ -728,7 +726,7 @@ Allows setting and defining of arbitrary cvars from console
*/
static void Cvar_SetFlag_f( void ) {
char *s = Cmd_Argv( 0 );
- int flags;
+ int flags;
if( Cmd_Argc() < 3 ) {
Com_Printf( "Usage: %s <variable> <value>\n", s );
@@ -745,7 +743,7 @@ static void Cvar_SetFlag_f( void ) {
return;
}
- Cvar_FullSet( Cmd_Argv( 1 ), Cmd_ArgsFrom( 2 ), flags, CVAR_SET_CONSOLE );
+ Cvar_FullSet( Cmd_Argv( 1 ), Cmd_ArgsFrom( 2 ), flags, Cmd_From() );
}
#if USE_CLIENT
@@ -946,9 +944,9 @@ static void Cvar_Toggle_f( void ) {
if( argc < 3 ) {
if( !strcmp( var->string, "0" ) ) {
- Cvar_SetByVar( var, "1", CVAR_SET_CONSOLE );
+ Cvar_SetByVar( var, "1", Cmd_From() );
} else if( !strcmp( var->string, "1" ) ) {
- Cvar_SetByVar( var, "0", CVAR_SET_CONSOLE );
+ Cvar_SetByVar( var, "0", Cmd_From() );
} else {
Com_Printf( "\"%s\" is \"%s\", can't toggle\n",
var->name, var->string );
@@ -959,7 +957,7 @@ static void Cvar_Toggle_f( void ) {
for( i = 0; i < argc - 2; i++ ) {
if( !Q_stricmp( var->string, Cmd_Argv( 2 + i ) ) ) {
i = ( i + 1 ) % ( argc - 2 );
- Cvar_SetByVar( var, Cmd_Argv( 2 + i ), CVAR_SET_CONSOLE );
+ Cvar_SetByVar( var, Cmd_Argv( 2 + i ), Cmd_From() );
return;
}
}
@@ -1022,7 +1020,7 @@ static void Cvar_Inc_f( void ) {
else
Q_snprintf( val, sizeof( val ), "%f", value );
- Cvar_SetByVar( var, val, CVAR_SET_CONSOLE );
+ Cvar_SetByVar( var, val, Cmd_From() );
}
/*
@@ -1044,7 +1042,7 @@ static void Cvar_Reset_f( void ) {
return;
}
- Cvar_SetByVar( var, var->default_string, CVAR_SET_CONSOLE );
+ Cvar_SetByVar( var, var->default_string, Cmd_From() );
}
static void Cvar_Reset_c( genctx_t *ctx, int argnum ) {
diff --git a/source/files.c b/source/files.c
index 7f5b4df..15aa260 100644
--- a/source/files.c
+++ b/source/files.c
@@ -2469,8 +2469,7 @@ static void FS_SetupGamedir( void ) {
}
// this one is left for compatibility with server browsers, etc
- Cvar_FullSet( "gamedir", fs_game->string, CVAR_ROM|CVAR_SERVERINFO,
- CVAR_SET_DIRECT );
+ Cvar_FullSet( "gamedir", fs_game->string, CVAR_ROM|CVAR_SERVERINFO, FROM_CODE );
FS_AddGameDirectory( FS_PATH_GAME, "%s/%s", sys_basedir->string, fs_game->string );
diff --git a/source/mvd_client.c b/source/mvd_client.c
index 284b3b6..3507b27 100644
--- a/source/mvd_client.c
+++ b/source/mvd_client.c
@@ -1415,7 +1415,7 @@ OPERATOR COMMANDS
void MVD_Spawn_f( void ) {
SV_InitGame( qtrue );
- Cvar_SetInteger( sv_running, ss_broadcast, CVAR_SET_DIRECT );
+ Cvar_SetInteger( sv_running, ss_broadcast, FROM_CODE );
Cvar_Set( "sv_paused", "0" );
Cvar_Set( "timedemo", "0" );
SV_InfoSet( "port", net_port->string );
diff --git a/source/mvd_local.h b/source/mvd_local.h
index 09bb2ab..9042dc2 100644
--- a/source/mvd_local.h
+++ b/source/mvd_local.h
@@ -29,7 +29,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define CS_NUM( c, n ) ( ( char * )(c) + (n) * MAX_QPATH )
#define MVD_InfoSet( var, val ) \
- Cvar_FullSet( var, val, CVAR_SERVERINFO|CVAR_GAME, CVAR_SET_DIRECT )
+ Cvar_FullSet( var, val, CVAR_SERVERINFO|CVAR_GAME, FROM_CODE )
// game features MVD client supports
#define MVD_FEATURES (GMF_CLIENTNUM|GMF_PROPERINUSE|GMF_WANT_ALL_DISCONNECTS)
diff --git a/source/net_common.c b/source/net_common.c
index de30e7a..59d7a44 100644
--- a/source/net_common.c
+++ b/source/net_common.c
@@ -1007,7 +1007,7 @@ static void NET_OpenServer( void ) {
if( saved_port && saved_port != net_port->integer ) {
// revert to the last valid port
Com_Printf( "Reverting to the last valid port %d...\n", saved_port );
- Cbuf_AddText( va( "set net_port %d\n", saved_port ) );
+ Cbuf_AddText( &cmd_buffer, va( "set net_port %d\n", saved_port ) );
return;
}
@@ -1040,7 +1040,7 @@ static void NET_OpenClient( void ) {
( struct sockaddr * )&address, &length );
Com_WPrintf( "Client bound to UDP port %d.\n",
ntohs( address.sin_port ) );
- Cvar_SetByVar( net_clientport, va( "%d", PORT_ANY ), CVAR_SET_DIRECT );
+ Cvar_SetByVar( net_clientport, va( "%d", PORT_ANY ), FROM_CODE );
return;
}
}
@@ -1618,10 +1618,10 @@ static size_t NET_DnRate_m( char *buffer, size_t size ) {
static void net_udp_param_changed( cvar_t *self ) {
// keep TCP socket vars in sync unless modified by user
if( !( net_tcp_ip->flags & CVAR_MODIFIED ) ) {
- Cvar_SetByVar( net_tcp_ip, net_ip->string, CVAR_SET_DIRECT );
+ Cvar_SetByVar( net_tcp_ip, net_ip->string, FROM_CODE );
}
if( !( net_tcp_port->flags & CVAR_MODIFIED ) ) {
- Cvar_SetByVar( net_tcp_port, net_port->string, CVAR_SET_DIRECT );
+ Cvar_SetByVar( net_tcp_port, net_port->string, FROM_CODE );
}
NET_Restart_f();
diff --git a/source/snd_main.c b/source/snd_main.c
index 4485d45..688e4f6 100644
--- a/source/snd_main.c
+++ b/source/snd_main.c
@@ -998,7 +998,7 @@ void S_Update( void ) {
channel_t *ch;
if( cvar_modified & CVAR_SOUND ) {
- Cbuf_AddText( "snd_restart\n" );
+ Cbuf_AddText( &cmd_buffer, "snd_restart\n" );
cvar_modified &= ~CVAR_SOUND;
return;
}
diff --git a/source/sv_game.c b/source/sv_game.c
index fa540f8..184927d 100644
--- a/source/sv_game.c
+++ b/source/sv_game.c
@@ -695,7 +695,7 @@ static cvar_t *PF_cvar( const char *name, const char *value, int flags ) {
}
static void PF_AddCommandString( const char *string ) {
- Cbuf_AddTextEx( &cmd_buffer, string );
+ Cbuf_AddText( &cmd_buffer, string );
}
static void PF_SetAreaPortalState( int portalnum, qboolean open ) {
@@ -729,6 +729,12 @@ static void PF_FreeTags( unsigned tag ) {
Z_FreeTags( tag + TAG_MAX );
}
+static void PF_DebugGraph( float value, int color ) {
+#if (defined _DEBUG) && USE_CLIENT
+ SCR_DebugGraph( value, color );
+#endif
+}
+
//==============================================
static void *game_library;
@@ -866,7 +872,7 @@ void SV_InitGameProgs ( void ) {
import.args = Cmd_RawArgs;
import.AddCommandString = PF_AddCommandString;
- import.DebugGraph = SCR_DebugGraph;
+ import.DebugGraph = PF_DebugGraph;
import.SetAreaPortalState = PF_SetAreaPortalState;
import.AreasConnected = PF_AreasConnected;
diff --git a/source/sv_init.c b/source/sv_init.c
index 92cab7a..b136b8f 100644
--- a/source/sv_init.c
+++ b/source/sv_init.c
@@ -141,7 +141,7 @@ static void SV_SpawnServer( cm_t *cm, const char *server, const char *spawnpoint
SV_InfoSet( "mapname", sv.name );
SV_InfoSet( "port", net_port->string );
- Cvar_SetInteger( sv_running, ss_game, CVAR_SET_DIRECT );
+ Cvar_SetInteger( sv_running, ss_game, FROM_CODE );
Cvar_Set( "sv_paused", "0" );
Cvar_Set( "timedemo", "0" );
@@ -208,16 +208,15 @@ void SV_InitGame( qboolean ismvd ) {
// init clients
if( Cvar_VariableInteger( "deathmatch" ) ) {
if( sv_maxclients->integer <= 1 ) {
- Cvar_SetInteger( sv_maxclients, 8, CVAR_SET_DIRECT );
+ Cvar_SetInteger( sv_maxclients, 8, FROM_CODE );
} else if( sv_maxclients->integer > CLIENTNUM_RESERVED ) {
- Cvar_SetInteger( sv_maxclients, CLIENTNUM_RESERVED, CVAR_SET_DIRECT );
+ Cvar_SetInteger( sv_maxclients, CLIENTNUM_RESERVED, FROM_CODE );
}
} else if( Cvar_VariableInteger( "coop" ) ) {
if( sv_maxclients->integer <= 1 || sv_maxclients->integer > 4 )
Cvar_Set( "maxclients", "4" );
} else { // non-deathmatch, non-coop is one player
- Cvar_FullSet( "maxclients", "1", CVAR_SERVERINFO|CVAR_LATCH,
- CVAR_SET_DIRECT );
+ Cvar_FullSet( "maxclients", "1", CVAR_SERVERINFO|CVAR_LATCH, FROM_CODE );
}
// enable networking
diff --git a/source/sv_local.h b/source/sv_local.h
index 2b4fd2a..6b3b86b 100644
--- a/source/sv_local.h
+++ b/source/sv_local.h
@@ -58,7 +58,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define SV_BASELINES_CHUNKS ( MAX_EDICTS >> SV_BASELINES_SHIFT )
#define SV_InfoSet( var, val ) \
- Cvar_FullSet( var, val, CVAR_SERVERINFO|CVAR_ROM, CVAR_SET_DIRECT )
+ Cvar_FullSet( var, val, CVAR_SERVERINFO|CVAR_ROM, FROM_CODE )
// game features this server supports
#define SV_FEATURES (GMF_CLIENTNUM|GMF_PROPERINUSE|GMF_MVDSPEC|\
diff --git a/source/sv_main.c b/source/sv_main.c
index 928ba4d..7fd1361 100644
--- a/source/sv_main.c
+++ b/source/sv_main.c
@@ -618,9 +618,11 @@ static void SVC_DirectConnect( void ) {
}
}
- // cap maximum message length
- if( net_maxmsglen->integer > 0 && maxlength > net_maxmsglen->integer ) {
- maxlength = net_maxmsglen->integer;
+ if( !NET_IsLocalAddress( &net_from ) ) {
+ // cap maximum message length for real connections
+ if( net_maxmsglen->integer > 0 && maxlength > net_maxmsglen->integer ) {
+ maxlength = net_maxmsglen->integer;
+ }
}
if( protocol == PROTOCOL_VERSION_R1Q2 ) {
@@ -969,7 +971,7 @@ static void SVC_RemoteCommand( void ) {
SV_BeginRedirect( RD_PACKET );
- Cmd_ExecuteString( string );
+ Cmd_ExecuteString( &cmd_buffer, string );
Com_EndRedirect();
}
diff --git a/source/sv_mvd.c b/source/sv_mvd.c
index 12fe860..b6f9b16 100644
--- a/source/sv_mvd.c
+++ b/source/sv_mvd.c
@@ -229,7 +229,7 @@ static const ucmd_t dummy_cmds[] = {
{ NULL, NULL }
};
-static void dummy_exec_string( const char *line ) {
+static void dummy_exec_string( cmdbuf_t *buf, const char *line ) {
char *cmd, *alias;
const ucmd_t *u;
cvar_t *v;
@@ -257,7 +257,7 @@ static void dummy_exec_string( const char *line ) {
Com_WPrintf( "%s: runaway alias loop\n", __func__ );
return;
}
- Cbuf_InsertTextEx( &dummy_buffer, alias );
+ Cbuf_InsertText( &dummy_buffer, alias );
return;
}
@@ -287,7 +287,7 @@ static void dummy_add_message( client_t *client, byte *data,
data[length] = 0;
text = ( char * )( data + 1 );
Com_DPrintf( "dummy stufftext: %s\n", text );
- Cbuf_AddTextEx( &dummy_buffer, text );
+ Cbuf_AddText( &dummy_buffer, text );
}
static void dummy_spawn( void ) {
@@ -298,7 +298,7 @@ static void dummy_spawn( void ) {
sv_player = NULL;
if( sv_mvd_begincmd->string[0] ) {
- Cbuf_AddTextEx( &dummy_buffer, sv_mvd_begincmd->string );
+ Cbuf_AddText( &dummy_buffer, sv_mvd_begincmd->string );
}
mvd.layout_time = svs.realtime;
@@ -387,7 +387,7 @@ static qboolean dummy_create( void ) {
static void dummy_run( void ) {
usercmd_t cmd;
- Cbuf_ExecuteEx( &dummy_buffer );
+ Cbuf_Execute( &dummy_buffer );
if( dummy_buffer.waitCount > 0 ) {
dummy_buffer.waitCount--;
}
@@ -405,7 +405,7 @@ static void dummy_run( void ) {
// game mod has probably closed the scoreboard, open it again
if( mvd.active && sv_mvd_scorecmd->string[0] ) {
if( svs.realtime - mvd.layout_time > 9000 ) {
- Cbuf_AddTextEx( &dummy_buffer, sv_mvd_scorecmd->string );
+ Cbuf_AddText( &dummy_buffer, sv_mvd_scorecmd->string );
mvd.layout_time = svs.realtime;
}
}
@@ -1938,6 +1938,7 @@ void SV_MvdInit( void ) {
}
}
+ dummy_buffer.from = FROM_CONSOLE;
dummy_buffer.text = dummy_buffer_text;
dummy_buffer.maxsize = sizeof( dummy_buffer_text );
dummy_buffer.exec = dummy_exec_string;
@@ -2153,8 +2154,8 @@ static void SV_MvdStop_f( void ) {
static void SV_MvdStuff_f( void ) {
if( mvd.dummy ) {
- Cbuf_AddTextEx( &dummy_buffer, Cmd_RawArgs() );
- Cbuf_AddTextEx( &dummy_buffer, "\n" );
+ Cbuf_AddText( &dummy_buffer, Cmd_RawArgs() );
+ Cbuf_AddText( &dummy_buffer, "\n" );
} else {
Com_Printf( "Can't '%s', dummy MVD client is not active\n", Cmd_Argv( 0 ) );
}
diff --git a/source/sv_save.c b/source/sv_save.c
index 08bfe72..738365c 100644
--- a/source/sv_save.c
+++ b/source/sv_save.c
@@ -319,7 +319,7 @@ void SV_Savegame_f( void ) {
// archive current level, including all client edicts.
// when the level is reloaded, they will be shells awaiting
// a connecting client
- write_level_file ();
+ write_level_file();
// save server state
write_server_file( qfalse );
diff --git a/source/sv_user.c b/source/sv_user.c
index 4dece07..21c4805 100644
--- a/source/sv_user.c
+++ b/source/sv_user.c
@@ -1241,10 +1241,12 @@ void SV_ExecuteClientMessage( client_t *client ) {
client->name, Q_FormatString( buffer ) );
}
- // malicious users may try using too many string commands
- if( stringCmdCount == MAX_PACKET_STRINGCMDS ) {
- Com_DPrintf( "Too many stringcmds from %s\n", client->name );
- break;
+ if( !NET_IsLocalAddress( &client->netchan->remote_address ) ) {
+ // malicious users may try using too many string commands
+ if( stringCmdCount == MAX_PACKET_STRINGCMDS ) {
+ Com_DPrintf( "Too many stringcmds from %s\n", client->name );
+ break;
+ }
}
SV_ExecuteUserCommand( buffer );
stringCmdCount++;
diff --git a/source/sys_unix.c b/source/sys_unix.c
index 4fa67d0..fbb56df 100644
--- a/source/sys_unix.c
+++ b/source/sys_unix.c
@@ -324,7 +324,7 @@ static void tty_parse_input( const char *text ) {
s++;
}
Sys_Printf( "]%s\n", s );
- Cbuf_AddText( s );
+ Cbuf_AddText( &cmd_buffer, s );
} else {
write( 1, "]\n", 2 );
}
@@ -420,7 +420,7 @@ void Sys_RunConsole( void ) {
text[ret] = 0;
if( !tty_enabled ) {
- Cbuf_AddText( text );
+ Cbuf_AddText( &cmd_buffer, text );
return;
}
diff --git a/source/sys_win.c b/source/sys_win.c
index 6941866..7bd70a8 100644
--- a/source/sys_win.c
+++ b/source/sys_win.c
@@ -198,8 +198,8 @@ void Sys_RunConsole( void ) {
s++;
}
Sys_Printf( "]%s\n", s );
- Cbuf_AddText( s );
- Cbuf_AddText( "\n" );
+ Cbuf_AddText( &cmd_buffer, s );
+ Cbuf_AddText( &cmd_buffer, "\n" );
} else {
WriteFile( houtput, "\n", 2, &dummy, NULL );
}
diff --git a/source/ui_demos.c b/source/ui_demos.c
index 5596e29..cf8b6fb 100644
--- a/source/ui_demos.c
+++ b/source/ui_demos.c
@@ -339,7 +339,7 @@ static menuSound_t Activate( menuCommon_t *self ) {
return QMS_IN;
case ENTRY_DEMO:
- Cbuf_AddText( va( "demo \"%s/%s\"\n", m_demos.browse[1] ?
+ Cbuf_AddText( &cmd_buffer, va( "demo \"%s/%s\"\n", m_demos.browse[1] ?
m_demos.browse : "", e->name ) );
return QMS_SILENT;
}
diff --git a/source/ui_menu.c b/source/ui_menu.c
index 4a133b2..1b9cc32 100644
--- a/source/ui_menu.c
+++ b/source/ui_menu.c
@@ -279,7 +279,7 @@ static void Field_Push( menuField_t *f ) {
}
static void Field_Pop( menuField_t *f ) {
- Cvar_SetByVar( f->cvar, f->field.text, CVAR_SET_CONSOLE );
+ Cvar_SetByVar( f->cvar, f->field.text, FROM_CONSOLE );
}
static void Field_Free( menuField_t *f ) {
@@ -406,7 +406,7 @@ static void SpinControl_Push( menuSpinControl_t *s ) {
}
static void SpinControl_Pop( menuSpinControl_t *s ) {
- Cvar_SetInteger( s->cvar, s->curvalue, CVAR_SET_CONSOLE );
+ Cvar_SetInteger( s->cvar, s->curvalue, FROM_CONSOLE );
}
static void SpinControl_Free( menuSpinControl_t *s ) {
@@ -538,7 +538,7 @@ static void BitField_Pop( menuSpinControl_t *s ) {
} else {
val &= ~s->mask;
}
- Cvar_SetInteger( s->cvar, val, CVAR_SET_CONSOLE );
+ Cvar_SetInteger( s->cvar, val, FROM_CONSOLE );
}
static void BitField_Free( menuSpinControl_t *s ) {
@@ -566,7 +566,7 @@ static void Pairs_Push( menuSpinControl_t *s ) {
}
static void Pairs_Pop( menuSpinControl_t *s ) {
- Cvar_SetByVar( s->cvar, s->itemvalues[s->curvalue], CVAR_SET_CONSOLE );
+ Cvar_SetByVar( s->cvar, s->itemvalues[s->curvalue], FROM_CONSOLE );
}
static void Pairs_Free( menuSpinControl_t *s ) {
@@ -602,7 +602,7 @@ static void Strings_Push( menuSpinControl_t *s ) {
}
static void Strings_Pop( menuSpinControl_t *s ) {
- Cvar_SetByVar( s->cvar, s->itemnames[s->curvalue], CVAR_SET_CONSOLE );
+ Cvar_SetByVar( s->cvar, s->itemnames[s->curvalue], FROM_CONSOLE );
}
/*
@@ -1129,7 +1129,7 @@ static void Slider_Push( menuSlider_t *s ) {
}
void Slider_Pop( menuSlider_t *s ) {
- Cvar_SetValue( s->cvar, s->curvalue, CVAR_SET_CONSOLE );
+ Cvar_SetValue( s->cvar, s->curvalue, FROM_CONSOLE );
}
static void Slider_Free( menuSlider_t *s ) {
diff --git a/source/ui_multiplayer.c b/source/ui_multiplayer.c
index eaaa942..b7beec8 100644
--- a/source/ui_multiplayer.c
+++ b/source/ui_multiplayer.c
@@ -298,7 +298,7 @@ static void PingServers( void ) {
static menuSound_t Connect( menuCommon_t *self ) {
serverSlot_t *s = &m_join.servers[m_join.list.curvalue];
- Cbuf_AddText( va( "connect \"%s\"\n", s->realAddress ) );
+ Cbuf_AddText( &cmd_buffer, va( "connect \"%s\"\n", s->realAddress ) );
UI_PopMenu();
return QMS_IN;
}
diff --git a/source/ui_playerconfig.c b/source/ui_playerconfig.c
index 6070a3d..a71d1ff 100644
--- a/source/ui_playerconfig.c
+++ b/source/ui_playerconfig.c
@@ -165,15 +165,15 @@ static menuSound_t Change( menuCommon_t *self ) {
static void Pop( menuFrameWork_t *self ) {
char scratch[MAX_OSPATH];
- Cvar_SetEx( "name", m_player.name.field.text, CVAR_SET_CONSOLE );
+ Cvar_SetEx( "name", m_player.name.field.text, FROM_CONSOLE );
Q_concat( scratch, sizeof( scratch ),
uis.pmi[m_player.model.curvalue].directory, "/",
uis.pmi[m_player.model.curvalue].skindisplaynames[m_player.skin.curvalue], NULL );
- Cvar_SetEx( "skin", scratch, CVAR_SET_CONSOLE );
+ Cvar_SetEx( "skin", scratch, FROM_CONSOLE );
- Cvar_SetEx( "hand", va( "%d", m_player.hand.curvalue ), CVAR_SET_CONSOLE );
+ Cvar_SetEx( "hand", va( "%d", m_player.hand.curvalue ), FROM_CONSOLE );
}
static qboolean Push( menuFrameWork_t *self ) {
diff --git a/source/ui_script.c b/source/ui_script.c
index a51fbde..13ef163 100644
--- a/source/ui_script.c
+++ b/source/ui_script.c
@@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static menuSound_t Activate( menuCommon_t *self ) {
menuAction_t *action = ( menuAction_t * )self;
- Cbuf_AddText( action->cmd );
+ Cbuf_AddText( &cmd_buffer, action->cmd );
return QMS_NOTHANDLED;
}