32#include "wine/unicode.h"
43#define WM_WINE_NOTIFY_ACTIVITY WM_USER
58 return &
This->IDirectInputDevice8A_iface;
62 return &
This->IDirectInputDevice8W_iface;
83 TRACE(
" cooperative level : ");
116#define FE(x) case x: TRACE(" "#x); break
131 static const struct {
135#define FE(x) { x, #x}
167 TRACE(
" / Instance: ");
169 TRACE(
"DIDFT_ANYINSTANCE");
179 TRACE(
" - dwHow = %s\n",
187 TRACE(
" - enumerating : %s ('%s') - %2d - 0x%08x - %s - 0x%x\n",
192 TRACE(
" - enumerating : %s ('%s'), - %2d - 0x%08x - %s - 0x%x\n",
199 static const struct {
203#define FE(x) { &x, #x}
216 FE(GUID_SysKeyboard),
218 FE(GUID_ConstantForce),
224 FE(GUID_SawtoothDown),
236 return guids[
i].
name;
245 TRACE(
"Dumping DIDATAFORMAT structure:\n");
248 WARN(
"Non-standard DIDATAFORMAT structure size %d\n", df->
dwSize);
252 WARN(
"Non-standard DIOBJECTDATAFORMAT structure size %d\n", df->
dwObjSize);
258 default:
TRACE(
"unknown");
break;
265 TRACE(
" - Object %d:\n",
i);
298 if ((
p =
strrchr(appname,
'/'))) appname =
p + 1;
299 if ((
p =
strrchr(appname,
'\\'))) appname =
p + 1;
300 strcat(appname,
"\\DirectInput");
302 if (
RegOpenKeyA(tmpkey, appname, appkey)) *appkey = 0;
307 return *defkey || *appkey;
329 const char *in_c =
in;
337 for (
i = 0;
i < df->
size;
i++) {
341 TRACE(
"Copying (c) to %d from %d (value %d)\n",
347 TRACE(
"Copying (s) to %d from %d (value %d)\n",
353 TRACE(
"Copying (i) to %d from %d (value %d)\n",
365 TRACE(
"Copying (c) to %d default value %d\n",
371 TRACE(
"Copying (s) to %d default value %d\n",
377 TRACE(
"Copying (i) to %d default value %d\n",
444 if (!dt || !done)
goto failed;
453 TRACE(
"Creating DataTransform :\n");
455 for (
i = 0;
i <
format->wine_df->dwNumObjs;
i++)
482 TRACE(
"Matching :\n");
483 TRACE(
" - Asked (%d) :\n",
j);
484 TRACE(
" * GUID: %s ('%s')\n",
493 TRACE(
" - Wine (%d) :\n",
i);
494 TRACE(
" * GUID: %s ('%s')\n",
497 TRACE(
" * Offset: %3d\n",
format->wine_df->rgodf[
i].dwOfs);
498 TRACE(
" * dwType: 0x%08x\n",
format->wine_df->rgodf[
i].dwType);
500 TRACE(
" * dwFlags: 0x%08x\n",
format->wine_df->rgodf[
i].dwFlags);
522 TRACE(
"Setting to default value :\n");
525 TRACE(
" - Asked (%d) :\n",
j);
526 TRACE(
" * GUID: %s ('%s')\n",
551 format->internal_format_size =
format->wine_df->dwDataSize;
614 FIXME(
"Unhandled ph->dwHow=='%04X'\n", (
unsigned int)ph->
dwHow);
621 DWORD type = (0x0000ff00 & dwSemantic) >> 8;
623 DWORD obj_instance = 0;
627 for (
i = 0;
i <
This->data_format.wine_df->dwNumObjs;
i++)
639 if (!found)
return 0;
644 return type | (0x0000ff00 & (obj_instance << 8));
648 static const WCHAR subkey[] = {
649 'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
650 'W',
'i',
'n',
'e',
'\\',
651 'D',
'i',
'r',
'e',
'c',
't',
'I',
'n',
'p',
'u',
't',
'\\',
652 'M',
'a',
'p',
'p',
'i',
'n',
'g',
's',
'\\',
'%',
's',
'\\',
'%',
's',
'\\',
'%',
's',
'\0'};
671 static const WCHAR subkey[] = {
672 'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
673 'W',
'i',
'n',
'e',
'\\',
674 'D',
'i',
'r',
'e',
'c',
't',
'I',
'n',
'p',
'u',
't',
'\\',
675 'M',
'a',
'p',
'p',
'i',
'n',
'g',
's',
'\\',
'%',
's',
'\\',
'%',
's',
'\\',
'%',
's',
'\0'};
702 didev.
dwSize =
sizeof(didev);
747 didev.
dwSize =
sizeof(didev);
803 if (lpszUserName ==
NULL)
877 int i,
action = 0, num_actions = 0;
910 lpdiaf->
dwCRC = new_crc;
912 This->num_actions = num_actions;
956 TRACE(
"obj %p, inst 0x%08x, type 0x%08x\n",
obj, inst,
type);
1000 if (lpszUserName ==
NULL)
1035 if (!
This->queue_len ||
This->overflow || ofs < 0)
return;
1037 next_pos = (
This->queue_head + 1) %
This->queue_len;
1038 if (next_pos ==
This->queue_tail)
1040 TRACE(
" queue overflowed\n");
1045 TRACE(
" queueing %d at offset %d (queue head %d / size %d)\n",
1048 This->data_queue[
This->queue_head].dwOfs = ofs;
1051 This->data_queue[
This->queue_head].dwSequence = seq;
1054 if (
This->num_actions > 0)
1057 for (
i=0;
i <
This->num_actions;
i++)
1059 if (
This->action_map[
i].offset == ofs)
1061 TRACE(
"Offset %d mapped to uAppData %lu\n", ofs,
This->action_map[
i].uAppData);
1062 This->data_queue[
This->queue_head].uAppData =
This->action_map[
i].uAppData;
1068 This->queue_head = next_pos;
1259 This->crit.DebugInfo->Spare[0] = 0;
1298 WARN(
"Unsupported interface!\n");
1330 TRACE(
" - flags = ");
1335 memset(&ddoi, 0,
sizeof(ddoi));
1338 for (
i = 0;
i <
This->data_format.wine_df->dwNumObjs;
i++)
1360 TRACE(
" - flags = ");
1365 memset(&ddoi, 0,
sizeof(ddoi));
1368 for (
i = 0;
i <
This->data_format.wine_df->dwNumObjs;
i++)
1430 FIXME(
"DIPROP_VIDPID not implemented\n");
1470 if (!
This->data_format.user_df)
return DI_OK;
1476 This->data_format.user_df->dwFlags &= ~DIDFT_AXIS;
1496 This->queue_head =
This->queue_tail =
This->overflow = 0;
1519 if (!found && (device_player =
1559 didoiW.
dwSize =
sizeof(didoiW);
1587 TRACE(
"(%p) %d(0x%08x) -> %p\n",
This, dwHow, dwObj, pdidoi);
1597 if (!
This->data_format.offsets)
break;
1598 for (
idx =
This->data_format.wine_df->dwNumObjs - 1;
idx >= 0;
idx--)
1599 if (
This->data_format.offsets[
idx] == dwObj)
break;
1602 dwObj &= 0x00ffffff;
1603 for (
idx =
This->data_format.wine_df->dwNumObjs - 1;
idx >= 0;
idx--)
1609 FIXME(
"dwHow = DIPH_BYUSAGE not implemented\n");
1612 WARN(
"invalid parameter: dwHow = %08x\n", dwHow);
1636 TRACE(
"(%p) %p -> %p(%d) x%d, 0x%08x\n",
1637 This, dod, entries, entries ? *entries : 0, dodsize,
flags);
1645 if (!
This->queue_len)
1661 for (
i = 0;
i <
len;
i++)
1663 int n = (
This->queue_tail +
i) %
This->queue_len;
1664 memcpy((
char *)dod + dodsize *
i,
This->data_queue +
n, dodsize);
1669 if (
This->overflow &&
This->dinput->dwVersion == 0x0800)
1681 TRACE(
"Returning %d events queued\n", *entries);
1731 FIXME(
"not available in the generic implementation\n");
1831 FIXME(
"(%p)->(%p): stub!\n",
This, lpDIEEsc);
1862 FIXME(
"(%p)->(0x%08x,%p,%p,0x%08x): stub!\n",
This, cbObjectData, rgdod, pdwInOut,
dwFlags);
1883 FIXME(
"(%p)->(%s,%p,%p,%08x): stub !\n",
This, lpszFileName, pec, pvRef,
dwFlags);
1907 FIXME(
"(%p)->(%s,%08x,%p,%08x): stub !\n",
This, lpszFileName, dwEntries, rgDiFileEft,
dwFlags);
1931#define X(x) if (dwFlags & x) FIXME("\tdwFlags =|"#x"\n");
1945 FIXME(
"(%p)->(%p): stub !\n",
This, lpdiDevImageInfoHeader);
1954 FIXME(
"(%p)->(%p): stub !\n",
This, lpdiDevImageInfoHeader);
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_tail(struct list_entry *head, struct list_entry *entry)
#define RegCloseKey(hKey)
void check_dinput_events(void)
void check_dinput_hooks(LPDIRECTINPUTDEVICE8W iface, BOOL acquired)
static HINSTANCE instance
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
BOOL WINAPI GetUserNameW(LPWSTR lpszName, LPDWORD lpSize)
#define HeapFree(x, y, z)
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
VOID WINAPI CoTaskMemFree(LPVOID ptr)
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static _In_ DWORD dwflags
static const WCHAR label[]
static const struct access_res create[16]
#define IsEqualGUID(rguid1, rguid2)
static unsigned __int64 next
_CRT_RESTORE_GCC_WARNINGS _CRT_DISABLE_GCC_WARNINGS _Check_return_ _CRTIMP _CONST_RETURN char *__cdecl strrchr(_In_z_ const char *_Str, _In_ int _Ch)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
WCHAR tszInstanceName[MAX_PATH]
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
#define FIELD_OFFSET(t, f)
#define CONTAINING_RECORD(address, type, field)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define HKEY_CURRENT_USER
BOOL WINAPI IsWindow(_In_opt_ HWND)
HWND WINAPI GetForegroundWindow(void)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
HWND WINAPI GetDesktopWindow(void)