⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 2 页
字号:
          return DIERR_INVALIDPARAM;        MsgWaitForMultipleObjectsEx(0, NULL, 0, 0, 0);        EnterCriticalSection(&(This->crit));        /* Copy item at a time for the case dodsize > sizeof(buffer[n]) */        while ((i < *entries || *entries == INFINITE) && i < This->count)          {            if (dod != NULL)              {                int n = (This->start + i) % This->buffersize;                LPDIDEVICEOBJECTDATA pd                   = (LPDIDEVICEOBJECTDATA)((BYTE *)dod + dodsize * i);                pd->dwOfs       = This->buffer[n].dwOfs;                pd->dwData      = This->buffer[n].dwData;                pd->dwTimeStamp = This->buffer[n].dwTimeStamp;                pd->dwSequence  = This->buffer[n].dwSequence;              }            i++;          }        *entries = i;        if (This->overflow)          ret = DI_BUFFEROVERFLOW;        if (!(flags & DIGDD_PEEK))          {            /* Empty buffer */            This->count -= i;            This->start = (This->start + i) % This->buffersize;            This->overflow = FALSE;          }        LeaveCriticalSection(&(This->crit));	TRACE("Returning %ld events queued\n", *entries);        return ret;}static HRESULT WINAPI SysKeyboardAImpl_EnumObjects(	LPDIRECTINPUTDEVICE8A iface,	LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback,	LPVOID lpvRef,	DWORD dwFlags){    ICOM_THIS(SysKeyboardImpl,iface);    DIDEVICEOBJECTINSTANCEA ddoi;    int i;        TRACE("(this=%p,%p,%p,%08lx)\n", This, lpCallback, lpvRef, dwFlags);    if (TRACE_ON(dinput)) {        TRACE("  - flags = ");	_dump_EnumObjects_flags(dwFlags);	TRACE("\n");    }    /* Only the fields till dwFFMaxForce are relevant */    memset(&ddoi, 0, sizeof(ddoi));    ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);    for (i = 0; i < 256; i++) {        /* Report 255 keys :-) */        ddoi.guidType = GUID_Key;	ddoi.dwOfs = i;	ddoi.dwType = DIDFT_MAKEINSTANCE(i) | DIDFT_BUTTON;	GetKeyNameTextA(((i & 0x7f) << 16) | ((i & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName));	_dump_OBJECTINSTANCEA(&ddoi);	if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;    }        return DI_OK;}static HRESULT WINAPI SysKeyboardWImpl_EnumObjects(LPDIRECTINPUTDEVICE8W iface,						   LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback,						   LPVOID lpvRef,						   DWORD dwFlags){  ICOM_THIS(SysKeyboardImpl,iface);  device_enumobjects_AtoWcb_data data;  data.lpCallBack = lpCallback;  data.lpvRef = lpvRef;  return SysKeyboardAImpl_EnumObjects((LPDIRECTINPUTDEVICE8A) This, (LPDIENUMDEVICEOBJECTSCALLBACKA) DIEnumDevicesCallbackAtoW, (LPVOID) &data, dwFlags);}static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface);static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface){	ICOM_THIS(SysKeyboardImpl,iface);	TRACE("(this=%p)\n",This);        if (This->acquired)          return S_FALSE;        This->acquired = 1;        if (current != NULL)          {            FIXME("Not more than one keyboard can be acquired at the same time.\n");            SysKeyboardAImpl_Unacquire(iface);          }        current = This;        if (This->buffersize > 0)          {            This->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,                                     This->buffersize * sizeof(*(This->buffer)));            This->start = 0;            This->count = 0;            This->overflow = FALSE;            InitializeCriticalSection(&(This->crit));          }        else          This->buffer = NULL;	return DI_OK;}static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE8A iface){	ICOM_THIS(SysKeyboardImpl,iface);	TRACE("(this=%p)\n",This);        if (This->acquired == 0)          return DI_NOEFFECT;        if (current == This)          current = NULL;        else          ERR("this != current\n");        This->acquired = 0;        if (This->buffersize >= 0)          {            HeapFree(GetProcessHeap(), 0, This->buffer);            This->buffer = NULL;            DeleteCriticalSection(&(This->crit));          }	return DI_OK;}static HRESULT WINAPI SysKeyboardAImpl_SetEventNotification(LPDIRECTINPUTDEVICE8A iface,							    HANDLE hnd) {  ICOM_THIS(SysKeyboardImpl,iface);  TRACE("(this=%p,0x%08lx)\n",This,(DWORD)hnd);  This->hEvent = hnd;  return DI_OK;}/******************************************************************************  *     GetCapabilities : get the device capablitites  */static HRESULT WINAPI SysKeyboardAImpl_GetCapabilities(	LPDIRECTINPUTDEVICE8A iface,	LPDIDEVCAPS lpDIDevCaps){  ICOM_THIS(SysKeyboardImpl,iface);  TRACE("(this=%p,%p)\n",This,lpDIDevCaps);  if (lpDIDevCaps->dwSize == sizeof(DIDEVCAPS)) {    lpDIDevCaps->dwFlags = DIDC_ATTACHED;    if (This->dinput->version >= 8)        lpDIDevCaps->dwDevType = DI8DEVTYPE_KEYBOARD | (DI8DEVTYPEKEYBOARD_UNKNOWN << 8);    else        lpDIDevCaps->dwDevType = DIDEVTYPE_KEYBOARD | (DIDEVTYPEKEYBOARD_UNKNOWN << 8);    lpDIDevCaps->dwAxes = 0;    lpDIDevCaps->dwButtons = 256;    lpDIDevCaps->dwPOVs = 0;    lpDIDevCaps->dwFFSamplePeriod = 0;    lpDIDevCaps->dwFFMinTimeResolution = 0;    lpDIDevCaps->dwFirmwareRevision = 100;    lpDIDevCaps->dwHardwareRevision = 100;    lpDIDevCaps->dwFFDriverVersion = 0;  } else {    /* DirectX 3.0 */    FIXME("DirectX 3.0 not supported....\n");  }  return DI_OK;}/******************************************************************************  *     GetObjectInfo : get information about a device object such as a button  *                     or axis  */static HRESULT WINAPISysKeyboardAImpl_GetObjectInfo(	LPDIRECTINPUTDEVICE8A iface,	LPDIDEVICEOBJECTINSTANCEA pdidoi,	DWORD dwObj,	DWORD dwHow){    ICOM_THIS(SysKeyboardImpl,iface);    DIDEVICEOBJECTINSTANCEA ddoi;    DWORD dwSize = pdidoi->dwSize;        TRACE("(this=%p,%p,%ld,0x%08lx)\n", This, pdidoi, dwObj, dwHow);    if (dwHow == DIPH_BYID) {        WARN(" querying by id not supported yet...\n");	return DI_OK;    }    memset(pdidoi, 0, dwSize);    memset(&ddoi, 0, sizeof(ddoi));    ddoi.dwSize = dwSize;    ddoi.guidType = GUID_Key;    ddoi.dwOfs = dwObj;    ddoi.dwType = DIDFT_MAKEINSTANCE(dwObj) | DIDFT_BUTTON;    GetKeyNameTextA(((dwObj & 0x7f) << 16) | ((dwObj & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName));    /* And return our just filled device object instance structure */    memcpy(pdidoi, &ddoi, (dwSize < sizeof(ddoi) ? dwSize : sizeof(ddoi)));        _dump_OBJECTINSTANCEA(pdidoi);    return DI_OK;}static HRESULT WINAPI SysKeyboardWImpl_GetObjectInfo(LPDIRECTINPUTDEVICE8W iface,						     LPDIDEVICEOBJECTINSTANCEW pdidoi,						     DWORD dwObj,						     DWORD dwHow){    ICOM_THIS(SysKeyboardImpl,iface);    DIDEVICEOBJECTINSTANCEW ddoi;    DWORD dwSize = pdidoi->dwSize;        TRACE("(this=%p,%p,%ld,0x%08lx)\n", This, pdidoi, dwObj, dwHow);    if (dwHow == DIPH_BYID) {        WARN(" querying by id not supported yet...\n");	return DI_OK;    }    memset(pdidoi, 0, dwSize);    memset(&ddoi, 0, sizeof(ddoi));    ddoi.dwSize = dwSize;    ddoi.guidType = GUID_Key;    ddoi.dwOfs = dwObj;    ddoi.dwType = DIDFT_MAKEINSTANCE(dwObj) | DIDFT_BUTTON;    GetKeyNameTextW(((dwObj & 0x7f) << 16) | ((dwObj & 0x80) << 17), ddoi.tszName, sizeof(ddoi.tszName));    /* And return our just filled device object instance structure */    memcpy(pdidoi, &ddoi, (dwSize < sizeof(ddoi) ? dwSize : sizeof(ddoi)));        _dump_OBJECTINSTANCEW(pdidoi);    return DI_OK;}/******************************************************************************  *     GetDeviceInfo : get information about a device's identity  */static HRESULT WINAPI SysKeyboardAImpl_GetDeviceInfo(	LPDIRECTINPUTDEVICE8A iface,	LPDIDEVICEINSTANCEA pdidi){    ICOM_THIS(SysKeyboardImpl,iface);    TRACE("(this=%p,%p)\n", This, pdidi);    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEA)) {        WARN(" dinput3 not supporte yet...\n");	return DI_OK;    }    fill_keyboard_dideviceinstanceA(pdidi, This->dinput->version);        return DI_OK;}static HRESULT WINAPI SysKeyboardWImpl_GetDeviceInfo(LPDIRECTINPUTDEVICE8W iface, LPDIDEVICEINSTANCEW pdidi) {    ICOM_THIS(SysKeyboardImpl,iface);    TRACE("(this=%p,%p)\n", This, pdidi);    if (pdidi->dwSize != sizeof(DIDEVICEINSTANCEW)) {        WARN(" dinput3 not supporte yet...\n");	return DI_OK;    }    fill_keyboard_dideviceinstanceW(pdidi, This->dinput->version);        return DI_OK;}static ICOM_VTABLE(IDirectInputDevice8A) SysKeyboardAvt ={	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE	IDirectInputDevice2AImpl_QueryInterface,	IDirectInputDevice2AImpl_AddRef,	SysKeyboardAImpl_Release,	SysKeyboardAImpl_GetCapabilities,	SysKeyboardAImpl_EnumObjects,	IDirectInputDevice2AImpl_GetProperty,	SysKeyboardAImpl_SetProperty,	SysKeyboardAImpl_Acquire,	SysKeyboardAImpl_Unacquire,	SysKeyboardAImpl_GetDeviceState,	SysKeyboardAImpl_GetDeviceData,	IDirectInputDevice2AImpl_SetDataFormat,	SysKeyboardAImpl_SetEventNotification,	IDirectInputDevice2AImpl_SetCooperativeLevel,	SysKeyboardAImpl_GetObjectInfo,	SysKeyboardAImpl_GetDeviceInfo,	IDirectInputDevice2AImpl_RunControlPanel,	IDirectInputDevice2AImpl_Initialize,	IDirectInputDevice2AImpl_CreateEffect,	IDirectInputDevice2AImpl_EnumEffects,	IDirectInputDevice2AImpl_GetEffectInfo,	IDirectInputDevice2AImpl_GetForceFeedbackState,	IDirectInputDevice2AImpl_SendForceFeedbackCommand,	IDirectInputDevice2AImpl_EnumCreatedEffectObjects,	IDirectInputDevice2AImpl_Escape,	IDirectInputDevice2AImpl_Poll,        IDirectInputDevice2AImpl_SendDeviceData,        IDirectInputDevice7AImpl_EnumEffectsInFile,        IDirectInputDevice7AImpl_WriteEffectToFile,        IDirectInputDevice8AImpl_BuildActionMap,        IDirectInputDevice8AImpl_SetActionMap,        IDirectInputDevice8AImpl_GetImageInfo};#if !defined(__STRICT_ANSI__) && defined(__GNUC__)# define XCAST(fun)	(typeof(SysKeyboardWvt.fun))#else# define XCAST(fun)	(void*)#endifstatic ICOM_VTABLE(IDirectInputDevice8W) SysKeyboardWvt ={	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE	IDirectInputDevice2WImpl_QueryInterface,	XCAST(AddRef)IDirectInputDevice2AImpl_AddRef,	XCAST(Release)SysKeyboardAImpl_Release,	XCAST(GetCapabilities)SysKeyboardAImpl_GetCapabilities,	SysKeyboardWImpl_EnumObjects,	XCAST(GetProperty)IDirectInputDevice2AImpl_GetProperty,	XCAST(SetProperty)SysKeyboardAImpl_SetProperty,	XCAST(Acquire)SysKeyboardAImpl_Acquire,	XCAST(Unacquire)SysKeyboardAImpl_Unacquire,	XCAST(GetDeviceState)SysKeyboardAImpl_GetDeviceState,	XCAST(GetDeviceData)SysKeyboardAImpl_GetDeviceData,	XCAST(SetDataFormat)IDirectInputDevice2AImpl_SetDataFormat,	XCAST(SetEventNotification)SysKeyboardAImpl_SetEventNotification,	XCAST(SetCooperativeLevel)IDirectInputDevice2AImpl_SetCooperativeLevel,	SysKeyboardWImpl_GetObjectInfo,	SysKeyboardWImpl_GetDeviceInfo,	XCAST(RunControlPanel)IDirectInputDevice2AImpl_RunControlPanel,	XCAST(Initialize)IDirectInputDevice2AImpl_Initialize,	XCAST(CreateEffect)IDirectInputDevice2AImpl_CreateEffect,	IDirectInputDevice2WImpl_EnumEffects,	IDirectInputDevice2WImpl_GetEffectInfo,	XCAST(GetForceFeedbackState)IDirectInputDevice2AImpl_GetForceFeedbackState,	XCAST(SendForceFeedbackCommand)IDirectInputDevice2AImpl_SendForceFeedbackCommand,	XCAST(EnumCreatedEffectObjects)IDirectInputDevice2AImpl_EnumCreatedEffectObjects,	XCAST(Escape)IDirectInputDevice2AImpl_Escape,	XCAST(Poll)IDirectInputDevice2AImpl_Poll,        XCAST(SendDeviceData)IDirectInputDevice2AImpl_SendDeviceData,        IDirectInputDevice7WImpl_EnumEffectsInFile,        IDirectInputDevice7WImpl_WriteEffectToFile,        IDirectInputDevice8WImpl_BuildActionMap,        IDirectInputDevice8WImpl_SetActionMap,        IDirectInputDevice8WImpl_GetImageInfo};#undef XCAST

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -