From 3bf9df6b2785fa6d951086978a3e66f49427166a Mon Sep 17 00:00:00 2001 From: FluorescentCIAAfricanAmerican <0934gj3049fk@protonmail.com> Date: Wed, 22 Apr 2020 12:56:21 -0400 Subject: 1 --- utils/mdmpRipper/main.cpp | 252 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 utils/mdmpRipper/main.cpp (limited to 'utils/mdmpRipper/main.cpp') diff --git a/utils/mdmpRipper/main.cpp b/utils/mdmpRipper/main.cpp new file mode 100644 index 0000000..c1e1d72 --- /dev/null +++ b/utils/mdmpRipper/main.cpp @@ -0,0 +1,252 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Configuration utility +// +//===========================================================================// + +#include +#include +#include + +#include +#include +#include +#include +#include "appframework/tier3app.h" +#include "inputsystem/iinputsystem.h" +#include "tier0/icommandline.h" +#include "filesystem_init.h" +#include "CMDRipperMain.h" +#include "isqlwrapper.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include + +#define MDRIPPER_MAIN_PATH_ID "MAIN" +#define MDRIPPER_WRITE_PATH "DEFAULT_WRITE_PATH" + +CMDRipperMain *g_pMainFrame = 0; +ISQLWrapper *g_pSqlWrapper; + +// Dummy window +static WNDCLASS staticWndclass = { NULL }; +static ATOM staticWndclassAtom = 0; +static HWND staticHwnd = 0; + +// List of our game configs, as read from the gameconfig.txt file +//CGameConfigManager g_ConfigManager; +//CUtlVector g_Configs; +HANDLE g_dwChangeHandle = NULL; + + +//----------------------------------------------------------------------------- +// Purpose: +// Output : const char +//----------------------------------------------------------------------------- +const char *GetBaseDirectory( void ) +{ + static char path[MAX_PATH] = {0}; + if ( path[0] == 0 ) + { + GetModuleFileName( (HMODULE)GetAppInstance(), path, sizeof( path ) ); + Q_StripLastDir( path, sizeof( path ) ); // Get rid of the filename. + Q_StripTrailingSlash( path ); + } + return path; +} + + +//----------------------------------------------------------------------------- +// Purpose: Message handler for dummy app +//----------------------------------------------------------------------------- +static LRESULT CALLBACK messageProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) +{ + // See if we've gotten a VPROJECT change + if ( msg == WM_SETTINGCHANGE ) + { + if ( g_pMainFrame != NULL ) + { + // Reset the list and pop an error if they've chosen something we don't understand + //g_pMainFrame->PopulateConfigList(); + } + } + + return ::DefWindowProc(hwnd,msg,wparam,lparam); +} + +//----------------------------------------------------------------------------- +// Purpose: Creates a dummy window that handles windows messages +//----------------------------------------------------------------------------- +void CreateMessageWindow( void ) +{ + // Make and register a very simple window class + memset(&staticWndclass, 0, sizeof(staticWndclass)); + staticWndclass.style = 0; + staticWndclass.lpfnWndProc = messageProc; + staticWndclass.hInstance = GetModuleHandle(NULL); + staticWndclass.lpszClassName = "minidumpRipper_Window"; + staticWndclassAtom = ::RegisterClass( &staticWndclass ); + + // Create an empty window just for message handling + staticHwnd = CreateWindowEx(0, "minidumpRipper_Window", "Hidden Window", 0, 0, 0, 1, 1, NULL, NULL, GetModuleHandle(NULL), NULL); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void ShutdownMessageWindow( void ) +{ + // Kill our windows instance + ::DestroyWindow( staticHwnd ); + ::UnregisterClass("minidumpRipper_Window", ::GetModuleHandle(NULL)); +} + + +//----------------------------------------------------------------------------- +// Purpose: Setup all our VGUI info +//----------------------------------------------------------------------------- +bool InitializeVGUI( void ) +{ + vgui::ivgui()->SetSleep(false); + + // Init the surface + vgui::Panel *pPanel = new vgui::Panel( NULL, "TopPanel" ); + pPanel->SetVisible(true); + + vgui::surface()->SetEmbeddedPanel(pPanel->GetVPanel()); + + // load the scheme + vgui::scheme()->LoadSchemeFromFile( "resource/sourcescheme.res", NULL ); + + // localization + g_pVGuiLocalize->AddFile( "resource/platform_%language%.txt" ); + g_pVGuiLocalize->AddFile( "resource/vgui_%language%.txt" ); + g_pVGuiLocalize->AddFile( "mdmpRipper_english.txt" ); + + // Start vgui + vgui::ivgui()->Start(); + + // add our main window + g_pMainFrame = new CMDRipperMain( pPanel, "CMDRipperMain" ); + + // show main window + g_pMainFrame->MoveToCenterOfScreen(); + g_pMainFrame->Activate(); + g_pMainFrame->SetSizeable( true ); + g_pMainFrame->SetMenuButtonVisible( true ); + + g_pSqlWrapper = g_pMainFrame->GetSqlWrapper(); + + return true; +} + + +//----------------------------------------------------------------------------- +// Purpose: Stop VGUI +//----------------------------------------------------------------------------- +void ShutdownVGUI( void ) +{ + delete g_pMainFrame; +} + + +//----------------------------------------------------------------------------- +// The application object +//----------------------------------------------------------------------------- +class CMDRipperApp : public CVguiSteamApp +{ + typedef CVguiSteamApp BaseClass; + +public: + // Methods of IApplication + virtual bool Create(); + virtual bool PreInit(); + virtual int Main(); + virtual void PostShutdown(); + virtual void Destroy() {} +}; + +DEFINE_WINDOWED_STEAM_APPLICATION_OBJECT( CMDRipperApp ); + + +//----------------------------------------------------------------------------- +// The application object +//----------------------------------------------------------------------------- +bool CMDRipperApp::Create() +{ + AppSystemInfo_t appSystems[] = + { + { "inputsystem.dll", INPUTSYSTEM_INTERFACE_VERSION }, + { "vgui2.dll", VGUI_IVGUI_INTERFACE_VERSION }, + { "", "" } // Required to terminate the list + }; + + return AddSystems( appSystems ); +} + + +//----------------------------------------------------------------------------- +// Purpose: Entry point +//----------------------------------------------------------------------------- +bool CMDRipperApp::PreInit() +{ + if ( !BaseClass::PreInit() ) + return false; + + // Create a window to capture messages + CreateMessageWindow(); + + FileSystem_SetErrorMode( FS_ERRORMODE_AUTO ); + + // We only want to use the gameinfo.txt that is in the bin\vconfig directory. + char dirName[MAX_PATH]; + Q_strncpy( dirName, GetBaseDirectory(), sizeof( dirName ) ); + Q_AppendSlash( dirName, sizeof( dirName ) ); + Q_strncat( dirName, "minidumpRipper", sizeof( dirName ), COPY_ALL_CHARACTERS ); + + if ( !BaseClass::SetupSearchPaths( dirName, true, true ) ) + { + ::MessageBox( NULL, "Error", "Unable to initialize file system\n", MB_OK ); + return false; + } + + // the "base dir" so we can scan mod name + g_pFullFileSystem->AddSearchPath(GetBaseDirectory(), MDRIPPER_MAIN_PATH_ID); + + // the main platform dir + g_pFullFileSystem->AddSearchPath("platform","PLATFORM", PATH_ADD_TO_HEAD); + g_pFullFileSystem->AddSearchPath(".\\minidumpRipper\\",MDRIPPER_WRITE_PATH, PATH_ADD_TO_HEAD); + + return true; +} + + +void CMDRipperApp::PostShutdown() +{ + // Stop our message window + ShutdownMessageWindow(); + + BaseClass::PostShutdown(); +} + + +//----------------------------------------------------------------------------- +// Purpose: Entry point +//----------------------------------------------------------------------------- +int CMDRipperApp::Main() +{ + // Run app frame loop + if ( !InitializeVGUI() ) + return 0; + + // Run the app + while (vgui::ivgui()->IsRunning()) + { + Sleep( 10 ); + vgui::ivgui()->RunFrame(); + } + + ShutdownVGUI(); + + return 1; +} -- cgit v1.2.3