summaryrefslogtreecommitdiff
path: root/common/xbox
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /common/xbox
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'common/xbox')
-rw-r--r--common/xbox/xbox_console.h118
-rw-r--r--common/xbox/xbox_core.h183
-rw-r--r--common/xbox/xbox_launch.h295
-rw-r--r--common/xbox/xbox_vxconsole.h91
-rw-r--r--common/xbox/xbox_win32stubs.h1593
-rw-r--r--common/xbox/xboxstubs.h237
6 files changed, 2517 insertions, 0 deletions
diff --git a/common/xbox/xbox_console.h b/common/xbox/xbox_console.h
new file mode 100644
index 0000000..ca679fd
--- /dev/null
+++ b/common/xbox/xbox_console.h
@@ -0,0 +1,118 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Xbox console
+//
+//=====================================================================================//
+
+#pragma once
+
+#include "tier0/platform.h"
+
+#ifndef STATIC_TIER0
+
+#ifdef TIER0_DLL_EXPORT
+ #define XBXCONSOLE_INTERFACE DLL_EXPORT
+ #define XBXCONSOLE_OVERLOAD DLL_GLOBAL_EXPORT
+#else
+ #define XBXCONSOLE_INTERFACE DLL_IMPORT
+ #define XBXCONSOLE_OVERLOAD DLL_GLOBAL_IMPORT
+#endif
+
+#else // BUILD_AS_DLL
+
+#define XBXCONSOLE_INTERFACE extern
+#define XBXCONSOLE_OVERLOAD
+
+#endif // BUILD_AS_DLL
+
+// all redirecting funneled here, stop redirecting in this module only
+#undef OutputDebugString
+
+#define XBX_MAX_PROFILE_COUNTERS 64
+
+#if !defined( _X360 )
+#define xMaterialList_t void
+#define xTextureList_t void
+#define xSoundList_t void
+#define xMapInfo_t void
+#endif
+
+class IXboxConsole
+{
+public:
+ virtual void SendRemoteCommand( const char* dbgCommand, bool bAsync ) = 0;
+ virtual void DebugString( unsigned int color, const char* format, ... ) = 0;
+ virtual bool IsConsoleConnected() = 0;
+ virtual void InitConsoleMonitor( bool bWaitForConnect = false ) = 0;
+ virtual void DisconnectConsoleMonitor() = 0;
+ virtual void FlushDebugOutput() = 0;
+ virtual bool GetXboxName(char *, unsigned *) = 0;
+ virtual void CrashDump( bool ) = 0;
+ virtual void DumpDllInfo( const char *pBasePath ) = 0;
+ virtual void OutputDebugString( const char * ) = 0;
+ virtual bool IsDebuggerPresent() = 0;
+
+ virtual int SetProfileAttributes( const char *pProfileName, int numCounters, const char *names[], unsigned int colors[] ) = 0;
+ virtual void SetProfileData( const char *pProfileName, int numCounters, unsigned int *counters ) = 0;
+ virtual int MemDump( const char *pDumpFileName ) = 0;
+ virtual int TimeStampLog( float time, const char *pString ) = 0;
+ virtual int MaterialList( int nMaterials, const xMaterialList_t* pXMaterialList ) = 0;
+ virtual int TextureList( int nTextures, const xTextureList_t* pXTextureList ) = 0;
+ virtual int SoundList( int nSounds, const xSoundList_t* pXSoundList ) = 0;
+ virtual int MapInfo( const xMapInfo_t *pXMapInfo ) = 0;
+ virtual int AddCommands( int numCommands, const char* commands[], const char* help[] ) = 0;
+};
+
+class CXboxConsole : public IXboxConsole
+{
+public:
+ void SendRemoteCommand( const char* dbgCommand, bool bAsync );
+ void DebugString( unsigned int color, const char* format, ... );
+ bool IsConsoleConnected();
+ void InitConsoleMonitor( bool bWaitForConnect = false );
+ void DisconnectConsoleMonitor();
+ void FlushDebugOutput();
+ bool GetXboxName(char *, unsigned *);
+ void CrashDump( bool );
+ int DumpModuleSize( const char *pName );
+ void DumpDllInfo( const char *pBasePath );
+ void OutputDebugString( const char * );
+ bool IsDebuggerPresent();
+
+ int SetProfileAttributes( const char *pProfileName, int numCounters, const char *names[], unsigned int colors[] );
+ void SetProfileData( const char *pProfileName, int numCounters, unsigned int *counters );
+ int MemDump( const char *pDumpFileName );
+ int TimeStampLog( float time, const char *pString );
+ int MaterialList( int nMaterials, const xMaterialList_t* pXMaterialList );
+ int TextureList( int nTextures, const xTextureList_t* pXTextureList );
+ int SoundList( int nSounds, const xSoundList_t* pXSoundList );
+ int MapInfo( const xMapInfo_t *pXMapInfo );
+ int AddCommands( int numCommands, const char* commands[], const char* help[] );
+};
+
+XBXCONSOLE_INTERFACE IXboxConsole *g_pXboxConsole;
+XBXCONSOLE_INTERFACE void XboxConsoleInit();
+
+#define XBX_SendRemoteCommand if ( !g_pXboxConsole ) ; else g_pXboxConsole->SendRemoteCommand
+#define XBX_DebugString if ( !g_pXboxConsole ) ; else g_pXboxConsole->DebugString
+#define XBX_IsConsoleConnected ( !g_pXboxConsole ) ? false : g_pXboxConsole->IsConsoleConnected
+#define XBX_InitConsoleMonitor if ( !g_pXboxConsole ) ; else g_pXboxConsole->InitConsoleMonitor
+#define XBX_DisconnectConsoleMonitor if ( !g_pXboxConsole ) ; else g_pXboxConsole->DisconnectConsoleMonitor
+#define XBX_FlushDebugOutput if ( !g_pXboxConsole ) ; else g_pXboxConsole->FlushDebugOutput
+#define XBX_GetXboxName ( !g_pXboxConsole ) ? false : g_pXboxConsole->GetXboxName
+#define XBX_CrashDump if ( !g_pXboxConsole ) ; else g_pXboxConsole->CrashDump
+#define XBX_DumpDllInfo if ( !g_pXboxConsole ) ; else g_pXboxConsole->DumpDllInfo
+#define XBX_OutputDebugString if ( !g_pXboxConsole ) ; else g_pXboxConsole->OutputDebugString
+#define XBX_IsDebuggerPresent ( !g_pXboxConsole ) ? false : g_pXboxConsole->IsDebuggerPresent
+
+#define XBX_rSetProfileAttributes ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->SetProfileAttributes
+#define XBX_rSetProfileData if ( !g_pXboxConsole ) ; else g_pXboxConsole->SetProfileData
+#define XBX_rMemDump ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->MemDump
+#define XBX_rTimeStampLog ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->TimeStampLog
+#define XBX_rMaterialList ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->MaterialList
+#define XBX_rTextureList ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->TextureList
+#define XBX_rSoundList ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->SoundList
+#define XBX_rMapInfo ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->MapInfo
+#define XBX_rAddCommands ( !g_pXboxConsole ) ? 0 : g_pXboxConsole->AddCommands
+
+
diff --git a/common/xbox/xbox_core.h b/common/xbox/xbox_core.h
new file mode 100644
index 0000000..b109a19
--- /dev/null
+++ b/common/xbox/xbox_core.h
@@ -0,0 +1,183 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: XBox Core definitions
+//
+//=============================================================================
+#pragma once
+
+#define XBOX_DONTCARE 0 // for functions with don't care params
+
+#define XBX_MAX_DPORTS 4
+#define XBX_MAX_BUTTONSAMPLE 32768
+#define XBX_MAX_ANALOGSAMPLE 255
+#define XBX_MAX_MESSAGE 2048
+#define XBX_MAX_PATH MAX_PATH
+#define XBX_MAX_RCMDLENGTH 256
+#define XBX_MAX_RCMDNAMELEN 32
+#define XBX_HDD_CLUSTERSIZE 16384
+
+// could be dvd or hdd, actual device depends on source of xex launch
+#define XBX_DVD_DRIVE "D:\\"
+#define XBX_BOOT_DRIVE "D:\\"
+
+#define XBX_IOTHREAD_STACKSIZE 32768
+#define XBX_IOTHREAD_PRIORITY THREAD_PRIORITY_HIGHEST
+
+// scale by screen dimension to get an inset
+#define XBOX_MINBORDERSAFE 0.05f
+#define XBOX_MAXBORDERSAFE 0.075f
+
+#define XBX_CALCSIG_TYPE XCALCSIG_FLAG_NON_ROAMABLE
+#define XBX_INVALID_STORAGE_ID ((DWORD)-1)
+#define XBX_STORAGE_DECLINED ((DWORD)-2)
+#define XBX_INVALID_USER_ID ((DWORD)-1)
+
+#define XBX_USER_SETTINGS_CONTAINER_DRIVE "CFG"
+
+// Path to our running executable
+#define XBX_XEX_BASE_FILENAME "default.xex"
+#define XBX_XEX_PATH XBX_BOOT_DRIVE XBX_XEX_BASE_FILENAME
+
+#define XBX_CLR_DEFAULT 0xFF000000
+#define XBX_CLR_WARNING 0x0000FFFF
+#define XBX_CLR_ERROR 0x000000FF
+
+// disk space requirements
+#define XBX_SAVEGAME_BYTES ( 1024 * 1024 * 2 )
+#define XBX_CONFIGFILE_BYTES ( 1024 * 100 )
+#define XBX_USER_STATS_BYTES ( 1024 * 28 )
+#define XBX_USER_SETTINGS_BYTES ( XBX_CONFIGFILE_BYTES + XBX_USER_STATS_BYTES )
+
+#define XBX_PERSISTENT_BYTES_NEEDED ( XBX_SAVEGAME_BYTES * 10 ) // 8 save games, 1 autosave, 1 autosavedangerous
+
+#define XMAKECOLOR( r, g, b ) ((unsigned int)(((unsigned char)(r)|((unsigned int)((unsigned char)(g))<<8))|(((unsigned int)(unsigned char)(b))<<16)))
+
+#define MAKE_NON_SRGB_FMT(x) ((D3DFORMAT)( ((unsigned int)(x)) & ~(D3DFORMAT_SIGNX_MASK | D3DFORMAT_SIGNY_MASK | D3DFORMAT_SIGNZ_MASK)))
+#define IS_D3DFORMAT_SRGB( x ) ( MAKESRGBFMT(x) == (x) )
+
+typedef enum
+{
+ XEV_NULL,
+ XEV_REMOTECMD,
+ XEV_QUIT,
+ XEV_LISTENER_NOTIFICATION,
+} xevent_e;
+
+typedef struct xevent_s
+{
+ xevent_e event;
+ int arg1;
+ int arg2;
+ int arg3;
+} xevent_t;
+
+typedef enum
+{
+ XK_NULL,
+ XK_BUTTON_UP,
+ XK_BUTTON_DOWN,
+ XK_BUTTON_LEFT,
+ XK_BUTTON_RIGHT,
+ XK_BUTTON_START,
+ XK_BUTTON_BACK,
+ XK_BUTTON_STICK1,
+ XK_BUTTON_STICK2,
+ XK_BUTTON_A,
+ XK_BUTTON_B,
+ XK_BUTTON_X,
+ XK_BUTTON_Y,
+ XK_BUTTON_LEFT_SHOULDER,
+ XK_BUTTON_RIGHT_SHOULDER,
+ XK_BUTTON_LTRIGGER,
+ XK_BUTTON_RTRIGGER,
+ XK_STICK1_UP,
+ XK_STICK1_DOWN,
+ XK_STICK1_LEFT,
+ XK_STICK1_RIGHT,
+ XK_STICK2_UP,
+ XK_STICK2_DOWN,
+ XK_STICK2_LEFT,
+ XK_STICK2_RIGHT,
+ XK_MAX_KEYS,
+} xKey_t;
+
+typedef struct
+{
+ const char *pName;
+ const char *pGroupName;
+ const char *pFormatName;
+ int size;
+ int width;
+ int height;
+ int depth;
+ int numLevels;
+ int binds;
+ int refCount;
+ int sRGB;
+ int edram;
+ int procedural;
+ int fallback;
+ int final;
+ int failed;
+} xTextureList_t;
+
+typedef struct
+{
+ const char *pName;
+ const char *pShaderName;
+ int refCount;
+} xMaterialList_t;
+
+typedef struct
+{
+ char name[MAX_PATH];
+ char formatName[32];
+ int rate;
+ int bits;
+ int channels;
+ int looped;
+ int dataSize;
+ int numSamples;
+ int streamed;
+} xSoundList_t;
+
+typedef struct
+{
+ float position[3];
+ float angle[3];
+ char mapPath[256];
+ char savePath[256];
+ int build;
+ int skill;
+} xMapInfo_t;
+
+/******************************************************************************
+ XBOX_SYSTEM.CPP
+******************************************************************************/
+#if defined( PLATFORM_H )
+
+// redirect debugging output through xbox debug channel
+#define OutputDebugStringA XBX_OutputDebugStringA
+
+// Messages
+PLATFORM_INTERFACE void XBX_Error( const char* format, ... );
+PLATFORM_INTERFACE void XBX_OutputDebugStringA( LPCSTR lpOutputString );
+
+// Event handling
+PLATFORM_INTERFACE bool XBX_NotifyCreateListener( ULONG64 categories );
+PLATFORM_INTERFACE void XBX_QueueEvent( xevent_e event, int arg1, int arg2, int arg3 );
+PLATFORM_INTERFACE void XBX_ProcessEvents( void );
+
+// Accessors
+PLATFORM_INTERFACE const char* XBX_GetLanguageString( void );
+PLATFORM_INTERFACE bool XBX_IsLocalized( void );
+PLATFORM_INTERFACE DWORD XBX_GetStorageDeviceId( void );
+PLATFORM_INTERFACE void XBX_SetStorageDeviceId( DWORD id );
+PLATFORM_INTERFACE DWORD XBX_GetPrimaryUserId( void );
+PLATFORM_INTERFACE void XBX_SetPrimaryUserId( DWORD id );
+PLATFORM_INTERFACE XNKID XBX_GetInviteSessionId( void );
+PLATFORM_INTERFACE void XBX_SetInviteSessionId( XNKID nSessionId );
+PLATFORM_INTERFACE DWORD XBX_GetInvitedUserId( void );
+PLATFORM_INTERFACE void XBX_SetInvitedUserId( DWORD nUserId );
+
+#endif \ No newline at end of file
diff --git a/common/xbox/xbox_launch.h b/common/xbox/xbox_launch.h
new file mode 100644
index 0000000..a0a9e66
--- /dev/null
+++ b/common/xbox/xbox_launch.h
@@ -0,0 +1,295 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Xbox Launch Routines.
+//
+//=====================================================================================//
+
+#ifndef _XBOX_LAUNCH_H_
+#define _XBOX_LAUNCH_H_
+
+#pragma once
+
+#ifndef _CERT
+#pragma comment( lib, "xbdm.lib" )
+#endif
+
+// id and version are used to tag the data blob, currently only need a singe hardcoded id
+// when the version and id don't match, the data blob is not ours
+#define VALVE_LAUNCH_ID (('V'<<24)|('A'<<16)|('L'<<8)|('V'<<0))
+#define VALVE_LAUNCH_VERSION 1
+
+// launch flags
+#define LF_ISDEBUGGING 0x80000000 // set if session was active prior to launch
+#define LF_INTERNALLAUNCH 0x00000001 // set if launch was internal (as opposed to dashboard)
+#define LF_EXITFROMINSTALLER 0x00000002 // set if exit was from an installer
+#define LF_EXITFROMGAME 0x00000004 // set if exit was from a game
+#define LF_EXITFROMCHOOSER 0x00000008 // set if exit was from the chooser
+#define LF_GAMERESTART 0x00000010 // set if game wants to restart self (skips appchooser)
+#define LF_INVITERESTART 0x00000020 // set if game was invited from another app (launches TF and fires off session connect)
+
+#pragma pack(1)
+struct launchHeader_t
+{
+ unsigned int id;
+ unsigned int version;
+ unsigned int flags;
+
+ int nStorageID;
+ int nUserID;
+ int bForceEnglish;
+ XNKID nInviteSessionID;
+
+ // for caller defined data, occurs after this header
+ // limited to slightly less than MAX_LAUNCH_DATA_SIZE
+ unsigned int nDataSize;
+};
+#pragma pack()
+
+// per docs, no larger than MAX_LAUNCH_DATA_SIZE
+union xboxLaunchData_t
+{
+ launchHeader_t header;
+ char data[MAX_LAUNCH_DATA_SIZE];
+};
+
+//--------------------------------------------------------------------------------------
+// Simple class to wrap the peristsent launch payload.
+//
+// Can be used by an application that does not use tier0 (i.e. the launcher).
+// Primarily designed to be anchored in tier0, so multiple systems can easily query and
+// set the persistent payload.
+//--------------------------------------------------------------------------------------
+class CXboxLaunch
+{
+public:
+ CXboxLaunch()
+ {
+ ResetLaunchData();
+ }
+
+ void ResetLaunchData()
+ {
+ // invalid until established
+ // nonzero identifies a valid payload
+ m_LaunchDataSize = 0;
+
+ m_Launch.header.id = 0;
+ m_Launch.header.version = 0;
+ m_Launch.header.flags = 0;
+
+ m_Launch.header.nStorageID = XBX_INVALID_STORAGE_ID;
+ m_Launch.header.nUserID = XBX_INVALID_USER_ID;
+ m_Launch.header.bForceEnglish = false;
+
+ memset( &m_Launch.header.nInviteSessionID, 0, sizeof( m_Launch.header.nInviteSessionID ) );
+
+ m_Launch.header.nDataSize = 0;
+ }
+
+ // Returns how much space can be used by caller
+ int MaxPayloadSize()
+ {
+ return sizeof( xboxLaunchData_t ) - sizeof( launchHeader_t );
+ }
+
+ bool SetLaunchData( void *pData, int dataSize, int flags = 0 )
+ {
+ if ( pData && dataSize && dataSize > MaxPayloadSize() )
+ {
+ // not enough room
+ return false;
+ }
+
+ if ( pData && dataSize && dataSize <= MaxPayloadSize() )
+ {
+ memcpy( m_Launch.data + sizeof( launchHeader_t ), pData, dataSize );
+ m_Launch.header.nDataSize = dataSize;
+ }
+ else
+ {
+ m_Launch.header.nDataSize = 0;
+ }
+
+ flags |= LF_INTERNALLAUNCH;
+#if !defined( _CERT )
+ if ( DmIsDebuggerPresent() )
+ {
+ flags |= LF_ISDEBUGGING;
+ }
+#endif
+ m_Launch.header.id = VALVE_LAUNCH_ID;
+ m_Launch.header.version = VALVE_LAUNCH_VERSION;
+ m_Launch.header.flags = flags;
+
+ XSetLaunchData( &m_Launch, MAX_LAUNCH_DATA_SIZE );
+
+ // assume successful, mark as valid
+ m_LaunchDataSize = MAX_LAUNCH_DATA_SIZE;
+
+ return true;
+ }
+
+ //--------------------------------------------------------------------------------------
+ // Returns TRUE if the launch data blob is available. FALSE otherwise.
+ // Caller is expected to validate and interpret contents based on ID.
+ //--------------------------------------------------------------------------------------
+ bool GetLaunchData( unsigned int *pID, void **pData, int *pDataSize )
+ {
+ if ( !m_LaunchDataSize )
+ {
+ // purposely not doing this in the constructor (unstable as used by tier0), but on first fetch
+ bool bValid = false;
+ DWORD dwLaunchDataSize;
+ DWORD dwStatus = XGetLaunchDataSize( &dwLaunchDataSize );
+ if ( dwStatus == ERROR_SUCCESS && dwLaunchDataSize <= MAX_LAUNCH_DATA_SIZE )
+ {
+ dwStatus = XGetLaunchData( (void*)&m_Launch, dwLaunchDataSize );
+ if ( dwStatus == ERROR_SUCCESS )
+ {
+ bValid = true;
+ m_LaunchDataSize = dwLaunchDataSize;
+ }
+ }
+
+ if ( !bValid )
+ {
+ ResetLaunchData();
+ }
+ }
+
+ // a valid launch payload could be ours (re-launch) or from an alternate booter (demo launcher)
+ if ( m_LaunchDataSize == MAX_LAUNCH_DATA_SIZE && m_Launch.header.id == VALVE_LAUNCH_ID && m_Launch.header.version == VALVE_LAUNCH_VERSION )
+ {
+ // internal recognized format
+ if ( pID )
+ {
+ *pID = m_Launch.header.id;
+ }
+ if ( pData )
+ {
+ *pData = m_Launch.data + sizeof( launchHeader_t );
+ }
+ if ( pDataSize )
+ {
+ *pDataSize = m_Launch.header.nDataSize;
+ }
+ }
+ else if ( m_LaunchDataSize )
+ {
+ // not ours, unknown format, caller interprets
+ if ( pID )
+ {
+ // assume payload was packaged with an initial ID
+ *pID = *(unsigned int *)m_Launch.data;
+ }
+ if ( pData )
+ {
+ *pData = m_Launch.data;
+ }
+ if ( pDataSize )
+ {
+ *pDataSize = m_LaunchDataSize;
+ }
+ }
+
+ // valid when data is available (not necessarily valve's tag)
+ return m_LaunchDataSize != 0;
+ }
+
+ //--------------------------------------------------------------------------------------
+ // Returns TRUE if the launch data blob is available. FALSE otherwise.
+ // Data blob could be ours or not.
+ //--------------------------------------------------------------------------------------
+ bool RestoreLaunchData()
+ {
+ return GetLaunchData( NULL, NULL, NULL );
+ }
+
+ //--------------------------------------------------------------------------------------
+ // Restores the data blob. If the data blob is not ours, resets it.
+ //--------------------------------------------------------------------------------------
+ void RestoreOrResetLaunchData()
+ {
+ RestoreLaunchData();
+ if ( m_Launch.header.id != VALVE_LAUNCH_ID || m_Launch.header.version != VALVE_LAUNCH_VERSION )
+ {
+ // not interested in somebody else's data
+ ResetLaunchData();
+ }
+ }
+
+ //--------------------------------------------------------------------------------------
+ // Returns OUR internal launch flags.
+ //--------------------------------------------------------------------------------------
+ int GetLaunchFlags()
+ {
+ // establish the data
+ RestoreOrResetLaunchData();
+ return m_Launch.header.flags;
+ }
+
+ int GetStorageID( void )
+ {
+ RestoreOrResetLaunchData();
+ return m_Launch.header.nStorageID;
+ }
+ void SetStorageID( int storageID )
+ {
+ RestoreOrResetLaunchData();
+ m_Launch.header.nStorageID = storageID;
+ }
+
+ int GetUserID( void )
+ {
+ RestoreOrResetLaunchData();
+ return m_Launch.header.nUserID;
+ }
+ void SetUserID( int userID )
+ {
+ RestoreOrResetLaunchData();
+ m_Launch.header.nUserID = userID;
+ }
+
+ bool GetForceEnglish( void )
+ {
+ RestoreOrResetLaunchData();
+ return m_Launch.header.bForceEnglish ? true : false;
+ }
+ void SetForceEnglish( bool bForceEnglish )
+ {
+ RestoreOrResetLaunchData();
+ m_Launch.header.bForceEnglish = bForceEnglish;
+ }
+
+ void GetInviteSessionID( XNKID *pSessionID )
+ {
+ RestoreOrResetLaunchData();
+ *pSessionID = m_Launch.header.nInviteSessionID;
+ }
+ void SetInviteSessionID( XNKID *pSessionID )
+ {
+ RestoreOrResetLaunchData();
+ m_Launch.header.nInviteSessionID = *pSessionID;
+ }
+
+ void Launch( const char *pNewImageName = NULL )
+ {
+ if ( !pNewImageName )
+ {
+ pNewImageName = "default.xex";
+ }
+
+ XLaunchNewImage( pNewImageName, 0 );
+ }
+
+private:
+ xboxLaunchData_t m_Launch;
+ DWORD m_LaunchDataSize;
+};
+
+#if defined( PLATFORM_H )
+// For applications that use tier0.dll
+PLATFORM_INTERFACE CXboxLaunch *XboxLaunch();
+#endif
+
+#endif
diff --git a/common/xbox/xbox_vxconsole.h b/common/xbox/xbox_vxconsole.h
new file mode 100644
index 0000000..293a2ac
--- /dev/null
+++ b/common/xbox/xbox_vxconsole.h
@@ -0,0 +1,91 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: XBox VXConsole Common. Used for public remote access items.
+//
+//=============================================================================
+#pragma once
+
+// sent during connection, used to explicitly guarantee a binary compatibility
+#define VXCONSOLE_PROTOCOL_VERSION 103
+
+typedef struct
+{
+ char labelString[128];
+ COLORREF color;
+} xrProfile_t;
+
+typedef struct
+{
+ char messageString[256];
+ float time;
+ float deltaTime;
+ int memory;
+ int deltaMemory;
+} xrTimeStamp_t;
+
+typedef struct
+{
+ char nameString[256];
+ char shaderString[256];
+ int refCount;
+} xrMaterial_t;
+
+typedef struct
+{
+ char nameString[256];
+ char groupString[64];
+ char formatString[64];
+ int size;
+ int width;
+ int height;
+ int depth;
+ int numLevels;
+ int binds;
+ int refCount;
+ int sRGB;
+ int edram;
+ int procedural;
+ int fallback;
+ int final;
+ int failed;
+} xrTexture_t;
+
+typedef struct
+{
+ char nameString[256];
+ char formatString[64];
+ int rate;
+ int bits;
+ int channels;
+ int looped;
+ int dataSize;
+ int numSamples;
+ int streamed;
+} xrSound_t;
+
+typedef struct
+{
+ char nameString[128];
+ char helpString[256];
+} xrCommand_t;
+
+typedef struct
+{
+ float position[3];
+ float angle[3];
+ char mapPath[256];
+ char savePath[256];
+ int build;
+ int skill;
+} xrMapInfo_t;
+
+// Types of action taken in response to an rc_Assert() message
+enum AssertAction_t
+{
+ ASSERT_ACTION_BREAK = 0, // Break on this Assert
+ ASSERT_ACTION_IGNORE_THIS, // Ignore this Assert once
+ ASSERT_ACTION_IGNORE_ALWAYS, // Ignore this Assert from now on
+ ASSERT_ACTION_IGNORE_FILE, // Ignore all Asserts from this file from now on
+ ASSERT_ACTION_IGNORE_ALL, // Ignore all Asserts from now on
+ ASSERT_ACTION_OTHER // A more complex response requiring additional data (e.g. "ignore this Assert 5 times")
+};
diff --git a/common/xbox/xbox_win32stubs.h b/common/xbox/xbox_win32stubs.h
new file mode 100644
index 0000000..923f720
--- /dev/null
+++ b/common/xbox/xbox_win32stubs.h
@@ -0,0 +1,1593 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: XBox win32 replacements - Mocks trivial windows flow
+//
+//=============================================================================
+#pragma once
+
+typedef unsigned long REGSAM;
+
+#define DSBCAPS_LOCSOFTWARE 0
+
+#define DSERR_BUFFERLOST 0
+
+#define DSBSTATUS_BUFFERLOST 0x02
+
+#define DSSPEAKER_GEOMETRY(x) (((x)>>16) & 0xFFFF)
+#define DSSPEAKER_CONFIG(x) ((x) & 0xFFFF)
+
+#define DSSPEAKER_HEADPHONE -1
+#define DSSPEAKER_QUAD -2
+#define DSSPEAKER_5POINT1 -3
+#define DSSPEAKER_7POINT1 -4
+
+#define DISP_CHANGE_SUCCESSFUL 0
+
+#define HKEY_CURRENT_USER NULL
+#define HKEY_LOCAL_MACHINE NULL
+#define KEY_QUERY_VALUE 0
+
+#define KEY_READ 0
+#define KEY_WRITE 1
+#define KEY_ALL_ACCESS ((ULONG)-1)
+
+#define SMTO_ABORTIFHUNG 0
+
+#define JOY_RETURNX 0x01
+#define JOY_RETURNY 0x02
+#define JOY_RETURNZ 0x04
+#define JOY_RETURNR 0x08
+#define JOY_RETURNU 0x10
+#define JOY_RETURNV 0x20
+
+#define JOYCAPS_HASPOV 0x01
+#define JOYCAPS_HASU 0x01
+#define JOYCAPS_HASV 0x01
+#define JOYCAPS_HASR 0x01
+#define JOYCAPS_HASZ 0x01
+
+#define MMSYSERR_NODRIVER 1
+#define JOYERR_NOERROR 0
+#define JOY_RETURNCENTERED 0
+#define JOY_RETURNBUTTONS 0
+#define JOY_RETURNPOV 0
+#define JOY_POVCENTERED 0
+#define JOY_POVFORWARD 0
+#define JOY_POVRIGHT 0
+#define JOY_POVBACKWARD 0
+#define JOY_POVLEFT 0
+
+#define CCHDEVICENAME 32
+#define CCHFORMNAME 32
+
+typedef WCHAR BCHAR;
+
+typedef UINT MMRESULT;
+
+#define IDLE_PRIORITY_CLASS 1
+#define HIGH_PRIORITY_CLASS 2
+
+typedef struct _devicemode {
+ BCHAR dmDeviceName[CCHDEVICENAME];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ union u1 {
+ struct s {
+ short dmOrientation;
+ short dmPaperSize;
+ short dmPaperLength;
+ short dmPaperWidth;
+ short dmScale;
+ short dmCopies;
+ short dmDefaultSource;
+ short dmPrintQuality;
+ };
+ POINTL dmPosition;
+ DWORD dmDisplayOrientation;
+ DWORD dmDisplayFixedOutput;
+ };
+ short dmColor;
+ short dmDuplex;
+ short dmYResolution;
+ short dmTTOption;
+ short dmCollate;
+ BYTE dmFormName[CCHFORMNAME];
+ WORD dmLogPixels;
+ DWORD dmBitsPerPel;
+ DWORD dmPelsWidth;
+ DWORD dmPelsHeight;
+ union u2 {
+ DWORD dmDisplayFlags;
+ DWORD dmNup;
+ };
+ DWORD dmDisplayFrequency;
+ DWORD dmICMMethod;
+ DWORD dmICMIntent;
+ DWORD dmMediaType;
+ DWORD dmDitherType;
+ DWORD dmReserved1;
+ DWORD dmReserved2;
+ DWORD dmPanningWidth;
+ DWORD dmPanningHeight;
+} DEVMODE, *LPDEVMODE;
+
+typedef DWORD MCIERROR;
+typedef UINT MCIDEVICEID;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+} MCI_GENERIC_PARMS;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwReturn;
+ DWORD dwItem;
+ DWORD dwTrack;
+} MCI_STATUS_PARMS;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwFrom;
+ DWORD dwTo;
+} MCI_PLAY_PARMS;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ MCIDEVICEID wDeviceID;
+ LPCSTR lpstrDeviceType;
+ LPCSTR lpstrElementName;
+ LPCSTR lpstrAlias;
+} MCI_OPEN_PARMS;
+
+typedef struct {
+ DWORD_PTR dwCallback;
+ DWORD dwTimeFormat;
+ DWORD dwAudio;
+} MCI_SET_PARMS;
+
+#define MCI_MAKE_TMSF(t, m, s, f) ((DWORD)(((BYTE)(t) | ((WORD)(m) << 8)) | ((DWORD)(BYTE)(s) | ((WORD)(f)<<8)) << 16))
+#define MCI_MSF_MINUTE(msf) ((BYTE)(msf))
+#define MCI_MSF_SECOND(msf) ((BYTE)(((WORD)(msf)) >> 8))
+
+#define MCI_OPEN 0
+#define MCI_OPEN_TYPE 0
+#define MCI_OPEN_SHAREABLE 0
+#define MCI_FORMAT_TMSF 0
+#define MCI_SET_TIME_FORMAT 0
+#define MCI_CLOSE 0
+#define MCI_STOP 0
+#define MCI_PAUSE 0
+#define MCI_PLAY 0
+#define MCI_SET 0
+#define MCI_SET_DOOR_OPEN 0
+#define MCI_SET_DOOR_CLOSED 0
+#define MCI_STATUS_READY 0
+#define MCI_STATUS 0
+#define MCI_STATUS_ITEM 0
+#define MCI_STATUS_WAIT 0
+#define MCI_STATUS_NUMBER_OF_TRACKS 0
+#define MCI_CDA_STATUS_TYPE_TRACK 0
+#define MCI_TRACK 0
+#define MCI_WAIT 0
+#define MCI_CDA_TRACK_AUDIO 0
+#define MCI_STATUS_LENGTH 0
+#define MCI_NOTIFY 0
+#define MCI_FROM 0
+#define MCI_TO 0
+#define MCIERR_DRIVER -1
+
+#define DSERR_ALLOCATED 0
+
+typedef struct _STARTUPINFOW {
+ DWORD cb;
+ LPWSTR lpReserved;
+ LPWSTR lpDesktop;
+ LPWSTR lpTitle;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ WORD wShowWindow;
+ WORD cbReserved2;
+ LPBYTE lpReserved2;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+} STARTUPINFOW, *LPSTARTUPINFOW;
+typedef STARTUPINFOW STARTUPINFO;
+typedef LPSTARTUPINFOW LPSTARTUPINFO;
+
+typedef struct _PROCESS_INFORMATION {
+ HANDLE hProcess;
+ HANDLE hThread;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;
+
+typedef DWORD HWAVEOUT, *LPHWAVEOUT;
+
+typedef struct {
+ LPSTR lpData;
+ DWORD dwBufferLength;
+ DWORD dwBytesRecorded;
+ DWORD_PTR dwUser;
+ DWORD dwFlags;
+ DWORD dwLoops;
+ struct wavehdr_tag * lpNext;
+ DWORD_PTR reserved;
+} WAVEHDR, *LPWAVEHDR;
+
+typedef struct {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwUnlockTransferRate;
+ DWORD dwPlayCpuOverhead;
+} DSBCAPS, *LPDSBCAPS;
+
+typedef struct _DSCEFFECTDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidDSCFXClass;
+ GUID guidDSCFXInstance;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} DSCEFFECTDESC, *LPDSCEFFECTDESC;
+
+typedef struct _DSCBUFFERDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+ DWORD dwFXCount;
+ LPDSCEFFECTDESC lpDSCFXDesc;
+} DSCBUFFERDESC, *LPDSCBUFFERDESC;
+
+
+#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
+
+typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);
+typedef BOOL (CALLBACK* WNDENUMPROC)(HWND, LPARAM);
+
+typedef char* HPSTR;
+
+typedef struct tagPAINTSTRUCT {
+ HDC hdc;
+ BOOL fErase;
+ RECT rcPaint;
+ BOOL fRestore;
+ BOOL fIncUpdate;
+ BYTE rgbReserved[16];
+} PAINTSTRUCT, *LPPAINTSTRUCT;
+
+typedef struct tagMSG {
+ HWND hwnd;
+ UINT message;
+ WPARAM wParam;
+ LPARAM lParam;
+ DWORD time;
+ POINT pt;
+} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;
+
+typedef struct {
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCTSTR lpszMenuName;
+ LPCTSTR lpszClassName;
+} WNDCLASS, *PWNDCLASS;
+
+typedef struct {
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCWSTR lpszMenuName;
+ LPCWSTR lpszClassName;
+} WNDCLASSW, *PWNDCLASSW;
+
+typedef struct {
+ UINT cbSize;
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HINSTANCE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCTSTR lpszMenuName;
+ LPCTSTR lpszClassName;
+ HICON hIconSm;
+} WNDCLASSEX, *PWNDCLASSEX;
+
+typedef struct tagTEXTMETRIC {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ TCHAR tmFirstChar;
+ TCHAR tmLastChar;
+ TCHAR tmDefaultChar;
+ TCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRIC, *PTEXTMETRIC;
+
+typedef struct _ABC {
+ int abcA;
+ UINT abcB;
+ int abcC;
+} ABC, *PABC;
+
+typedef struct tagRGBQUAD {
+ BYTE rgbBlue;
+ BYTE rgbGreen;
+ BYTE rgbRed;
+ BYTE rgbReserved;
+} RGBQUAD;
+
+typedef struct tagBITMAP
+ {
+ LONG bmType;
+ LONG bmWidth;
+ LONG bmHeight;
+ LONG bmWidthBytes;
+ WORD bmPlanes;
+ WORD bmBitsPixel;
+ LPVOID bmBits;
+ } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
+
+typedef struct tagBITMAPINFOHEADER{
+ DWORD biSize;
+ LONG biWidth;
+ LONG biHeight;
+ WORD biPlanes;
+ WORD biBitCount;
+ DWORD biCompression;
+ DWORD biSizeImage;
+ LONG biXPelsPerMeter;
+ LONG biYPelsPerMeter;
+ DWORD biClrUsed;
+ DWORD biClrImportant;
+} BITMAPINFOHEADER, *PBITMAPINFOHEADER, *LPBITMAPINFOHEADER;
+
+typedef struct tagBITMAPINFO {
+ BITMAPINFOHEADER bmiHeader;
+ RGBQUAD bmiColors[1];
+} BITMAPINFO, *PBITMAPINFO, *LPBITMAPINFO;
+
+typedef struct tagBITMAPFILEHEADER {
+ WORD bfType;
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
+
+typedef struct tagRGBTRIPLE {
+ BYTE rgbtBlue;
+ BYTE rgbtGreen;
+ BYTE rgbtRed;
+} RGBTRIPLE;
+
+typedef struct tagBITMAPCOREHEADER {
+ DWORD bcSize;
+ WORD bcWidth;
+ WORD bcHeight;
+ WORD bcPlanes;
+ WORD bcBitCount;
+} BITMAPCOREHEADER, *PBITMAPCOREHEADER;
+
+typedef struct _BITMAPCOREINFO {
+ BITMAPCOREHEADER bmciHeader;
+ RGBTRIPLE bmciColors[1];
+} BITMAPCOREINFO, *PBITMAPCOREINFO, *LPBITMAPCOREINFO;
+
+typedef struct _OSVERSIONINFO
+{
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ TCHAR szCSDVersion[128];
+} OSVERSIONINFO, *LPOSVERSIONINFO;
+
+typedef struct _OSVERSIONINFOEX
+{
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ TCHAR szCSDVersion[128];
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;
+
+typedef enum {
+ INTERNET_SCHEME_PARTIAL = -2,
+ INTERNET_SCHEME_UNKNOWN = -1,
+ INTERNET_SCHEME_DEFAULT = 0,
+ INTERNET_SCHEME_FTP,
+ INTERNET_SCHEME_GOPHER,
+ INTERNET_SCHEME_HTTP,
+ INTERNET_SCHEME_HTTPS,
+ INTERNET_SCHEME_FILE,
+ INTERNET_SCHEME_NEWS,
+ INTERNET_SCHEME_MAILTO,
+ INTERNET_SCHEME_SOCKS,
+ INTERNET_SCHEME_JAVASCRIPT,
+ INTERNET_SCHEME_VBSCRIPT,
+ INTERNET_SCHEME_ABOUT,
+ INTERNET_SCHEME_RES,
+ INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP,
+ INTERNET_SCHEME_LAST = INTERNET_SCHEME_VBSCRIPT
+} INTERNET_SCHEME, * LPINTERNET_SCHEME;
+
+typedef struct {
+ DWORD dwStructSize;
+ LPTSTR lpszScheme;
+ DWORD dwSchemeLength;
+ INTERNET_SCHEME nScheme;
+ LPTSTR lpszHostName;
+ DWORD dwHostNameLength;
+ UINT nPort;
+ LPTSTR lpszUserName;
+ DWORD dwUserNameLength;
+ LPTSTR lpszPassword;
+ DWORD dwPasswordLength;
+ LPTSTR lpszUrlPath;
+ DWORD dwUrlPathLength;
+ LPTSTR lpszExtraInfo;
+ DWORD dwExtraInfoLength;
+} URL_COMPONENTS, *LPURL_COMPONENTS;
+
+typedef struct _COORD
+{
+ SHORT X;
+ SHORT Y;
+} COORD, *PCOORD;
+
+typedef struct _SMALL_RECT
+{
+ SHORT Left;
+ SHORT Top;
+ SHORT Right;
+ SHORT Bottom;
+} SMALL_RECT;
+
+typedef struct _CONSOLE_SCREEN_BUFFER_INFO
+{
+ COORD dwSize;
+ COORD dwCursorPosition;
+ WORD wAttributes;
+ SMALL_RECT srWindow;
+ COORD dwMaximumWindowSize;
+} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO;
+
+typedef struct _WINDOW_BUFFER_SIZE_RECORD
+{
+ COORD dwSize;
+} WINDOW_BUFFER_SIZE_RECORD, *PWINDOW_BUFFER_SIZE_RECORD;
+
+typedef struct _MENU_EVENT_RECORD
+{
+ UINT dwCommandId;
+} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
+
+typedef struct _FOCUS_EVENT_RECORD
+{
+ BOOL bSetFocus;
+} FOCUS_EVENT_RECORD, *PFOCUS_EVENT_RECORD;
+
+typedef struct _KEY_EVENT_RECORD
+{
+ BOOL bKeyDown;
+ WORD wRepeatCount;
+ WORD wVirtualKeyCode;
+ WORD wVirtualScanCode;
+ union {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } uChar;
+ DWORD dwControlKeyState;
+} KEY_EVENT_RECORD, *PKEY_EVENT_RECORD;
+
+typedef struct _MOUSE_EVENT_RECORD
+{
+ COORD dwMousePosition;
+ DWORD dwButtonState;
+ DWORD dwControlKeyState;
+ DWORD dwEventFlags;
+} MOUSE_EVENT_RECORD, *PMOUSE_EVENT_RECORD;
+
+typedef struct _INPUT_RECORD
+{
+ WORD EventType;
+ union {
+ KEY_EVENT_RECORD KeyEvent;
+ MOUSE_EVENT_RECORD MouseEvent;
+ WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
+ MENU_EVENT_RECORD MenuEvent;
+ FOCUS_EVENT_RECORD FocusEvent;
+ } Event;
+} INPUT_RECORD, *PINPUT_RECORD;
+
+typedef GUID UUID;
+
+#define MAXPNAMELEN 32
+#define MAX_JOYSTICKOEMVXDNAME 260
+
+typedef struct
+{
+ WORD wMid;
+ WORD wPid;
+ CHAR szPname[MAXPNAMELEN];
+ UINT wXmin;
+ UINT wXmax;
+ UINT wYmin;
+ UINT wYmax;
+ UINT wZmin;
+ UINT wZmax;
+ UINT wNumButtons;
+ UINT wPeriodMin;
+ UINT wPeriodMax;
+ UINT wRmin;
+ UINT wRmax;
+ UINT wUmin;
+ UINT wUmax;
+ UINT wVmin;
+ UINT wVmax;
+ UINT wCaps;
+ UINT wMaxAxes;
+ UINT wNumAxes;
+ UINT wMaxButtons;
+ CHAR szRegKey[MAXPNAMELEN];
+ CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
+} JOYCAPS, *LPJOYCAPS;
+
+typedef struct joyinfoex_tag
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwXpos;
+ DWORD dwYpos;
+ DWORD dwZpos;
+ DWORD dwRpos;
+ DWORD dwUpos;
+ DWORD dwVpos;
+ DWORD dwButtons;
+ DWORD dwButtonNumber;
+ DWORD dwPOV;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} JOYINFOEX, *LPJOYINFOEX;
+
+typedef struct _MEMORYSTATUSEX
+{
+ DWORD dwLength;
+ DWORD dwMemoryLoad;
+ DWORDLONG ullTotalPhys;
+ DWORDLONG ullAvailPhys;
+ DWORDLONG ullTotalPageFile;
+ DWORDLONG ullAvailPageFile;
+ DWORDLONG ullTotalVirtual;
+ DWORDLONG ullAvailVirtual;
+ DWORDLONG ullAvailExtendedVirtual;
+} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
+
+typedef struct tagCOPYDATASTRUCT
+{
+ ULONG_PTR dwData;
+ DWORD cbData;
+ PVOID lpData;
+} COPYDATASTRUCT, *PCOPYDATASTRUCT;
+
+typedef LPVOID HINTERNET;
+
+typedef VOID (CALLBACK * INTERNET_STATUS_CALLBACK)(
+ IN HINTERNET hInternet,
+ IN DWORD_PTR dwContext,
+ IN DWORD dwInternetStatus,
+ IN LPVOID lpvStatusInformation OPTIONAL,
+ IN DWORD dwStatusInformationLength
+ );
+
+typedef struct
+{
+ DWORD dwStructSize; // size of this structure. Used in version check
+ LPSTR lpszScheme; // pointer to scheme name
+ DWORD dwSchemeLength; // length of scheme name
+ INTERNET_SCHEME nScheme; // enumerated scheme type (if known)
+ LPSTR lpszHostName; // pointer to host name
+ DWORD dwHostNameLength; // length of host name
+ UINT nPort; // converted port number
+ LPSTR lpszUserName; // pointer to user name
+ DWORD dwUserNameLength; // length of user name
+ LPSTR lpszPassword; // pointer to password
+ DWORD dwPasswordLength; // length of password
+ LPSTR lpszUrlPath; // pointer to URL-path
+ DWORD dwUrlPathLength; // length of URL-path
+ LPSTR lpszExtraInfo; // pointer to extra information (e.g. ?foo or #foo)
+ DWORD dwExtraInfoLength; // length of extra information
+} URL_COMPONENTSA, * LPURL_COMPONENTSA;
+
+struct hostent
+{
+ char FAR * h_name; /* official name of host */
+ char FAR * FAR * h_aliases; /* alias list */
+ short h_addrtype; /* host address type */
+ short h_length; /* length of address */
+ char FAR * FAR * h_addr_list; /* list of addresses */
+#define h_addr h_addr_list[0] /* address, for backward compat */
+};
+
+#define WHEEL_DELTA 120
+
+#define ANSI_CHARSET 0
+#define SYMBOL_CHARSET 1
+
+#define NONANTIALIASED_QUALITY 0
+#define ANTIALIASED_QUALITY 4
+
+#define SPI_SETMOUSE 1
+#define SPI_GETMOUSE 2
+
+#define SC_SCREENSAVE 0
+#define SC_CLOSE 1
+#define SC_KEYMENU 2
+#define SC_MONITORPOWER 3
+
+#define SIZE_MINIMIZED 0
+
+#define DM_PELSWIDTH 0
+#define DM_PELSHEIGHT 0
+#define DM_BITSPERPEL 0
+#define DM_DISPLAYFREQUENCY 0
+
+#define CDS_FULLSCREEN 0
+
+#define FILE_TYPE_UNKNOWN 0
+#define FILE_TYPE_DISK 1
+
+#define HORZRES 1
+#define VERTRES 2
+#define VREFRESH 3
+
+#define FILE_MAP_ALL_ACCESS 0
+#define FILE_MAP_COPY 1
+#define FILE_MAP_WRITE 2
+#define FILE_MAP_READ 3
+
+#define PBT_APMQUERYSUSPEND 0
+#define BROADCAST_QUERY_DENY 0x424D5144
+
+#define IDOK 0
+#define IDCANCEL 1
+
+#define IMAGE_ICON 0
+#define MB_ICONEXCLAMATION 1
+#define MB_OKCANCEL 2
+#define MB_SYSTEMMODAL 3
+#define MB_ICONERROR 4
+
+#define LR_DEFAULTCOLOR 0x0000
+#define LR_MONOCHROME 0x0001
+#define LR_COLOR 0x0002
+#define LR_COPYRETURNORG 0x0004
+#define LR_COPYDELETEORG 0x0008
+#define LR_LOADFROMFILE 0x0010
+#define LR_LOADTRANSPARENT 0x0020
+#define LR_DEFAULTSIZE 0x0040
+#define LR_VGACOLOR 0x0080
+#define LR_LOADMAP3DCOLORS 0x1000
+#define LR_CREATEDIBSECTION 0x2000
+#define LR_COPYFROMRESOURCE 0x4000
+#define LR_SHARED 0x8000
+
+#define MAKEINTRESOURCE( res ) ((ULONG_PTR) (USHORT) res)
+#define CREATE_NEW_CONSOLE 0x00000010
+
+// registry
+#define REG_OPTION_NON_VOLATILE 0ul
+#define REG_CREATED_NEW_KEY 1
+#define HKEY_CLASSES_ROOT (HKEY)0
+
+// winsock
+#define MSG_NOSIGNAL 0
+#define MSG_PEEK 2
+
+// show styles
+#define SW_SHOWNORMAL 0
+#define SW_SHOWDEFAULT 1
+#define SW_SHOW 2
+#define SW_MINIMIZE 3
+
+#define SWP_NOZORDER 0x00000001
+#define SWP_NOREDRAW 0x00000002
+#define SWP_NOSIZE 0x00000004
+#define SWP_NOMOVE 0x00000008
+#define SWP_SHOWWINDOW 0x00000010
+#define SWP_DRAWFRAME 0x00000020
+
+// platform versions
+#define VER_PLATFORM_WIN32s 0
+#define VER_PLATFORM_WIN32_WINDOWS 1
+#define VER_PLATFORM_WIN32_NT 2
+
+// windows messages
+#define WM_CHAR 1
+#define WM_CLOSE 2
+#define WM_DESTROY 3
+#define WM_MOUSEMOVE 4
+#define WM_LBUTTONUP 5
+#define WM_LBUTTONDOWN 6
+#define WM_RBUTTONUP 7
+#define WM_RBUTTONDOWN 8
+#define WM_SETFOCUS 9
+#define WM_SETCURSOR 10
+#define WM_MBUTTONDOWN 11
+#define WM_MBUTTONUP 12
+#define WM_LBUTTONDBLCLK 13
+#define WM_RBUTTONDBLCLK 14
+#define WM_MBUTTONDBLCLK 15
+#define WM_MOUSEWHEEL 16
+#define WM_KEYDOWN 17
+#define WM_SYSKEYDOWN 18
+#define WM_SYSCHAR 19
+#define WM_KEYUP 20
+#define WM_SYSKEYUP 21
+#define WM_PAINT 23
+#define WM_COPYDATA 24
+#define WM_MOVE 25
+#define WM_ACTIVATEAPP 26
+#define WM_QUIT 27
+#define WM_CREATE 28
+#define WM_SYSCOMMAND 29
+#define WM_SIZE 30
+#define WM_SETTINGCHANGE 31
+#define WM_USER 32
+#define WM_POWERBROADCAST 33
+#define WM_IME_CHAR 34
+#define WM_IME_NOTIFY 35
+#define WM_IME_STARTCOMPOSITION 36
+#define WM_IME_COMPOSITION 37
+#define WM_IME_ENDCOMPOSITION 38
+#define WM_IME_SETCONTEXT 39
+#define WM_INPUTLANGCHANGE 40
+
+#define IMN_OPENCANDIDATE 0
+#define IMN_SETOPENSTATUS 1
+#define IMN_CHANGECANDIDATE 2
+#define IMN_CLOSECANDIDATE 3
+#define IMN_SETCONVERSIONMODE 4
+#define IMN_SETSENTENCEMODE 5
+#define IMN_CLOSESTATUSWINDOW 6
+#define IMN_GUIDELINE 7
+#define IMN_OPENSTATUSWINDOW 8
+#define IMN_SETCANDIDATEPOS 9
+#define IMN_SETCOMPOSITIONFONT 10
+#define IMN_SETCOMPOSITIONWINDOW 11
+#define IMN_SETSTATUSWINDOWPOS 12
+
+#define ISC_SHOWUICOMPOSITIONWINDOW 0
+#define ISC_SHOWUIGUIDELINE 0
+#define ISC_SHOWUIALLCANDIDATEWINDOW 0
+
+// message box
+#define MB_OK 0
+#define MB_ICONINFORMATION 0
+#define MB_TOPMOST 0
+#define SEM_NOGPFAULTERRORBOX 2
+
+// class styles
+#define CS_OWNDC 0
+#define CS_DBLCLKS 0
+#define CS_CLASSDC 0
+#define CS_HREDRAW 0
+#define CS_VREDRAW 0
+
+#define IDC_ARROW 0
+
+#define STD_INPUT_HANDLE ((DWORD)-10)
+#define STD_OUTPUT_HANDLE ((DWORD)-11)
+
+#define COLOR_GRAYTEXT 0
+#define WHITE_BRUSH 0
+#define SRCCOPY 0
+
+/* Font Weights */
+#define FW_DONTCARE 0
+#define FW_THIN 100
+#define FW_EXTRALIGHT 200
+#define FW_LIGHT 300
+#define FW_NORMAL 400
+#define FW_MEDIUM 500
+#define FW_SEMIBOLD 600
+#define FW_BOLD 700
+#define FW_EXTRABOLD 800
+#define FW_HEAVY 900
+
+#define CLIP_DEFAULT_PRECIS 0
+#define DEFAULT_PITCH 0
+#define TRANSPARENT 1
+#define OUT_TT_PRECIS 4
+#define BI_RGB 0L
+#define IMAGE_BITMAP 0
+
+#define DT_NOPREFIX 0x00000000
+#define DT_VCENTER 0x00000000
+#define DT_CENTER 0x00000000
+#define DT_LEFT 0x00000000
+#define DT_RIGHT 0x00000000
+#define DT_SINGLELINE 0x00000000
+
+#define DIB_RGB_COLORS 0
+
+// window styles
+#define WS_OVERLAPPEDWINDOW 0
+#define WS_POPUP 0
+#define WS_CLIPSIBLINGS 0
+#define WS_THICKFRAME 0
+#define WS_MAXIMIZEBOX 0
+#define WS_VISIBLE 0
+#define WS_EX_TOOLWINDOW 0
+#define WS_EX_TOPMOST 0
+#define WS_CAPTION 0
+#define WS_SYSMENU 0
+#define WS_CLIPCHILDREN 0
+
+// cursors
+#define OCR_NORMAL 1
+#define OCR_IBEAM 2
+#define OCR_WAIT 3
+#define OCR_CROSS 4
+#define OCR_UP 5
+#define OCR_SIZENWSE 6
+#define OCR_SIZENESW 7
+#define OCR_SIZEWE 8
+#define OCR_SIZENS 9
+#define OCR_SIZEALL 10
+#define OCR_NO 11
+#define OCR_HAND 12
+
+// system metrics
+#define SM_CXFIXEDFRAME 1
+#define SM_CYFIXEDFRAME 2
+#define SM_CYSIZE 3
+#define SM_CXSCREEN 4
+#define SM_CYSCREEN 5
+
+// window longs
+#define GWLP_WNDPROC (-4)
+#define GWLP_HINSTANCE (-6)
+#define GWLP_HWNDPARENT (-8)
+#define GWLP_USERDATA (-21)
+#define GWLP_ID (-12)
+
+#define GWL_WNDPROC 0
+#define GWL_USERDATA 1
+#define GWL_STYLE 2
+#define GWL_EXSTYLE 3
+#define GWL_MAX 4
+
+#define HWND_TOP ((HWND)0)
+#define HWND_BOTTOM ((HWND)1)
+#define HWND_TOPMOST ((HWND)-1)
+#define HWND_NOTOPMOST ((HWND)-2)
+#define HWND_BROADCAST 0
+
+// PeekMessage
+#define PM_NOREMOVE 0x0000
+#define PM_REMOVE 0x0001
+#define PM_NOYIELD 0x0002
+
+#define MK_LBUTTON 0x0001
+#define MK_RBUTTON 0x0002
+#define MK_MBUTTON 0x0004
+
+// File attributes
+#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
+
+#define QS_INPUT 0
+#define QS_ALLEVENTS 5
+#define KEY_EVENT 0
+
+// sockets
+#define SO_KEEPALIVE 8
+
+// Download status cases
+#define INTERNET_STATUS_RESOLVING_NAME 0
+#define INTERNET_STATUS_NAME_RESOLVED 1
+#define INTERNET_STATUS_CONNECTING_TO_SERVER 2
+#define INTERNET_STATUS_CONNECTED_TO_SERVER 3
+#define INTERNET_STATUS_SENDING_REQUEST 4
+#define INTERNET_STATUS_REQUEST_SENT 5
+#define INTERNET_STATUS_REQUEST_COMPLETE 6
+#define INTERNET_STATUS_CLOSING_CONNECTION 7
+#define INTERNET_STATUS_CONNECTION_CLOSED 8
+#define INTERNET_STATUS_RECEIVING_RESPONSE 9
+#define INTERNET_STATUS_RESPONSE_RECEIVED 10
+#define INTERNET_STATUS_HANDLE_CLOSING 11
+#define INTERNET_STATUS_HANDLE_CREATED 12
+#define INTERNET_STATUS_INTERMEDIATE_RESPONSE 13
+#define INTERNET_STATUS_REDIRECT 14
+#define INTERNET_STATUS_STATE_CHANGE 15
+
+#define INTERNET_FLAG_RELOAD 0x80000000 // retrieve the original item
+#define INTERNET_FLAG_RAW_DATA 0x40000000 // FTP/gopher find: receive the item as raw (structured) data
+#define INTERNET_FLAG_EXISTING_CONNECT 0x20000000 // FTP: use existing InternetConnect handle for server if possible
+#define INTERNET_FLAG_ASYNC 0x10000000 // this request is asynchronous (where supported)
+#define INTERNET_FLAG_PASSIVE 0x08000000 // used for FTP connections
+#define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000 // don't write this item to the cache
+#define INTERNET_FLAG_DONT_CACHE INTERNET_FLAG_NO_CACHE_WRITE
+#define INTERNET_FLAG_MAKE_PERSISTENT 0x02000000 // make this item persistent in cache
+#define INTERNET_FLAG_FROM_CACHE 0x01000000 // use offline semantics
+#define INTERNET_FLAG_OFFLINE INTERNET_FLAG_FROM_CACHE
+#define INTERNET_FLAG_SECURE 0x00800000 // use PCT/SSL if applicable (HTTP)
+#define INTERNET_FLAG_KEEP_CONNECTION 0x00400000 // use keep-alive semantics
+#define INTERNET_FLAG_NO_AUTO_REDIRECT 0x00200000 // don't handle redirections automatically
+#define INTERNET_FLAG_READ_PREFETCH 0x00100000 // do background read prefetch
+#define INTERNET_FLAG_NO_COOKIES 0x00080000 // no automatic cookie handling
+#define INTERNET_FLAG_NO_AUTH 0x00040000 // no automatic authentication handling
+#define INTERNET_FLAG_RESTRICTED_ZONE 0x00020000 // apply restricted zone policies for cookies, auth
+#define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000 // return cache file if net request fails
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x00008000 // ex: https:// to http://
+#define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x00004000 // ex: http:// to https://
+#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000 // expired X509 Cert.
+#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x00001000 // bad common name in X509 Cert.
+
+#define INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
+#define INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
+#define INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
+#define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
+
+#define HTTP_QUERY_CONTENT_LENGTH 5
+#define HTTP_QUERY_LAST_MODIFIED 11
+#define HTTP_QUERY_STATUS_CODE 19 // special: part of status line
+#define HTTP_QUERY_RAW_HEADERS_CRLF 22 // special: all headers
+#define HTTP_QUERY_FLAG_NUMBER 0x20000000
+#define HTTP_STATUS_OK 200 // request completed
+#define HTTP_STATUS_PARTIAL_CONTENT 206 // partial GET furfilled
+
+// Virtual Keys, Standard Set
+#define VK_LBUTTON 0x01
+#define VK_RBUTTON 0x02
+#define VK_CANCEL 0x03
+#define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */
+#define VK_XBUTTON1 0x05 /* NOT contiguous with L & RBUTTON */
+#define VK_XBUTTON2 0x06 /* NOT contiguous with L & RBUTTON */
+#define VK_BACK 0x08
+#define VK_TAB 0x09
+#define VK_CLEAR 0x0C
+#define VK_RETURN 0x0D
+#define VK_SHIFT 0x10
+#define VK_CONTROL 0x11
+#define VK_MENU 0x12
+#define VK_PAUSE 0x13
+#define VK_CAPITAL 0x14
+#define VK_KANA 0x15
+#define VK_HANGEUL 0x15 /* old name - should be here for compatibility */
+#define VK_HANGUL 0x15
+#define VK_JUNJA 0x17
+#define VK_FINAL 0x18
+#define VK_HANJA 0x19
+#define VK_KANJI 0x19
+#define VK_ESCAPE 0x1B
+#define VK_CONVERT 0x1C
+#define VK_NONCONVERT 0x1D
+#define VK_ACCEPT 0x1E
+#define VK_MODECHANGE 0x1F
+#define VK_SPACE 0x20
+#define VK_PRIOR 0x21
+#define VK_NEXT 0x22
+#define VK_END 0x23
+#define VK_HOME 0x24
+#define VK_LEFT 0x25
+#define VK_UP 0x26
+#define VK_RIGHT 0x27
+#define VK_DOWN 0x28
+#define VK_SELECT 0x29
+#define VK_PRINT 0x2A
+#define VK_EXECUTE 0x2B
+#define VK_SNAPSHOT 0x2C
+#define VK_INSERT 0x2D
+#define VK_DELETE 0x2E
+#define VK_HELP 0x2F
+#define VK_LWIN 0x5B
+#define VK_RWIN 0x5C
+#define VK_APPS 0x5D
+#define VK_SLEEP 0x5F
+#define VK_NUMPAD0 0x60
+#define VK_NUMPAD1 0x61
+#define VK_NUMPAD2 0x62
+#define VK_NUMPAD3 0x63
+#define VK_NUMPAD4 0x64
+#define VK_NUMPAD5 0x65
+#define VK_NUMPAD6 0x66
+#define VK_NUMPAD7 0x67
+#define VK_NUMPAD8 0x68
+#define VK_NUMPAD9 0x69
+#define VK_MULTIPLY 0x6A
+#define VK_ADD 0x6B
+#define VK_SEPARATOR 0x6C
+#define VK_SUBTRACT 0x6D
+#define VK_DECIMAL 0x6E
+#define VK_DIVIDE 0x6F
+#define VK_F1 0x70
+#define VK_F2 0x71
+#define VK_F3 0x72
+#define VK_F4 0x73
+#define VK_F5 0x74
+#define VK_F6 0x75
+#define VK_F7 0x76
+#define VK_F8 0x77
+#define VK_F9 0x78
+#define VK_F10 0x79
+#define VK_F11 0x7A
+#define VK_F12 0x7B
+#define VK_F13 0x7C
+#define VK_F14 0x7D
+#define VK_F15 0x7E
+#define VK_F16 0x7F
+#define VK_F17 0x80
+#define VK_F18 0x81
+#define VK_F19 0x82
+#define VK_F20 0x83
+#define VK_F21 0x84
+#define VK_F22 0x85
+#define VK_F23 0x86
+#define VK_F24 0x87
+#define VK_NUMLOCK 0x90
+#define VK_SCROLL 0x91
+#define VK_OEM_NEC_EQUAL 0x92 // '=' key on numpad
+#define VK_OEM_FJ_JISHO 0x92 // 'Dictionary' key
+#define VK_OEM_FJ_MASSHOU 0x93 // 'Unregister word' key
+#define VK_OEM_FJ_TOUROKU 0x94 // 'Register word' key
+#define VK_OEM_FJ_LOYA 0x95 // 'Left OYAYUBI' key
+#define VK_OEM_FJ_ROYA 0x96 // 'Right OYAYUBI' key
+#define VK_LSHIFT 0xA0
+#define VK_RSHIFT 0xA1
+#define VK_LCONTROL 0xA2
+#define VK_RCONTROL 0xA3
+#define VK_LMENU 0xA4
+#define VK_RMENU 0xA5
+#define VK_BROWSER_BACK 0xA6
+#define VK_BROWSER_FORWARD 0xA7
+#define VK_BROWSER_REFRESH 0xA8
+#define VK_BROWSER_STOP 0xA9
+#define VK_BROWSER_SEARCH 0xAA
+#define VK_BROWSER_FAVORITES 0xAB
+#define VK_BROWSER_HOME 0xAC
+#define VK_VOLUME_MUTE 0xAD
+#define VK_VOLUME_DOWN 0xAE
+#define VK_VOLUME_UP 0xAF
+#define VK_MEDIA_NEXT_TRACK 0xB0
+#define VK_MEDIA_PREV_TRACK 0xB1
+#define VK_MEDIA_STOP 0xB2
+#define VK_MEDIA_PLAY_PAUSE 0xB3
+#define VK_LAUNCH_MAIL 0xB4
+#define VK_LAUNCH_MEDIA_SELECT 0xB5
+#define VK_LAUNCH_APP1 0xB6
+#define VK_LAUNCH_APP2 0xB7
+#define VK_OEM_1 0xBA // ';:' for US
+#define VK_OEM_PLUS 0xBB // '+' any country
+#define VK_OEM_COMMA 0xBC // ',' any country
+#define VK_OEM_MINUS 0xBD // '-' any country
+#define VK_OEM_PERIOD 0xBE // '.' any country
+#define VK_OEM_2 0xBF // '/?' for US
+#define VK_OEM_3 0xC0 // '`~' for US
+#define VK_OEM_4 0xDB // '[{' for US
+#define VK_OEM_5 0xDC // '\|' for US
+#define VK_OEM_6 0xDD // ']}' for US
+#define VK_OEM_7 0xDE // ''"' for US
+#define VK_OEM_8 0xDF
+#define VK_OEM_AX 0xE1 // 'AX' key on Japanese AX kbd
+#define VK_OEM_102 0xE2 // "<>" or "\|" on RT 102-key kbd.
+#define VK_ICO_HELP 0xE3 // Help key on ICO
+#define VK_ICO_00 0xE4 // 00 key on ICO
+#define VK_PROCESSKEY 0xE5
+#define VK_ICO_CLEAR 0xE6
+#define VK_PACKET 0xE7
+#define VK_OEM_RESET 0xE9
+#define VK_OEM_JUMP 0xEA
+#define VK_OEM_PA1 0xEB
+#define VK_OEM_PA2 0xEC
+#define VK_OEM_PA3 0xED
+#define VK_OEM_WSCTRL 0xEE
+#define VK_OEM_CUSEL 0xEF
+#define VK_OEM_ATTN 0xF0
+#define VK_OEM_FINISH 0xF1
+#define VK_OEM_COPY 0xF2
+#define VK_OEM_AUTO 0xF3
+#define VK_OEM_ENLW 0xF4
+#define VK_OEM_BACKTAB 0xF5
+#define VK_ATTN 0xF6
+#define VK_CRSEL 0xF7
+#define VK_EXSEL 0xF8
+#define VK_EREOF 0xF9
+#define VK_PLAY 0xFA
+#define VK_ZOOM 0xFB
+#define VK_NONAME 0xFC
+#define VK_PA1 0xFD
+#define VK_OEM_CLEAR 0xFE
+
+// Error codes used in the Secure CRT functions
+#define EINVAL 22
+
+
+#ifdef getenv
+ #undef getenv
+#endif
+#ifdef _getenv
+ #undef _getenv
+#endif
+#define getenv XBX_getenv
+#define _getenv XBX_getenv
+FORCEINLINE char *XBX_getenv(const char *name) { return NULL; }
+
+#ifdef _putenv
+ #undef _putenv
+#endif
+#define _putenv XBX_putenv
+FORCEINLINE int XBX_putenv(const char *name) { return -1; }
+
+#ifdef GetEnvironmentVariable
+ #undef GetEnvironmentVariable
+#endif
+#define GetEnvironmentVariable XBX_GetEnvironmentVariable
+FORCEINLINE DWORD XBX_GetEnvironmentVariable( LPCTSTR lpName, LPTSTR lpBuffer, DWORD nSize ) { return 0; }
+
+#ifdef unlink
+ #undef unlink
+#endif
+#define unlink XBX_unlink
+PLATFORM_INTERFACE int XBX_unlink( const char* filename );
+
+#ifdef mkdir
+ #undef mkdir
+#endif
+#ifdef _mkdir
+ #undef _mkdir
+#endif
+#define mkdir XBX_mkdir
+#define _mkdir XBX_mkdir
+PLATFORM_INTERFACE int XBX_mkdir( const char *pszDir );
+
+#ifdef getcwd
+ #undef getcwd
+#endif
+#ifdef _getcwd
+ #undef _getcwd
+#endif
+#define getcwd XBX_getcwd
+#define _getcwd XBX_getcwd
+PLATFORM_INTERFACE char *XBX_getcwd( char *buf, size_t size );
+
+#ifdef GetCurrentDirectory
+ #undef GetCurrentDirectory
+#endif
+#define GetCurrentDirectory XBX_GetCurrentDirectory
+PLATFORM_INTERFACE DWORD XBX_GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer );
+
+#ifdef _access
+ #undef _access
+#endif
+#define _access XBX_access
+PLATFORM_INTERFACE int XBX_access( const char *path, int mode );
+
+#ifdef _chdir
+ #undef _chdir
+#endif
+#define _chdir XBX_chdir
+FORCEINLINE int XBX_chdir( const char *dirname ) { return -1; }
+
+FORCEINLINE BOOL SetPriorityClass( HANDLE hProcess, DWORD dwPriorityClass ) { return FALSE; }
+
+PLATFORM_INTERFACE int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
+
+#ifdef GetModuleFileName
+ #undef GetModuleFileName
+#endif
+#define GetModuleFileName XBX_GetModuleFileName
+PLATFORM_INTERFACE DWORD XBX_GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize );
+
+//FORCEINLINE int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ) { return WSASYSNOTREADY; }
+//FORCEINLINE int WSACleanup(void) { return WSANOTINITIALISED; }
+
+FORCEINLINE HRESULT CoInitialize( LPVOID pvReserved ) { return S_OK; }
+FORCEINLINE void CoUninitialize( void ) { }
+
+FORCEINLINE LRESULT DefWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { return 0L; }
+FORCEINLINE void PostQuitMessage(int nExitCode) { }
+
+FORCEINLINE HANDLE GetStdHandle( DWORD ) { return 0; }
+
+FORCEINLINE BOOL GetConsoleScreenBufferInfo( HANDLE, PCONSOLE_SCREEN_BUFFER_INFO ) { return false; }
+
+FORCEINLINE COORD GetLargestConsoleWindowSize( HANDLE ) { COORD c = { 0, 0 }; return c; }
+
+FORCEINLINE BOOL SetConsoleWindowInfo( HANDLE, BOOL, SMALL_RECT* ) { return false; }
+
+FORCEINLINE BOOL SetConsoleScreenBufferSize( HANDLE, COORD ) { return false; }
+
+FORCEINLINE BOOL ReadConsoleOutputCharacter( HANDLE, LPTSTR, DWORD, COORD, LPDWORD ) { return false; }
+
+FORCEINLINE BOOL WriteConsoleInput( HANDLE, CONST INPUT_RECORD*, DWORD, LPDWORD ) { return false; }
+
+FORCEINLINE HWND GetDesktopWindow(VOID) { return (HWND)0; }
+
+FORCEINLINE int GetWindowText( HWND, LPTSTR, int ) { return 0; }
+
+FORCEINLINE UINT RegisterWindowMessage(LPCTSTR lpString) { return 0xC000; }
+
+FORCEINLINE HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName) { return NULL; }
+
+FORCEINLINE BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam) { return FALSE; }
+
+FORCEINLINE BOOL PostMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return FALSE; }
+
+FORCEINLINE BOOL SystemParametersInfo(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni) { return FALSE; }
+
+FORCEINLINE BOOL SetForegroundWindow(HWND hWnd) { return TRUE; }
+
+FORCEINLINE HDC BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint) { return NULL; }
+
+FORCEINLINE BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT *lpPaint) { return TRUE; }
+
+FORCEINLINE BOOL AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle) { return TRUE; }
+
+FORCEINLINE LONG ChangeDisplaySettings(LPDEVMODE lpDevMode, DWORD dwflags) { return DISP_CHANGE_SUCCESSFUL; }
+
+FORCEINLINE DWORD GetFileType(HANDLE hFile) { return FILE_TYPE_DISK; }
+
+FORCEINLINE BOOL FileTimeToDosDateTime(const FILETIME* lpFileTime, LPWORD lpFatDate, LPWORD lpFatTime)
+{
+ *lpFatDate = 0;
+ *lpFatTime = 0;
+ return TRUE;
+}
+
+FORCEINLINE BOOL DosDateTimeToFileTime(const WORD wFatDate, const WORD wFatTime, LPFILETIME lpFileTime )
+{
+ lpFileTime->dwHighDateTime = 0;
+ lpFileTime->dwLowDateTime = 0;
+ return TRUE;
+}
+
+FORCEINLINE BOOL SetViewportOrgEx( HDC, int, int, LPPOINT ) { return false; }
+
+FORCEINLINE BOOL MoveWindow( HWND, int, int, int, int, BOOL ) { return false; }
+
+FORCEINLINE int ShowCursor( BOOL ) { return 0; }
+
+FORCEINLINE HFONT CreateFontA( int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCSTR) { return 0; }
+
+FORCEINLINE int DrawText( HDC, LPCTSTR, int, LPRECT, UINT ) { return 0; }
+
+FORCEINLINE int SetBkMode( HDC, int ) { return 0; }
+
+FORCEINLINE COLORREF SetTextColor( HDC, COLORREF col ) { return col; }
+
+FORCEINLINE HBRUSH CreateSolidBrush( COLORREF ) { return 0; }
+
+FORCEINLINE BOOL Rectangle( HDC, int, int, int, int ) { return false; }
+
+FORCEINLINE HANDLE LoadImage( HINSTANCE, LPCSTR, UINT, int, int, UINT) { return 0; }
+FORCEINLINE HANDLE LoadImageA( HINSTANCE, LPCSTR, UINT, int, int, UINT) { return 0; }
+
+FORCEINLINE HICON LoadIcon( HINSTANCE hInstance, ULONG_PTR lpIconName) { return 0; }
+
+FORCEINLINE COLORREF SetPixel( HDC, int, int, COLORREF col ) { return col; }
+
+FORCEINLINE BOOL BitBlt( HDC, int, int, int, int, HDC, int, int, DWORD ) { return false; }
+
+FORCEINLINE HGDIOBJ GetStockObject( int ) { return 0; }
+
+FORCEINLINE int GetObject( HGDIOBJ, int, LPVOID ) { return 0; }
+
+FORCEINLINE int GetDIBits( HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT ) { return 0; }
+
+FORCEINLINE HDC GetDC(HWND hWnd) { return (HDC)0x12345678; }
+
+FORCEINLINE void ReleaseDC(HWND hWnd, HDC hDC) { }
+
+FORCEINLINE HDC CreateCompatibleDC( HDC ) { return 0; }
+
+FORCEINLINE HBITMAP CreateCompatibleBitmap( HDC, int, int ) { return 0; }
+
+FORCEINLINE HBITMAP CreateDIBSection( HDC, CONST BITMAPINFO *, UINT, VOID **ppBits, HANDLE, DWORD) { ppBits = NULL; return 0; }
+
+FORCEINLINE BOOL InvalidateRect( HWND, const RECT*, bool ) { return false; }
+
+FORCEINLINE UINT joyGetDevCaps( UINT uJoyID, JOYCAPS* pjc, UINT cbjc) { return 0; }
+
+FORCEINLINE UINT joyGetPosEx( UINT uJoyID, LPJOYINFOEX pji) { return 0; }
+
+FORCEINLINE UINT joyGetNumDevs(void) { return 0; }
+
+FORCEINLINE HKL GetKeyboardLayout( DWORD ) { return NULL; }
+
+FORCEINLINE HKL LoadKeyboardLayout( LPCTSTR, UINT ) { return NULL; }
+
+FORCEINLINE UINT MapVirtualKeyEx( UINT, UINT, HKL ) { return 0; }
+
+FORCEINLINE SHORT GetKeyState( int nVirtKey ) { return 0; }
+
+FORCEINLINE BOOL PeekMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) { return FALSE; }
+
+FORCEINLINE BOOL TranslateMessage(CONST MSG *lpMsg) { return FALSE; }
+
+FORCEINLINE BOOL DispatchMessage(CONST MSG *lpMsg) { return FALSE; }
+
+FORCEINLINE BOOL UpdateWindow(HWND hWnd) { return FALSE; }
+
+FORCEINLINE LONG RegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult ) { return -1; }
+
+FORCEINLINE LONG RegQueryValueEx( HKEY hKey, LPCTSTR lpValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData ) { return -1; }
+
+FORCEINLINE LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition ) { return -1; }
+
+FORCEINLINE LONG RegSetValueEx( HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE* lpData, DWORD cbData ) { return -1; }
+
+FORCEINLINE LONG RegDeleteValue( HKEY hKey, LPCTSTR lpValueName ) { return -1; }
+
+FORCEINLINE LONG RegCloseKey( HKEY hKey ) { return -1; }
+
+FORCEINLINE BOOL ClientToScreen( HWND hwnd, LPPOINT lpPoint )
+{
+ lpPoint->x = 0;
+ lpPoint->y = 0;
+ return TRUE;
+}
+
+FORCEINLINE BOOL SetCursorPos( int x, int y ) { return FALSE; }
+
+FORCEINLINE BOOL UnregisterClass( LPCTSTR lpClassNAme, HINSTANCE hInstance ) { return TRUE; }
+FORCEINLINE BOOL UnregisterClassW( LPCWSTR lpClassNAme, HINSTANCE hInstance ) { return TRUE; }
+
+FORCEINLINE HCURSOR LoadCursor( HINSTANCE, LPCTSTR lpCursorName ) { return NULL; }
+
+FORCEINLINE HWND GetParent( HWND hWnd ) { return NULL; }
+
+FORCEINLINE BOOL EnumChildWindows( HWND hWndParent, WNDENUMPROC lpEnumFunc, LPARAM lParam ) { return FALSE; }
+
+FORCEINLINE BOOL IsIconic( HWND hWnd ) { return FALSE; }
+
+FORCEINLINE BOOL DestroyCursor( HCURSOR hCursor ) { return TRUE; }
+
+FORCEINLINE HCURSOR LoadCursorFromFile( LPCTSTR lpFileName ) { return NULL; }
+
+FORCEINLINE HCURSOR SetCursor( HCURSOR hCursor ) { return NULL; }
+
+FORCEINLINE BOOL GetCursorPos( LPPOINT lpPoint ) { return TRUE; }
+
+FORCEINLINE BOOL ScreenToClient( HWND hWnd, LPPOINT lpPoint ) { return TRUE; }
+
+FORCEINLINE HWND SetCapture( HWND hWnd ) { return NULL; }
+
+FORCEINLINE BOOL ReleaseCapture() { return TRUE; }
+
+FORCEINLINE BOOL DeleteObject( HGDIOBJ hObject ) { return TRUE; }
+
+FORCEINLINE BOOL DeleteDC( HDC hdc ) { return TRUE; }
+
+FORCEINLINE HGDIOBJ SelectObject( HDC hdc, HGDIOBJ hgdiobj ) { return NULL; }
+
+FORCEINLINE BOOL GetComputerName( LPTSTR lpBuffer, LPDWORD nSize ) { return FALSE; }
+
+FORCEINLINE BOOL GetUserName( LPTSTR lpBuffer, LPDWORD nSize ) { return FALSE; }
+
+FORCEINLINE UINT SetErrorMode( UINT mode ) { return 0; }
+
+FORCEINLINE MCIERROR mciGetDeviceID( LPCTSTR ) { return 0; }
+
+FORCEINLINE MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback ) { return 0; }
+
+FORCEINLINE MCIERROR mciSendCommand( MCIDEVICEID, UINT, DWORD, DWORD ) { return (UINT)MCIERR_DRIVER; }
+
+FORCEINLINE BOOL mciGetErrorString( MCIERROR, LPTSTR, UINT ) { return false; };
+
+FORCEINLINE int UuidCreate( UUID *newId ) { return 0; };
+
+FORCEINLINE HANDLE CreateFileMapping( HANDLE, LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCTSTR ) { return NULL; }
+
+FORCEINLINE LPVOID MapViewOfFile( HANDLE, DWORD, DWORD, DWORD, SIZE_T ) { return NULL; }
+
+FORCEINLINE BOOL UnmapViewOfFile( LPCVOID ) { return false; }
+
+FORCEINLINE BOOL GetVersionEx( LPOSVERSIONINFO lpVersionInfo ) { lpVersionInfo->dwPlatformId = VER_PLATFORM_WIN32_NT; return true; }
+
+FORCEINLINE BOOL GlobalMemoryStatusEx( LPMEMORYSTATUSEX lpBuffer ) { return false; }
+
+FORCEINLINE BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode ) { return false; }
+
+FORCEINLINE BOOL HttpQueryInfo( HINTERNET hRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex ) { return false; }
+
+FORCEINLINE struct hostent FAR * _stdcall FAR gethostbyname( const char FAR * name ) { return NULL; }
+
+FORCEINLINE BOOL InternetReadFile(HINTERNET hFile, LPVOID lpBuffer, DWORD dwNumberOfBytesToRead, LPDWORD lpdwNumberOfBytesRead ) { return false; }
+
+FORCEINLINE BOOL InternetCloseHandle( HINTERNET hInternet ) { return false; }
+
+FORCEINLINE BOOL InternetCrackUrl( LPCSTR lpszUrl, DWORD dwUrlLength, DWORD dwFlags, LPURL_COMPONENTS lpUrlComponents ) { return false; }
+
+FORCEINLINE HINTERNET InternetOpen( LPCSTR lpszAgent, DWORD dwAccessType, LPCSTR lpszProxy OPTIONAL, LPCSTR lpszProxyBypass OPTIONAL, DWORD dwFlags ) { return 0; }
+
+FORCEINLINE INTERNET_STATUS_CALLBACK InternetSetStatusCallback( HINTERNET hInternet, INTERNET_STATUS_CALLBACK lpfnInternetCallback ) { return NULL; }
+
+FORCEINLINE HINTERNET InternetOpenUrl( HINTERNET hInternet, LPCSTR lpszUrl,LPCSTR lpszHeaders OPTIONAL, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext ) { return 0; }
+
+FORCEINLINE BOOL TerminateProcess( HANDLE, UINT ) { return false; }
+
+FORCEINLINE DWORD MsgWaitForMultipleObjects( DWORD, CONST HANDLE*, BOOL, DWORD, DWORD ) { return 0; }
+
+FORCEINLINE int gethostname( char *dest, int len ) { strncpy( dest, "localhost", len ); return 0; }
+
+FORCEINLINE BOOL GetProcessTimes( HANDLE, LPFILETIME ft1, LPFILETIME ft2, LPFILETIME ft3, LPFILETIME ft4 ) { return false; }
+
+//FORCEINLINE time_t Time(time_t *today) { ULARGE_INTEGER ul; GetSystemTimeAsFileTime( (FILETIME*)&ul ); if(today) *today=ul.QuadPart; return ul.QuadPart; }
+FORCEINLINE long Time(long *today) { ULARGE_INTEGER ul; GetSystemTimeAsFileTime( (FILETIME*)&ul ); if(today) *today=ul.QuadPart; return ul.QuadPart; }
+
+FORCEINLINE BOOL CreateProcess( LPCSTR lpApplicationName,
+ LPSTR lpCommandLine,
+ LPSECURITY_ATTRIBUTES lpProcessAttributes,
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,
+ BOOL bInheritHandles, DWORD dwCreationFlags,
+ LPVOID lpEnvironment, LPCSTR lpCurrentDirectory,
+ LPSTARTUPINFO lpStartupInfo,
+ LPPROCESS_INFORMATION lpProcessInformation )
+{
+ return false;
+}
+
+PLATFORM_INTERFACE DWORD g_dwProcessAffinityMask;
+
+FORCEINLINE bool GetProcessAffinityMask( HANDLE hProcess, DWORD *lpProcessAffinityMask, DWORD *lpSystemAffinityMask )
+{
+ *lpProcessAffinityMask = g_dwProcessAffinityMask;
+ *lpSystemAffinityMask = 0x01;
+ return true;
+}
+
+FORCEINLINE bool SetProcessAffinityMask( HANDLE hProcess, DWORD dwProcessAffinityMask )
+{
+ if ( dwProcessAffinityMask == 0 )
+ {
+ // invalid
+ return false;
+ }
+
+ g_dwProcessAffinityMask = dwProcessAffinityMask;
+ return true;
+}
+
+FORCEINLINE DWORD_PTR SetThreadAffinityMask( HANDLE hThread, DWORD_PTR dwThreadAffinityMask )
+{
+ if ( dwThreadAffinityMask == 0 )
+ {
+ // invalid
+ return 0;
+ }
+
+ // must select a specific processor, even if affinity mask specifies multiple.
+ // bit mask to enum will choose last valid processor
+ DWORD dwProcessor = 0;
+ while ( dwThreadAffinityMask >>= 1 )
+ dwProcessor++;
+
+ dwProcessor = XSetThreadProcessor( hThread, dwProcessor );
+ if ( dwProcessor == (DWORD)-1 )
+ {
+ // failed
+ return 0;
+ }
+
+ // back to bit mask
+ return ( 1<<dwProcessor );
+}
+
+// snd_win.cpp
+class IAudioDevice;
+class CAudioSource;
+FORCEINLINE IAudioDevice *Audio_CreateWaveDevice( void ) { return NULL; }
+FORCEINLINE IAudioDevice *Audio_CreateDirectSoundDevice( void ) { return NULL; }
+FORCEINLINE CAudioSource* Voice_SetupAudioSource( int soundsource, int entchannel ) { return NULL; }
+
+// snd_wave_source.cpp
+FORCEINLINE float GetMP3Duration_Helper( char const *filename ) { return 0.f; }
+
+// host.cpp
+FORCEINLINE void InitPME() {}
+FORCEINLINE void ShutdownPME() {}
+
+// Steam API stubs
+class ISteamClient;
+class ISteamGameServer;
+class ISteamUtils;
+class ISteamUser;
+class ISteamUserStats;
+class ISteamFriends;
+class ISteamMasterServerUpdater;
+enum EServerMode;
+FORCEINLINE ISteamClient *SteamClient() { return NULL; }
+FORCEINLINE ISteamGameServer *SteamGameServer() { return NULL; }
+FORCEINLINE ISteamUtils *SteamGameServerUtils() { return NULL; }
+FORCEINLINE ISteamUtils *SteamUtils() { return NULL; }
+FORCEINLINE ISteamUser *SteamUser() { return NULL; }
+FORCEINLINE ISteamUserStats *SteamUserStats() { return NULL; }
+FORCEINLINE ISteamFriends *SteamFriends() { return NULL; }
+FORCEINLINE int32 GetHSteamPipe() { return 0; }
+FORCEINLINE int32 GetHSteamUser() { return 0; }
+FORCEINLINE int32 SteamAPI_GetHSteamPipe() { return 0; }
+FORCEINLINE int32 SteamAPI_GetHSteamUser() { return 0; }
+FORCEINLINE ISteamMasterServerUpdater *SteamMasterServerUpdater() { return NULL; }
+FORCEINLINE bool SteamGameServer_Init( uint32 unIP, uint16 usPort, uint16 usGamePort, uint16 usSpectatorPort, uint16 usQueryPort, EServerMode eServerMode, int nGameAppId, const char *pchGameDir, const char *pchVersionString ) { return false; }
+FORCEINLINE void SteamGameServer_Shutdown() {}
+FORCEINLINE void SteamGameServer_RunCallbacks() {}
+
+FORCEINLINE int getch( void ) { return 0; }
+
+PLATFORM_INTERFACE LONG GetWindowLong( HWND hWnd, int nIndex );
+PLATFORM_INTERFACE LONG SetWindowLong( HWND hWnd, int nIndex, LONG dwNewLong );
+PLATFORM_INTERFACE LONG_PTR GetWindowLongPtr( HWND hWnd, int nIndex );
+PLATFORM_INTERFACE LONG_PTR SetWindowLongPtr( HWND hWnd, int nIndex, LONG dwNewLong );
+PLATFORM_INTERFACE LONG_PTR GetWindowLongPtrW( HWND hWnd, int nIndex ); // false stub -- no work has been done to make unicode version of this function on 360
+PLATFORM_INTERFACE LONG_PTR SetWindowLongPtrW( HWND hWnd, int nIndex, LONG dwNewLong ); // false stub -- no work has been done to make unicode version of this function on 360
+PLATFORM_INTERFACE HWND CreateWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam );
+PLATFORM_INTERFACE HWND CreateWindowEx( DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam );
+PLATFORM_INTERFACE BOOL DestroyWindow( HWND hWnd );
+PLATFORM_INTERFACE ATOM RegisterClassEx( CONST WNDCLASSEX *lpwcx );
+PLATFORM_INTERFACE ATOM RegisterClass( CONST WNDCLASS *lpwc );
+PLATFORM_INTERFACE HWND GetFocus( VOID );
+PLATFORM_INTERFACE HWND SetFocus( HWND hWnd );
+PLATFORM_INTERFACE int GetSystemMetrics( int nIndex );
+PLATFORM_INTERFACE BOOL ShowWindow( HWND hWnd, int nCmdShow );
+PLATFORM_INTERFACE LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
+PLATFORM_INTERFACE LRESULT CallWindowProc( WNDPROC lpPrevWndFunc, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
+PLATFORM_INTERFACE BOOL GetClientRect( HWND hwnd, LPRECT lpRect );
+PLATFORM_INTERFACE int GetDeviceCaps( HDC hdc, int nIndex );
+PLATFORM_INTERFACE LRESULT SendMessageTimeout( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT fuFlags, UINT uTimeout, PDWORD_PTR lpdwResult );
+PLATFORM_INTERFACE BOOL SetWindowPos( HWND hWnd, HWND hWndInsertAfter, int x, int y, int cx, int cy, UINT uFlags );
+
+
+
+
+
+
+
+
diff --git a/common/xbox/xboxstubs.h b/common/xbox/xboxstubs.h
new file mode 100644
index 0000000..fa3448f
--- /dev/null
+++ b/common/xbox/xboxstubs.h
@@ -0,0 +1,237 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Win32 replacements for XBox.
+//
+//=============================================================================
+
+#if !defined( XBOXSTUBS_H ) && !defined( _X360 )
+#define XBOXSTUBS_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier0/platform.h"
+
+// Content creation/open flags
+#define XCONTENTFLAG_NONE 0x00
+#define XCONTENTFLAG_CREATENEW 0x00
+#define XCONTENTFLAG_CREATEALWAYS 0x00
+#define XCONTENTFLAG_OPENEXISTING 0x00
+#define XCONTENTFLAG_OPENALWAYS 0x00
+#define XCONTENTFLAG_TRUNCATEEXISTING 0x00
+
+// Content attributes
+#define XCONTENTFLAG_NOPROFILE_TRANSFER 0x00
+#define XCONTENTFLAG_NODEVICE_TRANSFER 0x00
+#define XCONTENTFLAG_STRONG_SIGNED 0x00
+#define XCONTENTFLAG_ALLOWPROFILE_TRANSFER 0x00
+#define XCONTENTFLAG_MOVEONLY_TRANSFER 0x00
+
+// Console device ports
+#define XDEVICE_PORT0 0
+#define XDEVICE_PORT1 1
+#define XDEVICE_PORT2 2
+#define XDEVICE_PORT3 3
+#define XUSER_MAX_COUNT 4
+#define XUSER_INDEX_NONE 0x000000FE
+
+#define XBX_CLR_DEFAULT 0xFF000000
+#define XBX_CLR_WARNING 0x0000FFFF
+#define XBX_CLR_ERROR 0x000000FF
+
+#define XBOX_MINBORDERSAFE 0
+#define XBOX_MAXBORDERSAFE 0
+
+typedef enum
+{
+ XK_NULL,
+ XK_BUTTON_UP,
+ XK_BUTTON_DOWN,
+ XK_BUTTON_LEFT,
+ XK_BUTTON_RIGHT,
+ XK_BUTTON_START,
+ XK_BUTTON_BACK,
+ XK_BUTTON_STICK1,
+ XK_BUTTON_STICK2,
+ XK_BUTTON_A,
+ XK_BUTTON_B,
+ XK_BUTTON_X,
+ XK_BUTTON_Y,
+ XK_BUTTON_LEFT_SHOULDER,
+ XK_BUTTON_RIGHT_SHOULDER,
+ XK_BUTTON_LTRIGGER,
+ XK_BUTTON_RTRIGGER,
+ XK_STICK1_UP,
+ XK_STICK1_DOWN,
+ XK_STICK1_LEFT,
+ XK_STICK1_RIGHT,
+ XK_STICK2_UP,
+ XK_STICK2_DOWN,
+ XK_STICK2_LEFT,
+ XK_STICK2_RIGHT,
+ XK_MAX_KEYS,
+} xKey_t;
+
+//typedef enum
+//{
+// XVRB_NONE, // off
+// XVRB_ERROR, // fatal error
+// XVRB_ALWAYS, // no matter what
+// XVRB_WARNING, // non-fatal warnings
+// XVRB_STATUS, // status reports
+// XVRB_ALL,
+//} xverbose_e;
+
+typedef unsigned short WORD;
+#ifndef POSIX
+typedef unsigned long DWORD;
+typedef void* HANDLE;
+typedef unsigned __int64 ULONGLONG;
+#endif
+
+#ifdef POSIX
+typedef DWORD COLORREF;
+#endif
+
+#ifndef INVALID_HANDLE_VALUE
+#define INVALID_HANDLE_VALUE ((HANDLE)-1)
+#endif
+
+// typedef struct {
+// IN_ADDR ina; // IP address (zero if not static/DHCP)
+// IN_ADDR inaOnline; // Online IP address (zero if not online)
+// WORD wPortOnline; // Online port
+// BYTE abEnet[6]; // Ethernet MAC address
+// BYTE abOnline[20]; // Online identification
+// } XNADDR;
+
+typedef int XNADDR;
+typedef uint64 XUID;
+
+typedef struct {
+ BYTE ab[8]; // xbox to xbox key identifier
+} XNKID;
+
+typedef struct {
+ BYTE ab[16]; // xbox to xbox key exchange key
+} XNKEY;
+
+typedef struct _XSESSION_INFO
+{
+ XNKID sessionID; // 8 bytes
+ XNADDR hostAddress; // 36 bytes
+ XNKEY keyExchangeKey; // 16 bytes
+} XSESSION_INFO, *PXSESSION_INFO;
+
+typedef struct _XUSER_DATA
+{
+ BYTE type;
+
+ union
+ {
+ int nData; // XUSER_DATA_TYPE_INT32
+ int64 i64Data; // XUSER_DATA_TYPE_INT64
+ double dblData; // XUSER_DATA_TYPE_DOUBLE
+ struct // XUSER_DATA_TYPE_UNICODE
+ {
+ uint cbData; // Includes null-terminator
+ char * pwszData;
+ } string;
+ float fData; // XUSER_DATA_TYPE_FLOAT
+ struct // XUSER_DATA_TYPE_BINARY
+ {
+ uint cbData;
+ char * pbData;
+ } binary;
+ };
+} XUSER_DATA, *PXUSER_DATA;
+
+typedef struct _XUSER_PROPERTY
+{
+ DWORD dwPropertyId;
+ XUSER_DATA value;
+} XUSER_PROPERTY, *PXUSER_PROPERTY;
+
+typedef struct _XUSER_CONTEXT
+{
+ DWORD dwContextId;
+ DWORD dwValue;
+} XUSER_CONTEXT, *PXUSER_CONTEXT;
+
+typedef struct _XSESSION_SEARCHRESULT
+{
+ XSESSION_INFO info;
+ DWORD dwOpenPublicSlots;
+ DWORD dwOpenPrivateSlots;
+ DWORD dwFilledPublicSlots;
+ DWORD dwFilledPrivateSlots;
+ DWORD cProperties;
+ DWORD cContexts;
+ PXUSER_PROPERTY pProperties;
+ PXUSER_CONTEXT pContexts;
+} XSESSION_SEARCHRESULT, *PXSESSION_SEARCHRESULT;
+
+typedef struct _XSESSION_SEARCHRESULT_HEADER
+{
+ DWORD dwSearchResults;
+ XSESSION_SEARCHRESULT *pResults;
+} XSESSION_SEARCHRESULT_HEADER, *PXSESSION_SEARCHRESULT_HEADER;
+
+typedef struct _XSESSION_REGISTRANT
+{
+ uint64 qwMachineID;
+ DWORD bTrustworthiness;
+ DWORD bNumUsers;
+ XUID *rgUsers;
+
+} XSESSION_REGISTRANT;
+
+typedef struct _XSESSION_REGISTRATION_RESULTS
+{
+ DWORD wNumRegistrants;
+ XSESSION_REGISTRANT *rgRegistrants;
+} XSESSION_REGISTRATION_RESULTS, *PXSESSION_REGISTRATION_RESULTS;
+
+typedef struct {
+ BYTE bFlags;
+ BYTE bReserved;
+ WORD cProbesXmit;
+ WORD cProbesRecv;
+ WORD cbData;
+ BYTE * pbData;
+ WORD wRttMinInMsecs;
+ WORD wRttMedInMsecs;
+ DWORD dwUpBitsPerSec;
+ DWORD dwDnBitsPerSec;
+} XNQOSINFO;
+
+typedef struct {
+ uint cxnqos;
+ uint cxnqosPending;
+ XNQOSINFO axnqosinfo[1];
+} XNQOS;
+
+#define XSESSION_CREATE_HOST 0
+#define XUSER_DATA_TYPE_INT32 0
+#define XSESSION_CREATE_USES_ARBITRATION 0
+#define XNET_QOS_LISTEN_ENABLE 0
+#define XNET_QOS_LISTEN_DISABLE 0
+#define XNET_QOS_LISTEN_SET_DATA 0
+
+FORCEINLINE void XBX_ProcessEvents() {}
+FORCEINLINE unsigned int XBX_GetSystemTime() { return 0; }
+FORCEINLINE int XBX_GetPrimaryUserId() { return 0; }
+FORCEINLINE void XBX_SetPrimaryUserId( DWORD idx ) {}
+FORCEINLINE int XBX_GetStorageDeviceId() { return 0; }
+FORCEINLINE void XBX_SetStorageDeviceId( DWORD idx ) {}
+FORCEINLINE const char *XBX_GetLanguageString() { return ""; }
+FORCEINLINE bool XBX_IsLocalized() { return false; }
+
+#define XCONTENT_MAX_DISPLAYNAME_LENGTH 128
+#define XCONTENT_MAX_FILENAME_LENGTH 42
+
+#define XBX_INVALID_STORAGE_ID ((DWORD) -1)
+#define XBX_STORAGE_DECLINED ((DWORD) -2)
+
+#endif // XBOXSTUBS_H