Commit 120e4576 authored by David Faure's avatar David Faure Committed by Alexandre Julliard

Rewrote the two routines using the vkey->scancode array to use

keyc2vkey for each keycode, instead. Not tested. Removed unused IDirectInputDeviceA_GetDeviceState. Fixed warning in TRACE() call.
parent 6f75dc44
...@@ -34,7 +34,8 @@ ...@@ -34,7 +34,8 @@
#include "debug.h" #include "debug.h"
extern BYTE InputKeyStateTable[256]; extern BYTE InputKeyStateTable[256];
extern BYTE vkey2scode[512]; extern int min_keycode, max_keycode;
extern WORD keyc2vkey[256];
static IDirectInputA_VTable ddiavt; static IDirectInputA_VTable ddiavt;
static IDirectInputDeviceA_VTable SysKeyboardAvt; static IDirectInputDeviceA_VTable SysKeyboardAvt;
...@@ -269,14 +270,19 @@ static HRESULT WINAPI SysKeyboardA_GetDeviceState( ...@@ -269,14 +270,19 @@ static HRESULT WINAPI SysKeyboardA_GetDeviceState(
LPDIRECTINPUTDEVICE32A this,DWORD len,LPVOID ptr LPDIRECTINPUTDEVICE32A this,DWORD len,LPVOID ptr
) { ) {
if (len==256) { if (len==256) {
int i; int keyc,vkey;
memset(ptr,0,256); memset(ptr,0,256);
for (i=0;i<256;i++) for (keyc=min_keycode;keyc<max_keycode;keyc++)
if (InputKeyStateTable[i]&0x80) { {
((LPBYTE)ptr)[vkey2scode[i] ]=0x80; /* X keycode to virtual key */
((LPBYTE)ptr)[vkey2scode[i]|0x80]=0x80; vkey = keyc2vkey[keyc] & 0xFF;
} /* The windows scancode is keyc-min_keycode */
if (InputKeyStateTable[vkey]&0x80) {
((LPBYTE)ptr)[keyc-min_keycode]=0x80;
((LPBYTE)ptr)[(keyc-min_keycode)|0x80]=0x80;
}
}
return 0; return 0;
} }
WARN(dinput,"whoops, SysKeyboardA_GetDeviceState got len %ld?\n",len); WARN(dinput,"whoops, SysKeyboardA_GetDeviceState got len %ld?\n",len);
...@@ -287,7 +293,7 @@ static HRESULT WINAPI SysKeyboardA_GetDeviceData( ...@@ -287,7 +293,7 @@ static HRESULT WINAPI SysKeyboardA_GetDeviceData(
LPDIRECTINPUTDEVICE32A this,DWORD dodsize,LPDIDEVICEOBJECTDATA dod, LPDIRECTINPUTDEVICE32A this,DWORD dodsize,LPDIDEVICEOBJECTDATA dod,
LPDWORD entries,DWORD flags LPDWORD entries,DWORD flags
) { ) {
int i,n,xentries; int keyc,n,vkey,xentries;
LPSYSKEYBOARD32A kthis = (LPSYSKEYBOARD32A)this; LPSYSKEYBOARD32A kthis = (LPSYSKEYBOARD32A)this;
TRACE(dinput,"(this=%p,%ld,%p,%p(%ld)),0x%08lx)\n", TRACE(dinput,"(this=%p,%ld,%p,%p(%ld)),0x%08lx)\n",
...@@ -298,20 +304,27 @@ static HRESULT WINAPI SysKeyboardA_GetDeviceData( ...@@ -298,20 +304,27 @@ static HRESULT WINAPI SysKeyboardA_GetDeviceData(
else else
xentries = 1; xentries = 1;
for (n=i=0;(i<256) && (n<*entries);i++) { n = 0;
if (kthis->keystate[i] == (InputKeyStateTable[i]&0x80))
for (keyc=min_keycode;(keyc<max_keycode) && (n<*entries);keyc++)
{
/* X keycode to virtual key */
vkey = keyc2vkey[keyc] & 0xFF;
if (kthis->keystate[vkey] == (InputKeyStateTable[vkey]&0x80))
continue; continue;
if (dod) { if (dod) {
/* add an entry */ /* add an entry */
dod[n].dwOfs = vkey2scode[i]; dod[n].dwOfs = keyc-min_keycode; /* scancode */
dod[n].dwData = InputKeyStateTable[i]&0x80; dod[n].dwData = InputKeyStateTable[vkey]&0x80;
dod[n].dwTimeStamp = 0; /* umm */ dod[n].dwTimeStamp = 0; /* umm */
dod[n].dwSequence = 0; /* umm */ dod[n].dwSequence = 0; /* umm */
n++; n++;
} }
if (!(flags & DIGDD_PEEK)) if (!(flags & DIGDD_PEEK))
kthis->keystate[i] = InputKeyStateTable[i]&0x80; kthis->keystate[vkey] = InputKeyStateTable[vkey]&0x80;
}
}
if (n) fprintf(stderr,"%d entries\n",n); if (n) fprintf(stderr,"%d entries\n",n);
*entries = n; *entries = n;
return 0; return 0;
...@@ -327,14 +340,6 @@ static HRESULT WINAPI SysKeyboardA_Unacquire(LPDIRECTINPUTDEVICE32A this) { ...@@ -327,14 +340,6 @@ static HRESULT WINAPI SysKeyboardA_Unacquire(LPDIRECTINPUTDEVICE32A this) {
return 0; return 0;
} }
static HRESULT WINAPI IDirectInputDeviceA_GetDeviceState(
LPDIRECTINPUTDEVICE32A this,DWORD len,LPVOID ptr
) {
FIXME(dinput,"(this=%p,0x%08lx,%p): stub\n",this,len,ptr);
return 0;
}
static HRESULT WINAPI IDirectInputDeviceA_QueryInterface( static HRESULT WINAPI IDirectInputDeviceA_QueryInterface(
LPDIRECTINPUTDEVICE32A this,REFIID riid,LPVOID *ppobj LPDIRECTINPUTDEVICE32A this,REFIID riid,LPVOID *ppobj
) { ) {
...@@ -381,7 +386,7 @@ static HRESULT WINAPI SysMouseA_SetDataFormat( ...@@ -381,7 +386,7 @@ static HRESULT WINAPI SysMouseA_SetDataFormat(
strcpy(xbuf,"<no guid>"); strcpy(xbuf,"<no guid>");
TRACE(dinput,"df.rgodf[%d].guid %s\n",i,xbuf); TRACE(dinput,"df.rgodf[%d].guid %s\n",i,xbuf);
TRACE(dinput,"df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs); TRACE(dinput,"df.rgodf[%d].dwOfs %ld\n",i,df->rgodf[i].dwOfs);
TRACE(dinput,"dwType 0x%02lx,dwInstance %ld\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType)); TRACE(dinput,"dwType 0x%02x,dwInstance %d\n",DIDFT_GETTYPE(df->rgodf[i].dwType),DIDFT_GETINSTANCE(df->rgodf[i].dwType));
TRACE(dinput,"df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags); TRACE(dinput,"df.rgodf[%d].dwFlags 0x%08lx\n",i,df->rgodf[i].dwFlags);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment