/* ================== WinMain ================== */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const HCURSOR hcurSave = ::SetCursor(LoadCursor(0, IDC_WAIT)); Sys_SetPhysicalWorkMemory(192 << 20, 1024 << 20); Sys_GetCurrentMemoryStatus(exeLaunchMemoryStats); #if 0 DWORD handler = (DWORD)_except_handler; __asm { // Build EXCEPTION_REGISTRATION record: push handler // Address of handler function push FS:[0] // Address of previous handler mov FS:[0],ESP // Install new EXECEPTION_REGISTRATION } #endif win32.hInstance = hInstance; idStr::Copynz(sys_cmdline, lpCmdLine, sizeof(sys_cmdline)); // done before Com/Sys_Init since we need this for error output Sys_CreateConsole(); // no abort/retry/fail errors SetErrorMode(SEM_FAILCRITICALERRORS); for (int i = 0; i < MAX_CRITICAL_SECTIONS; i++) { InitializeCriticalSection(&win32.criticalSections[i]); } // get the initial time base Sys_Milliseconds(); #ifdef DEBUG // disable the painfully slow MS heap check every 1024 allocs _CrtSetDbgFlag(0); #endif // Sys_FPU_EnableExceptions( TEST_FPU_EXCEPTIONS ); Sys_FPU_SetPrecision(FPU_PRECISION_DOUBLE_EXTENDED); common->Init(0, NULL, lpCmdLine); #if TEST_FPU_EXCEPTIONS != 0 common->Printf(Sys_FPU_GetState()); #endif #ifndef ID_DEDICATED if (win32.win_notaskkeys.GetInteger()) { DisableTaskKeys(TRUE, FALSE, /*( win32.win_notaskkeys.GetInteger() == 2 )*/ FALSE); } #endif Sys_StartAsyncThread(); // hide or show the early console as necessary if (win32.win_viewlog.GetInteger() || com_skipRenderer.GetBool() || idAsyncNetwork::serverDedicated.GetInteger()) { Sys_ShowConsole(1, true); } else { Sys_ShowConsole(0, false); } #ifdef SET_THREAD_AFFINITY // give the main thread an affinity for the first cpu SetThreadAffinityMask(GetCurrentThread(), 1); #endif ::SetCursor(hcurSave); // Launch the script debugger if (strstr(lpCmdLine, "+debugger")) { // DebuggerClientInit( lpCmdLine ); return 0; } ::SetFocus(win32.hWnd); // main game loop while (1) { Win_Frame(); #ifdef DEBUG Sys_MemFrame(); #endif // set exceptions, even if some crappy syscall changes them! Sys_FPU_EnableExceptions(TEST_FPU_EXCEPTIONS); #ifdef ID_ALLOW_TOOLS if (com_editors) { if (com_editors & EDITOR_GUI) { // GUI editor GUIEditorRun(); } else if (com_editors & EDITOR_RADIANT) { // Level Editor RadiantRun(); } else if (com_editors & EDITOR_MATERIAL) { //BSM Nerve: Add support for the material editor MaterialEditorRun(); } else { if (com_editors & EDITOR_LIGHT) { // in-game Light Editor LightEditorRun(); } if (com_editors & EDITOR_SOUND) { // in-game Sound Editor SoundEditorRun(); } if (com_editors & EDITOR_DECL) { // in-game Declaration Browser DeclBrowserRun(); } if (com_editors & EDITOR_AF) { // in-game Articulated Figure Editor AFEditorRun(); } if (com_editors & EDITOR_PARTICLE) { // in-game Particle Editor ParticleEditorRun(); } if (com_editors & EDITOR_SCRIPT) { // in-game Script Editor ScriptEditorRun(); } if (com_editors & EDITOR_PDA) { // in-game PDA Editor PDAEditorRun(); } } } #endif // run the game common->Frame(); } // never gets here return 0; }
/* ================== WinMain ================== */ int main(int argc, char *argv[]) { const HCURSOR hcurSave = ::SetCursor( LoadCursor( 0, IDC_WAIT ) ); Sys_SetPhysicalWorkMemory( 192 << 20, 1024 << 20 ); win32.hInstance = GetModuleHandle(NULL); // done before Com/Sys_Init since we need this for error output Sys_CreateConsole(); // no abort/retry/fail errors SetErrorMode( SEM_FAILCRITICALERRORS ); #ifdef DEBUG // disable the painfully slow MS heap check every 1024 allocs _CrtSetDbgFlag( 0 ); #endif if ( argc > 1 ) { common->Init( argc-1, &argv[1] ); } else { common->Init( 0, NULL ); } // hide or show the early console as necessary if ( win32.win_viewlog.GetInteger() || com_skipRenderer.GetBool() || idAsyncNetwork::serverDedicated.GetInteger() ) { Sys_ShowConsole( 1, true ); } else { Sys_ShowConsole( 0, false ); } #ifdef SET_THREAD_AFFINITY // give the main thread an affinity for the first cpu SetThreadAffinityMask( GetCurrentThread(), 1 ); #endif ::SetCursor( hcurSave ); // Launch the script debugger if ( strstr( GetCommandLine(), "+debugger" ) ) { // DebuggerClientInit( lpCmdLine ); return 0; } ::SetFocus( win32.hWnd ); // main game loop while( 1 ) { Win_Frame(); #ifdef ID_ALLOW_TOOLS if ( com_editors ) { if ( com_editors & EDITOR_GUI ) { // GUI editor GUIEditorRun(); } else if ( com_editors & EDITOR_RADIANT ) { // Level Editor RadiantRun(); } else if (com_editors & EDITOR_MATERIAL ) { //BSM Nerve: Add support for the material editor MaterialEditorRun(); } else { if ( com_editors & EDITOR_LIGHT ) { // in-game Light Editor LightEditorRun(); } if ( com_editors & EDITOR_SOUND ) { // in-game Sound Editor SoundEditorRun(); } if ( com_editors & EDITOR_DECL ) { // in-game Declaration Browser DeclBrowserRun(); } if ( com_editors & EDITOR_AF ) { // in-game Articulated Figure Editor AFEditorRun(); } if ( com_editors & EDITOR_PARTICLE ) { // in-game Particle Editor ParticleEditorRun(); } if ( com_editors & EDITOR_SCRIPT ) { // in-game Script Editor ScriptEditorRun(); } if ( com_editors & EDITOR_PDA ) { // in-game PDA Editor PDAEditorRun(); } } } #endif // run the game common->Frame(); } // never gets here return 0; }