source-engine/utils/xbox/vxconsole/vxconsole.h

480 lines
17 KiB
C
Raw Permalink Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// VXCONSOLE.H
//
// Master Header.
//=====================================================================================//
#pragma once
#include "tier0/platform.h"
#include <winsock2.h>
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <stdio.h>
#include <stdarg.h>
#include <io.h>
#include <fcntl.h>
#include <string.h>
#include <share.h>
#include <richedit.h>
#include <assert.h>
#include <xbdm.h>
#include <time.h>
#include <sys/stat.h>
#include "resource.h"
#include "assert_resource.h"
#include "sys_utils.h"
#include "sys_scriptlib.h"
#include "bugreporter/bugreporter.h"
#include "jpeglib/jpeglib.h"
#include "UtlBuffer.h"
#include "strtools.h"
#include "xbox/xbox_vxconsole.h"
#include "UtlRBTree.h"
#include "UtlSymbol.h"
#include "UtlVector.h"
#include "UtlString.h"
#define VXCONSOLE_VERSION "1.2"
#define VXCONSOLE_CLASSNAME "VXConsole"
#define VXCONSOLE_TITLE "VXConsole"
#define VXCONSOLE_FONT "Courier"
#define VXCONSOLE_FONTSIZE 10
#define VXCONSOLE_MAGIC "3\\"
#define VXCONSOLE_REGISTRY "HKEY_CURRENT_USER\\Software\\VXConsole\\" VXCONSOLE_MAGIC
#ifdef _DEBUG
#define VXCONSOLE_BUILDTYPE "Debug"
#else
#define VXCONSOLE_BUILDTYPE "Release"
#endif
#define VXCONSOLE_WINDOWBYTES ( DLGWINDOWEXTRA + 4 )
#define VXCONSOLE_CONFIGID ( VXCONSOLE_WINDOWBYTES - 4 )
#define MAX_QUEUEDSTRINGS 4096
#define MAX_QUEUEDSTRINGLEN 512
#define MAX_RCMDNAMELEN 32
#define MAX_RCMDS 4096
#define MAX_TOKENCHARS 256
#define MAX_XBOXNAMELEN 64
#define MAX_ARGVELEMS 20
#define MAX_COMMANDHISTORY 25
#define TIMERID_AUTOCONNECT 0x1000
#define TIMERID_MEMPROFILE 0x1001
#define IDC_COMMANDHINT 666
#define XBX_CLR_RED ( RGB( 255,0,0 ) )
#define XBX_CLR_GREEN ( RGB( 0,255,0 ) )
#define XBX_CLR_WHITE ( RGB( 255,255,255 ) )
#define XBX_CLR_BLACK ( RGB( 0,0,0 ) )
#define XBX_CLR_BLUE ( RGB( 0,0,255 ) )
#define XBX_CLR_YELLOW ( RGB( 255,255,0 ) )
#define XBX_CLR_LTGREY ( RGB( 180,180,180 ) )
#define XBX_CLR_DEFAULT XBX_CLR_BLACK
// The command prefix that is prepended to all communication between the Xbox
// app and the debug console app
#define VXCONSOLE_PRINT_PREFIX "XPRT"
#define VXCONSOLE_COMMAND_PREFIX "XCMD"
#define VXCONSOLE_COMMAND_ACK "XACK"
#define VXCONSOLE_COLOR_PREFIX "XCLR"
#define ICON_APPLICATION 0
#define ICON_DISCONNECTED 1
#define ICON_CONNECTED_XBOX 2
#define ICON_CONNECTED_APP0 3
#define ICON_CONNECTED_APP1 4
#define MAX_ICONS 5
typedef BOOL ( *cmdHandler_t )( int argc, char* argv[] );
#define IDM_BINDINGS 50000
#define IDM_BINDINGS_EDIT ( IDM_BINDINGS+1 )
#define IDM_BINDINGS_BIND1 ( IDM_BINDINGS+2 )
#define IDM_BINDINGS_BIND2 ( IDM_BINDINGS+3 )
#define IDM_BINDINGS_BIND3 ( IDM_BINDINGS+4 )
#define IDM_BINDINGS_BIND4 ( IDM_BINDINGS+5 )
#define IDM_BINDINGS_BIND5 ( IDM_BINDINGS+6 )
#define IDM_BINDINGS_BIND6 ( IDM_BINDINGS+7 )
#define IDM_BINDINGS_BIND7 ( IDM_BINDINGS+8 )
#define IDM_BINDINGS_BIND8 ( IDM_BINDINGS+9 )
#define IDM_BINDINGS_BIND9 ( IDM_BINDINGS+10 )
#define IDM_BINDINGS_BIND10 ( IDM_BINDINGS+11 )
#define IDM_BINDINGS_BIND11 ( IDM_BINDINGS+12 )
#define IDM_BINDINGS_BIND12 ( IDM_BINDINGS+13 )
#define MAX_BINDINGS ( VK_F12-VK_F1+1 )
// file serving
#define FSERVE_LOCALONLY 0
#define FSERVE_REMOTEONLY 1
#define FSERVE_LOCALFIRST 2
// file sync
#define FSYNC_OFF 0x00000000
#define FSYNC_ALWAYS 0x00000001
#define FSYNC_IFNEWER 0x00000002
#define FSYNC_TYPEMASK 0x0000000F
#define FSYNC_ANDEXISTSONTARGET 0x80000000
// track function invocations
typedef enum
{
FL_INVALID,
FL_STAT,
FL_FOPEN,
FL_FSEEK,
FL_FTELL,
FL_FREAD,
FL_FWRITE,
FL_FCLOSE,
FL_FEOF,
FL_FERROR,
FL_FFLUSH,
FL_FGETS,
FL_MAXFUNCTIONCOUNTS,
} fileLogFunctions_e;
typedef enum
{
VPROF_OFF = 0,
VPROF_CPU,
VPROF_TEXTURE,
VPROF_TEXTUREFRAME,
} vprofState_e;
// funtion command types
#define FN_CONSOLE 0x00 // command runs at console
#define FN_XBOX 0x01 // command requires xbox
#define FN_APP 0x02 // command requires application
// shorthand
#define FA_NORMAL FILE_ATTRIBUTE_NORMAL
#define FA_DIRECTORY FILE_ATTRIBUTE_DIRECTORY
#define FA_READONLY FILE_ATTRIBUTE_READONLY
typedef struct
{
const CHAR* strCommand;
int flags;
cmdHandler_t pfnHandler;
const CHAR* strHelp;
} localCommand_t;
typedef struct
{
char* strCommand;
char* strHelp;
} remoteCommand_t;
typedef struct
{
CRITICAL_SECTION CriticalSection;
int numMessages;
bool bInit;
COLORREF aColors[MAX_QUEUEDSTRINGS];
CHAR *pMessages[MAX_QUEUEDSTRINGS];
} printQueue_t;
class CProgress
{
public:
CProgress();
~CProgress();
void Open( const char* title, bool canCancel, bool bHasMeter );
void SetStatus( const char *line1, const char *line2, const char *line3 );
void SetMeter( int currentPos, int range );
bool IsCancel();
HWND m_hWnd;
HWND m_hWndStatus1;
HWND m_hWndStatus2;
HWND m_hWndStatus3;
HWND m_hWndPercent;
HWND m_hWndMeter;
HWND m_hWndCancel;
bool m_bCancelPressed;
int m_range;
private:
void Update();
};
typedef struct fileNode_s
{
char *filename;
FILETIME creationTime;
FILETIME changeTime;
DWORD sizeHigh;
DWORD sizeLow;
DWORD attributes;
int level;
struct fileNode_s *nextPtr;
bool needsUpdate;
}
fileNode_t;
//-----------------------------------------------------------------------------
// FILEIO.CPP
//-----------------------------------------------------------------------------
extern void RemoteToLocalFilename( const char* inFilename, char* outFilename, int outSize );
extern void RemoteToTargetFilename( const char* inFilename, char* outFilename, int outSize );
extern void FreeTargetFileList( fileNode_t* pFileList );
extern bool GetTargetFileList_r( char* targetPath, bool recurse, int attributes, int level, fileNode_t** pFileList );
extern char *SystemTimeToString( SYSTEMTIME *systemTime, char *buffer, int bufferSize );
extern bool CreateTargetPath( const char *pTargetFilename );
//-----------------------------------------------------------------------------
// BINDINGS.CPP
//-----------------------------------------------------------------------------
extern bool Bindings_TranslateKey( int vkKeyCode );
extern bool Bindings_MenuSelection( int wID );
extern void Bindings_LoadConfig();
extern void Bindings_SaveConfig();
extern void Bindings_Open();
extern bool Bindings_Init();
//-----------------------------------------------------------------------------
// COMMON.CPP
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// VXCONSOLE.CPP
//-----------------------------------------------------------------------------
extern void SetConnectionIcon( int icon );
extern void PrintToQueue( COLORREF color, const CHAR* strFormat, ... );
extern void ProcessPrintQueue();
extern void DmAPI_DisplayError( const char* strApiName, HRESULT hr );
extern int ConsoleWindowPrintf( COLORREF rgb, LPCTSTR lpFmt, ... );
extern int CmdToArgv( char* str, char* argv[], int maxargs );
extern char* GetToken( char** tokenStreamPtr );
extern void DebugCommand( const char* strFormat, ... );
extern bool ProcessCommand( const char* strCmd );
extern HRESULT DmAPI_SendCommand( const char* strCommand, bool wait );
extern void NotImplementedYet();
extern void SetMainWindowTitle();
extern HWND g_hDlgMain;
extern HWND g_hwndOutputWindow;
extern UINT_PTR g_autoConnectTimer;
extern BOOL g_autoConnect;
extern CHAR g_xboxName[];
extern DWORD g_xboxAddress;
extern CHAR g_remotePath[];
extern CHAR g_localPath[];
extern CHAR g_targetPath[];
extern CHAR g_installPath[];
extern CHAR g_xboxTargetName[];
extern BOOL g_connectedToApp;
extern BOOL g_connectedToXBox;
extern PDMN_SESSION g_pdmnSession;
extern PDM_CONNECTION g_pdmConnection;
extern BOOL g_debugCommands;
extern BOOL g_captureDebugSpew;
extern HINSTANCE g_hInstance;
extern HICON g_hIcons[];
extern BOOL g_reboot;
extern int g_rebootArgc;
extern char* g_rebootArgv[];
extern int g_connectCount;
extern int g_currentIcon;
extern BOOL g_clsOnConnect;
extern DWORD g_connectedTime;
extern HBRUSH g_hBackgroundBrush;
extern COLORREF g_backgroundColor;
extern HFONT g_hFixedFont;
extern HFONT g_hProportionalFont;
extern HANDLE g_hCommandReadyEvent;
extern BOOL g_loadSymbolsOnConnect;
extern HACCEL g_hAccel;
extern BOOL g_alwaysAutoConnect;
extern BOOL g_startMinimized;
extern int g_connectFailure;
extern BOOL g_captureDebugSpew_StartupState;
extern bool g_bSuppressBlink;
extern BOOL g_bPlayTestMode;
//-----------------------------------------------------------------------------
// LOCAL_CMDS.CPP
//-----------------------------------------------------------------------------
extern BOOL lc_bug( int argc, char* argv[] );
extern BOOL lc_dir( int argc, char* argv[] );
extern BOOL lc_del( int argc, char* argv[] );
extern BOOL lc_memory( int argc, char* argv[] );
extern BOOL lc_screenshot( int argc, char* argv[] );
extern BOOL lc_help( int argc, char* argv[] );
extern BOOL lc_cls( int argc, char* argv[] );
extern BOOL lc_connect( int argc, char* argv[] );
extern BOOL lc_autoConnect( int argc, char* argv[] );
extern BOOL lc_disconnect( int argc, char* argv[] );
extern BOOL lc_quit( int argc, char* argv[] );
extern BOOL lc_crashdump( int argc, char* argv[] );
extern BOOL lc_listen( int argc, char* argv[] );
extern BOOL lc_run( int argc, char* argv[] );
extern BOOL lc_reset( int argc, char* argv[] );
extern BOOL lc_modules( int argc, char* argv[] );
extern BOOL lc_sections( int argc, char* argv[] );
extern BOOL lc_threads( int argc, char* argv[] );
extern BOOL lc_ClearConfigs( int argc, char* argv[] );
extern void AutoConnectTimerProc( HWND hwnd, UINT_PTR idEvent );
extern int MatchLocalCommands( char* cmdStr, const char* cmdList[], int maxCmds );
extern void DoDisconnect( BOOL bKeepConnection, int waitTime = 15 );
extern localCommand_t g_localCommands[];
extern const int g_numLocalCommands;
//-----------------------------------------------------------------------------
// REMOTE_CMDS.CPP
//-----------------------------------------------------------------------------
extern int rc_AddCommands( char* commandPtr );
extern void Remote_DeleteCommands();
extern DWORD __stdcall Remote_NotifyDebugString( ULONG dwNotification, DWORD dwParam );
extern DWORD __stdcall Remote_NotifyPrintFunc( const CHAR* strNotification );
extern DWORD __stdcall Remote_NotifyCommandFunc( const CHAR* strNotification );
extern int MatchRemoteCommands( char* cmdStr, const char* cmdList[], int maxCmds );
extern remoteCommand_t* g_remoteCommands[];
extern int g_numRemoteCommands;
//-----------------------------------------------------------------------------
// BUG.CPP
//-----------------------------------------------------------------------------
extern bool BugDlg_Init( void );
extern void BugDlg_Open( void );
extern void BugReporter_FreeInterfaces();
extern int rc_MapInfo( char* commandPtr );
//-----------------------------------------------------------------------------
// CONFIG.CPP
//-----------------------------------------------------------------------------
extern void ConfigDlg_Open( void );
extern void ConfigDlg_LoadConfig();
//-----------------------------------------------------------------------------
// FILELOG.CPP
//-----------------------------------------------------------------------------
extern void FileLog_Open();
extern bool FileLog_Init();
extern void FileLog_Clear();
extern unsigned int FileLog_AddItem( const char* filename, unsigned int fp );
extern void FileLog_UpdateItem( unsigned int log, unsigned int fp, fileLogFunctions_e functionId, int value );
extern void FileLog_SaveConfig();
extern void FileLog_LoadConfig();
extern bool g_fileLogEnable;
//-----------------------------------------------------------------------------
// CPU_PROFILE.CPP
//-----------------------------------------------------------------------------
extern void CpuProfileSamples_Open();
extern void CpuProfileHistory_Open();
extern void CpuProfile_SetTitle();
extern bool CpuProfile_Init();
extern void CpuProfile_Clear();
extern int rc_SetCpuProfile( char* commandPtr );
extern int rc_SetCpuProfileData( char* commandPtr );
//-----------------------------------------------------------------------------
// TEX_PROFILE.CPP
//-----------------------------------------------------------------------------
extern void TexProfile_SetTitle();
extern void TexProfileSamples_Open();
extern void TexProfileHistory_Open();
extern bool TexProfile_Init();
extern int rc_SetTexProfile( char* commandPtr );
extern int rc_SetTexProfileData( char* commandPtr );
//-----------------------------------------------------------------------------
// MEM_PROFILE.CPP
//-----------------------------------------------------------------------------
extern void MemProfile_Open();
extern void MemProfile_SetTitle();
extern bool MemProfile_Init();
extern void MemProfile_Clear();
extern int rc_FreeMemory( char* commandPtr );
//-----------------------------------------------------------------------------
// MEMLOG.CPP
//-----------------------------------------------------------------------------
extern void MemoryLog_Open();
extern bool MemoryLog_Init();
extern void MemoryLog_Clear();
extern void MemoryLog_SaveConfig();
extern void MemoryLog_LoadConfig();
extern void MemoryLog_TreeView( bool enable );
extern void MemoryLog_RefreshItems();
extern int rc_MemoryLog( char* commandPtr );
extern bool g_memoryLog_enable;
//-----------------------------------------------------------------------------
// SYNC_FILES.CPP
//-----------------------------------------------------------------------------
extern int FileSyncEx( const char* localFilename, const char* remoteFilename, int fileSyncMode, bool bVerbose, bool bNoWrite );
extern bool SyncFilesDlg_Init( void );
extern void SyncFilesDlg_Open( void );
extern void InstallDlg_Open( void );
//-----------------------------------------------------------------------------
// FILEIO.CPP
//-----------------------------------------------------------------------------
extern int CompareFileTimes_NTFStoFATX( FILETIME* ntfsFileTime, char *ntfsTimeString, int ntfsStringSize, FILETIME* fatxFileTime, char *fatxTimeString, int fatxStringSize );
extern bool LoadTargetFile( const char *pTargetPath, int *pFileSize, void **pData );
//-----------------------------------------------------------------------------
// PROGRESS.CPP
//-----------------------------------------------------------------------------
extern bool Progress_Init();
//-----------------------------------------------------------------------------
// SHOW_TEXTURES.CPP
//-----------------------------------------------------------------------------
extern void ShowTextures_Open();
extern bool ShowTextures_Init();
extern int rc_TextureList( char* commandPtr );
//-----------------------------------------------------------------------------
// TIMESTAMP_LOG.CPP
//-----------------------------------------------------------------------------
extern void TimeStampLog_Open();
extern bool TimeStampLog_Init();
extern void TimeStampLog_Clear();
extern int rc_TimeStampLog( char* commandPtr );
//-----------------------------------------------------------------------------
// COMMON.CPP
//-----------------------------------------------------------------------------
extern vprofState_e VProf_GetState();
extern void VProf_Enable( vprofState_e state );
//-----------------------------------------------------------------------------
// SHOW_MATERIALS.CPP
//-----------------------------------------------------------------------------
extern void ShowMaterials_Open();
extern bool ShowMaterials_Init();
extern int rc_MaterialList( char* commandPtr );
//-----------------------------------------------------------------------------
// SHOW_SOUNDS.CPP
//-----------------------------------------------------------------------------
extern void ShowSounds_Open();
extern bool ShowSounds_Init();
extern int rc_SoundList( char* commandPtr );
//-----------------------------------------------------------------------------
// SHOW_MEMDUMP.CPP
//-----------------------------------------------------------------------------
extern void ShowMemDump_Open();
extern bool ShowMemDump_Init();
extern int rc_MemDump( char* commandPtr );
//-----------------------------------------------------------------------------
// EXCLUDE_PATHS.CPP
//-----------------------------------------------------------------------------
extern bool ExcludePathsDlg_Init( void );
extern void ExcludePathsDlg_Open( void );
//-----------------------------------------------------------------------------
// ASSERT_DIALOG.CPP
//-----------------------------------------------------------------------------
extern bool g_AssertDialogActive;
int rc_Assert( char *commandPtr );