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

📄 linux.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 2 页
字号:
) {    ICOM_THIS(JoystickImpl,iface);    joy_polldev(This);    TRACE("(this=%p,0x%08lx,%p)\n",This,len,ptr);    if (len != sizeof(DIJOYSTATE)) {    	FIXME("len %ld is not sizeof(DIJOYSTATE), unsupported format.\n",len);    }    memcpy(ptr,&(This->js),len);    This->queue_head = 0;    This->queue_tail = 0;    return 0;}/******************************************************************************  *     GetDeviceData : gets buffered input data.  */static HRESULT WINAPI JoystickAImpl_GetDeviceData(LPDIRECTINPUTDEVICE8A iface,					      DWORD dodsize,					      LPDIDEVICEOBJECTDATA dod,					      LPDWORD entries,					      DWORD flags) {  ICOM_THIS(JoystickImpl,iface);  FIXME("(%p)->(dods=%ld,entries=%ld,fl=0x%08lx),STUB!\n",This,dodsize,*entries,flags);  joy_polldev(This);  if (flags & DIGDD_PEEK)    FIXME("DIGDD_PEEK\n");  if (dod == NULL) {  } else {  }  return 0;}/******************************************************************************  *     SetProperty : change input device properties  */static HRESULT WINAPI JoystickAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface,					    REFGUID rguid,					    LPCDIPROPHEADER ph){  ICOM_THIS(JoystickImpl,iface);  FIXME("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);  FIXME("ph.dwSize = %ld, ph.dwHeaderSize =%ld, ph.dwObj = %ld, ph.dwHow= %ld\n",ph->dwSize, ph->dwHeaderSize,ph->dwObj,ph->dwHow);  if (!HIWORD(rguid)) {    switch ((DWORD)rguid) {    case (DWORD) DIPROP_BUFFERSIZE: {      LPCDIPROPDWORD	pd = (LPCDIPROPDWORD)ph;      FIXME("buffersize = %ld\n",pd->dwData);      break;    }    case (DWORD)DIPROP_RANGE: {      LPCDIPROPRANGE	pr = (LPCDIPROPRANGE)ph;      FIXME("proprange(%ld,%ld)\n",pr->lMin,pr->lMax);      This->lMin = pr->lMin;      This->lMax = pr->lMax;      break;    }    case (DWORD)DIPROP_DEADZONE: {      LPCDIPROPDWORD	pd = (LPCDIPROPDWORD)ph;      FIXME("deadzone(%ld)\n",pd->dwData);      This->deadzone = pd->dwData;      break;    }    default:      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid));      break;    }  }  return 0;}/******************************************************************************  *     SetEventNotification : specifies event to be sent on state change  */static HRESULT WINAPI JoystickAImpl_SetEventNotification(	LPDIRECTINPUTDEVICE8A iface, HANDLE hnd) {    ICOM_THIS(JoystickImpl,iface);    TRACE("(this=%p,0x%08lx)\n",This,(DWORD)hnd);    This->hEvent = hnd;    return DI_OK;}static HRESULT WINAPI JoystickAImpl_GetCapabilities(	LPDIRECTINPUTDEVICE8A iface,	LPDIDEVCAPS lpDIDevCaps){    ICOM_THIS(JoystickImpl,iface);    BYTE	axes,buttons;    int		xfd = This->joyfd;    TRACE("%p->(%p)\n",iface,lpDIDevCaps);    if (xfd==-1)    	xfd = open(JOYDEV,O_RDONLY);    lpDIDevCaps->dwFlags	= DIDC_ATTACHED;    lpDIDevCaps->dwDevType	= DIDEVTYPE_JOYSTICK;#ifdef JSIOCGAXES    if (-1==ioctl(xfd,JSIOCGAXES,&axes))    	axes = 2;    lpDIDevCaps->dwAxes = axes;#endif#ifdef JSIOCGBUTTONS    if (-1==ioctl(xfd,JSIOCGAXES,&buttons))    	buttons = 2;    lpDIDevCaps->dwButtons = buttons;#endif    if (xfd!=This->joyfd)    	close(xfd);    return DI_OK;}static HRESULT WINAPI JoystickAImpl_Poll(LPDIRECTINPUTDEVICE8A iface) {    ICOM_THIS(JoystickImpl,iface);    TRACE("(),stub!\n");    joy_polldev(This);    return DI_OK;}/******************************************************************************  *     EnumObjects : enumerate the different buttons and axis...  */static HRESULT WINAPI JoystickAImpl_EnumObjects(	LPDIRECTINPUTDEVICE8A iface,	LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback,	LPVOID lpvRef,	DWORD dwFlags){  ICOM_THIS(JoystickImpl,iface);  DIDEVICEOBJECTINSTANCEA ddoi;  int xfd = This->joyfd;  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 */  ddoi.dwSize = FIELD_OFFSET(DIDEVICEOBJECTINSTANCEA, dwFFMaxForce);  /* For the joystick, do as is done in the GetCapabilities function */  if ((dwFlags == DIDFT_ALL) ||      (dwFlags & DIDFT_AXIS)) {    BYTE axes, i;#ifdef JSIOCGAXES    if (-1==ioctl(xfd,JSIOCGAXES,&axes))      axes = 2;#endif    for (i = 0; i < axes; i++) {      switch (i) {      case 0:	ddoi.guidType = GUID_XAxis;	ddoi.dwOfs = DIJOFS_X;	break;      case 1:	ddoi.guidType = GUID_YAxis;	ddoi.dwOfs = DIJOFS_Y;	break;      case 2:	ddoi.guidType = GUID_ZAxis;	ddoi.dwOfs = DIJOFS_Z;	break;      default:	ddoi.guidType = GUID_Unknown;	ddoi.dwOfs = DIJOFS_Z + (i - 2) * sizeof(LONG);      }      ddoi.dwType = DIDFT_MAKEINSTANCE((0x0001 << i) << WINE_JOYSTICK_AXIS_BASE) | DIDFT_ABSAXIS;      sprintf(ddoi.tszName, "%d-Axis", i);      _dump_OBJECTINSTANCEA(&ddoi);      if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;    }  }  if ((dwFlags == DIDFT_ALL) ||      (dwFlags & DIDFT_BUTTON)) {    BYTE buttons, i;#ifdef JSIOCGBUTTONS    if (-1==ioctl(xfd,JSIOCGAXES,&buttons))      buttons = 2;#endif    /* The DInput SDK says that GUID_Button is only for mouse buttons but well... */    ddoi.guidType = GUID_Button;    for (i = 0; i < buttons; i++) {      ddoi.dwOfs = DIJOFS_BUTTON(i);      ddoi.dwType = DIDFT_MAKEINSTANCE((0x0001 << i) << WINE_JOYSTICK_BUTTON_BASE) | DIDFT_PSHBUTTON;      sprintf(ddoi.tszName, "%d-Button", i);      _dump_OBJECTINSTANCEA(&ddoi);      if (lpCallback(&ddoi, lpvRef) != DIENUM_CONTINUE) return DI_OK;    }  }  if (xfd!=This->joyfd)    close(xfd);  return DI_OK;}/******************************************************************************  *     EnumObjects : enumerate the different buttons and axis...  */static HRESULT WINAPI JoystickWImpl_EnumObjects(	LPDIRECTINPUTDEVICE8W iface,	LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback,	LPVOID lpvRef,	DWORD dwFlags){  ICOM_THIS(JoystickImpl,iface);  device_enumobjects_AtoWcb_data data;  data.lpCallBack = lpCallback;  data.lpvRef = lpvRef;  return JoystickAImpl_EnumObjects((LPDIRECTINPUTDEVICE8A) This, (LPDIENUMDEVICEOBJECTSCALLBACKA) DIEnumDevicesCallbackAtoW, (LPVOID) &data, dwFlags);}/******************************************************************************  *     GetProperty : get input device properties  */static HRESULT WINAPI JoystickAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface,						REFGUID rguid,						LPDIPROPHEADER pdiph){  ICOM_THIS(JoystickImpl,iface);  TRACE("(this=%p,%s,%p): stub!\n",	iface, debugstr_guid(rguid), pdiph);  if (TRACE_ON(dinput))    _dump_DIPROPHEADER(pdiph);  if (!HIWORD(rguid)) {    switch ((DWORD)rguid) {    case (DWORD) DIPROP_BUFFERSIZE: {      LPDIPROPDWORD	pd = (LPDIPROPDWORD)pdiph;      TRACE(" return buffersize = %d\n",This->queue_len);      pd->dwData = This->queue_len;      break;    }    case (DWORD) DIPROP_RANGE: {      LPDIPROPRANGE pr = (LPDIPROPRANGE) pdiph;      if ((pdiph->dwHow == DIPH_BYID) &&	  (pdiph->dwObj & DIDFT_ABSAXIS)) {	/* The app is querying the current range of the axis : return the lMin and lMax values */	pr->lMin = This->lMin;	pr->lMax = This->lMax;      }      break;    }    default:      FIXME("Unknown type %ld (%s)\n",(DWORD)rguid,debugstr_guid(rguid));      break;    }  }  return DI_OK;}static ICOM_VTABLE(IDirectInputDevice8A) JoystickAvt ={	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE	IDirectInputDevice2AImpl_QueryInterface,	IDirectInputDevice2AImpl_AddRef,	JoystickAImpl_Release,	JoystickAImpl_GetCapabilities,	JoystickAImpl_EnumObjects,	JoystickAImpl_GetProperty,	JoystickAImpl_SetProperty,	JoystickAImpl_Acquire,	JoystickAImpl_Unacquire,	JoystickAImpl_GetDeviceState,	JoystickAImpl_GetDeviceData,	JoystickAImpl_SetDataFormat,	JoystickAImpl_SetEventNotification,	IDirectInputDevice2AImpl_SetCooperativeLevel,	IDirectInputDevice2AImpl_GetObjectInfo,	IDirectInputDevice2AImpl_GetDeviceInfo,	IDirectInputDevice2AImpl_RunControlPanel,	IDirectInputDevice2AImpl_Initialize,	IDirectInputDevice2AImpl_CreateEffect,	IDirectInputDevice2AImpl_EnumEffects,	IDirectInputDevice2AImpl_GetEffectInfo,	IDirectInputDevice2AImpl_GetForceFeedbackState,	IDirectInputDevice2AImpl_SendForceFeedbackCommand,	IDirectInputDevice2AImpl_EnumCreatedEffectObjects,	IDirectInputDevice2AImpl_Escape,	JoystickAImpl_Poll,	IDirectInputDevice2AImpl_SendDeviceData,	IDirectInputDevice7AImpl_EnumEffectsInFile,	IDirectInputDevice7AImpl_WriteEffectToFile,	IDirectInputDevice8AImpl_BuildActionMap,	IDirectInputDevice8AImpl_SetActionMap,	IDirectInputDevice8AImpl_GetImageInfo};#if !defined(__STRICT_ANSI__) && defined(__GNUC__)# define XCAST(fun)	(typeof(SysJoystickWvt.fun))#else# define XCAST(fun)	(void*)#endifstatic ICOM_VTABLE(IDirectInputDevice8W) SysJoystickWvt ={	ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE	IDirectInputDevice2WImpl_QueryInterface,	XCAST(AddRef)IDirectInputDevice2AImpl_AddRef,	XCAST(Release)JoystickAImpl_Release,	XCAST(GetCapabilities)JoystickAImpl_GetCapabilities,	JoystickWImpl_EnumObjects,	XCAST(GetProperty)JoystickAImpl_GetProperty,	XCAST(SetProperty)JoystickAImpl_SetProperty,	XCAST(Acquire)JoystickAImpl_Acquire,	XCAST(Unacquire)JoystickAImpl_Unacquire,	XCAST(GetDeviceState)JoystickAImpl_GetDeviceState,	XCAST(GetDeviceData)JoystickAImpl_GetDeviceData,	XCAST(SetDataFormat)JoystickAImpl_SetDataFormat,	XCAST(SetEventNotification)JoystickAImpl_SetEventNotification,	XCAST(SetCooperativeLevel)IDirectInputDevice2AImpl_SetCooperativeLevel,	IDirectInputDevice2WImpl_GetObjectInfo,	IDirectInputDevice2WImpl_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)JoystickAImpl_Poll,	XCAST(SendDeviceData)IDirectInputDevice2AImpl_SendDeviceData,        IDirectInputDevice7WImpl_EnumEffectsInFile,        IDirectInputDevice7WImpl_WriteEffectToFile,        IDirectInputDevice8WImpl_BuildActionMap,        IDirectInputDevice8WImpl_SetActionMap,        IDirectInputDevice8WImpl_GetImageInfo};#undef XCAST#endif  /* HAVE_LINUX_22_JOYSTICK_API */

⌨️ 快捷键说明

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