19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef _directx_h
39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define _directx_h
49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Include all of the DirectX 5.0 headers and adds any necessary tweaks */
69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define WIN32_LEAN_AND_MEAN
89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <windows.h>
99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <mmsystem.h>
109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef WIN32
119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define WIN32
129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#undef  WINNT
149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Far pointers don't exist in 32-bit code */
169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef FAR
179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define FAR
189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Error codes not yet included in Win32 API header files */
219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef MAKE_HRESULT
229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define MAKE_HRESULT(sev,fac,code) \
239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall	((HRESULT)(((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))))
249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef S_OK
279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define S_OK		(HRESULT)0x00000000L
289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef SUCCEEDED
319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define SUCCEEDED(x)	((HRESULT)(x) >= 0)
329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef FAILED
349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define FAILED(x)	((HRESULT)(x)<0)
359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef E_FAIL
389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define E_FAIL		(HRESULT)0x80000008L
399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef E_NOINTERFACE
419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define E_NOINTERFACE	(HRESULT)0x80004002L
429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef E_OUTOFMEMORY
449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define E_OUTOFMEMORY	(HRESULT)0x8007000EL
459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef E_INVALIDARG
479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define E_INVALIDARG	(HRESULT)0x80070057L
489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef E_NOTIMPL
509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define E_NOTIMPL	(HRESULT)0x80004001L
519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef REGDB_E_CLASSNOTREG
539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define REGDB_E_CLASSNOTREG	(HRESULT)0x80040154L
549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Severity codes */
579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef SEVERITY_ERROR
589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define SEVERITY_ERROR	1
599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* Error facility codes */
629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef FACILITY_WIN32
639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define FACILITY_WIN32	7
649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#ifndef FIELD_OFFSET
679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* DirectX headers (if it isn't included, I haven't tested it yet)
719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall */
729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/* We need these defines to mark what version of DirectX API we use */
739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define DIRECTDRAW_VERSION  0x0700
749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define DIRECTSOUND_VERSION 0x0500
759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define DIRECTINPUT_VERSION 0x0700
769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <ddraw.h>
789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <dsound.h>
799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <dinput.h>
809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#if DIRECTINPUT_VERSION >= 0x0700 && !defined(DIMOFS_BUTTON4)
829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Halltypedef struct _DIMOUSESTATE2 {
839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    LONG    lX;
849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    LONG    lY;
859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    LONG    lZ;
869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall    BYTE    rgbButtons[8];
879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall} DIMOUSESTATE2, *LPDIMOUSESTATE2;
889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)
909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)
919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)
929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)
939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallextern const DIDATAFORMAT c_dfDIMouse2;
959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif
969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall
979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#endif /* _directx_h */
98