From 561540331b7fc6e1f179b506e991c60b6ac85c7b Mon Sep 17 00:00:00 2001 From: jummy Date: Fri, 16 Aug 2024 21:24:15 -0500 Subject: [PATCH] a --- .gitignore | 4 + .gitmodules | 3 + Eggbert2.aps | Bin 16584 -> 0 bytes RCa19860 | Bin 0 -> 2970 bytes RCb19860 | Bin 0 -> 15152 bytes RCc19860 | Bin 0 -> 15152 bytes RCd19860 | Bin 0 -> 33184 bytes arrow.cur | Bin 0 -> 326 bytes arrowdl.cur | Bin 0 -> 326 bytes arrowdow.cur | Bin 0 -> 326 bytes arrowdr.cur | Bin 0 -> 326 bytes arrowlef.cur | Bin 0 -> 326 bytes arrowrig.cur | Bin 0 -> 326 bytes arrowul.cur | Bin 0 -> 326 bytes arrowup.cur | Bin 0 -> 326 bytes arrowur.cur | Bin 0 -> 326 bytes blupi-d.aps | Bin 0 -> 48268 bytes blupi-e.aps | Bin 0 -> 47064 bytes blupi-f.aps | Bin 0 -> 48072 bytes blupi.cpp | 18 +- blupi.ico | Bin 0 -> 766 bytes blupi.rct | Bin 0 -> 26084 bytes cursor1.cur | Bin 326 -> 326 bytes ddraw.h | 5856 ----------------------------------- ddutil.cpp | 2 +- ddutil.h | 35 +- decblock.cpp | 124 +- decblupi.cpp | 53 +- decdesign.cpp | 26 +- decor.cpp | 646 ++-- decor.h | 16 +- def.h | 183 +- dplay.h | 2154 ------------- dsound.h | 2385 -------------- empty.cur | Bin 0 -> 326 bytes event.cpp | 4 +- fill.cur | Bin 0 -> 326 bytes map.cur | Bin 0 -> 326 bytes misc.h | 4 - network.cpp | 4 +- resource.h | 161 +- resource2.h | 14 + resrc1.h | 19 + rstemp.rct | Bin 0 -> 464 bytes speedy.aps | Bin 0 -> 22236 bytes speedy.rc | 63 + speedyblupi.aps | Bin 0 -> 1348 bytes speedyblupi.dsp | 335 ++ speedyblupi.dsw | 29 + speedyblupi.ncb | Bin 0 -> 189440 bytes speedyblupi.opt | Bin 0 -> 48640 bytes speedyblupi.plg | 109 + speedyblupi.rc | Bin 0 -> 2668 bytes speedyblupi.vcxproj | 31 +- speedyblupi.vcxproj.filters | 21 +- speedyblupi.vcxproj.user | 4 + text.cpp | 22 +- text.h | 4 +- wait.cur | Bin 0 -> 326 bytes 59 files changed, 1301 insertions(+), 11028 deletions(-) create mode 100644 .gitmodules delete mode 100644 Eggbert2.aps create mode 100644 RCa19860 create mode 100644 RCb19860 create mode 100644 RCc19860 create mode 100644 RCd19860 create mode 100644 arrow.cur create mode 100644 arrowdl.cur create mode 100644 arrowdow.cur create mode 100644 arrowdr.cur create mode 100644 arrowlef.cur create mode 100644 arrowrig.cur create mode 100644 arrowul.cur create mode 100644 arrowup.cur create mode 100644 arrowur.cur create mode 100644 blupi-d.aps create mode 100644 blupi-e.aps create mode 100644 blupi-f.aps create mode 100644 blupi.ico create mode 100644 blupi.rct delete mode 100644 ddraw.h delete mode 100644 dplay.h delete mode 100644 dsound.h create mode 100644 empty.cur create mode 100644 fill.cur create mode 100644 map.cur create mode 100644 resource2.h create mode 100644 resrc1.h create mode 100644 rstemp.rct create mode 100644 speedy.aps create mode 100644 speedy.rc create mode 100644 speedyblupi.aps create mode 100644 speedyblupi.dsp create mode 100644 speedyblupi.dsw create mode 100644 speedyblupi.ncb create mode 100644 speedyblupi.opt create mode 100644 speedyblupi.plg create mode 100644 speedyblupi.rc create mode 100644 speedyblupi.vcxproj.user create mode 100644 wait.cur diff --git a/.gitignore b/.gitignore index 33dd79f..57cf324 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,7 @@ /Debug /x64 /Speedy E.e424a3cb +/DATA +/IMAGE* +/MOVIE +/SOUND diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..bf35d7f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "dxsdk3"] + path = dxsdk3 + url = https://github.com/masonmc/dxsdk3.git diff --git a/Eggbert2.aps b/Eggbert2.aps deleted file mode 100644 index a8d79010ec0b21d417e2abc041d8ac3ee74e2444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16584 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 pjTgP$@Ta7@A(>(w*7|9-k{|~rW)*b)= diff --git a/RCa19860 b/RCa19860 new file mode 100644 index 0000000000000000000000000000000000000000..88a61d5e141ef223f05ce8102afdd6c19b8df97b GIT binary patch literal 2970 zcmd6pTW{Jx5QWckrT&L4yfo?+0=>NvNJ&~kssK?dMM5c;1}QNpCaNO!$M>6EyWwI= z)AqqyfxY9Moik_Wj9t{FCWj*{M+mUYpxi#e%8=b1Kltm;WP48+wW2lE?)E^u4ZCw0_?*M<&ttiDdPuNt#swbjxWEFJ!jw1=g|eTv6& z&)-PVrB|mW`C6`voR68=$vYUn@H}?O`ZGKnl69RtjgNhvm-($Sy!}kRdwzpo_Gy&Z zImMVi77dZ1D^kIcSIQV3{;pP*RTHW(pBblF+tqRU5qh;Q6jLKkkEw}>S*qI(cR|Im zb~36YP8eM5V{a1M1O+-hN|+5=91@|X_f%ofUtWjewX~8X{tAe&a>2> zJ`a_DcW!09_8FF7Y_sPcdp3RlF#k<``Ajd9-fZU+m|IlHZqgU5?_|evJh2F?@ru6Z zEWaBHTJJ;!-gejgq6CM{w_yr(yL)d;_l;ChC8)YP@cO9atppbm?Q}ka#S*nWo8nUm} HKT+3D8PIG^ literal 0 HcmV?d00001 diff --git a/RCb19860 b/RCb19860 new file mode 100644 index 0000000000000000000000000000000000000000..820cdfb8a1f32136b0ffc0ac91ac97335b130e81 GIT binary patch literal 15152 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 literal 0 HcmV?d00001 diff --git a/RCc19860 b/RCc19860 new file mode 100644 index 0000000000000000000000000000000000000000..820cdfb8a1f32136b0ffc0ac91ac97335b130e81 GIT binary patch literal 15152 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 literal 0 HcmV?d00001 diff --git a/RCd19860 b/RCd19860 new file mode 100644 index 0000000000000000000000000000000000000000..ec7aa271cc5bec1e5032eb520a5e93cecfe07e3e GIT binary patch literal 33184 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 literal 0 HcmV?d00001 diff --git a/arrow.cur b/arrow.cur new file mode 100644 index 0000000000000000000000000000000000000000..d8d49b4cf52950a0e9aadc53dc549d20418a1c30 GIT binary patch literal 326 zcmb8pI}XAy41i&qNHD_0+Ke50gJkMCdH@E-3<&4g3>D^2X{RpW=<`ca6p@3d#3)M) zDsrXk5s{&s7In${ST5JkU90Y#*Al-MO@Hn3MgS%5C3*?^VUBpHE{BGTpIq)Qj^t#|+Y?_^o3 zdGmK)Hak+Gq^6N- zx=qqe(j8FhAkka(|G6KwL)KY3K>|gV;Vu&!-qPbm7Sb82{bvV_*<$xF!U7rAIM3wf UhbwPd^2vR%Kdb!(=YTj?KYM0>`2YX_ literal 0 HcmV?d00001 diff --git a/arrowlef.cur b/arrowlef.cur new file mode 100644 index 0000000000000000000000000000000000000000..c40f7815fdbd318d2952f5e3cddb3729ee236e3d GIT binary patch literal 326 zcmZ{eu?>Vk3zM z>PaReNqma=pYO@c?&gbA(-)1?Qo9ZKITKYx-?7$A%*Q^hOYjemanKdJvr@(4l*&xZ R4yYpf!dk?9?8m*he*!a~e((SQ literal 0 HcmV?d00001 diff --git a/arrowrig.cur b/arrowrig.cur new file mode 100644 index 0000000000000000000000000000000000000000..ca8e1aa29359fd791648fd9ecc959703814673d3 GIT binary patch literal 326 zcmZ|Ju@S;B5Jb^02%Nw;BgG*h9YAMNX)c8l2#G9q#VNt|X`XiO&Ylq*NK6x)IdM;L z0dArZPf0qi((d(DYh4fbCPfRI!wa&#!$)bo*AAOQQQBYW4V$%S+GM3Y!c{4ZVNlvJ P^gj0fw(0+8^;UnrA9#8- literal 0 HcmV?d00001 diff --git a/arrowul.cur b/arrowul.cur new file mode 100644 index 0000000000000000000000000000000000000000..f2356d4d8020b6cecc828ed273eaec3cb7b70981 GIT binary patch literal 326 zcmbV`u?@m76hzOV2t_11O5&1|4U$z53(!$I8)T(y5=Nk;Ksw%!(xuB;@89>?mcLXf zDQ7LZCFx9eg$z9;R%lr2w%Fc=dy~wcPxwmrpY*_AAE~@yf&sL8WSobXVYdn|gKmb= aZfpB;u$yEbak1A4TIisxedOF>3jYC9!FDYG literal 0 HcmV?d00001 diff --git a/arrowup.cur b/arrowup.cur new file mode 100644 index 0000000000000000000000000000000000000000..7390bf51757c1aef910e5d29d68ffad6ccb30ec2 GIT binary patch literal 326 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 literal 0 HcmV?d00001 diff --git a/blupi-e.aps b/blupi-e.aps new file mode 100644 index 0000000000000000000000000000000000000000..f864504c22726a976de84a61605397fa61013d4d GIT binary patch literal 47064 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 literal 0 HcmV?d00001 diff --git a/blupi.cpp b/blupi.cpp index 8b7f2d5..562b326 100644 --- a/blupi.cpp +++ b/blupi.cpp @@ -33,14 +33,14 @@ // Variables Globals -HWND g_hWnd; // handle aÌ€ la feneÌ‚tre +HWND g_hWnd; // handle à la fenètre CEvent* g_pEvent = NULL; CPixmap* g_pPixmap = NULL; // pixmap principal CSound* g_pSound = NULL; // sound principal CMovie* g_pMovie = NULL; // movie principal CDecor* g_pDecor = NULL; CNetwork* g_pNetwork; -char g_CDPath[MAX_PATH]; // chemin d'acceÌ€s au CD-Rom +char g_CDPath[MAX_PATH]; // chemin d'accès au CD-Rom BOOL g_bFullScreen = FALSE; // FALSE si mode de test int g_speedRate = 1; int g_timerInterval = 50; // inverval = 50ms @@ -51,7 +51,7 @@ BOOL g_bTrueColorBack; BOOL g_bTrueColorDecor; BOOL g_bCDAudio; int g_something; -MMRESULT g_updateTimer; // timer général +MMRESULT g_updateTimer; // timer général BOOL g_bActive = TRUE; // is application active ? BOOL g_bTermInit = FALSE; // initialisation en cours int g_objectMax; @@ -62,7 +62,7 @@ int g_exploMax; UINT g_lastPhase = 999; -// Lit un numéro décimal. +// Lit un numéro décimal. int GetNum(char *p) { @@ -233,7 +233,7 @@ BOOL ReadConfig (LPSTR lpCmdLine) return TRUE; } -// Mise aÌ€ jour principale. [TODO: Rewrite Variables] +// Mise à jour principale. [TODO: Rewrite Variables] void UpdateFrame(void) { @@ -364,7 +364,7 @@ int Benchmark() } -// Restitue le jeu après une activation en mode fullScreen. +// Restitue le jeu après une activation en mode fullScreen. BOOL RestoreGame() { @@ -374,7 +374,7 @@ BOOL RestoreGame() return g_pPixmap->Restore(); } -// Libère le jeu avant une désactivation en mode fullScreen. +// Libère le jeu avant une désactivation en mode fullScreen. BOOL FlushGame() { @@ -506,7 +506,7 @@ LRESULT CALLBACK WindowProc (HWND hWnd, UINT message, SetWindowTextA(hWnd, "Blupi"); if ( g_pSound != NULL ) g_pSound->RestartMusic(); } - else // désactive ? + else // désactive ? { if ( g_bFullScreen ) { @@ -710,7 +710,7 @@ static BOOL DoInit(HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow) return InitFail("Game not correctly installed", FALSE); } - // Crée le pixmap principal. + // Crée le pixmap principal. g_pPixmap = new CPixmap; if (g_pPixmap == NULL) return InitFail("New pixmap", TRUE); diff --git a/blupi.ico b/blupi.ico new file mode 100644 index 0000000000000000000000000000000000000000..c825fe0d9486d6858a361edec3b4c12daa3acb32 GIT binary patch literal 766 zcmZ`%J5Iwu5Pil-8{`5iT2fM4+9Huszzw*Hr4){oA}hHdT@K?Sk+#_za7j&}?{9GcA2^o`HMa;M(5ge? z0}`x4MU|75SNX)m3I)SU#^n~V;{vl*BVenhX4BWGMic9|5 zQ}m$xm$%VBiT9bA_hnwjCbU1$sbgh<^ukN>%CXDXE>QR#KLz`X>7129ML!LHfSAZuWe zm^25GJcwjr^$QMi4B7q|^3Bm@n|FuJC$J};K03V7cDSa!`$~BD1{5p)T?!G_5|<@} MT;!lIBCmV-0knF-3;+NC literal 0 HcmV?d00001 diff --git a/blupi.rct b/blupi.rct new file mode 100644 index 0000000000000000000000000000000000000000..7400333fc6a3243d186fc2177bc4bca0ce636265 GIT binary patch literal 26084 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 literal 0 HcmV?d00001 diff --git a/cursor1.cur b/cursor1.cur index 850ce01cfd00e6b13765eff43a49c3bc5cc7ae21..aa9f335f706cb06bd03bf3c854da0e47910f2847 100644 GIT binary patch literal 326 zcmbV`Ar1mD6hx;~tOJK4X(bYg+dT?L;0E+)Jp~$%AwjT$WO%JXtb+M@Kl4X)DyOkmA;qD_A>l6iA8!2#G$2H`Hnt27*?HSg{Kt23OSi9h_W eGSZf4`qJ)qXY{Pm4_$ntrAE8Z6aec1Ht+#%!FHkm literal 326 zcmZQzU}9ioP*7lC5MbbBFkob05My9q&;Vkf5Q75{GXfz9G=ND6!33m07zF;Sp}6+CGE|NoyoP^_Ld7-Tlc4k!QsO*VG< diff --git a/ddraw.h b/ddraw.h deleted file mode 100644 index 4b72177..0000000 --- a/ddraw.h +++ /dev/null @@ -1,5856 +0,0 @@ -/*==========================================================================; - * - * Copyright (C) Microsoft Corporation. All Rights Reserved. - * - * File: ddraw.h - * Content: DirectDraw include file - * - ***************************************************************************/ - -#ifndef __DDRAW_INCLUDED__ -#define __DDRAW_INCLUDED__ - -//Disable the nameless union warning when building internally -#undef ENABLE_NAMELESS_UNION_PRAGMA -#ifdef DIRECTX_REDIST -#define ENABLE_NAMELESS_UNION_PRAGMA -#endif - -#ifdef ENABLE_NAMELESS_UNION_PRAGMA -#pragma warning(disable:4201) -#endif - -/* - * If you wish an application built against the newest version of DirectDraw - * to run against an older DirectDraw run time then define DIRECTDRAW_VERSION - * to be the earlies version of DirectDraw you wish to run against. For, - * example if you wish an application to run against a DX 3 runtime define - * DIRECTDRAW_VERSION to be 0x0300. - */ -#ifndef DIRECTDRAW_VERSION -#define DIRECTDRAW_VERSION 0x0700 -#endif /* DIRECTDRAW_VERSION */ - -#if defined( _WIN32 ) && !defined( _NO_COM ) -#define COM_NO_WINDOWS_H -#include -#else -#define IUnknown void -#if !defined( NT_BUILD_ENVIRONMENT ) && !defined(WINNT) - #define CO_E_NOTINITIALIZED 0x800401F0L -#endif -#endif - -#define _FACDD 0x876 -#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) - -#ifdef __cplusplus -extern "C" { -#endif - -// -// For compilers that don't support nameless unions, do a -// -// #define NONAMELESSUNION -// -// before #include -// -#ifndef DUMMYUNIONNAMEN -#if defined(__cplusplus) || !defined(NONAMELESSUNION) -#define DUMMYUNIONNAMEN(n) -#else -#define DUMMYUNIONNAMEN(n) u##n -#endif -#endif - -#ifndef MAKEFOURCC - #define MAKEFOURCC(ch0, ch1, ch2, ch3) \ - ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ - ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) -#endif //defined(MAKEFOURCC) - -/* - * FOURCC codes for DX compressed-texture pixel formats - */ -#define FOURCC_DXT1 (MAKEFOURCC('D','X','T','1')) -#define FOURCC_DXT2 (MAKEFOURCC('D','X','T','2')) -#define FOURCC_DXT3 (MAKEFOURCC('D','X','T','3')) -#define FOURCC_DXT4 (MAKEFOURCC('D','X','T','4')) -#define FOURCC_DXT5 (MAKEFOURCC('D','X','T','5')) - -/* - * GUIDS used by DirectDraw objects - */ -#if defined( _WIN32 ) && !defined( _NO_COM ) - -DEFINE_GUID( CLSID_DirectDraw, 0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 ); -DEFINE_GUID( CLSID_DirectDraw7, 0x3c305196,0x50db,0x11d3,0x9c,0xfe,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); -DEFINE_GUID( CLSID_DirectDrawClipper, 0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 ); -DEFINE_GUID( IID_IDirectDraw, 0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDraw2, 0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 ); -DEFINE_GUID( IID_IDirectDraw4, 0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 ); -DEFINE_GUID( IID_IDirectDraw7, 0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); -DEFINE_GUID( IID_IDirectDrawSurface, 0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDrawSurface2, 0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 ); -DEFINE_GUID( IID_IDirectDrawSurface3, 0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB ); -DEFINE_GUID( IID_IDirectDrawSurface4, 0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B ); -DEFINE_GUID( IID_IDirectDrawSurface7, 0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b ); -DEFINE_GUID( IID_IDirectDrawPalette, 0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDrawClipper, 0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 ); -DEFINE_GUID( IID_IDirectDrawColorControl, 0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 ); -DEFINE_GUID( IID_IDirectDrawGammaControl, 0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E ); - -#endif - -/*============================================================================ - * - * DirectDraw Structures - * - * Various structures used to invoke DirectDraw. - * - *==========================================================================*/ - -struct IDirectDraw; -struct IDirectDrawSurface; -struct IDirectDrawPalette; -struct IDirectDrawClipper; - -typedef struct IDirectDraw FAR *LPDIRECTDRAW; -typedef struct IDirectDraw2 FAR *LPDIRECTDRAW2; -typedef struct IDirectDraw4 FAR *LPDIRECTDRAW4; -typedef struct IDirectDraw7 FAR *LPDIRECTDRAW7; -typedef struct IDirectDrawSurface FAR *LPDIRECTDRAWSURFACE; -typedef struct IDirectDrawSurface2 FAR *LPDIRECTDRAWSURFACE2; -typedef struct IDirectDrawSurface3 FAR *LPDIRECTDRAWSURFACE3; -typedef struct IDirectDrawSurface4 FAR *LPDIRECTDRAWSURFACE4; -typedef struct IDirectDrawSurface7 FAR *LPDIRECTDRAWSURFACE7; -typedef struct IDirectDrawPalette FAR *LPDIRECTDRAWPALETTE; -typedef struct IDirectDrawClipper FAR *LPDIRECTDRAWCLIPPER; -typedef struct IDirectDrawColorControl FAR *LPDIRECTDRAWCOLORCONTROL; -typedef struct IDirectDrawGammaControl FAR *LPDIRECTDRAWGAMMACONTROL; - -typedef struct _DDFXROP FAR *LPDDFXROP; -typedef struct _DDSURFACEDESC FAR *LPDDSURFACEDESC; -typedef struct _DDSURFACEDESC2 FAR *LPDDSURFACEDESC2; -typedef struct _DDCOLORCONTROL FAR *LPDDCOLORCONTROL; - -/* - * API's - */ -#if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM ) -//#if defined( _WIN32 ) && !defined( _NO_ENUM ) - typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID); - typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID); - extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext ); - extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext ); - /* - * Protect against old SDKs - */ - #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) - #define HMONITOR_DECLARED - DECLARE_HANDLE(HMONITOR); - #endif - typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXA)(GUID FAR *, LPSTR, LPSTR, LPVOID, HMONITOR); - typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID, HMONITOR); - extern HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); - extern HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); - typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags); - typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags); - - #ifdef UNICODE - typedef LPDDENUMCALLBACKW LPDDENUMCALLBACK; - #define DirectDrawEnumerate DirectDrawEnumerateW - typedef LPDDENUMCALLBACKEXW LPDDENUMCALLBACKEX; - typedef LPDIRECTDRAWENUMERATEEXW LPDIRECTDRAWENUMERATEEX; - #define DirectDrawEnumerateEx DirectDrawEnumerateExW - #else - typedef LPDDENUMCALLBACKA LPDDENUMCALLBACK; - #define DirectDrawEnumerate DirectDrawEnumerateA - typedef LPDDENUMCALLBACKEXA LPDDENUMCALLBACKEX; - typedef LPDIRECTDRAWENUMERATEEXA LPDIRECTDRAWENUMERATEEX; - #define DirectDrawEnumerateEx DirectDrawEnumerateExA - #endif - extern HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter ); - extern HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID *lplpDD, REFIID iid,IUnknown FAR *pUnkOuter ); - extern HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter ); -#endif -/* - * Flags for DirectDrawEnumerateEx - * DirectDrawEnumerateEx supercedes DirectDrawEnumerate. You must use GetProcAddress to - * obtain a function pointer (of type LPDIRECTDRAWENUMERATEEX) to DirectDrawEnumerateEx. - * By default, only the primary display device is enumerated. - * DirectDrawEnumerate is equivalent to DirectDrawEnumerate(,,DDENUM_NONDISPLAYDEVICES) - */ - -/* - * This flag causes enumeration of any GDI display devices which are part of - * the Windows Desktop - */ -#define DDENUM_ATTACHEDSECONDARYDEVICES 0x00000001L - -/* - * This flag causes enumeration of any GDI display devices which are not - * part of the Windows Desktop - */ -#define DDENUM_DETACHEDSECONDARYDEVICES 0x00000002L - -/* - * This flag causes enumeration of non-display devices - */ -#define DDENUM_NONDISPLAYDEVICES 0x00000004L - - -#define REGSTR_KEY_DDHW_DESCRIPTION "Description" -#define REGSTR_KEY_DDHW_DRIVERNAME "DriverName" -#define REGSTR_PATH_DDHW "Hardware\\DirectDrawDrivers" - -#define DDCREATE_HARDWAREONLY 0x00000001l -#define DDCREATE_EMULATIONONLY 0x00000002l - -#if defined(WINNT) || !defined(WIN32) -#ifndef _HRESULT_DEFINED -#define _HRESULT_DEFINED -typedef __success(return >= 0) long HRESULT; -#endif // !_HRESULT_DEFINED -#endif - -//#ifndef WINNT -typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID); -typedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK2)(LPDDSURFACEDESC2, LPVOID); -typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID); -typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID); -typedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK7)(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID); -//#endif - -/* - * Generic pixel format with 8-bit RGB and alpha components - */ -typedef struct _DDARGB -{ - BYTE blue; - BYTE green; - BYTE red; - BYTE alpha; -} DDARGB; - -typedef DDARGB FAR *LPDDARGB; - -/* - * This version of the structure remains for backwards source compatibility. - * The DDARGB structure is the one that should be used for all DirectDraw APIs. - */ -typedef struct _DDRGBA -{ - BYTE red; - BYTE green; - BYTE blue; - BYTE alpha; -} DDRGBA; - -typedef DDRGBA FAR *LPDDRGBA; - - -/* - * DDCOLORKEY - */ -typedef struct _DDCOLORKEY -{ - DWORD dwColorSpaceLowValue; // low boundary of color space that is to - // be treated as Color Key, inclusive - DWORD dwColorSpaceHighValue; // high boundary of color space that is - // to be treated as Color Key, inclusive -} DDCOLORKEY; - -typedef DDCOLORKEY FAR* LPDDCOLORKEY; - -/* - * DDBLTFX - * Used to pass override information to the DIRECTDRAWSURFACE callback Blt. - */ -typedef struct _DDBLTFX -{ - DWORD dwSize; // size of structure - DWORD dwDDFX; // FX operations - DWORD dwROP; // Win32 raster operations - DWORD dwDDROP; // Raster operations new for DirectDraw - DWORD dwRotationAngle; // Rotation angle for blt - DWORD dwZBufferOpCode; // ZBuffer compares - DWORD dwZBufferLow; // Low limit of Z buffer - DWORD dwZBufferHigh; // High limit of Z buffer - DWORD dwZBufferBaseDest; // Destination base value - DWORD dwZDestConstBitDepth; // Bit depth used to specify Z constant for destination - union - { - DWORD dwZDestConst; // Constant to use as Z buffer for dest - LPDIRECTDRAWSURFACE lpDDSZBufferDest; // Surface to use as Z buffer for dest - } DUMMYUNIONNAMEN(1); - DWORD dwZSrcConstBitDepth; // Bit depth used to specify Z constant for source - union - { - DWORD dwZSrcConst; // Constant to use as Z buffer for src - LPDIRECTDRAWSURFACE lpDDSZBufferSrc; // Surface to use as Z buffer for src - } DUMMYUNIONNAMEN(2); - DWORD dwAlphaEdgeBlendBitDepth; // Bit depth used to specify constant for alpha edge blend - DWORD dwAlphaEdgeBlend; // Alpha for edge blending - DWORD dwReserved; - DWORD dwAlphaDestConstBitDepth; // Bit depth used to specify alpha constant for destination - union - { - DWORD dwAlphaDestConst; // Constant to use as Alpha Channel - LPDIRECTDRAWSURFACE lpDDSAlphaDest; // Surface to use as Alpha Channel - } DUMMYUNIONNAMEN(3); - DWORD dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source - union - { - DWORD dwAlphaSrcConst; // Constant to use as Alpha Channel - LPDIRECTDRAWSURFACE lpDDSAlphaSrc; // Surface to use as Alpha Channel - } DUMMYUNIONNAMEN(4); - union - { - DWORD dwFillColor; // color in RGB or Palettized - DWORD dwFillDepth; // depth value for z-buffer - DWORD dwFillPixel; // pixel value for RGBA or RGBZ - LPDIRECTDRAWSURFACE lpDDSPattern; // Surface to use as pattern - } DUMMYUNIONNAMEN(5); - DDCOLORKEY ddckDestColorkey; // DestColorkey override - DDCOLORKEY ddckSrcColorkey; // SrcColorkey override -} DDBLTFX; - -typedef DDBLTFX FAR* LPDDBLTFX; - - - -/* - * DDSCAPS - */ -typedef struct _DDSCAPS -{ - DWORD dwCaps; // capabilities of surface wanted -} DDSCAPS; - -typedef DDSCAPS FAR* LPDDSCAPS; - - -/* - * DDOSCAPS - */ -typedef struct _DDOSCAPS -{ - DWORD dwCaps; // capabilities of surface wanted -} DDOSCAPS; - -typedef DDOSCAPS FAR* LPDDOSCAPS; - -/* - * This structure is used internally by DirectDraw. - */ -typedef struct _DDSCAPSEX -{ - DWORD dwCaps2; - DWORD dwCaps3; - union - { - DWORD dwCaps4; - DWORD dwVolumeDepth; - } DUMMYUNIONNAMEN(1); -} DDSCAPSEX, FAR * LPDDSCAPSEX; - -/* - * DDSCAPS2 - */ -typedef struct _DDSCAPS2 -{ - DWORD dwCaps; // capabilities of surface wanted - DWORD dwCaps2; - DWORD dwCaps3; - union - { - DWORD dwCaps4; - DWORD dwVolumeDepth; - } DUMMYUNIONNAMEN(1); -} DDSCAPS2; - -typedef DDSCAPS2 FAR* LPDDSCAPS2; - -/* - * DDCAPS - */ -#define DD_ROP_SPACE (256/32) // space required to store ROP array -/* - * NOTE: Our choosen structure number scheme is to append a single digit to - * the end of the structure giving the version that structure is associated - * with. - */ - -/* - * This structure represents the DDCAPS structure released in DirectDraw 1.0. It is used internally - * by DirectDraw to interpret caps passed into ddraw by drivers written prior to the release of DirectDraw 2.0. - * New applications should use the DDCAPS structure defined below. - */ -typedef struct _DDCAPS_DX1 -{ - DWORD dwSize; // size of the DDDRIVERCAPS structure - DWORD dwCaps; // driver specific capabilities - DWORD dwCaps2; // more driver specific capabilites - DWORD dwCKeyCaps; // color key capabilities of the surface - DWORD dwFXCaps; // driver specific stretching and effects capabilites - DWORD dwFXAlphaCaps; // alpha driver specific capabilities - DWORD dwPalCaps; // palette capabilities - DWORD dwSVCaps; // stereo vision capabilities - DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 - DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 - DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 - DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 - DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 - DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 - DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 - DWORD dwVidMemTotal; // total amount of video memory - DWORD dwVidMemFree; // amount of free video memory - DWORD dwMaxVisibleOverlays; // maximum number of visible overlays - DWORD dwCurrVisibleOverlays; // current number of visible overlays - DWORD dwNumFourCCCodes; // number of four cc codes - DWORD dwAlignBoundarySrc; // source rectangle alignment - DWORD dwAlignSizeSrc; // source rectangle byte size - DWORD dwAlignBoundaryDest; // dest rectangle alignment - DWORD dwAlignSizeDest; // dest rectangle byte size - DWORD dwAlignStrideAlign; // stride alignment - DWORD dwRops[DD_ROP_SPACE]; // ROPS supported - DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities - DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwMinLiveVideoStretch; // OBSOLETE! This field remains for compatability reasons only - DWORD dwMaxLiveVideoStretch; // OBSOLETE! This field remains for compatability reasons only - DWORD dwMinHwCodecStretch; // OBSOLETE! This field remains for compatability reasons only - DWORD dwMaxHwCodecStretch; // OBSOLETE! This field remains for compatability reasons only - DWORD dwReserved1; // reserved - DWORD dwReserved2; // reserved - DWORD dwReserved3; // reserved -} DDCAPS_DX1; - -typedef DDCAPS_DX1 FAR* LPDDCAPS_DX1; - -/* - * This structure is the DDCAPS structure as it was in version 2 and 3 of Direct X. - * It is present for back compatability. - */ -typedef struct _DDCAPS_DX3 -{ - DWORD dwSize; // size of the DDDRIVERCAPS structure - DWORD dwCaps; // driver specific capabilities - DWORD dwCaps2; // more driver specific capabilites - DWORD dwCKeyCaps; // color key capabilities of the surface - DWORD dwFXCaps; // driver specific stretching and effects capabilites - DWORD dwFXAlphaCaps; // alpha driver specific capabilities - DWORD dwPalCaps; // palette capabilities - DWORD dwSVCaps; // stereo vision capabilities - DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 - DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 - DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 - DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 - DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 - DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 - DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 - DWORD dwVidMemTotal; // total amount of video memory - DWORD dwVidMemFree; // amount of free video memory - DWORD dwMaxVisibleOverlays; // maximum number of visible overlays - DWORD dwCurrVisibleOverlays; // current number of visible overlays - DWORD dwNumFourCCCodes; // number of four cc codes - DWORD dwAlignBoundarySrc; // source rectangle alignment - DWORD dwAlignSizeSrc; // source rectangle byte size - DWORD dwAlignBoundaryDest; // dest rectangle alignment - DWORD dwAlignSizeDest; // dest rectangle byte size - DWORD dwAlignStrideAlign; // stride alignment - DWORD dwRops[DD_ROP_SPACE]; // ROPS supported - DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities - DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 - DWORD dwReserved1; // reserved - DWORD dwReserved2; // reserved - DWORD dwReserved3; // reserved - DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts - DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts - DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts - DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts - DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts - DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts - DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts - DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts - DWORD dwSSBCaps; // driver specific capabilities for System->System blts - DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts - DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts - DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts - DWORD dwReserved4; // reserved - DWORD dwReserved5; // reserved - DWORD dwReserved6; // reserved -} DDCAPS_DX3; -typedef DDCAPS_DX3 FAR* LPDDCAPS_DX3; - -/* - * This structure is the DDCAPS structure as it was in version 5 of Direct X. - * It is present for back compatability. - */ -typedef struct _DDCAPS_DX5 -{ -/* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure -/* 4*/ DWORD dwCaps; // driver specific capabilities -/* 8*/ DWORD dwCaps2; // more driver specific capabilites -/* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface -/* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites -/* 14*/ DWORD dwFXAlphaCaps; // alpha driver specific capabilities -/* 18*/ DWORD dwPalCaps; // palette capabilities -/* 1c*/ DWORD dwSVCaps; // stereo vision capabilities -/* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 -/* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 -/* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 -/* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 -/* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 -/* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 -/* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 -/* 3c*/ DWORD dwVidMemTotal; // total amount of video memory -/* 40*/ DWORD dwVidMemFree; // amount of free video memory -/* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays -/* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays -/* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes -/* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment -/* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size -/* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment -/* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size -/* 60*/ DWORD dwAlignStrideAlign; // stride alignment -/* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported -/* 84*/ DDSCAPS ddsCaps; // DDSCAPS structure has all the general capabilities -/* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* a0*/ DWORD dwReserved1; // reserved -/* a4*/ DWORD dwReserved2; // reserved -/* a8*/ DWORD dwReserved3; // reserved -/* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts -/* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts -/* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts -/* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts -/* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts -/* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts -/* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts -/* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts -/*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts -/*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts -/*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts -/*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts -// Members added for DX5: -/*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports -/*134*/ DWORD dwCurrVideoPorts; // current number of video ports used -/*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts -/*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts -/*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts -/*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts -/*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts -/*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts -} DDCAPS_DX5; -typedef DDCAPS_DX5 FAR* LPDDCAPS_DX5; - -typedef struct _DDCAPS_DX6 -{ -/* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure -/* 4*/ DWORD dwCaps; // driver specific capabilities -/* 8*/ DWORD dwCaps2; // more driver specific capabilites -/* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface -/* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites -/* 14*/ DWORD dwFXAlphaCaps; // alpha caps -/* 18*/ DWORD dwPalCaps; // palette capabilities -/* 1c*/ DWORD dwSVCaps; // stereo vision capabilities -/* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 -/* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 -/* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 -/* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 -/* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 -/* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 -/* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 -/* 3c*/ DWORD dwVidMemTotal; // total amount of video memory -/* 40*/ DWORD dwVidMemFree; // amount of free video memory -/* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays -/* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays -/* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes -/* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment -/* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size -/* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment -/* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size -/* 60*/ DWORD dwAlignStrideAlign; // stride alignment -/* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported -/* 84*/ DDSCAPS ddsOldCaps; // Was DDSCAPS ddsCaps. ddsCaps is of type DDSCAPS2 for DX6 -/* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* a0*/ DWORD dwReserved1; // reserved -/* a4*/ DWORD dwReserved2; // reserved -/* a8*/ DWORD dwReserved3; // reserved -/* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts -/* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts -/* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts -/* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts -/* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts -/* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts -/* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts -/* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts -/*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts -/*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts -/*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts -/*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts -/*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports -/*134*/ DWORD dwCurrVideoPorts; // current number of video ports used -/*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts -/*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts -/*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts -/*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts -/*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts -/*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts -// Members added for DX6 release -/*16c*/ DDSCAPS2 ddsCaps; // Surface Caps -} DDCAPS_DX6; -typedef DDCAPS_DX6 FAR* LPDDCAPS_DX6; - -typedef struct _DDCAPS_DX7 -{ -/* 0*/ DWORD dwSize; // size of the DDDRIVERCAPS structure -/* 4*/ DWORD dwCaps; // driver specific capabilities -/* 8*/ DWORD dwCaps2; // more driver specific capabilites -/* c*/ DWORD dwCKeyCaps; // color key capabilities of the surface -/* 10*/ DWORD dwFXCaps; // driver specific stretching and effects capabilites -/* 14*/ DWORD dwFXAlphaCaps; // alpha driver specific capabilities -/* 18*/ DWORD dwPalCaps; // palette capabilities -/* 1c*/ DWORD dwSVCaps; // stereo vision capabilities -/* 20*/ DWORD dwAlphaBltConstBitDepths; // DDBD_2,4,8 -/* 24*/ DWORD dwAlphaBltPixelBitDepths; // DDBD_1,2,4,8 -/* 28*/ DWORD dwAlphaBltSurfaceBitDepths; // DDBD_1,2,4,8 -/* 2c*/ DWORD dwAlphaOverlayConstBitDepths; // DDBD_2,4,8 -/* 30*/ DWORD dwAlphaOverlayPixelBitDepths; // DDBD_1,2,4,8 -/* 34*/ DWORD dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8 -/* 38*/ DWORD dwZBufferBitDepths; // DDBD_8,16,24,32 -/* 3c*/ DWORD dwVidMemTotal; // total amount of video memory -/* 40*/ DWORD dwVidMemFree; // amount of free video memory -/* 44*/ DWORD dwMaxVisibleOverlays; // maximum number of visible overlays -/* 48*/ DWORD dwCurrVisibleOverlays; // current number of visible overlays -/* 4c*/ DWORD dwNumFourCCCodes; // number of four cc codes -/* 50*/ DWORD dwAlignBoundarySrc; // source rectangle alignment -/* 54*/ DWORD dwAlignSizeSrc; // source rectangle byte size -/* 58*/ DWORD dwAlignBoundaryDest; // dest rectangle alignment -/* 5c*/ DWORD dwAlignSizeDest; // dest rectangle byte size -/* 60*/ DWORD dwAlignStrideAlign; // stride alignment -/* 64*/ DWORD dwRops[DD_ROP_SPACE]; // ROPS supported -/* 84*/ DDSCAPS ddsOldCaps; // Was DDSCAPS ddsCaps. ddsCaps is of type DDSCAPS2 for DX6 -/* 88*/ DWORD dwMinOverlayStretch; // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 8c*/ DWORD dwMaxOverlayStretch; // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 90*/ DWORD dwMinLiveVideoStretch; // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 94*/ DWORD dwMaxLiveVideoStretch; // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 98*/ DWORD dwMinHwCodecStretch; // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* 9c*/ DWORD dwMaxHwCodecStretch; // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3 -/* a0*/ DWORD dwReserved1; // reserved -/* a4*/ DWORD dwReserved2; // reserved -/* a8*/ DWORD dwReserved3; // reserved -/* ac*/ DWORD dwSVBCaps; // driver specific capabilities for System->Vmem blts -/* b0*/ DWORD dwSVBCKeyCaps; // driver color key capabilities for System->Vmem blts -/* b4*/ DWORD dwSVBFXCaps; // driver FX capabilities for System->Vmem blts -/* b8*/ DWORD dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts -/* d8*/ DWORD dwVSBCaps; // driver specific capabilities for Vmem->System blts -/* dc*/ DWORD dwVSBCKeyCaps; // driver color key capabilities for Vmem->System blts -/* e0*/ DWORD dwVSBFXCaps; // driver FX capabilities for Vmem->System blts -/* e4*/ DWORD dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts -/*104*/ DWORD dwSSBCaps; // driver specific capabilities for System->System blts -/*108*/ DWORD dwSSBCKeyCaps; // driver color key capabilities for System->System blts -/*10c*/ DWORD dwSSBFXCaps; // driver FX capabilities for System->System blts -/*110*/ DWORD dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts -/*130*/ DWORD dwMaxVideoPorts; // maximum number of usable video ports -/*134*/ DWORD dwCurrVideoPorts; // current number of video ports used -/*138*/ DWORD dwSVBCaps2; // more driver specific capabilities for System->Vmem blts -/*13c*/ DWORD dwNLVBCaps; // driver specific capabilities for non-local->local vidmem blts -/*140*/ DWORD dwNLVBCaps2; // more driver specific capabilities non-local->local vidmem blts -/*144*/ DWORD dwNLVBCKeyCaps; // driver color key capabilities for non-local->local vidmem blts -/*148*/ DWORD dwNLVBFXCaps; // driver FX capabilities for non-local->local blts -/*14c*/ DWORD dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts -// Members added for DX6 release -/*16c*/ DDSCAPS2 ddsCaps; // Surface Caps -} DDCAPS_DX7; -typedef DDCAPS_DX7 FAR* LPDDCAPS_DX7; - - -#if DIRECTDRAW_VERSION <= 0x300 - typedef DDCAPS_DX3 DDCAPS; -#elif DIRECTDRAW_VERSION <= 0x500 - typedef DDCAPS_DX5 DDCAPS; -#elif DIRECTDRAW_VERSION <= 0x600 - typedef DDCAPS_DX6 DDCAPS; -#else - typedef DDCAPS_DX7 DDCAPS; -#endif - -typedef DDCAPS FAR* LPDDCAPS; - - - -/* - * DDPIXELFORMAT - */ -typedef struct _DDPIXELFORMAT -{ - DWORD dwSize; // size of structure - DWORD dwFlags; // pixel format flags - DWORD dwFourCC; // (FOURCC code) - union - { - DWORD dwRGBBitCount; // how many bits per pixel - DWORD dwYUVBitCount; // how many bits per pixel - DWORD dwZBufferBitDepth; // how many total bits/pixel in z buffer (including any stencil bits) - DWORD dwAlphaBitDepth; // how many bits for alpha channels - DWORD dwLuminanceBitCount; // how many bits per pixel - DWORD dwBumpBitCount; // how many bits per "buxel", total - DWORD dwPrivateFormatBitCount;// Bits per pixel of private driver formats. Only valid in texture - // format list and if DDPF_D3DFORMAT is set - } DUMMYUNIONNAMEN(1); - union - { - DWORD dwRBitMask; // mask for red bit - DWORD dwYBitMask; // mask for Y bits - DWORD dwStencilBitDepth; // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits) - DWORD dwLuminanceBitMask; // mask for luminance bits - DWORD dwBumpDuBitMask; // mask for bump map U delta bits - DWORD dwOperations; // DDPF_D3DFORMAT Operations - } DUMMYUNIONNAMEN(2); - union - { - DWORD dwGBitMask; // mask for green bits - DWORD dwUBitMask; // mask for U bits - DWORD dwZBitMask; // mask for Z bits - DWORD dwBumpDvBitMask; // mask for bump map V delta bits - struct - { - WORD wFlipMSTypes; // Multisample methods supported via flip for this D3DFORMAT - WORD wBltMSTypes; // Multisample methods supported via blt for this D3DFORMAT - } MultiSampleCaps; - - } DUMMYUNIONNAMEN(3); - union - { - DWORD dwBBitMask; // mask for blue bits - DWORD dwVBitMask; // mask for V bits - DWORD dwStencilBitMask; // mask for stencil bits - DWORD dwBumpLuminanceBitMask; // mask for luminance in bump map - } DUMMYUNIONNAMEN(4); - union - { - DWORD dwRGBAlphaBitMask; // mask for alpha channel - DWORD dwYUVAlphaBitMask; // mask for alpha channel - DWORD dwLuminanceAlphaBitMask;// mask for alpha channel - DWORD dwRGBZBitMask; // mask for Z channel - DWORD dwYUVZBitMask; // mask for Z channel - } DUMMYUNIONNAMEN(5); -} DDPIXELFORMAT; - -typedef DDPIXELFORMAT FAR* LPDDPIXELFORMAT; - -/* - * DDOVERLAYFX - */ -typedef struct _DDOVERLAYFX -{ - DWORD dwSize; // size of structure - DWORD dwAlphaEdgeBlendBitDepth; // Bit depth used to specify constant for alpha edge blend - DWORD dwAlphaEdgeBlend; // Constant to use as alpha for edge blend - DWORD dwReserved; - DWORD dwAlphaDestConstBitDepth; // Bit depth used to specify alpha constant for destination - union - { - DWORD dwAlphaDestConst; // Constant to use as alpha channel for dest - LPDIRECTDRAWSURFACE lpDDSAlphaDest; // Surface to use as alpha channel for dest - } DUMMYUNIONNAMEN(1); - DWORD dwAlphaSrcConstBitDepth; // Bit depth used to specify alpha constant for source - union - { - DWORD dwAlphaSrcConst; // Constant to use as alpha channel for src - LPDIRECTDRAWSURFACE lpDDSAlphaSrc; // Surface to use as alpha channel for src - } DUMMYUNIONNAMEN(2); - DDCOLORKEY dckDestColorkey; // DestColorkey override - DDCOLORKEY dckSrcColorkey; // DestColorkey override - DWORD dwDDFX; // Overlay FX - DWORD dwFlags; // flags -} DDOVERLAYFX; - -typedef DDOVERLAYFX FAR *LPDDOVERLAYFX; - - -/* - * DDBLTBATCH: BltBatch entry structure - */ -typedef struct _DDBLTBATCH -{ - LPRECT lprDest; - LPDIRECTDRAWSURFACE lpDDSSrc; - LPRECT lprSrc; - DWORD dwFlags; - LPDDBLTFX lpDDBltFx; -} DDBLTBATCH; - -typedef DDBLTBATCH FAR * LPDDBLTBATCH; - - -/* - * DDGAMMARAMP - */ -typedef struct _DDGAMMARAMP -{ - WORD red[256]; - WORD green[256]; - WORD blue[256]; -} DDGAMMARAMP; -typedef DDGAMMARAMP FAR * LPDDGAMMARAMP; - -/* - * This is the structure within which DirectDraw returns data about the current graphics driver and chipset - */ - -#define MAX_DDDEVICEID_STRING 512 - -typedef struct tagDDDEVICEIDENTIFIER -{ - /* - * These elements are for presentation to the user only. They should not be used to identify particular - * drivers, since this is unreliable and many different strings may be associated with the same - * device, and the same driver from different vendors. - */ - char szDriver[MAX_DDDEVICEID_STRING]; - char szDescription[MAX_DDDEVICEID_STRING]; - - /* - * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons - * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic - * drivers. It is recommended that guidDeviceIdentifier is used for this purpose. - * - * This version has the form: - * wProduct = HIWORD(liDriverVersion.HighPart) - * wVersion = LOWORD(liDriverVersion.HighPart) - * wSubVersion = HIWORD(liDriverVersion.LowPart) - * wBuild = LOWORD(liDriverVersion.LowPart) - */ -#ifdef _WIN32 - LARGE_INTEGER liDriverVersion; /* Defined for applications and other 32 bit components */ -#else - DWORD dwDriverVersionLowPart; /* Defined for 16 bit driver components */ - DWORD dwDriverVersionHighPart; -#endif - - - /* - * These elements can be used to identify particular chipsets. Use with extreme caution. - * dwVendorId Identifies the manufacturer. May be zero if unknown. - * dwDeviceId Identifies the type of chipset. May be zero if unknown. - * dwSubSysId Identifies the subsystem, typically this means the particular board. May be zero if unknown. - * dwRevision Identifies the revision level of the chipset. May be zero if unknown. - */ - DWORD dwVendorId; - DWORD dwDeviceId; - DWORD dwSubSysId; - DWORD dwRevision; - - /* - * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the - * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to - * reprofile the graphics subsystem. - * This element can also be used to identify particular problematic drivers. - */ - GUID guidDeviceIdentifier; -} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER; - -typedef struct tagDDDEVICEIDENTIFIER2 -{ - /* - * These elements are for presentation to the user only. They should not be used to identify particular - * drivers, since this is unreliable and many different strings may be associated with the same - * device, and the same driver from different vendors. - */ - char szDriver[MAX_DDDEVICEID_STRING]; - char szDescription[MAX_DDDEVICEID_STRING]; - - /* - * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons - * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic - * drivers. It is recommended that guidDeviceIdentifier is used for this purpose. - * - * This version has the form: - * wProduct = HIWORD(liDriverVersion.HighPart) - * wVersion = LOWORD(liDriverVersion.HighPart) - * wSubVersion = HIWORD(liDriverVersion.LowPart) - * wBuild = LOWORD(liDriverVersion.LowPart) - */ -#ifdef _WIN32 - LARGE_INTEGER liDriverVersion; /* Defined for applications and other 32 bit components */ -#else - DWORD dwDriverVersionLowPart; /* Defined for 16 bit driver components */ - DWORD dwDriverVersionHighPart; -#endif - - - /* - * These elements can be used to identify particular chipsets. Use with extreme caution. - * dwVendorId Identifies the manufacturer. May be zero if unknown. - * dwDeviceId Identifies the type of chipset. May be zero if unknown. - * dwSubSysId Identifies the subsystem, typically this means the particular board. May be zero if unknown. - * dwRevision Identifies the revision level of the chipset. May be zero if unknown. - */ - DWORD dwVendorId; - DWORD dwDeviceId; - DWORD dwSubSysId; - DWORD dwRevision; - - /* - * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the - * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to - * reprofile the graphics subsystem. - * This element can also be used to identify particular problematic drivers. - */ - GUID guidDeviceIdentifier; - - /* - * This element is used to determine the Windows Hardware Quality Lab (WHQL) - * certification level for this driver/device pair. - */ - DWORD dwWHQLLevel; - -} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2; - -/* - * Flags for the IDirectDraw4::GetDeviceIdentifier method - */ - -/* - * This flag causes GetDeviceIdentifier to return information about the host (typically 2D) adapter in a system equipped - * with a stacked secondary 3D adapter. Such an adapter appears to the application as if it were part of the - * host adapter, but is typically physcially located on a separate card. The stacked secondary's information is - * returned when GetDeviceIdentifier's dwFlags field is zero, since this most accurately reflects the qualities - * of the DirectDraw object involved. - */ -#define DDGDI_GETHOSTIDENTIFIER 0x00000001L - -/* - * Macros for interpretting DDEVICEIDENTIFIER2.dwWHQLLevel - */ -#define GET_WHQL_YEAR( dwWHQLLevel ) \ - ( (dwWHQLLevel) / 0x10000 ) -#define GET_WHQL_MONTH( dwWHQLLevel ) \ - ( ( (dwWHQLLevel) / 0x100 ) & 0x00ff ) -#define GET_WHQL_DAY( dwWHQLLevel ) \ - ( (dwWHQLLevel) & 0xff ) - - -/* - * callbacks - */ -typedef DWORD (FAR PASCAL *LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext ); -#ifdef STREAMING -typedef DWORD (FAR PASCAL *LPSURFACESTREAMINGCALLBACK)(DWORD); -#endif - - -/* - * INTERACES FOLLOW: - * IDirectDraw - * IDirectDrawClipper - * IDirectDrawPalette - * IDirectDrawSurface - */ - -/* - * IDirectDraw - */ -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDraw -DECLARE_INTERFACE_( IDirectDraw, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDraw methods ***/ - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE; - STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE; - STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; - STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; - STDMETHOD(FlipToGDISurface)(THIS) PURE; - STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; - STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; - STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; - STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; - STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; - STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; - STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; - STDMETHOD(RestoreDisplayMode)(THIS) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; - STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE; - STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDraw_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDraw_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDraw_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) -#define IDirectDraw_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) -#define IDirectDraw_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) -#define IDirectDraw_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) -#define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) -#define IDirectDraw_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) -#define IDirectDraw_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) -#define IDirectDraw_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) -#define IDirectDraw_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) -#define IDirectDraw_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) -#define IDirectDraw_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) -#define IDirectDraw_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) -#define IDirectDraw_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) -#define IDirectDraw_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) -#define IDirectDraw_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) -#define IDirectDraw_SetDisplayMode(p, a, b, c) (p)->lpVtbl->SetDisplayMode(p, a, b, c) -#define IDirectDraw_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) -#else -#define IDirectDraw_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDraw_AddRef(p) (p)->AddRef() -#define IDirectDraw_Release(p) (p)->Release() -#define IDirectDraw_Compact(p) (p)->Compact() -#define IDirectDraw_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) -#define IDirectDraw_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) -#define IDirectDraw_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) -#define IDirectDraw_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) -#define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) -#define IDirectDraw_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) -#define IDirectDraw_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw_GetCaps(p, a, b) (p)->GetCaps(a, b) -#define IDirectDraw_GetDisplayMode(p, a) (p)->GetDisplayMode(a) -#define IDirectDraw_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) -#define IDirectDraw_GetGDISurface(p, a) (p)->GetGDISurface(a) -#define IDirectDraw_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) -#define IDirectDraw_GetScanLine(p, a) (p)->GetScanLine(a) -#define IDirectDraw_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw_Initialize(p, a) (p)->Initialize(a) -#define IDirectDraw_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) -#define IDirectDraw_SetDisplayMode(p, a, b, c) (p)->SetDisplayMode(a, b, c) -#define IDirectDraw_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) -#endif - -#endif - -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDraw2 -DECLARE_INTERFACE_( IDirectDraw2, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDraw methods ***/ - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE; - STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE; - STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE; - STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE; - STDMETHOD(FlipToGDISurface)(THIS) PURE; - STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; - STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; - STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE; - STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; - STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; - STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; - STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; - STDMETHOD(RestoreDisplayMode)(THIS) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; - STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; - STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE; -}; -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDraw2_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDraw2_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw2_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDraw2_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw2_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) -#define IDirectDraw2_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) -#define IDirectDraw2_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) -#define IDirectDraw2_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) -#define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) -#define IDirectDraw2_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) -#define IDirectDraw2_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw2_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) -#define IDirectDraw2_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) -#define IDirectDraw2_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) -#define IDirectDraw2_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) -#define IDirectDraw2_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) -#define IDirectDraw2_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) -#define IDirectDraw2_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) -#define IDirectDraw2_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) -#define IDirectDraw2_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw2_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) -#define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) -#define IDirectDraw2_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) -#define IDirectDraw2_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) -#else -#define IDirectDraw2_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDraw2_AddRef(p) (p)->AddRef() -#define IDirectDraw2_Release(p) (p)->Release() -#define IDirectDraw2_Compact(p) (p)->Compact() -#define IDirectDraw2_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) -#define IDirectDraw2_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) -#define IDirectDraw2_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) -#define IDirectDraw2_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) -#define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) -#define IDirectDraw2_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) -#define IDirectDraw2_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw2_GetCaps(p, a, b) (p)->GetCaps(a, b) -#define IDirectDraw2_GetDisplayMode(p, a) (p)->GetDisplayMode(a) -#define IDirectDraw2_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) -#define IDirectDraw2_GetGDISurface(p, a) (p)->GetGDISurface(a) -#define IDirectDraw2_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) -#define IDirectDraw2_GetScanLine(p, a) (p)->GetScanLine(a) -#define IDirectDraw2_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw2_Initialize(p, a) (p)->Initialize(a) -#define IDirectDraw2_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw2_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) -#define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) -#define IDirectDraw2_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) -#define IDirectDraw2_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) -#endif - -#endif - -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDraw4 -DECLARE_INTERFACE_( IDirectDraw4, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDraw methods ***/ - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE4 FAR *, IUnknown FAR *) PURE; - STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR * ) PURE; - STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE; - STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ) PURE; - STDMETHOD(FlipToGDISurface)(THIS) PURE; - STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; - STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE; - STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; - STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE4 FAR *) PURE; - STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; - STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; - STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; - STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; - STDMETHOD(RestoreDisplayMode)(THIS) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; - STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; - STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE; - /*** Added in the V4 Interface ***/ - STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE4 *) PURE; - STDMETHOD(RestoreAllSurfaces)(THIS) PURE; - STDMETHOD(TestCooperativeLevel)(THIS) PURE; - STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE; -}; -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDraw4_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDraw4_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw4_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDraw4_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw4_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) -#define IDirectDraw4_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) -#define IDirectDraw4_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) -#define IDirectDraw4_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) -#define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) -#define IDirectDraw4_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) -#define IDirectDraw4_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw4_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) -#define IDirectDraw4_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) -#define IDirectDraw4_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) -#define IDirectDraw4_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) -#define IDirectDraw4_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) -#define IDirectDraw4_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) -#define IDirectDraw4_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) -#define IDirectDraw4_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) -#define IDirectDraw4_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw4_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) -#define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) -#define IDirectDraw4_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) -#define IDirectDraw4_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) -#define IDirectDraw4_GetSurfaceFromDC(p, a, b) (p)->lpVtbl->GetSurfaceFromDC(p, a, b) -#define IDirectDraw4_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) -#define IDirectDraw4_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) -#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) -#else -#define IDirectDraw4_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDraw4_AddRef(p) (p)->AddRef() -#define IDirectDraw4_Release(p) (p)->Release() -#define IDirectDraw4_Compact(p) (p)->Compact() -#define IDirectDraw4_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) -#define IDirectDraw4_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) -#define IDirectDraw4_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) -#define IDirectDraw4_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) -#define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) -#define IDirectDraw4_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) -#define IDirectDraw4_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw4_GetCaps(p, a, b) (p)->GetCaps(a, b) -#define IDirectDraw4_GetDisplayMode(p, a) (p)->GetDisplayMode(a) -#define IDirectDraw4_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) -#define IDirectDraw4_GetGDISurface(p, a) (p)->GetGDISurface(a) -#define IDirectDraw4_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) -#define IDirectDraw4_GetScanLine(p, a) (p)->GetScanLine(a) -#define IDirectDraw4_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw4_Initialize(p, a) (p)->Initialize(a) -#define IDirectDraw4_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw4_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) -#define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) -#define IDirectDraw4_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) -#define IDirectDraw4_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) -#define IDirectDraw4_GetSurfaceFromDC(p, a, b) (p)->GetSurfaceFromDC(a, b) -#define IDirectDraw4_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() -#define IDirectDraw4_TestCooperativeLevel(p) (p)->TestCooperativeLevel() -#define IDirectDraw4_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) -#endif - -#endif - -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDraw7 -DECLARE_INTERFACE_( IDirectDraw7, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDraw methods ***/ - STDMETHOD(Compact)(THIS) PURE; - STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE; - STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 FAR *, IUnknown FAR *) PURE; - STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR * ) PURE; - STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE; - STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ) PURE; - STDMETHOD(FlipToGDISurface)(THIS) PURE; - STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE; - STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE; - STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE; - STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 FAR *) PURE; - STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE; - STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE; - STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE; - STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE; - STDMETHOD(RestoreDisplayMode)(THIS) PURE; - STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE; - STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE; - STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE; - /*** Added in the V4 Interface ***/ - STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE7 *) PURE; - STDMETHOD(RestoreAllSurfaces)(THIS) PURE; - STDMETHOD(TestCooperativeLevel)(THIS) PURE; - STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2, DWORD ) PURE; - STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE; - STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE; -}; -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDraw7_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDraw7_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDraw7_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDraw7_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectDraw7_CreateClipper(p, a, b, c) (p)->lpVtbl->CreateClipper(p, a, b, c) -#define IDirectDraw7_CreatePalette(p, a, b, c, d) (p)->lpVtbl->CreatePalette(p, a, b, c, d) -#define IDirectDraw7_CreateSurface(p, a, b, c) (p)->lpVtbl->CreateSurface(p, a, b, c) -#define IDirectDraw7_DuplicateSurface(p, a, b) (p)->lpVtbl->DuplicateSurface(p, a, b) -#define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d) -#define IDirectDraw7_EnumSurfaces(p, a, b, c, d) (p)->lpVtbl->EnumSurfaces(p, a, b, c, d) -#define IDirectDraw7_FlipToGDISurface(p) (p)->lpVtbl->FlipToGDISurface(p) -#define IDirectDraw7_GetCaps(p, a, b) (p)->lpVtbl->GetCaps(p, a, b) -#define IDirectDraw7_GetDisplayMode(p, a) (p)->lpVtbl->GetDisplayMode(p, a) -#define IDirectDraw7_GetFourCCCodes(p, a, b) (p)->lpVtbl->GetFourCCCodes(p, a, b) -#define IDirectDraw7_GetGDISurface(p, a) (p)->lpVtbl->GetGDISurface(p, a) -#define IDirectDraw7_GetMonitorFrequency(p, a) (p)->lpVtbl->GetMonitorFrequency(p, a) -#define IDirectDraw7_GetScanLine(p, a) (p)->lpVtbl->GetScanLine(p, a) -#define IDirectDraw7_GetVerticalBlankStatus(p, a) (p)->lpVtbl->GetVerticalBlankStatus(p, a) -#define IDirectDraw7_Initialize(p, a) (p)->lpVtbl->Initialize(p, a) -#define IDirectDraw7_RestoreDisplayMode(p) (p)->lpVtbl->RestoreDisplayMode(p) -#define IDirectDraw7_SetCooperativeLevel(p, a, b) (p)->lpVtbl->SetCooperativeLevel(p, a, b) -#define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e) -#define IDirectDraw7_WaitForVerticalBlank(p, a, b) (p)->lpVtbl->WaitForVerticalBlank(p, a, b) -#define IDirectDraw7_GetAvailableVidMem(p, a, b, c) (p)->lpVtbl->GetAvailableVidMem(p, a, b, c) -#define IDirectDraw7_GetSurfaceFromDC(p, a, b) (p)->lpVtbl->GetSurfaceFromDC(p, a, b) -#define IDirectDraw7_RestoreAllSurfaces(p) (p)->lpVtbl->RestoreAllSurfaces(p) -#define IDirectDraw7_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) -#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->lpVtbl->GetDeviceIdentifier(p,a,b) -#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(p,a,b,c) -#define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(p,a,b) -#else -#define IDirectDraw7_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDraw7_AddRef(p) (p)->AddRef() -#define IDirectDraw7_Release(p) (p)->Release() -#define IDirectDraw7_Compact(p) (p)->Compact() -#define IDirectDraw7_CreateClipper(p, a, b, c) (p)->CreateClipper(a, b, c) -#define IDirectDraw7_CreatePalette(p, a, b, c, d) (p)->CreatePalette(a, b, c, d) -#define IDirectDraw7_CreateSurface(p, a, b, c) (p)->CreateSurface(a, b, c) -#define IDirectDraw7_DuplicateSurface(p, a, b) (p)->DuplicateSurface(a, b) -#define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d) -#define IDirectDraw7_EnumSurfaces(p, a, b, c, d) (p)->EnumSurfaces(a, b, c, d) -#define IDirectDraw7_FlipToGDISurface(p) (p)->FlipToGDISurface() -#define IDirectDraw7_GetCaps(p, a, b) (p)->GetCaps(a, b) -#define IDirectDraw7_GetDisplayMode(p, a) (p)->GetDisplayMode(a) -#define IDirectDraw7_GetFourCCCodes(p, a, b) (p)->GetFourCCCodes(a, b) -#define IDirectDraw7_GetGDISurface(p, a) (p)->GetGDISurface(a) -#define IDirectDraw7_GetMonitorFrequency(p, a) (p)->GetMonitorFrequency(a) -#define IDirectDraw7_GetScanLine(p, a) (p)->GetScanLine(a) -#define IDirectDraw7_GetVerticalBlankStatus(p, a) (p)->GetVerticalBlankStatus(a) -#define IDirectDraw7_Initialize(p, a) (p)->Initialize(a) -#define IDirectDraw7_RestoreDisplayMode(p) (p)->RestoreDisplayMode() -#define IDirectDraw7_SetCooperativeLevel(p, a, b) (p)->SetCooperativeLevel(a, b) -#define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e) -#define IDirectDraw7_WaitForVerticalBlank(p, a, b) (p)->WaitForVerticalBlank(a, b) -#define IDirectDraw7_GetAvailableVidMem(p, a, b, c) (p)->GetAvailableVidMem(a, b, c) -#define IDirectDraw7_GetSurfaceFromDC(p, a, b) (p)->GetSurfaceFromDC(a, b) -#define IDirectDraw7_RestoreAllSurfaces(p) (p)->RestoreAllSurfaces() -#define IDirectDraw7_TestCooperativeLevel(p) (p)->TestCooperativeLevel() -#define IDirectDraw7_GetDeviceIdentifier(p,a,b) (p)->GetDeviceIdentifier(a,b) -#define IDirectDraw7_StartModeTest(p,a,b,c) (p)->lpVtbl->StartModeTest(a,b,c) -#define IDirectDraw7_EvaluateMode(p,a,b) (p)->lpVtbl->EvaluateMode(a,b) -#endif - -#endif - - -/* - * IDirectDrawPalette - */ -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDrawPalette -DECLARE_INTERFACE_( IDirectDrawPalette, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawPalette methods ***/ - STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE; - STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE; - STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawPalette_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDrawPalette_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawPalette_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawPalette_GetCaps(p, a) (p)->lpVtbl->GetCaps(p, a) -#define IDirectDrawPalette_GetEntries(p, a, b, c, d) (p)->lpVtbl->GetEntries(p, a, b, c, d) -#define IDirectDrawPalette_Initialize(p, a, b, c) (p)->lpVtbl->Initialize(p, a, b, c) -#define IDirectDrawPalette_SetEntries(p, a, b, c, d) (p)->lpVtbl->SetEntries(p, a, b, c, d) -#else -#define IDirectDrawPalette_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDrawPalette_AddRef(p) (p)->AddRef() -#define IDirectDrawPalette_Release(p) (p)->Release() -#define IDirectDrawPalette_GetCaps(p, a) (p)->GetCaps(a) -#define IDirectDrawPalette_GetEntries(p, a, b, c, d) (p)->GetEntries(a, b, c, d) -#define IDirectDrawPalette_Initialize(p, a, b, c) (p)->Initialize(a, b, c) -#define IDirectDrawPalette_SetEntries(p, a, b, c, d) (p)->SetEntries(a, b, c, d) -#endif - -#endif - - -/* - * IDirectDrawClipper - */ -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDrawClipper -DECLARE_INTERFACE_( IDirectDrawClipper, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawClipper methods ***/ - STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE; - STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE; - STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE; - STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE; - STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawClipper_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDrawClipper_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawClipper_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawClipper_GetClipList(p, a, b, c) (p)->lpVtbl->GetClipList(p, a, b, c) -#define IDirectDrawClipper_GetHWnd(p, a) (p)->lpVtbl->GetHWnd(p, a) -#define IDirectDrawClipper_Initialize(p, a, b) (p)->lpVtbl->Initialize(p, a, b) -#define IDirectDrawClipper_IsClipListChanged(p, a) (p)->lpVtbl->IsClipListChanged(p, a) -#define IDirectDrawClipper_SetClipList(p, a, b) (p)->lpVtbl->SetClipList(p, a, b) -#define IDirectDrawClipper_SetHWnd(p, a, b) (p)->lpVtbl->SetHWnd(p, a, b) -#else -#define IDirectDrawClipper_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDrawClipper_AddRef(p) (p)->AddRef() -#define IDirectDrawClipper_Release(p) (p)->Release() -#define IDirectDrawClipper_GetClipList(p, a, b, c) (p)->GetClipList(a, b, c) -#define IDirectDrawClipper_GetHWnd(p, a) (p)->GetHWnd(a) -#define IDirectDrawClipper_Initialize(p, a, b) (p)->Initialize(a, b) -#define IDirectDrawClipper_IsClipListChanged(p, a) (p)->IsClipListChanged(a) -#define IDirectDrawClipper_SetClipList(p, a, b) (p)->SetClipList(a, b) -#define IDirectDrawClipper_SetHWnd(p, a, b) (p)->SetHWnd(a, b) -#endif - -#endif - -/* - * IDirectDrawSurface and related interfaces - */ -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDrawSurface -DECLARE_INTERFACE_( IDirectDrawSurface, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; - STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; - STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) -#define IDirectDrawSurface_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) -#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -#else -#define IDirectDrawSurface_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface_Release(p) (p)->Release() -#define IDirectDrawSurface_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface_GetCaps(p,b) (p)->GetCaps(b) -#define IDirectDrawSurface_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface_Restore(p) (p)->Restore() -#define IDirectDrawSurface_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface_Unlock(p,b) (p)->Unlock(b) -#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -#endif - -/* - * IDirectDrawSurface2 and related interfaces - */ -#undef INTERFACE -#define INTERFACE IDirectDrawSurface2 -DECLARE_INTERFACE_( IDirectDrawSurface2, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; - STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; - STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; - STDMETHOD(PageLock)(THIS_ DWORD) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface2_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface2_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface2_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface2_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) -#define IDirectDrawSurface2_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface2_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface2_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface2_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface2_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface2_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface2_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface2_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) -#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface2_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface2_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -#else -#define IDirectDrawSurface2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface2_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface2_Release(p) (p)->Release() -#define IDirectDrawSurface2_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface2_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface2_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface2_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface2_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface2_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface2_GetCaps(p,b) (p)->GetCaps(b) -#define IDirectDrawSurface2_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface2_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface2_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface2_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface2_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface2_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface2_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface2_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface2_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface2_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface2_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface2_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface2_Restore(p) (p)->Restore() -#define IDirectDrawSurface2_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface2_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface2_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface2_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface2_Unlock(p,b) (p)->Unlock(b) -#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -#define IDirectDrawSurface2_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface2_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface2_PageUnlock(p,a) (p)->PageUnlock(a) -#endif - -/* - * IDirectDrawSurface3 and related interfaces - */ -#undef INTERFACE -#define INTERFACE IDirectDrawSurface3 -DECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; - STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; - STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; - STDMETHOD(Unlock)(THIS_ LPVOID) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; - STDMETHOD(PageLock)(THIS_ DWORD) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; - /*** Added in the V3 interface ***/ - STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface3_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface3_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface3_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface3_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) -#define IDirectDrawSurface3_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface3_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface3_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface3_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface3_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface3_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface3_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface3_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface3_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) -#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface3_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface3_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) -#else -#define IDirectDrawSurface3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface3_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface3_Release(p) (p)->Release() -#define IDirectDrawSurface3_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface3_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface3_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface3_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface3_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface3_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface3_GetCaps(p,b) (p)->GetCaps(b) -#define IDirectDrawSurface3_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface3_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface3_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface3_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface3_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface3_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface3_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface3_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface3_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface3_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface3_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface3_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface3_Restore(p) (p)->Restore() -#define IDirectDrawSurface3_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface3_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface3_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface3_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface3_Unlock(p,b) (p)->Unlock(b) -#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -#define IDirectDrawSurface3_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface3_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface3_PageUnlock(p,a) (p)->PageUnlock(a) -#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) -#endif - -/* - * IDirectDrawSurface4 and related interfaces - */ -#undef INTERFACE -#define INTERFACE IDirectDrawSurface4 -DECLARE_INTERFACE_( IDirectDrawSurface4, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; - STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; - STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK2) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4, DWORD) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; - STDMETHOD(Unlock)(THIS_ LPRECT) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; - STDMETHOD(PageLock)(THIS_ DWORD) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; - /*** Added in the v3 interface ***/ - STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE; - /*** Added in the v4 interface ***/ - STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; - STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; - STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE; - STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE; - STDMETHOD(ChangeUniquenessValue)(THIS) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface4_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface4_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface4_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface4_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) -#define IDirectDrawSurface4_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface4_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface4_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface4_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface4_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface4_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface4_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface4_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface4_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) -#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface4_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface4_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) -#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) -#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) -#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) -#define IDirectDrawSurface4_GetUniquenessValue(p, a) (p)->lpVtbl->GetUniquenessValue(p, a) -#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) -#else -#define IDirectDrawSurface4_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface4_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface4_Release(p) (p)->Release() -#define IDirectDrawSurface4_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface4_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface4_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface4_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface4_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface4_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface4_GetCaps(p,b) (p)->GetCaps(b) -#define IDirectDrawSurface4_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface4_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface4_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface4_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface4_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface4_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface4_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface4_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface4_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface4_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface4_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface4_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface4_Restore(p) (p)->Restore() -#define IDirectDrawSurface4_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface4_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface4_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface4_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface4_Unlock(p,b) (p)->Unlock(b) -#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -#define IDirectDrawSurface4_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface4_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface4_PageUnlock(p,a) (p)->PageUnlock(a) -#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) -#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) -#define IDirectDrawSurface4_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) -#define IDirectDrawSurface4_FreePrivateData(p,a) (p)->FreePrivateData(a) -#define IDirectDrawSurface4_GetUniquenessValue(p, a) (p)->GetUniquenessValue(a) -#define IDirectDrawSurface4_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() -#endif - -/* - * IDirectDrawSurface7 and related interfaces - */ -#undef INTERFACE -#define INTERFACE IDirectDrawSurface7 -DECLARE_INTERFACE_( IDirectDrawSurface7, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawSurface methods ***/ - STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE7) PURE; - STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE; - STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX) PURE; - STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE; - STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD) PURE; - STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE; - STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK7) PURE; - STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7) PURE; - STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE7, DWORD) PURE; - STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE7 FAR *) PURE; - STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE; - STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE; - STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE; - STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE; - STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE; - STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE; - STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE; - STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE; - STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE; - STDMETHOD(IsLost)(THIS) PURE; - STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE; - STDMETHOD(ReleaseDC)(THIS_ HDC) PURE; - STDMETHOD(Restore)(THIS) PURE; - STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE; - STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE; - STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE; - STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE; - STDMETHOD(Unlock)(THIS_ LPRECT) PURE; - STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX) PURE; - STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE; - STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE7) PURE; - /*** Added in the v2 interface ***/ - STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE; - STDMETHOD(PageLock)(THIS_ DWORD) PURE; - STDMETHOD(PageUnlock)(THIS_ DWORD) PURE; - /*** Added in the v3 interface ***/ - STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE; - /*** Added in the v4 interface ***/ - STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE; - STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE; - STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE; - STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE; - STDMETHOD(ChangeUniquenessValue)(THIS) PURE; - /*** Moved Texture7 methods here ***/ - STDMETHOD(SetPriority)(THIS_ DWORD) PURE; - STDMETHOD(GetPriority)(THIS_ LPDWORD) PURE; - STDMETHOD(SetLOD)(THIS_ DWORD) PURE; - STDMETHOD(GetLOD)(THIS_ LPDWORD) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectDrawSurface7_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawSurface7_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->lpVtbl->AddAttachedSurface(p,a) -#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->lpVtbl->AddOverlayDirtyRect(p,a) -#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->lpVtbl->Blt(p,a,b,c,d,e) -#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->lpVtbl->BltBatch(p,a,b,c) -#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e) -#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b) -#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->lpVtbl->EnumAttachedSurfaces(p,a,b) -#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c) -#define IDirectDrawSurface7_Flip(p,a,b) (p)->lpVtbl->Flip(p,a,b) -#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->lpVtbl->GetAttachedSurface(p,a,b) -#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->lpVtbl->GetBltStatus(p,a) -#define IDirectDrawSurface7_GetCaps(p,b) (p)->lpVtbl->GetCaps(p,b) -#define IDirectDrawSurface7_GetClipper(p,a) (p)->lpVtbl->GetClipper(p,a) -#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->lpVtbl->GetColorKey(p,a,b) -#define IDirectDrawSurface7_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) -#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->lpVtbl->GetFlipStatus(p,a) -#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->lpVtbl->GetOverlayPosition(p,a,b) -#define IDirectDrawSurface7_GetPalette(p,a) (p)->lpVtbl->GetPalette(p,a) -#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->lpVtbl->GetPixelFormat(p,a) -#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->lpVtbl->GetSurfaceDesc(p,a) -#define IDirectDrawSurface7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectDrawSurface7_IsLost(p) (p)->lpVtbl->IsLost(p) -#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) -#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) -#define IDirectDrawSurface7_Restore(p) (p)->lpVtbl->Restore(p) -#define IDirectDrawSurface7_SetClipper(p,a) (p)->lpVtbl->SetClipper(p,a) -#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->lpVtbl->SetColorKey(p,a,b) -#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->lpVtbl->SetOverlayPosition(p,a,b) -#define IDirectDrawSurface7_SetPalette(p,a) (p)->lpVtbl->SetPalette(p,a) -#define IDirectDrawSurface7_Unlock(p,b) (p)->lpVtbl->Unlock(p,b) -#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e) -#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->lpVtbl->UpdateOverlayDisplay(p,a) -#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->lpVtbl->UpdateOverlayZOrder(p,a,b) -#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->lpVtbl->GetDDInterface(p,a) -#define IDirectDrawSurface7_PageLock(p,a) (p)->lpVtbl->PageLock(p,a) -#define IDirectDrawSurface7_PageUnlock(p,a) (p)->lpVtbl->PageUnlock(p,a) -#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->lpVtbl->SetSurfaceDesc(p,a,b) -#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) -#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) -#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) -#define IDirectDrawSurface7_GetUniquenessValue(p, a) (p)->lpVtbl->GetUniquenessValue(p, a) -#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->lpVtbl->ChangeUniquenessValue(p) -#define IDirectDrawSurface7_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) -#define IDirectDrawSurface7_GetPriority(p,a) (p)->lpVtbl->GetPriority(p,a) -#define IDirectDrawSurface7_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) -#define IDirectDrawSurface7_GetLOD(p,a) (p)->lpVtbl->GetLOD(p,a) -#else -#define IDirectDrawSurface7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectDrawSurface7_AddRef(p) (p)->AddRef() -#define IDirectDrawSurface7_Release(p) (p)->Release() -#define IDirectDrawSurface7_AddAttachedSurface(p,a) (p)->AddAttachedSurface(a) -#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a) (p)->AddOverlayDirtyRect(a) -#define IDirectDrawSurface7_Blt(p,a,b,c,d,e) (p)->Blt(a,b,c,d,e) -#define IDirectDrawSurface7_BltBatch(p,a,b,c) (p)->BltBatch(a,b,c) -#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e) (p)->BltFast(a,b,c,d,e) -#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b) -#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b) (p)->EnumAttachedSurfaces(a,b) -#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c) (p)->EnumOverlayZOrders(a,b,c) -#define IDirectDrawSurface7_Flip(p,a,b) (p)->Flip(a,b) -#define IDirectDrawSurface7_GetAttachedSurface(p,a,b) (p)->GetAttachedSurface(a,b) -#define IDirectDrawSurface7_GetBltStatus(p,a) (p)->GetBltStatus(a) -#define IDirectDrawSurface7_GetCaps(p,b) (p)->GetCaps(b) -#define IDirectDrawSurface7_GetClipper(p,a) (p)->GetClipper(a) -#define IDirectDrawSurface7_GetColorKey(p,a,b) (p)->GetColorKey(a,b) -#define IDirectDrawSurface7_GetDC(p,a) (p)->GetDC(a) -#define IDirectDrawSurface7_GetFlipStatus(p,a) (p)->GetFlipStatus(a) -#define IDirectDrawSurface7_GetOverlayPosition(p,a,b) (p)->GetOverlayPosition(a,b) -#define IDirectDrawSurface7_GetPalette(p,a) (p)->GetPalette(a) -#define IDirectDrawSurface7_GetPixelFormat(p,a) (p)->GetPixelFormat(a) -#define IDirectDrawSurface7_GetSurfaceDesc(p,a) (p)->GetSurfaceDesc(a) -#define IDirectDrawSurface7_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectDrawSurface7_IsLost(p) (p)->IsLost() -#define IDirectDrawSurface7_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) -#define IDirectDrawSurface7_ReleaseDC(p,a) (p)->ReleaseDC(a) -#define IDirectDrawSurface7_Restore(p) (p)->Restore() -#define IDirectDrawSurface7_SetClipper(p,a) (p)->SetClipper(a) -#define IDirectDrawSurface7_SetColorKey(p,a,b) (p)->SetColorKey(a,b) -#define IDirectDrawSurface7_SetOverlayPosition(p,a,b) (p)->SetOverlayPosition(a,b) -#define IDirectDrawSurface7_SetPalette(p,a) (p)->SetPalette(a) -#define IDirectDrawSurface7_Unlock(p,b) (p)->Unlock(b) -#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e) (p)->UpdateOverlay(a,b,c,d,e) -#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a) (p)->UpdateOverlayDisplay(a) -#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b) (p)->UpdateOverlayZOrder(a,b) -#define IDirectDrawSurface7_GetDDInterface(p,a) (p)->GetDDInterface(a) -#define IDirectDrawSurface7_PageLock(p,a) (p)->PageLock(a) -#define IDirectDrawSurface7_PageUnlock(p,a) (p)->PageUnlock(a) -#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b) (p)->SetSurfaceDesc(a,b) -#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) -#define IDirectDrawSurface7_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) -#define IDirectDrawSurface7_FreePrivateData(p,a) (p)->FreePrivateData(a) -#define IDirectDrawSurface7_GetUniquenessValue(p, a) (p)->GetUniquenessValue(a) -#define IDirectDrawSurface7_ChangeUniquenessValue(p) (p)->ChangeUniquenessValue() -#define IDirectDrawSurface7_SetPriority(p,a) (p)->SetPriority(a) -#define IDirectDrawSurface7_GetPriority(p,a) (p)->GetPriority(a) -#define IDirectDrawSurface7_SetLOD(p,a) (p)->SetLOD(a) -#define IDirectDrawSurface7_GetLOD(p,a) (p)->GetLOD(a) -#endif - - -/* - * IDirectDrawColorControl - */ -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDrawColorControl -DECLARE_INTERFACE_( IDirectDrawColorControl, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawColorControl methods ***/ - STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; - STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawColorControl_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDrawColorControl_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawColorControl_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawColorControl_GetColorControls(p, a) (p)->lpVtbl->GetColorControls(p, a) -#define IDirectDrawColorControl_SetColorControls(p, a) (p)->lpVtbl->SetColorControls(p, a) -#else -#define IDirectDrawColorControl_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDrawColorControl_AddRef(p) (p)->AddRef() -#define IDirectDrawColorControl_Release(p) (p)->Release() -#define IDirectDrawColorControl_GetColorControls(p, a) (p)->GetColorControls(a) -#define IDirectDrawColorControl_SetColorControls(p, a) (p)->SetColorControls(a) -#endif - -#endif - - -/* - * IDirectDrawGammaControl - */ -#if defined( _WIN32 ) && !defined( _NO_COM ) -#undef INTERFACE -#define INTERFACE IDirectDrawGammaControl -DECLARE_INTERFACE_( IDirectDrawGammaControl, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectDrawGammaControl methods ***/ - STDMETHOD(GetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE; - STDMETHOD(SetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE; -}; - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectDrawGammaControl_QueryInterface(p, a, b) (p)->lpVtbl->QueryInterface(p, a, b) -#define IDirectDrawGammaControl_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectDrawGammaControl_Release(p) (p)->lpVtbl->Release(p) -#define IDirectDrawGammaControl_GetGammaRamp(p, a, b) (p)->lpVtbl->GetGammaRamp(p, a, b) -#define IDirectDrawGammaControl_SetGammaRamp(p, a, b) (p)->lpVtbl->SetGammaRamp(p, a, b) -#else -#define IDirectDrawGammaControl_QueryInterface(p, a, b) (p)->QueryInterface(a, b) -#define IDirectDrawGammaControl_AddRef(p) (p)->AddRef() -#define IDirectDrawGammaControl_Release(p) (p)->Release() -#define IDirectDrawGammaControl_GetGammaRamp(p, a, b) (p)->GetGammaRamp(a, b) -#define IDirectDrawGammaControl_SetGammaRamp(p, a, b) (p)->SetGammaRamp(a, b) -#endif - -#endif - - - -#endif - - -/* - * DDSURFACEDESC - */ -typedef struct _DDSURFACEDESC -{ - DWORD dwSize; // size of the DDSURFACEDESC structure - DWORD dwFlags; // determines what fields are valid - DWORD dwHeight; // height of surface to be created - DWORD dwWidth; // width of input surface - union - { - LONG lPitch; // distance to start of next line (return value only) - DWORD dwLinearSize; // Formless late-allocated optimized surface size - } DUMMYUNIONNAMEN(1); - DWORD dwBackBufferCount; // number of back buffers requested - union - { - DWORD dwMipMapCount; // number of mip-map levels requested - DWORD dwZBufferBitDepth; // depth of Z buffer requested - DWORD dwRefreshRate; // refresh rate (used when display mode is described) - } DUMMYUNIONNAMEN(2); - DWORD dwAlphaBitDepth; // depth of alpha buffer requested - DWORD dwReserved; // reserved - LPVOID lpSurface; // pointer to the associated surface memory - DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use - DDCOLORKEY ddckCKDestBlt; // color key for destination blt use - DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use - DDCOLORKEY ddckCKSrcBlt; // color key for source blt use - DDPIXELFORMAT ddpfPixelFormat; // pixel format description of the surface - DDSCAPS ddsCaps; // direct draw surface capabilities -} DDSURFACEDESC; - -/* - * DDSURFACEDESC2 - */ -typedef struct _DDSURFACEDESC2 -{ - DWORD dwSize; // size of the DDSURFACEDESC structure - DWORD dwFlags; // determines what fields are valid - DWORD dwHeight; // height of surface to be created - DWORD dwWidth; // width of input surface - union - { - LONG lPitch; // distance to start of next line (return value only) - DWORD dwLinearSize; // Formless late-allocated optimized surface size - } DUMMYUNIONNAMEN(1); - union - { - DWORD dwBackBufferCount; // number of back buffers requested - DWORD dwDepth; // the depth if this is a volume texture - } DUMMYUNIONNAMEN(5); - union - { - DWORD dwMipMapCount; // number of mip-map levels requestde - // dwZBufferBitDepth removed, use ddpfPixelFormat one instead - DWORD dwRefreshRate; // refresh rate (used when display mode is described) - DWORD dwSrcVBHandle; // The source used in VB::Optimize - } DUMMYUNIONNAMEN(2); - DWORD dwAlphaBitDepth; // depth of alpha buffer requested - DWORD dwReserved; // reserved - LPVOID lpSurface; // pointer to the associated surface memory - union - { - DDCOLORKEY ddckCKDestOverlay; // color key for destination overlay use - DWORD dwEmptyFaceColor; // Physical color for empty cubemap faces - } DUMMYUNIONNAMEN(3); - DDCOLORKEY ddckCKDestBlt; // color key for destination blt use - DDCOLORKEY ddckCKSrcOverlay; // color key for source overlay use - DDCOLORKEY ddckCKSrcBlt; // color key for source blt use - union - { - DDPIXELFORMAT ddpfPixelFormat; // pixel format description of the surface - DWORD dwFVF; // vertex format description of vertex buffers - } DUMMYUNIONNAMEN(4); - DDSCAPS2 ddsCaps; // direct draw surface capabilities - DWORD dwTextureStage; // stage in multitexture cascade -} DDSURFACEDESC2; - -/* - * ddsCaps field is valid. - */ -#define DDSD_CAPS 0x00000001l // default - -/* - * dwHeight field is valid. - */ -#define DDSD_HEIGHT 0x00000002l - -/* - * dwWidth field is valid. - */ -#define DDSD_WIDTH 0x00000004l - -/* - * lPitch is valid. - */ -#define DDSD_PITCH 0x00000008l - -/* - * dwBackBufferCount is valid. - */ -#define DDSD_BACKBUFFERCOUNT 0x00000020l - -/* - * dwZBufferBitDepth is valid. (shouldnt be used in DDSURFACEDESC2) - */ -#define DDSD_ZBUFFERBITDEPTH 0x00000040l - -/* - * dwAlphaBitDepth is valid. - */ -#define DDSD_ALPHABITDEPTH 0x00000080l - - -/* - * lpSurface is valid. - */ -#define DDSD_LPSURFACE 0x00000800l - -/* - * ddpfPixelFormat is valid. - */ -#define DDSD_PIXELFORMAT 0x00001000l - -/* - * ddckCKDestOverlay is valid. - */ -#define DDSD_CKDESTOVERLAY 0x00002000l - -/* - * ddckCKDestBlt is valid. - */ -#define DDSD_CKDESTBLT 0x00004000l - -/* - * ddckCKSrcOverlay is valid. - */ -#define DDSD_CKSRCOVERLAY 0x00008000l - -/* - * ddckCKSrcBlt is valid. - */ -#define DDSD_CKSRCBLT 0x00010000l - -/* - * dwMipMapCount is valid. - */ -#define DDSD_MIPMAPCOUNT 0x00020000l - - /* - * dwRefreshRate is valid - */ -#define DDSD_REFRESHRATE 0x00040000l - -/* - * dwLinearSize is valid - */ -#define DDSD_LINEARSIZE 0x00080000l - -/* - * dwTextureStage is valid - */ -#define DDSD_TEXTURESTAGE 0x00100000l -/* - * dwFVF is valid - */ -#define DDSD_FVF 0x00200000l -/* - * dwSrcVBHandle is valid - */ -#define DDSD_SRCVBHANDLE 0x00400000l - -/* - * dwDepth is valid - */ -#define DDSD_DEPTH 0x00800000l - -/* - * All input fields are valid. - */ -#define DDSD_ALL 0x00fff9eel - -/* - * DDOPTSURFACEDESC - */ -typedef struct _DDOPTSURFACEDESC -{ - DWORD dwSize; // size of the DDOPTSURFACEDESC structure - DWORD dwFlags; // determines what fields are valid - DDSCAPS2 ddSCaps; // Common caps like: Memory type - DDOSCAPS ddOSCaps; // Common caps like: Memory type - GUID guid; // Compression technique GUID - DWORD dwCompressionRatio; // Compression ratio -} DDOPTSURFACEDESC; - -/* - * guid field is valid. - */ -#define DDOSD_GUID 0x00000001l - -/* - * dwCompressionRatio field is valid. - */ -#define DDOSD_COMPRESSION_RATIO 0x00000002l - -/* - * ddSCaps field is valid. - */ -#define DDOSD_SCAPS 0x00000004l - -/* - * ddOSCaps field is valid. - */ -#define DDOSD_OSCAPS 0x00000008l - -/* - * All input fields are valid. - */ -#define DDOSD_ALL 0x0000000fl - -/* - * The surface's optimized pixelformat is compressed - */ -#define DDOSDCAPS_OPTCOMPRESSED 0x00000001l - -/* - * The surface's optimized pixelformat is reordered - */ -#define DDOSDCAPS_OPTREORDERED 0x00000002l - -/* - * The opt surface is a monolithic mipmap - */ -#define DDOSDCAPS_MONOLITHICMIPMAP 0x00000004l - -/* - * The valid Surf caps: - * #define DDSCAPS_SYSTEMMEMORY 0x00000800l - * #define DDSCAPS_VIDEOMEMORY 0x00004000l - * #define DDSCAPS_LOCALVIDMEM 0x10000000l - * #define DDSCAPS_NONLOCALVIDMEM 0x20000000l - */ -#define DDOSDCAPS_VALIDSCAPS 0x30004800l - -/* - * The valid OptSurf caps - */ -#define DDOSDCAPS_VALIDOSCAPS 0x00000007l - - -/* - * DDCOLORCONTROL - */ -typedef struct _DDCOLORCONTROL -{ - DWORD dwSize; - DWORD dwFlags; - LONG lBrightness; - LONG lContrast; - LONG lHue; - LONG lSaturation; - LONG lSharpness; - LONG lGamma; - LONG lColorEnable; - DWORD dwReserved1; -} DDCOLORCONTROL; - - -/* - * lBrightness field is valid. - */ -#define DDCOLOR_BRIGHTNESS 0x00000001l - -/* - * lContrast field is valid. - */ -#define DDCOLOR_CONTRAST 0x00000002l - -/* - * lHue field is valid. - */ -#define DDCOLOR_HUE 0x00000004l - -/* - * lSaturation field is valid. - */ -#define DDCOLOR_SATURATION 0x00000008l - -/* - * lSharpness field is valid. - */ -#define DDCOLOR_SHARPNESS 0x00000010l - -/* - * lGamma field is valid. - */ -#define DDCOLOR_GAMMA 0x00000020l - -/* - * lColorEnable field is valid. - */ -#define DDCOLOR_COLORENABLE 0x00000040l - - - -/*============================================================================ - * - * Direct Draw Capability Flags - * - * These flags are used to describe the capabilities of a given Surface. - * All flags are bit flags. - * - *==========================================================================*/ - -/**************************************************************************** - * - * DIRECTDRAWSURFACE CAPABILITY FLAGS - * - ****************************************************************************/ - -/* - * This bit is reserved. It should not be specified. - */ -#define DDSCAPS_RESERVED1 0x00000001l - -/* - * Indicates that this surface contains alpha-only information. - * (To determine if a surface is RGBA/YUVA, the pixel format must be - * interrogated.) - */ -#define DDSCAPS_ALPHA 0x00000002l - -/* - * Indicates that this surface is a backbuffer. It is generally - * set by CreateSurface when the DDSCAPS_FLIP capability bit is set. - * It indicates that this surface is THE back buffer of a surface - * flipping structure. DirectDraw supports N surfaces in a - * surface flipping structure. Only the surface that immediately - * precedeces the DDSCAPS_FRONTBUFFER has this capability bit set. - * The other surfaces are identified as back buffers by the presence - * of the DDSCAPS_FLIP capability, their attachment order, and the - * absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER - * capabilities. The bit is sent to CreateSurface when a standalone - * back buffer is being created. This surface could be attached to - * a front buffer and/or back buffers to form a flipping surface - * structure after the CreateSurface call. See AddAttachments for - * a detailed description of the behaviors in this case. - */ -#define DDSCAPS_BACKBUFFER 0x00000004l - -/* - * Indicates a complex surface structure is being described. A - * complex surface structure results in the creation of more than - * one surface. The additional surfaces are attached to the root - * surface. The complex structure can only be destroyed by - * destroying the root. - */ -#define DDSCAPS_COMPLEX 0x00000008l - -/* - * Indicates that this surface is a part of a surface flipping structure. - * When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and - * DDSCAP_BACKBUFFER bits are not set. They are set by CreateSurface - * on the resulting creations. The dwBackBufferCount field in the - * DDSURFACEDESC structure must be set to at least 1 in order for - * the CreateSurface call to succeed. The DDSCAPS_COMPLEX capability - * must always be set with creating multiple surfaces through CreateSurface. - */ -#define DDSCAPS_FLIP 0x00000010l - -/* - * Indicates that this surface is THE front buffer of a surface flipping - * structure. It is generally set by CreateSurface when the DDSCAPS_FLIP - * capability bit is set. - * If this capability is sent to CreateSurface then a standalonw front buffer - * is created. This surface will not have the DDSCAPS_FLIP capability. - * It can be attached to other back buffers to form a flipping structure. - * See AddAttachments for a detailed description of the behaviors in this - * case. - */ -#define DDSCAPS_FRONTBUFFER 0x00000020l - -/* - * Indicates that this surface is any offscreen surface that is not an overlay, - * texture, zbuffer, front buffer, back buffer, or alpha surface. It is used - * to identify plain vanilla surfaces. - */ -#define DDSCAPS_OFFSCREENPLAIN 0x00000040l - -/* - * Indicates that this surface is an overlay. It may or may not be directly visible - * depending on whether or not it is currently being overlayed onto the primary - * surface. DDSCAPS_VISIBLE can be used to determine whether or not it is being - * overlayed at the moment. - */ -#define DDSCAPS_OVERLAY 0x00000080l - -/* - * Indicates that unique DirectDrawPalette objects can be created and - * attached to this surface. - */ -#define DDSCAPS_PALETTE 0x00000100l - -/* - * Indicates that this surface is the primary surface. The primary - * surface represents what the user is seeing at the moment. - */ -#define DDSCAPS_PRIMARYSURFACE 0x00000200l - - -/* - * This flag used to be DDSCAPS_PRIMARYSURFACELEFT, which is now - * obsolete. - */ -#define DDSCAPS_RESERVED3 0x00000400l -#define DDSCAPS_PRIMARYSURFACELEFT 0x00000000l - -/* - * Indicates that this surface memory was allocated in system memory - */ -#define DDSCAPS_SYSTEMMEMORY 0x00000800l - -/* - * Indicates that this surface can be used as a 3D texture. It does not - * indicate whether or not the surface is being used for that purpose. - */ -#define DDSCAPS_TEXTURE 0x00001000l - -/* - * Indicates that a surface may be a destination for 3D rendering. This - * bit must be set in order to query for a Direct3D Device Interface - * from this surface. - */ -#define DDSCAPS_3DDEVICE 0x00002000l - -/* - * Indicates that this surface exists in video memory. - */ -#define DDSCAPS_VIDEOMEMORY 0x00004000l - -/* - * Indicates that changes made to this surface are immediately visible. - * It is always set for the primary surface and is set for overlays while - * they are being overlayed and texture maps while they are being textured. - */ -#define DDSCAPS_VISIBLE 0x00008000l - -/* - * Indicates that only writes are permitted to the surface. Read accesses - * from the surface may or may not generate a protection fault, but the - * results of a read from this surface will not be meaningful. READ ONLY. - */ -#define DDSCAPS_WRITEONLY 0x00010000l - -/* - * Indicates that this surface is a z buffer. A z buffer does not contain - * displayable information. Instead it contains bit depth information that is - * used to determine which pixels are visible and which are obscured. - */ -#define DDSCAPS_ZBUFFER 0x00020000l - -/* - * Indicates surface will have a DC associated long term - */ -#define DDSCAPS_OWNDC 0x00040000l - -/* - * Indicates surface should be able to receive live video - */ -#define DDSCAPS_LIVEVIDEO 0x00080000l - -/* - * Indicates surface should be able to have a stream decompressed - * to it by the hardware. - */ -#define DDSCAPS_HWCODEC 0x00100000l - -/* - * Surface is a ModeX surface. - * - */ -#define DDSCAPS_MODEX 0x00200000l - -/* - * Indicates surface is one level of a mip-map. This surface will - * be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map. - * This can be done explicitly, by creating a number of surfaces and - * attaching them with AddAttachedSurface or by implicitly by CreateSurface. - * If this bit is set then DDSCAPS_TEXTURE must also be set. - */ -#define DDSCAPS_MIPMAP 0x00400000l - -/* - * This bit is reserved. It should not be specified. - */ -#define DDSCAPS_RESERVED2 0x00800000l - - -/* - * Indicates that memory for the surface is not allocated until the surface - * is loaded (via the Direct3D texture Load() function). - */ -#define DDSCAPS_ALLOCONLOAD 0x04000000l - -/* - * Indicates that the surface will recieve data from a video port. - */ -#define DDSCAPS_VIDEOPORT 0x08000000l - -/* - * Indicates that a video memory surface is resident in true, local video - * memory rather than non-local video memory. If this flag is specified then - * so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with - * DDSCAPS_NONLOCALVIDMEM. - */ -#define DDSCAPS_LOCALVIDMEM 0x10000000l - -/* - * Indicates that a video memory surface is resident in non-local video - * memory rather than true, local video memory. If this flag is specified - * then so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with - * DDSCAPS_LOCALVIDMEM. - */ -#define DDSCAPS_NONLOCALVIDMEM 0x20000000l - -/* - * Indicates that this surface is a standard VGA mode surface, and not a - * ModeX surface. (This flag will never be set in combination with the - * DDSCAPS_MODEX flag). - */ -#define DDSCAPS_STANDARDVGAMODE 0x40000000l - -/* - * Indicates that this surface will be an optimized surface. This flag is - * currently only valid in conjunction with the DDSCAPS_TEXTURE flag. The surface - * will be created without any underlying video memory until loaded. - */ -#define DDSCAPS_OPTIMIZED 0x80000000l - - - -/* - * This bit is reserved - */ -#define DDSCAPS2_RESERVED4 0x00000002L -#define DDSCAPS2_HARDWAREDEINTERLACE 0x00000000L - -/* - * Indicates to the driver that this surface will be locked very frequently - * (for procedural textures, dynamic lightmaps, etc). Surfaces with this cap - * set must also have DDSCAPS_TEXTURE. This cap cannot be used with - * DDSCAPS2_HINTSTATIC and DDSCAPS2_OPAQUE. - */ -#define DDSCAPS2_HINTDYNAMIC 0x00000004L - -/* - * Indicates to the driver that this surface can be re-ordered/retiled on - * load. This operation will not change the size of the texture. It is - * relatively fast and symmetrical, since the application may lock these - * bits (although it will take a performance hit when doing so). Surfaces - * with this cap set must also have DDSCAPS_TEXTURE. This cap cannot be - * used with DDSCAPS2_HINTDYNAMIC and DDSCAPS2_OPAQUE. - */ -#define DDSCAPS2_HINTSTATIC 0x00000008L - -/* - * Indicates that the client would like this texture surface to be managed by the - * DirectDraw/Direct3D runtime. Surfaces with this cap set must also have - * DDSCAPS_TEXTURE set. - */ -#define DDSCAPS2_TEXTUREMANAGE 0x00000010L - -/* - * These bits are reserved for internal use */ -#define DDSCAPS2_RESERVED1 0x00000020L -#define DDSCAPS2_RESERVED2 0x00000040L - -/* - * Indicates to the driver that this surface will never be locked again. - * The driver is free to optimize this surface via retiling and actual compression. - * All calls to Lock() or Blts from this surface will fail. Surfaces with this - * cap set must also have DDSCAPS_TEXTURE. This cap cannot be used with - * DDSCAPS2_HINTDYNAMIC and DDSCAPS2_HINTSTATIC. - */ -#define DDSCAPS2_OPAQUE 0x00000080L - -/* - * Applications should set this bit at CreateSurface time to indicate that they - * intend to use antialiasing. Only valid if DDSCAPS_3DDEVICE is also set. - */ -#define DDSCAPS2_HINTANTIALIASING 0x00000100L - - -/* - * This flag is used at CreateSurface time to indicate that this set of - * surfaces is a cubic environment map - */ -#define DDSCAPS2_CUBEMAP 0x00000200L - -/* - * These flags preform two functions: - * - At CreateSurface time, they define which of the six cube faces are - * required by the application. - * - After creation, each face in the cubemap will have exactly one of these - * bits set. - */ -#define DDSCAPS2_CUBEMAP_POSITIVEX 0x00000400L -#define DDSCAPS2_CUBEMAP_NEGATIVEX 0x00000800L -#define DDSCAPS2_CUBEMAP_POSITIVEY 0x00001000L -#define DDSCAPS2_CUBEMAP_NEGATIVEY 0x00002000L -#define DDSCAPS2_CUBEMAP_POSITIVEZ 0x00004000L -#define DDSCAPS2_CUBEMAP_NEGATIVEZ 0x00008000L - -/* - * This macro may be used to specify all faces of a cube map at CreateSurface time - */ -#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\ - DDSCAPS2_CUBEMAP_NEGATIVEX |\ - DDSCAPS2_CUBEMAP_POSITIVEY |\ - DDSCAPS2_CUBEMAP_NEGATIVEY |\ - DDSCAPS2_CUBEMAP_POSITIVEZ |\ - DDSCAPS2_CUBEMAP_NEGATIVEZ ) - - -/* - * This flag is an additional flag which is present on mipmap sublevels from DX7 onwards - * It enables easier use of GetAttachedSurface rather than EnumAttachedSurfaces for surface - * constructs such as Cube Maps, wherein there are more than one mipmap surface attached - * to the root surface. - * This caps bit is ignored by CreateSurface - */ -#define DDSCAPS2_MIPMAPSUBLEVEL 0x00010000L - -/* This flag indicates that the texture should be managed by D3D only */ -#define DDSCAPS2_D3DTEXTUREMANAGE 0x00020000L - -/* This flag indicates that the managed surface can be safely lost */ -#define DDSCAPS2_DONOTPERSIST 0x00040000L - -/* indicates that this surface is part of a stereo flipping chain */ -#define DDSCAPS2_STEREOSURFACELEFT 0x00080000L - - -/* - * Indicates that the surface is a volume. - * Can be combined with DDSCAPS_MIPMAP to indicate a multi-level volume - */ -#define DDSCAPS2_VOLUME 0x00200000L - -/* - * Indicates that the surface may be locked multiple times by the application. - * This cap cannot be used with DDSCAPS2_OPAQUE. - */ -#define DDSCAPS2_NOTUSERLOCKABLE 0x00400000L - -/* - * Indicates that the vertex buffer data can be used to render points and - * point sprites. - */ -#define DDSCAPS2_POINTS 0x00800000L - -/* - * Indicates that the vertex buffer data can be used to render rt pactches. - */ -#define DDSCAPS2_RTPATCHES 0x01000000L - -/* - * Indicates that the vertex buffer data can be used to render n patches. - */ -#define DDSCAPS2_NPATCHES 0x02000000L - -/* - * This bit is reserved for internal use - */ -#define DDSCAPS2_RESERVED3 0x04000000L - - -/* - * Indicates that the contents of the backbuffer do not have to be preserved - * the contents of the backbuffer after they are presented. - */ -#define DDSCAPS2_DISCARDBACKBUFFER 0x10000000L - -/* - * Indicates that all surfaces in this creation chain should be given an alpha channel. - * This flag will be set on primary surface chains that may have no explicit pixel format - * (and thus take on the format of the current display mode). - * The driver should infer that all these surfaces have a format having an alpha channel. - * (e.g. assume D3DFMT_A8R8G8B8 if the display mode is x888.) - */ -#define DDSCAPS2_ENABLEALPHACHANNEL 0x20000000L - -/* - * Indicates that all surfaces in this creation chain is extended primary surface format. - * This flag will be set on extended primary surface chains that always have explicit pixel - * format and the pixel format is typically GDI (Graphics Device Interface) couldn't handle, - * thus only used with fullscreen application. (e.g. D3DFMT_A2R10G10B10 format) - */ -#define DDSCAPS2_EXTENDEDFORMATPRIMARY 0x40000000L - -/* - * Indicates that all surfaces in this creation chain is additional primary surface. - * This flag will be set on primary surface chains which must present on the adapter - * id provided on dwCaps4. Typically this will be used to create secondary primary surface - * on DualView display adapter. - */ -#define DDSCAPS2_ADDITIONALPRIMARY 0x80000000L - -/* - * This is a mask that indicates the set of bits that may be set - * at createsurface time to indicate number of samples per pixel - * when multisampling - */ -#define DDSCAPS3_MULTISAMPLE_MASK 0x0000001FL - -/* - * This is a mask that indicates the set of bits that may be set - * at createsurface time to indicate the quality level of rendering - * for the current number of samples per pixel - */ -#define DDSCAPS3_MULTISAMPLE_QUALITY_MASK 0x000000E0L -#define DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT 5 - -/* - * This bit is reserved for internal use - */ -#define DDSCAPS3_RESERVED1 0x00000100L - -/* - * This bit is reserved for internal use - */ -#define DDSCAPS3_RESERVED2 0x00000200L - -/* - * This indicates whether this surface has light-weight miplevels - */ -#define DDSCAPS3_LIGHTWEIGHTMIPMAP 0x00000400L - -/* - * This indicates that the mipsublevels for this surface are auto-generated - */ -#define DDSCAPS3_AUTOGENMIPMAP 0x00000800L - -/* - * This indicates that the mipsublevels for this surface are auto-generated - */ -#define DDSCAPS3_DMAP 0x00001000L - -/* D3D9Ex only -- */ -#if !defined(D3D_DISABLE_9EX) - -/* - * This indicates that this surface is to be shared by processes - */ -#define DDSCAPS3_CREATESHAREDRESOURCE 0x00002000L - -/* - * This indicates that this surface need to be initialized before being - * shared, this bit implies that this surface is read only after initialization - * absence of this bit implies that this surface allows both read and write - */ -#define DDSCAPS3_READONLYRESOURCE 0x00004000L - -/* - * This indicates that this surface is to share an existing video memory with - * another surface created with DDSCAPS3_CREATESHAREDRESOURCE, This bit is never - * used with DDSCAPS3_CREATESHAREDRESOURCE - */ -#define DDSCAPS3_OPENSHAREDRESOURCE 0x00008000L - -#endif // !D3D_DISABLE_9EX -/* -- D3D9Ex only */ - - - /**************************************************************************** - * - * DIRECTDRAW DRIVER CAPABILITY FLAGS - * - ****************************************************************************/ - -/* - * Display hardware has 3D acceleration. - */ -#define DDCAPS_3D 0x00000001l - -/* - * Indicates that DirectDraw will support only dest rectangles that are aligned - * on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively. - * READ ONLY. - */ -#define DDCAPS_ALIGNBOUNDARYDEST 0x00000002l - -/* - * Indicates that DirectDraw will support only source rectangles whose sizes in - * BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively. READ ONLY. - */ -#define DDCAPS_ALIGNSIZEDEST 0x00000004l -/* - * Indicates that DirectDraw will support only source rectangles that are aligned - * on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively. - * READ ONLY. - */ -#define DDCAPS_ALIGNBOUNDARYSRC 0x00000008l - -/* - * Indicates that DirectDraw will support only source rectangles whose sizes in - * BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively. READ ONLY. - */ -#define DDCAPS_ALIGNSIZESRC 0x00000010l - -/* - * Indicates that DirectDraw will create video memory surfaces that have a stride - * alignment equal to DIRECTDRAWCAPS.dwAlignStride. READ ONLY. - */ -#define DDCAPS_ALIGNSTRIDE 0x00000020l - -/* - * Display hardware is capable of blt operations. - */ -#define DDCAPS_BLT 0x00000040l - -/* - * Display hardware is capable of asynchronous blt operations. - */ -#define DDCAPS_BLTQUEUE 0x00000080l - -/* - * Display hardware is capable of color space conversions during the blt operation. - */ -#define DDCAPS_BLTFOURCC 0x00000100l - -/* - * Display hardware is capable of stretching during blt operations. - */ -#define DDCAPS_BLTSTRETCH 0x00000200l - -/* - * Display hardware is shared with GDI. - */ -#define DDCAPS_GDI 0x00000400l - -/* - * Display hardware can overlay. - */ -#define DDCAPS_OVERLAY 0x00000800l - -/* - * Set if display hardware supports overlays but can not clip them. - */ -#define DDCAPS_OVERLAYCANTCLIP 0x00001000l - -/* - * Indicates that overlay hardware is capable of color space conversions during - * the overlay operation. - */ -#define DDCAPS_OVERLAYFOURCC 0x00002000l - -/* - * Indicates that stretching can be done by the overlay hardware. - */ -#define DDCAPS_OVERLAYSTRETCH 0x00004000l - -/* - * Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces - * other than the primary surface. - */ -#define DDCAPS_PALETTE 0x00008000l - -/* - * Indicates that palette changes can be syncd with the veritcal refresh. - */ -#define DDCAPS_PALETTEVSYNC 0x00010000l - -/* - * Display hardware can return the current scan line. - */ -#define DDCAPS_READSCANLINE 0x00020000l - - -/* - * This flag used to bo DDCAPS_STEREOVIEW, which is now obsolete - */ -#define DDCAPS_RESERVED1 0x00040000l - -/* - * Display hardware is capable of generating a vertical blank interrupt. - */ -#define DDCAPS_VBI 0x00080000l - -/* - * Supports the use of z buffers with blt operations. - */ -#define DDCAPS_ZBLTS 0x00100000l - -/* - * Supports Z Ordering of overlays. - */ -#define DDCAPS_ZOVERLAYS 0x00200000l - -/* - * Supports color key - */ -#define DDCAPS_COLORKEY 0x00400000l - -/* - * Supports alpha surfaces - */ -#define DDCAPS_ALPHA 0x00800000l - -/* - * colorkey is hardware assisted(DDCAPS_COLORKEY will also be set) - */ -#define DDCAPS_COLORKEYHWASSIST 0x01000000l - -/* - * no hardware support at all - */ -#define DDCAPS_NOHARDWARE 0x02000000l - -/* - * Display hardware is capable of color fill with bltter - */ -#define DDCAPS_BLTCOLORFILL 0x04000000l - -/* - * Display hardware is bank switched, and potentially very slow at - * random access to VRAM. - */ -#define DDCAPS_BANKSWITCHED 0x08000000l - -/* - * Display hardware is capable of depth filling Z-buffers with bltter - */ -#define DDCAPS_BLTDEPTHFILL 0x10000000l - -/* - * Display hardware is capable of clipping while bltting. - */ -#define DDCAPS_CANCLIP 0x20000000l - -/* - * Display hardware is capable of clipping while stretch bltting. - */ -#define DDCAPS_CANCLIPSTRETCHED 0x40000000l - -/* - * Display hardware is capable of bltting to or from system memory - */ -#define DDCAPS_CANBLTSYSMEM 0x80000000l - - - /**************************************************************************** - * - * MORE DIRECTDRAW DRIVER CAPABILITY FLAGS (dwCaps2) - * - ****************************************************************************/ - -/* - * Display hardware is certified - */ -#define DDCAPS2_CERTIFIED 0x00000001l - -/* - * Driver cannot interleave 2D operations (lock and blt) to surfaces with - * Direct3D rendering operations between calls to BeginScene() and EndScene() - */ -#define DDCAPS2_NO2DDURING3DSCENE 0x00000002l - -/* - * Display hardware contains a video port - */ -#define DDCAPS2_VIDEOPORT 0x00000004l - -/* - * The overlay can be automatically flipped according to the video port - * VSYNCs, providing automatic doubled buffered display of video port - * data using an overlay - */ -#define DDCAPS2_AUTOFLIPOVERLAY 0x00000008l - -/* - * Overlay can display each field of interlaced data individually while - * it is interleaved in memory without causing jittery artifacts. - */ -#define DDCAPS2_CANBOBINTERLEAVED 0x00000010l - -/* - * Overlay can display each field of interlaced data individually while - * it is not interleaved in memory without causing jittery artifacts. - */ -#define DDCAPS2_CANBOBNONINTERLEAVED 0x00000020l - -/* - * The overlay surface contains color controls (brightness, sharpness, etc.) - */ -#define DDCAPS2_COLORCONTROLOVERLAY 0x00000040l - -/* - * The primary surface contains color controls (gamma, etc.) - */ -#define DDCAPS2_COLORCONTROLPRIMARY 0x00000080l - -/* - * RGBZ -> RGB supported for 16:16 RGB:Z - */ -#define DDCAPS2_CANDROPZ16BIT 0x00000100l - -/* - * Driver supports non-local video memory. - */ -#define DDCAPS2_NONLOCALVIDMEM 0x00000200l - -/* - * Dirver supports non-local video memory but has different capabilities for - * non-local video memory surfaces. If this bit is set then so must - * DDCAPS2_NONLOCALVIDMEM. - */ -#define DDCAPS2_NONLOCALVIDMEMCAPS 0x00000400l - -/* - * Driver neither requires nor prefers surfaces to be pagelocked when performing - * blts involving system memory surfaces - */ -#define DDCAPS2_NOPAGELOCKREQUIRED 0x00000800l - -/* - * Driver can create surfaces which are wider than the primary surface - */ -#define DDCAPS2_WIDESURFACES 0x00001000l - -/* - * Driver supports bob without using a video port by handling the - * DDFLIP_ODD and DDFLIP_EVEN flags specified in Flip. - */ -#define DDCAPS2_CANFLIPODDEVEN 0x00002000l - -/* - * Driver supports bob using hardware - */ -#define DDCAPS2_CANBOBHARDWARE 0x00004000l - -/* - * Driver supports bltting any FOURCC surface to another surface of the same FOURCC - */ -#define DDCAPS2_COPYFOURCC 0x00008000l - - -/* - * Driver supports loadable gamma ramps for the primary surface - */ -#define DDCAPS2_PRIMARYGAMMA 0x00020000l - -/* - * Driver can render in windowed mode. - */ -#define DDCAPS2_CANRENDERWINDOWED 0x00080000l - -/* - * A calibrator is available to adjust the gamma ramp according to the - * physical display properties so that the result will be identical on - * all calibrated systems. - */ -#define DDCAPS2_CANCALIBRATEGAMMA 0x00100000l - -/* - * Indicates that the driver will respond to DDFLIP_INTERVALn flags - */ -#define DDCAPS2_FLIPINTERVAL 0x00200000l - -/* - * Indicates that the driver will respond to DDFLIP_NOVSYNC - */ -#define DDCAPS2_FLIPNOVSYNC 0x00400000l - -/* - * Driver supports management of video memory, if this flag is ON, - * driver manages the texture if requested with DDSCAPS2_TEXTUREMANAGE on - * DirectX manages the texture if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on - */ -#define DDCAPS2_CANMANAGETEXTURE 0x00800000l - -/* - * The Direct3D texture manager uses this cap to decide whether to put managed - * surfaces in non-local video memory. If the cap is set, the texture manager will - * put managed surfaces in non-local vidmem. Drivers that cannot texture from - * local vidmem SHOULD NOT set this cap. - */ -#define DDCAPS2_TEXMANINNONLOCALVIDMEM 0x01000000l - -/* - * Indicates that the driver supports DX7 type of stereo in at least one mode (which may - * not necessarily be the current mode). Applications should use IDirectDraw7 (or higher) - * ::EnumDisplayModes and check the DDSURFACEDESC.ddsCaps.dwCaps2 field for the presence of - * DDSCAPS2_STEREOSURFACELEFT to check if a particular mode supports stereo. The application - * can also use IDirectDraw7(or higher)::GetDisplayMode to check the current mode. - */ -#define DDCAPS2_STEREO 0x02000000L - -/* - * This caps bit is intended for internal DirectDraw use. - * -It is only valid if DDCAPS2_NONLOCALVIDMEMCAPS is set. - * -If this bit is set, then DDCAPS_CANBLTSYSMEM MUST be set by the driver (and - * all the assoicated system memory blt caps must be correct). - * -It implies that the system->video blt caps in DDCAPS also apply to system to - * nonlocal blts. I.e. the dwSVBCaps, dwSVBCKeyCaps, dwSVBFXCaps and dwSVBRops - * members of DDCAPS (DDCORECAPS) are filled in correctly. - * -Any blt from system to nonlocal memory that matches these caps bits will - * be passed to the driver. - * - * NOTE: This is intended to enable the driver itself to do efficient reordering - * of textures. This is NOT meant to imply that hardware can write into AGP memory. - * This operation is not currently supported. - */ -#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL 0x04000000L - -/* - * was DDCAPS2_PUREHAL - */ -#define DDCAPS2_RESERVED1 0x08000000L - -/* - * Driver supports management of video memory, if this flag is ON, - * driver manages the resource if requested with DDSCAPS2_TEXTUREMANAGE on - * DirectX manages the resource if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on - */ -#define DDCAPS2_CANMANAGERESOURCE 0x10000000L - -/* - * Driver supports dynamic textures. This will allow the application to set - * D3DUSAGE_DYNAMIC (DDSCAPS2_HINTDYNAMIC for drivers) at texture create time. - * Video memory dynamic textures WILL be lockable by applications. It is - * expected that these locks will be very efficient (which implies that the - * driver should always maintain a linear copy, a pointer to which can be - * quickly handed out to the application). - */ -#define DDCAPS2_DYNAMICTEXTURES 0x20000000L - -/* - * Driver supports auto-generation of mipmaps. - */ -#define DDCAPS2_CANAUTOGENMIPMAP 0x40000000L - -/* D3D9Ex only -- */ -#if !defined(D3D_DISABLE_9EX) - -/* - * Driver supports sharing of cross process resouces - */ -#define DDCAPS2_CANSHARERESOURCE 0x80000000L - -#endif // !D3D_DISABLE_9EX -/* -- D3D9Ex only */ - - -/**************************************************************************** - * - * DIRECTDRAW FX ALPHA CAPABILITY FLAGS - * - ****************************************************************************/ - -/* - * Supports alpha blending around the edge of a source color keyed surface. - * For Blt. - */ -#define DDFXALPHACAPS_BLTALPHAEDGEBLEND 0x00000001l - -/* - * Supports alpha information in the pixel format. The bit depth of alpha - * information in the pixel format can be 1,2,4, or 8. The alpha value becomes - * more opaque as the alpha value increases. (0 is transparent.) - * For Blt. - */ -#define DDFXALPHACAPS_BLTALPHAPIXELS 0x00000002l - -/* - * Supports alpha information in the pixel format. The bit depth of alpha - * information in the pixel format can be 1,2,4, or 8. The alpha value - * becomes more transparent as the alpha value increases. (0 is opaque.) - * This flag can only be set if DDCAPS_ALPHA is set. - * For Blt. - */ -#define DDFXALPHACAPS_BLTALPHAPIXELSNEG 0x00000004l - -/* - * Supports alpha only surfaces. The bit depth of an alpha only surface can be - * 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases. - * (0 is transparent.) - * For Blt. - */ -#define DDFXALPHACAPS_BLTALPHASURFACES 0x00000008l - -/* - * The depth of the alpha channel data can range can be 1,2,4, or 8. - * The NEG suffix indicates that this alpha channel becomes more transparent - * as the alpha value increases. (0 is opaque.) This flag can only be set if - * DDCAPS_ALPHA is set. - * For Blt. - */ -#define DDFXALPHACAPS_BLTALPHASURFACESNEG 0x00000010l - -/* - * Supports alpha blending around the edge of a source color keyed surface. - * For Overlays. - */ -#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND 0x00000020l - -/* - * Supports alpha information in the pixel format. The bit depth of alpha - * information in the pixel format can be 1,2,4, or 8. The alpha value becomes - * more opaque as the alpha value increases. (0 is transparent.) - * For Overlays. - */ -#define DDFXALPHACAPS_OVERLAYALPHAPIXELS 0x00000040l - -/* - * Supports alpha information in the pixel format. The bit depth of alpha - * information in the pixel format can be 1,2,4, or 8. The alpha value - * becomes more transparent as the alpha value increases. (0 is opaque.) - * This flag can only be set if DDCAPS_ALPHA is set. - * For Overlays. - */ -#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG 0x00000080l - -/* - * Supports alpha only surfaces. The bit depth of an alpha only surface can be - * 1,2,4, or 8. The alpha value becomes more opaque as the alpha value increases. - * (0 is transparent.) - * For Overlays. - */ -#define DDFXALPHACAPS_OVERLAYALPHASURFACES 0x00000100l - -/* - * The depth of the alpha channel data can range can be 1,2,4, or 8. - * The NEG suffix indicates that this alpha channel becomes more transparent - * as the alpha value increases. (0 is opaque.) This flag can only be set if - * DDCAPS_ALPHA is set. - * For Overlays. - */ -#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG 0x00000200l - -#if DIRECTDRAW_VERSION < 0x0600 -#endif //DIRECTDRAW_VERSION - - -/**************************************************************************** - * - * DIRECTDRAW FX CAPABILITY FLAGS - * - ****************************************************************************/ - -/* - * Uses arithmetic operations to stretch and shrink surfaces during blt - * rather than pixel doubling techniques. Along the Y axis. - */ -#define DDFXCAPS_BLTARITHSTRETCHY 0x00000020l - -/* - * Uses arithmetic operations to stretch during blt - * rather than pixel doubling techniques. Along the Y axis. Only - * works for x1, x2, etc. - */ -#define DDFXCAPS_BLTARITHSTRETCHYN 0x00000010l - -/* - * Supports mirroring left to right in blt. - */ -#define DDFXCAPS_BLTMIRRORLEFTRIGHT 0x00000040l - -/* - * Supports mirroring top to bottom in blt. - */ -#define DDFXCAPS_BLTMIRRORUPDOWN 0x00000080l - -/* - * Supports arbitrary rotation for blts. - */ -#define DDFXCAPS_BLTROTATION 0x00000100l - -/* - * Supports 90 degree rotations for blts. - */ -#define DDFXCAPS_BLTROTATION90 0x00000200l - -/* - * DirectDraw supports arbitrary shrinking of a surface along the - * x axis (horizontal direction) for blts. - */ -#define DDFXCAPS_BLTSHRINKX 0x00000400l - -/* - * DirectDraw supports integer shrinking (1x,2x,) of a surface - * along the x axis (horizontal direction) for blts. - */ -#define DDFXCAPS_BLTSHRINKXN 0x00000800l - -/* - * DirectDraw supports arbitrary shrinking of a surface along the - * y axis (horizontal direction) for blts. - */ -#define DDFXCAPS_BLTSHRINKY 0x00001000l - -/* - * DirectDraw supports integer shrinking (1x,2x,) of a surface - * along the y axis (vertical direction) for blts. - */ -#define DDFXCAPS_BLTSHRINKYN 0x00002000l - -/* - * DirectDraw supports arbitrary stretching of a surface along the - * x axis (horizontal direction) for blts. - */ -#define DDFXCAPS_BLTSTRETCHX 0x00004000l - -/* - * DirectDraw supports integer stretching (1x,2x,) of a surface - * along the x axis (horizontal direction) for blts. - */ -#define DDFXCAPS_BLTSTRETCHXN 0x00008000l - -/* - * DirectDraw supports arbitrary stretching of a surface along the - * y axis (horizontal direction) for blts. - */ -#define DDFXCAPS_BLTSTRETCHY 0x00010000l - -/* - * DirectDraw supports integer stretching (1x,2x,) of a surface - * along the y axis (vertical direction) for blts. - */ -#define DDFXCAPS_BLTSTRETCHYN 0x00020000l - -/* - * Uses arithmetic operations to stretch and shrink surfaces during - * overlay rather than pixel doubling techniques. Along the Y axis - * for overlays. - */ -#define DDFXCAPS_OVERLAYARITHSTRETCHY 0x00040000l - -/* - * Uses arithmetic operations to stretch surfaces during - * overlay rather than pixel doubling techniques. Along the Y axis - * for overlays. Only works for x1, x2, etc. - */ -#define DDFXCAPS_OVERLAYARITHSTRETCHYN 0x00000008l - -/* - * DirectDraw supports arbitrary shrinking of a surface along the - * x axis (horizontal direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSHRINKX 0x00080000l - -/* - * DirectDraw supports integer shrinking (1x,2x,) of a surface - * along the x axis (horizontal direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSHRINKXN 0x00100000l - -/* - * DirectDraw supports arbitrary shrinking of a surface along the - * y axis (horizontal direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSHRINKY 0x00200000l - -/* - * DirectDraw supports integer shrinking (1x,2x,) of a surface - * along the y axis (vertical direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSHRINKYN 0x00400000l - -/* - * DirectDraw supports arbitrary stretching of a surface along the - * x axis (horizontal direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSTRETCHX 0x00800000l - -/* - * DirectDraw supports integer stretching (1x,2x,) of a surface - * along the x axis (horizontal direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSTRETCHXN 0x01000000l - -/* - * DirectDraw supports arbitrary stretching of a surface along the - * y axis (horizontal direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSTRETCHY 0x02000000l - -/* - * DirectDraw supports integer stretching (1x,2x,) of a surface - * along the y axis (vertical direction) for overlays. - */ -#define DDFXCAPS_OVERLAYSTRETCHYN 0x04000000l - -/* - * DirectDraw supports mirroring of overlays across the vertical axis - */ -#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000l - -/* - * DirectDraw supports mirroring of overlays across the horizontal axis - */ -#define DDFXCAPS_OVERLAYMIRRORUPDOWN 0x10000000l - -/* - * DirectDraw supports deinterlacing of overlay surfaces - */ -#define DDFXCAPS_OVERLAYDEINTERLACE 0x20000000l - -/* - * Driver can do alpha blending for blits. - */ -#define DDFXCAPS_BLTALPHA 0x00000001l - - -/* - * Driver can do surface-reconstruction filtering for warped blits. - */ -#define DDFXCAPS_BLTFILTER DDFXCAPS_BLTARITHSTRETCHY - -/* - * Driver can do alpha blending for overlays. - */ -#define DDFXCAPS_OVERLAYALPHA 0x00000004l - - -/* - * Driver can do surface-reconstruction filtering for warped overlays. - */ -#define DDFXCAPS_OVERLAYFILTER DDFXCAPS_OVERLAYARITHSTRETCHY - -/**************************************************************************** - * - * DIRECTDRAW STEREO VIEW CAPABILITIES - * - ****************************************************************************/ - -/* - * This flag used to be DDSVCAPS_ENIGMA, which is now obsolete - */ - -#define DDSVCAPS_RESERVED1 0x00000001l - -/* - * This flag used to be DDSVCAPS_FLICKER, which is now obsolete - */ -#define DDSVCAPS_RESERVED2 0x00000002l - -/* - * This flag used to be DDSVCAPS_REDBLUE, which is now obsolete - */ -#define DDSVCAPS_RESERVED3 0x00000004l - -/* - * This flag used to be DDSVCAPS_SPLIT, which is now obsolete - */ -#define DDSVCAPS_RESERVED4 0x00000008l - -/* - * The stereo view is accomplished with switching technology - */ - -#define DDSVCAPS_STEREOSEQUENTIAL 0x00000010L - - - -/**************************************************************************** - * - * DIRECTDRAWPALETTE CAPABILITIES - * - ****************************************************************************/ - -/* - * Index is 4 bits. There are sixteen color entries in the palette table. - */ -#define DDPCAPS_4BIT 0x00000001l - -/* - * Index is onto a 8 bit color index. This field is only valid with the - * DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target - * surface is in 8bpp. Each color entry is one byte long and is an index - * into destination surface's 8bpp palette. - */ -#define DDPCAPS_8BITENTRIES 0x00000002l - -/* - * Index is 8 bits. There are 256 color entries in the palette table. - */ -#define DDPCAPS_8BIT 0x00000004l - -/* - * Indicates that this DIRECTDRAWPALETTE should use the palette color array - * passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE - * object. - * This flag is obsolete. DirectDraw always initializes the color array from - * the lpDDColorArray parameter. The definition remains for source-level - * compatibility. - */ -#define DDPCAPS_INITIALIZE 0x00000000l - -/* - * This palette is the one attached to the primary surface. Changing this - * table has immediate effect on the display unless DDPSETPAL_VSYNC is specified - * and supported. - */ -#define DDPCAPS_PRIMARYSURFACE 0x00000010l - -/* - * This palette is the one attached to the primary surface left. Changing - * this table has immediate effect on the display for the left eye unless - * DDPSETPAL_VSYNC is specified and supported. - */ -#define DDPCAPS_PRIMARYSURFACELEFT 0x00000020l - -/* - * This palette can have all 256 entries defined - */ -#define DDPCAPS_ALLOW256 0x00000040l - -/* - * This palette can have modifications to it synced with the monitors - * refresh rate. - */ -#define DDPCAPS_VSYNC 0x00000080l - -/* - * Index is 1 bit. There are two color entries in the palette table. - */ -#define DDPCAPS_1BIT 0x00000100l - -/* - * Index is 2 bit. There are four color entries in the palette table. - */ -#define DDPCAPS_2BIT 0x00000200l - -/* - * The peFlags member of PALETTEENTRY denotes an 8 bit alpha value - */ -#define DDPCAPS_ALPHA 0x00000400l - - -/**************************************************************************** - * - * DIRECTDRAWPALETTE SETENTRY CONSTANTS - * - ****************************************************************************/ - - -/**************************************************************************** - * - * DIRECTDRAWPALETTE GETENTRY CONSTANTS - * - ****************************************************************************/ - -/* 0 is the only legal value */ - -/**************************************************************************** - * - * DIRECTDRAWSURFACE SETPRIVATEDATA CONSTANTS - * - ****************************************************************************/ - -/* - * The passed pointer is an IUnknown ptr. The cbData argument to SetPrivateData - * must be set to sizeof(IUnknown*). DirectDraw will call AddRef through this - * pointer and Release when the private data is destroyed. This includes when - * the surface or palette is destroyed before such priovate data is destroyed. - */ -#define DDSPD_IUNKNOWNPOINTER 0x00000001L - -/* - * Private data is only valid for the current state of the object, - * as determined by the uniqueness value. - */ -#define DDSPD_VOLATILE 0x00000002L - - -/**************************************************************************** - * - * DIRECTDRAWSURFACE SETPALETTE CONSTANTS - * - ****************************************************************************/ - - -/**************************************************************************** - * - * DIRECTDRAW BITDEPTH CONSTANTS - * - * NOTE: These are only used to indicate supported bit depths. These - * are flags only, they are not to be used as an actual bit depth. The - * absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual - * bit depths in a surface or for changing the display mode. - * - ****************************************************************************/ - -/* - * 1 bit per pixel. - */ -#define DDBD_1 0x00004000l - -/* - * 2 bits per pixel. - */ -#define DDBD_2 0x00002000l - -/* - * 4 bits per pixel. - */ -#define DDBD_4 0x00001000l - -/* - * 8 bits per pixel. - */ -#define DDBD_8 0x00000800l - -/* - * 16 bits per pixel. - */ -#define DDBD_16 0x00000400l - -/* - * 24 bits per pixel. - */ -#define DDBD_24 0X00000200l - -/* - * 32 bits per pixel. - */ -#define DDBD_32 0x00000100l - -/**************************************************************************** - * - * DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS - * - ****************************************************************************/ - -/* - * Set if the structure contains a color space. Not set if the structure - * contains a single color key. - */ -#define DDCKEY_COLORSPACE 0x00000001l - -/* - * Set if the structure specifies a color key or color space which is to be - * used as a destination color key for blt operations. - */ -#define DDCKEY_DESTBLT 0x00000002l - -/* - * Set if the structure specifies a color key or color space which is to be - * used as a destination color key for overlay operations. - */ -#define DDCKEY_DESTOVERLAY 0x00000004l - -/* - * Set if the structure specifies a color key or color space which is to be - * used as a source color key for blt operations. - */ -#define DDCKEY_SRCBLT 0x00000008l - -/* - * Set if the structure specifies a color key or color space which is to be - * used as a source color key for overlay operations. - */ -#define DDCKEY_SRCOVERLAY 0x00000010l - - -/**************************************************************************** - * - * DIRECTDRAW COLOR KEY CAPABILITY FLAGS - * - ****************************************************************************/ - -/* - * Supports transparent blting using a color key to identify the replaceable - * bits of the destination surface for RGB colors. - */ -#define DDCKEYCAPS_DESTBLT 0x00000001l - -/* - * Supports transparent blting using a color space to identify the replaceable - * bits of the destination surface for RGB colors. - */ -#define DDCKEYCAPS_DESTBLTCLRSPACE 0x00000002l - -/* - * Supports transparent blting using a color space to identify the replaceable - * bits of the destination surface for YUV colors. - */ -#define DDCKEYCAPS_DESTBLTCLRSPACEYUV 0x00000004l - -/* - * Supports transparent blting using a color key to identify the replaceable - * bits of the destination surface for YUV colors. - */ -#define DDCKEYCAPS_DESTBLTYUV 0x00000008l - -/* - * Supports overlaying using colorkeying of the replaceable bits of the surface - * being overlayed for RGB colors. - */ -#define DDCKEYCAPS_DESTOVERLAY 0x00000010l - -/* - * Supports a color space as the color key for the destination for RGB colors. - */ -#define DDCKEYCAPS_DESTOVERLAYCLRSPACE 0x00000020l - -/* - * Supports a color space as the color key for the destination for YUV colors. - */ -#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV 0x00000040l - -/* - * Supports only one active destination color key value for visible overlay - * surfaces. - */ -#define DDCKEYCAPS_DESTOVERLAYONEACTIVE 0x00000080l - -/* - * Supports overlaying using colorkeying of the replaceable bits of the - * surface being overlayed for YUV colors. - */ -#define DDCKEYCAPS_DESTOVERLAYYUV 0x00000100l - -/* - * Supports transparent blting using the color key for the source with - * this surface for RGB colors. - */ -#define DDCKEYCAPS_SRCBLT 0x00000200l - -/* - * Supports transparent blting using a color space for the source with - * this surface for RGB colors. - */ -#define DDCKEYCAPS_SRCBLTCLRSPACE 0x00000400l - -/* - * Supports transparent blting using a color space for the source with - * this surface for YUV colors. - */ -#define DDCKEYCAPS_SRCBLTCLRSPACEYUV 0x00000800l - -/* - * Supports transparent blting using the color key for the source with - * this surface for YUV colors. - */ -#define DDCKEYCAPS_SRCBLTYUV 0x00001000l - -/* - * Supports overlays using the color key for the source with this - * overlay surface for RGB colors. - */ -#define DDCKEYCAPS_SRCOVERLAY 0x00002000l - -/* - * Supports overlays using a color space as the source color key for - * the overlay surface for RGB colors. - */ -#define DDCKEYCAPS_SRCOVERLAYCLRSPACE 0x00004000l - -/* - * Supports overlays using a color space as the source color key for - * the overlay surface for YUV colors. - */ -#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV 0x00008000l - -/* - * Supports only one active source color key value for visible - * overlay surfaces. - */ -#define DDCKEYCAPS_SRCOVERLAYONEACTIVE 0x00010000l - -/* - * Supports overlays using the color key for the source with this - * overlay surface for YUV colors. - */ -#define DDCKEYCAPS_SRCOVERLAYYUV 0x00020000l - -/* - * there are no bandwidth trade-offs for using colorkey with an overlay - */ -#define DDCKEYCAPS_NOCOSTOVERLAY 0x00040000l - - -/**************************************************************************** - * - * DIRECTDRAW PIXELFORMAT FLAGS - * - ****************************************************************************/ - -/* - * The surface has alpha channel information in the pixel format. - */ -#define DDPF_ALPHAPIXELS 0x00000001l - -/* - * The pixel format contains alpha only information - */ -#define DDPF_ALPHA 0x00000002l - -/* - * The FourCC code is valid. - */ -#define DDPF_FOURCC 0x00000004l - -/* - * The surface is 4-bit color indexed. - */ -#define DDPF_PALETTEINDEXED4 0x00000008l - -/* - * The surface is indexed into a palette which stores indices - * into the destination surface's 8-bit palette. - */ -#define DDPF_PALETTEINDEXEDTO8 0x00000010l - -/* - * The surface is 8-bit color indexed. - */ -#define DDPF_PALETTEINDEXED8 0x00000020l - -/* - * The RGB data in the pixel format structure is valid. - */ -#define DDPF_RGB 0x00000040l - -/* - * The surface will accept pixel data in the format specified - * and compress it during the write. - */ -#define DDPF_COMPRESSED 0x00000080l - -/* - * The surface will accept RGB data and translate it during - * the write to YUV data. The format of the data to be written - * will be contained in the pixel format structure. The DDPF_RGB - * flag will be set. - */ -#define DDPF_RGBTOYUV 0x00000100l - -/* - * pixel format is YUV - YUV data in pixel format struct is valid - */ -#define DDPF_YUV 0x00000200l - -/* - * pixel format is a z buffer only surface - */ -#define DDPF_ZBUFFER 0x00000400l - -/* - * The surface is 1-bit color indexed. - */ -#define DDPF_PALETTEINDEXED1 0x00000800l - -/* - * The surface is 2-bit color indexed. - */ -#define DDPF_PALETTEINDEXED2 0x00001000l - -/* - * The surface contains Z information in the pixels - */ -#define DDPF_ZPIXELS 0x00002000l - -/* - * The surface contains stencil information along with Z - */ -#define DDPF_STENCILBUFFER 0x00004000l - -/* - * Premultiplied alpha format -- the color components have been - * premultiplied by the alpha component. - */ -#define DDPF_ALPHAPREMULT 0x00008000l - - -/* - * Luminance data in the pixel format is valid. - * Use this flag for luminance-only or luminance+alpha surfaces, - * the bit depth is then ddpf.dwLuminanceBitCount. - */ -#define DDPF_LUMINANCE 0x00020000l - -/* - * Luminance data in the pixel format is valid. - * Use this flag when hanging luminance off bumpmap surfaces, - * the bit mask for the luminance portion of the pixel is then - * ddpf.dwBumpLuminanceBitMask - */ -#define DDPF_BUMPLUMINANCE 0x00040000l - -/* - * Bump map dUdV data in the pixel format is valid. - */ -#define DDPF_BUMPDUDV 0x00080000l - - -/*=========================================================================== - * - * - * DIRECTDRAW CALLBACK FLAGS - * - * - *==========================================================================*/ - -/**************************************************************************** - * - * DIRECTDRAW ENUMSURFACES FLAGS - * - ****************************************************************************/ - -/* - * Enumerate all of the surfaces that meet the search criterion. - */ -#define DDENUMSURFACES_ALL 0x00000001l - -/* - * A search hit is a surface that matches the surface description. - */ -#define DDENUMSURFACES_MATCH 0x00000002l - -/* - * A search hit is a surface that does not match the surface description. - */ -#define DDENUMSURFACES_NOMATCH 0x00000004l - -/* - * Enumerate the first surface that can be created which meets the search criterion. - */ -#define DDENUMSURFACES_CANBECREATED 0x00000008l - -/* - * Enumerate the surfaces that already exist that meet the search criterion. - */ -#define DDENUMSURFACES_DOESEXIST 0x00000010l - - -/**************************************************************************** - * - * DIRECTDRAW SETDISPLAYMODE FLAGS - * - ****************************************************************************/ - -/* - * The desired mode is a standard VGA mode - */ -#define DDSDM_STANDARDVGAMODE 0x00000001l - - -/**************************************************************************** - * - * DIRECTDRAW ENUMDISPLAYMODES FLAGS - * - ****************************************************************************/ - -/* - * Enumerate Modes with different refresh rates. EnumDisplayModes guarantees - * that a particular mode will be enumerated only once. This flag specifies whether - * the refresh rate is taken into account when determining if a mode is unique. - */ -#define DDEDM_REFRESHRATES 0x00000001l - -/* - * Enumerate VGA modes. Specify this flag if you wish to enumerate supported VGA - * modes such as mode 0x13 in addition to the usual ModeX modes (which are always - * enumerated if the application has previously called SetCooperativeLevel with the - * DDSCL_ALLOWMODEX flag set). - */ -#define DDEDM_STANDARDVGAMODES 0x00000002L - - -/**************************************************************************** - * - * DIRECTDRAW SETCOOPERATIVELEVEL FLAGS - * - ****************************************************************************/ - -/* - * Exclusive mode owner will be responsible for the entire primary surface. - * GDI can be ignored. used with DD - */ -#define DDSCL_FULLSCREEN 0x00000001l - -/* - * allow CTRL_ALT_DEL to work while in fullscreen exclusive mode - */ -#define DDSCL_ALLOWREBOOT 0x00000002l - -/* - * prevents DDRAW from modifying the application window. - * prevents DDRAW from minimize/restore the application window on activation. - */ -#define DDSCL_NOWINDOWCHANGES 0x00000004l - -/* - * app wants to work as a regular Windows application - */ -#define DDSCL_NORMAL 0x00000008l - -/* - * app wants exclusive access - */ -#define DDSCL_EXCLUSIVE 0x00000010l - - -/* - * app can deal with non-windows display modes - */ -#define DDSCL_ALLOWMODEX 0x00000040l - -/* - * this window will receive the focus messages - */ -#define DDSCL_SETFOCUSWINDOW 0x00000080l - -/* - * this window is associated with the DDRAW object and will - * cover the screen in fullscreen mode - */ -#define DDSCL_SETDEVICEWINDOW 0x00000100l - -/* - * app wants DDRAW to create a window to be associated with the - * DDRAW object - */ -#define DDSCL_CREATEDEVICEWINDOW 0x00000200l - -/* - * App explicitly asks DDRAW/D3D to be multithread safe. This makes D3D - * take the global crtisec more frequently. - */ -#define DDSCL_MULTITHREADED 0x00000400l - -/* - * App specifies that it would like to keep the FPU set up for optimal Direct3D - * performance (single precision and exceptions disabled) so Direct3D - * does not need to explicitly set the FPU each time. This is assumed by - * default in DirectX 7. See also DDSCL_FPUPRESERVE - */ -#define DDSCL_FPUSETUP 0x00000800l - -/* - * App specifies that it needs either double precision FPU or FPU exceptions - * enabled. This makes Direct3D explicitly set the FPU state eah time it is - * called. Setting the flag will reduce Direct3D performance. The flag is - * assumed by default in DirectX 6 and earlier. See also DDSCL_FPUSETUP - */ -#define DDSCL_FPUPRESERVE 0x00001000l - - -/**************************************************************************** - * - * DIRECTDRAW BLT FLAGS - * - ****************************************************************************/ - -/* - * Use the alpha information in the pixel format or the alpha channel surface - * attached to the destination surface as the alpha channel for this blt. - */ -#define DDBLT_ALPHADEST 0x00000001l - -/* - * Use the dwConstAlphaDest field in the DDBLTFX structure as the alpha channel - * for the destination surface for this blt. - */ -#define DDBLT_ALPHADESTCONSTOVERRIDE 0x00000002l - -/* - * The NEG suffix indicates that the destination surface becomes more - * transparent as the alpha value increases. (0 is opaque) - */ -#define DDBLT_ALPHADESTNEG 0x00000004l - -/* - * Use the lpDDSAlphaDest field in the DDBLTFX structure as the alpha - * channel for the destination for this blt. - */ -#define DDBLT_ALPHADESTSURFACEOVERRIDE 0x00000008l - -/* - * Use the dwAlphaEdgeBlend field in the DDBLTFX structure as the alpha channel - * for the edges of the image that border the color key colors. - */ -#define DDBLT_ALPHAEDGEBLEND 0x00000010l - -/* - * Use the alpha information in the pixel format or the alpha channel surface - * attached to the source surface as the alpha channel for this blt. - */ -#define DDBLT_ALPHASRC 0x00000020l - -/* - * Use the dwConstAlphaSrc field in the DDBLTFX structure as the alpha channel - * for the source for this blt. - */ -#define DDBLT_ALPHASRCCONSTOVERRIDE 0x00000040l - -/* - * The NEG suffix indicates that the source surface becomes more transparent - * as the alpha value increases. (0 is opaque) - */ -#define DDBLT_ALPHASRCNEG 0x00000080l - -/* - * Use the lpDDSAlphaSrc field in the DDBLTFX structure as the alpha channel - * for the source for this blt. - */ -#define DDBLT_ALPHASRCSURFACEOVERRIDE 0x00000100l - -/* - * Do this blt asynchronously through the FIFO in the order received. If - * there is no room in the hardware FIFO fail the call. - */ -#define DDBLT_ASYNC 0x00000200l - -/* - * Uses the dwFillColor field in the DDBLTFX structure as the RGB color - * to fill the destination rectangle on the destination surface with. - */ -#define DDBLT_COLORFILL 0x00000400l - -/* - * Uses the dwDDFX field in the DDBLTFX structure to specify the effects - * to use for the blt. - */ -#define DDBLT_DDFX 0x00000800l - -/* - * Uses the dwDDROPS field in the DDBLTFX structure to specify the ROPS - * that are not part of the Win32 API. - */ -#define DDBLT_DDROPS 0x00001000l - -/* - * Use the color key associated with the destination surface. - */ -#define DDBLT_KEYDEST 0x00002000l - -/* - * Use the dckDestColorkey field in the DDBLTFX structure as the color key - * for the destination surface. - */ -#define DDBLT_KEYDESTOVERRIDE 0x00004000l - -/* - * Use the color key associated with the source surface. - */ -#define DDBLT_KEYSRC 0x00008000l - -/* - * Use the dckSrcColorkey field in the DDBLTFX structure as the color key - * for the source surface. - */ -#define DDBLT_KEYSRCOVERRIDE 0x00010000l - -/* - * Use the dwROP field in the DDBLTFX structure for the raster operation - * for this blt. These ROPs are the same as the ones defined in the Win32 API. - */ -#define DDBLT_ROP 0x00020000l - -/* - * Use the dwRotationAngle field in the DDBLTFX structure as the angle - * (specified in 1/100th of a degree) to rotate the surface. - */ -#define DDBLT_ROTATIONANGLE 0x00040000l - -/* - * Z-buffered blt using the z-buffers attached to the source and destination - * surfaces and the dwZBufferOpCode field in the DDBLTFX structure as the - * z-buffer opcode. - */ -#define DDBLT_ZBUFFER 0x00080000l - -/* - * Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field - * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively - * for the destination. - */ -#define DDBLT_ZBUFFERDESTCONSTOVERRIDE 0x00100000l - -/* - * Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode - * field in the DDBLTFX structure as the z-buffer and z-buffer opcode - * respectively for the destination. - */ -#define DDBLT_ZBUFFERDESTOVERRIDE 0x00200000l - -/* - * Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field - * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively - * for the source. - */ -#define DDBLT_ZBUFFERSRCCONSTOVERRIDE 0x00400000l - -/* - * Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode - * field in the DDBLTFX structure as the z-buffer and z-buffer opcode - * respectively for the source. - */ -#define DDBLT_ZBUFFERSRCOVERRIDE 0x00800000l - -/* - * wait until the device is ready to handle the blt - * this will cause blt to not return DDERR_WASSTILLDRAWING - */ -#define DDBLT_WAIT 0x01000000l - -/* - * Uses the dwFillDepth field in the DDBLTFX structure as the depth value - * to fill the destination rectangle on the destination Z-buffer surface - * with. - */ -#define DDBLT_DEPTHFILL 0x02000000l - - -/* - * Return immediately (with DDERR_WASSTILLDRAWING) if the device is not - * ready to schedule the blt at the time Blt() is called. - */ -#define DDBLT_DONOTWAIT 0x08000000l - -/* - * These flags indicate a presentation blt (i.e. a blt - * that moves surface contents from an offscreen back buffer to the primary - * surface). The driver is not allowed to "queue" more than three such blts. - * The "end" of the presentation blt is indicated, since the - * blt may be clipped, in which case the runtime will call the driver with - * several blts. All blts (even if not clipped) are tagged with DDBLT_PRESENTATION - * and the last (even if not clipped) additionally with DDBLT_LAST_PRESENTATION. - * Thus the true rule is that the driver must not schedule a DDBLT_PRESENTATION - * blt if there are 3 or more DDBLT_PRESENTLAST blts in the hardware pipe. - * If there are such blts in the pipe, the driver should return DDERR_WASSTILLDRAWING - * until the oldest queued DDBLT_LAST_PRESENTATION blts has been retired (i.e. the - * pixels have been actually written to the primary surface). Once the oldest blt - * has been retired, the driver is free to schedule the current blt. - * The goal is to provide a mechanism whereby the device's hardware queue never - * gets more than 3 frames ahead of the frames being generated by the application. - * When excessive queueing occurs, applications become unusable because the application - * visibly lags user input, and such problems make windowed interactive applications impossible. - * Some drivers may not have sufficient knowledge of their hardware's FIFO to know - * when a certain blt has been retired. Such drivers should code cautiously, and - * simply not allow any frames to be queued at all. DDBLT_LAST_PRESENTATION should cause - * such drivers to return DDERR_WASSTILLDRAWING until the accelerator is completely - * finished- exactly as if the application had called Lock on the source surface - * before calling Blt. - * In other words, the driver is allowed and encouraged to - * generate as much latency as it can, but never more than 3 frames worth. - * Implementation detail: Drivers should count blts against the SOURCE surface, not - * against the primary surface. This enables multiple parallel windowed application - * to function more optimally. - * This flag is passed only to DX8 or higher drivers. - * - * APPLICATIONS DO NOT SET THESE FLAGS. THEY ARE SET BY THE DIRECTDRAW RUNTIME. - * - */ -#define DDBLT_PRESENTATION 0x10000000l -#define DDBLT_LAST_PRESENTATION 0x20000000l - -/* - * If DDBLT_EXTENDED_FLAGS is set, then the driver should re-interpret - * other flags according to the definitions that follow. - * For example, bit 0 (0x00000001L) means DDBLT_ALPHADEST, unless - * DDBLT_EXTENDED_FLAGS is also set, in which case bit 0 means - * DDBLT_EXTENDED_LINEAR_CONTENT. - * Only DirectX9 and higher drivers will be given extended blt flags. - * Only flags explicitly mentioned here should be re-interpreted. - * All other flags retain their original meanings. - * - * List of re-interpreted flags: - * - * Bit Hex value New meaning old meaning - * --------------------------------------------------------------- - * 2 0x00000004 DDBLT_EXTENDED_LINEAR_CONTENT DDBLT_ALPHADESTNEG - * 4 0x00000010 DDBLT_EXTENDED_PRESENTATION_STRETCHFACTOR DDBLT_ALPHAEDGEBLEND - * - * - * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED - * FOR USE BY THE DIRECT3D RUNTIME. - */ -#define DDBLT_EXTENDED_FLAGS 0x40000000l - -/* - * EXTENDED FLAG. SEE DEFINITION OF DDBLT_EXTENDED_FLAGS. - * This flag indidcates that the source surface contains content in a - * linear color space. The driver may perform gamma correction to the - * desktop color space (i.e. sRGB, gamma 2.2) as part of this blt. - * If the device can perform such a conversion as part of the copy, - * the driver should also set D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION - * - * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED - * FOR USE BY THE DIRECT3D RUNTIME. Use IDirect3DSwapChain9::Present - * and specify D3DPRESENT_LINEAR_CONTENT in order to use this functionality. - */ -#define DDBLT_EXTENDED_LINEAR_CONTENT 0x00000004l - - -/**************************************************************************** - * - * BLTFAST FLAGS - * - ****************************************************************************/ - -#define DDBLTFAST_NOCOLORKEY 0x00000000 -#define DDBLTFAST_SRCCOLORKEY 0x00000001 -#define DDBLTFAST_DESTCOLORKEY 0x00000002 -#define DDBLTFAST_WAIT 0x00000010 -#define DDBLTFAST_DONOTWAIT 0x00000020 - -/**************************************************************************** - * - * FLIP FLAGS - * - ****************************************************************************/ - -#define DDFLIP_WAIT 0x00000001L - -/* - * Indicates that the target surface contains the even field of video data. - * This flag is only valid with an overlay surface. - */ -#define DDFLIP_EVEN 0x00000002L - -/* - * Indicates that the target surface contains the odd field of video data. - * This flag is only valid with an overlay surface. - */ -#define DDFLIP_ODD 0x00000004L - -/* - * Causes DirectDraw to perform the physical flip immediately and return - * to the application. Typically, what was the front buffer but is now the back - * buffer will still be visible (depending on timing) until the next vertical - * retrace. Subsequent operations involving the two flipped surfaces will - * not check to see if the physical flip has finished (i.e. will not return - * DDERR_WASSTILLDRAWING for that reason (but may for other reasons)). - * This allows an application to perform Flips at a higher frequency than the - * monitor refresh rate, but may introduce visible artifacts. - * Only effective if DDCAPS2_FLIPNOVSYNC is set. If that bit is not set, - * DDFLIP_NOVSYNC has no effect. - */ -#define DDFLIP_NOVSYNC 0x00000008L - - -/* - * Flip Interval Flags. These flags indicate how many vertical retraces to wait between - * each flip. The default is one. DirectDraw will return DDERR_WASSTILLDRAWING for each - * surface involved in the flip until the specified number of vertical retraces has - * ocurred. Only effective if DDCAPS2_FLIPINTERVAL is set. If that bit is not set, - * DDFLIP_INTERVALn has no effect. - */ - -/* - * DirectDraw will flip on every other vertical sync - */ -#define DDFLIP_INTERVAL2 0x02000000L - - -/* - * DirectDraw will flip on every third vertical sync - */ -#define DDFLIP_INTERVAL3 0x03000000L - - -/* - * DirectDraw will flip on every fourth vertical sync - */ -#define DDFLIP_INTERVAL4 0x04000000L - -/* - * DirectDraw will flip and display a main stereo surface - */ -#define DDFLIP_STEREO 0x00000010L - -/* - * On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish - * to override the default and use time when the accelerator is busy (as denoted by - * the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT. - */ -#define DDFLIP_DONOTWAIT 0x00000020L - - -/**************************************************************************** - * - * DIRECTDRAW SURFACE OVERLAY FLAGS - * - ****************************************************************************/ - -/* - * Use the alpha information in the pixel format or the alpha channel surface - * attached to the destination surface as the alpha channel for the - * destination overlay. - */ -#define DDOVER_ALPHADEST 0x00000001l - -/* - * Use the dwConstAlphaDest field in the DDOVERLAYFX structure as the - * destination alpha channel for this overlay. - */ -#define DDOVER_ALPHADESTCONSTOVERRIDE 0x00000002l - -/* - * The NEG suffix indicates that the destination surface becomes more - * transparent as the alpha value increases. - */ -#define DDOVER_ALPHADESTNEG 0x00000004l - -/* - * Use the lpDDSAlphaDest field in the DDOVERLAYFX structure as the alpha - * channel destination for this overlay. - */ -#define DDOVER_ALPHADESTSURFACEOVERRIDE 0x00000008l - -/* - * Use the dwAlphaEdgeBlend field in the DDOVERLAYFX structure as the alpha - * channel for the edges of the image that border the color key colors. - */ -#define DDOVER_ALPHAEDGEBLEND 0x00000010l - -/* - * Use the alpha information in the pixel format or the alpha channel surface - * attached to the source surface as the source alpha channel for this overlay. - */ -#define DDOVER_ALPHASRC 0x00000020l - -/* - * Use the dwConstAlphaSrc field in the DDOVERLAYFX structure as the source - * alpha channel for this overlay. - */ -#define DDOVER_ALPHASRCCONSTOVERRIDE 0x00000040l - -/* - * The NEG suffix indicates that the source surface becomes more transparent - * as the alpha value increases. - */ -#define DDOVER_ALPHASRCNEG 0x00000080l - -/* - * Use the lpDDSAlphaSrc field in the DDOVERLAYFX structure as the alpha channel - * source for this overlay. - */ -#define DDOVER_ALPHASRCSURFACEOVERRIDE 0x00000100l - -/* - * Turn this overlay off. - */ -#define DDOVER_HIDE 0x00000200l - -/* - * Use the color key associated with the destination surface. - */ -#define DDOVER_KEYDEST 0x00000400l - -/* - * Use the dckDestColorkey field in the DDOVERLAYFX structure as the color key - * for the destination surface - */ -#define DDOVER_KEYDESTOVERRIDE 0x00000800l - -/* - * Use the color key associated with the source surface. - */ -#define DDOVER_KEYSRC 0x00001000l - -/* - * Use the dckSrcColorkey field in the DDOVERLAYFX structure as the color key - * for the source surface. - */ -#define DDOVER_KEYSRCOVERRIDE 0x00002000l - -/* - * Turn this overlay on. - */ -#define DDOVER_SHOW 0x00004000l - -/* - * Add a dirty rect to an emulated overlayed surface. - */ -#define DDOVER_ADDDIRTYRECT 0x00008000l - -/* - * Redraw all dirty rects on an emulated overlayed surface. - */ -#define DDOVER_REFRESHDIRTYRECTS 0x00010000l - -/* - * Redraw the entire surface on an emulated overlayed surface. - */ -#define DDOVER_REFRESHALL 0x00020000l - - -/* - * Use the overlay FX flags to define special overlay FX - */ -#define DDOVER_DDFX 0x00080000l - -/* - * Autoflip the overlay when ever the video port autoflips - */ -#define DDOVER_AUTOFLIP 0x00100000l - -/* - * Display each field of video port data individually without - * causing any jittery artifacts - */ -#define DDOVER_BOB 0x00200000l - -/* - * Indicates that bob/weave decisions should not be overridden by other - * interfaces. - */ -#define DDOVER_OVERRIDEBOBWEAVE 0x00400000l - -/* - * Indicates that the surface memory is composed of interleaved fields. - */ -#define DDOVER_INTERLEAVED 0x00800000l - -/* - * Indicates that bob will be performed using hardware rather than - * software or emulated. - */ -#define DDOVER_BOBHARDWARE 0x01000000l - -/* - * Indicates that overlay FX structure contains valid ARGB scaling factors. - */ -#define DDOVER_ARGBSCALEFACTORS 0x02000000l - -/* - * Indicates that ARGB scaling factors can be degraded to fit driver capabilities. - */ -#define DDOVER_DEGRADEARGBSCALING 0x04000000l - - -#ifdef COMBOX_SANDBOX -#define DX_LONGHORN_PRESERVEDC -#endif - -#ifdef DX_LONGHORN_PRESERVEDC - -/**************************************************************************** - * - * DIRECTDRAWSURFACE SETSURFACEDESC FLAGS - * - ****************************************************************************/ - -/* - * The default. The GDI DC will be tore down. - */ -#define DDSETSURFACEDESC_RECREATEDC 0x00000000L // default - -/* - * The default. The GDI DC will be kept. - */ -#define DDSETSURFACEDESC_PRESERVEDC 0x00000001L - - -#endif // DX_LONGHORN_PRESERVEDC - -/**************************************************************************** - * - * DIRECTDRAWSURFACE LOCK FLAGS - * - ****************************************************************************/ - -/* - * The default. Set to indicate that Lock should return a valid memory pointer - * to the top of the specified rectangle. If no rectangle is specified then a - * pointer to the top of the surface is returned. - */ -#define DDLOCK_SURFACEMEMORYPTR 0x00000000L // default - -/* - * Set to indicate that Lock should wait until it can obtain a valid memory - * pointer before returning. If this bit is set, Lock will never return - * DDERR_WASSTILLDRAWING. - */ -#define DDLOCK_WAIT 0x00000001L - -/* - * Set if an event handle is being passed to Lock. Lock will trigger the event - * when it can return the surface memory pointer requested. - */ -#define DDLOCK_EVENT 0x00000002L - -/* - * Indicates that the surface being locked will only be read from. - */ -#define DDLOCK_READONLY 0x00000010L - -/* - * Indicates that the surface being locked will only be written to - */ -#define DDLOCK_WRITEONLY 0x00000020L - - -/* - * Indicates that a system wide lock should not be taken when this surface - * is locked. This has several advantages (cursor responsiveness, ability - * to call more Windows functions, easier debugging) when locking video - * memory surfaces. However, an application specifying this flag must - * comply with a number of conditions documented in the help file. - * Furthermore, this flag cannot be specified when locking the primary. - */ -#define DDLOCK_NOSYSLOCK 0x00000800L - -/* - * Used only with Direct3D Vertex Buffer Locks. Indicates that no vertices - * that were referred to in Draw*PrimtiveVB calls since the start of the - * frame (or the last lock without this flag) will be modified during the - * lock. This can be useful when one is only appending data to the vertex - * buffer - */ -#define DDLOCK_NOOVERWRITE 0x00001000L - -/* - * Indicates that no assumptions will be made about the contents of the - * surface or vertex buffer during this lock. - * This enables two things: - * - Direct3D or the driver may provide an alternative memory - * area as the vertex buffer. This is useful when one plans to clear the - * contents of the vertex buffer and fill in new data. - * - Drivers sometimes store surface data in a re-ordered format. - * When the application locks the surface, the driver is forced to un-re-order - * the surface data before allowing the application to see the surface contents. - * This flag is a hint to the driver that it can skip the un-re-ordering process - * since the application plans to overwrite every single pixel in the surface - * or locked rectangle (and so erase any un-re-ordered pixels anyway). - * Applications should always set this flag when they intend to overwrite the entire - * surface or locked rectangle. - */ -#define DDLOCK_DISCARDCONTENTS 0x00002000L - /* - * DDLOCK_OKTOSWAP is an older, less informative name for DDLOCK_DISCARDCONTENTS - */ -#define DDLOCK_OKTOSWAP 0x00002000L - -/* - * On IDirectDrawSurface7 and higher interfaces, the default is DDLOCK_WAIT. If you wish - * to override the default and use time when the accelerator is busy (as denoted by - * the DDERR_WASSTILLDRAWING return code) then use DDLOCK_DONOTWAIT. - */ -#define DDLOCK_DONOTWAIT 0x00004000L - -/* - * This indicates volume texture lock with front and back specified. - */ -#define DDLOCK_HASVOLUMETEXTUREBOXRECT 0x00008000L - -/* - * This indicates that the driver should not update dirty rect information for this lock. - */ -#define DDLOCK_NODIRTYUPDATE 0x00010000L - - -/**************************************************************************** - * - * DIRECTDRAWSURFACE PAGELOCK FLAGS - * - ****************************************************************************/ - -/* - * No flags defined at present - */ - - -/**************************************************************************** - * - * DIRECTDRAWSURFACE PAGEUNLOCK FLAGS - * - ****************************************************************************/ - -/* - * No flags defined at present - */ - - -/**************************************************************************** - * - * DIRECTDRAWSURFACE BLT FX FLAGS - * - ****************************************************************************/ - -/* - * If stretching, use arithmetic stretching along the Y axis for this blt. - */ -#define DDBLTFX_ARITHSTRETCHY 0x00000001l - -/* - * Do this blt mirroring the surface left to right. Spin the - * surface around its y-axis. - */ -#define DDBLTFX_MIRRORLEFTRIGHT 0x00000002l - -/* - * Do this blt mirroring the surface up and down. Spin the surface - * around its x-axis. - */ -#define DDBLTFX_MIRRORUPDOWN 0x00000004l - -/* - * Schedule this blt to avoid tearing. - */ -#define DDBLTFX_NOTEARING 0x00000008l - -/* - * Do this blt rotating the surface one hundred and eighty degrees. - */ -#define DDBLTFX_ROTATE180 0x00000010l - -/* - * Do this blt rotating the surface two hundred and seventy degrees. - */ -#define DDBLTFX_ROTATE270 0x00000020l - -/* - * Do this blt rotating the surface ninety degrees. - */ -#define DDBLTFX_ROTATE90 0x00000040l - -/* - * Do this z blt using dwZBufferLow and dwZBufferHigh as range values - * specified to limit the bits copied from the source surface. - */ -#define DDBLTFX_ZBUFFERRANGE 0x00000080l - -/* - * Do this z blt adding the dwZBufferBaseDest to each of the sources z values - * before comparing it with the desting z values. - */ -#define DDBLTFX_ZBUFFERBASEDEST 0x00000100l - -/**************************************************************************** - * - * DIRECTDRAWSURFACE OVERLAY FX FLAGS - * - ****************************************************************************/ - -/* - * If stretching, use arithmetic stretching along the Y axis for this overlay. - */ -#define DDOVERFX_ARITHSTRETCHY 0x00000001l - -/* - * Mirror the overlay across the vertical axis - */ -#define DDOVERFX_MIRRORLEFTRIGHT 0x00000002l - -/* - * Mirror the overlay across the horizontal axis - */ -#define DDOVERFX_MIRRORUPDOWN 0x00000004l - -/* - * Deinterlace the overlay, if possible - */ -#define DDOVERFX_DEINTERLACE 0x00000008l - - -/**************************************************************************** - * - * DIRECTDRAW WAITFORVERTICALBLANK FLAGS - * - ****************************************************************************/ - -/* - * return when the vertical blank interval begins - */ -#define DDWAITVB_BLOCKBEGIN 0x00000001l - -/* - * set up an event to trigger when the vertical blank begins - */ -#define DDWAITVB_BLOCKBEGINEVENT 0x00000002l - -/* - * return when the vertical blank interval ends and display begins - */ -#define DDWAITVB_BLOCKEND 0x00000004l - -/**************************************************************************** - * - * DIRECTDRAW GETFLIPSTATUS FLAGS - * - ****************************************************************************/ - -/* - * is it OK to flip now? - */ -#define DDGFS_CANFLIP 0x00000001l - -/* - * is the last flip finished? - */ -#define DDGFS_ISFLIPDONE 0x00000002l - -/**************************************************************************** - * - * DIRECTDRAW GETBLTSTATUS FLAGS - * - ****************************************************************************/ - -/* - * is it OK to blt now? - */ -#define DDGBS_CANBLT 0x00000001l - -/* - * is the blt to the surface finished? - */ -#define DDGBS_ISBLTDONE 0x00000002l - - -/**************************************************************************** - * - * DIRECTDRAW ENUMOVERLAYZORDER FLAGS - * - ****************************************************************************/ - -/* - * Enumerate overlays back to front. - */ -#define DDENUMOVERLAYZ_BACKTOFRONT 0x00000000l - -/* - * Enumerate overlays front to back - */ -#define DDENUMOVERLAYZ_FRONTTOBACK 0x00000001l - -/**************************************************************************** - * - * DIRECTDRAW UPDATEOVERLAYZORDER FLAGS - * - ****************************************************************************/ - -/* - * Send overlay to front - */ -#define DDOVERZ_SENDTOFRONT 0x00000000l - -/* - * Send overlay to back - */ -#define DDOVERZ_SENDTOBACK 0x00000001l - -/* - * Move Overlay forward - */ -#define DDOVERZ_MOVEFORWARD 0x00000002l - -/* - * Move Overlay backward - */ -#define DDOVERZ_MOVEBACKWARD 0x00000003l - -/* - * Move Overlay in front of relative surface - */ -#define DDOVERZ_INSERTINFRONTOF 0x00000004l - -/* - * Move Overlay in back of relative surface - */ -#define DDOVERZ_INSERTINBACKOF 0x00000005l - - -/**************************************************************************** - * - * DIRECTDRAW SETGAMMARAMP FLAGS - * - ****************************************************************************/ - -/* - * Request calibrator to adjust the gamma ramp according to the physical - * properties of the display so that the result should appear identical - * on all systems. - */ -#define DDSGR_CALIBRATE 0x00000001L - - -/**************************************************************************** - * - * DIRECTDRAW STARTMODETEST FLAGS - * - ****************************************************************************/ - -/* - * Indicates that the mode being tested has passed - */ -#define DDSMT_ISTESTREQUIRED 0x00000001L - - -/**************************************************************************** - * - * DIRECTDRAW EVALUATEMODE FLAGS - * - ****************************************************************************/ - -/* - * Indicates that the mode being tested has passed - */ -#define DDEM_MODEPASSED 0x00000001L - -/* - * Indicates that the mode being tested has failed - */ -#define DDEM_MODEFAILED 0x00000002L - - -/*=========================================================================== - * - * - * DIRECTDRAW RETURN CODES - * - * The return values from DirectDraw Commands and Surface that return an HRESULT - * are codes from DirectDraw concerning the results of the action - * requested by DirectDraw. - * - *==========================================================================*/ - -/* - * Status is OK - * - * Issued by: DirectDraw Commands and all callbacks - */ -#define DD_OK S_OK -#define DD_FALSE S_FALSE - -/**************************************************************************** - * - * DIRECTDRAW ENUMCALLBACK RETURN VALUES - * - * EnumCallback returns are used to control the flow of the DIRECTDRAW and - * DIRECTDRAWSURFACE object enumerations. They can only be returned by - * enumeration callback routines. - * - ****************************************************************************/ - -/* - * stop the enumeration - */ -#define DDENUMRET_CANCEL 0 - -/* - * continue the enumeration - */ -#define DDENUMRET_OK 1 - -/**************************************************************************** - * - * DIRECTDRAW ERRORS - * - * Errors are represented by negative values and cannot be combined. - * - ****************************************************************************/ - -/* - * This object is already initialized - */ -#define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT( 5 ) - -/* - * This surface can not be attached to the requested surface. - */ -#define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT( 10 ) - -/* - * This surface can not be detached from the requested surface. - */ -#define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT( 20 ) - -/* - * Support is currently not available. - */ -#define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT( 40 ) - -/* - * An exception was encountered while performing the requested operation - */ -#define DDERR_EXCEPTION MAKE_DDHRESULT( 55 ) - -/* - * Generic failure. - */ -#define DDERR_GENERIC E_FAIL - -/* - * Height of rectangle provided is not a multiple of reqd alignment - */ -#define DDERR_HEIGHTALIGN MAKE_DDHRESULT( 90 ) - -/* - * Unable to match primary surface creation request with existing - * primary surface. - */ -#define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT( 95 ) - -/* - * One or more of the caps bits passed to the callback are incorrect. - */ -#define DDERR_INVALIDCAPS MAKE_DDHRESULT( 100 ) - -/* - * DirectDraw does not support provided Cliplist. - */ -#define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT( 110 ) - -/* - * DirectDraw does not support the requested mode - */ -#define DDERR_INVALIDMODE MAKE_DDHRESULT( 120 ) - -/* - * DirectDraw received a pointer that was an invalid DIRECTDRAW object. - */ -#define DDERR_INVALIDOBJECT MAKE_DDHRESULT( 130 ) - -/* - * One or more of the parameters passed to the callback function are - * incorrect. - */ -#define DDERR_INVALIDPARAMS E_INVALIDARG - -/* - * pixel format was invalid as specified - */ -#define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT( 145 ) - -/* - * Rectangle provided was invalid. - */ -#define DDERR_INVALIDRECT MAKE_DDHRESULT( 150 ) - -/* - * Operation could not be carried out because one or more surfaces are locked - */ -#define DDERR_LOCKEDSURFACES MAKE_DDHRESULT( 160 ) - -/* - * There is no 3D present. - */ -#define DDERR_NO3D MAKE_DDHRESULT( 170 ) - -/* - * Operation could not be carried out because there is no alpha accleration - * hardware present or available. - */ -#define DDERR_NOALPHAHW MAKE_DDHRESULT( 180 ) - -/* - * Operation could not be carried out because there is no stereo - * hardware present or available. - */ -#define DDERR_NOSTEREOHARDWARE MAKE_DDHRESULT( 181 ) - -/* - * Operation could not be carried out because there is no hardware - * present which supports stereo surfaces - */ -#define DDERR_NOSURFACELEFT MAKE_DDHRESULT( 182 ) - - - -/* - * no clip list available - */ -#define DDERR_NOCLIPLIST MAKE_DDHRESULT( 205 ) - -/* - * Operation could not be carried out because there is no color conversion - * hardware present or available. - */ -#define DDERR_NOCOLORCONVHW MAKE_DDHRESULT( 210 ) - -/* - * Create function called without DirectDraw object method SetCooperativeLevel - * being called. - */ -#define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT( 212 ) - -/* - * Surface doesn't currently have a color key - */ -#define DDERR_NOCOLORKEY MAKE_DDHRESULT( 215 ) - -/* - * Operation could not be carried out because there is no hardware support - * of the dest color key. - */ -#define DDERR_NOCOLORKEYHW MAKE_DDHRESULT( 220 ) - -/* - * No DirectDraw support possible with current display driver - */ -#define DDERR_NODIRECTDRAWSUPPORT MAKE_DDHRESULT( 222 ) - -/* - * Operation requires the application to have exclusive mode but the - * application does not have exclusive mode. - */ -#define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT( 225 ) - -/* - * Flipping visible surfaces is not supported. - */ -#define DDERR_NOFLIPHW MAKE_DDHRESULT( 230 ) - -/* - * There is no GDI present. - */ -#define DDERR_NOGDI MAKE_DDHRESULT( 240 ) - -/* - * Operation could not be carried out because there is no hardware present - * or available. - */ -#define DDERR_NOMIRRORHW MAKE_DDHRESULT( 250 ) - -/* - * Requested item was not found - */ -#define DDERR_NOTFOUND MAKE_DDHRESULT( 255 ) - -/* - * Operation could not be carried out because there is no overlay hardware - * present or available. - */ -#define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 ) - -/* - * Operation could not be carried out because the source and destination - * rectangles are on the same surface and overlap each other. - */ -#define DDERR_OVERLAPPINGRECTS MAKE_DDHRESULT( 270 ) - -/* - * Operation could not be carried out because there is no appropriate raster - * op hardware present or available. - */ -#define DDERR_NORASTEROPHW MAKE_DDHRESULT( 280 ) - -/* - * Operation could not be carried out because there is no rotation hardware - * present or available. - */ -#define DDERR_NOROTATIONHW MAKE_DDHRESULT( 290 ) - -/* - * Operation could not be carried out because there is no hardware support - * for stretching - */ -#define DDERR_NOSTRETCHHW MAKE_DDHRESULT( 310 ) - -/* - * DirectDrawSurface is not in 4 bit color palette and the requested operation - * requires 4 bit color palette. - */ -#define DDERR_NOT4BITCOLOR MAKE_DDHRESULT( 316 ) - -/* - * DirectDrawSurface is not in 4 bit color index palette and the requested - * operation requires 4 bit color index palette. - */ -#define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT( 317 ) - -/* - * DirectDraw Surface is not in 8 bit color mode and the requested operation - * requires 8 bit color. - */ -#define DDERR_NOT8BITCOLOR MAKE_DDHRESULT( 320 ) - -/* - * Operation could not be carried out because there is no texture mapping - * hardware present or available. - */ -#define DDERR_NOTEXTUREHW MAKE_DDHRESULT( 330 ) - -/* - * Operation could not be carried out because there is no hardware support - * for vertical blank synchronized operations. - */ -#define DDERR_NOVSYNCHW MAKE_DDHRESULT( 335 ) - -/* - * Operation could not be carried out because there is no hardware support - * for zbuffer blting. - */ -#define DDERR_NOZBUFFERHW MAKE_DDHRESULT( 340 ) - -/* - * Overlay surfaces could not be z layered based on their BltOrder because - * the hardware does not support z layering of overlays. - */ -#define DDERR_NOZOVERLAYHW MAKE_DDHRESULT( 350 ) - -/* - * The hardware needed for the requested operation has already been - * allocated. - */ -#define DDERR_OUTOFCAPS MAKE_DDHRESULT( 360 ) - -/* - * DirectDraw does not have enough memory to perform the operation. - */ -#define DDERR_OUTOFMEMORY E_OUTOFMEMORY - -/* - * DirectDraw does not have enough memory to perform the operation. - */ -#define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT( 380 ) - -/* - * hardware does not support clipped overlays - */ -#define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT( 382 ) - -/* - * Can only have ony color key active at one time for overlays - */ -#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT( 384 ) - -/* - * Access to this palette is being refused because the palette is already - * locked by another thread. - */ -#define DDERR_PALETTEBUSY MAKE_DDHRESULT( 387 ) - -/* - * No src color key specified for this operation. - */ -#define DDERR_COLORKEYNOTSET MAKE_DDHRESULT( 400 ) - -/* - * This surface is already attached to the surface it is being attached to. - */ -#define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT( 410 ) - -/* - * This surface is already a dependency of the surface it is being made a - * dependency of. - */ -#define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT( 420 ) - -/* - * Access to this surface is being refused because the surface is already - * locked by another thread. - */ -#define DDERR_SURFACEBUSY MAKE_DDHRESULT( 430 ) - -/* - * Access to this surface is being refused because no driver exists - * which can supply a pointer to the surface. - * This is most likely to happen when attempting to lock the primary - * surface when no DCI provider is present. - * Will also happen on attempts to lock an optimized surface. - */ -#define DDERR_CANTLOCKSURFACE MAKE_DDHRESULT( 435 ) - -/* - * Access to Surface refused because Surface is obscured. - */ -#define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT( 440 ) - -/* - * Access to this surface is being refused because the surface is gone. - * The DIRECTDRAWSURFACE object representing this surface should - * have Restore called on it. - */ -#define DDERR_SURFACELOST MAKE_DDHRESULT( 450 ) - -/* - * The requested surface is not attached. - */ -#define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT( 460 ) - -/* - * Height requested by DirectDraw is too large. - */ -#define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT( 470 ) - -/* - * Size requested by DirectDraw is too large -- The individual height and - * width are OK. - */ -#define DDERR_TOOBIGSIZE MAKE_DDHRESULT( 480 ) - -/* - * Width requested by DirectDraw is too large. - */ -#define DDERR_TOOBIGWIDTH MAKE_DDHRESULT( 490 ) - -/* - * Action not supported. - */ -#define DDERR_UNSUPPORTED E_NOTIMPL - -/* - * Pixel format requested is unsupported by DirectDraw - */ -#define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT( 510 ) - -/* - * Bitmask in the pixel format requested is unsupported by DirectDraw - */ -#define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT( 520 ) - -/* - * The specified stream contains invalid data - */ -#define DDERR_INVALIDSTREAM MAKE_DDHRESULT( 521 ) - -/* - * vertical blank is in progress - */ -#define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT( 537 ) - -/* - * Informs DirectDraw that the previous Blt which is transfering information - * to or from this Surface is incomplete. - */ -#define DDERR_WASSTILLDRAWING MAKE_DDHRESULT( 540 ) - - -/* - * The specified surface type requires specification of the COMPLEX flag - */ -#define DDERR_DDSCAPSCOMPLEXREQUIRED MAKE_DDHRESULT( 542 ) - - -/* - * Rectangle provided was not horizontally aligned on reqd. boundary - */ -#define DDERR_XALIGN MAKE_DDHRESULT( 560 ) - -/* - * The GUID passed to DirectDrawCreate is not a valid DirectDraw driver - * identifier. - */ -#define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT( 561 ) - -/* - * A DirectDraw object representing this driver has already been created - * for this process. - */ -#define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT( 562 ) - -/* - * A hardware only DirectDraw object creation was attempted but the driver - * did not support any hardware. - */ -#define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT( 563 ) - -/* - * this process already has created a primary surface - */ -#define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT( 564 ) - -/* - * software emulation not available. - */ -#define DDERR_NOEMULATION MAKE_DDHRESULT( 565 ) - -/* - * region passed to Clipper::GetClipList is too small. - */ -#define DDERR_REGIONTOOSMALL MAKE_DDHRESULT( 566 ) - -/* - * an attempt was made to set a clip list for a clipper objec that - * is already monitoring an hwnd. - */ -#define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT( 567 ) - -/* - * No clipper object attached to surface object - */ -#define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT( 568 ) - -/* - * Clipper notification requires an HWND or - * no HWND has previously been set as the CooperativeLevel HWND. - */ -#define DDERR_NOHWND MAKE_DDHRESULT( 569 ) - -/* - * HWND used by DirectDraw CooperativeLevel has been subclassed, - * this prevents DirectDraw from restoring state. - */ -#define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT( 570 ) - -/* - * The CooperativeLevel HWND has already been set. - * It can not be reset while the process has surfaces or palettes created. - */ -#define DDERR_HWNDALREADYSET MAKE_DDHRESULT( 571 ) - -/* - * No palette object attached to this surface. - */ -#define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT( 572 ) - -/* - * No hardware support for 16 or 256 color palettes. - */ -#define DDERR_NOPALETTEHW MAKE_DDHRESULT( 573 ) - -/* - * If a clipper object is attached to the source surface passed into a - * BltFast call. - */ -#define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT( 574 ) - -/* - * No blter. - */ -#define DDERR_NOBLTHW MAKE_DDHRESULT( 575 ) - -/* - * No DirectDraw ROP hardware. - */ -#define DDERR_NODDROPSHW MAKE_DDHRESULT( 576 ) - -/* - * returned when GetOverlayPosition is called on a hidden overlay - */ -#define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT( 577 ) - -/* - * returned when GetOverlayPosition is called on a overlay that UpdateOverlay - * has never been called on to establish a destionation. - */ -#define DDERR_NOOVERLAYDEST MAKE_DDHRESULT( 578 ) - -/* - * returned when the position of the overlay on the destionation is no longer - * legal for that destionation. - */ -#define DDERR_INVALIDPOSITION MAKE_DDHRESULT( 579 ) - -/* - * returned when an overlay member is called for a non-overlay surface - */ -#define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT( 580 ) - -/* - * An attempt was made to set the cooperative level when it was already - * set to exclusive. - */ -#define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT( 581 ) - -/* - * An attempt has been made to flip a surface that is not flippable. - */ -#define DDERR_NOTFLIPPABLE MAKE_DDHRESULT( 582 ) - -/* - * Can't duplicate primary & 3D surfaces, or surfaces that are implicitly - * created. - */ -#define DDERR_CANTDUPLICATE MAKE_DDHRESULT( 583 ) - -/* - * Surface was not locked. An attempt to unlock a surface that was not - * locked at all, or by this process, has been attempted. - */ -#define DDERR_NOTLOCKED MAKE_DDHRESULT( 584 ) - -/* - * Windows can not create any more DCs, or a DC was requested for a paltte-indexed - * surface when the surface had no palette AND the display mode was not palette-indexed - * (in this case DirectDraw cannot select a proper palette into the DC) - */ -#define DDERR_CANTCREATEDC MAKE_DDHRESULT( 585 ) - -/* - * No DC was ever created for this surface. - */ -#define DDERR_NODC MAKE_DDHRESULT( 586 ) - -/* - * This surface can not be restored because it was created in a different - * mode. - */ -#define DDERR_WRONGMODE MAKE_DDHRESULT( 587 ) - -/* - * This surface can not be restored because it is an implicitly created - * surface. - */ -#define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT( 588 ) - -/* - * The surface being used is not a palette-based surface - */ -#define DDERR_NOTPALETTIZED MAKE_DDHRESULT( 589 ) - - -/* - * The display is currently in an unsupported mode - */ -#define DDERR_UNSUPPORTEDMODE MAKE_DDHRESULT( 590 ) - -/* - * Operation could not be carried out because there is no mip-map - * texture mapping hardware present or available. - */ -#define DDERR_NOMIPMAPHW MAKE_DDHRESULT( 591 ) - -/* - * The requested action could not be performed because the surface was of - * the wrong type. - */ -#define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT( 592 ) - - -/* - * Device does not support optimized surfaces, therefore no video memory optimized surfaces - */ -#define DDERR_NOOPTIMIZEHW MAKE_DDHRESULT( 600 ) - -/* - * Surface is an optimized surface, but has not yet been allocated any memory - */ -#define DDERR_NOTLOADED MAKE_DDHRESULT( 601 ) - -/* - * Attempt was made to create or set a device window without first setting - * the focus window - */ -#define DDERR_NOFOCUSWINDOW MAKE_DDHRESULT( 602 ) - -/* - * Attempt was made to set a palette on a mipmap sublevel - */ -#define DDERR_NOTONMIPMAPSUBLEVEL MAKE_DDHRESULT( 603 ) - -/* - * A DC has already been returned for this surface. Only one DC can be - * retrieved per surface. - */ -#define DDERR_DCALREADYCREATED MAKE_DDHRESULT( 620 ) - -/* - * An attempt was made to allocate non-local video memory from a device - * that does not support non-local video memory. - */ -#define DDERR_NONONLOCALVIDMEM MAKE_DDHRESULT( 630 ) - -/* - * The attempt to page lock a surface failed. - */ -#define DDERR_CANTPAGELOCK MAKE_DDHRESULT( 640 ) - - -/* - * The attempt to page unlock a surface failed. - */ -#define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT( 660 ) - -/* - * An attempt was made to page unlock a surface with no outstanding page locks. - */ -#define DDERR_NOTPAGELOCKED MAKE_DDHRESULT( 680 ) - -/* - * There is more data available than the specified buffer size could hold - */ -#define DDERR_MOREDATA MAKE_DDHRESULT( 690 ) - -/* - * The data has expired and is therefore no longer valid. - */ -#define DDERR_EXPIRED MAKE_DDHRESULT( 691 ) - -/* - * The mode test has finished executing. - */ -#define DDERR_TESTFINISHED MAKE_DDHRESULT( 692 ) - -/* - * The mode test has switched to a new mode. - */ -#define DDERR_NEWMODE MAKE_DDHRESULT( 693 ) - -/* - * D3D has not yet been initialized. - */ -#define DDERR_D3DNOTINITIALIZED MAKE_DDHRESULT( 694 ) - -/* - * The video port is not active - */ -#define DDERR_VIDEONOTACTIVE MAKE_DDHRESULT( 695 ) - -/* - * The monitor does not have EDID data. - */ -#define DDERR_NOMONITORINFORMATION MAKE_DDHRESULT( 696 ) - -/* - * The driver does not enumerate display mode refresh rates. - */ -#define DDERR_NODRIVERSUPPORT MAKE_DDHRESULT( 697 ) - -/* - * Surfaces created by one direct draw device cannot be used directly by - * another direct draw device. - */ -#define DDERR_DEVICEDOESNTOWNSURFACE MAKE_DDHRESULT( 699 ) - - - -/* - * An attempt was made to invoke an interface member of a DirectDraw object - * created by CoCreateInstance() before it was initialized. - */ -#define DDERR_NOTINITIALIZED CO_E_NOTINITIALIZED - - -/* Alpha bit depth constants */ - - -#ifdef __cplusplus -}; -#endif - -#ifdef ENABLE_NAMELESS_UNION_PRAGMA -#pragma warning(default:4201) -#endif - -#endif //__DDRAW_INCLUDED__ - - diff --git a/ddutil.cpp b/ddutil.cpp index dec702b..2f6645d 100644 --- a/ddutil.cpp +++ b/ddutil.cpp @@ -16,7 +16,7 @@ #include "ddutil.h" #include "misc.h" -#pragma warning (disable :4996) + // Le message : diff --git a/ddutil.h b/ddutil.h index 72cfae6..6bc958b 100644 --- a/ddutil.h +++ b/ddutil.h @@ -1,29 +1,26 @@ /*========================================================================== -* -* Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. -* -* File: ddutil.cpp -* Content: Routines for loading bitmap and palettes from resources -* -***************************************************************************/ - -#pragma once + * + * Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. + * + * File: ddutil.cpp + * Content: Routines for loading bitmap and palettes from resources + * + ***************************************************************************/ #ifdef __cplusplus extern "C" { /* Assume C declarations for C++ */ #endif /* __cplusplus */ - extern void DDSetDebug(BOOL bDebug); - extern IDirectDrawSurface * DDConnectBitmap(IDirectDraw *pdd, HBITMAP hbm); - extern IDirectDrawPalette * DDLoadPalette(IDirectDraw *pdd, LPCSTR szBitmap); - extern IDirectDrawSurface * DDLoadBitmap(IDirectDraw *pdd, LPCSTR szBitmap, int dx, int dy); - extern HRESULT DDReLoadBitmap(IDirectDrawSurface *pdds, LPCSTR szBitmap); - extern HRESULT DDCopyBitmap(IDirectDrawSurface *pdds, HBITMAP hbm, int x, int y, int dx, int dy); - extern DWORD DDColorMatch(IDirectDrawSurface *pdds, COLORREF rgb); - extern HRESULT DDSetColorKey(IDirectDrawSurface *pdds, COLORREF rgb); - extern HRESULT DDSetColorKey2(IDirectDrawSurface *pdds, COLORREF rgb1, COLORREF rgb2); +extern void DDSetDebug(BOOL bDebug); +extern IDirectDrawSurface * DDConnectBitmap(IDirectDraw *pdd, HBITMAP hbm); +extern IDirectDrawPalette * DDLoadPalette(IDirectDraw *pdd, LPCSTR szBitmap); +extern IDirectDrawSurface * DDLoadBitmap(IDirectDraw *pdd, LPCSTR szBitmap, int dx, int dy); +extern HRESULT DDReLoadBitmap(IDirectDrawSurface *pdds, LPCSTR szBitmap); +extern HRESULT DDCopyBitmap(IDirectDrawSurface *pdds, HBITMAP hbm, int x, int y, int dx, int dy); +extern DWORD DDColorMatch(IDirectDrawSurface *pdds, COLORREF rgb); +extern HRESULT DDSetColorKey(IDirectDrawSurface *pdds, COLORREF rgb); +extern HRESULT DDSetColorKey2(IDirectDrawSurface *pdds, COLORREF rgb1, COLORREF rgb2); -/* #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/decblock.cpp b/decblock.cpp index 0b43788..3993097 100644 --- a/decblock.cpp +++ b/decblock.cpp @@ -4,8 +4,10 @@ #include "def.h" #include "decor.h" #include "misc.h" +#include "obstacle.h" +#include "dectables.h" -BOOL CDecor::BlitzActif(int celx, int cely) +BOOL CDecor::BlitzActif(POINT cel) { if (m_phase == WM_PHASE_BUILD) { //TODO: rewrite this like a human @@ -13,14 +15,14 @@ BOOL CDecor::BlitzActif(int celx, int cely) return 1 - (((m_time ^ foo) - foo & 1 ^ foo) == foo); } - POINT pos = { celx * DIMOBJX, cely * DIMOBJY }; + POINT pos = { cel.x * DIMOBJX, cel.y * DIMOBJY }; int num = m_time % 100; if (m_blupiPos.x >= pos.x - 80 && m_blupiPos.x <= pos.x + 80 && m_blupiPos.y >= pos.y - 500 && m_blupiPos.y <= pos.y + 500) { - if (m_time % 100 < 70 && cely > 0 && m_decor[celx][cely - 1].icon == 0x130) + if (m_time % 100 < 70 && cely > 0 && m_decor[cel.x][cel.y - 1].icon == 0x130) { PlaySound(SOUND_BLITZ, pos, 0); } @@ -125,7 +127,7 @@ int CDecor::IsWorld(POINT pos) { return -1; } - int icon = m_decor[pos.x / 64, pos.y / 64]->icon; + int icon = m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon; if (icon >= 158 && icon <= 165) { return icon - 158 + 1; @@ -160,17 +162,17 @@ int CDecor::IsWorld(POINT pos) void CDecor::ActiveSwitch(BOOL bState, POINT cel) { POINT pos; - pos.x = cel.x * 64; - pos.y = cel.y * 64; + pos.x = cel.x * DIMOBJX; + pos.y = cel.y * DIMOBJY; ModifDecor(pos, bState ? 384 : 385); - PlaySoundB(bState ? 77 : 76, pos); + PlaySound(bState ? 77 : 76, pos); cel.x -= 20; for (int i = 0; i < 41; i++) { if (cel.x >= 0 && cel.x < 100 && m_decor[cel.x, cel.y]->icon == (bState ? 379 : 378)) { - pos.x = cel.x * 64; - pos.y = cel.y * 64; + pos.x = cel.x * DIMOBJX; + pos.y = cel.y * DIMOBJY; ModifDecor(pos, bState ? 378 : 379); } cel.x++; @@ -190,7 +192,7 @@ int CDecor::GetTypeBarre(POINT pos) { return 0; } - int icon = m_decor[pos.x / 64, pos.y / 64]->icon; + int icon = m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon; if (icon != 138 && icon != 202) { return 0; @@ -199,7 +201,7 @@ int CDecor::GetTypeBarre(POINT pos) { return 1; } - icon = m_decor[pos.x / 64, pos.y / 64 + 1]->icon; + icon = m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY + 1]->icon; if (IsPassIcon(icon)) { return 2; @@ -217,14 +219,14 @@ int CDecor::GetTypeBarre(POINT pos) BOOL CDecor::IsLave(POINT pos) { pos.x += 30; - return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 68; + return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 68; } BOOL CDecor::IsPiege(POINT pos) { pos.x += 30; pos.y += 60; - return pos.x % 64 >= 15 && pos.x % 64 <= 49 && pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 373; + return pos.x % 64 >= 15 && pos.x % 64 <= 49 && pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 373; } BOOL CDecor::IsGoutte(POINT pos, BOOL bAlways) @@ -238,7 +240,7 @@ BOOL CDecor::IsGoutte(POINT pos, BOOL bAlways) { return FALSE; } - int icon = m_decor[pos.x / 64, pos.y / 64]->icon; + int icon = m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon; if (bAlways) { return icon == 404 || icon == 410; @@ -249,7 +251,7 @@ BOOL CDecor::IsGoutte(POINT pos, BOOL bAlways) BOOL CDecor::IsScie(POINT pos) { pos.x += 30; - return pos.x % 64 >= 4 && pos.x % 64 <= 60 && pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 378; + return pos.x % 64 >= 4 && pos.x % 64 <= 60 && pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 378; } BOOL CDecor::IsSwitch(POINT pos, POINT celSwitch) @@ -263,9 +265,9 @@ BOOL CDecor::IsSwitch(POINT pos, POINT celSwitch) { return FALSE; } - celSwitch.x = pos.x / 64; - celSwitch.y = pos.y / 64; - return m_decor[pos.x / 64, pos.y / 64]->icon == 384 || m_decor[pos.x / 64, pos.y / 64]->icon == 385; + celSwitch.x = pos.x / DIMOBJX; + celSwitch.y = pos.y / DIMOBJY; + return m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 384 || m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 385; } BOOL CDecor::IsEcraseur(POINT pos) @@ -275,7 +277,7 @@ BOOL CDecor::IsEcraseur(POINT pos) return FALSE; } pos.x += 30; - return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 317; + return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 317; } BOOL CDecor::IsBlitz(POINT pos, BOOL bAlways) @@ -286,8 +288,8 @@ BOOL CDecor::IsBlitz(POINT pos, BOOL bAlways) return FALSE; } POINT tinyPoint; - tinyPoint.x = pos.x / 64; - tinyPoint.y = pos.y / 64; + tinyPoint.x = pos.x / DIMOBJX; + tinyPoint.y = pos.y / DIMOBJY; return m_decor[tinyPoint.x, tinyPoint.y]->icon == 305 && (bAlways || BlitzActif(tinyPoint.x, tinyPoint.y)); } @@ -295,31 +297,31 @@ BOOL CDecor::IsRessort(POINT pos) { pos.x += 30; pos.y += 60; - return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 211; + return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 211; } BOOL CDecor::IsTemp(POINT pos) { pos.x += 30; pos.y += 60; - return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 324; + return pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 324; } BOOL CDecor::IsBridge(POINT pos, POINT celBridge) { pos.x += 30; pos.y += 60; - if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 364) + if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 364) { - celBridge.x = pos.x / 64; - celBridge.y = pos.y / 64; + celBridge.x = pos.x / DIMOBJX; + celBridge.y = pos.y / DIMOBJY; return TRUE; } pos.y -= 60; - if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon == 364) + if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon == 364) { - celBridge.x = pos.x / 64; - celBridge.y = pos.y / 64; + celBridge.x = pos.x / DIMOBJX; + celBridge.y = pos.y / DIMOBJY; return TRUE; } return FALSE; @@ -340,11 +342,11 @@ int CDecor::IsDoor(POINT pos, POINT celPorte) pos.x += 30; for (int i = 0; i < 2; i++) { - if (pos.x >= 0 && pos.x < 6400 && pos.y >= 0 && pos.y < 6400 && m_decor[pos.x / 64, pos.y / 64]->icon >= 334 && m_decor[pos.x / 64, pos.y / 64]->icon <= 336) + if (pos.x >= 0 && pos.x < DIMOBJX * MAXCELX && pos.y >= 0 && pos.y < DIMOBJY * MAXCELY && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon >= 334 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon <= 336) { - celPorte.x = pos.x / 64; - celPorte.y = pos.y / 64; - return m_decor[pos.x / 64, pos.y / 64]->icon; + celPorte.x = pos.x / DIMOBJX; + celPorte.y = pos.y / DIMOBJY; + return m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon; } pos.x += num; } @@ -353,19 +355,19 @@ int CDecor::IsDoor(POINT pos, POINT celPorte) int CDecor::IsTeleporte(POINT pos) { - if (pos.x % 64 > 6) + if (pos.x % DIMOBJX > 6) { return -1; } pos.x += 30; pos.y -= 60; - if (pos.x < 0 || pos.x >= 6400 || pos.y < 0 || pos.y >= 6400) + if (pos.x < 0 || pos.x >= DIMOBJX * MAXCELX || pos.y < 0 || pos.y >= DIMOBJY * MAXCELY) { return -1; } - if (m_decor[pos.x / 64, pos.y / 64]->icon >= 330 && m_decor[pos.x / 64, pos.y / 64]->icon <= 333) + if (m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon >= 330 && m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon <= 333) { - return m_decor[pos.x / 64, pos.y / 64]->icon; + return m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon; } return -1; } @@ -401,7 +403,7 @@ BOOL CDecor::IsSurfWater(POINT pos) { return FALSE; } - int icon = m_decor[(pos.x + 30) / 64, pos.y / 64]->icon; + int icon = m_decor[(pos.x + 30) / 64, pos.y / DIMOBJY]->icon; int icon2 = m_decor[(pos.x + 30) / 64, (pos.y + BLUPISURF) / 64]->icon; return icon != 92 && icon2 == 92; } @@ -409,7 +411,7 @@ BOOL CDecor::IsSurfWater(POINT pos) BOOL CDecor::IsDeepWater(POINT pos) { int num = (pos.x + 30) / 64; - int num2 = pos.y / 64; + int num2 = pos.y / DIMOBJY; if (num < 0 || num >= 100 || num2 < 0 || num2 >= 100) { return FALSE; @@ -474,7 +476,7 @@ BOOL CDecor::IsVentillo(POINT pos) { return FALSE; } - int icon = m_decor[pos.x / 64, pos.y / 64]->icon; + int icon = m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon; if (icon < 126 || icon > 137) { return FALSE; @@ -528,7 +530,7 @@ BOOL CDecor::IsVentillo(POINT pos) { pos.x += tinyPoint.x; pos.y += tinyPoint.y; - if (num != m_decor[pos.x / 64, pos.y / 64]->icon) + if (num != m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon) { break; } @@ -539,12 +541,12 @@ BOOL CDecor::IsVentillo(POINT pos) void CDecor::ModifDecor(POINT pos, int icon, BOOL bMulti) {// TODO: this - int icon2 = m_decor[pos.x / 64, pos.y / 64]->icon; + int icon2 = m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon; if (icon == -1 && icon >= 126 && icon2 <= 137) { ByeByeAdd(1, icon2, pos, 17.0, 1.0); } - m_decor[pos.x / 64, pos.y / 64]->icon = icon; + m_decor[pos.x / DIMOBJX, pos.y / DIMOBJY]->icon = icon; } BOOL CDecor::IsRightBorder(POINT pos, POINT offset) @@ -553,50 +555,44 @@ BOOL CDecor::IsRightBorder(POINT pos, POINT offset) } -BOOL CDecor::IsFromage(int x, int y) +BOOL CDecor::IsFromage(POINT cel) { - if (x < 0 || x >= 100 || y < 0 || y >= 100) - { - return FALSE; - } - int icon = m_decor[x, y]->icon; + if (!IsValidCel(cel)) return FALSE; + + int icon = m_decor[cel.x][cel.y].icon; return (icon >= 246 && icon <= 249) || icon == 339; } -BOOL CDecor::IsGrotte(int x, int y) +BOOL CDecor::IsGrotte(POINT cel) { - if (x < 0 || x >= 100 || y < 0 || y >= 100) - { - return FALSE; - } + if (!IsValidCel(cel)) return FALSE; + int icon = m_decor[x, y]->icon; return icon = 284 || icon == 301 || icon == 337; } -void CDecor::AdaptMidBorder(int x, int y) +void CDecor::AdaptMidBorder(POINT cel) { - if (x < 0 || x >= 100 || y < 0 || y >= 100) - { - return; - } + if (!IsValidCel(cel)) return; + int num = 15; - if (!IsRightBorder(x, y + 1, 0, -1)) + if (!IsRightBorder({ cel.x, cel.y + 1 }, { 0, -1 })) { num &= -2; } - if (!IsRightBorder(x, y + 1, 0, 1)) + if (!IsRightBorder({ cel.x, cel.y + 1 }, { 0, 1 })) { num &= -3; } - if (!IsRightBorder(x + 1, y, -1, 0)) + if (!IsRightBorder({ cel.x + 1, cel.y }, { -1, 0 })) { num &= -5; } - if (!IsRightBorder(x - 1, y, 1, 0)) + if (!IsRightBorder({ cel.x - 1, cel.y }, { 1, 0 })) { num &= -9; } - int num2 = m_decor[x, y]->icon; + int num2 = m_decor[cel.x][cel.y].icon; if (num2 == 156) { num2 = 35; diff --git a/decblupi.cpp b/decblupi.cpp index 8e7ab34..bf6f6f7 100644 --- a/decblupi.cpp +++ b/decblupi.cpp @@ -26,10 +26,10 @@ int CDecor::GetBlupiChannelActual() void CDecor::GetBlupiInfo(BOOL* bHelico, BOOL* bJeep, BOOL* bSkate, BOOL* bNage) { - bHelico = m_blupiHelico; - bJeep = (m_blupiJeep | m_blupiTank); - bSkate = m_blupiSkate; - bNage = (m_blupiNage | m_blupiSurf); + *bHelico = m_blupiHelico; + *bJeep = m_blupiJeep | m_blupiTank; + *bSkate = m_blupiSkate; + *bNage = m_blupiNage | m_blupiSurf; } void CDecor::BlupiSearchIcon() @@ -70,7 +70,6 @@ void CDecor::BlupiSearchIcon() { num3 = 15; } - m_blupiRealRotation = (int)(m_blupiVitesseX * 2.0); } if (m_blupiOver) { @@ -141,8 +140,8 @@ BOOL CDecor::BlupiIsGround() if (m_blupiTransport == -1) { RECT rect = BlupiRect(m_blupiPos); - rect.top = m_blupiPos.y + 60 - 2; - rect.bottom = m_blupiPos.y + 60 - 1; + rect.top = m_blupiPos.y + DIMBLUPIY - 2; + rect.bottom = m_blupiPos.y + DIMBLUPIY - 1; return DecorDetect(rect, TRUE); } else { @@ -156,59 +155,59 @@ RECT CDecor::BlupiRect(POINT pos) if (m_blupiNage || m_blupiSurf) { result.left = pos.x + 12; - result.right = pos.x + 60 - 12; - if (m_blupiAction == 1) + result.right = pos.x + DIMBLUPIX - 12; + if (m_blupiAction == ACTION_STOP) { result.top = pos.y + 5; - result.bottom = pos.y + 60 - 10; + result.bottom = pos.y + DIMBLUPIY - 10; } else { result.top = pos.y + 15; - result.bottom = pos.y + 60 - 10; + result.bottom = pos.y + DIMBLUPIY - 10; } } else if (m_blupiJeep) { result.left = pos.x + 2; - result.right = pos.x + 60 - 2; + result.right = pos.x + DIMBLUPIX - 2; result.top = pos.y + 10; - result.bottom = pos.y + 60 - 2; + result.bottom = pos.y + DIMBLUPIY - 2; } else if (m_blupiTank) { result.left = pos.x + 2; - result.right = pos.x + 60 - 2; + result.right = pos.x + DIMBLUPIX - 2; result.top = pos.y + 10; - result.bottom = pos.y + 60 - 2; + result.bottom = pos.y + DIMBLUPIY - 2; } else if (m_blupiOver) { result.left = pos.x + 2; - result.right = pos.x + 60 - 2; + result.right = pos.x + DIMBLUPIX - 2; result.top = pos.y + 2; - result.bottom = pos.y + 60 - 2; + result.bottom = pos.y + DIMBLUPIY - 2; } else if (m_blupiBalloon) { result.left = pos.x + 10; - result.right = pos.x + 60 - 10; + result.right = pos.x + DIMBLUPIX - 10; result.top = pos.y + 5; - result.bottom = pos.y + 60 - 2; + result.bottom = pos.y + DIMBLUPIY - 2; } else if (m_blupiEcrase) { result.left = pos.x + 5; - result.right = pos.x + 60 - 5; + result.right = pos.x + DIMBLUPIX - 5; result.top = pos.y + 39; - result.bottom = pos.y + 60 - 2; + result.bottom = pos.y + DIMBLUPIY - 2; } else { result.left = pos.x + 12; - result.right = pos.x + 60 - 12; + result.right = pos.x + DIMBLUPIX - 12; result.top = pos.y + 11; - result.bottom = pos.y + 60 - 2; + result.bottom = pos.y + DIMBLUPIY - 2; } return result; } @@ -323,7 +322,7 @@ void CDecor::BlupiStep() BlupiDead(75, -1); m_blupiRestart = TRUE; m_blupiAir = TRUE; - m_blupiPos.y = m_blupiPos.y / 64 * 64 + BLUPIOFFY; + m_blupiPos.y = m_blupipos.y / DIMOBJY * 64 + BLUPIOFFY; PlaySound(8, m_blupiPos); return; } @@ -2978,7 +2977,7 @@ void CDecor::BlupiStep() { BlupiDead(76, -1); m_blupiRestart = true; - m_blupiPos.y = m_blupiPos.y / 64 * 64 + BLUPIOFFY; + m_blupiPos.y = m_blupipos.y / DIMOBJY * 64 + BLUPIOFFY; PlaySound(8, m_blupiPos); } if (IsPiege(m_blupiPos) && !m_blupiOver && !m_blupiJeep && !m_blupiTank && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiFocus) @@ -3018,7 +3017,7 @@ void CDecor::BlupiStep() BlupiDead(11, -1); m_blupiRestart = true; m_blupiAir = true; - m_blupiPos.y = m_blupiPos.y / 64 * 64 + BLUPIOFFY; + m_blupiPos.y = m_blupipos.y / DIMOBJY * 64 + BLUPIOFFY; PlaySound(8, m_blupiPos); } if (IsEcraseur(m_blupiPos) && !m_blupiEcrase && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiFocus) @@ -3071,7 +3070,7 @@ void CDecor::BlupiStep() m_blupiVitesse.x = 0.0; m_blupiVitesse.y = 0.0; m_blupiFocus = false; - m_blupiPos.x = m_blupiPos.x / 64 * 64; + m_blupiPos.x = m_blupipos.x / DIMOBJX * 64; PlaySound(71, m_blupiPos); tinyPoint.x = m_blupiPos.x; tinyPoint.y = m_blupiPos.y - 5; diff --git a/decdesign.cpp b/decdesign.cpp index d35fb70..cfcaae4 100644 --- a/decdesign.cpp +++ b/decdesign.cpp @@ -249,7 +249,7 @@ void CDecor::PlaceItemFromMenu5(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 4 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -268,7 +268,7 @@ void CDecor::PlaceItemFromMenu5(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -287,7 +287,7 @@ void CDecor::PlaceItemFromMenu5(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64, cel.y * 64 }; + pMob->posStart = { cel.x * DIMOBJX, cel.y * DIMOBJY }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -324,7 +324,7 @@ void CDecor::PlaceItemFromMenu5(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 8 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -394,7 +394,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 4 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -413,7 +413,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 8 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -432,7 +432,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 8 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -451,7 +451,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 8 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 8 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -470,7 +470,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 6 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 6 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -489,7 +489,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 4 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -508,7 +508,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 4 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 4 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -538,7 +538,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 6 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 6 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; @@ -571,7 +571,7 @@ void CDecor::PlaceItemFromMenu7(POINT cel, int index, BYTE flags, int currentIco pMob->stepRecede = 1; pMob->timeStopStart = 0; pMob->timeStopEnd = 0; - pMob->posStart = { cel.x * 64 + 2, cel.y * 64 + 6 }; + pMob->posStart = { cel.x * DIMOBJX + 2, cel.y * DIMOBJY + 6 }; pMob->posEnd = pMob->posStart; pMob->posCurrent = pMob->posStart; pMob->step = STEP_STOPSTART; diff --git a/decor.cpp b/decor.cpp index fdc8886..47d1d0f 100644 --- a/decor.cpp +++ b/decor.cpp @@ -13,7 +13,6 @@ #include "decor.h" #include "text.h" #include "misc.h" -#include "DECMOVE.h" #include "event.h" #include "dectables.h" #include "jauge.h" @@ -37,11 +36,19 @@ #define TEXTDELAY 10 // tooltip popup delay #define NOTIFDELAY 200 -BOOL IsValidCel(POINT cel) +inline BOOL IsValidCel(POINT cel) { return cel.x >= 0 && cel.x < MAXCELX && cel.y >= 0 && cel.y < MAXCELY; } +inline void CDecor::StopVehicleSound() +{ + StopSound(SOUND_HELICOHIGH); + StopSound(SOUND_HELICOLOW); + StopSound(SOUND_JEEPHIGH); + StopSound(SOUND_JEEPLOW); +} + // Constructor CDecor::CDecor() @@ -846,35 +853,76 @@ void CDecor::DrawInfo() POINT pos; char text[100]; - if (m_phase == WM_PHASE_PLAY || WM_PHASE_PLAYTEST) + if (m_phase == WM_PHASE_PLAY || m_phase == WM_PHASE_PLAYTEST) { for (int i = 4; i != 0; i--) { if (m_notifText[i] != '\0') { - pos.x = 10; - pos.y = 10; - DrawTextB(m_pPixmap, pos, m_notifText[i], 0); + DrawText(m_pPixmap, { 10, 10 }, m_notifText[i], 0); } } if (m_nbVies > 0) { - pos.x = -15; + pos = { -15, 417 }; for (int i = 0; i < m_nbVies; i++) { - pos.y = 417; - m_pPixmap->QuickIcon(GetBlupiChannelStandard(), 48, pos); + m_pPixmap->QuickIcon(GetBlupiChannelActual(), 48, pos); pos.x += 16; } } if (m_blupiBullet > 0) { - pos.x = -15; - pos.y = 398; + pos = { 398, 442 }; for (int i = 0; i < m_blupiBullet; i++) { m_pPixmap->QuickIcon(CHELEMENT, 176, pos); pos.x += 4; } } - //TODO: more + if (m_blupiPerso > 0) { + m_pPixmap->QuickIcon(CHBUTTON, GetIconPerso(), { 465, 438 }); + sprintf(text, "=_%d", m_blupiPerso); + DrawText(m_pPixmap, { 497, 452 }, text, FONTWHITE); + } + + if (m_blupiDynamite > 0) { + m_pPixmap->QuickIcon(CHELEMENT, 252, { 505, 414 }); + } + + if (m_blupiCle | CLE_RED) { + m_pPixmap->QuickIcon(CHELEMENT, 215, { 520, 418 }); + } + + if (m_blupiCle | CLE_GREEN) { + m_pPixmap->QuickIcon(CHELEMENT, 222, { 530, 418 }); + } + + if (m_blupiCle | CLE_BLUE) { + m_pPixmap->QuickIcon(CHELEMENT, 229, { 540, 418 }); + } + + if ((m_mission != 1 && m_mission % 10 != 0) || m_bPrivate) + { + sprintf(text, "%d/%d", m_nbTresor, m_totalTresor); + DrawText(m_pPixmap, { 590, 452 }, text, FONTWHITE); + } + + for (int i = 0; i < 2; i++) + { + if (!(m_jauges[i].GetHide())) m_jauges[i].Draw(); + } + + if (m_mission == 10 && m_phase == WM_PHASE_PLAY && !m_bPrivate) + { + switch (m_nbTresor) + { + case 0: + if (m_blupiPos.x > 212) m_blupiPos.x = 212; + break; + case 1: + if (m_blupiPos.x > 788) m_blupiPos.x = 788; + break; + } + // more... + } } } @@ -883,9 +931,9 @@ POINT CDecor::DecorNextAction() int num = 0; if (m_decorAction == 0 || m_bPause) { - m_posDecor; + return m_posDecor; } - POINT posDecor = m_posDecor; + POINT posDecor = m_posDecor; while (table_decor_action[num] != 0) { if (m_decorAction == table_decor_action[num]) @@ -901,7 +949,7 @@ POINT CDecor::DecorNextAction() } else { - num2 = 6400 - (m_drawBounds.right - m_drawBounds.left); + num2 = DIMOBJX * MAXCELX - LXIMAGE; } if (posDecor.x < 0) { @@ -917,7 +965,7 @@ POINT CDecor::DecorNextAction() } else { - num2 = 6400 - (m_drawBounds.bottom - m_drawBounds.top); + num2 = DIMOBJY * MAXCELY - LYIMAGE; } if (posDecor.y < 0) { @@ -967,11 +1015,11 @@ void CDecor::SetFieldD814(BOOL param) m_bD814 = param; } -void CDecor::PlaySoundB(int sound, POINT pos, BOOL bLocal) +void CDecor::PlaySound(int sound, POINT pos, BOOL bLocal) { if (!bLocal) NetPlaySound(sound, pos); - m_pSound->PlayImage(sound, { pos.x - m_posDecor.x, pos.y - m_posDecor.y }, -1); + m_pSound->PlayImage(sound, pos - m_posDecor, -1); switch (sound) { case SOUND_HELICOHIGH: @@ -1011,27 +1059,12 @@ void CDecor::StopSound(int sound) void CDecor::AdaptMotorVehicleSound(POINT pos) { - POINT blupiPos = pos; - blupiPos.x -= m_posDecor.x; - blupiPos.y -= m_posDecor.y; + POINT blupiPos = pos - m_posDecor; - if (m_bHelicoMarch) - { - m_pSound->PlayImage(SOUND_HELICOHIGH, blupiPos); - } - if (m_bHelicoStop) - { - m_pSound->PlayImage(SOUND_HELICOLOW, blupiPos); - } - if (m_bJeepMarch) - { - m_pSound->PlayImage(SOUND_JEEPHIGH, blupiPos); - } - if (m_bJeepStop) - { - m_pSound->PlayImage(SOUND_JEEPLOW, blupiPos); - } - return; + if (m_bHelicoMarch) m_pSound->PlayImage(SOUND_HELICOHIGH, blupiPos); + if (m_bHelicoStop) m_pSound->PlayImage(SOUND_HELICOLOW, blupiPos); + if (m_bJeepMarch) m_pSound->PlayImage(SOUND_JEEPHIGH, blupiPos); + if (m_bJeepStop) m_pSound->PlayImage(SOUND_JEEPLOW, blupiPos); } void CDecor::VehicleSoundsPhase(int phase) @@ -1104,289 +1137,279 @@ void CDecor::SetPause(BOOL bPause) m_bPause = bPause; } -void CDecor::InitializeDoors(GameData *gameData) +void CDecor::InitializeDoors(BYTE* doors) { for (int i = 0; i < MAXMOVEOBJECT; i++) { - gameData[i] = m_doors[i]; + doors[i] = m_doors[i]; } } void CDecor::MemorizeDoors(BYTE* doors) { - int i; - - i = 0; - - do + for (int i = 0; i < MAXMOVEOBJECT; i++) { m_doors[i] = doors[i]; - i++; - } while (i < 200); - return; + } } void CDecor::SetAllMissions(BOOL bAllMissions) { - m_bCheatDoors = CheatDoors; - m_bPrivate, m_mission->AdaptDoors; + m_bCheatDoors = bAllMissions; + AdaptDoors(m_bPrivate, m_mission); return; } void CDecor::CheatAction(int cheat) { - if (cheat == 2) // cleanall - { - for (int i = 0; i < MAXMOVEOBJECT; i++) - { - if (m_moveObject[i].type == 2 || m_moveObject[i].type == 3 || m_moveObject[i].type == 96 || - m_moveObject[i].type == 97 || m_moveObject[i].type == 4 || m_moveObject[i].type == 16 || - m_moveObject[i].type == 17 || m_moveObject[i].type == 20 || m_moveObject[i].type == 44 || - m_moveObject[i].type == 54 || m_moveObject[i].type == 32 || m_moveObject[i].type == 33) - { - m_decorAction = 1; - m_decorPhase = 0; - m_moveObject[i].type = 8; - m_moveObject[i].phase = 0; + MoveObject* mob; - moveObject = m_moveObject; - int num = i; - moveObject[num]->posCurrent.x = moveObject[num]->posCurrent.x - 34; - moveObject2 = m_moveObject; - int num2 = i; - moveObject2[num2]->posCurrent.y = moveObject2[num2].posCurrent.y - 34; - m_moveObject[i].posStart = m_moveObject[i].posCurrent; - m_moveObject[i].posEnd = m_moveObject[i].posCurrent; - MoveObjectStepIcon(i); - PlaySound(10, m_moveObject[i].posCurrent); - - } - } - } - if (cheat == 6) // funskate - { - m_blupiAir = FALSE; - m_blupiHelico = FALSE; - m_blupiOver = FALSE; - m_blupiJeep = FALSE; - m_blupiTank = FALSE; - m_blupiSkate = TRUE; - m_blupiNage = FALSE; - m_blupiSurf = FALSE; - m_blupiVent = FALSE; - m_blupiSuspend = FALSE; - m_pSound->StopSound(SOUND_HELICOHIGH); - StopSound(18); - StopSound(29); - StopSound(31); - } - if (cheat == 7) // givecopter - { - m_blupiAir = FALSE; - m_blupiHelico = TRUE; - m_blupiOver = FALSE; - m_blupiJeep = FALSE; - m_blupiTank = FALSE; - m_blupiSkate = FALSE; - m_blupiNage = FALSE; - m_blupiSurf = FALSE; - m_blupiVent = FALSE; - m_blupiSuspend = FALSE; - } - if (cheat == 8) // jeepdrive - { - m_blupiAir = FALSE; - m_blupiHelico = FALSE; - m_blupiOver = FALSE; - m_blupiJeep = TRUE; - m_blupiTank = FALSE; - m_blupiSkate = FALSE; - m_blupiNage = FALSE; - m_blupiSurf = FALSE; - m_blupiVent = FALSE; - m_blupiSuspend = FALSE; - } - if (cheat == 9) // alltreasure - { - for (int i = 0; i < MAXMOVEOBJECT; i++) - { - if (m_moveObject[i].type == 5) - { - m_moveObject[i].type == 0; - m_nbTresor++; - OpenDoorsTresor(); - PlaySound(11, m_moveObject[i].posCurrent); - } - } - } - if (cheat == 10) // endgoal - { - for (int i = 0; i < MAXMOVEOBJECT; i++) - { - if (m_moveObject[i].type == 7 || m_moveObject[i].type == 21) - { - m_blupiPos = m_moveObject[i].posCurrent; - if (m_nbTresor >= m_totalTresor) - { - if (m_moveObject[i].type == 21) - { - m_bFoundCle = TRUE; - } - StopSound(16); - StopSound(18); - StopSound(29); - StopSound(31); - PlaySound(14); - m_blupiAction = 13; - m_blupiPhase = 0; - m_blupiFocus = FALSE; - m_blupiFront = TRUE; - m_blupiAir = FALSE; - m_blupiHelico = FALSE; - m_blupiOver = FALSE; - m_blupiJeep = TRUE; - m_blupiTank = FALSE; - m_blupiSkate = FALSE; - m_blupiNage = FALSE; - m_blupiSurf = FALSE; - m_blupiVent = FALSE; - m_blupiSuspend = FALSE; - m_blupiShield = FALSE; - m_blupiPower = FALSE; - m_blupiCloud = FALSE; - m_blupiHide = FALSE; - m_blupiInvert = FALSE; - m_blupiBalloon = FALSE; - m_blupiEcrase = FALSE; - } - else - { - PlaySound(13, m_moveObject[i].posCurrent); - } - m_goalPhase = 50; - } - } - } - if (cheat == 12) // roundshield - { - PlaySound(42, m_blupiPos); - m_blupiShield = TRUE; - m_blupiPower = FALSE; - m_blupiCloud = FALSE; - m_blupiHide = FALSE; - m_blupiTimeShield = 100; - m_blupiPosMagic = m_blupiPos; - m_jauges[1].SetHide(FALSE); - } - if (cheat == 13) // quicklollipop - { - m_blupiAction = 49; - m_blupiPhase = 0; - m_blupiHelico = FALSE; - m_blupiOver = FALSE; - m_blupiJeep = FALSE; - m_blupiTank = FALSE; - m_blupiSkate = FALSE; - m_blupiShield = FALSE; - m_blupiPower = FALSE; - m_blupiCloud = FALSE; - m_blupiHide = FALSE; - m_blupiFocus = FALSE; - PlaySound(50, m_blupiPos); - } - if (cheat == 14) // tenbombs - { - m_blupiPerso = 10; - PlaySound(60, m_blupiPos); - } - if (cheat == 15) // birdlime - { - m_blupiBullet = 10; - } - if (cheat == 16) // drivetank - { - m_blupiAir = FALSE; - m_blupiHelico = FALSE; - m_blupiOver = FALSE; - m_blupiJeep = FALSE; - m_blupiTank = TRUE; - m_blupiSkate = FALSE; - m_blupiNage = FALSE; - m_blupiSurf = FALSE; - m_blupiVent = FALSE; - m_blupiSuspend = FALSE; - m_blupiCloud = FALSE; - m_blupiHide = FALSE; - } - if (cheat == 17) // powercharge - { - m_blupiAction = 56; - m_blupiPhase = 0; - m_blupiHelico = FALSE; - m_blupiOver = FALSE; - m_blupiJeep = FALSE; - m_blupiTank = TRUE; - m_blupiSkate = FALSE; - m_blupiShield = FALSE; - m_blupiPower = FALSE; - m_blupiCloud = FALSE; - m_blupiHide = FALSE; - m_blupiJumpAie = FALSE; - m_blupiFocus = FALSE; - PlaySound(58, m_blupiPos); - } - if (cheat == 18) // hidedrink - { - m_blupiAction = 55; - m_blupiPhase = 0; - m_blupiHelico = FALSE; - m_blupiOver = FALSE; - m_blupiJeep = FALSE; - m_blupiTank = FALSE; - m_blupiSkate = FALSE; - m_blupiShield = FALSE; - m_blupiPower = FALSE; - m_blupiCloud = FALSE; - m_blupiHide = FALSE; - m_blupiJumpAie = FALSE; - m_blupiFocus = FALSE; - PlaySound(57, m_blupiPos); - } - if (cheat == 22) // iovercraft - { - m_blupiAir = FALSE; - m_blupiHelico = FALSE; - m_blupiOver = TRUE; - m_blupiJeep = FALSE; - m_blupiTank = FALSE; - m_blupiSkate = FALSE; - m_blupiNage = FALSE; - m_blupiSurf = FALSE; - m_blupiVent = FALSE; - m_blupiSuspend = FALSE; - } - if (cheat == cheat_dynamite) - { - m_blupiDynamite = 1; - PlaySound(60, m_blupiPos); - } - if (cheat == 24) // wellkeys - { - m_blupiCle |= 7; - } - if (m_blupiShield && m_blupiHide && m_blupiCloud && m_blupiPower) + switch (cheat) + { + case 2: // cleanall + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + mob = &m_moveObject[i]; + switch (mob->type) + { + case TYPE_BOMBEDOWN: + case TYPE_BOMBEUP: + case TYPE_BOMBEFOLLOW1: + case TYPE_BOMBEFOLLOW2: + case TYPE_BULLDOZER: + case TYPE_BOMBEMOVE: + case TYPE_POISSON: + case TYPE_OISEAU: + case TYPE_GUEPE: + case TYPE_CREATURE: + case TYPE_BLUPIHELICO: + case TYPE_BLUPITANK: + m_decorAction = 1; + m_decorPhase = 0; + mob->type = TYPE_EXPLO1; + mob->phase = 0; + mob->posCurrent -= { 34, 34 }; + mob->posStart = mob->posCurrent; + mob->posEnd = mob->posCurrent; + MoveObjectStepIcon(i); + PlaySound(SOUND_BOUM, mob->posCurrent, FALSE); + } + } + break; + case 6: // funskate + m_blupiAir = FALSE; + m_blupiHelico = FALSE; + m_blupiOver = FALSE; + m_blupiJeep = FALSE; + m_blupiTank = FALSE; + m_blupiSkate = TRUE; + m_blupiNage = FALSE; + m_blupiSurf = FALSE; + m_blupiVent = FALSE; + m_blupiSuspend = FALSE; + StopVehicleSound(); + break; + case 7: // givecopter + m_blupiAir = FALSE; + m_blupiHelico = TRUE; + m_blupiOver = FALSE; + m_blupiJeep = FALSE; + m_blupiTank = FALSE; + m_blupiSkate = FALSE; + m_blupiNage = FALSE; + m_blupiSurf = FALSE; + m_blupiVent = FALSE; + m_blupiSuspend = FALSE; + StopVehicleSound(); + PlaySound(SOUND_HELICOSTART, m_blupiPos, FALSE); + PlaySound(SOUND_HELICOLOW, m_blupiPos, TRUE); + break; + case 8: // jeepdrive + m_blupiAir = FALSE; + m_blupiHelico = FALSE; + m_blupiOver = FALSE; + m_blupiJeep = TRUE; + m_blupiTank = FALSE; + m_blupiSkate = FALSE; + m_blupiNage = FALSE; + m_blupiSurf = FALSE; + m_blupiVent = FALSE; + m_blupiSuspend = FALSE; + StopVehicleSound(); + PlaySound(SOUND_JEEPLOW, m_blupiPos, TRUE); + break; + case 9: // alltreasure + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == TYPE_TRESOR) + { + m_moveObject[i].type = 0; + m_nbTresor++; + OpenDoorsTresor(); + PlaySound(SOUND_TRESOR, m_moveObject[i].posCurrent, FALSE); + } + } + break; + case 10: // endgoal + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + mob = &m_moveObject[i]; + if (mob->type == TYPE_GOAL || mob->type == TYPE_CLE) + { + m_blupiPos = mob->posCurrent; + if (m_nbTresor >= m_totalTresor) + { + if (mob->type == TYPE_CLE) + { + m_bFoundCle = TRUE; + } + StopVehicleSound(); + PlaySound(SOUND_ENDOK, mob->posCurrent, FALSE); + m_blupiAction = ACTION_WIN; + m_blupiPhase = 0; + m_blupiFocus = FALSE; + m_blupiFront = TRUE; + m_blupiAir = FALSE; + m_blupiHelico = FALSE; + m_blupiOver = FALSE; + m_blupiJeep = TRUE; + m_blupiTank = FALSE; + m_blupiSkate = FALSE; + m_blupiNage = FALSE; + m_blupiSurf = FALSE; + m_blupiVent = FALSE; + m_blupiSuspend = FALSE; + m_blupiShield = FALSE; + m_blupiPower = FALSE; + m_blupiCloud = FALSE; + m_blupiHide = FALSE; + m_blupiInvert = FALSE; + m_blupiBalloon = FALSE; + m_blupiEcrase = FALSE; + } + else + { + PlaySound(SOUND_ENDKO, mob->posCurrent, FALSE); + } + m_goalPhase = 50; + } + } + break; + case 12: // roundshield + PlaySound(SOUND_STARTSHIELD, m_blupiPos, FALSE); + m_blupiShield = TRUE; + m_blupiPower = FALSE; + m_blupiCloud = FALSE; + m_blupiHide = FALSE; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(FALSE); + break; + case 13: // quicklollipop + m_blupiAction = ACTION_SUCETTE; + m_blupiPhase = 0; + m_blupiHelico = FALSE; + m_blupiOver = FALSE; + m_blupiJeep = FALSE; + m_blupiTank = FALSE; + m_blupiSkate = FALSE; + m_blupiShield = FALSE; + m_blupiPower = FALSE; + m_blupiCloud = FALSE; + m_blupiHide = FALSE; + m_blupiFocus = FALSE; + PlaySound(SOUND_SUCETTE, m_blupiPos, FALSE); + break; + case 14: // tenbombs + m_blupiPerso = 10; + PlaySound(SOUND_PERSOTAKE, m_blupiPos, FALSE); + break; + case 15: // birdlime + m_blupiBullet = 10; + break; + case 16: // drivetank + m_blupiAir = FALSE; + m_blupiHelico = FALSE; + m_blupiOver = FALSE; + m_blupiJeep = FALSE; + m_blupiTank = TRUE; + m_blupiSkate = FALSE; + m_blupiNage = FALSE; + m_blupiSurf = FALSE; + m_blupiVent = FALSE; + m_blupiSuspend = FALSE; + m_blupiCloud = FALSE; + m_blupiHide = FALSE; + PlaySound(SOUND_JEEPLOW, m_blupiPos, TRUE); + break; + case 17: // powercharge + m_blupiAction = ACTION_CHARGE; + m_blupiPhase = 0; + m_blupiHelico = FALSE; + m_blupiOver = FALSE; + m_blupiJeep = FALSE; + m_blupiTank = TRUE; + m_blupiSkate = FALSE; + m_blupiShield = FALSE; + m_blupiPower = FALSE; + m_blupiCloud = FALSE; + m_blupiHide = FALSE; + m_blupiJumpAie = FALSE; + m_blupiFocus = FALSE; + PlaySound(SOUND_CHARGE, m_blupiPos, FALSE); + break; + case 18: // hidedrink + m_blupiAction = ACTION_DRINK; + m_blupiPhase = 0; + m_blupiHelico = FALSE; + m_blupiOver = FALSE; + m_blupiJeep = FALSE; + m_blupiTank = FALSE; + m_blupiSkate = FALSE; + m_blupiShield = FALSE; + m_blupiPower = FALSE; + m_blupiCloud = FALSE; + m_blupiHide = FALSE; + m_blupiJumpAie = FALSE; + m_blupiFocus = FALSE; + PlaySound(SOUND_DRINK, m_blupiPos, FALSE); + break; + case 22: // iovercraft + m_blupiAir = FALSE; + m_blupiHelico = FALSE; + m_blupiOver = TRUE; + m_blupiJeep = FALSE; + m_blupiTank = FALSE; + m_blupiSkate = FALSE; + m_blupiNage = FALSE; + m_blupiSurf = FALSE; + m_blupiVent = FALSE; + m_blupiSuspend = FALSE; + StopVehicleSound(); + PlaySound(SOUND_HELICOSTART, m_blupiPos, FALSE); + PlaySound(SOUND_HELICOLOW, m_blupiPos, TRUE); + break; + case 23: // udynamite + m_blupiDynamite = 1; + PlaySound(SOUND_PERSOTAKE, m_blupiPos, FALSE); + break; + case 24: // wellkeys + m_blupiCle |= CLE_RED | CLE_GREEN | CLE_BLUE; + break; + } + if (!m_blupiShield && !m_blupiHide && !m_blupiCloud && !m_blupiPower) { m_jauges[1].SetHide(TRUE); } - if (m_blupiHelico && m_blupiOver) + if (!m_blupiHelico && !m_blupiOver) { - m_pSound->StopSound(SOUND_HELICOHIGH); - StopSound(18); + StopSound(SOUND_HELICOHIGH); + StopSound(SOUND_HELICOLOW); } if (m_blupiJeep && m_blupiTank) { - StopSound(29); - StopSound(31); + StopSound(SOUND_JEEPHIGH); + StopSound(SOUND_JEEPLOW); } } @@ -1615,17 +1638,14 @@ void CDecor::AdaptDoors(BOOL bPrivate, int mission) void CDecor::OpenDoorsTresor() { - for (int i = 0; i < 100; i++) + for (int x = 0; x < MAXCELX; x++) { - for (int j = 0; j < 100; j++) + for (int y = 0; y < MAXCELY; y++) { - int icon = m_decor[i][j].icon; - if (icon >= 421 && icon <= 421 + m_nbTresor - 1) + int icon = m_decor[x][y].icon; + if (icon >= Object::DoorTreasure_1 && icon <= Object::DoorTreasure_1 + m_nbTresor - 1) { - POINT cel; - cel.x = i; - cel.y = j; - OpenDoor(cel); + OpenDoor({ x, y }); } } } @@ -1633,25 +1653,25 @@ void CDecor::OpenDoorsTresor() void CDecor::OpenDoor(POINT cel) { - int icon = m_decor[cel.x, cel.y]->icon; + int icon = m_decor[cel.x][cel.y].icon; m_decor[cel.x, cel.y]->icon = -1; int num = MoveObjectFree(); - m_moveObject[num].type = 22; + m_moveObject[num].type = TYPE_DOOR; m_moveObject[num].stepAdvance = 50; m_moveObject[num].stepRecede = 1; m_moveObject[num].timeStopStart = 0; m_moveObject[num].timeStopEnd = 0; - m_moveObject[num].posStart.x = 64 * cel.x; - m_moveObject[num].posStart.y = 64 * cel.y; - m_moveObject[num].posEnd.x = 64 * cel.x; - m_moveObject[num].posEnd.y = 64 * (cel.y - 1); + m_moveObject[num].posStart.x = DIMOBJX * cel.x; + m_moveObject[num].posStart.y = DIMOBJY * cel.y; + m_moveObject[num].posEnd.x = DIMOBJX * cel.x; + m_moveObject[num].posEnd.y = DIMOBJY * (cel.y - 1); m_moveObject[num].posCurrent = m_moveObject[num].posStart; - m_moveObject[num].step = 1; + m_moveObject[num].step = STEP_STOPSTART; m_moveObject[num].time = 0; m_moveObject[num].phase = 0; - m_moveObject[num].channel = 1; + m_moveObject[num].channel = CHOBJECT; m_moveObject[num].icon = icon; - PlaySoundB(33, m_moveObject[num].posStart); + PlaySound(33, m_moveObject[num].posStart); } void CDecor::OpenDoorsWin() @@ -1710,8 +1730,8 @@ void CDecor::DoorsLost() } for (int i = 0; i < 2; i++) { - int num = pos.x / 64; - int num2 = pos.y / 64; + int num = pos.x / DIMOBJX; + int num2 = pos.y / DIMOBJY; if (num2 < 0) { return FALSE; diff --git a/decor.h b/decor.h index 390bc31..cdf58b8 100644 --- a/decor.h +++ b/decor.h @@ -88,7 +88,7 @@ public: void SetInput(int keys); void SetJoystickEnable(BOOL bJoystick); void SetFieldD814(BOOL param_1); - void PlaySoundB(int sound, POINT pos, BOOL bLocal); + void PlaySound(int sound, POINT pos, BOOL bLocal); void StopSound(int sound); void AdaptMotorVehicleSound(POINT pos); void VehicleSoundsPhase(int phase); @@ -103,7 +103,7 @@ public: void SetNbVies(int nbVies); BOOL GetPause(); void SetPause(BOOL bPause); - void InitializeDoors(GameData *gameData); + void InitializeDoors(BYTE *doors); void MemorizeDoors(BYTE* doors); void SetAllMissions(BOOL bAllMissions); void CheatAction(int cheat); @@ -128,7 +128,7 @@ public: BOOL DrawMap(BOOL bPlay, int team); // DecBlock.cpp - BOOL BlitzActif(int celx, int cely); + BOOL BlitzActif(POINT cel); int SoundEnviron(int sound, int obstacle); int IsWorld(POINT pos); void ActiveSwitch(BOOL bState, POINT cel); @@ -154,9 +154,9 @@ public: BOOL IsVentillo(POINT pos); void ModifDecor(POINT pos, int icon, BOOL _foo); BOOL IsRightBorder(POINT cel, POINT offset); - BOOL IsFromage(int x, int y); - BOOL IsGrotte(int x, int y); - void AdaptMidBorder(int x, int y); + BOOL IsFromage(POINT cel); + BOOL IsGrotte(POINT cel); + void AdaptMidBorder(POINT cel); void AdaptBorder(POINT cel); // DecDesign.cpp @@ -275,6 +275,8 @@ public: void OpenGoldsWin(); void DoorsLost(); + inline void StopVehicleSound(); + protected: HWND m_hWnd; CSound* m_pSound; @@ -421,5 +423,5 @@ protected: POINT GetCel (int x, int y); POINT GetCel (POINT cel, int x, int y); -BOOL IsValidCel (POINT cel); +inline BOOL IsValidCel (POINT cel); POINT GetVector (int direct); \ No newline at end of file diff --git a/def.h b/def.h index 1e8acbb..6cc2525 100644 --- a/def.h +++ b/def.h @@ -5,6 +5,10 @@ #include +// prevent WinAPI from overriding our functions +#undef PlaySound +#undef DrawText + #define _DEMO FALSE // TRUE=demo, FALSE=complet #define _INTRO FALSE // TRUE si images d'introduction #define _EGAMES FALSE // TRUE version pour eGames @@ -43,10 +47,10 @@ #define DIMSTATX 60 #define DIMSTATY 30 -#define DIMTEXTX 16 // dimensions max d'un caracteÌ€re +#define DIMTEXTX 16 // dimensions max d'un caractère #define DIMTEXTY 16 -#define DIMLITTLEX 16 // dimensions max d'un petit caracteÌ€re +#define DIMLITTLEX 16 // dimensions max d'un petit caractère #define DIMLITTLEY 12 #define CHDECOR 0 @@ -772,109 +776,6 @@ namespace Key { #define WM_DECOR4 (WM_USER+23) #define WM_DECOR5 (WM_USER+24) - -#define WM_ACTION_GO (WM_USER+30) -#define WM_ACTION_ABAT1 (WM_USER+31) -#define WM_ACTION_ABAT2 (WM_USER+32) -#define WM_ACTION_ABAT3 (WM_USER+33) -#define WM_ACTION_ABAT4 (WM_USER+34) -#define WM_ACTION_ABAT5 (WM_USER+35) -#define WM_ACTION_ABAT6 (WM_USER+36) -#define WM_ACTION_BUILD1 (WM_USER+37) -#define WM_ACTION_BUILD2 (WM_USER+38) -#define WM_ACTION_BUILD3 (WM_USER+39) -#define WM_ACTION_BUILD4 (WM_USER+40) -#define WM_ACTION_BUILD5 (WM_USER+41) -#define WM_ACTION_BUILD6 (WM_USER+42) -#define WM_ACTION_STOP (WM_USER+43) -#define WM_ACTION_CARRY (WM_USER+44) -#define WM_ACTION_DEPOSE (WM_USER+45) -#define WM_ACTION_ROC1 (WM_USER+46) -#define WM_ACTION_ROC2 (WM_USER+47) -#define WM_ACTION_ROC3 (WM_USER+48) -#define WM_ACTION_ROC4 (WM_USER+49) -#define WM_ACTION_ROC5 (WM_USER+50) -#define WM_ACTION_ROC6 (WM_USER+51) -#define WM_ACTION_ROC7 (WM_USER+52) -#define WM_ACTION_MUR (WM_USER+53) -#define WM_ACTION_CULTIVE (WM_USER+54) -#define WM_ACTION_CULTIVE2 (WM_USER+55) -#define WM_ACTION_MANGE (WM_USER+56) -#define WM_ACTION_MAKE (WM_USER+57) -#define WM_ACTION_BUILD (WM_USER+58) -#define WM_ACTION_PALIS (WM_USER+59) -#define WM_ACTION_NEWBLUPI (WM_USER+60) -#define WM_ACTION_PONTE (WM_USER+61) -#define WM_ACTION_PONTS (WM_USER+62) -#define WM_ACTION_PONTO (WM_USER+63) -#define WM_ACTION_PONTN (WM_USER+64) -#define WM_ACTION_PONTEL (WM_USER+65) -#define WM_ACTION_PONTSL (WM_USER+66) -#define WM_ACTION_PONTOL (WM_USER+67) -#define WM_ACTION_PONTNL (WM_USER+68) -#define WM_ACTION_TOUR (WM_USER+69) -#define WM_ACTION_CARRY2 (WM_USER+70) -#define WM_ACTION_DEPOSE2 (WM_USER+71) -#define WM_ACTION_MANGE2 (WM_USER+72) -#define WM_ACTION_BOIT (WM_USER+73) -#define WM_ACTION_BOIT2 (WM_USER+74) -#define WM_ACTION_LABO (WM_USER+75) -#define WM_ACTION_FLEUR1 (WM_USER+76) -#define WM_ACTION_FLEUR2 (WM_USER+77) -#define WM_ACTION_DYNAMITE (WM_USER+78) -#define WM_ACTION_DYNAMITE2 (WM_USER+79) -#define WM_ACTION_T_DYNAMITE (WM_USER+80) -#define WM_ACTION_FLEUR3 (WM_USER+81) -#define WM_ACTION_R_BUILD1 (WM_USER+82) -#define WM_ACTION_R_BUILD2 (WM_USER+83) -#define WM_ACTION_R_BUILD3 (WM_USER+84) -#define WM_ACTION_R_BUILD4 (WM_USER+85) -#define WM_ACTION_R_MAKE1 (WM_USER+86) -#define WM_ACTION_R_MAKE2 (WM_USER+87) -#define WM_ACTION_R_MAKE3 (WM_USER+88) -#define WM_ACTION_R_MAKE4 (WM_USER+89) -#define WM_ACTION_R_BUILD5 (WM_USER+90) -#define WM_ACTION_R_MAKE5 (WM_USER+91) -#define WM_ACTION_BATEAUE (WM_USER+92) -#define WM_ACTION_BATEAUS (WM_USER+93) -#define WM_ACTION_BATEAUO (WM_USER+94) -#define WM_ACTION_BATEAUN (WM_USER+95) -#define WM_ACTION_BATEAUDE (WM_USER+96) -#define WM_ACTION_BATEAUDS (WM_USER+97) -#define WM_ACTION_BATEAUDO (WM_USER+98) -#define WM_ACTION_BATEAUDN (WM_USER+99) -#define WM_ACTION_BATEAUAE (WM_USER+100) -#define WM_ACTION_BATEAUAS (WM_USER+101) -#define WM_ACTION_BATEAUAO (WM_USER+102) -#define WM_ACTION_BATEAUAN (WM_USER+103) -#define WM_ACTION_MJEEP (WM_USER+104) -#define WM_ACTION_DJEEP (WM_USER+105) -#define WM_ACTION_DRAPEAU (WM_USER+106) -#define WM_ACTION_DRAPEAU2 (WM_USER+107) -#define WM_ACTION_DRAPEAU3 (WM_USER+108) -#define WM_ACTION_EXTRAIT (WM_USER+109) -#define WM_ACTION_FABJEEP (WM_USER+110) -#define WM_ACTION_FABMINE (WM_USER+111) -#define WM_ACTION_MINE (WM_USER+112) -#define WM_ACTION_MINE2 (WM_USER+113) -#define WM_ACTION_R_BUILD6 (WM_USER+114) -#define WM_ACTION_R_MAKE6 (WM_USER+115) -#define WM_ACTION_E_RAYON (WM_USER+116) -#define WM_ACTION_ELECTRO (WM_USER+117) -#define WM_ACTION_ELECTROm (WM_USER+118) -#define WM_ACTION_GRILLE (WM_USER+119) -#define WM_ACTION_MAISON (WM_USER+120) -#define WM_ACTION_FABDISC (WM_USER+121) -#define WM_ACTION_A_MORT (WM_USER+122) -#define WM_ACTION_REPEAT (WM_USER+123) -#define WM_ACTION_TELEPORTE00 (WM_USER+124) -#define WM_ACTION_TELEPORTE10 (WM_USER+125) -#define WM_ACTION_TELEPORTE01 (WM_USER+126) -#define WM_ACTION_TELEPORTE11 (WM_USER+127) -#define WM_ACTION_FABARMURE (WM_USER+128) -#define WM_ACTION_MARMURE (WM_USER+129) -#define WM_ACTION_DARMURE (WM_USER+130) - #define WM_BUTTON0 (WM_USER+200) #define WM_BUTTON1 (WM_USER+201) #define WM_BUTTON2 (WM_USER+202) @@ -1451,4 +1352,74 @@ namespace Object { DoorTreasure_19, DoorTreasure_20 }; -} \ No newline at end of file +} + +#define CLE_RED (1 << 0) +#define CLE_GREEN (1 << 1) +#define CLE_BLUE (1 << 2) + +struct POINT +{ + int x; + int y; + + POINT operator+(const POINT& a) const + { + return { a.x + x, a.y + y }; + } + + POINT operator-(const POINT& a) const + { + return { a.x - x, a.y - y }; + } + + POINT operator*(const POINT& a) const + { + return { a.x * x, a.y * y }; + } + + POINT operator/(const POINT& a) const + { + return { a.x / x, a.y / y }; + } + + POINT operator*(const int& a) const + { + return { x * a, y * a }; + } + + POINT operator/(const int& a) const + { + return { x / a, y / a }; + } + + POINT operator+=(const POINT& a) + { + return { x += a.x, y += a.y }; + } + + POINT operator-=(const POINT& a) + { + return { x -= a.x, y -= a.y }; + } + + POINT operator*=(const POINT& a) + { + return { x *= a.x, y *= a.y }; + } + + POINT operator/=(const POINT& a) + { + return { x /= a.x, y /= a.y }; + } + + POINT operator*=(const int& a) + { + return { x *= x, y *= a }; + } + + POINT operator/=(const int& a) + { + return { x /= a, y /= a }; + } +}; \ No newline at end of file diff --git a/dplay.h b/dplay.h deleted file mode 100644 index d91c0a5..0000000 --- a/dplay.h +++ /dev/null @@ -1,2154 +0,0 @@ -/*==========================================================================; - * - * Copyright (C) 1994-1997 Microsoft Corporation. All Rights Reserved. - * - * File: dplay.h - * Content: DirectPlay include file - * - ***************************************************************************/ - -#ifndef __DPLAY_INCLUDED__ -#define __DPLAY_INCLUDED__ - -#include // for DECLARE_INTERFACE and HRESULT - -/* avoid warnings in MSVC at Level4 */ -#if _MSC_VER >= 1200 -#pragma warning(push) -#endif -#pragma warning(disable:4201) - - -/* - * Some types - */ - -#ifndef _WIN64 -#define DWORD_PTR DWORD -#endif - -typedef LPVOID (*LPRGLPVOID)[]; -typedef LPRGLPVOID PRGPVOID, LPRGPVOID, PRGLPVOID, PAPVOID, LPAPVOID, PALPVOID, LPALPVOID; - -#define VOL volatile -typedef VOID *VOL LPVOIDV; - - -#define _FACDP 0x877 -#define MAKE_DPHRESULT( code ) MAKE_HRESULT( 1, _FACDP, code ) - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * GUIDS used by DirectPlay objects - */ -DEFINE_GUID(IID_IDirectPlay2, 0x2b74f7c0, 0x9154, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3); -DEFINE_GUID(IID_IDirectPlay2A,0x9d460580, 0xa822, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82); - -DEFINE_GUID(IID_IDirectPlay3, 0x133efe40, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb); -DEFINE_GUID(IID_IDirectPlay3A,0x133efe41, 0x32dc, 0x11d0, 0x9c, 0xfb, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb); - -DEFINE_GUID(IID_IDirectPlay4, 0xab1c530, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); -DEFINE_GUID(IID_IDirectPlay4A,0xab1c531, 0x4745, 0x11d1, 0xa7, 0xa1, 0x0, 0x0, 0xf8, 0x3, 0xab, 0xfc); - -// {D1EB6D20-8923-11d0-9D97-00A0C90A43CB} -DEFINE_GUID(CLSID_DirectPlay,0xd1eb6d20, 0x8923, 0x11d0, 0x9d, 0x97, 0x0, 0xa0, 0xc9, 0xa, 0x43, 0xcb); - -/* - * GUIDS used by Service Providers shipped with DirectPlay - * Use these to identify Service Provider returned by EnumConnections - */ - -// GUID for IPX service provider -// {685BC400-9D2C-11cf-A9CD-00AA006886E3} -DEFINE_GUID(DPSPGUID_IPX, -0x685bc400, 0x9d2c, 0x11cf, 0xa9, 0xcd, 0x0, 0xaa, 0x0, 0x68, 0x86, 0xe3); - -// GUID for TCP/IP service provider -// 36E95EE0-8577-11cf-960C-0080C7534E82 -DEFINE_GUID(DPSPGUID_TCPIP, -0x36E95EE0, 0x8577, 0x11cf, 0x96, 0xc, 0x0, 0x80, 0xc7, 0x53, 0x4e, 0x82); - -// GUID for Serial service provider -// {0F1D6860-88D9-11cf-9C4E-00A0C905425E} -DEFINE_GUID(DPSPGUID_SERIAL, -0xf1d6860, 0x88d9, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); - -// GUID for Modem service provider -// {44EAA760-CB68-11cf-9C4E-00A0C905425E} -DEFINE_GUID(DPSPGUID_MODEM, -0x44eaa760, 0xcb68, 0x11cf, 0x9c, 0x4e, 0x0, 0xa0, 0xc9, 0x5, 0x42, 0x5e); - -/**************************************************************************** - * - * DirectPlay Structures - * - * Various structures used to invoke DirectPlay. - * - ****************************************************************************/ - -#ifndef IDIRECTPLAY2_OR_GREATER -typedef struct IDirectPlay FAR *LPDIRECTPLAY; -#else -typedef struct IUnknown FAR *LPDIRECTPLAY; -#endif - -typedef struct IDirectPlay2 FAR *LPDIRECTPLAY2; -typedef struct IDirectPlay2 FAR *LPDIRECTPLAY2A; -typedef struct IDirectPlay2 IDirectPlay2A; - -typedef struct IDirectPlay3 FAR *LPDIRECTPLAY3; -typedef struct IDirectPlay3 FAR *LPDIRECTPLAY3A; -typedef struct IDirectPlay3 IDirectPlay3A; - -typedef struct IDirectPlay4 FAR *LPDIRECTPLAY4; -typedef struct IDirectPlay4 FAR *LPDIRECTPLAY4A; -typedef struct IDirectPlay4 IDirectPlay4A; - -/* - * DPID - * DirectPlay player and group ID - */ -typedef DWORD DPID, FAR *LPDPID; - -/* - * DPID that system messages come from - */ -#define DPID_SYSMSG 0 - -/* - * DPID representing all players in the session - */ -#define DPID_ALLPLAYERS 0 - -/* - * DPID representing the server player - */ -#define DPID_SERVERPLAYER 1 - - -/* - * DPID representing the maxiumum ID in the range of DPID's reserved for - * use by DirectPlay. - */ -#define DPID_RESERVEDRANGE 100 - -/* - * The player ID is unknown (used with e.g. DPSESSION_NOMESSAGEID) - */ -#define DPID_UNKNOWN 0xFFFFFFFF - -/* - * DPCAPS - * Used to obtain the capabilities of a DirectPlay object - */ -typedef struct -{ - DWORD dwSize; // Size of structure, in bytes - DWORD dwFlags; // DPCAPS_xxx flags - DWORD dwMaxBufferSize; // Maximum message size, in bytes, for this service provider - DWORD dwMaxQueueSize; // Obsolete. - DWORD dwMaxPlayers; // Maximum players/groups (local + remote) - DWORD dwHundredBaud; // Bandwidth in 100 bits per second units; - // i.e. 24 is 2400, 96 is 9600, etc. - DWORD dwLatency; // Estimated latency; 0 = unknown - DWORD dwMaxLocalPlayers; // Maximum # of locally created players allowed - DWORD dwHeaderLength; // Maximum header length, in bytes, on messages - // added by the service provider - DWORD dwTimeout; // Service provider's suggested timeout value - // This is how long DirectPlay will wait for - // responses to system messages -} DPCAPS, FAR *LPDPCAPS; - -/* - * This DirectPlay object is the session host. If the host exits the - * session, another application will become the host and receive a - * DPSYS_HOST system message. - */ -#define DPCAPS_ISHOST 0x00000002 - -/* - * The service provider bound to this DirectPlay object can optimize - * group messaging. - */ -#define DPCAPS_GROUPOPTIMIZED 0x00000008 - -/* - * The service provider bound to this DirectPlay object can optimize - * keep alives (see DPSESSION_KEEPALIVE) - */ -#define DPCAPS_KEEPALIVEOPTIMIZED 0x00000010 - -/* - * The service provider bound to this DirectPlay object can optimize - * guaranteed message delivery. - */ -#define DPCAPS_GUARANTEEDOPTIMIZED 0x00000020 - -/* - * This DirectPlay object supports guaranteed message delivery. - */ -#define DPCAPS_GUARANTEEDSUPPORTED 0x00000040 - -/* - * This DirectPlay object supports digital signing of messages. - */ -#define DPCAPS_SIGNINGSUPPORTED 0x00000080 - -/* - * This DirectPlay object supports encryption of messages. - */ -#define DPCAPS_ENCRYPTIONSUPPORTED 0x00000100 - -/* - * This DirectPlay player was created on this machine - */ -#define DPPLAYERCAPS_LOCAL 0x00000800 - -/* - * Current Open settings supports all forms of Cancel - */ -#define DPCAPS_ASYNCCANCELSUPPORTED 0x00001000 - -/* - * Current Open settings supports CancelAll, but not Cancel - */ -#define DPCAPS_ASYNCCANCELALLSUPPORTED 0x00002000 - -/* - * Current Open settings supports Send Timeouts for sends - */ -#define DPCAPS_SENDTIMEOUTSUPPORTED 0x00004000 - -/* - * Current Open settings supports send priority - */ -#define DPCAPS_SENDPRIORITYSUPPORTED 0x00008000 - -/* - * Current Open settings supports DPSEND_ASYNC flag - */ -#define DPCAPS_ASYNCSUPPORTED 0x00010000 - - -/* - * DPSESSIONDESC2 - * Used to describe the properties of a DirectPlay - * session instance - */ -typedef struct -{ - DWORD dwSize; // Size of structure - DWORD dwFlags; // DPSESSION_xxx flags - GUID guidInstance; // ID for the session instance - GUID guidApplication; // GUID of the DirectPlay application. - // GUID_NULL for all applications. - DWORD dwMaxPlayers; // Maximum # players allowed in session - DWORD dwCurrentPlayers; // Current # players in session (read only) - union - { // Name of the session - LPWSTR lpszSessionName; // Unicode - LPSTR lpszSessionNameA; // ANSI - }; - union - { // Password of the session (optional) - LPWSTR lpszPassword; // Unicode - LPSTR lpszPasswordA; // ANSI - }; - DWORD_PTR dwReserved1; // Reserved for future MS use. - DWORD_PTR dwReserved2; - DWORD_PTR dwUser1; // For use by the application - DWORD_PTR dwUser2; - DWORD_PTR dwUser3; - DWORD_PTR dwUser4; -} DPSESSIONDESC2, FAR *LPDPSESSIONDESC2; - -typedef DPSESSIONDESC2 * VOL LPDPSESSIONDESC2_V; - -/* - * LPCDPSESSIONDESC2 - * A constant pointer to DPSESSIONDESC2 - */ -typedef const DPSESSIONDESC2 FAR *LPCDPSESSIONDESC2; - -/* - * Applications cannot create new players in this session. - */ -#define DPSESSION_NEWPLAYERSDISABLED 0x00000001 - -/* - * If the DirectPlay object that created the session, the host, - * quits, then the host will attempt to migrate to another - * DirectPlay object so that new players can continue to be created - * and new applications can join the session. - */ -#define DPSESSION_MIGRATEHOST 0x00000004 - -/* - * This flag tells DirectPlay not to set the idPlayerTo and idPlayerFrom - * fields in player messages. This cuts two DWORD's off the message - * overhead. - */ -#define DPSESSION_NOMESSAGEID 0x00000008 - - -/* - * This flag tells DirectPlay to not allow any new applications to - * join the session. Applications already in the session can still - * create new players. - */ -#define DPSESSION_JOINDISABLED 0x00000020 - -/* - * This flag tells DirectPlay to detect when remote players - * exit abnormally (e.g. their computer or modem gets unplugged) - */ -#define DPSESSION_KEEPALIVE 0x00000040 - -/* - * This flag tells DirectPlay not to send a message to all players - * when a players remote data changes - */ -#define DPSESSION_NODATAMESSAGES 0x00000080 - -/* - * This flag indicates that the session belongs to a secure server - * and needs user authentication - */ -#define DPSESSION_SECURESERVER 0x00000100 - -/* - * This flag indicates that the session is private and requirs a password - * for EnumSessions as well as Open. - */ -#define DPSESSION_PRIVATE 0x00000200 - -/* - * This flag indicates that the session requires a password for joining. - */ -#define DPSESSION_PASSWORDREQUIRED 0x00000400 - -/* - * This flag tells DirectPlay to route all messages through the server - */ -#define DPSESSION_MULTICASTSERVER 0x00000800 - -/* - * This flag tells DirectPlay to only download information about the - * DPPLAYER_SERVERPLAYER. - */ -#define DPSESSION_CLIENTSERVER 0x00001000 - -/* - * This flag tells DirectPlay to use the protocol built into dplay - * for reliability and statistics all the time. When this bit is - * set, only other sessions with this bit set can join or be joined. - */ -#define DPSESSION_DIRECTPLAYPROTOCOL 0x00002000 - -/* - * This flag tells DirectPlay that preserving order of received - * packets is not important, when using reliable delivery. This - * will allow messages to be indicated out of order if preceding - * messages have not yet arrived. Otherwise DPLAY will wait for - * earlier messages before delivering later reliable messages. - */ -#define DPSESSION_NOPRESERVEORDER 0x00004000 - - -/* - * This flag tells DirectPlay to optimize communication for latency - */ -#define DPSESSION_OPTIMIZELATENCY 0x00008000 - -/* - * This flag allows lobby launched games that aren't voice enabled - * to get voice capabilities. - */ -#define DPSESSION_ALLOWVOICERETRO 0x00010000 - -/* - * This flag supresses transmission of session desc changes. - * DPSESSION_NODATAMESSAGES was supposed to do that, but SetSessionDesc - * was ignoring the flag and some apps depended on the broken behavior, this - * flag allows applications to get the right behaviour without breaking apps depending - * on old broken behavior. - */ -#define DPSESSION_NOSESSIONDESCMESSAGES 0x00020000 - -/* - * DPNAME - * Used to hold the name of a DirectPlay entity - * like a player or a group - */ -typedef struct -{ - DWORD dwSize; // Size of structure - DWORD dwFlags; // Not used. Must be zero. - union - { // The short or friendly name - LPWSTR lpszShortName; // Unicode - LPSTR lpszShortNameA; // ANSI - }; - union - { // The long or formal name - LPWSTR lpszLongName; // Unicode - LPSTR lpszLongNameA; // ANSI - }; - -} DPNAME, FAR *LPDPNAME; - -/* - * LPCDPNAME - * A constant pointer to DPNAME - */ -typedef const DPNAME FAR *LPCDPNAME; - -/* - * DPCREDENTIALS - * Used to hold the user name and password of a DirectPlay user - */ -typedef struct -{ - DWORD dwSize; // Size of structure - DWORD dwFlags; // Not used. Must be zero. - union - { // User name of the account - LPWSTR lpszUsername; // Unicode - LPSTR lpszUsernameA; // ANSI - }; - union - { // Password of the account - LPWSTR lpszPassword; // Unicode - LPSTR lpszPasswordA; // ANSI - }; - union - { // Domain name of the account - LPWSTR lpszDomain; // Unicode - LPSTR lpszDomainA; // ANSI - }; -} DPCREDENTIALS, FAR *LPDPCREDENTIALS; - -typedef const DPCREDENTIALS FAR *LPCDPCREDENTIALS; - -/* - * DPSECURITYDESC - * Used to describe the security properties of a DirectPlay - * session instance - */ -typedef struct -{ - DWORD dwSize; // Size of structure - DWORD dwFlags; // Not used. Must be zero. - union - { // SSPI provider name - LPWSTR lpszSSPIProvider; // Unicode - LPSTR lpszSSPIProviderA; // ANSI - }; - union - { // CAPI provider name - LPWSTR lpszCAPIProvider; // Unicode - LPSTR lpszCAPIProviderA; // ANSI - }; - DWORD dwCAPIProviderType; // Crypto Service Provider type - DWORD dwEncryptionAlgorithm; // Encryption Algorithm type -} DPSECURITYDESC, FAR *LPDPSECURITYDESC; - -typedef const DPSECURITYDESC FAR *LPCDPSECURITYDESC; - -/* - * DPACCOUNTDESC - * Used to describe a user membership account - */ -typedef struct -{ - DWORD dwSize; // Size of structure - DWORD dwFlags; // Not used. Must be zero. - union - { // Account identifier - LPWSTR lpszAccountID; // Unicode - LPSTR lpszAccountIDA; // ANSI - }; -} DPACCOUNTDESC, FAR *LPDPACCOUNTDESC; - -typedef const DPACCOUNTDESC FAR *LPCDPACCOUNTDESC; - -/* - * LPCGUID - * A constant pointer to a guid - */ -typedef const GUID FAR *LPCGUID; - -/* - * DPLCONNECTION - * Used to hold all in the informaion needed to connect - * an application to a session or create a session - */ -typedef struct -{ - DWORD dwSize; // Size of this structure - DWORD dwFlags; // Flags specific to this structure - LPDPSESSIONDESC2 lpSessionDesc; // Pointer to session desc to use on connect - LPDPNAME lpPlayerName; // Pointer to Player name structure - GUID guidSP; // GUID of the DPlay SP to use - LPVOID lpAddress; // Address for service provider - DWORD dwAddressSize; // Size of address data -} DPLCONNECTION, FAR *LPDPLCONNECTION; - -/* - * LPCDPLCONNECTION - * A constant pointer to DPLCONNECTION - */ -typedef const DPLCONNECTION FAR *LPCDPLCONNECTION; - -/* - * DPCHAT - * Used to hold the a DirectPlay chat message - */ -typedef struct -{ - DWORD dwSize; - DWORD dwFlags; - union - { // Message string - LPWSTR lpszMessage; // Unicode - LPSTR lpszMessageA; // ANSI - }; -} DPCHAT, FAR * LPDPCHAT; - -/* - * SGBUFFER - * Scatter Gather Buffer used for SendEx - */ -typedef struct -{ - UINT len; // length of buffer data - PUCHAR pData; // pointer to buffer data -} SGBUFFER, *PSGBUFFER, FAR *LPSGBUFFER; - - -/**************************************************************************** - * - * Prototypes for DirectPlay callback functions - * - ****************************************************************************/ - -/* - * Callback for IDirectPlay2::EnumSessions - */ -typedef BOOL (FAR PASCAL * LPDPENUMSESSIONSCALLBACK2)( - LPCDPSESSIONDESC2 lpThisSD, - LPDWORD lpdwTimeOut, - DWORD dwFlags, - LPVOID lpContext ); - -/* - * This flag is set on the EnumSessions callback dwFlags parameter when - * the time out has occurred. There will be no session data for this - * callback. If *lpdwTimeOut is set to a non-zero value and the - * EnumSessionsCallback function returns TRUE then EnumSessions will - * continue waiting until the next timeout occurs. Timeouts are in - * milliseconds. - */ -#define DPESC_TIMEDOUT 0x00000001 - - -/* - * Callback for IDirectPlay2::EnumPlayers - * IDirectPlay2::EnumGroups - * IDirectPlay2::EnumGroupPlayers - */ -typedef BOOL (FAR PASCAL *LPDPENUMPLAYERSCALLBACK2)( - DPID dpId, - DWORD dwPlayerType, - LPCDPNAME lpName, - DWORD dwFlags, - LPVOID lpContext ); - - -/* - * Unicode callback for DirectPlayEnumerate - * This callback prototype will be used if compiling - * for Unicode strings - */ -typedef BOOL (FAR PASCAL * LPDPENUMDPCALLBACK)( - LPGUID lpguidSP, - LPWSTR lpSPName, - DWORD dwMajorVersion, - DWORD dwMinorVersion, - LPVOID lpContext); - -/* - * ANSI callback for DirectPlayEnumerate - * This callback prototype will be used if compiling - * for ANSI strings - */ -typedef BOOL (FAR PASCAL * LPDPENUMDPCALLBACKA)( - LPGUID lpguidSP, - LPSTR lpSPName, - DWORD dwMajorVersion, - DWORD dwMinorVersion, - LPVOID lpContext); - -/* - * Callback for IDirectPlay3(A)::EnumConnections - */ -typedef BOOL (FAR PASCAL * LPDPENUMCONNECTIONSCALLBACK)( - LPCGUID lpguidSP, - LPVOID lpConnection, - DWORD dwConnectionSize, - LPCDPNAME lpName, - DWORD dwFlags, - LPVOID lpContext); - - -/* - * API's - */ - -#ifdef UNICODE -#define DirectPlayEnumerate DirectPlayEnumerateW -#else -#define DirectPlayEnumerate DirectPlayEnumerateA -#endif // UNICODE - -extern HRESULT WINAPI DirectPlayEnumerateA( LPDPENUMDPCALLBACKA, LPVOID ); -extern HRESULT WINAPI DirectPlayEnumerateW( LPDPENUMDPCALLBACK, LPVOID ); -extern HRESULT WINAPI DirectPlayCreate( LPGUID lpGUID, LPDIRECTPLAY *lplpDP, IUnknown *pUnk); - -/**************************************************************************** - * - * IDirectPlay2 (and IDirectPlay2A) Interface - * - ****************************************************************************/ - -#undef INTERFACE -#define INTERFACE IDirectPlay2 -DECLARE_INTERFACE_( IDirectPlay2, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectPlay2 methods ***/ - STDMETHOD(AddPlayerToGroup) (THIS_ DPID, DPID) PURE; - STDMETHOD(Close) (THIS) PURE; - STDMETHOD(CreateGroup) (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(CreatePlayer) (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE; - STDMETHOD(DestroyGroup) (THIS_ DPID) PURE; - STDMETHOD(DestroyPlayer) (THIS_ DPID) PURE; - STDMETHOD(EnumGroupPlayers) (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumGroups) (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumPlayers) (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumSessions) (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(GetCaps) (THIS_ LPDPCAPS,DWORD) PURE; - STDMETHOD(GetGroupData) (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE; - STDMETHOD(GetGroupName) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetMessageCount) (THIS_ DPID, LPDWORD) PURE; - STDMETHOD(GetPlayerAddress) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetPlayerCaps) (THIS_ DPID,LPDPCAPS,DWORD) PURE; - STDMETHOD(GetPlayerData) (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE; - STDMETHOD(GetPlayerName) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetSessionDesc) (THIS_ LPVOID,LPDWORD) PURE; - STDMETHOD(Initialize) (THIS_ LPGUID) PURE; - STDMETHOD(Open) (THIS_ LPDPSESSIONDESC2,DWORD) PURE; - STDMETHOD(Receive) (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE; - STDMETHOD(Send) (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE; - STDMETHOD(SetGroupData) (THIS_ DPID,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(SetGroupName) (THIS_ DPID,LPDPNAME,DWORD) PURE; - STDMETHOD(SetPlayerData) (THIS_ DPID,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(SetPlayerName) (THIS_ DPID,LPDPNAME,DWORD) PURE; - STDMETHOD(SetSessionDesc) (THIS_ LPDPSESSIONDESC2,DWORD) PURE; -}; - -/**************************************************************************** - * - * IDirectPlay2 interface macros - * - ****************************************************************************/ - -#if !defined(__cplusplus) || defined(CINTERFACE) - -#define IDirectPlay2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectPlay2_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectPlay2_Release(p) (p)->lpVtbl->Release(p) -#define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) -#define IDirectPlay2_Close(p) (p)->lpVtbl->Close(p) -#define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) -#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f) -#define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) -#define IDirectPlay2_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) -#define IDirectPlay2_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) -#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e) -#define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) -#define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) -#define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) -#define IDirectPlay2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectPlay2_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) -#define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d) -#define IDirectPlay2_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c) -#define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c) -#define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c) -#define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d) -#define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c) -#define IDirectPlay2_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b) -#define IDirectPlay2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectPlay2_Open(p,a,b) (p)->lpVtbl->Open(p,a,b) -#define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) -#define IDirectPlay2_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) -#define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d) -#define IDirectPlay2_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c) -#define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d) -#define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) -#define IDirectPlay2_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b) - -#else /* C++ */ - -#define IDirectPlay2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectPlay2_AddRef(p) (p)->AddRef() -#define IDirectPlay2_Release(p) (p)->Release() -#define IDirectPlay2_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) -#define IDirectPlay2_Close(p) (p)->Close() -#define IDirectPlay2_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) -#define IDirectPlay2_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f) -#define IDirectPlay2_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) -#define IDirectPlay2_DestroyGroup(p,a) (p)->DestroyGroup(a) -#define IDirectPlay2_DestroyPlayer(p,a) (p)->DestroyPlayer(a) -#define IDirectPlay2_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e) -#define IDirectPlay2_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) -#define IDirectPlay2_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) -#define IDirectPlay2_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) -#define IDirectPlay2_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectPlay2_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) -#define IDirectPlay2_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d) -#define IDirectPlay2_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c) -#define IDirectPlay2_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c) -#define IDirectPlay2_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c) -#define IDirectPlay2_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d) -#define IDirectPlay2_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c) -#define IDirectPlay2_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b) -#define IDirectPlay2_Initialize(p,a) (p)->Initialize(a) -#define IDirectPlay2_Open(p,a,b) (p)->Open(a,b) -#define IDirectPlay2_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) -#define IDirectPlay2_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) -#define IDirectPlay2_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d) -#define IDirectPlay2_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c) -#define IDirectPlay2_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d) -#define IDirectPlay2_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) -#define IDirectPlay2_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b) - -#endif - -/**************************************************************************** - * - * IDirectPlay3 (and IDirectPlay3A) Interface - * - ****************************************************************************/ - -#undef INTERFACE -#define INTERFACE IDirectPlay3 -DECLARE_INTERFACE_( IDirectPlay3, IDirectPlay2 ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectPlay2 methods ***/ - STDMETHOD(AddPlayerToGroup) (THIS_ DPID, DPID) PURE; - STDMETHOD(Close) (THIS) PURE; - STDMETHOD(CreateGroup) (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(CreatePlayer) (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE; - STDMETHOD(DestroyGroup) (THIS_ DPID) PURE; - STDMETHOD(DestroyPlayer) (THIS_ DPID) PURE; - STDMETHOD(EnumGroupPlayers) (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumGroups) (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumPlayers) (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumSessions) (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(GetCaps) (THIS_ LPDPCAPS,DWORD) PURE; - STDMETHOD(GetGroupData) (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE; - STDMETHOD(GetGroupName) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetMessageCount) (THIS_ DPID, LPDWORD) PURE; - STDMETHOD(GetPlayerAddress) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetPlayerCaps) (THIS_ DPID,LPDPCAPS,DWORD) PURE; - STDMETHOD(GetPlayerData) (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE; - STDMETHOD(GetPlayerName) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetSessionDesc) (THIS_ LPVOID,LPDWORD) PURE; - STDMETHOD(Initialize) (THIS_ LPGUID) PURE; - STDMETHOD(Open) (THIS_ LPDPSESSIONDESC2,DWORD) PURE; - STDMETHOD(Receive) (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE; - STDMETHOD(Send) (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE; - STDMETHOD(SetGroupData) (THIS_ DPID,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(SetGroupName) (THIS_ DPID,LPDPNAME,DWORD) PURE; - STDMETHOD(SetPlayerData) (THIS_ DPID,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(SetPlayerName) (THIS_ DPID,LPDPNAME,DWORD) PURE; - STDMETHOD(SetSessionDesc) (THIS_ LPDPSESSIONDESC2,DWORD) PURE; - /*** IDirectPlay3 methods ***/ - STDMETHOD(AddGroupToGroup) (THIS_ DPID, DPID) PURE; - STDMETHOD(CreateGroupInGroup) (THIS_ DPID,LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(DeleteGroupFromGroup) (THIS_ DPID,DPID) PURE; - STDMETHOD(EnumConnections) (THIS_ LPCGUID,LPDPENUMCONNECTIONSCALLBACK,LPVOID,DWORD) PURE; - STDMETHOD(EnumGroupsInGroup) (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD, DPID, LPVOID, LPDWORD) PURE; - STDMETHOD(InitializeConnection) (THIS_ LPVOID,DWORD) PURE; - STDMETHOD(SecureOpen) (THIS_ LPCDPSESSIONDESC2,DWORD,LPCDPSECURITYDESC,LPCDPCREDENTIALS) PURE; - STDMETHOD(SendChatMessage) (THIS_ DPID,DPID,DWORD,LPDPCHAT) PURE; - STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD,DPID,LPDPLCONNECTION) PURE; - STDMETHOD(StartSession) (THIS_ DWORD,DPID) PURE; - STDMETHOD(GetGroupFlags) (THIS_ DPID,LPDWORD) PURE; - STDMETHOD(GetGroupParent) (THIS_ DPID,LPDPID) PURE; - STDMETHOD(GetPlayerAccount) (THIS_ DPID, DWORD, LPVOID, LPDWORD) PURE; - STDMETHOD(GetPlayerFlags) (THIS_ DPID,LPDWORD) PURE; -}; - -/**************************************************************************** - * - * IDirectPlay3 interface macros - * - ****************************************************************************/ - -#if !defined(__cplusplus) || defined(CINTERFACE) - -#define IDirectPlay3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectPlay3_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectPlay3_Release(p) (p)->lpVtbl->Release(p) -#define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) -#define IDirectPlay3_Close(p) (p)->lpVtbl->Close(p) -#define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) -#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f) -#define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) -#define IDirectPlay3_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) -#define IDirectPlay3_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) -#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e) -#define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) -#define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) -#define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) -#define IDirectPlay3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectPlay3_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) -#define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d) -#define IDirectPlay3_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c) -#define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c) -#define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c) -#define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d) -#define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c) -#define IDirectPlay3_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b) -#define IDirectPlay3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectPlay3_Open(p,a,b) (p)->lpVtbl->Open(p,a,b) -#define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) -#define IDirectPlay3_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) -#define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d) -#define IDirectPlay3_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c) -#define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d) -#define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) -#define IDirectPlay3_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b) -#define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->lpVtbl->AddGroupToGroup(p,a,b) -#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f) -#define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->DeleteGroupFromGroup(p,a,b) -#define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->lpVtbl->EnumConnections(p,a,b,c,d) -#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e) -#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d) -#define IDirectPlay3_InitializeConnection(p,a,b) (p)->lpVtbl->InitializeConnection(p,a,b) -#define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->lpVtbl->SecureOpen(p,a,b,c,d) -#define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->SendChatMessage(p,a,b,c,d) -#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c) -#define IDirectPlay3_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b) -#define IDirectPlay3_GetGroupFlags(p,a,b) (p)->lpVtbl->GetGroupFlags(p,a,b) -#define IDirectPlay3_GetGroupParent(p,a,b) (p)->lpVtbl->GetGroupParent(p,a,b) -#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d) -#define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b) - -#else /* C++ */ - -#define IDirectPlay3_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectPlay3_AddRef(p) (p)->AddRef() -#define IDirectPlay3_Release(p) (p)->Release() -#define IDirectPlay3_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) -#define IDirectPlay3_Close(p) (p)->Close() -#define IDirectPlay3_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) -#define IDirectPlay3_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f) -#define IDirectPlay3_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) -#define IDirectPlay3_DestroyGroup(p,a) (p)->DestroyGroup(a) -#define IDirectPlay3_DestroyPlayer(p,a) (p)->DestroyPlayer(a) -#define IDirectPlay3_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e) -#define IDirectPlay3_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) -#define IDirectPlay3_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) -#define IDirectPlay3_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) -#define IDirectPlay3_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectPlay3_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) -#define IDirectPlay3_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d) -#define IDirectPlay3_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c) -#define IDirectPlay3_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c) -#define IDirectPlay3_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c) -#define IDirectPlay3_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d) -#define IDirectPlay3_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c) -#define IDirectPlay3_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b) -#define IDirectPlay3_Initialize(p,a) (p)->Initialize(a) -#define IDirectPlay3_Open(p,a,b) (p)->Open(a,b) -#define IDirectPlay3_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) -#define IDirectPlay3_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) -#define IDirectPlay3_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d) -#define IDirectPlay3_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c) -#define IDirectPlay3_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d) -#define IDirectPlay3_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) -#define IDirectPlay3_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b) -#define IDirectPlay3_AddGroupToGroup(p,a,b) (p)->AddGroupToGroup(a,b) -#define IDirectPlay3_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f) -#define IDirectPlay3_DeleteGroupFromGroup(p,a,b) (p)->DeleteGroupFromGroup(a,b) -#define IDirectPlay3_EnumConnections(p,a,b,c,d) (p)->EnumConnections(a,b,c,d) -#define IDirectPlay3_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e) -#define IDirectPlay3_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d) -#define IDirectPlay3_InitializeConnection(p,a,b) (p)->InitializeConnection(a,b) -#define IDirectPlay3_SecureOpen(p,a,b,c,d) (p)->SecureOpen(a,b,c,d) -#define IDirectPlay3_SendChatMessage(p,a,b,c,d) (p)->SendChatMessage(a,b,c,d) -#define IDirectPlay3_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c) -#define IDirectPlay3_StartSession(p,a,b) (p)->StartSession(a,b) -#define IDirectPlay3_GetGroupFlags(p,a,b) (p)->GetGroupFlags(a,b) -#define IDirectPlay3_GetGroupParent(p,a,b) (p)->GetGroupParent(a,b) -#define IDirectPlay3_GetPlayerAccount(p,a,b,c,d) (p)->GetPlayerAccount(a,b,c,d) -#define IDirectPlay3_GetPlayerFlags(p,a,b) (p)->GetPlayerFlags(a,b) - -#endif - -/**************************************************************************** - * - * IDirectPlay4 (and IDirectPlay4A) Interface - * - ****************************************************************************/ - -#undef INTERFACE -#define INTERFACE IDirectPlay4 -DECLARE_INTERFACE_( IDirectPlay4, IDirectPlay3 ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectPlay2 methods ***/ - STDMETHOD(AddPlayerToGroup) (THIS_ DPID, DPID) PURE; - STDMETHOD(Close) (THIS) PURE; - STDMETHOD(CreateGroup) (THIS_ LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(CreatePlayer) (THIS_ LPDPID,LPDPNAME,HANDLE,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE; - STDMETHOD(DestroyGroup) (THIS_ DPID) PURE; - STDMETHOD(DestroyPlayer) (THIS_ DPID) PURE; - STDMETHOD(EnumGroupPlayers) (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumGroups) (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumPlayers) (THIS_ LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(EnumSessions) (THIS_ LPDPSESSIONDESC2,DWORD,LPDPENUMSESSIONSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(GetCaps) (THIS_ LPDPCAPS,DWORD) PURE; - STDMETHOD(GetGroupData) (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE; - STDMETHOD(GetGroupName) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetMessageCount) (THIS_ DPID, LPDWORD) PURE; - STDMETHOD(GetPlayerAddress) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetPlayerCaps) (THIS_ DPID,LPDPCAPS,DWORD) PURE; - STDMETHOD(GetPlayerData) (THIS_ DPID,LPVOID,LPDWORD,DWORD) PURE; - STDMETHOD(GetPlayerName) (THIS_ DPID,LPVOID,LPDWORD) PURE; - STDMETHOD(GetSessionDesc) (THIS_ LPVOID,LPDWORD) PURE; - STDMETHOD(Initialize) (THIS_ LPGUID) PURE; - STDMETHOD(Open) (THIS_ LPDPSESSIONDESC2,DWORD) PURE; - STDMETHOD(Receive) (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE; - STDMETHOD(Send) (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE; - STDMETHOD(SetGroupData) (THIS_ DPID,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(SetGroupName) (THIS_ DPID,LPDPNAME,DWORD) PURE; - STDMETHOD(SetPlayerData) (THIS_ DPID,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(SetPlayerName) (THIS_ DPID,LPDPNAME,DWORD) PURE; - STDMETHOD(SetSessionDesc) (THIS_ LPDPSESSIONDESC2,DWORD) PURE; - /*** IDirectPlay3 methods ***/ - STDMETHOD(AddGroupToGroup) (THIS_ DPID, DPID) PURE; - STDMETHOD(CreateGroupInGroup) (THIS_ DPID,LPDPID,LPDPNAME,LPVOID,DWORD,DWORD) PURE; - STDMETHOD(DeleteGroupFromGroup) (THIS_ DPID,DPID) PURE; - STDMETHOD(EnumConnections) (THIS_ LPCGUID,LPDPENUMCONNECTIONSCALLBACK,LPVOID,DWORD) PURE; - STDMETHOD(EnumGroupsInGroup) (THIS_ DPID,LPGUID,LPDPENUMPLAYERSCALLBACK2,LPVOID,DWORD) PURE; - STDMETHOD(GetGroupConnectionSettings)(THIS_ DWORD, DPID, LPVOID, LPDWORD) PURE; - STDMETHOD(InitializeConnection) (THIS_ LPVOID,DWORD) PURE; - STDMETHOD(SecureOpen) (THIS_ LPCDPSESSIONDESC2,DWORD,LPCDPSECURITYDESC,LPCDPCREDENTIALS) PURE; - STDMETHOD(SendChatMessage) (THIS_ DPID,DPID,DWORD,LPDPCHAT) PURE; - STDMETHOD(SetGroupConnectionSettings)(THIS_ DWORD,DPID,LPDPLCONNECTION) PURE; - STDMETHOD(StartSession) (THIS_ DWORD,DPID) PURE; - STDMETHOD(GetGroupFlags) (THIS_ DPID,LPDWORD) PURE; - STDMETHOD(GetGroupParent) (THIS_ DPID,LPDPID) PURE; - STDMETHOD(GetPlayerAccount) (THIS_ DPID, DWORD, LPVOID, LPDWORD) PURE; - STDMETHOD(GetPlayerFlags) (THIS_ DPID,LPDWORD) PURE; - /*** IDirectPlay4 methods ***/ - STDMETHOD(GetGroupOwner) (THIS_ DPID, LPDPID) PURE; - STDMETHOD(SetGroupOwner) (THIS_ DPID, DPID) PURE; - STDMETHOD(SendEx) (THIS_ DPID, DPID, DWORD, LPVOID, DWORD, DWORD, DWORD, LPVOID, DWORD_PTR *) PURE; - STDMETHOD(GetMessageQueue) (THIS_ DPID, DPID, DWORD, LPDWORD, LPDWORD) PURE; - STDMETHOD(CancelMessage) (THIS_ DWORD, DWORD) PURE; - STDMETHOD(CancelPriority) (THIS_ DWORD, DWORD, DWORD) PURE; -}; - -/**************************************************************************** - * - * IDirectPlayX interface macros (for IDirectPlay4 and beyond) - * - ****************************************************************************/ - -#if !defined(__cplusplus) || defined(CINTERFACE) - -#define IDirectPlayX_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectPlayX_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectPlayX_Release(p) (p)->lpVtbl->Release(p) -#define IDirectPlayX_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) -#define IDirectPlayX_CancelMessage(p,a,b) (p)->lpVtbl->CancelMessage(p,a,b) -#define IDirectPlayX_CancelPriority(p,a,b,c) (p)->lpVtbl->CancelPriority(p,a,b,c) -#define IDirectPlayX_Close(p) (p)->lpVtbl->Close(p) -#define IDirectPlayX_CreateGroup(p,a,b,c,d,e) (p)->lpVtbl->CreateGroup(p,a,b,c,d,e) -#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f) (p)->lpVtbl->CreatePlayer(p,a,b,c,d,e,f) -#define IDirectPlayX_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) -#define IDirectPlayX_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) -#define IDirectPlayX_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) -#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d,e) -#define IDirectPlayX_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) -#define IDirectPlayX_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) -#define IDirectPlayX_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) -#define IDirectPlayX_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b) -#define IDirectPlayX_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) -#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e) (p)->lpVtbl->GetMessageQueue(p,a,b,c,d,e) -#define IDirectPlayX_GetGroupData(p,a,b,c,d) (p)->lpVtbl->GetGroupData(p,a,b,c,d) -#define IDirectPlayX_GetGroupName(p,a,b,c) (p)->lpVtbl->GetGroupName(p,a,b,c) -#define IDirectPlayX_GetPlayerAddress(p,a,b,c) (p)->lpVtbl->GetPlayerAddress(p,a,b,c) -#define IDirectPlayX_GetPlayerCaps(p,a,b,c) (p)->lpVtbl->GetPlayerCaps(p,a,b,c) -#define IDirectPlayX_GetPlayerData(p,a,b,c,d) (p)->lpVtbl->GetPlayerData(p,a,b,c,d) -#define IDirectPlayX_GetPlayerName(p,a,b,c) (p)->lpVtbl->GetPlayerName(p,a,b,c) -#define IDirectPlayX_GetSessionDesc(p,a,b) (p)->lpVtbl->GetSessionDesc(p,a,b) -#define IDirectPlayX_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectPlayX_Open(p,a,b) (p)->lpVtbl->Open(p,a,b) -#define IDirectPlayX_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) -#define IDirectPlayX_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) -#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->SendEx(p,a,b,c,d,e,f,g,h,i) -#define IDirectPlayX_SetGroupData(p,a,b,c,d) (p)->lpVtbl->SetGroupData(p,a,b,c,d) -#define IDirectPlayX_SetGroupName(p,a,b,c) (p)->lpVtbl->SetGroupName(p,a,b,c) -#define IDirectPlayX_SetPlayerData(p,a,b,c,d) (p)->lpVtbl->SetPlayerData(p,a,b,c,d) -#define IDirectPlayX_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) -#define IDirectPlayX_SetSessionDesc(p,a,b) (p)->lpVtbl->SetSessionDesc(p,a,b) -#define IDirectPlayX_AddGroupToGroup(p,a,b) (p)->lpVtbl->AddGroupToGroup(p,a,b) -#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->lpVtbl->CreateGroupInGroup(p,a,b,c,d,e,f) -#define IDirectPlayX_DeleteGroupFromGroup(p,a,b) (p)->lpVtbl->DeleteGroupFromGroup(p,a,b) -#define IDirectPlayX_EnumConnections(p,a,b,c,d) (p)->lpVtbl->EnumConnections(p,a,b,c,d) -#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->lpVtbl->EnumGroupsInGroup(p,a,b,c,d,e) -#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->lpVtbl->GetGroupConnectionSettings(p,a,b,c,d) -#define IDirectPlayX_InitializeConnection(p,a,b) (p)->lpVtbl->InitializeConnection(p,a,b) -#define IDirectPlayX_SecureOpen(p,a,b,c,d) (p)->lpVtbl->SecureOpen(p,a,b,c,d) -#define IDirectPlayX_SendChatMessage(p,a,b,c,d) (p)->lpVtbl->SendChatMessage(p,a,b,c,d) -#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->lpVtbl->SetGroupConnectionSettings(p,a,b,c) -#define IDirectPlayX_StartSession(p,a,b) (p)->lpVtbl->StartSession(p,a,b) -#define IDirectPlayX_GetGroupFlags(p,a,b) (p)->lpVtbl->GetGroupFlags(p,a,b) -#define IDirectPlayX_GetGroupParent(p,a,b) (p)->lpVtbl->GetGroupParent(p,a,b) -#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d) (p)->lpVtbl->GetPlayerAccount(p,a,b,c,d) -#define IDirectPlayX_GetPlayerFlags(p,a,b) (p)->lpVtbl->GetPlayerFlags(p,a,b) -#define IDirectPlayX_GetGroupOwner(p,a,b) (p)->lpVtbl->GetGroupOwner(p,a,b) -#define IDirectPlayX_SetGroupOwner(p,a,b) (p)->lpVtbl->SetGroupOwner(p,a,b) - -#else /* C++ */ - -#define IDirectPlayX_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectPlayX_AddRef(p) (p)->AddRef() -#define IDirectPlayX_Release(p) (p)->Release() -#define IDirectPlayX_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) -#define IDirectPlayX_CancelMessage(p,a,b) (p)->CancelMessage(a,b) -#define IDirectPlayX_CancelPriority(p,a,b,c) (p)->CancelPriority(a,b,c) -#define IDirectPlayX_Close(p) (p)->Close() -#define IDirectPlayX_CreateGroup(p,a,b,c,d,e) (p)->CreateGroup(a,b,c,d,e) -#define IDirectPlayX_CreatePlayer(p,a,b,c,d,e,f) (p)->CreatePlayer(a,b,c,d,e,f) -#define IDirectPlayX_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) -#define IDirectPlayX_DestroyGroup(p,a) (p)->DestroyGroup(a) -#define IDirectPlayX_DestroyPlayer(p,a) (p)->DestroyPlayer(a) -#define IDirectPlayX_EnumGroupPlayers(p,a,b,c,d,e) (p)->EnumGroupPlayers(a,b,c,d,e) -#define IDirectPlayX_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) -#define IDirectPlayX_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) -#define IDirectPlayX_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) -#define IDirectPlayX_GetCaps(p,a,b) (p)->GetCaps(a,b) -#define IDirectPlayX_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) -#define IDirectPlayX_GetMessageQueue(p,a,b,c,d,e) (p)->GetMessageQueue(a,b,c,d,e) -#define IDirectPlayX_GetGroupData(p,a,b,c,d) (p)->GetGroupData(a,b,c,d) -#define IDirectPlayX_GetGroupName(p,a,b,c) (p)->GetGroupName(a,b,c) -#define IDirectPlayX_GetPlayerAddress(p,a,b,c) (p)->GetPlayerAddress(a,b,c) -#define IDirectPlayX_GetPlayerCaps(p,a,b,c) (p)->GetPlayerCaps(a,b,c) -#define IDirectPlayX_GetPlayerData(p,a,b,c,d) (p)->GetPlayerData(a,b,c,d) -#define IDirectPlayX_GetPlayerName(p,a,b,c) (p)->GetPlayerName(a,b,c) -#define IDirectPlayX_GetSessionDesc(p,a,b) (p)->GetSessionDesc(a,b) -#define IDirectPlayX_Initialize(p,a) (p)->Initialize(a) -#define IDirectPlayX_Open(p,a,b) (p)->Open(a,b) -#define IDirectPlayX_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) -#define IDirectPlayX_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) -#define IDirectPlayX_SendEx(p,a,b,c,d,e,f,g,h,i) (p)->SendEx(a,b,c,d,e,f,g,h,i) -#define IDirectPlayX_SetGroupData(p,a,b,c,d) (p)->SetGroupData(a,b,c,d) -#define IDirectPlayX_SetGroupName(p,a,b,c) (p)->SetGroupName(a,b,c) -#define IDirectPlayX_SetPlayerData(p,a,b,c,d) (p)->SetPlayerData(a,b,c,d) -#define IDirectPlayX_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) -#define IDirectPlayX_SetSessionDesc(p,a,b) (p)->SetSessionDesc(a,b) -#define IDirectPlayX_AddGroupToGroup(p,a,b) (p)->AddGroupToGroup(a,b) -#define IDirectPlayX_CreateGroupInGroup(p,a,b,c,d,e,f) (p)->CreateGroupInGroup(a,b,c,d,e,f) -#define IDirectPlayX_DeleteGroupFromGroup(p,a,b) (p)->DeleteGroupFromGroup(a,b) -#define IDirectPlayX_EnumConnections(p,a,b,c,d) (p)->EnumConnections(a,b,c,d) -#define IDirectPlayX_EnumGroupsInGroup(p,a,b,c,d,e) (p)->EnumGroupsInGroup(a,b,c,d,e) -#define IDirectPlayX_GetGroupConnectionSettings(p,a,b,c,d) (p)->GetGroupConnectionSettings(a,b,c,d) -#define IDirectPlayX_InitializeConnection(p,a,b) (p)->InitializeConnection(a,b) -#define IDirectPlayX_SecureOpen(p,a,b,c,d) (p)->SecureOpen(a,b,c,d) -#define IDirectPlayX_SendChatMessage(p,a,b,c,d) (p)->SendChatMessage(a,b,c,d) -#define IDirectPlayX_SetGroupConnectionSettings(p,a,b,c) (p)->SetGroupConnectionSettings(a,b,c) -#define IDirectPlayX_StartSession(p,a,b) (p)->StartSession(a,b) -#define IDirectPlayX_GetGroupFlags(p,a,b) (p)->GetGroupFlags(a,b) -#define IDirectPlayX_GetGroupParent(p,a,b) (p)->GetGroupParent(a,b) -#define IDirectPlayX_GetPlayerAccount(p,a,b,c,d) (p)->GetPlayerAccount(a,b,c,d) -#define IDirectPlayX_GetPlayerFlags(p,a,b) (p)->GetPlayerFlags(a,b) -#define IDirectPlayX_GetGroupOwner(p,a,b) (p)->GetGroupOwner(a,b) -#define IDirectPlayX_SetGroupOwner(p,a,b) (p)->SetGroupOwner(a,b) - -#endif - -/**************************************************************************** - * - * EnumConnections API flags - * - ****************************************************************************/ - -/* - * Enumerate Service Providers - */ -#define DPCONNECTION_DIRECTPLAY 0x00000001 - -/* - * Enumerate Lobby Providers - */ -#define DPCONNECTION_DIRECTPLAYLOBBY 0x00000002 - - -/**************************************************************************** - * - * EnumPlayers API flags - * - ****************************************************************************/ - -/* - * Enumerate all players in the current session - */ -#define DPENUMPLAYERS_ALL 0x00000000 -#define DPENUMGROUPS_ALL DPENUMPLAYERS_ALL - - -/* - * Enumerate only local (created by this application) players - * or groups - */ -#define DPENUMPLAYERS_LOCAL 0x00000008 -#define DPENUMGROUPS_LOCAL DPENUMPLAYERS_LOCAL - -/* - * Enumerate only remote (non-local) players - * or groups - */ -#define DPENUMPLAYERS_REMOTE 0x00000010 -#define DPENUMGROUPS_REMOTE DPENUMPLAYERS_REMOTE - -/* - * Enumerate groups along with the players - */ -#define DPENUMPLAYERS_GROUP 0x00000020 - -/* - * Enumerate players or groups in another session - * (must supply lpguidInstance) - */ -#define DPENUMPLAYERS_SESSION 0x00000080 -#define DPENUMGROUPS_SESSION DPENUMPLAYERS_SESSION - -/* - * Enumerate server players - */ -#define DPENUMPLAYERS_SERVERPLAYER 0x00000100 - -/* - * Enumerate spectator players - */ -#define DPENUMPLAYERS_SPECTATOR 0x00000200 - -/* - * Enumerate shortcut groups - */ -#define DPENUMGROUPS_SHORTCUT 0x00000400 - -/* - * Enumerate staging area groups - */ -#define DPENUMGROUPS_STAGINGAREA 0x00000800 - -/* - * Enumerate hidden groups - */ -#define DPENUMGROUPS_HIDDEN 0x00001000 - -/* - * Enumerate the group's owner - */ -#define DPENUMPLAYERS_OWNER 0x00002000 - - -/**************************************************************************** - * - * CreatePlayer API flags - * - ****************************************************************************/ - -/* - * This flag indicates that this player should be designated - * the server player. The app should specify this at CreatePlayer. - */ -#define DPPLAYER_SERVERPLAYER DPENUMPLAYERS_SERVERPLAYER - -/* - * This flag indicates that this player should be designated - * a spectator. The app should specify this at CreatePlayer. - */ -#define DPPLAYER_SPECTATOR DPENUMPLAYERS_SPECTATOR - -/* - * This flag indicates that this player was created locally. - * (returned from GetPlayerFlags) - */ -#define DPPLAYER_LOCAL DPENUMPLAYERS_LOCAL - -/* - * This flag indicates that this player is the group's owner - * (Only returned in EnumGroupPlayers) - */ -#define DPPLAYER_OWNER DPENUMPLAYERS_OWNER - -/**************************************************************************** - * - * CreateGroup API flags - * - ****************************************************************************/ - - -/* - * This flag indicates that the StartSession can be called on the group. - * The app should specify this at CreateGroup, or CreateGroupInGroup. - */ -#define DPGROUP_STAGINGAREA DPENUMGROUPS_STAGINGAREA - -/* - * This flag indicates that this group was created locally. - * (returned from GetGroupFlags) - */ -#define DPGROUP_LOCAL DPENUMGROUPS_LOCAL - -/* - * This flag indicates that this group was created hidden. - */ -#define DPGROUP_HIDDEN DPENUMGROUPS_HIDDEN - - -/**************************************************************************** - * - * EnumSessions API flags - * - ****************************************************************************/ - -/* - * Enumerate sessions which can be joined - */ -#define DPENUMSESSIONS_AVAILABLE 0x00000001 - -/* - * Enumerate all sessions even if they can't be joined. - */ -#define DPENUMSESSIONS_ALL 0x00000002 - - -/* - * Start an asynchronous enum sessions - */ - #define DPENUMSESSIONS_ASYNC 0x00000010 - -/* - * Stop an asynchronous enum sessions - */ - #define DPENUMSESSIONS_STOPASYNC 0x00000020 - -/* - * Enumerate sessions even if they require a password - */ - #define DPENUMSESSIONS_PASSWORDREQUIRED 0x00000040 - -/* - * Return status about progress of enumeration instead of - * showing any status dialogs. - */ - #define DPENUMSESSIONS_RETURNSTATUS 0x00000080 - -/**************************************************************************** - * - * GetCaps and GetPlayerCaps API flags - * - ****************************************************************************/ - -/* - * The latency returned should be for guaranteed message sending. - * Default is non-guaranteed messaging. - */ -#define DPGETCAPS_GUARANTEED 0x00000001 - - -/**************************************************************************** - * - * GetGroupData, GetPlayerData API flags - * Remote and local Group/Player data is maintained separately. - * Default is DPGET_REMOTE. - * - ****************************************************************************/ - -/* - * Get the remote data (set by any DirectPlay object in - * the session using DPSET_REMOTE) - */ -#define DPGET_REMOTE 0x00000000 - -/* - * Get the local data (set by this DirectPlay object - * using DPSET_LOCAL) - */ -#define DPGET_LOCAL 0x00000001 - - -/**************************************************************************** - * - * Open API flags - * - ****************************************************************************/ - -/* - * Join the session that is described by the DPSESSIONDESC2 structure - */ -#define DPOPEN_JOIN 0x00000001 - -/* - * Create a new session as described by the DPSESSIONDESC2 structure - */ -#define DPOPEN_CREATE 0x00000002 - -/* - * Return status about progress of open instead of showing - * any status dialogs. - */ - #define DPOPEN_RETURNSTATUS DPENUMSESSIONS_RETURNSTATUS - - -/**************************************************************************** - * - * DPLCONNECTION flags - * - ****************************************************************************/ - -/* - * This application should create a new session as - * described by the DPSESIONDESC structure - */ -#define DPLCONNECTION_CREATESESSION DPOPEN_CREATE - -/* - * This application should join the session described by - * the DPSESIONDESC structure with the lpAddress data - */ -#define DPLCONNECTION_JOINSESSION DPOPEN_JOIN - -/**************************************************************************** - * - * Receive API flags - * Default is DPRECEIVE_ALL - * - ****************************************************************************/ - -/* - * Get the first message in the queue - */ -#define DPRECEIVE_ALL 0x00000001 - -/* - * Get the first message in the queue directed to a specific player - */ -#define DPRECEIVE_TOPLAYER 0x00000002 - -/* - * Get the first message in the queue from a specific player - */ -#define DPRECEIVE_FROMPLAYER 0x00000004 - -/* - * Get the message but don't remove it from the queue - */ -#define DPRECEIVE_PEEK 0x00000008 - - -/**************************************************************************** - * - * Send API flags - * - ****************************************************************************/ - -/* - * Send the message using a guaranteed send method. - * Default is non-guaranteed. - */ -#define DPSEND_GUARANTEED 0x00000001 - - -/* - * This flag is obsolete. It is ignored by DirectPlay - */ -#define DPSEND_HIGHPRIORITY 0x00000002 - -/* - * This flag is obsolete. It is ignored by DirectPlay - */ -#define DPSEND_OPENSTREAM 0x00000008 - -/* - * This flag is obsolete. It is ignored by DirectPlay - */ -#define DPSEND_CLOSESTREAM 0x00000010 - -/* - * Send the message digitally signed to ensure authenticity. - */ -#define DPSEND_SIGNED 0x00000020 - -/* - * Send the message with encryption to ensure privacy. - */ -#define DPSEND_ENCRYPTED 0x00000040 - -/* - * The message is a lobby system message - */ -#define DPSEND_LOBBYSYSTEMMESSAGE 0x00000080 - - -/* - * Send message asynchronously, must check caps - * before using this flag. It is always provided - * if the protocol flag is set. - */ -#define DPSEND_ASYNC 0x00000200 - -/* - * When an message is completed, don't tell me. - * by default the application is notified with a system message. - */ -#define DPSEND_NOSENDCOMPLETEMSG 0x00000400 - - -/* - * Maximum priority for sends available to applications - */ -#define DPSEND_MAX_PRI 0x0000FFFF -#define DPSEND_MAX_PRIORITY DPSEND_MAX_PRI - - -/**************************************************************************** - * - * SetGroupData, SetGroupName, SetPlayerData, SetPlayerName, - * SetSessionDesc API flags. - * Default is DPSET_REMOTE. - * - ****************************************************************************/ - -/* - * Propagate the data to all players in the session - */ -#define DPSET_REMOTE 0x00000000 - -/* - * Do not propagate the data to other players - */ -#define DPSET_LOCAL 0x00000001 - -/* - * Used with DPSET_REMOTE, use guaranteed message send to - * propagate the data - */ -#define DPSET_GUARANTEED 0x00000002 - -/**************************************************************************** - * - * GetMessageQueue API flags. - * Default is DPMESSAGEQUEUE_SEND - * - ****************************************************************************/ - -/* - * Get Send Queue - requires Service Provider Support - */ -#define DPMESSAGEQUEUE_SEND 0x00000001 - -/* - * Get Receive Queue - */ -#define DPMESSAGEQUEUE_RECEIVE 0x00000002 - - -/**************************************************************************** - * - * Connect API flags - * - ****************************************************************************/ - - -/* - * Start an asynchronous connect which returns status codes - */ -#define DPCONNECT_RETURNSTATUS (DPENUMSESSIONS_RETURNSTATUS) - - -/**************************************************************************** - * - * DirectPlay system messages and message data structures - * - * All system message come 'From' player DPID_SYSMSG. To determine what type - * of message it is, cast the lpData from Receive to DPMSG_GENERIC and check - * the dwType member against one of the following DPSYS_xxx constants. Once - * a match is found, cast the lpData to the corresponding of the DPMSG_xxx - * structures to access the data of the message. - * - ****************************************************************************/ - -/* - * A new player or group has been created in the session - * Use DPMSG_CREATEPLAYERORGROUP. Check dwPlayerType to see if it - * is a player or a group. - */ -#define DPSYS_CREATEPLAYERORGROUP 0x0003 - -/* - * A player has been deleted from the session - * Use DPMSG_DESTROYPLAYERORGROUP - */ -#define DPSYS_DESTROYPLAYERORGROUP 0x0005 - -/* - * A player has been added to a group - * Use DPMSG_ADDPLAYERTOGROUP - */ -#define DPSYS_ADDPLAYERTOGROUP 0x0007 - -/* - * A player has been removed from a group - * Use DPMSG_DELETEPLAYERFROMGROUP - */ -#define DPSYS_DELETEPLAYERFROMGROUP 0x0021 - -/* - * This DirectPlay object lost its connection with all the - * other players in the session. - * Use DPMSG_SESSIONLOST. - */ -#define DPSYS_SESSIONLOST 0x0031 - -/* - * The current host has left the session. - * This DirectPlay object is now the host. - * Use DPMSG_HOST. - */ -#define DPSYS_HOST 0x0101 - -/* - * The remote data associated with a player or - * group has changed. Check dwPlayerType to see - * if it is a player or a group - * Use DPMSG_SETPLAYERORGROUPDATA - */ -#define DPSYS_SETPLAYERORGROUPDATA 0x0102 - -/* - * The name of a player or group has changed. - * Check dwPlayerType to see if it is a player - * or a group. - * Use DPMSG_SETPLAYERORGROUPNAME - */ -#define DPSYS_SETPLAYERORGROUPNAME 0x0103 - -/* - * The session description has changed. - * Use DPMSG_SETSESSIONDESC - */ -#define DPSYS_SETSESSIONDESC 0x0104 - -/* - * A group has been added to a group - * Use DPMSG_ADDGROUPTOGROUP - */ -#define DPSYS_ADDGROUPTOGROUP 0x0105 - -/* - * A group has been removed from a group - * Use DPMSG_DELETEGROUPFROMGROUP - */ -#define DPSYS_DELETEGROUPFROMGROUP 0x0106 - -/* - * A secure player-player message has arrived. - * Use DPMSG_SECUREMESSAGE - */ -#define DPSYS_SECUREMESSAGE 0x0107 - -/* - * Start a new session. - * Use DPMSG_STARTSESSION - */ -#define DPSYS_STARTSESSION 0x0108 - -/* - * A chat message has arrived - * Use DPMSG_CHAT - */ -#define DPSYS_CHAT 0x0109 - -/* - * The owner of a group has changed - * Use DPMSG_SETGROUPOWNER - */ -#define DPSYS_SETGROUPOWNER 0x010A - -/* - * An async send has finished, failed or been cancelled - * Use DPMSG_SENDCOMPLETE - */ -#define DPSYS_SENDCOMPLETE 0x010d - - -/* - * Used in the dwPlayerType field to indicate if it applies to a group - * or a player - */ -#define DPPLAYERTYPE_GROUP 0x00000000 -#define DPPLAYERTYPE_PLAYER 0x00000001 - - -/* - * DPMSG_GENERIC - * Generic message structure used to identify the message type. - */ -typedef struct -{ - DWORD dwType; // Message type -} DPMSG_GENERIC, FAR *LPDPMSG_GENERIC; - -/* - * DPMSG_CREATEPLAYERORGROUP - * System message generated when a new player or group - * created in the session with information about it. - */ -typedef struct -{ - DWORD dwType; // Message type - DWORD dwPlayerType; // Is it a player or group - DPID dpId; // ID of the player or group - DWORD dwCurrentPlayers; // current # players & groups in session - LPVOID lpData; // pointer to remote data - DWORD dwDataSize; // size of remote data - DPNAME dpnName; // structure with name info - // the following fields are only available when using - // the IDirectPlay3 interface or greater - DPID dpIdParent; // id of parent group - DWORD dwFlags; // player or group flags -} DPMSG_CREATEPLAYERORGROUP, FAR *LPDPMSG_CREATEPLAYERORGROUP; - -/* - * DPMSG_DESTROYPLAYERORGROUP - * System message generated when a player or group is being - * destroyed in the session with information about it. - */ -typedef struct -{ - DWORD dwType; // Message type - DWORD dwPlayerType; // Is it a player or group - DPID dpId; // player ID being deleted - LPVOID lpLocalData; // copy of players local data - DWORD dwLocalDataSize; // sizeof local data - LPVOID lpRemoteData; // copy of players remote data - DWORD dwRemoteDataSize; // sizeof remote data - // the following fields are only available when using - // the IDirectPlay3 interface or greater - DPNAME dpnName; // structure with name info - DPID dpIdParent; // id of parent group - DWORD dwFlags; // player or group flags -} DPMSG_DESTROYPLAYERORGROUP, FAR *LPDPMSG_DESTROYPLAYERORGROUP; - -/* - * DPMSG_ADDPLAYERTOGROUP - * System message generated when a player is being added - * to a group. - */ -typedef struct -{ - DWORD dwType; // Message type - DPID dpIdGroup; // group ID being added to - DPID dpIdPlayer; // player ID being added -} DPMSG_ADDPLAYERTOGROUP, FAR *LPDPMSG_ADDPLAYERTOGROUP; - -/* - * DPMSG_DELETEPLAYERFROMGROUP - * System message generated when a player is being - * removed from a group - */ -typedef DPMSG_ADDPLAYERTOGROUP DPMSG_DELETEPLAYERFROMGROUP; -typedef DPMSG_DELETEPLAYERFROMGROUP FAR *LPDPMSG_DELETEPLAYERFROMGROUP; - -/* - * DPMSG_ADDGROUPTOGROUP - * System message generated when a group is being added - * to a group. - */ -typedef struct -{ - DWORD dwType; // Message type - DPID dpIdParentGroup; // group ID being added to - DPID dpIdGroup; // group ID being added -} DPMSG_ADDGROUPTOGROUP, FAR *LPDPMSG_ADDGROUPTOGROUP; - -/* - * DPMSG_DELETEGROUPFROMGROUP - * System message generated when a GROUP is being - * removed from a group - */ -typedef DPMSG_ADDGROUPTOGROUP DPMSG_DELETEGROUPFROMGROUP; -typedef DPMSG_DELETEGROUPFROMGROUP FAR *LPDPMSG_DELETEGROUPFROMGROUP; - -/* - * DPMSG_SETPLAYERORGROUPDATA - * System message generated when remote data for a player or - * group has changed. - */ -typedef struct -{ - DWORD dwType; // Message type - DWORD dwPlayerType; // Is it a player or group - DPID dpId; // ID of player or group - LPVOID lpData; // pointer to remote data - DWORD dwDataSize; // size of remote data -} DPMSG_SETPLAYERORGROUPDATA, FAR *LPDPMSG_SETPLAYERORGROUPDATA; - -/* - * DPMSG_SETPLAYERORGROUPNAME - * System message generated when the name of a player or - * group has changed. - */ -typedef struct -{ - DWORD dwType; // Message type - DWORD dwPlayerType; // Is it a player or group - DPID dpId; // ID of player or group - DPNAME dpnName; // structure with new name info -} DPMSG_SETPLAYERORGROUPNAME, FAR *LPDPMSG_SETPLAYERORGROUPNAME; - -/* - * DPMSG_SETSESSIONDESC - * System message generated when session desc has changed - */ -typedef struct -{ - DWORD dwType; // Message type - DPSESSIONDESC2 dpDesc; // Session desc -} DPMSG_SETSESSIONDESC, FAR *LPDPMSG_SETSESSIONDESC; - -/* - * DPMSG_HOST - * System message generated when the host has migrated to this - * DirectPlay object. - * - */ -typedef DPMSG_GENERIC DPMSG_HOST; -typedef DPMSG_HOST FAR *LPDPMSG_HOST; - -/* - * DPMSG_SESSIONLOST - * System message generated when the connection to the session is lost. - * - */ -typedef DPMSG_GENERIC DPMSG_SESSIONLOST; -typedef DPMSG_SESSIONLOST FAR *LPDPMSG_SESSIONLOST; - -/* - * DPMSG_SECUREMESSAGE - * System message generated when a player requests a secure send - */ -typedef struct -{ - DWORD dwType; // Message Type - DWORD dwFlags; // Signed/Encrypted - DPID dpIdFrom; // ID of Sending Player - LPVOID lpData; // Player message - DWORD dwDataSize; // Size of player message -} DPMSG_SECUREMESSAGE, FAR *LPDPMSG_SECUREMESSAGE; - -/* - * DPMSG_STARTSESSION - * System message containing all information required to - * start a new session - */ -typedef struct -{ - DWORD dwType; // Message type - LPDPLCONNECTION lpConn; // DPLCONNECTION structure -} DPMSG_STARTSESSION, FAR *LPDPMSG_STARTSESSION; - -/* - * DPMSG_CHAT - * System message containing a chat message - */ -typedef struct -{ - DWORD dwType; // Message type - DWORD dwFlags; // Message flags - DPID idFromPlayer; // ID of the Sending Player - DPID idToPlayer; // ID of the To Player - DPID idToGroup; // ID of the To Group - LPDPCHAT lpChat; // Pointer to a structure containing the chat message -} DPMSG_CHAT, FAR *LPDPMSG_CHAT; - -/* - * DPMSG_SETGROUPOWNER - * System message generated when the owner of a group has changed - */ -typedef struct -{ - DWORD dwType; // Message type - DPID idGroup; // ID of the group - DPID idNewOwner; // ID of the player that is the new owner - DPID idOldOwner; // ID of the player that used to be the owner -} DPMSG_SETGROUPOWNER, FAR *LPDPMSG_SETGROUPOWNER; - -/* - * DPMSG_SENDCOMPLETE - * System message generated when finished with an Async Send message - * - * NOTE SENDPARMS has an overlay for DPMSG_SENDCOMPLETE, don't - * change this message w/o changing SENDPARMS. - */ -typedef struct -{ - DWORD dwType; - DPID idFrom; - DPID idTo; - DWORD dwFlags; - DWORD dwPriority; - DWORD dwTimeout; - LPVOID lpvContext; - DWORD dwMsgID; - HRESULT hr; - DWORD dwSendTime; -} DPMSG_SENDCOMPLETE, *LPDPMSG_SENDCOMPLETE; - -/**************************************************************************** - * - * DIRECTPLAY ERRORS - * - * Errors are represented by negative values and cannot be combined. - * - ****************************************************************************/ -#define DP_OK S_OK -#define DPERR_ALREADYINITIALIZED MAKE_DPHRESULT( 5 ) -#define DPERR_ACCESSDENIED MAKE_DPHRESULT( 10 ) -#define DPERR_ACTIVEPLAYERS MAKE_DPHRESULT( 20 ) -#define DPERR_BUFFERTOOSMALL MAKE_DPHRESULT( 30 ) -#define DPERR_CANTADDPLAYER MAKE_DPHRESULT( 40 ) -#define DPERR_CANTCREATEGROUP MAKE_DPHRESULT( 50 ) -#define DPERR_CANTCREATEPLAYER MAKE_DPHRESULT( 60 ) -#define DPERR_CANTCREATESESSION MAKE_DPHRESULT( 70 ) -#define DPERR_CAPSNOTAVAILABLEYET MAKE_DPHRESULT( 80 ) -#define DPERR_EXCEPTION MAKE_DPHRESULT( 90 ) -#define DPERR_GENERIC E_FAIL -#define DPERR_INVALIDFLAGS MAKE_DPHRESULT( 120 ) -#define DPERR_INVALIDOBJECT MAKE_DPHRESULT( 130 ) -#define DPERR_INVALIDPARAM E_INVALIDARG -#define DPERR_INVALIDPARAMS DPERR_INVALIDPARAM -#define DPERR_INVALIDPLAYER MAKE_DPHRESULT( 150 ) -#define DPERR_INVALIDGROUP MAKE_DPHRESULT( 155 ) -#define DPERR_NOCAPS MAKE_DPHRESULT( 160 ) -#define DPERR_NOCONNECTION MAKE_DPHRESULT( 170 ) -#define DPERR_NOMEMORY E_OUTOFMEMORY -#define DPERR_OUTOFMEMORY DPERR_NOMEMORY -#define DPERR_NOMESSAGES MAKE_DPHRESULT( 190 ) -#define DPERR_NONAMESERVERFOUND MAKE_DPHRESULT( 200 ) -#define DPERR_NOPLAYERS MAKE_DPHRESULT( 210 ) -#define DPERR_NOSESSIONS MAKE_DPHRESULT( 220 ) -#define DPERR_PENDING E_PENDING -#define DPERR_SENDTOOBIG MAKE_DPHRESULT( 230 ) -#define DPERR_TIMEOUT MAKE_DPHRESULT( 240 ) -#define DPERR_UNAVAILABLE MAKE_DPHRESULT( 250 ) -#define DPERR_UNSUPPORTED E_NOTIMPL -#define DPERR_BUSY MAKE_DPHRESULT( 270 ) -#define DPERR_USERCANCEL MAKE_DPHRESULT( 280 ) -#define DPERR_NOINTERFACE E_NOINTERFACE -#define DPERR_CANNOTCREATESERVER MAKE_DPHRESULT( 290 ) -#define DPERR_PLAYERLOST MAKE_DPHRESULT( 300 ) -#define DPERR_SESSIONLOST MAKE_DPHRESULT( 310 ) -#define DPERR_UNINITIALIZED MAKE_DPHRESULT( 320 ) -#define DPERR_NONEWPLAYERS MAKE_DPHRESULT( 330 ) -#define DPERR_INVALIDPASSWORD MAKE_DPHRESULT( 340 ) -#define DPERR_CONNECTING MAKE_DPHRESULT( 350 ) -#define DPERR_CONNECTIONLOST MAKE_DPHRESULT( 360 ) -#define DPERR_UNKNOWNMESSAGE MAKE_DPHRESULT( 370 ) -#define DPERR_CANCELFAILED MAKE_DPHRESULT( 380 ) -#define DPERR_INVALIDPRIORITY MAKE_DPHRESULT( 390 ) -#define DPERR_NOTHANDLED MAKE_DPHRESULT( 400 ) -#define DPERR_CANCELLED MAKE_DPHRESULT( 410 ) -#define DPERR_ABORTED MAKE_DPHRESULT( 420 ) - - -#define DPERR_BUFFERTOOLARGE MAKE_DPHRESULT( 1000 ) -#define DPERR_CANTCREATEPROCESS MAKE_DPHRESULT( 1010 ) -#define DPERR_APPNOTSTARTED MAKE_DPHRESULT( 1020 ) -#define DPERR_INVALIDINTERFACE MAKE_DPHRESULT( 1030 ) -#define DPERR_NOSERVICEPROVIDER MAKE_DPHRESULT( 1040 ) -#define DPERR_UNKNOWNAPPLICATION MAKE_DPHRESULT( 1050 ) -#define DPERR_NOTLOBBIED MAKE_DPHRESULT( 1070 ) -#define DPERR_SERVICEPROVIDERLOADED MAKE_DPHRESULT( 1080 ) -#define DPERR_ALREADYREGISTERED MAKE_DPHRESULT( 1090 ) -#define DPERR_NOTREGISTERED MAKE_DPHRESULT( 1100 ) - -// -// Security related errors -// -#define DPERR_AUTHENTICATIONFAILED MAKE_DPHRESULT( 2000 ) -#define DPERR_CANTLOADSSPI MAKE_DPHRESULT( 2010 ) -#define DPERR_ENCRYPTIONFAILED MAKE_DPHRESULT( 2020 ) -#define DPERR_SIGNFAILED MAKE_DPHRESULT( 2030 ) -#define DPERR_CANTLOADSECURITYPACKAGE MAKE_DPHRESULT( 2040 ) -#define DPERR_ENCRYPTIONNOTSUPPORTED MAKE_DPHRESULT( 2050 ) -#define DPERR_CANTLOADCAPI MAKE_DPHRESULT( 2060 ) -#define DPERR_NOTLOGGEDIN MAKE_DPHRESULT( 2070 ) -#define DPERR_LOGONDENIED MAKE_DPHRESULT( 2080 ) - - -/**************************************************************************** - * - * dplay 1.0 obsolete structures + interfaces - * Included for compatibility only. New apps should - * use IDirectPlay2 - * - ****************************************************************************/ - -// define this to ignore obsolete interfaces and constants -#ifndef IDIRECTPLAY2_OR_GREATER - -#define DPOPEN_OPENSESSION DPOPEN_JOIN -#define DPOPEN_CREATESESSION DPOPEN_CREATE - -#define DPENUMSESSIONS_PREVIOUS 0x00000004 - -#define DPENUMPLAYERS_PREVIOUS 0x00000004 - -#define DPSEND_GUARANTEE DPSEND_GUARANTEED -#define DPSEND_TRYONCE 0x00000004 - -#define DPCAPS_NAMESERVICE 0x00000001 -#define DPCAPS_NAMESERVER DPCAPS_ISHOST -#define DPCAPS_GUARANTEED 0x00000004 - -#define DPLONGNAMELEN 52 -#define DPSHORTNAMELEN 20 -#define DPSESSIONNAMELEN 32 -#define DPPASSWORDLEN 16 -#define DPUSERRESERVED 16 - -#define DPSYS_ADDPLAYER 0x0003 -#define DPSYS_DELETEPLAYER 0x0005 - -#define DPSYS_DELETEGROUP 0x0020 -#define DPSYS_DELETEPLAYERFROMGRP 0x0021 -#define DPSYS_CONNECT 0x484b - -typedef struct -{ - DWORD dwType; - DWORD dwPlayerType; - DPID dpId; - char szLongName[DPLONGNAMELEN]; - char szShortName[DPSHORTNAMELEN]; - DWORD dwCurrentPlayers; -} DPMSG_ADDPLAYER; - -typedef DPMSG_ADDPLAYER DPMSG_ADDGROUP; - -typedef struct -{ - DWORD dwType; - DPID dpIdGroup; - DPID dpIdPlayer; -} DPMSG_GROUPADD; - -typedef DPMSG_GROUPADD DPMSG_GROUPDELETE; -typedef struct -{ - DWORD dwType; - DPID dpId; -} DPMSG_DELETEPLAYER; - -typedef BOOL (PASCAL *LPDPENUMPLAYERSCALLBACK)( - DPID dpId, - LPSTR lpFriendlyName, - LPSTR lpFormalName, - DWORD dwFlags, - LPVOID lpContext ); - -typedef struct -{ - DWORD dwSize; - GUID guidSession; - DWORD_PTR dwSession; - DWORD dwMaxPlayers; - DWORD dwCurrentPlayers; - DWORD dwFlags; - char szSessionName[DPSESSIONNAMELEN]; - char szUserField[DPUSERRESERVED]; - DWORD_PTR dwReserved1; - char szPassword[DPPASSWORDLEN]; - DWORD_PTR dwReserved2; - DWORD_PTR dwUser1; - DWORD_PTR dwUser2; - DWORD_PTR dwUser3; - DWORD_PTR dwUser4; -} DPSESSIONDESC,*LPDPSESSIONDESC; - -typedef BOOL (PASCAL * LPDPENUMSESSIONSCALLBACK)( - LPDPSESSIONDESC lpDPSessionDesc, - LPVOID lpContext, - LPDWORD lpdwTimeOut, - DWORD dwFlags); - -/* - * IDirectPlay - */ -#undef INTERFACE -#define INTERFACE IDirectPlay -DECLARE_INTERFACE_( IDirectPlay, IUnknown ) -{ - /*** IUnknown methods ***/ - STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - /*** IDirectPlay methods ***/ - STDMETHOD(AddPlayerToGroup) (THIS_ DPID, DPID) PURE; - STDMETHOD(Close) (THIS) PURE; - STDMETHOD(CreatePlayer) (THIS_ LPDPID,LPSTR,LPSTR,LPHANDLE) PURE; - STDMETHOD(CreateGroup) (THIS_ LPDPID,LPSTR,LPSTR) PURE; - STDMETHOD(DeletePlayerFromGroup)(THIS_ DPID,DPID) PURE; - STDMETHOD(DestroyPlayer) (THIS_ DPID) PURE; - STDMETHOD(DestroyGroup) (THIS_ DPID) PURE; - STDMETHOD(EnableNewPlayers) (THIS_ BOOL) PURE; - STDMETHOD(EnumGroupPlayers) (THIS_ DPID, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE; - STDMETHOD(EnumGroups) (THIS_ DWORD_PTR, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE; - STDMETHOD(EnumPlayers) (THIS_ DWORD_PTR, LPDPENUMPLAYERSCALLBACK,LPVOID,DWORD) PURE; - STDMETHOD(EnumSessions) (THIS_ LPDPSESSIONDESC,DWORD,LPDPENUMSESSIONSCALLBACK,LPVOID,DWORD) PURE; - STDMETHOD(GetCaps) (THIS_ LPDPCAPS) PURE; - STDMETHOD(GetMessageCount) (THIS_ DPID, LPDWORD) PURE; - STDMETHOD(GetPlayerCaps) (THIS_ DPID, LPDPCAPS) PURE; - STDMETHOD(GetPlayerName) (THIS_ DPID,LPSTR,LPDWORD,LPSTR,LPDWORD) PURE; - STDMETHOD(Initialize) (THIS_ LPGUID) PURE; - STDMETHOD(Open) (THIS_ LPDPSESSIONDESC) PURE; - STDMETHOD(Receive) (THIS_ LPDPID,LPDPID,DWORD,LPVOID,LPDWORD) PURE; - STDMETHOD(SaveSession) (THIS_ LPSTR) PURE; - STDMETHOD(Send) (THIS_ DPID, DPID, DWORD, LPVOID, DWORD) PURE; - STDMETHOD(SetPlayerName) (THIS_ DPID,LPSTR,LPSTR) PURE; -}; - -/**************************************************************************** - * - * IDirectPlay interface macros - * - ****************************************************************************/ - -#if !defined(__cplusplus) || defined(CINTERFACE) - -#define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->lpVtbl->AddPlayerToGroup(p,a,b) -#define IDirectPlay_Close(p) (p)->lpVtbl->Close(p) -#define IDirectPlay_CreateGroup(p,a,b,c) (p)->lpVtbl->CreateGroup(p,a,b,c) -#define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->lpVtbl->CreatePlayer(p,a,b,c,d) -#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->lpVtbl->DeletePlayerFromGroup(p,a,b) -#define IDirectPlay_DestroyGroup(p,a) (p)->lpVtbl->DestroyGroup(p,a) -#define IDirectPlay_DestroyPlayer(p,a) (p)->lpVtbl->DestroyPlayer(p,a) -#define IDirectPlay_EnableNewPlayers(p,a) (p)->lpVtbl->EnableNewPlayers(p,a) -#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->lpVtbl->EnumGroupPlayers(p,a,b,c,d) -#define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->lpVtbl->EnumGroups(p,a,b,c,d) -#define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->lpVtbl->EnumPlayers(p,a,b,c,d) -#define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->lpVtbl->EnumSessions(p,a,b,c,d,e) -#define IDirectPlay_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectPlay_GetMessageCount(p,a,b) (p)->lpVtbl->GetMessageCount(p,a,b) -#define IDirectPlay_GetPlayerCaps(p,a,b) (p)->lpVtbl->GetPlayerCaps(p,a,b) -#define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->lpVtbl->GetPlayerName(p,a,b,c,d,e) -#define IDirectPlay_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#define IDirectPlay_Open(p,a) (p)->lpVtbl->Open(p,a) -#define IDirectPlay_Receive(p,a,b,c,d,e) (p)->lpVtbl->Receive(p,a,b,c,d,e) -#define IDirectPlay_SaveSession(p,a) (p)->lpVtbl->SaveSession(p,a) -#define IDirectPlay_Send(p,a,b,c,d,e) (p)->lpVtbl->Send(p,a,b,c,d,e) -#define IDirectPlay_SetPlayerName(p,a,b,c) (p)->lpVtbl->SetPlayerName(p,a,b,c) - -#else /* C++ */ - -#define IDirectPlay_AddPlayerToGroup(p,a,b) (p)->AddPlayerToGroup(a,b) -#define IDirectPlay_Close(p) (p)->Close() -#define IDirectPlay_CreateGroup(p,a,b,c) (p)->CreateGroup(a,b,c) -#define IDirectPlay_CreatePlayer(p,a,b,c,d) (p)->CreatePlayer(a,b,c,d) -#define IDirectPlay_DeletePlayerFromGroup(p,a,b) (p)->DeletePlayerFromGroup(a,b) -#define IDirectPlay_DestroyGroup(p,a) (p)->DestroyGroup(a) -#define IDirectPlay_DestroyPlayer(p,a) (p)->DestroyPlayer(a) -#define IDirectPlay_EnableNewPlayers(p,a) (p)->EnableNewPlayers(a) -#define IDirectPlay_EnumGroupPlayers(p,a,b,c,d) (p)->EnumGroupPlayers(a,b,c,d) -#define IDirectPlay_EnumGroups(p,a,b,c,d) (p)->EnumGroups(a,b,c,d) -#define IDirectPlay_EnumPlayers(p,a,b,c,d) (p)->EnumPlayers(a,b,c,d) -#define IDirectPlay_EnumSessions(p,a,b,c,d,e) (p)->EnumSessions(a,b,c,d,e) -#define IDirectPlay_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectPlay_GetMessageCount(p,a,b) (p)->GetMessageCount(a,b) -#define IDirectPlay_GetPlayerCaps(p,a,b) (p)->GetPlayerCaps(a,b) -#define IDirectPlay_GetPlayerName(p,a,b,c,d,e) (p)->GetPlayerName(a,b,c,d,e) -#define IDirectPlay_Initialize(p,a) (p)->Initialize(a) -#define IDirectPlay_Open(p,a) (p)->Open(a) -#define IDirectPlay_Receive(p,a,b,c,d,e) (p)->Receive(a,b,c,d,e) -#define IDirectPlay_SaveSession(p,a) (p)->SaveSession(a) -#define IDirectPlay_Send(p,a,b,c,d,e) (p)->Send(a,b,c,d,e) -#define IDirectPlay_SetPlayerName(p,a,b,c) (p)->SetPlayerName(a,b,c) - -#endif - -DEFINE_GUID(IID_IDirectPlay, 0x5454e9a0, 0xdb65, 0x11ce, 0x92, 0x1c, 0x00, 0xaa, 0x00, 0x6c, 0x49, 0x72); - -#endif // IDIRECTPLAY2_OR_GREATER - -/**************************************************************************** - * - * IDirectPlay macros (included regardless of IDIRECTPLAY2_OR_GREATER flag) - * - ****************************************************************************/ - -#if !defined(__cplusplus) || defined(CINTERFACE) - -#define IDirectPlay_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#define IDirectPlay_AddRef(p) (p)->lpVtbl->AddRef(p) -#define IDirectPlay_Release(p) (p)->lpVtbl->Release(p) - -#else - -#define IDirectPlay_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#define IDirectPlay_AddRef(p) (p)->AddRef() -#define IDirectPlay_Release(p) (p)->Release() - -#endif // IDirectPlay interface macros - -#ifdef __cplusplus -}; -#endif - -/* restore warning settings */ -#if _MSC_VER >= 1200 -#pragma warning(pop) -#else -#pragma warning(default:4201) -#endif - -#endif - diff --git a/dsound.h b/dsound.h deleted file mode 100644 index ca43f5f..0000000 --- a/dsound.h +++ /dev/null @@ -1,2385 +0,0 @@ -/*==========================================================================; - * - * Copyright (c) Microsoft Corporation. All rights reserved. - * - * File: dsound.h - * Content: DirectSound include file - * - **************************************************************************/ - -#define COM_NO_WINDOWS_H -#include -#include -#include - -#ifndef DIRECTSOUND_VERSION - -#if (NTDDI_VERSION < NTDDI_WINXP) /* Windows 2000 */ -#define DIRECTSOUND_VERSION 0x0700 /* Version 7.0 */ -#elif (NTDDI_VERSION < NTDDI_WINXPSP2 || NTDDI_VERSION == NTDDI_WS03) /* Windows XP and SP1, or Windows Server 2003 */ -#define DIRECTSOUND_VERSION 0x0800 /* Version 8.0 */ -#else /* Windows XP SP2 and higher, Windows Server 2003 SP1 and higher, Longhorn, or higher */ -#define DIRECTSOUND_VERSION 0x0900 /* Version 9.0 */ -#endif - -#endif // DIRECTSOUND_VERSION - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -#ifndef __DSOUND_INCLUDED__ -#define __DSOUND_INCLUDED__ - -/* Type definitions shared with Direct3D */ - -#ifndef DX_SHARED_DEFINES - -typedef float D3DVALUE, *LPD3DVALUE; - -#ifndef D3DCOLOR_DEFINED -typedef DWORD D3DCOLOR; -#define D3DCOLOR_DEFINED -#endif - -#ifndef LPD3DCOLOR_DEFINED -typedef DWORD *LPD3DCOLOR; -#define LPD3DCOLOR_DEFINED -#endif - -#ifndef D3DVECTOR_DEFINED -typedef struct _D3DVECTOR { - float x; - float y; - float z; -} D3DVECTOR; -#define D3DVECTOR_DEFINED -#endif - -#ifndef LPD3DVECTOR_DEFINED -typedef D3DVECTOR *LPD3DVECTOR; -#define LPD3DVECTOR_DEFINED -#endif - -#define DX_SHARED_DEFINES -#endif // DX_SHARED_DEFINES - -#define _FACDS 0x878 /* DirectSound's facility code */ -#define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code) - -// DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000} -DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0); - -// DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B} -DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b); - -// DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16} -DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -// DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1} -DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1); - -// DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D} -DEFINE_GUID(CLSID_DirectSoundFullDuplex, 0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d); - - -// DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultPlayback, 0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - -// DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultCapture, 0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - -// DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultVoicePlayback, 0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - -// DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03} -DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03); - - -// -// Forward declarations for interfaces. -// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined -// - -#ifdef __cplusplus -struct IDirectSound; -struct IDirectSoundBuffer; -struct IDirectSound3DListener; -struct IDirectSound3DBuffer; -struct IDirectSoundCapture; -struct IDirectSoundCaptureBuffer; -struct IDirectSoundNotify; -#endif // __cplusplus - -// -// DirectSound 8.0 interfaces. -// - -#if DIRECTSOUND_VERSION >= 0x0800 - -#ifdef __cplusplus -struct IDirectSound8; -struct IDirectSoundBuffer8; -struct IDirectSoundCaptureBuffer8; -struct IDirectSoundFXGargle; -struct IDirectSoundFXChorus; -struct IDirectSoundFXFlanger; -struct IDirectSoundFXEcho; -struct IDirectSoundFXDistortion; -struct IDirectSoundFXCompressor; -struct IDirectSoundFXParamEq; -struct IDirectSoundFXWavesReverb; -struct IDirectSoundFXI3DL2Reverb; -struct IDirectSoundCaptureFXAec; -struct IDirectSoundCaptureFXNoiseSuppress; -struct IDirectSoundFullDuplex; -#endif // __cplusplus - -// IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the -// only DirectSound 7.0 interfaces with changed functionality in version 8.0. -// The other level 8 interfaces as equivalent to their level 7 counterparts: - -#define IDirectSoundCapture8 IDirectSoundCapture -#define IDirectSound3DListener8 IDirectSound3DListener -#define IDirectSound3DBuffer8 IDirectSound3DBuffer -#define IDirectSoundNotify8 IDirectSoundNotify -#define IDirectSoundFXGargle8 IDirectSoundFXGargle -#define IDirectSoundFXChorus8 IDirectSoundFXChorus -#define IDirectSoundFXFlanger8 IDirectSoundFXFlanger -#define IDirectSoundFXEcho8 IDirectSoundFXEcho -#define IDirectSoundFXDistortion8 IDirectSoundFXDistortion -#define IDirectSoundFXCompressor8 IDirectSoundFXCompressor -#define IDirectSoundFXParamEq8 IDirectSoundFXParamEq -#define IDirectSoundFXWavesReverb8 IDirectSoundFXWavesReverb -#define IDirectSoundFXI3DL2Reverb8 IDirectSoundFXI3DL2Reverb -#define IDirectSoundCaptureFXAec8 IDirectSoundCaptureFXAec -#define IDirectSoundCaptureFXNoiseSuppress8 IDirectSoundCaptureFXNoiseSuppress -#define IDirectSoundFullDuplex8 IDirectSoundFullDuplex - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -typedef struct IDirectSound *LPDIRECTSOUND; -typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER; -typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER; -typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER; -typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE; -typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER; -typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY; - -#if DIRECTSOUND_VERSION >= 0x0800 - -typedef struct IDirectSoundFXGargle *LPDIRECTSOUNDFXGARGLE; -typedef struct IDirectSoundFXChorus *LPDIRECTSOUNDFXCHORUS; -typedef struct IDirectSoundFXFlanger *LPDIRECTSOUNDFXFLANGER; -typedef struct IDirectSoundFXEcho *LPDIRECTSOUNDFXECHO; -typedef struct IDirectSoundFXDistortion *LPDIRECTSOUNDFXDISTORTION; -typedef struct IDirectSoundFXCompressor *LPDIRECTSOUNDFXCOMPRESSOR; -typedef struct IDirectSoundFXParamEq *LPDIRECTSOUNDFXPARAMEQ; -typedef struct IDirectSoundFXWavesReverb *LPDIRECTSOUNDFXWAVESREVERB; -typedef struct IDirectSoundFXI3DL2Reverb *LPDIRECTSOUNDFXI3DL2REVERB; -typedef struct IDirectSoundCaptureFXAec *LPDIRECTSOUNDCAPTUREFXAEC; -typedef struct IDirectSoundCaptureFXNoiseSuppress *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS; -typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; - -typedef struct IDirectSound8 *LPDIRECTSOUND8; -typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8; -typedef struct IDirectSound3DListener8 *LPDIRECTSOUND3DLISTENER8; -typedef struct IDirectSound3DBuffer8 *LPDIRECTSOUND3DBUFFER8; -typedef struct IDirectSoundCapture8 *LPDIRECTSOUNDCAPTURE8; -typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8; -typedef struct IDirectSoundNotify8 *LPDIRECTSOUNDNOTIFY8; -typedef struct IDirectSoundFXGargle8 *LPDIRECTSOUNDFXGARGLE8; -typedef struct IDirectSoundFXChorus8 *LPDIRECTSOUNDFXCHORUS8; -typedef struct IDirectSoundFXFlanger8 *LPDIRECTSOUNDFXFLANGER8; -typedef struct IDirectSoundFXEcho8 *LPDIRECTSOUNDFXECHO8; -typedef struct IDirectSoundFXDistortion8 *LPDIRECTSOUNDFXDISTORTION8; -typedef struct IDirectSoundFXCompressor8 *LPDIRECTSOUNDFXCOMPRESSOR8; -typedef struct IDirectSoundFXParamEq8 *LPDIRECTSOUNDFXPARAMEQ8; -typedef struct IDirectSoundFXWavesReverb8 *LPDIRECTSOUNDFXWAVESREVERB8; -typedef struct IDirectSoundFXI3DL2Reverb8 *LPDIRECTSOUNDFXI3DL2REVERB8; -typedef struct IDirectSoundCaptureFXAec8 *LPDIRECTSOUNDCAPTUREFXAEC8; -typedef struct IDirectSoundCaptureFXNoiseSuppress8 *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS8; -typedef struct IDirectSoundFullDuplex8 *LPDIRECTSOUNDFULLDUPLEX8; - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IID definitions for the unchanged DirectSound 8.0 interfaces -// - -#if DIRECTSOUND_VERSION >= 0x0800 - -#define IID_IDirectSoundCapture8 IID_IDirectSoundCapture -#define IID_IDirectSound3DListener8 IID_IDirectSound3DListener -#define IID_IDirectSound3DBuffer8 IID_IDirectSound3DBuffer -#define IID_IDirectSoundNotify8 IID_IDirectSoundNotify -#define IID_IDirectSoundFXGargle8 IID_IDirectSoundFXGargle -#define IID_IDirectSoundFXChorus8 IID_IDirectSoundFXChorus -#define IID_IDirectSoundFXFlanger8 IID_IDirectSoundFXFlanger -#define IID_IDirectSoundFXEcho8 IID_IDirectSoundFXEcho -#define IID_IDirectSoundFXDistortion8 IID_IDirectSoundFXDistortion -#define IID_IDirectSoundFXCompressor8 IID_IDirectSoundFXCompressor -#define IID_IDirectSoundFXParamEq8 IID_IDirectSoundFXParamEq -#define IID_IDirectSoundFXWavesReverb8 IID_IDirectSoundFXWavesReverb -#define IID_IDirectSoundFXI3DL2Reverb8 IID_IDirectSoundFXI3DL2Reverb -#define IID_IDirectSoundCaptureFXAec8 IID_IDirectSoundCaptureFXAec -#define IID_IDirectSoundCaptureFXNoiseSuppress8 IID_IDirectSoundCaptureFXNoiseSuppress -#define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// Compatibility typedefs -// - -#ifndef _LPCWAVEFORMATEX_DEFINED -#define _LPCWAVEFORMATEX_DEFINED -typedef const WAVEFORMATEX *LPCWAVEFORMATEX; -#endif // _LPCWAVEFORMATEX_DEFINED - -#ifndef __LPCGUID_DEFINED__ -#define __LPCGUID_DEFINED__ -typedef const GUID *LPCGUID; -#endif // __LPCGUID_DEFINED__ - -typedef LPDIRECTSOUND *LPLPDIRECTSOUND; -typedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER; -typedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER; -typedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER; -typedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE; -typedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER; -typedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY; - -#if DIRECTSOUND_VERSION >= 0x0800 -typedef LPDIRECTSOUND8 *LPLPDIRECTSOUND8; -typedef LPDIRECTSOUNDBUFFER8 *LPLPDIRECTSOUNDBUFFER8; -typedef LPDIRECTSOUNDCAPTURE8 *LPLPDIRECTSOUNDCAPTURE8; -typedef LPDIRECTSOUNDCAPTUREBUFFER8 *LPLPDIRECTSOUNDCAPTUREBUFFER8; -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// Structures -// - -typedef struct _DSCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwMinSecondarySampleRate; - DWORD dwMaxSecondarySampleRate; - DWORD dwPrimaryBuffers; - DWORD dwMaxHwMixingAllBuffers; - DWORD dwMaxHwMixingStaticBuffers; - DWORD dwMaxHwMixingStreamingBuffers; - DWORD dwFreeHwMixingAllBuffers; - DWORD dwFreeHwMixingStaticBuffers; - DWORD dwFreeHwMixingStreamingBuffers; - DWORD dwMaxHw3DAllBuffers; - DWORD dwMaxHw3DStaticBuffers; - DWORD dwMaxHw3DStreamingBuffers; - DWORD dwFreeHw3DAllBuffers; - DWORD dwFreeHw3DStaticBuffers; - DWORD dwFreeHw3DStreamingBuffers; - DWORD dwTotalHwMemBytes; - DWORD dwFreeHwMemBytes; - DWORD dwMaxContigFreeHwMemBytes; - DWORD dwUnlockTransferRateHwBuffers; - DWORD dwPlayCpuOverheadSwBuffers; - DWORD dwReserved1; - DWORD dwReserved2; -} DSCAPS, *LPDSCAPS; - -typedef const DSCAPS *LPCDSCAPS; - -typedef struct _DSBCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwUnlockTransferRate; - DWORD dwPlayCpuOverhead; -} DSBCAPS, *LPDSBCAPS; - -typedef const DSBCAPS *LPCDSBCAPS; - -#if DIRECTSOUND_VERSION >= 0x0800 - - typedef struct _DSEFFECTDESC - { - DWORD dwSize; - DWORD dwFlags; - GUID guidDSFXClass; - DWORD_PTR dwReserved1; - DWORD_PTR dwReserved2; - } DSEFFECTDESC, *LPDSEFFECTDESC; - typedef const DSEFFECTDESC *LPCDSEFFECTDESC; - - #define DSFX_LOCHARDWARE 0x00000001 - #define DSFX_LOCSOFTWARE 0x00000002 - - enum - { - DSFXR_PRESENT, // 0 - DSFXR_LOCHARDWARE, // 1 - DSFXR_LOCSOFTWARE, // 2 - DSFXR_UNALLOCATED, // 3 - DSFXR_FAILED, // 4 - DSFXR_UNKNOWN, // 5 - DSFXR_SENDLOOP // 6 - }; - - typedef struct _DSCEFFECTDESC - { - DWORD dwSize; - DWORD dwFlags; - GUID guidDSCFXClass; - GUID guidDSCFXInstance; - DWORD dwReserved1; - DWORD dwReserved2; - } DSCEFFECTDESC, *LPDSCEFFECTDESC; - typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC; - - #define DSCFX_LOCHARDWARE 0x00000001 - #define DSCFX_LOCSOFTWARE 0x00000002 - - #define DSCFXR_LOCHARDWARE 0x00000010 - #define DSCFXR_LOCSOFTWARE 0x00000020 - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -typedef struct _DSBUFFERDESC -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -#if DIRECTSOUND_VERSION >= 0x0700 - GUID guid3DAlgorithm; -#endif -} DSBUFFERDESC, *LPDSBUFFERDESC; - -typedef const DSBUFFERDESC *LPCDSBUFFERDESC; - -// Older version of this structure: - -typedef struct _DSBUFFERDESC1 -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -} DSBUFFERDESC1, *LPDSBUFFERDESC1; - -typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1; - -typedef struct _DS3DBUFFER -{ - DWORD dwSize; - D3DVECTOR vPosition; - D3DVECTOR vVelocity; - DWORD dwInsideConeAngle; - DWORD dwOutsideConeAngle; - D3DVECTOR vConeOrientation; - LONG lConeOutsideVolume; - D3DVALUE flMinDistance; - D3DVALUE flMaxDistance; - DWORD dwMode; -} DS3DBUFFER, *LPDS3DBUFFER; - -typedef const DS3DBUFFER *LPCDS3DBUFFER; - -typedef struct _DS3DLISTENER -{ - DWORD dwSize; - D3DVECTOR vPosition; - D3DVECTOR vVelocity; - D3DVECTOR vOrientFront; - D3DVECTOR vOrientTop; - D3DVALUE flDistanceFactor; - D3DVALUE flRolloffFactor; - D3DVALUE flDopplerFactor; -} DS3DLISTENER, *LPDS3DLISTENER; - -typedef const DS3DLISTENER *LPCDS3DLISTENER; - -typedef struct _DSCCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwFormats; - DWORD dwChannels; -} DSCCAPS, *LPDSCCAPS; - -typedef const DSCCAPS *LPCDSCCAPS; - -typedef struct _DSCBUFFERDESC1 -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -} DSCBUFFERDESC1, *LPDSCBUFFERDESC1; - -typedef struct _DSCBUFFERDESC -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; - LPWAVEFORMATEX lpwfxFormat; -#if DIRECTSOUND_VERSION >= 0x0800 - DWORD dwFXCount; - LPDSCEFFECTDESC lpDSCFXDesc; -#endif -} DSCBUFFERDESC, *LPDSCBUFFERDESC; - -typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC; - -typedef struct _DSCBCAPS -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwBufferBytes; - DWORD dwReserved; -} DSCBCAPS, *LPDSCBCAPS; - -typedef const DSCBCAPS *LPCDSCBCAPS; - -typedef struct _DSBPOSITIONNOTIFY -{ - DWORD dwOffset; - HANDLE hEventNotify; -} DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY; - -typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY; - -// -// DirectSound API -// - -typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID); -typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID); - -extern HRESULT WINAPI DirectSoundCreate(__in_opt LPCGUID pcGuidDevice, __deref_out LPDIRECTSOUND *ppDS, __null LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundEnumerateA(__in LPDSENUMCALLBACKA pDSEnumCallback, __in_opt LPVOID pContext); -extern HRESULT WINAPI DirectSoundEnumerateW(__in LPDSENUMCALLBACKW pDSEnumCallback, __in_opt LPVOID pContext); - -extern HRESULT WINAPI DirectSoundCaptureCreate(__in_opt LPCGUID pcGuidDevice, __deref_out LPDIRECTSOUNDCAPTURE *ppDSC, __null LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundCaptureEnumerateA(__in LPDSENUMCALLBACKA pDSEnumCallback, __in_opt LPVOID pContext); -extern HRESULT WINAPI DirectSoundCaptureEnumerateW(__in LPDSENUMCALLBACKW pDSEnumCallback, __in_opt LPVOID pContext); - -#if DIRECTSOUND_VERSION >= 0x0800 -extern HRESULT WINAPI DirectSoundCreate8(__in_opt LPCGUID pcGuidDevice, __deref_out LPDIRECTSOUND8 *ppDS8, __null LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundCaptureCreate8(__in_opt LPCGUID pcGuidDevice, __deref_out LPDIRECTSOUNDCAPTURE8 *ppDSC8, __null LPUNKNOWN pUnkOuter); -extern HRESULT WINAPI DirectSoundFullDuplexCreate -( - __in_opt LPCGUID pcGuidCaptureDevice, - __in_opt LPCGUID pcGuidRenderDevice, - __in LPCDSCBUFFERDESC pcDSCBufferDesc, - __in LPCDSBUFFERDESC pcDSBufferDesc, - HWND hWnd, - DWORD dwLevel, - __deref_out LPDIRECTSOUNDFULLDUPLEX* ppDSFD, - __deref_out LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8, - __deref_out LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, - __null LPUNKNOWN pUnkOuter -); -#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate - -extern HRESULT WINAPI GetDeviceID(__in_opt LPCGUID pGuidSrc, __out LPGUID pGuidDest); -#endif // DIRECTSOUND_VERSION >= 0x0800 - -#ifdef UNICODE -#define LPDSENUMCALLBACK LPDSENUMCALLBACKW -#define DirectSoundEnumerate DirectSoundEnumerateW -#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW -#else // UNICODE -#define LPDSENUMCALLBACK LPDSENUMCALLBACKA -#define DirectSoundEnumerate DirectSoundEnumerateA -#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA -#endif // UNICODE - -// -// IUnknown -// - -#if !defined(__cplusplus) || defined(CINTERFACE) -#ifndef IUnknown_QueryInterface -#define IUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) -#endif // IUnknown_QueryInterface -#ifndef IUnknown_AddRef -#define IUnknown_AddRef(p) (p)->lpVtbl->AddRef(p) -#endif // IUnknown_AddRef -#ifndef IUnknown_Release -#define IUnknown_Release(p) (p)->lpVtbl->Release(p) -#endif // IUnknown_Release -#else // !defined(__cplusplus) || defined(CINTERFACE) -#ifndef IUnknown_QueryInterface -#define IUnknown_QueryInterface(p,a,b) (p)->QueryInterface(a,b) -#endif // IUnknown_QueryInterface -#ifndef IUnknown_AddRef -#define IUnknown_AddRef(p) (p)->AddRef() -#endif // IUnknown_AddRef -#ifndef IUnknown_Release -#define IUnknown_Release(p) (p)->Release() -#endif // IUnknown_Release -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#ifndef __IReferenceClock_INTERFACE_DEFINED__ -#define __IReferenceClock_INTERFACE_DEFINED__ - -typedef LONGLONG REFERENCE_TIME; -typedef REFERENCE_TIME *LPREFERENCE_TIME; - -DEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70); - -#undef INTERFACE -#define INTERFACE IReferenceClock - -DECLARE_INTERFACE_(IReferenceClock, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IReferenceClock methods - STDMETHOD(GetTime) (THIS_ __out REFERENCE_TIME *pTime) PURE; - STDMETHOD(AdviseTime) (THIS_ REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime, - HANDLE hEvent, __out LPDWORD pdwAdviseCookie) PURE; - STDMETHOD(AdvisePeriodic) (THIS_ REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime, - HANDLE hSemaphore, __out LPDWORD pdwAdviseCookie) PURE; - STDMETHOD(Unadvise) (THIS_ DWORD dwAdviseCookie) PURE; -}; - -#endif // __IReferenceClock_INTERFACE_DEFINED__ - -#ifndef IReferenceClock_QueryInterface - -#define IReferenceClock_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IReferenceClock_AddRef(p) IUnknown_AddRef(p) -#define IReferenceClock_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a) -#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d) -#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d) -#define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IReferenceClock_GetTime(p,a) (p)->GetTime(a) -#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->AdviseTime(a,b,c,d) -#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->AdvisePeriodic(a,b,c,d) -#define IReferenceClock_Unadvise(p,a) (p)->Unadvise(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // IReferenceClock_QueryInterface - -// -// IDirectSound -// - -DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSound - -DECLARE_INTERFACE_(IDirectSound, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound methods - STDMETHOD(CreateSoundBuffer) (THIS_ __in LPCDSBUFFERDESC pcDSBufferDesc, __deref_out LPDIRECTSOUNDBUFFER *ppDSBuffer, __null LPUNKNOWN pUnkOuter) PURE; - STDMETHOD(GetCaps) (THIS_ __out LPDSCAPS pDSCaps) PURE; - STDMETHOD(DuplicateSoundBuffer) (THIS_ __in LPDIRECTSOUNDBUFFER pDSBufferOriginal, __deref_out LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; - STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; - STDMETHOD(Compact) (THIS) PURE; - STDMETHOD(GetSpeakerConfig) (THIS_ __out LPDWORD pdwSpeakerConfig) PURE; - STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; - STDMETHOD(Initialize) (THIS_ __in_opt LPCGUID pcGuidDevice) PURE; -}; - -#define IDirectSound_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSound_AddRef(p) IUnknown_AddRef(p) -#define IDirectSound_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c) -#define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b) -#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) -#define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p) -#define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a) -#define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b) -#define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c) -#define IDirectSound_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b) -#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) -#define IDirectSound_Compact(p) (p)->Compact() -#define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a) -#define IDirectSound_SetSpeakerConfig(p,b) (p)->SetSpeakerConfig(b) -#define IDirectSound_Initialize(p,a) (p)->Initialize(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSound8 -// - -DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93, 0xF395, 0x4834, 0x9E, 0xF6, 0x7F, 0xA9, 0x9D, 0xE5, 0x09, 0x66); - -#undef INTERFACE -#define INTERFACE IDirectSound8 - -DECLARE_INTERFACE_(IDirectSound8, IDirectSound) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound methods - STDMETHOD(CreateSoundBuffer) (THIS_ __in LPCDSBUFFERDESC pcDSBufferDesc, __out LPDIRECTSOUNDBUFFER *ppDSBuffer, __null LPUNKNOWN pUnkOuter) PURE; - STDMETHOD(GetCaps) (THIS_ __out LPDSCAPS pDSCaps) PURE; - STDMETHOD(DuplicateSoundBuffer) (THIS_ __in LPDIRECTSOUNDBUFFER pDSBufferOriginal, __out LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE; - STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE; - STDMETHOD(Compact) (THIS) PURE; - STDMETHOD(GetSpeakerConfig) (THIS_ __out LPDWORD pdwSpeakerConfig) PURE; - STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE; - STDMETHOD(Initialize) (THIS_ __in_opt LPCGUID pcGuidDevice) PURE; - - // IDirectSound8 methods - STDMETHOD(VerifyCertification) (THIS_ __in __out LPDWORD pdwCertified) PURE; -}; - -#define IDirectSound8_QueryInterface(p,a,b) IDirectSound_QueryInterface(p,a,b) -#define IDirectSound8_AddRef(p) IDirectSound_AddRef(p) -#define IDirectSound8_Release(p) IDirectSound_Release(p) -#define IDirectSound8_CreateSoundBuffer(p,a,b,c) IDirectSound_CreateSoundBuffer(p,a,b,c) -#define IDirectSound8_GetCaps(p,a) IDirectSound_GetCaps(p,a) -#define IDirectSound8_DuplicateSoundBuffer(p,a,b) IDirectSound_DuplicateSoundBuffer(p,a,b) -#define IDirectSound8_SetCooperativeLevel(p,a,b) IDirectSound_SetCooperativeLevel(p,a,b) -#define IDirectSound8_Compact(p) IDirectSound_Compact(p) -#define IDirectSound8_GetSpeakerConfig(p,a) IDirectSound_GetSpeakerConfig(p,a) -#define IDirectSound8_SetSpeakerConfig(p,a) IDirectSound_SetSpeakerConfig(p,a) -#define IDirectSound8_Initialize(p,a) IDirectSound_Initialize(p,a) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundBuffer -// - -DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSoundBuffer - -DECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundBuffer methods - STDMETHOD(GetCaps) (THIS_ __out LPDSBCAPS pDSBufferCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ __out_opt LPDWORD pdwCurrentPlayCursor, __out_opt LPDWORD pdwCurrentWriteCursor) PURE; - STDMETHOD(GetFormat) (THIS_ __out_bcount_opt(dwSizeAllocated) LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, __out_opt LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetVolume) (THIS_ __out LPLONG plVolume) PURE; - STDMETHOD(GetPan) (THIS_ __out LPLONG plPan) PURE; - STDMETHOD(GetFrequency) (THIS_ __out LPDWORD pdwFrequency) PURE; - STDMETHOD(GetStatus) (THIS_ __out LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ __in LPDIRECTSOUND pDirectSound, __in LPCDSBUFFERDESC pcDSBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, - __deref_out_bcount(*pdwAudioBytes1) LPVOID *ppvAudioPtr1, __out LPDWORD pdwAudioBytes1, - __deref_opt_out_bcount(*pdwAudioBytes2) LPVOID *ppvAudioPtr2, __out_opt LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; - STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; - STDMETHOD(SetFormat) (THIS_ __in LPCWAVEFORMATEX pcfxFormat) PURE; - STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; - STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; - STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ __in_bcount(dwAudioBytes1) LPVOID pvAudioPtr1, DWORD dwAudioBytes1, - __in_bcount_opt(dwAudioBytes2) LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; - STDMETHOD(Restore) (THIS) PURE; -}; - -#define IDirectSoundBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundBuffer_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundBuffer_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a) -#define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a) -#define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a) -#define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c) -#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a) -#define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a) -#define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a) -#define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a) -#define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a) -#define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -#define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a) -#define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a) -#define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a) -#define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c) -#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a) -#define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a) -#define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a) -#define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a) -#define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a) -#define IDirectSoundBuffer_Stop(p) (p)->Stop() -#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -#define IDirectSoundBuffer_Restore(p) (p)->Restore() -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundBuffer8 -// - -DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e); - -#undef INTERFACE -#define INTERFACE IDirectSoundBuffer8 - -DECLARE_INTERFACE_(IDirectSoundBuffer8, IDirectSoundBuffer) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundBuffer methods - STDMETHOD(GetCaps) (THIS_ __out LPDSBCAPS pDSBufferCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ __out_opt LPDWORD pdwCurrentPlayCursor, __out_opt LPDWORD pdwCurrentWriteCursor) PURE; - STDMETHOD(GetFormat) (THIS_ __out_bcount_opt(dwSizeAllocated) LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, __out_opt LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetVolume) (THIS_ __out LPLONG plVolume) PURE; - STDMETHOD(GetPan) (THIS_ __out LPLONG plPan) PURE; - STDMETHOD(GetFrequency) (THIS_ __out LPDWORD pdwFrequency) PURE; - STDMETHOD(GetStatus) (THIS_ __out LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ __in LPDIRECTSOUND pDirectSound, __in LPCDSBUFFERDESC pcDSBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, - __deref_out_bcount(*pdwAudioBytes1) LPVOID *ppvAudioPtr1, __out LPDWORD pdwAudioBytes1, - __deref_opt_out_bcount(*pdwAudioBytes2) LPVOID *ppvAudioPtr2, __out_opt LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE; - STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE; - STDMETHOD(SetFormat) (THIS_ __in LPCWAVEFORMATEX pcfxFormat) PURE; - STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE; - STDMETHOD(SetPan) (THIS_ LONG lPan) PURE; - STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ __in_bcount(dwAudioBytes1) LPVOID pvAudioPtr1, DWORD dwAudioBytes1, - __in_bcount_opt(dwAudioBytes2) LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; - STDMETHOD(Restore) (THIS) PURE; - - // IDirectSoundBuffer8 methods - STDMETHOD(SetFX) (THIS_ DWORD dwEffectsCount, __in_ecount_opt(dwEffectsCount) LPDSEFFECTDESC pDSFXDesc, __out_ecount_opt(dwEffectsCount) LPDWORD pdwResultCodes) PURE; - STDMETHOD(AcquireResources) (THIS_ DWORD dwFlags, DWORD dwEffectsCount, __out_ecount(dwEffectsCount) LPDWORD pdwResultCodes) PURE; - STDMETHOD(GetObjectInPath) (THIS_ __in REFGUID rguidObject, DWORD dwIndex, __in REFGUID rguidInterface, __deref_out LPVOID *ppObject) PURE; -}; - -// Special GUID meaning "select all objects" for use in GetObjectInPath() -DEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5); - -#define IDirectSoundBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundBuffer8_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundBuffer8_Release(p) IUnknown_Release(p) - -#define IDirectSoundBuffer8_GetCaps(p,a) IDirectSoundBuffer_GetCaps(p,a) -#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) IDirectSoundBuffer_GetCurrentPosition(p,a,b) -#define IDirectSoundBuffer8_GetFormat(p,a,b,c) IDirectSoundBuffer_GetFormat(p,a,b,c) -#define IDirectSoundBuffer8_GetVolume(p,a) IDirectSoundBuffer_GetVolume(p,a) -#define IDirectSoundBuffer8_GetPan(p,a) IDirectSoundBuffer_GetPan(p,a) -#define IDirectSoundBuffer8_GetFrequency(p,a) IDirectSoundBuffer_GetFrequency(p,a) -#define IDirectSoundBuffer8_GetStatus(p,a) IDirectSoundBuffer_GetStatus(p,a) -#define IDirectSoundBuffer8_Initialize(p,a,b) IDirectSoundBuffer_Initialize(p,a,b) -#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundBuffer8_Play(p,a,b,c) IDirectSoundBuffer_Play(p,a,b,c) -#define IDirectSoundBuffer8_SetCurrentPosition(p,a) IDirectSoundBuffer_SetCurrentPosition(p,a) -#define IDirectSoundBuffer8_SetFormat(p,a) IDirectSoundBuffer_SetFormat(p,a) -#define IDirectSoundBuffer8_SetVolume(p,a) IDirectSoundBuffer_SetVolume(p,a) -#define IDirectSoundBuffer8_SetPan(p,a) IDirectSoundBuffer_SetPan(p,a) -#define IDirectSoundBuffer8_SetFrequency(p,a) IDirectSoundBuffer_SetFrequency(p,a) -#define IDirectSoundBuffer8_Stop(p) IDirectSoundBuffer_Stop(p) -#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) IDirectSoundBuffer_Unlock(p,a,b,c,d) -#define IDirectSoundBuffer8_Restore(p) IDirectSoundBuffer_Restore(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c) -#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c) -#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c) -#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c) -#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSound3DListener -// - -DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSound3DListener - -DECLARE_INTERFACE_(IDirectSound3DListener, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound3DListener methods - STDMETHOD(GetAllParameters) (THIS_ __out LPDS3DLISTENER pListener) PURE; - STDMETHOD(GetDistanceFactor) (THIS_ __out D3DVALUE* pflDistanceFactor) PURE; - STDMETHOD(GetDopplerFactor) (THIS_ __out D3DVALUE* pflDopplerFactor) PURE; - STDMETHOD(GetOrientation) (THIS_ __out D3DVECTOR* pvOrientFront, __out D3DVECTOR* pvOrientTop) PURE; - STDMETHOD(GetPosition) (THIS_ __out D3DVECTOR* pvPosition) PURE; - STDMETHOD(GetRolloffFactor) (THIS_ __out D3DVALUE* pflRolloffFactor) PURE; - STDMETHOD(GetVelocity) (THIS_ __out D3DVECTOR* pvVelocity) PURE; - STDMETHOD(SetAllParameters) (THIS_ __in LPCDS3DLISTENER pcListener, DWORD dwApply) PURE; - STDMETHOD(SetDistanceFactor) (THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE; - STDMETHOD(SetDopplerFactor) (THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE; - STDMETHOD(SetOrientation) (THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, - D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE; - STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetRolloffFactor) (THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE; - STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(CommitDeferredSettings) (THIS) PURE; -}; - -#define IDirectSound3DListener_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSound3DListener_AddRef(p) IUnknown_AddRef(p) -#define IDirectSound3DListener_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a) -#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a) -#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b) -#define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) -#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a) -#define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) -#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) -#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b) -#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b) -#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g) -#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) -#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b) -#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) -#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a) -#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a) -#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b) -#define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a) -#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a) -#define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a) -#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) -#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b) -#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b) -#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g) -#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) -#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b) -#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) -#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings() -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSound3DBuffer -// - -DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60); - -#undef INTERFACE -#define INTERFACE IDirectSound3DBuffer - -DECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSound3DBuffer methods - STDMETHOD(GetAllParameters) (THIS_ __out LPDS3DBUFFER pDs3dBuffer) PURE; - STDMETHOD(GetConeAngles) (THIS_ __out LPDWORD pdwInsideConeAngle, __out LPDWORD pdwOutsideConeAngle) PURE; - STDMETHOD(GetConeOrientation) (THIS_ __out D3DVECTOR* pvOrientation) PURE; - STDMETHOD(GetConeOutsideVolume) (THIS_ __out LPLONG plConeOutsideVolume) PURE; - STDMETHOD(GetMaxDistance) (THIS_ __out D3DVALUE* pflMaxDistance) PURE; - STDMETHOD(GetMinDistance) (THIS_ __out D3DVALUE* pflMinDistance) PURE; - STDMETHOD(GetMode) (THIS_ __out LPDWORD pdwMode) PURE; - STDMETHOD(GetPosition) (THIS_ __out D3DVECTOR* pvPosition) PURE; - STDMETHOD(GetVelocity) (THIS_ __out D3DVECTOR* pvVelocity) PURE; - STDMETHOD(SetAllParameters) (THIS_ __in LPCDS3DBUFFER pcDs3dBuffer, DWORD dwApply) PURE; - STDMETHOD(SetConeAngles) (THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE; - STDMETHOD(SetConeOrientation) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetConeOutsideVolume) (THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE; - STDMETHOD(SetMaxDistance) (THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE; - STDMETHOD(SetMinDistance) (THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE; - STDMETHOD(SetMode) (THIS_ DWORD dwMode, DWORD dwApply) PURE; - STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; - STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE; -}; - -#define IDirectSound3DBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSound3DBuffer_AddRef(p) IUnknown_AddRef(p) -#define IDirectSound3DBuffer_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b) -#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a) -#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a) -#define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a) -#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a) -#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a) -#define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a) -#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a) -#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b) -#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c) -#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d) -#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b) -#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d) -#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b) -#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b) -#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b) -#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b) -#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a) -#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a) -#define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a) -#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a) -#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a) -#define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a) -#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a) -#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b) -#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c) -#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d) -#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b) -#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d) -#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b) -#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b) -#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b) -#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundCapture -// - -DEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -#undef INTERFACE -#define INTERFACE IDirectSoundCapture - -DECLARE_INTERFACE_(IDirectSoundCapture, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCapture methods - STDMETHOD(CreateCaptureBuffer) (THIS_ __in LPCDSCBUFFERDESC pcDSCBufferDesc, __deref_out LPDIRECTSOUNDCAPTUREBUFFER *ppDSCBuffer, __null LPUNKNOWN pUnkOuter) PURE; - STDMETHOD(GetCaps) (THIS_ __out LPDSCCAPS pDSCCaps) PURE; - STDMETHOD(Initialize) (THIS_ __in_opt LPCGUID pcGuidDevice) PURE; -}; - -#define IDirectSoundCapture_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCapture_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCapture_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c) -#define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c) -#define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundCaptureBuffer -// - -DEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureBuffer - -DECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureBuffer methods - STDMETHOD(GetCaps) (THIS_ __out LPDSCBCAPS pDSCBCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ __out_opt LPDWORD pdwCapturePosition, __out_opt LPDWORD pdwReadPosition) PURE; - STDMETHOD(GetFormat) (THIS_ __out_bcount_opt(dwSizeAllocated) LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, __out_opt LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetStatus) (THIS_ __out LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ __in LPDIRECTSOUNDCAPTURE pDirectSoundCapture, __in LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, - __deref_out_bcount(*pdwAudioBytes1) LPVOID *ppvAudioPtr1, __out LPDWORD pdwAudioBytes1, - __deref_opt_out_bcount(*pdwAudioBytes2) LPVOID *ppvAudioPtr2, __out_opt LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ __in_bcount(dwAudioBytes1) LPVOID pvAudioPtr1, DWORD dwAudioBytes1, - __in_bcount_opt(dwAudioBytes2) LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; -}; - -#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureBuffer_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureBuffer_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a) -#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b) -#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c) -#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a) -#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) -#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a) -#define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p) -#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a) -#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b) -#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c) -#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a) -#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b) -#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a) -#define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop() -#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundCaptureBuffer8 -// - -DEFINE_GUID(IID_IDirectSoundCaptureBuffer8, 0x990df4, 0xdbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6); - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureBuffer8 - -DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8, IDirectSoundCaptureBuffer) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureBuffer methods - STDMETHOD(GetCaps) (THIS_ __out LPDSCBCAPS pDSCBCaps) PURE; - STDMETHOD(GetCurrentPosition) (THIS_ __out_opt LPDWORD pdwCapturePosition, __out_opt LPDWORD pdwReadPosition) PURE; - STDMETHOD(GetFormat) (THIS_ __out_bcount_opt(dwSizeAllocated) LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, __out_opt LPDWORD pdwSizeWritten) PURE; - STDMETHOD(GetStatus) (THIS_ __out LPDWORD pdwStatus) PURE; - STDMETHOD(Initialize) (THIS_ __in LPDIRECTSOUNDCAPTURE pDirectSoundCapture, __in LPCDSCBUFFERDESC pcDSCBufferDesc) PURE; - STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, - __deref_out_bcount(*pdwAudioBytes1) LPVOID *ppvAudioPtr1, __out LPDWORD pdwAudioBytes1, - __deref_opt_out_bcount(*pdwAudioBytes2) LPVOID *ppvAudioPtr2, __out_opt LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE; - STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE; - STDMETHOD(Stop) (THIS) PURE; - STDMETHOD(Unlock) (THIS_ __in_bcount(dwAudioBytes1) LPVOID pvAudioPtr1, DWORD dwAudioBytes1, - __in_bcount_opt(dwAudioBytes2) LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE; - - // IDirectSoundCaptureBuffer8 methods - STDMETHOD(GetObjectInPath) (THIS_ __in REFGUID rguidObject, DWORD dwIndex, __in REFGUID rguidInterface, __deref_out LPVOID *ppObject) PURE; - STDMETHOD(GetFXStatus) (DWORD dwEffectsCount, __out_ecount(dwEffectsCount) LPDWORD pdwFXStatus) PURE; -}; - -#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureBuffer8_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureBuffer8_Release(p) IUnknown_Release(p) - -#define IDirectSoundCaptureBuffer8_GetCaps(p,a) IDirectSoundCaptureBuffer_GetCaps(p,a) -#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) -#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) -#define IDirectSoundCaptureBuffer8_GetStatus(p,a) IDirectSoundCaptureBuffer_GetStatus(p,a) -#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) IDirectSoundCaptureBuffer_Initialize(p,a,b) -#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) -#define IDirectSoundCaptureBuffer8_Start(p,a) IDirectSoundCaptureBuffer_Start(p,a) -#define IDirectSoundCaptureBuffer8_Stop(p) IDirectSoundCaptureBuffer_Stop(p)) -#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d) -#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d) -#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundNotify -// - -DEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16); - -#undef INTERFACE -#define INTERFACE IDirectSoundNotify - -DECLARE_INTERFACE_(IDirectSoundNotify, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundNotify methods - STDMETHOD(SetNotificationPositions) (THIS_ DWORD dwPositionNotifies, __in_ecount(dwPositionNotifies) LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE; -}; - -#define IDirectSoundNotify_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundNotify_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundNotify_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IKsPropertySet -// - -#ifndef _IKsPropertySet_ -#define _IKsPropertySet_ - -#ifdef __cplusplus -// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined -struct IKsPropertySet; -#endif // __cplusplus - -typedef struct IKsPropertySet *LPKSPROPERTYSET; - -#define KSPROPERTY_SUPPORT_GET 0x00000001 -#define KSPROPERTY_SUPPORT_SET 0x00000002 - -DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93); - -#undef INTERFACE -#define INTERFACE IKsPropertySet - -DECLARE_INTERFACE_(IKsPropertySet, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IKsPropertySet methods - STDMETHOD(Get) (THIS_ __in REFGUID rguidPropSet, ULONG ulId, __in_bcount(ulInstanceLength) LPVOID pInstanceData, ULONG ulInstanceLength, - __out_bcount(ulDataLength) LPVOID pPropertyData, ULONG ulDataLength, __out PULONG pulBytesReturned) PURE; - STDMETHOD(Set) (THIS_ __in REFGUID rguidPropSet, ULONG ulId, __in_bcount(ulInstanceLength) LPVOID pInstanceData, ULONG ulInstanceLength, - __in_bcount(ulDataLength) LPVOID pPropertyData, ULONG ulDataLength) PURE; - STDMETHOD(QuerySupport) (THIS_ __in REFGUID rguidPropSet, ULONG ulId, __out PULONG pulTypeSupport) PURE; -}; - -#define IKsPropertySet_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IKsPropertySet_AddRef(p) IUnknown_AddRef(p) -#define IKsPropertySet_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g) -#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f) -#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g) -#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f) -#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // _IKsPropertySet_ - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// IDirectSoundFXGargle -// - -DEFINE_GUID(IID_IDirectSoundFXGargle, 0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3); - -typedef struct _DSFXGargle -{ - DWORD dwRateHz; // Rate of modulation in hz - DWORD dwWaveShape; // DSFXGARGLE_WAVE_xxx -} DSFXGargle, *LPDSFXGargle; - -#define DSFXGARGLE_WAVE_TRIANGLE 0 -#define DSFXGARGLE_WAVE_SQUARE 1 - -typedef const DSFXGargle *LPCDSFXGargle; - -#define DSFXGARGLE_RATEHZ_MIN 1 -#define DSFXGARGLE_RATEHZ_MAX 1000 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXGargle - -DECLARE_INTERFACE_(IDirectSoundFXGargle, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXGargle methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXGargle pcDsFxGargle) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXGargle pDsFxGargle) PURE; -}; - -#define IDirectSoundFXGargle_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXGargle_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXGargle_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXChorus -// - -DEFINE_GUID(IID_IDirectSoundFXChorus, 0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47); - -typedef struct _DSFXChorus -{ - FLOAT fWetDryMix; - FLOAT fDepth; - FLOAT fFeedback; - FLOAT fFrequency; - LONG lWaveform; // LFO shape; DSFXCHORUS_WAVE_xxx - FLOAT fDelay; - LONG lPhase; -} DSFXChorus, *LPDSFXChorus; - -typedef const DSFXChorus *LPCDSFXChorus; - -#define DSFXCHORUS_WAVE_TRIANGLE 0 -#define DSFXCHORUS_WAVE_SIN 1 - -#define DSFXCHORUS_WETDRYMIX_MIN 0.0f -#define DSFXCHORUS_WETDRYMIX_MAX 100.0f -#define DSFXCHORUS_DEPTH_MIN 0.0f -#define DSFXCHORUS_DEPTH_MAX 100.0f -#define DSFXCHORUS_FEEDBACK_MIN -99.0f -#define DSFXCHORUS_FEEDBACK_MAX 99.0f -#define DSFXCHORUS_FREQUENCY_MIN 0.0f -#define DSFXCHORUS_FREQUENCY_MAX 10.0f -#define DSFXCHORUS_DELAY_MIN 0.0f -#define DSFXCHORUS_DELAY_MAX 20.0f -#define DSFXCHORUS_PHASE_MIN 0 -#define DSFXCHORUS_PHASE_MAX 4 - -#define DSFXCHORUS_PHASE_NEG_180 0 -#define DSFXCHORUS_PHASE_NEG_90 1 -#define DSFXCHORUS_PHASE_ZERO 2 -#define DSFXCHORUS_PHASE_90 3 -#define DSFXCHORUS_PHASE_180 4 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXChorus - -DECLARE_INTERFACE_(IDirectSoundFXChorus, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXChorus methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXChorus pcDsFxChorus) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXChorus pDsFxChorus) PURE; -}; - -#define IDirectSoundFXChorus_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXChorus_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXChorus_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXFlanger -// - -DEFINE_GUID(IID_IDirectSoundFXFlanger, 0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83); - -typedef struct _DSFXFlanger -{ - FLOAT fWetDryMix; - FLOAT fDepth; - FLOAT fFeedback; - FLOAT fFrequency; - LONG lWaveform; - FLOAT fDelay; - LONG lPhase; -} DSFXFlanger, *LPDSFXFlanger; - -typedef const DSFXFlanger *LPCDSFXFlanger; - -#define DSFXFLANGER_WAVE_TRIANGLE 0 -#define DSFXFLANGER_WAVE_SIN 1 - -#define DSFXFLANGER_WETDRYMIX_MIN 0.0f -#define DSFXFLANGER_WETDRYMIX_MAX 100.0f -#define DSFXFLANGER_FREQUENCY_MIN 0.0f -#define DSFXFLANGER_FREQUENCY_MAX 10.0f -#define DSFXFLANGER_DEPTH_MIN 0.0f -#define DSFXFLANGER_DEPTH_MAX 100.0f -#define DSFXFLANGER_PHASE_MIN 0 -#define DSFXFLANGER_PHASE_MAX 4 -#define DSFXFLANGER_FEEDBACK_MIN -99.0f -#define DSFXFLANGER_FEEDBACK_MAX 99.0f -#define DSFXFLANGER_DELAY_MIN 0.0f -#define DSFXFLANGER_DELAY_MAX 4.0f - -#define DSFXFLANGER_PHASE_NEG_180 0 -#define DSFXFLANGER_PHASE_NEG_90 1 -#define DSFXFLANGER_PHASE_ZERO 2 -#define DSFXFLANGER_PHASE_90 3 -#define DSFXFLANGER_PHASE_180 4 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXFlanger - -DECLARE_INTERFACE_(IDirectSoundFXFlanger, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXFlanger methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXFlanger pcDsFxFlanger) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXFlanger pDsFxFlanger) PURE; -}; - -#define IDirectSoundFXFlanger_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXFlanger_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXFlanger_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXEcho -// - -DEFINE_GUID(IID_IDirectSoundFXEcho, 0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42); - -typedef struct _DSFXEcho -{ - FLOAT fWetDryMix; - FLOAT fFeedback; - FLOAT fLeftDelay; - FLOAT fRightDelay; - LONG lPanDelay; -} DSFXEcho, *LPDSFXEcho; - -typedef const DSFXEcho *LPCDSFXEcho; - -#define DSFXECHO_WETDRYMIX_MIN 0.0f -#define DSFXECHO_WETDRYMIX_MAX 100.0f -#define DSFXECHO_FEEDBACK_MIN 0.0f -#define DSFXECHO_FEEDBACK_MAX 100.0f -#define DSFXECHO_LEFTDELAY_MIN 1.0f -#define DSFXECHO_LEFTDELAY_MAX 2000.0f -#define DSFXECHO_RIGHTDELAY_MIN 1.0f -#define DSFXECHO_RIGHTDELAY_MAX 2000.0f -#define DSFXECHO_PANDELAY_MIN 0 -#define DSFXECHO_PANDELAY_MAX 1 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXEcho - -DECLARE_INTERFACE_(IDirectSoundFXEcho, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXEcho methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXEcho pcDsFxEcho) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXEcho pDsFxEcho) PURE; -}; - -#define IDirectSoundFXEcho_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXEcho_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXEcho_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXDistortion -// - -DEFINE_GUID(IID_IDirectSoundFXDistortion, 0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b); - -typedef struct _DSFXDistortion -{ - FLOAT fGain; - FLOAT fEdge; - FLOAT fPostEQCenterFrequency; - FLOAT fPostEQBandwidth; - FLOAT fPreLowpassCutoff; -} DSFXDistortion, *LPDSFXDistortion; - -typedef const DSFXDistortion *LPCDSFXDistortion; - -#define DSFXDISTORTION_GAIN_MIN -60.0f -#define DSFXDISTORTION_GAIN_MAX 0.0f -#define DSFXDISTORTION_EDGE_MIN 0.0f -#define DSFXDISTORTION_EDGE_MAX 100.0f -#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN 100.0f -#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX 8000.0f -#define DSFXDISTORTION_POSTEQBANDWIDTH_MIN 100.0f -#define DSFXDISTORTION_POSTEQBANDWIDTH_MAX 8000.0f -#define DSFXDISTORTION_PRELOWPASSCUTOFF_MIN 100.0f -#define DSFXDISTORTION_PRELOWPASSCUTOFF_MAX 8000.0f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXDistortion - -DECLARE_INTERFACE_(IDirectSoundFXDistortion, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXDistortion methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXDistortion pcDsFxDistortion) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXDistortion pDsFxDistortion) PURE; -}; - -#define IDirectSoundFXDistortion_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXDistortion_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXDistortion_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXCompressor -// - -DEFINE_GUID(IID_IDirectSoundFXCompressor, 0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0); - -typedef struct _DSFXCompressor -{ - FLOAT fGain; - FLOAT fAttack; - FLOAT fRelease; - FLOAT fThreshold; - FLOAT fRatio; - FLOAT fPredelay; -} DSFXCompressor, *LPDSFXCompressor; - -typedef const DSFXCompressor *LPCDSFXCompressor; - -#define DSFXCOMPRESSOR_GAIN_MIN -60.0f -#define DSFXCOMPRESSOR_GAIN_MAX 60.0f -#define DSFXCOMPRESSOR_ATTACK_MIN 0.01f -#define DSFXCOMPRESSOR_ATTACK_MAX 500.0f -#define DSFXCOMPRESSOR_RELEASE_MIN 50.0f -#define DSFXCOMPRESSOR_RELEASE_MAX 3000.0f -#define DSFXCOMPRESSOR_THRESHOLD_MIN -60.0f -#define DSFXCOMPRESSOR_THRESHOLD_MAX 0.0f -#define DSFXCOMPRESSOR_RATIO_MIN 1.0f -#define DSFXCOMPRESSOR_RATIO_MAX 100.0f -#define DSFXCOMPRESSOR_PREDELAY_MIN 0.0f -#define DSFXCOMPRESSOR_PREDELAY_MAX 4.0f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXCompressor - -DECLARE_INTERFACE_(IDirectSoundFXCompressor, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXCompressor methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXCompressor pcDsFxCompressor) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXCompressor pDsFxCompressor) PURE; -}; - -#define IDirectSoundFXCompressor_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXCompressor_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXCompressor_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXParamEq -// - -DEFINE_GUID(IID_IDirectSoundFXParamEq, 0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda); - -typedef struct _DSFXParamEq -{ - FLOAT fCenter; - FLOAT fBandwidth; - FLOAT fGain; -} DSFXParamEq, *LPDSFXParamEq; - -typedef const DSFXParamEq *LPCDSFXParamEq; - -#define DSFXPARAMEQ_CENTER_MIN 80.0f -#define DSFXPARAMEQ_CENTER_MAX 16000.0f -#define DSFXPARAMEQ_BANDWIDTH_MIN 1.0f -#define DSFXPARAMEQ_BANDWIDTH_MAX 36.0f -#define DSFXPARAMEQ_GAIN_MIN -15.0f -#define DSFXPARAMEQ_GAIN_MAX 15.0f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXParamEq - -DECLARE_INTERFACE_(IDirectSoundFXParamEq, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXParamEq methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXParamEq pcDsFxParamEq) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXParamEq pDsFxParamEq) PURE; -}; - -#define IDirectSoundFXParamEq_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXParamEq_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXParamEq_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXI3DL2Reverb -// - -DEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4); - -typedef struct _DSFXI3DL2Reverb -{ - LONG lRoom; // [-10000, 0] default: -1000 mB - LONG lRoomHF; // [-10000, 0] default: 0 mB - FLOAT flRoomRolloffFactor; // [0.0, 10.0] default: 0.0 - FLOAT flDecayTime; // [0.1, 20.0] default: 1.49s - FLOAT flDecayHFRatio; // [0.1, 2.0] default: 0.83 - LONG lReflections; // [-10000, 1000] default: -2602 mB - FLOAT flReflectionsDelay; // [0.0, 0.3] default: 0.007 s - LONG lReverb; // [-10000, 2000] default: 200 mB - FLOAT flReverbDelay; // [0.0, 0.1] default: 0.011 s - FLOAT flDiffusion; // [0.0, 100.0] default: 100.0 % - FLOAT flDensity; // [0.0, 100.0] default: 100.0 % - FLOAT flHFReference; // [20.0, 20000.0] default: 5000.0 Hz -} DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb; - -typedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb; - -#define DSFX_I3DL2REVERB_ROOM_MIN (-10000) -#define DSFX_I3DL2REVERB_ROOM_MAX 0 -#define DSFX_I3DL2REVERB_ROOM_DEFAULT (-1000) - -#define DSFX_I3DL2REVERB_ROOMHF_MIN (-10000) -#define DSFX_I3DL2REVERB_ROOMHF_MAX 0 -#define DSFX_I3DL2REVERB_ROOMHF_DEFAULT (-100) - -#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN 0.0f -#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX 10.0f -#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT 0.0f - -#define DSFX_I3DL2REVERB_DECAYTIME_MIN 0.1f -#define DSFX_I3DL2REVERB_DECAYTIME_MAX 20.0f -#define DSFX_I3DL2REVERB_DECAYTIME_DEFAULT 1.49f - -#define DSFX_I3DL2REVERB_DECAYHFRATIO_MIN 0.1f -#define DSFX_I3DL2REVERB_DECAYHFRATIO_MAX 2.0f -#define DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT 0.83f - -#define DSFX_I3DL2REVERB_REFLECTIONS_MIN (-10000) -#define DSFX_I3DL2REVERB_REFLECTIONS_MAX 1000 -#define DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT (-2602) - -#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN 0.0f -#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX 0.3f -#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT 0.007f - -#define DSFX_I3DL2REVERB_REVERB_MIN (-10000) -#define DSFX_I3DL2REVERB_REVERB_MAX 2000 -#define DSFX_I3DL2REVERB_REVERB_DEFAULT (200) - -#define DSFX_I3DL2REVERB_REVERBDELAY_MIN 0.0f -#define DSFX_I3DL2REVERB_REVERBDELAY_MAX 0.1f -#define DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT 0.011f - -#define DSFX_I3DL2REVERB_DIFFUSION_MIN 0.0f -#define DSFX_I3DL2REVERB_DIFFUSION_MAX 100.0f -#define DSFX_I3DL2REVERB_DIFFUSION_DEFAULT 100.0f - -#define DSFX_I3DL2REVERB_DENSITY_MIN 0.0f -#define DSFX_I3DL2REVERB_DENSITY_MAX 100.0f -#define DSFX_I3DL2REVERB_DENSITY_DEFAULT 100.0f - -#define DSFX_I3DL2REVERB_HFREFERENCE_MIN 20.0f -#define DSFX_I3DL2REVERB_HFREFERENCE_MAX 20000.0f -#define DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT 5000.0f - -#define DSFX_I3DL2REVERB_QUALITY_MIN 0 -#define DSFX_I3DL2REVERB_QUALITY_MAX 3 -#define DSFX_I3DL2REVERB_QUALITY_DEFAULT 2 - -#undef INTERFACE -#define INTERFACE IDirectSoundFXI3DL2Reverb - -DECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXI3DL2Reverb methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXI3DL2Reverb pcDsFxI3DL2Reverb) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXI3DL2Reverb pDsFxI3DL2Reverb) PURE; - STDMETHOD(SetPreset) (THIS_ DWORD dwPreset) PURE; - STDMETHOD(GetPreset) (THIS_ __out LPDWORD pdwPreset) PURE; - STDMETHOD(SetQuality) (THIS_ LONG lQuality) PURE; - STDMETHOD(GetQuality) (THIS_ __out LONG *plQuality) PURE; -}; - -#define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXI3DL2Reverb_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXI3DL2Reverb_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->lpVtbl->SetPreset(p,a) -#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->lpVtbl->GetPreset(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->GetAllParameters(a) -#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->SetPreset(a) -#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->GetPreset(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundFXWavesReverb -// - -DEFINE_GUID(IID_IDirectSoundFXWavesReverb,0x46858c3a,0x0dc6,0x45e3,0xb7,0x60,0xd4,0xee,0xf1,0x6c,0xb3,0x25); - -typedef struct _DSFXWavesReverb -{ - FLOAT fInGain; // [-96.0,0.0] default: 0.0 dB - FLOAT fReverbMix; // [-96.0,0.0] default: 0.0 db - FLOAT fReverbTime; // [0.001,3000.0] default: 1000.0 ms - FLOAT fHighFreqRTRatio; // [0.001,0.999] default: 0.001 -} DSFXWavesReverb, *LPDSFXWavesReverb; - -typedef const DSFXWavesReverb *LPCDSFXWavesReverb; - -#define DSFX_WAVESREVERB_INGAIN_MIN -96.0f -#define DSFX_WAVESREVERB_INGAIN_MAX 0.0f -#define DSFX_WAVESREVERB_INGAIN_DEFAULT 0.0f -#define DSFX_WAVESREVERB_REVERBMIX_MIN -96.0f -#define DSFX_WAVESREVERB_REVERBMIX_MAX 0.0f -#define DSFX_WAVESREVERB_REVERBMIX_DEFAULT 0.0f -#define DSFX_WAVESREVERB_REVERBTIME_MIN 0.001f -#define DSFX_WAVESREVERB_REVERBTIME_MAX 3000.0f -#define DSFX_WAVESREVERB_REVERBTIME_DEFAULT 1000.0f -#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN 0.001f -#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX 0.999f -#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT 0.001f - -#undef INTERFACE -#define INTERFACE IDirectSoundFXWavesReverb - -DECLARE_INTERFACE_(IDirectSoundFXWavesReverb, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFXWavesReverb methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSFXWavesReverb pcDsFxWavesReverb) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSFXWavesReverb pDsFxWavesReverb) PURE; -}; - -#define IDirectSoundFXWavesReverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFXWavesReverb_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFXWavesReverb_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -// -// IDirectSoundCaptureFXAec -// - -DEFINE_GUID(IID_IDirectSoundCaptureFXAec, 0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65); - -typedef struct _DSCFXAec -{ - BOOL fEnable; - BOOL fNoiseFill; - DWORD dwMode; -} DSCFXAec, *LPDSCFXAec; - -typedef const DSCFXAec *LPCDSCFXAec; - -// These match the AEC_MODE_* constants in the DDK's ksmedia.h file -#define DSCFX_AEC_MODE_PASS_THROUGH 0x0 -#define DSCFX_AEC_MODE_HALF_DUPLEX 0x1 -#define DSCFX_AEC_MODE_FULL_DUPLEX 0x2 - -// These match the AEC_STATUS_* constants in ksmedia.h -#define DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED 0x0 -#define DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED 0x1 -#define DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED 0x2 -#define DSCFX_AEC_STATUS_CURRENTLY_CONVERGED 0x8 - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureFXAec - -DECLARE_INTERFACE_(IDirectSoundCaptureFXAec, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureFXAec methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSCFXAec pDscFxAec) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSCFXAec pDscFxAec) PURE; - STDMETHOD(GetStatus) (THIS_ __out LPDWORD pdwStatus) PURE; - STDMETHOD(Reset) (THIS) PURE; -}; - -#define IDirectSoundCaptureFXAec_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureFXAec_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureFXAec_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - - -// -// IDirectSoundCaptureFXNoiseSuppress -// - -DEFINE_GUID(IID_IDirectSoundCaptureFXNoiseSuppress, 0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x8, 0x54, 0xf6, 0x93, 0xca); - -typedef struct _DSCFXNoiseSuppress -{ - BOOL fEnable; -} DSCFXNoiseSuppress, *LPDSCFXNoiseSuppress; - -typedef const DSCFXNoiseSuppress *LPCDSCFXNoiseSuppress; - -#undef INTERFACE -#define INTERFACE IDirectSoundCaptureFXNoiseSuppress - -DECLARE_INTERFACE_(IDirectSoundCaptureFXNoiseSuppress, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundCaptureFXNoiseSuppress methods - STDMETHOD(SetAllParameters) (THIS_ __in LPCDSCFXNoiseSuppress pcDscFxNoiseSuppress) PURE; - STDMETHOD(GetAllParameters) (THIS_ __out LPDSCFXNoiseSuppress pDscFxNoiseSuppress) PURE; - STDMETHOD(Reset) (THIS) PURE; -}; - -#define IDirectSoundCaptureFXNoiseSuppress_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundCaptureFXNoiseSuppress_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundCaptureFXNoiseSuppress_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a) -#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->SetAllParameters(a) -#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->GetAllParameters(a) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - - -// -// IDirectSoundFullDuplex -// - -#ifndef _IDirectSoundFullDuplex_ -#define _IDirectSoundFullDuplex_ - -#ifdef __cplusplus -// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined -struct IDirectSoundFullDuplex; -#endif // __cplusplus - -typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX; - -DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d); - -#undef INTERFACE -#define INTERFACE IDirectSoundFullDuplex - -DECLARE_INTERFACE_(IDirectSoundFullDuplex, IUnknown) -{ - // IUnknown methods - STDMETHOD(QueryInterface) (THIS_ __in REFIID, __deref_out LPVOID*) PURE; - STDMETHOD_(ULONG,AddRef) (THIS) PURE; - STDMETHOD_(ULONG,Release) (THIS) PURE; - - // IDirectSoundFullDuplex methods - STDMETHOD(Initialize) (THIS_ __in LPCGUID pCaptureGuid, __in LPCGUID pRenderGuid, __in LPCDSCBUFFERDESC lpDscBufferDesc, __in LPCDSBUFFERDESC lpDsBufferDesc, HWND hWnd, DWORD dwLevel, - __deref_out LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8, __deref_out LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE; -}; - -#define IDirectSoundFullDuplex_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b) -#define IDirectSoundFullDuplex_AddRef(p) IUnknown_AddRef(p) -#define IDirectSoundFullDuplex_Release(p) IUnknown_Release(p) - -#if !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h) -#else // !defined(__cplusplus) || defined(CINTERFACE) -#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h) -#endif // !defined(__cplusplus) || defined(CINTERFACE) - -#endif // _IDirectSoundFullDuplex_ - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -// -// Return Codes -// - -// The function completed successfully -#define DS_OK S_OK - -// The call succeeded, but we had to substitute the 3D algorithm -#define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10) - -// The call failed because resources (such as a priority level) -// were already being used by another caller -#define DSERR_ALLOCATED MAKE_DSHRESULT(10) - -// The control (vol, pan, etc.) requested by the caller is not available -#define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30) - -// An invalid parameter was passed to the returning function -#define DSERR_INVALIDPARAM E_INVALIDARG - -// This call is not valid for the current state of this object -#define DSERR_INVALIDCALL MAKE_DSHRESULT(50) - -// An undetermined error occurred inside the DirectSound subsystem -#define DSERR_GENERIC E_FAIL - -// The caller does not have the priority level required for the function to -// succeed -#define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70) - -// Not enough free memory is available to complete the operation -#define DSERR_OUTOFMEMORY E_OUTOFMEMORY - -// The specified WAVE format is not supported -#define DSERR_BADFORMAT MAKE_DSHRESULT(100) - -// The function called is not supported at this time -#define DSERR_UNSUPPORTED E_NOTIMPL - -// No sound driver is available for use -#define DSERR_NODRIVER MAKE_DSHRESULT(120) - -// This object is already initialized -#define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130) - -// This object does not support aggregation -#define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION - -// The buffer memory has been lost, and must be restored -#define DSERR_BUFFERLOST MAKE_DSHRESULT(150) - -// Another app has a higher priority level, preventing this call from -// succeeding -#define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160) - -// This object has not been initialized -#define DSERR_UNINITIALIZED MAKE_DSHRESULT(170) - -// The requested COM interface is not available -#define DSERR_NOINTERFACE E_NOINTERFACE - -// Access is denied -#define DSERR_ACCESSDENIED E_ACCESSDENIED - -// Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds -#define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180) - -// Attempt to use DirectSound 8 functionality on an older DirectSound object -#define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190) - -// A circular loop of send effects was detected -#define DSERR_SENDLOOP MAKE_DSHRESULT(200) - -// The GUID specified in an audiopath file does not match a valid MIXIN buffer -#define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210) - -// The object requested was not found (numerically equal to DMUS_E_NOT_FOUND) -#define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449) - -// The effects requested could not be found on the system, or they were found -// but in the wrong order, or in the wrong hardware/software locations. -#define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220) - -// -// Flags -// - -#define DSCAPS_PRIMARYMONO 0x00000001 -#define DSCAPS_PRIMARYSTEREO 0x00000002 -#define DSCAPS_PRIMARY8BIT 0x00000004 -#define DSCAPS_PRIMARY16BIT 0x00000008 -#define DSCAPS_CONTINUOUSRATE 0x00000010 -#define DSCAPS_EMULDRIVER 0x00000020 -#define DSCAPS_CERTIFIED 0x00000040 -#define DSCAPS_SECONDARYMONO 0x00000100 -#define DSCAPS_SECONDARYSTEREO 0x00000200 -#define DSCAPS_SECONDARY8BIT 0x00000400 -#define DSCAPS_SECONDARY16BIT 0x00000800 - -#define DSSCL_NORMAL 0x00000001 -#define DSSCL_PRIORITY 0x00000002 -#define DSSCL_EXCLUSIVE 0x00000003 -#define DSSCL_WRITEPRIMARY 0x00000004 - -#define DSSPEAKER_DIRECTOUT 0x00000000 -#define DSSPEAKER_HEADPHONE 0x00000001 -#define DSSPEAKER_MONO 0x00000002 -#define DSSPEAKER_QUAD 0x00000003 -#define DSSPEAKER_STEREO 0x00000004 -#define DSSPEAKER_SURROUND 0x00000005 -#define DSSPEAKER_5POINT1 0x00000006 // obsolete 5.1 setting -#define DSSPEAKER_7POINT1 0x00000007 // obsolete 7.1 setting -#define DSSPEAKER_7POINT1_SURROUND 0x00000008 // correct 7.1 Home Theater setting -#define DSSPEAKER_5POINT1_SURROUND 0x00000009 // correct 5.1 setting -#define DSSPEAKER_7POINT1_WIDE DSSPEAKER_7POINT1 -#define DSSPEAKER_5POINT1_BACK DSSPEAKER_5POINT1 - -#define DSSPEAKER_GEOMETRY_MIN 0x00000005 // 5 degrees -#define DSSPEAKER_GEOMETRY_NARROW 0x0000000A // 10 degrees -#define DSSPEAKER_GEOMETRY_WIDE 0x00000014 // 20 degrees -#define DSSPEAKER_GEOMETRY_MAX 0x000000B4 // 180 degrees - -#define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16)) -#define DSSPEAKER_CONFIG(a) ((BYTE)(a)) -#define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF)) - -#define DSBCAPS_PRIMARYBUFFER 0x00000001 -#define DSBCAPS_STATIC 0x00000002 -#define DSBCAPS_LOCHARDWARE 0x00000004 -#define DSBCAPS_LOCSOFTWARE 0x00000008 -#define DSBCAPS_CTRL3D 0x00000010 -#define DSBCAPS_CTRLFREQUENCY 0x00000020 -#define DSBCAPS_CTRLPAN 0x00000040 -#define DSBCAPS_CTRLVOLUME 0x00000080 -#define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100 -#define DSBCAPS_CTRLFX 0x00000200 -#define DSBCAPS_STICKYFOCUS 0x00004000 -#define DSBCAPS_GLOBALFOCUS 0x00008000 -#define DSBCAPS_GETCURRENTPOSITION2 0x00010000 -#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000 -#define DSBCAPS_LOCDEFER 0x00040000 -#define DSBCAPS_TRUEPLAYPOSITION 0x00080000 - -#define DSBPLAY_LOOPING 0x00000001 -#define DSBPLAY_LOCHARDWARE 0x00000002 -#define DSBPLAY_LOCSOFTWARE 0x00000004 -#define DSBPLAY_TERMINATEBY_TIME 0x00000008 -#define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010 -#define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020 - -#define DSBSTATUS_PLAYING 0x00000001 -#define DSBSTATUS_BUFFERLOST 0x00000002 -#define DSBSTATUS_LOOPING 0x00000004 -#define DSBSTATUS_LOCHARDWARE 0x00000008 -#define DSBSTATUS_LOCSOFTWARE 0x00000010 -#define DSBSTATUS_TERMINATED 0x00000020 - -#define DSBLOCK_FROMWRITECURSOR 0x00000001 -#define DSBLOCK_ENTIREBUFFER 0x00000002 - -#define DSBFREQUENCY_ORIGINAL 0 -#define DSBFREQUENCY_MIN 100 -#if DIRECTSOUND_VERSION >= 0x0900 -#define DSBFREQUENCY_MAX 200000 -#else -#define DSBFREQUENCY_MAX 100000 -#endif - -#define DSBPAN_LEFT -10000 -#define DSBPAN_CENTER 0 -#define DSBPAN_RIGHT 10000 - -#define DSBVOLUME_MIN -10000 -#define DSBVOLUME_MAX 0 - -#define DSBSIZE_MIN 4 -#define DSBSIZE_MAX 0x0FFFFFFF -#define DSBSIZE_FX_MIN 150 // NOTE: Milliseconds, not bytes - -#define DSBNOTIFICATIONS_MAX 100000UL - -#define DS3DMODE_NORMAL 0x00000000 -#define DS3DMODE_HEADRELATIVE 0x00000001 -#define DS3DMODE_DISABLE 0x00000002 - -#define DS3D_IMMEDIATE 0x00000000 -#define DS3D_DEFERRED 0x00000001 - -#define DS3D_MINDISTANCEFACTOR FLT_MIN -#define DS3D_MAXDISTANCEFACTOR FLT_MAX -#define DS3D_DEFAULTDISTANCEFACTOR 1.0f - -#define DS3D_MINROLLOFFFACTOR 0.0f -#define DS3D_MAXROLLOFFFACTOR 10.0f -#define DS3D_DEFAULTROLLOFFFACTOR 1.0f - -#define DS3D_MINDOPPLERFACTOR 0.0f -#define DS3D_MAXDOPPLERFACTOR 10.0f -#define DS3D_DEFAULTDOPPLERFACTOR 1.0f - -#define DS3D_DEFAULTMINDISTANCE 1.0f -#define DS3D_DEFAULTMAXDISTANCE 1000000000.0f - -#define DS3D_MINCONEANGLE 0 -#define DS3D_MAXCONEANGLE 360 -#define DS3D_DEFAULTCONEANGLE 360 - -#define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX - -// IDirectSoundCapture attributes - -#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER -#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED -#define DSCCAPS_MULTIPLECAPTURE 0x00000001 - -// IDirectSoundCaptureBuffer attributes - -#define DSCBCAPS_WAVEMAPPED 0x80000000 -#if DIRECTSOUND_VERSION >= 0x0800 -#define DSCBCAPS_CTRLFX 0x00000200 -#endif - -#define DSCBLOCK_ENTIREBUFFER 0x00000001 - -#define DSCBSTATUS_CAPTURING 0x00000001 -#define DSCBSTATUS_LOOPING 0x00000002 - -#define DSCBSTART_LOOPING 0x00000001 - -#define DSBPN_OFFSETSTOP 0xFFFFFFFF - -#define DS_CERTIFIED 0x00000000 -#define DS_UNCERTIFIED 0x00000001 - -// -// Flags for the I3DL2 effects -// - -// -// I3DL2 Material Presets -// - -enum -{ - DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW, - DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW, - DSFX_I3DL2_MATERIAL_PRESET_THINDOOR, - DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR, - DSFX_I3DL2_MATERIAL_PRESET_WOODWALL, - DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL, - DSFX_I3DL2_MATERIAL_PRESET_STONEWALL, - DSFX_I3DL2_MATERIAL_PRESET_CURTAIN -}; - -#define I3DL2_MATERIAL_PRESET_SINGLEWINDOW -2800,0.71f -#define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW -5000,0.40f -#define I3DL2_MATERIAL_PRESET_THINDOOR -1800,0.66f -#define I3DL2_MATERIAL_PRESET_THICKDOOR -4400,0.64f -#define I3DL2_MATERIAL_PRESET_WOODWALL -4000,0.50f -#define I3DL2_MATERIAL_PRESET_BRICKWALL -5000,0.60f -#define I3DL2_MATERIAL_PRESET_STONEWALL -6000,0.68f -#define I3DL2_MATERIAL_PRESET_CURTAIN -1200,0.15f - -enum -{ - DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT, - DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC, - DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL, - DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM, - DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL, - DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE, - DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA, - DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR, - DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY, - DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY, - DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR, - DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY, - DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST, - DSFX_I3DL2_ENVIRONMENT_PRESET_CITY, - DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS, - DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY, - DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN, - DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT, - DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE, - DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER, - DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM, - DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL, - DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL, - DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE -}; - -// -// I3DL2 Reverberation Presets Values -// - -#define I3DL2_ENVIRONMENT_PRESET_DEFAULT -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_GENERIC -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PADDEDCELL -1000,-6000, 0.0f, 0.17f, 0.10f, -1204, 0.001f, 207, 0.002f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ROOM -1000, -454, 0.0f, 0.40f, 0.83f, -1646, 0.002f, 53, 0.003f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_BATHROOM -1000,-1200, 0.0f, 1.49f, 0.54f, -370, 0.007f, 1030, 0.011f, 100.0f, 60.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LIVINGROOM -1000,-6000, 0.0f, 0.50f, 0.10f, -1376, 0.003f, -1104, 0.004f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_STONEROOM -1000, -300, 0.0f, 2.31f, 0.64f, -711, 0.012f, 83, 0.017f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_AUDITORIUM -1000, -476, 0.0f, 4.32f, 0.59f, -789, 0.020f, -289, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CONCERTHALL -1000, -500, 0.0f, 3.92f, 0.70f, -1230, 0.020f, -2, 0.029f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CAVE -1000, 0, 0.0f, 2.91f, 1.30f, -602, 0.015f, -302, 0.022f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ARENA -1000, -698, 0.0f, 7.24f, 0.33f, -1166, 0.020f, 16, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_HANGAR -1000,-1000, 0.0f,10.05f, 0.23f, -602, 0.020f, 198, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY -1000,-4000, 0.0f, 0.30f, 0.10f, -1831, 0.002f, -1630, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_HALLWAY -1000, -300, 0.0f, 1.49f, 0.59f, -1219, 0.007f, 441, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR -1000, -237, 0.0f, 2.70f, 0.79f, -1214, 0.013f, 395, 0.020f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_ALLEY -1000, -270, 0.0f, 1.49f, 0.86f, -1204, 0.007f, -4, 0.011f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_FOREST -1000,-3300, 0.0f, 1.49f, 0.54f, -2560, 0.162f, -613, 0.088f, 79.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_CITY -1000, -800, 0.0f, 1.49f, 0.67f, -2273, 0.007f, -2217, 0.011f, 50.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MOUNTAINS -1000,-2500, 0.0f, 1.49f, 0.21f, -2780, 0.300f, -2014, 0.100f, 27.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_QUARRY -1000,-1000, 0.0f, 1.49f, 0.83f,-10000, 0.061f, 500, 0.025f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PLAIN -1000,-2000, 0.0f, 1.49f, 0.50f, -2466, 0.179f, -2514, 0.100f, 21.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PARKINGLOT -1000, 0, 0.0f, 1.65f, 1.50f, -1363, 0.008f, -1153, 0.012f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE -1000,-1000, 0.0f, 2.81f, 0.14f, 429, 0.014f, 648, 0.021f, 80.0f, 60.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_UNDERWATER -1000,-4000, 0.0f, 1.49f, 0.10f, -449, 0.007f, 1700, 0.011f, 100.0f, 100.0f, 5000.0f - -// -// Examples simulating 'musical' reverb presets -// -// Name Decay time Description -// Small Room 1.1s A small size room with a length of 5m or so. -// Medium Room 1.3s A medium size room with a length of 10m or so. -// Large Room 1.5s A large size room suitable for live performances. -// Medium Hall 1.8s A medium size concert hall. -// Large Hall 1.8s A large size concert hall suitable for a full orchestra. -// Plate 1.3s A plate reverb simulation. -// - -#define I3DL2_ENVIRONMENT_PRESET_SMALLROOM -1000, -600, 0.0f, 1.10f, 0.83f, -400, 0.005f, 500, 0.010f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM -1000, -600, 0.0f, 1.30f, 0.83f, -1000, 0.010f, -200, 0.020f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LARGEROOM -1000, -600, 0.0f, 1.50f, 0.83f, -1600, 0.020f, -1000, 0.040f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL -1000, -600, 0.0f, 1.80f, 0.70f, -1300, 0.015f, -800, 0.030f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_LARGEHALL -1000, -600, 0.0f, 1.80f, 0.70f, -2000, 0.030f, -1400, 0.060f, 100.0f, 100.0f, 5000.0f -#define I3DL2_ENVIRONMENT_PRESET_PLATE -1000, -200, 0.0f, 1.30f, 0.90f, 0, 0.002f, 0, 0.010f, 100.0f, 75.0f, 5000.0f - -// -// DirectSound3D Algorithms -// - -// Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000} -#define DS3DALG_DEFAULT GUID_NULL - -// No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA} -DEFINE_GUID(DS3DALG_NO_VIRTUALIZATION, 0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); - -// High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA} -DEFINE_GUID(DS3DALG_HRTF_FULL, 0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); - -// Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA} -DEFINE_GUID(DS3DALG_HRTF_LIGHT, 0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca); - - -#if DIRECTSOUND_VERSION >= 0x0800 - -// -// DirectSound Internal Effect Algorithms -// - - -// Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF} -DEFINE_GUID(GUID_DSFX_STANDARD_GARGLE, 0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf); - -// Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6} -DEFINE_GUID(GUID_DSFX_STANDARD_CHORUS, 0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6); - -// Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98} -DEFINE_GUID(GUID_DSFX_STANDARD_FLANGER, 0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98); - -// Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D} -DEFINE_GUID(GUID_DSFX_STANDARD_ECHO, 0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d); - -// Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21} -DEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION, 0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21); - -// Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57} -DEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR, 0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57); - -// Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231} -DEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ, 0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31); - -// I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4} -DEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4); - -// Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C} -DEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c); - -// -// DirectSound Capture Effect Algorithms -// - - -// Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1} -// Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h -DEFINE_GUID(GUID_DSCFX_CLASS_AEC, 0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1); - -// Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40} -DEFINE_GUID(GUID_DSCFX_MS_AEC, 0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40); - -// System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810} -DEFINE_GUID(GUID_DSCFX_SYSTEM_AEC, 0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10); - -// Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5} -// Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h -DEFINE_GUID(GUID_DSCFX_CLASS_NS, 0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5); - -// Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D} -DEFINE_GUID(GUID_DSCFX_MS_NS, 0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d); - -// System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0} -DEFINE_GUID(GUID_DSCFX_SYSTEM_NS, 0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0); - -#endif // DIRECTSOUND_VERSION >= 0x0800 - -#endif // __DSOUND_INCLUDED__ - - - -#ifdef __cplusplus -}; -#endif // __cplusplus - diff --git a/empty.cur b/empty.cur new file mode 100644 index 0000000000000000000000000000000000000000..0ac926202f0d7c03e41bcf8f3cbf5920c9f03498 GIT binary patch literal 326 zcmZQzU}9ioP*7lC;AaqIFkob05My9q&;Vkf5Q75{GXfz9G=ND=;{X5un1XZ`0lHy8 F0RSnbgfajC literal 0 HcmV?d00001 diff --git a/event.cpp b/event.cpp index b51a570..dbf64e7 100644 --- a/event.cpp +++ b/event.cpp @@ -1997,7 +1997,7 @@ BOOL CEvent::AddPhaseText() } if (m_phase == WM_PHASE_INIT) { - DrawTextB(m_pPixmap, { 414, 446 }, "Version 2.2", FONTLITTLE); + DrawText(m_pPixmap, { 414, 446 }, "Version 2.2", FONTLITTLE); } if (m_phase == WM_PHASE_GAMER) { @@ -2007,7 +2007,7 @@ BOOL CEvent::AddPhaseText() POINT pos { 110, 69 }; for (int i = 0; i < MAXGAMER; i++) { - DrawTextB(m_pPixmap, pos, m_gamerNameList[i], FONTWHITE); + DrawText(m_pPixmap, pos, m_gamerNameList[i], FONTWHITE); pos.y += DIMBUTTONY; } diff --git a/fill.cur b/fill.cur new file mode 100644 index 0000000000000000000000000000000000000000..1c1b24bad92a617cd86e3bfd122133afd934e78e GIT binary patch literal 326 zcmZY4u}T9$5XSNU-l1CvUZ*L7Ij~7*N(&{vLEb=ogu_1Emg&yYBE%;V?g7NKR(e(H z1Dg|$8^22k1TxESW_OC6U5Id`DXIw*2N%Ft)Z#&$Rv%%TkCT}lHxD|QZpz$%Eczfl z*^r+7!sTD!=C0)N>WTODg!wGE`*ny`Z@AADY?ko+3b!vXT)?@UN+j%kX`gK;=?w>w zn{`vOc4S4Hm~XuKIyPT9D@v>g1jSjdOLXIEODlHwGm0e?%54Y&|FWw!Z?b zkkEC&mf0s@58zBF;Yt!yF_gM25wR416{8?7 -#include -using namespace std; extern void InitHInstance(HINSTANCE hInstance); extern void OutputDebug(const char *pMessage); diff --git a/network.cpp b/network.cpp index cf56942..21134e5 100644 --- a/network.cpp +++ b/network.cpp @@ -196,7 +196,7 @@ BOOL CNetwork::CreateSession(char * pName) desc.lpszSessionNameA = pName; desc.dwSize = sizeof(desc); desc.dwFlags = DPSESSION_KEEPALIVE | DPSESSION_MIGRATEHOST; - desc.dwMaxPlayers = MAXPLAYERS; + desc.dwMaxPlayers = MAXNETPLAYER; hr = m_pDP->Open(&desc, DPOPEN_CREATE); if (hr != DP_OK) @@ -242,7 +242,7 @@ BOOL CNetwork::Receive(LPVOID pDest, DWORD dwDataSize, LPDWORD lpdwPlayer) ZeroMemory(pDest, dwDataSize); *lpdwPlayer = -1; - for (int i = 0; i < MAXPLAYERS; i++) + for (int i = 0; i < MAXNETPLAYER; i++) { if (m_players[i].bIsPresent && from == i) { diff --git a/resource.h b/resource.h index b763d3d..8e685d0 100644 --- a/resource.h +++ b/resource.h @@ -37,48 +37,124 @@ #define TX_ACTION_REPEAT 33 #define TX_ACTION_QARMURE 34 #define TX_ACTION_FABARMURE 35 -#define TX_IONAMEEX 100 -#define TX_IOFREE 101 -#define TX_OWNMISSION 102 -#define TX_TESTMISSION 103 -#define TX_BUTTON_JOUER 104 -#define TX_BUTTON_APPRENDRE 105 -#define TX_BUTTON_QUITTER 106 -#define TX_BUTTON_PREVP 107 -#define TX_BUTTON_NEXTP 108 -#define TX_BUTTON_PLAYP 109 -#define TX_BUTTON_BUILDP 110 -#define TX_BUTTON_TERM 111 -#define TX_BUTTON_READP 112 -#define TX_BUTTON_WRITEP 113 -#define TX_BUTTON_CANCELP 114 -#define TX_BUTTON_CONTP 115 -#define TX_BUTTON_REPEAT 116 -#define TX_CHOOSEPLAYER 117 -#define TX_PLAYERSNAME 118 -#define TX_BUTTON_TERMC 119 -#define TX_CHOOSESIZE 120 -#define TX_BUTTON_HVSCROLL 121 -#define TX_BUTTON_ONLYHSCROLL 122 -#define TX_BUTTON_ONLYVSCROLL 123 -#define TX_BUTTON_TESTMISSION 124 -#define TX_PAUSE 125 -#define TX_MUSIC 149 -#define TX_READINFO 167 -#define TX_REGION 178 -#define TX_INSERT 182 -#define TX_GAMEPAUSE 197 -#define TX_FULL_END1 203 -#define TX_FULL_END2 204 -#define TX_FULL_END3 205 -#define TX_FULL_END4 206 -#define TX_DEMOREC 213 -#define TX_DEMOPLAY 214 -#define TX_MULTI_CREATE 250 -#define TX_MULTI_GNAME 251 -#define TX_LOAD_CGAME 269 -#define TX_SAVE_CGAME 270 - +#define TX_IONAMEEX 100 +#define TX_IOFREE 101 +#define IDR_MENU 102 +#define TX_TERMMIN 102 +#define TX_TERMMAX 103 +#define TX_BUTTON_JOUER 104 +#define TX_BUTTON_APPRENDRE 105 +#define TX_BUTTON_QUITTER 106 +#define TX_BUTTON_PREVP 107 +#define TX_BUTTON_NEXTP 108 +#define TX_BUTTON_PLAYP 109 +#define TX_BUTTON_BUILDP 110 +#define TX_BUTTON_TERM 111 +#define TX_BUTTON_READP 112 +#define TX_BUTTON_WRITEP 113 +#define TX_BUTTON_CANCELP 114 +#define TX_BUTTON_CONTP 115 +#define TX_BUTTON_REPEAT 116 +#define TX_BUTTON_BUTTON 117 +#define TX_BUTTON_CTERM 118 +#define TX_BUTTON_TERMC 119 +#define TX_BUTTON_TERMHBLUPI 120 +#define TX_BUTTON_TERMHPLANCHE 121 +#define TX_BUTTON_TERMFIRE 122 +#define TX_BUTTON_TERMDEC 123 +#define TX_BUTTON_TERMINC 124 +#define TX_PAUSE 125 +#define TX_JAUGE1 126 +#define TX_JAUGE2 127 +#define TX_BUTTON_SETUP 128 +#define TX_BUTTON_MUSIC 129 +#define TX_BUTTON_SETUP1 130 +#define TX_BUTTON_SETUP2 131 +#define TX_BUTTON_SETUP3 132 +#define TX_BUTTON_SETUP4 133 +#define TX_BUTTON_MUSIC1 134 +#define TX_BUTTON_MUSIC2 135 +#define TX_BUTTON_MUSIC3 136 +#define TX_BUTTON_MUSIC4 137 +#define TX_BUTTON_MUSIC5 138 +#define TX_BUTTON_MUSIC6 139 +#define TX_BUTTON_MUSIC7 140 +#define TX_BUTTON_MUSIC8 141 +#define TX_BUTTON_MUSIC9 142 +#define TX_BUTTON_MUSIC10 143 +#define TX_BUTTON_REGION 144 +#define TX_BUTTON_TERMMBLUPI 145 +#define TX_BUTTON_TERMKILL 146 +#define TX_TERM 147 +#define TX_BUTTON 148 +#define TX_MUSIC 149 +#define TX_SCHOOL 150 +#define TX_MISSION 151 +#define TX_IONAMEMI 152 +#define TX_BUTTON_TERMHTOMATE 153 +#define TX_BUTTON_SETUP5 154 +#define TX_BUTTON_SETUP6 155 +#define TX_BUTTON_SETUP7 156 +#define TX_BUTTON_SETUP8 157 +#define TX_OUI 158 +#define TX_NON 159 +#define TX_BUTTON_SETUP9 160 +#define TX_BUTTON_SETUP10 161 +#define TX_INFO_SETUP1 162 +#define TX_INFO_SETUP2 163 +#define TX_INFO_SETUP3 164 +#define TX_INFO_SETUP4 165 +#define TX_INFO_SETUP5 166 +#define TX_INFO_SETUP6 167 +#define TX_INFO_SETUP7 168 +#define TX_INFO_SETUP8 169 +#define TX_INFO_SETUP9 170 +#define TX_INFO_SETUP10 171 +#define TX_INFO_SETUP10b 172 +#define TX_INFO_NOSCROLL 173 +#define TX_BUTTON_REGION1 174 +#define TX_BUTTON_REGION2 175 +#define TX_BUTTON_REGION3 176 +#define TX_BUTTON_REGION4 177 +#define TX_REGION 178 +#define TX_BUTTON_PLAY_STOP 179 +#define TX_BUTTON_PLAY_SETUP 180 +#define TX_BUTTON_PLAY_WRITE 181 +#define TX_INSERT 182 +#define TX_BUTTON_PREVH 183 +#define TX_BUTTON_NEXTH 184 +#define TX_BUTTON_TERMHMETAL 185 +#define TX_BUTTON_HELP 186 +#define TX_HELP 187 +#define TX_BUTTON_PRIVE 188 +#define TX_PRIVATE 189 +#define TX_IONAMEPR 190 +#define TX_PRIVATE_HACHBLUPI 191 +#define TX_PRIVATE_HACHPLANCHE 192 +#define TX_PRIVATE_HACHTOMATE 193 +#define TX_PRIVATE_HACHMETAL 194 +#define TX_PRIVATE_STOPFIRE 195 +#define TX_PRIVATE_HOMEBLUPI 196 +#define TX_PRIVATE_KILLROBOTS 197 +#define TX_BUTTON_UNDO 198 +#define TX_DEMO_END1 199 +#define TX_DEMO_END2 200 +#define TX_DEMO_END3 201 +#define TX_DEMO_END4 202 +#define TX_FULL_END1 203 +#define TX_FULL_END2 204 +#define TX_FULL_END3 205 +#define TX_FULL_END4 206 +#define TX_PRIVATE_OBJECTIF 207 +#define TX_PRIVATE_NBBLUPI 208 +#define TX_BUTTON_SKILL 209 +#define TX_SKILL1 210 +#define TX_SKILL2 211 +#define TX_BUTTON_DEMO 212 +#define TX_DEMOREC 213 +#define TX_DEMOPLAY 214 +#define TX_BUTTON_TERMHROBOT 215 +#define TX_PRIVATE_HACHROBOT 216 #define TX_REPEAT_CULTIVE 500 #define TX_REPEAT_FLEUR 501 #define TX_REPEAT_FLEURQ 502 @@ -193,7 +269,6 @@ #define TX_LASTWIN2 3201 #define TX_LASTWIN3 3202 #define IDM_EXIT 40001 -#define TX_BUTTON_CREATE 6900 // Next default values for new objects // diff --git a/resource2.h b/resource2.h new file mode 100644 index 0000000..cc943a7 --- /dev/null +++ b/resource2.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by speedyblupi.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/resrc1.h b/resrc1.h new file mode 100644 index 0000000..6d43f40 --- /dev/null +++ b/resrc1.h @@ -0,0 +1,19 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by Blupi-e.rc +// +#define TX_DIRECT_N 512 +#define TX_DIRECT_S 513 +#define TX_DIRECT_E 514 +#define TX_DIRECT_O 515 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 109 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/rstemp.rct b/rstemp.rct new file mode 100644 index 0000000000000000000000000000000000000000..1e8b3a84e4c32e8432273a3b17ec32b33b92e69c GIT binary patch literal 464 zcmaJ-!Ait16dc8ii=dz2!Ly|9s^@I-)L@$@Nw(TkSlGQOc<|si`x7;3s9MDh44HZJ zCXfMu(}cb+NOW?JlR8Vd!y}gI?)$yL7bk}Y`vU_uX*3Jlm)Ga@+ja(gr1>;+K7@W| zj$kz3qe608A6s(Xu#Lvva2Xn{q*YYoBCi-Nm+S)OMK}ts!=eatYuOPli|WYZs!+?g z&Me9YA1ytF=*aWRDT=MESApj+_O&D)pPFkeX{en*H5h0O=tiB literal 0 HcmV?d00001 diff --git a/speedy.aps b/speedy.aps new file mode 100644 index 0000000000000000000000000000000000000000..e006d59c393e37eadebe41583487df6ad2f87a50 GIT binary patch literal 22236 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 yANt#^tf+r4mA{pG2GZ#I literal 0 HcmV?d00001 diff --git a/speedy.rc b/speedy.rc new file mode 100644 index 0000000..4409ebb --- /dev/null +++ b/speedy.rc @@ -0,0 +1,63 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/speedyblupi.aps b/speedyblupi.aps new file mode 100644 index 0000000000000000000000000000000000000000..cbb5729c0bd56aad98aa39d135dd5403dfc08f1f GIT binary patch literal 1348 zcmb7D&2G~`5dH$agr7?foYT@nD-kOR5rQ6&g6+00iCx7`S|m#raV%mfu_HTH$vg1? zJOc0-x=PFFRJURPF~eyiP6 zQLoieUf0V;r_<7vrMg+G5y04m1KH56uF+oEQ~!8fZ+_^gxw-Jp%;%)?G@yi1-*ozF z*VGK%(ex7ob?l;~DY9c)ElZPeSgjwSic)GT)}O4NZ0zzvn|b)2Dn#z{JS>)@yd&cn zHs3jhhls0n{%%qgo}hH4*_PW{*?L|t1-cVh?r}GOol|bL{BiKG~y}dDdEoL zz5xj%vbY`hg8C4jxPGK%1t;`9PHihV#Am$5D;&|^CFKEQgt(^P3f`w21lu}m%4WR= zj5B6D!6TDO)JW97;lIhhINRx6Y#kycUqS= z{wjUBk_tTVV(X2H{>a}*^u5A)SKo`i{mS`2eJgtP_nkHc7sApZI!+ +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=speedyblupi - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "speedyblupi.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "speedyblupi.mak" CFG="speedyblupi - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "speedyblupi - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "speedyblupi - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "speedyblupi - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "dxsdk3/sdk/inc" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"dxsdk3/sdk/lib" + +!ELSEIF "$(CFG)" == "speedyblupi - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "dxsdk3/sdk/inc" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "speedyblupi - Win32 Release" +# Name "speedyblupi - Win32 Debug" +# Begin Group "resource" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\arrow.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowdl.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowdow.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowdr.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowlef.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowrig.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowul.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowup.cur +# End Source File +# Begin Source File + +SOURCE=.\arrowur.cur +# End Source File +# Begin Source File + +SOURCE=".\blupi-d.rc" +# End Source File +# Begin Source File + +SOURCE=".\blupi-e.rc" +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=".\blupi-f.rc" +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\blupi.ico +# End Source File +# Begin Source File + +SOURCE=.\blupi.rct +# End Source File +# Begin Source File + +SOURCE=.\cursor1.cur +# End Source File +# Begin Source File + +SOURCE=.\empty.cur +# End Source File +# Begin Source File + +SOURCE=.\fill.cur +# End Source File +# Begin Source File + +SOURCE=.\map.cur +# End Source File +# Begin Source File + +SOURCE=.\wait.cur +# End Source File +# End Group +# Begin Group "include" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\actions.h +# End Source File +# Begin Source File + +SOURCE=.\button.h +# End Source File +# Begin Source File + +SOURCE=.\ddutil.h +# End Source File +# Begin Source File + +SOURCE=.\decor.h +# End Source File +# Begin Source File + +SOURCE=.\dectables.h +# End Source File +# Begin Source File + +SOURCE=.\def.h +# End Source File +# Begin Source File + +SOURCE=.\event.h +# End Source File +# Begin Source File + +SOURCE=.\jauge.h +# End Source File +# Begin Source File + +SOURCE=.\menu.h +# End Source File +# Begin Source File + +SOURCE=.\misc.h +# End Source File +# Begin Source File + +SOURCE=.\movie.h +# End Source File +# Begin Source File + +SOURCE=.\network.h +# End Source File +# Begin Source File + +SOURCE=.\obstacle.h +# End Source File +# Begin Source File + +SOURCE=.\pixmap.h +# End Source File +# Begin Source File + +SOURCE=.\resource.h +# End Source File +# Begin Source File + +SOURCE=.\resrc1.h +# End Source File +# Begin Source File + +SOURCE=.\sound.h +# End Source File +# Begin Source File + +SOURCE=.\text.h +# End Source File +# Begin Source File + +SOURCE=.\texttables.h +# End Source File +# Begin Source File + +SOURCE=.\wave.h +# End Source File +# End Group +# Begin Source File + +SOURCE=.\blupi.cpp +# End Source File +# Begin Source File + +SOURCE=.\button.cpp +# End Source File +# Begin Source File + +SOURCE=.\ddutil.cpp +# End Source File +# Begin Source File + +SOURCE=.\decblock.cpp +# End Source File +# Begin Source File + +SOURCE=.\decblupi.cpp +# End Source File +# Begin Source File + +SOURCE=.\decdesign.cpp +# End Source File +# Begin Source File + +SOURCE=.\decio.cpp +# End Source File +# Begin Source File + +SOURCE=.\decmove.cpp +# End Source File +# Begin Source File + +SOURCE=.\decnet.cpp +# End Source File +# Begin Source File + +SOURCE=.\decor.cpp +# End Source File +# Begin Source File + +SOURCE=.\event.cpp +# End Source File +# Begin Source File + +SOURCE=.\jauge.cpp +# End Source File +# Begin Source File + +SOURCE=.\menu.cpp +# End Source File +# Begin Source File + +SOURCE=.\misc.cpp +# End Source File +# Begin Source File + +SOURCE=.\movie.cpp +# End Source File +# Begin Source File + +SOURCE=.\network.cpp +# End Source File +# Begin Source File + +SOURCE=.\pixmap.cpp +# End Source File +# Begin Source File + +SOURCE=.\sound.cpp +# End Source File +# Begin Source File + +SOURCE=.\text.cpp +# End Source File +# Begin Source File + +SOURCE=.\wave.cpp +# End Source File +# End Target +# End Project diff --git a/speedyblupi.dsw b/speedyblupi.dsw new file mode 100644 index 0000000..9aa939d --- /dev/null +++ b/speedyblupi.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "speedyblupi"=.\speedyblupi.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/speedyblupi.ncb b/speedyblupi.ncb new file mode 100644 index 0000000000000000000000000000000000000000..c8baf70bb8728e7208c10f2de4acc0de30ab4683 GIT binary patch literal 189440 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 literal 0 HcmV?d00001 diff --git a/speedyblupi.opt b/speedyblupi.opt new file mode 100644 index 0000000000000000000000000000000000000000..a695f542aa0119c832d266525ad0ed24905e30d6 GIT binary patch literal 48640 zcmeI5Piz!b9LHZdm9xNW7336AmVNGQ zpZUCL4?pI;`SFJ(x4-y$)g3V{9TIh7d?F?yf$|#UrQFmkP(Lvt^Zr%lQN;8Z5%>pl zO<>*XpaoDpB-gwFib64{5sE`{ofqP|2wDu`5fDqDrO+~{1$qjSeoy1N0$K^Jf>uM% zKx?42&^k!^9mjP8^eprov=Q0_ZHBf$TcPJ6>AM}*R;Ufy0kuO(r~}#w?SiD=9$fcA z`=I^M0q6zjAoL=12$FtBaP5S;pcIsbx}hHED0B>xeo`+Xe-b(cy$qd(&Oom~y-*({ z{m$Wf9_oi)g)Ts^L9ast&>N8Sn=h$XnE2<21n#_ut0hJ-!|Ky=JTd;g)Xvf@@m~7Y z?O%Vck@xSr_G5HQToJY?iHy*Mj+yjf9vMjYo$hl@h+6jUg@pa_Fr)E)GBY$_~-^FUjZ<51!<9CakFmSJu!h@tm7+?Or%CTjtrjO;)$s4~0 z>nG zK%iM$&MwKWm`H#GNPq-LfCNZ@1W14cNPq-LfCL_M0!zn#A44#2biUoj;qgDl5MZ2l z^V&ZC-57$N^KM=j#(x?^Aa>r(t7rV1F$9O_-MsAa_s0;L9KG>rJTm-oJhBx*x8}9+ zNXuvO$QI;ptcgcHMEM@%zd}BN^1aC4M*d5b|A~P5^>y*cC)eJs`wRJ-$X`df@Y45z z{LMiAmq6b44PM_G|7c9C7o)l6Vduz-VMo^8sQo~OB;B+CKP!e;7QEC={*Ml0cR?`B zlK=^j011!)36KB@kN^pg011%5|Cj*df8iFN@xO4q82>|TFc9;5*zvz8qJyVSo{+D$ zGLZlYkN^pg011!)36KB@kN^pg011$QOMvmea1R3Gf8lsB{x`SrzkBV!?#GVgBK9TA zebKX}4cLE-*BL|YKVC08_4Xeh$1eKg;!St|w~js7IqW~rio7UeKe#d5;Ha1TztzrX z^|Oj5Vw-fDHhwkj?&Z_?0ORitjGw~2W^ng5P7N?{|3kQ=ko-g6|KY&+b=dzM-1{9% zh{GGWT1( zzwvzL-ezhMiMI6hb@gHodt9W>W~@QoIqv9%nLCn$dW|YEz#1HI>)y~&%Pg0?+WKfq z`b2+&QPlF~oPHk{<*0tj-kC^%1W14cNPq-LfCNZ@1W14cNZ<(|!1!OdMP&Rh952TI z9!>o3;FPxj5udAxWi-byi+0;38J~+~EXy2f)5?~#;;xm;`*xGE?{cuFI^^|>QwuC( z&@WJ3mMdL)c4=CDrN>6~=3uVP(&UUhQ=e*H^vsy++@_V>57c;;p_%TTsX9w@R6k|M zF^j%yG^i*hSs(P3dfch8nv;S!$ZdJDDtAb5u)Lp96NahF*usaKH2|QD|`Y(AZR~hfMw4^sY zUP>+I{2>~Y<+h4C`fvqG#5LUVCYcRljSgiDII3R=7?Ud%aSgXs@Q+`0A7=`-V4eg> zfCNZ@1W14cNPq-LfCL^P0mlEr!Dsw0952TI<~IK4fB$)6!hMG>mA8BHxxT!a4Q>h! zw}kX20TLhq5+DH*AOR8}0TLhq5+DH*c+3ef{ugcm8UG8%i}Am?jsK-_=3o}5Ee_(J zF062i1@EN~aQ@*5If{4wVj8DRY8bzO(Tl>tIf&s>3(lX6qDeg@Pk^kZ^;zlUjbDxb zY(8PnpPa3~u=W3C{Km@H!F_u2i{X*}jH6vj`k4+tv(wM)^5-bunPegX5+DH*AOR8} z0TLhq5+DH*AORA1vIsE#8*V)r{|(2B@!z?P|3+|jVvQJW*oUy+=Tnv{wIj97{Zh`9 z(uZfPL)XpF(!kXpE#5Xz*}=W(?T*gwj=h~bQ?1FpJ-b_z$#i>bXHT-LwY|NwJ+;5R zXMehT&pSeFM{9X-WF6#(NdHFW4s;1+Qr8eSz9pTQNPq-LfCNZ@1W14cNPq-LfCNZ@ b1SSbE{x`{@njGVQ)li!BVf=4y" with flags "" + +Creating command line "rc.exe /l 0x409 /fo"Debug/blupi-d.res" /d "_DEBUG" "C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc"" +Creating temp file "C:\Users\Jimmy\AppData\Local\Temp\RSP48F6.tmp" with contents +Creating command line "cl.exe @C:\Users\Jimmy\AppData\Local\Temp\RSP48F6.tmp" +Creating temp file "C:\Users\Jimmy\AppData\Local\Temp\RSP48F7.tmp" with contents +Creating command line "link.exe @C:\Users\Jimmy\AppData\Local\Temp\RSP48F7.tmp" +Compiling resources... + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (31): error RC2135 : file not found: blupi.ico + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (81): error RC2135 : file not found: map.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (82): error RC2135 : file not found: arrowup.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (83): error RC2135 : file not found: arrowdow.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (84): error RC2135 : file not found: arrowlef.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (85): error RC2135 : file not found: arrowrig.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (86): error RC2135 : file not found: arrowul.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (87): error RC2135 : file not found: arrowur.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (88): error RC2135 : file not found: arrowdr.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (89): error RC2135 : file not found: arrowdl.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (90): error RC2135 : file not found: wait.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (91): error RC2135 : file not found: empty.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (92): error RC2135 : file not found: fill.cur + + +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (93): error RC2135 : file not found: arrow.cur +C:\Users\Jimmy\Documents\GitHub\sb2-decomp\blupi-d.rc (181): error RC2104 : undefined keyword or key name: TX_TERMMIN + + + + + + +Error executing rc.exe. + + + +speedyblupi.exe - 15 error(s), 0 warning(s) diff --git a/speedyblupi.rc b/speedyblupi.rc new file mode 100644 index 0000000000000000000000000000000000000000..a12cd11e95ed46b065829b5213e267eea88afb2e GIT binary patch literal 2668 zcmdUxOHbQC5Xb*#q<#mJTtHL==!s(<5TS+?k%vHv6jcc>k%Fn>L|ppW+x}+Fs!nVN z@i@3zZDu{0nVtF1!~XNTrkVm>YNm-6dQ{8~wS+f>7i*>On)B4u0V~iC-6>)(;4h(5 zcnhfMtvF3M2RxaznSLU3s88DAmYSngxDo%(k)Ar)N=E+#oqJWByy;e*Wau=_dRlIDc=Dat*@S% z^|>`_`xr!uB^yNEcKvR$!SgDbpd%eUPf^Q5f|%*qe8|7UESf~oJ$ci+qU_|TXv72> zQJcvW|L19uPhZ~b(`#?4y4gCVYiwR5%lbWUc4RBg&?&a?G5uMt>67-xqEBzDhj8ok u%_5k#SFW=~W*&L^-uJN8^!E3#$Ff{Fq`ff@i|ak&i^RSavv1vO-v0vLWH^cd literal 0 HcmV?d00001 diff --git a/speedyblupi.vcxproj b/speedyblupi.vcxproj index 77477f2..49c93ed 100644 --- a/speedyblupi.vcxproj +++ b/speedyblupi.vcxproj @@ -21,8 +21,8 @@ {E892DD4F-D6B7-4A19-8EC3-AB2625A8A523} Win32Proj - planetblupi - 10.0.22621.0 + speedyblupi + 10.0.19041.0 speedyblupi @@ -90,13 +90,16 @@ Disabled _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) true - true + false false + dxsdk3\sdk\inc;%(AdditionalIncludeDirectories) + PlaySound;DrawText Windows true winmm.lib;ddraw.lib;dsound.lib;dplay.lib;%(AdditionalDependencies) + dxsdk3\sdk\lib @@ -107,13 +110,16 @@ Disabled _CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) true - true + false false + dxsdk3\sdk\inc;%(AdditionalIncludeDirectories) + PlaySound;DrawText Windows true winmm.lib;ddraw.lib;dsound.lib;%(AdditionalDependencies) + dxsdk3\sdk\lib @@ -126,7 +132,9 @@ true _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) true - true + false + dxsdk3\sdk\inc;%(AdditionalIncludeDirectories) + PlaySound;DrawText Windows @@ -134,6 +142,7 @@ true true winmm.lib;ddraw.lib;dsound.lib;%(AdditionalDependencies) + dxsdk3\sdk\lib @@ -146,7 +155,9 @@ true _CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) true - true + false + dxsdk3\sdk\inc;%(AdditionalIncludeDirectories) + PlaySound;DrawText Windows @@ -154,13 +165,18 @@ true true winmm.lib;ddraw.lib;dsound.lib;%(AdditionalDependencies) + dxsdk3\sdk\lib + + + + @@ -177,7 +193,7 @@ - + @@ -205,6 +221,7 @@ + diff --git a/speedyblupi.vcxproj.filters b/speedyblupi.vcxproj.filters index 30aef56..99e11b7 100644 --- a/speedyblupi.vcxproj.filters +++ b/speedyblupi.vcxproj.filters @@ -59,6 +59,18 @@ Sources + + Sources + + + Sources + + + Sources + + + Sources + @@ -70,9 +82,6 @@ Sources - - Sources - Sources @@ -121,6 +130,9 @@ Sources + + Sources + @@ -168,6 +180,9 @@ Data + + Resource Files + diff --git a/speedyblupi.vcxproj.user b/speedyblupi.vcxproj.user new file mode 100644 index 0000000..be25078 --- /dev/null +++ b/speedyblupi.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/text.cpp b/text.cpp index 2f73063..feb3c2c 100644 --- a/text.cpp +++ b/text.cpp @@ -11,7 +11,7 @@ ///////////////////////////////////////////////////////////////////////////// -static CharOffset table_offsets[] = +static CharProperties table_char[] = { { 1, 0, 0, -1, 0, 0 }, { 1, 0, 0, -1, 0, 0 }, @@ -271,7 +271,7 @@ static CharOffset table_offsets[] = { 1, 0, 0, -1, 0, 0 } }; -// Retourne l'offset pour un caract�re donn�. +// Retourne l'offset pour un caractère donné. int GetOffset(char c) { @@ -347,24 +347,24 @@ void DrawCharSingle(CPixmap *pPixmap, POINT pos, char *pText, int font) void DrawChar(CPixmap *pPixmap, POINT *pos, char c, int font) { - POINT pos2 { table_offsets[c].charOffsetX + pos->x, table_offsets[c].charOffsetY + pos->y }; - DrawCharSingle(pPixmap, pos2, &table_offsets[c].charIcon, font); - if (table_offsets[c].accentIcon != -1) + POINT pos2 { table_char[c].charOffsetX + pos->x, table_char[c].charOffsetY + pos->y }; + DrawCharSingle(pPixmap, pos2, &table_char[c].charIcon, font); + if (table_char[c].accentIcon != -1) { - pos2 = { table_offsets[c].accentOffsetX + pos->x, table_offsets[c].accentOffsetY + pos->y }; - DrawCharSingle(pPixmap, pos2, &table_offsets[c].accentIcon, font); + pos2 = { table_char[c].accentOffsetX + pos->x, table_char[c].accentOffsetY + pos->y }; + DrawCharSingle(pPixmap, pos2, &table_char[c].accentIcon, font); } pos->x += GetCharWidthB(c, font); } void DrawTextLeft(CPixmap *pPixmap, POINT pos, char *pText, int font) { - DrawTextB(pPixmap, pos, pText, font); + DrawText(pPixmap, pos, pText, font); } // Affiche un texte. -void DrawTextB(CPixmap *pPixmap, POINT pos, char *pText, int font) +void DrawText(CPixmap *pPixmap, POINT pos, char *pText, int font) { while (*pText != 0) { @@ -433,7 +433,7 @@ void DrawTextRect(CPixmap *pPixmap, POINT pos, char *pText, if (pente == 0) { - DrawTextB(pPixmap, pos, pDest, font); + DrawText(pPixmap, pos, pDest, font); } else { @@ -478,7 +478,7 @@ void DrawTextCenter(CPixmap *pPixmap, POINT pos, char *pText, int font) pDest = text; start.x = pos.x - GetTextWidth(pDest) / 2; start.y = pos.y; - DrawTextB(pPixmap, start, pDest, font); + DrawText(pPixmap, start, pDest, font); if (pDest[0] == 0) // ligne vide ? { diff --git a/text.h b/text.h index 198c653..e1fa3e0 100644 --- a/text.h +++ b/text.h @@ -16,7 +16,7 @@ typedef struct char accentOffsetX; char accentOffsetY; } -CharOffset; +CharProperties; extern void DrawCharSingle(CPixmap *pPixmap, POINT pos, char *pText, int font); @@ -28,7 +28,7 @@ extern void DrawTextLeft(CPixmap *pPixmap, POINT pos, char *pText, int font); extern -void DrawTextB(CPixmap *pPixmap, POINT pos, char *pText, int font = 0); +void DrawText(CPixmap *pPixmap, POINT pos, char *pText, int font = 0); extern void DrawTextPente(CPixmap *pPixmap, POINT pos, char *pText, diff --git a/wait.cur b/wait.cur new file mode 100644 index 0000000000000000000000000000000000000000..55f7588391be60a9eb674dfefeaa181724476505 GIT binary patch literal 326 zcmaKnu?@m75JkTeSx6WuqM;2XB^x*+umV$1kz^4>CLx&sJOWGr5(OzjK6gn$fy7z= zbUxjGJ_8X9mP;VP9BTtC0IWpPLMAeDG|D0WCX(M~@&MK|;PQm2_hr1xn~1N>l9jDl zIrhPk!SzL$ZtLJ~r;XN*KDfdM%R^;(tfKoRi}Q11PVZ7#15?==<2r!NMoEipLSAFC wfo@aufbW2`m2auUIZ<7K_>YDenNyE?Q(<^v6~Yv@@E`I{=gBr5YrRYT0sU`iM*si- literal 0 HcmV?d00001