X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fmain.cpp;h=006842a954ecd09f4eb29d9ce373061f082c2390;hb=refs%2Fheads%2FTimePath%2Ftest;hp=0fea7c2bc4cfc7218d3e32ddc01474e6f592af5a;hpb=6882578a4675ab8b8609d0b0421918dc664a2c18;p=xonotic%2Fnetradiant.git diff --git a/radiant/main.cpp b/radiant/main.cpp index 0fea7c2b..006842a9 100644 --- a/radiant/main.cpp +++ b/radiant/main.cpp @@ -95,122 +95,113 @@ #endif void show_splash(); + void hide_splash(); -void error_redirect( const gchar *domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data ){ - gboolean in_recursion; - gboolean is_fatal; - char buf[256]; - - in_recursion = ( log_level & G_LOG_FLAG_RECURSION ) != 0; - is_fatal = ( log_level & G_LOG_FLAG_FATAL ) != 0; - log_level = (GLogLevelFlags) ( log_level & G_LOG_LEVEL_MASK ); - - if ( !message ) { - message = "(0) message"; - } - - if ( domain ) { - strcpy( buf, domain ); - } - else{ - strcpy( buf, "**" ); - } - strcat( buf, "-" ); - - switch ( log_level ) - { - case G_LOG_LEVEL_ERROR: - if ( in_recursion ) { - strcat( buf, "ERROR (recursed) **: " ); - } - else{ - strcat( buf, "ERROR **: " ); - } - break; - case G_LOG_LEVEL_CRITICAL: - if ( in_recursion ) { - strcat( buf, "CRITICAL (recursed) **: " ); - } - else{ - strcat( buf, "CRITICAL **: " ); - } - break; - case G_LOG_LEVEL_WARNING: - if ( in_recursion ) { - strcat( buf, "WARNING (recursed) **: " ); - } - else{ - strcat( buf, "WARNING **: " ); - } - break; - case G_LOG_LEVEL_MESSAGE: - if ( in_recursion ) { - strcat( buf, "Message (recursed): " ); - } - else{ - strcat( buf, "Message: " ); - } - break; - case G_LOG_LEVEL_INFO: - if ( in_recursion ) { - strcat( buf, "INFO (recursed): " ); - } - else{ - strcat( buf, "INFO: " ); - } - break; - case G_LOG_LEVEL_DEBUG: - if ( in_recursion ) { - strcat( buf, "DEBUG (recursed): " ); - } - else{ - strcat( buf, "DEBUG: " ); - } - break; - default: - /* we are used for a log level that is not defined by GLib itself, - * try to make the best out of it. - */ - if ( in_recursion ) { - strcat( buf, "LOG (recursed:" ); - } - else{ - strcat( buf, "LOG (" ); - } - if ( log_level ) { - gchar string[] = "0x00): "; - gchar *p = string + 2; - guint i; - - i = g_bit_nth_msf( log_level, -1 ); - *p = i >> 4; - p++; - *p = '0' + ( i & 0xf ); - if ( *p > '9' ) { - *p += 'A' - '9' - 1; - } - - strcat( buf, string ); - } - else{ - strcat( buf, "): " ); - } - } - - strcat( buf, message ); - if ( is_fatal ) { - strcat( buf, "\naborting...\n" ); - } - else{ - strcat( buf, "\n" ); - } - - // spam it... - globalErrorStream() << buf << "\n"; - - if (is_fatal) { - ERROR_MESSAGE( "GTK+ error: " << buf ); +void error_redirect(const gchar *domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) +{ + gboolean in_recursion; + gboolean is_fatal; + char buf[256]; + + in_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0; + is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0; + log_level = (GLogLevelFlags) (log_level & G_LOG_LEVEL_MASK); + + if (!message) { + message = "(0) message"; + } + + if (domain) { + strcpy(buf, domain); + } else { + strcpy(buf, "**"); + } + strcat(buf, "-"); + + switch (log_level) { + case G_LOG_LEVEL_ERROR: + if (in_recursion) { + strcat(buf, "ERROR (recursed) **: "); + } else { + strcat(buf, "ERROR **: "); + } + break; + case G_LOG_LEVEL_CRITICAL: + if (in_recursion) { + strcat(buf, "CRITICAL (recursed) **: "); + } else { + strcat(buf, "CRITICAL **: "); + } + break; + case G_LOG_LEVEL_WARNING: + if (in_recursion) { + strcat(buf, "WARNING (recursed) **: "); + } else { + strcat(buf, "WARNING **: "); + } + break; + case G_LOG_LEVEL_MESSAGE: + if (in_recursion) { + strcat(buf, "Message (recursed): "); + } else { + strcat(buf, "Message: "); + } + break; + case G_LOG_LEVEL_INFO: + if (in_recursion) { + strcat(buf, "INFO (recursed): "); + } else { + strcat(buf, "INFO: "); + } + break; + case G_LOG_LEVEL_DEBUG: + if (in_recursion) { + strcat(buf, "DEBUG (recursed): "); + } else { + strcat(buf, "DEBUG: "); + } + break; + default: + /* we are used for a log level that is not defined by GLib itself, + * try to make the best out of it. + */ + if (in_recursion) { + strcat(buf, "LOG (recursed:"); + } else { + strcat(buf, "LOG ("); + } + if (log_level) { + gchar string[] = "0x00): "; + gchar *p = string + 2; + guint i; + + i = g_bit_nth_msf(log_level, -1); + *p = i >> 4; + p++; + *p = '0' + (i & 0xf); + if (*p > '9') { + *p += 'A' - '9' - 1; + } + + strcat(buf, string); + } else { + strcat(buf, "): "); + } + } + + strcat(buf, message); + if (is_fatal) { + strcat(buf, "\naborting...\n"); + } else { + strcat(buf, "\n"); + } + + // spam it... + globalErrorStream() << buf << "\n"; + + if (is_fatal) { + ERROR_MESSAGE("GTK+ error: " << buf); } } @@ -218,297 +209,318 @@ void error_redirect( const gchar *domain, GLogLevelFlags log_level, const gchar #include "crtdbg.h" #endif -void crt_init(){ +void crt_init() +{ #if GDEF_COMPILER_MSVC && GDEF_DEBUG - _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); + _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif } -class Lock -{ -bool m_locked; +class Lock { + bool m_locked; public: -Lock() : m_locked( false ){ -} -void lock(){ - m_locked = true; -} -void unlock(){ - m_locked = false; -} -bool locked() const { - return m_locked; -} + Lock() : m_locked(false) + { + } + + void lock() + { + m_locked = true; + } + + void unlock() + { + m_locked = false; + } + + bool locked() const + { + return m_locked; + } }; -class ScopedLock -{ -Lock& m_lock; +class ScopedLock { + Lock &m_lock; public: -ScopedLock( Lock& lock ) : m_lock( lock ){ - m_lock.lock(); -} -~ScopedLock(){ - m_lock.unlock(); -} + ScopedLock(Lock &lock) : m_lock(lock) + { + m_lock.lock(); + } + + ~ScopedLock() + { + m_lock.unlock(); + } }; -class LineLimitedTextOutputStream : public TextOutputStream -{ -TextOutputStream& outputStream; -std::size_t count; +class LineLimitedTextOutputStream : public TextOutputStream { + TextOutputStream &outputStream; + std::size_t count; public: -LineLimitedTextOutputStream( TextOutputStream& outputStream, std::size_t count ) - : outputStream( outputStream ), count( count ){ -} -std::size_t write( const char* buffer, std::size_t length ){ - if ( count != 0 ) { - const char* p = buffer; - const char* end = buffer + length; - for (;; ) - { - p = std::find( p, end, '\n' ); - if ( p == end ) { - break; - } - ++p; - if ( --count == 0 ) { - length = p - buffer; - break; - } - } - outputStream.write( buffer, length ); - } - return length; -} + LineLimitedTextOutputStream(TextOutputStream &outputStream, std::size_t count) + : outputStream(outputStream), count(count) + { + } + + std::size_t write(const char *buffer, std::size_t length) + { + if (count != 0) { + const char *p = buffer; + const char *end = buffer + length; + for (;;) { + p = std::find(p, end, '\n'); + if (p == end) { + break; + } + ++p; + if (--count == 0) { + length = p - buffer; + break; + } + } + outputStream.write(buffer, length); + } + return length; + } }; -class PopupDebugMessageHandler : public DebugMessageHandler -{ -StringOutputStream m_buffer; -Lock m_lock; +class PopupDebugMessageHandler : public DebugMessageHandler { + StringOutputStream m_buffer; + Lock m_lock; public: -TextOutputStream& getOutputStream(){ - if ( !m_lock.locked() ) { - return m_buffer; - } - return globalErrorStream(); -} -bool handleMessage(){ - getOutputStream() << "----------------\n"; - LineLimitedTextOutputStream outputStream( getOutputStream(), 24 ); - write_stack_trace( outputStream ); - getOutputStream() << "----------------\n"; - globalErrorStream() << m_buffer.c_str(); - if ( !m_lock.locked() ) { - ScopedLock lock( m_lock ); -#if GDEF_DEBUG - m_buffer << "Break into the debugger?\n"; - bool handled = alert( ui::root, m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::YESNO, ui::alert_icon::Error ) == ui::alert_response::NO; - m_buffer.clear(); - return handled; -#else - m_buffer << "Please report this error to the developers\n"; - ui::root.window().alert( m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::OK, ui::alert_icon::Error ); - m_buffer.clear(); -#endif - } - return true; -} + TextOutputStream &getOutputStream() + { + if (!m_lock.locked()) { + return m_buffer; + } + return globalErrorStream(); + } + + bool handleMessage() + { + getOutputStream() << "----------------\n"; + LineLimitedTextOutputStream outputStream(getOutputStream(), 24); + write_stack_trace(outputStream); + getOutputStream() << "----------------\n"; + globalErrorStream() << m_buffer.c_str(); + if (!m_lock.locked()) { + ScopedLock lock(m_lock); + if (GDEF_DEBUG) { + m_buffer << "Break into the debugger?\n"; + bool handled = ui::alert(ui::root, m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::YESNO, + ui::alert_icon::Error) == ui::alert_response::NO; + m_buffer.clear(); + return handled; + } else { + m_buffer << "Please report this error to the developers\n"; + ui::alert(ui::root, m_buffer.c_str(), "Radiant - Runtime Error", ui::alert_type::OK, + ui::alert_icon::Error); + m_buffer.clear(); + } + } + return true; + } }; typedef Static GlobalPopupDebugMessageHandler; -void streams_init(){ - GlobalErrorStream::instance().setOutputStream( getSysPrintErrorStream() ); - GlobalOutputStream::instance().setOutputStream( getSysPrintOutputStream() ); +void streams_init() +{ + GlobalErrorStream::instance().setOutputStream(getSysPrintErrorStream()); + GlobalOutputStream::instance().setOutputStream(getSysPrintOutputStream()); } -void paths_init(){ - g_strSettingsPath = environment_get_home_path(); +void paths_init() +{ + g_strSettingsPath = environment_get_home_path(); - Q_mkdir( g_strSettingsPath.c_str() ); + Q_mkdir(g_strSettingsPath.c_str()); - g_strAppPath = environment_get_app_path(); + g_strAppPath = environment_get_app_path(); - // radiant is installed in the parent dir of "tools/" - // NOTE: this is not very easy for debugging - // maybe add options to lookup in several places? - // (for now I had to create symlinks) - { - StringOutputStream path( 256 ); - path << g_strAppPath.c_str() << "bitmaps/"; - BitmapsPath_set( path.c_str() ); - } + // radiant is installed in the parent dir of "tools/" + // NOTE: this is not very easy for debugging + // maybe add options to lookup in several places? + // (for now I had to create symlinks) + { + StringOutputStream path(256); + path << g_strAppPath.c_str() << "bitmaps/"; + BitmapsPath_set(path.c_str()); + } - // we will set this right after the game selection is done - g_strGameToolsPath = g_strAppPath; + // we will set this right after the game selection is done + g_strGameToolsPath = g_strAppPath; } -bool check_version_file( const char* filename, const char* version ){ - TextFileInputStream file( filename ); - if ( !file.failed() ) { - char buf[10]; - buf[file.read( buf, 9 )] = '\0'; - - // chomp it (the hard way) - int chomp = 0; - while ( buf[chomp] >= '0' && buf[chomp] <= '9' ) - chomp++; - buf[chomp] = '\0'; - - return string_equal( buf, version ); - } - return false; +bool check_version_file(const char *filename, const char *version) +{ + TextFileInputStream file(filename); + if (!file.failed()) { + char buf[10]; + buf[file.read(buf, 9)] = '\0'; + + // chomp it (the hard way) + int chomp = 0; + while (buf[chomp] >= '0' && buf[chomp] <= '9') { + chomp++; + } + buf[chomp] = '\0'; + + return string_equal(buf, version); + } + return false; } -bool check_version(){ - // a safe check to avoid people running broken installations - // (otherwise, they run it, crash it, and blame us for not forcing them hard enough to pay attention while installing) - // make something idiot proof and someone will make better idiots, this may be overkill - // let's leave it disabled in debug mode in any case - // http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=431 -#if !GDEF_DEBUG -#define CHECK_VERSION -#endif -#ifdef CHECK_VERSION - // locate and open RADIANT_MAJOR and RADIANT_MINOR - bool bVerIsGood = true; - { - StringOutputStream ver_file_name( 256 ); - ver_file_name << AppPath_get() << "RADIANT_MAJOR"; - bVerIsGood = check_version_file( ver_file_name.c_str(), RADIANT_MAJOR_VERSION ); - } - { - StringOutputStream ver_file_name( 256 ); - ver_file_name << AppPath_get() << "RADIANT_MINOR"; - bVerIsGood = check_version_file( ver_file_name.c_str(), RADIANT_MINOR_VERSION ); - } - - if ( !bVerIsGood ) { - StringOutputStream msg( 256 ); - msg << "This editor binary (" RADIANT_VERSION ") doesn't match what the latest setup has configured in this directory\n" - "Make sure you run the right/latest editor binary you installed\n" - << AppPath_get(); - ui::root.window().alert( msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Default); - } - return bVerIsGood; -#else - return true; -#endif +bool check_version() +{ + // a safe check to avoid people running broken installations + // (otherwise, they run it, crash it, and blame us for not forcing them hard enough to pay attention while installing) + // make something idiot proof and someone will make better idiots, this may be overkill + // let's leave it disabled in debug mode in any case + // http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=431 + if (GDEF_DEBUG) { + return true; + } + // locate and open RADIANT_MAJOR and RADIANT_MINOR + bool bVerIsGood = true; + { + StringOutputStream ver_file_name(256); + ver_file_name << AppPath_get() << "RADIANT_MAJOR"; + bVerIsGood = check_version_file(ver_file_name.c_str(), RADIANT_MAJOR_VERSION); + } + { + StringOutputStream ver_file_name(256); + ver_file_name << AppPath_get() << "RADIANT_MINOR"; + bVerIsGood = check_version_file(ver_file_name.c_str(), RADIANT_MINOR_VERSION); + } + + if (!bVerIsGood) { + StringOutputStream msg(256); + msg + << "This editor binary (" RADIANT_VERSION ") doesn't match what the latest setup has configured in this directory\n" + "Make sure you run the right/latest editor binary you installed\n" + << AppPath_get(); + ui::alert(ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Default); + } + return bVerIsGood; } -void create_global_pid(){ - /*! - the global prefs loading / game selection dialog might fail for any reason we don't know about - we need to catch when it happens, to cleanup the stateful prefs which might be killing it - and to turn on console logging for lookup of the problem - this is the first part of the two step .pid system - http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=297 - */ - StringOutputStream g_pidFile( 256 ); ///< the global .pid file (only for global part of the startup) - - g_pidFile << SettingsPath_get() << "radiant.pid"; - - FILE *pid; - pid = fopen( g_pidFile.c_str(), "r" ); - if ( pid != 0 ) { - fclose( pid ); - - if ( remove( g_pidFile.c_str() ) == -1 ) { - StringOutputStream msg( 256 ); - msg << "WARNING: Could not delete " << g_pidFile.c_str(); - ui::alert( ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error ); - } - - // in debug, never prompt to clean registry, turn console logging auto after a failed start -#if !GDEF_DEBUG - StringOutputStream msg( 256 ); - msg << "Radiant failed to start properly the last time it was run.\n" - "The failure may be related to current global preferences.\n" - "Do you want to reset global preferences to defaults?"; - - if ( ui::root.window().alert( msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::Question ) == ui::alert_response::YES ) { - g_GamesDialog.Reset(); - } - - msg.clear(); - msg << "Logging console output to " << SettingsPath_get() << "radiant.log\nRefer to the log if Radiant fails to start again."; - - ui::root.window().alert( msg.c_str(), "Radiant - Console Log", ui::alert_type::OK ); -#endif +void create_global_pid() +{ + /*! + the global prefs loading / game selection dialog might fail for any reason we don't know about + we need to catch when it happens, to cleanup the stateful prefs which might be killing it + and to turn on console logging for lookup of the problem + this is the first part of the two step .pid system + http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=297 + */ + StringOutputStream g_pidFile(256); ///< the global .pid file (only for global part of the startup) + + g_pidFile << SettingsPath_get() << "radiant.pid"; + + FILE *pid; + pid = fopen(g_pidFile.c_str(), "r"); + if (pid != 0) { + fclose(pid); + + if (remove(g_pidFile.c_str()) == -1) { + StringOutputStream msg(256); + msg << "WARNING: Could not delete " << g_pidFile.c_str(); + ui::alert(ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error); + } + + // in debug, never prompt to clean registry, turn console logging auto after a failed start + if (!GDEF_DEBUG) { + StringOutputStream msg(256); + msg << "Radiant failed to start properly the last time it was run.\n" + "The failure may be related to current global preferences.\n" + "Do you want to reset global preferences to defaults?"; + + if (ui::alert(ui::root, msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, + ui::alert_icon::Question) == ui::alert_response::YES) { + g_GamesDialog.Reset(); + } + + msg.clear(); + msg << "Logging console output to " << SettingsPath_get() + << "radiant.log\nRefer to the log if Radiant fails to start again."; + + ui::alert(ui::root, msg.c_str(), "Radiant - Console Log", ui::alert_type::OK); + } + + // set without saving, the class is not in a coherent state yet + // just do the value change and call to start logging, CGamesDialog will pickup when relevant + g_GamesDialog.m_bForceLogConsole = true; + Sys_LogFile(true); + } - // set without saving, the class is not in a coherent state yet - // just do the value change and call to start logging, CGamesDialog will pickup when relevant - g_GamesDialog.m_bForceLogConsole = true; - Sys_LogFile( true ); - } - - // create a primary .pid for global init run - pid = fopen( g_pidFile.c_str(), "w" ); - if ( pid ) { - fclose( pid ); - } + // create a primary .pid for global init run + pid = fopen(g_pidFile.c_str(), "w"); + if (pid) { + fclose(pid); + } } -void remove_global_pid(){ - StringOutputStream g_pidFile( 256 ); - g_pidFile << SettingsPath_get() << "radiant.pid"; - - // close the primary - if ( remove( g_pidFile.c_str() ) == -1 ) { - StringOutputStream msg( 256 ); - msg << "WARNING: Could not delete " << g_pidFile.c_str(); - ui::alert( ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error ); - } +void remove_global_pid() +{ + StringOutputStream g_pidFile(256); + g_pidFile << SettingsPath_get() << "radiant.pid"; + + // close the primary + if (remove(g_pidFile.c_str()) == -1) { + StringOutputStream msg(256); + msg << "WARNING: Could not delete " << g_pidFile.c_str(); + ui::alert(ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error); + } } /*! now the secondary game dependant .pid file http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=297 */ -void create_local_pid(){ - StringOutputStream g_pidGameFile( 256 ); ///< the game-specific .pid file - g_pidGameFile << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << "/radiant-game.pid"; - - FILE *pid = fopen( g_pidGameFile.c_str(), "r" ); - if ( pid != 0 ) { - fclose( pid ); - if ( remove( g_pidGameFile.c_str() ) == -1 ) { - StringOutputStream msg; - msg << "WARNING: Could not delete " << g_pidGameFile.c_str(); - ui::alert( ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error ); - } - - // in debug, never prompt to clean registry, turn console logging auto after a failed start -#if !GDEF_DEBUG - StringOutputStream msg; - msg << "Radiant failed to start properly the last time it was run.\n" - "The failure may be caused by current preferences.\n" - "Do you want to reset all preferences to defaults?"; - - if ( ui::root.window().alert( msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, ui::alert_icon::Question ) == ui::alert_response::YES ) { - Preferences_Reset(); - } - - msg.clear(); - msg << "Logging console output to " << SettingsPath_get() << "radiant.log\nRefer to the log if Radiant fails to start again."; - - ui::root.window().alert( msg.c_str(), "Radiant - Console Log", ui::alert_type::OK ); -#endif - - // force console logging on! (will go in prefs too) - g_GamesDialog.m_bForceLogConsole = true; - Sys_LogFile( true ); - } - else - { - // create one, will remove right after entering message loop - pid = fopen( g_pidGameFile.c_str(), "w" ); - if ( pid ) { - fclose( pid ); - } - } +void create_local_pid() +{ + StringOutputStream g_pidGameFile(256); ///< the game-specific .pid file + g_pidGameFile << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << "/radiant-game.pid"; + + FILE *pid = fopen(g_pidGameFile.c_str(), "r"); + if (pid != 0) { + fclose(pid); + if (remove(g_pidGameFile.c_str()) == -1) { + StringOutputStream msg; + msg << "WARNING: Could not delete " << g_pidGameFile.c_str(); + ui::alert(ui::root, msg.c_str(), "Radiant", ui::alert_type::OK, ui::alert_icon::Error); + } + + // in debug, never prompt to clean registry, turn console logging auto after a failed start + if (!GDEF_DEBUG) { + StringOutputStream msg; + msg << "Radiant failed to start properly the last time it was run.\n" + "The failure may be caused by current preferences.\n" + "Do you want to reset all preferences to defaults?"; + + if (ui::alert(ui::root, msg.c_str(), "Radiant - Startup Failure", ui::alert_type::YESNO, + ui::alert_icon::Question) == ui::alert_response::YES) { + Preferences_Reset(); + } + + msg.clear(); + msg << "Logging console output to " << SettingsPath_get() + << "radiant.log\nRefer to the log if Radiant fails to start again."; + + ui::alert(ui::root, msg.c_str(), "Radiant - Console Log", ui::alert_type::OK); + } + + // force console logging on! (will go in prefs too) + g_GamesDialog.m_bForceLogConsole = true; + Sys_LogFile(true); + } else { + // create one, will remove right after entering message loop + pid = fopen(g_pidGameFile.c_str(), "w"); + if (pid) { + fclose(pid); + } + } } @@ -516,167 +528,170 @@ void create_local_pid(){ now the secondary game dependant .pid file http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=297 */ -void remove_local_pid(){ - StringOutputStream g_pidGameFile( 256 ); - g_pidGameFile << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << "/radiant-game.pid"; - remove( g_pidGameFile.c_str() ); +void remove_local_pid() +{ + StringOutputStream g_pidGameFile(256); + g_pidGameFile << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << "/radiant-game.pid"; + remove(g_pidGameFile.c_str()); } -void user_shortcuts_init(){ - StringOutputStream path( 256 ); - path << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << '/'; - LoadCommandMap( path.c_str() ); - SaveCommandMap( path.c_str() ); +void user_shortcuts_init() +{ + StringOutputStream path(256); + path << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << '/'; + LoadCommandMap(path.c_str()); + SaveCommandMap(path.c_str()); } -void user_shortcuts_save(){ - StringOutputStream path( 256 ); - path << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << '/'; - SaveCommandMap( path.c_str() ); +void user_shortcuts_save() +{ + StringOutputStream path(256); + path << SettingsPath_get() << g_pGameDescription->mGameFile.c_str() << '/'; + SaveCommandMap(path.c_str()); } -int main( int argc, char* argv[] ){ - crt_init(); +int main(int argc, char *argv[]) +{ + crt_init(); - streams_init(); + streams_init(); #if GDEF_OS_WINDOWS - HMODULE lib; - lib = LoadLibrary( "dwmapi.dll" ); - if ( lib != 0 ) { - void ( WINAPI *qDwmEnableComposition )( bool bEnable ) = ( void (WINAPI *) ( bool bEnable ) )GetProcAddress( lib, "DwmEnableComposition" ); - if ( qDwmEnableComposition ) { - qDwmEnableComposition( FALSE ); - } - FreeLibrary( lib ); - } + HMODULE lib; + lib = LoadLibrary( "dwmapi.dll" ); + if ( lib != 0 ) { + void ( WINAPI *qDwmEnableComposition )( bool bEnable ) = ( void (WINAPI *) ( bool bEnable ) )GetProcAddress( lib, "DwmEnableComposition" ); + if ( qDwmEnableComposition ) { + qDwmEnableComposition( FALSE ); + } + FreeLibrary( lib ); + } #endif - const char* mapname = NULL; + const char *mapname = NULL; char const *error = NULL; - if ( !ui::init( &argc, &argv, "", &error) ) { - g_print( "%s\n", error ); - return -1; - } - - // Gtk already removed parsed `--options` - if (argc == 2) { - if ( strlen( argv[1] ) > 1 ) { - if ( g_str_has_suffix( argv[1], ".map" ) ) { - if ( g_path_is_absolute( argv[1] ) ) { - mapname = argv[1]; - } - else { - mapname = g_build_filename( g_get_current_dir(), argv[1], NULL ); - } - } - else { - g_print( "bad file name, will not load: %s\n", argv[1] ); - } - } - } - else if (argc > 2) { - g_print ( "%s\n", "too many arguments" ); - return -1; - } - - // redirect Gtk warnings to the console - g_log_set_handler( "Gdk", (GLogLevelFlags)( G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | - G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION ), error_redirect, 0 ); - g_log_set_handler( "Gtk", (GLogLevelFlags)( G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | - G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION ), error_redirect, 0 ); - g_log_set_handler( "GtkGLExt", (GLogLevelFlags)( G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | - G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION ), error_redirect, 0 ); - g_log_set_handler( "GLib", (GLogLevelFlags)( G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | - G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION ), error_redirect, 0 ); - g_log_set_handler( 0, (GLogLevelFlags)( G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | - G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION ), error_redirect, 0 ); - - GlobalDebugMessageHandler::instance().setHandler( GlobalPopupDebugMessageHandler::instance() ); - - environment_init(argc, (char const **) argv); + if (!ui::init(&argc, &argv, "", &error)) { + g_print("%s\n", error); + return -1; + } - paths_init(); + // Gtk already removed parsed `--options` + if (argc == 2) { + if (strlen(argv[1]) > 1) { + if (g_str_has_suffix(argv[1], ".map")) { + if (g_path_is_absolute(argv[1])) { + mapname = argv[1]; + } else { + mapname = g_build_filename(g_get_current_dir(), argv[1], NULL); + } + } else { + g_print("bad file name, will not load: %s\n", argv[1]); + } + } + } else if (argc > 2) { + g_print("%s\n", "too many arguments"); + return -1; + } - if ( !check_version() ) { - return EXIT_FAILURE; - } + // redirect Gtk warnings to the console + g_log_set_handler("Gdk", (GLogLevelFlags) (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | + G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | + G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), error_redirect, 0); + g_log_set_handler("Gtk", (GLogLevelFlags) (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | + G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | + G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), error_redirect, 0); + g_log_set_handler("GtkGLExt", (GLogLevelFlags) (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | + G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | + G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), error_redirect, 0); + g_log_set_handler("GLib", (GLogLevelFlags) (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | + G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | + G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), error_redirect, 0); + g_log_set_handler(0, (GLogLevelFlags) (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | + G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG | + G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION), error_redirect, 0); + + GlobalDebugMessageHandler::instance().setHandler(GlobalPopupDebugMessageHandler::instance()); + + environment_init(argc, (char const **) argv); + + paths_init(); + + if (!check_version()) { + return EXIT_FAILURE; + } - show_splash(); + show_splash(); - create_global_pid(); + create_global_pid(); - GlobalPreferences_Init(); + GlobalPreferences_Init(); - g_GamesDialog.Init(); + g_GamesDialog.Init(); - g_strGameToolsPath = g_pGameDescription->mGameToolsPath; + g_strGameToolsPath = g_pGameDescription->mGameToolsPath; - remove_global_pid(); + remove_global_pid(); - g_Preferences.Init(); // must occur before create_local_pid() to allow preferences to be reset + g_Preferences.Init(); // must occur before create_local_pid() to allow preferences to be reset - create_local_pid(); + create_local_pid(); - // in a very particular post-.pid startup - // we may have the console turned on and want to keep it that way - // so we use a latching system - if ( g_GamesDialog.m_bForceLogConsole ) { - Sys_LogFile( true ); - g_Console_enableLogging = true; - g_GamesDialog.m_bForceLogConsole = false; - } + // in a very particular post-.pid startup + // we may have the console turned on and want to keep it that way + // so we use a latching system + if (g_GamesDialog.m_bForceLogConsole) { + Sys_LogFile(true); + g_Console_enableLogging = true; + g_GamesDialog.m_bForceLogConsole = false; + } - Radiant_Initialise(); + Radiant_Initialise(); - user_shortcuts_init(); + user_shortcuts_init(); - g_pParentWnd = 0; - g_pParentWnd = new MainFrame(); + g_pParentWnd = 0; + g_pParentWnd = new MainFrame(); - hide_splash(); + hide_splash(); - if ( mapname != NULL ) { - Map_LoadFile( mapname ); - } - else if ( g_bLoadLastMap && !g_strLastMap.empty() ) { - Map_LoadFile( g_strLastMap.c_str() ); - } - else - { - Map_New(); - } + if (mapname != NULL) { + Map_LoadFile(mapname); + } else if (g_bLoadLastMap && !g_strLastMap.empty()) { + Map_LoadFile(g_strLastMap.c_str()); + } else { + Map_New(); + } - // load up shaders now that we have the map loaded - // eviltypeguy - TextureBrowser_ShowStartupShaders( GlobalTextureBrowser() ); + // load up shaders now that we have the map loaded + // eviltypeguy + TextureBrowser_ShowStartupShaders(GlobalTextureBrowser()); - remove_local_pid(); + remove_local_pid(); - ui::main(); + ui::main(); - // avoid saving prefs when the app is minimized - if ( g_pParentWnd->IsSleeping() ) { - globalOutputStream() << "Shutdown while sleeping, not saving prefs\n"; - g_preferences_globals.disable_ini = true; - } + // avoid saving prefs when the app is minimized + if (g_pParentWnd->IsSleeping()) { + globalOutputStream() << "Shutdown while sleeping, not saving prefs\n"; + g_preferences_globals.disable_ini = true; + } - Map_Free(); + Map_Free(); - if ( !Map_Unnamed( g_map ) ) { - g_strLastMap = Map_Name( g_map ); - } + if (!Map_Unnamed(g_map)) { + g_strLastMap = Map_Name(g_map); + } - delete g_pParentWnd; + delete g_pParentWnd; - user_shortcuts_save(); + user_shortcuts_save(); - Radiant_Shutdown(); + Radiant_Shutdown(); - // close the log file if any - Sys_LogFile( false ); + // close the log file if any + Sys_LogFile(false); - return EXIT_SUCCESS; + return EXIT_SUCCESS; }