int main(int argc, char** argv) #endif { // convert args to multibyte char #ifdef WIN32 GS2D_UNUSED_ARGUMENT(hInstance); GS2D_UNUSED_ARGUMENT(nCmdShow); int argc = 0; LPWSTR* wargv = CommandLineToArgvW(lpCmdLine, &argc); LPSTR* argv = new LPSTR [argc]; for (int t = 0; t < argc; t++) { std::size_t convertCount = 0; const std::size_t bufferSize = 4096; argv[t] = new CHAR [bufferSize]; wcstombs_s(&convertCount, argv[t], bufferSize, wargv[t], wcslen(wargv[t]) + 1); } #endif // start engine runtime bool compileAndRun, testing, wait; ProcParams(argc, argv, compileAndRun, testing, wait); ETHScriptWrapper::SetArgc(argc); ETHScriptWrapper::SetArgv(argv); Platform::FileManagerPtr fileManager(new Platform::StdFileManager()); Platform::FileIOHubPtr fileIOHub = Platform::CreateFileIOHub(fileManager, ETHDirectories::GetBitmapFontDirectory()); { const str_type::string resourceDirectory = FindResourceDir(argc, argv); if (!resourceDirectory.empty()) fileIOHub->SetResourceDirectory(resourceDirectory); } const str_type::string resourceDirectory = fileIOHub->GetResourceDirectory(); const ETHAppEnmlFile app(resourceDirectory + ETH_APP_PROPERTIES_FILE, Platform::FileManagerPtr(new Platform::StdFileManager), Application::GetPlatformName()); const str_type::string bitmapFontPath = resourceDirectory + ETHDirectories::GetBitmapFontDirectory(); bool aborted; { ETHEnginePtr application = ETHEnginePtr(new ETHEngine(testing, compileAndRun)); application->SetHighEndDevice(true); VideoPtr video; if ((video = CreateVideo( app.GetWidth(), app.GetHeight(), app.GetTitle(), app.IsWindowed(), app.IsVsyncEnabled(), fileIOHub, Texture::PF_UNKNOWN, false))) { InputPtr input = CreateInput(0, false); AudioPtr audio = CreateAudio(0); application->Start(video, input, audio); if (compileAndRun) { Video::APP_STATUS status; while ((status = video->HandleEvents()) != Video::APP_QUIT) { if (status == Video::APP_SKIP) continue; input->Update(); if (application->Update(Min(1000.0f, ComputeElapsedTimeF(video))) == Application::APP_QUIT) { break; } application->RenderFrame(); } } } application->Destroy(); aborted = application->Aborted(); } if (aborted) { ETH_STREAM_DECL(ss) << std::endl << GS_L("The program executed an ilegal operation and was aborted"); GS2D_CERR << ss.str() << std::endl; } if (!compileAndRun && !aborted) { ETH_STREAM_DECL(ss) << std::endl << GS_L("Compilation successful: 0 errors"); GS2D_CERR << ss.str() << std::endl; } if (aborted && wait) { GS2D_COUT << GS_L("Press any key to continue...") << GS_L("\n"); std::cin.get(); } #if defined(_DEBUG) || defined(DEBUG) #ifdef WIN32 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); LocalFree(wargv); for (int t = 0; t < argc; t++) { delete [] argv[t]; } delete [] argv; #endif #endif return 0; }
int ETH_MACHINE_MAIN_FUNC(int argc, gs2d::str_type::char_t** argv) #endif { bool compileAndRun, testing, wait; ProcParams(argc, argv, compileAndRun, testing, wait); ETHScriptWrapper::SetArgc(argc); ETHScriptWrapper::SetArgv(argv); Platform::FileManagerPtr fileManager(new Platform::StdFileManager()); Platform::FileIOHubPtr fileIOHub = Platform::CreateFileIOHub(fileManager, ETHDirectories::GetBitmapFontDirectory()); { const str_type::string resourceDirectory = FindResourceDir(argc, argv); if (!resourceDirectory.empty()) fileIOHub->SetResourceDirectory(resourceDirectory); } const str_type::string resourceDirectory = fileIOHub->GetResourceDirectory(); const ETHAppEnmlFile app(resourceDirectory + ETH_APP_PROPERTIES_FILE, Platform::FileManagerPtr(new Platform::StdFileManager), Application::GetPlatformName()); const str_type::string bitmapFontPath = resourceDirectory + ETHDirectories::GetBitmapFontDirectory(); bool aborted; { ETHEnginePtr application = ETHEnginePtr(new ETHEngine(testing, compileAndRun)); application->SetHighEndDevice(true); VideoPtr video; if ((video = CreateVideo( app.GetWidth(), app.GetHeight(), app.GetTitle(), app.IsWindowed(), app.IsVsyncEnabled(), fileIOHub, Texture::PF_UNKNOWN, false))) { InputPtr input = CreateInput(0, false); AudioPtr audio = CreateAudio(0); application->Start(video, input, audio); if (compileAndRun) { Video::APP_STATUS status; while ((status = video->HandleEvents()) != Video::APP_QUIT) { if (status == Video::APP_SKIP) continue; input->Update(); if (application->Update(Min(static_cast<unsigned long>(1000), ComputeElapsedTime(video))) == Application::APP_QUIT) { break; } application->RenderFrame(); } } } application->Destroy(); aborted = application->Aborted(); } if (aborted) { ETH_STREAM_DECL(ss) << std::endl << GS_L("The program executed an ilegal operation and was aborted"); GS2D_CERR << ss.str() << std::endl; } if (!compileAndRun && !aborted) { ETH_STREAM_DECL(ss) << std::endl << GS_L("Compilation successful: 0 errors"); GS2D_CERR << ss.str() << std::endl; } if (aborted && wait) { GS2D_COUT << GS_L("Press any key to continue...") << GS_L("\n"); std::cin.get(); } #if defined(_DEBUG) || defined(DEBUG) #ifdef WIN32 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); #endif #endif return 0; }