diff options
Diffstat (limited to 'source/cl_main.c')
-rw-r--r-- | source/cl_main.c | 77 |
1 files changed, 55 insertions, 22 deletions
diff --git a/source/cl_main.c b/source/cl_main.c index b27b1dd..3a2da20 100644 --- a/source/cl_main.c +++ b/source/cl_main.c @@ -297,27 +297,6 @@ void CL_ForwardToServer_f( void ) { } } -void CL_Setenv_f( void ) { - int argc = Cmd_Argc(); - - if ( argc > 2 ) { - char buffer[ MAX_STRING_CHARS ]; - - Q_concat( buffer, sizeof( buffer ), Cmd_Argv( 1 ), "=", - Cmd_ArgsFrom( 2 ), NULL ); - - putenv( buffer ); - } else if ( argc == 2 ) { - char * env = getenv( Cmd_Argv( 1 ) ); - - if ( env ) { - Com_Printf( "%s=%s\n", Cmd_Argv( 1 ), env ); - } else { - Com_Printf( "%s undefined\n", Cmd_Argv( 1 ) ); - } - } -} - /* ================== CL_Pause_f @@ -1976,6 +1955,58 @@ static void CL_DumpLayout_f( void ) { Com_Printf( "Dumped layout program to %s.\n", buffer ); } +/* +=============== +CL_WriteConfig + +Writes key bindings and archived cvars to config.cfg +=============== +*/ +static qboolean CL_WriteConfig( const char *path ) { + fileHandle_t f; + + FS_FOpenFile( path, &f, FS_MODE_WRITE ); + if( !f ) { + Com_WPrintf( "Couldn't write %s\n", path ); + return qfalse; + } + + FS_FPrintf( f, "// generated by q2pro, do not modify\n" ); + + Key_WriteBindings( f ); + Cvar_WriteVariables( f ); + + FS_FCloseFile( f ); + + return qtrue; +} + +/* +=============== +CL_WriteConfig_f +=============== +*/ +static void CL_WriteConfig_f( void ) { + char buffer[MAX_QPATH]; + + if( Cmd_Argc() > 2 ) { + Com_Printf( "Usage: %s [cfgfile]\n", Cmd_Argv( 0 ) ); + return; + } + + if( Cmd_Argc() < 2 ) { + strcpy( buffer, COM_CONFIG_NAME ); + } else { + Cmd_ArgvBuffer( 1, buffer, sizeof( buffer ) ); + COM_AppendExtension( buffer, ".cfg", sizeof( buffer ) ); + } + + if( CL_WriteConfig( buffer ) ) { + Com_Printf( "Wrote %s\n", buffer ); + } +} + + static int CL_Mapname_m( char *buffer, int size ) { if( !cl.mapname[0] ) { return Q_strncpyz( buffer, "nomap", size ); @@ -2206,13 +2237,13 @@ static const cmdreg_t c_client[] = { { "passive", CL_PassiveConnect_f }, { "reconnect", CL_Reconnect_f }, { "rcon", CL_Rcon_f }, - { "setenv", CL_Setenv_f }, { "precache", CL_Precache_f }, { "download", CL_Download_f }, { "serverstatus", CL_ServerStatus_f, CL_Connect_g }, { "dumpclients", CL_DumpClients_f }, { "dumpstatusbar", CL_DumpStatusbar_f }, { "dumplayout", CL_DumpLayout_f }, + { "writeconfig", CL_WriteConfig_f, Cmd_Exec_g }, { "vid_restart", CL_RestartRefresh_f }, // @@ -2751,6 +2782,8 @@ void CL_Shutdown( void ) { Con_Shutdown(); CL_ShutdownRefresh(); + CL_WriteConfig( COM_CONFIG_NAME ); + Cvar_Set( "cl_running", "0" ); isdown = qfalse; |