Christoph Frick : dinput: Simplify the code that finds the offset of the given linux event.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Nov 24 06:19:41 CST 2006


Module: wine
Branch: master
Commit: 53620bc77b50a87cec767e292b572302f47a6e3a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=53620bc77b50a87cec767e292b572302f47a6e3a

Author: Christoph Frick <frick at sc-networks.de>
Date:   Fri Nov 24 09:19:57 2006 +0100

dinput: Simplify the code that finds the offset of the given linux event.

---

 dlls/dinput/joystick_linuxinput.c |   88 ++++++++++++-------------------------
 1 files changed, 29 insertions(+), 59 deletions(-)

diff --git a/dlls/dinput/joystick_linuxinput.c b/dlls/dinput/joystick_linuxinput.c
index 18588aa..66aa43e 100644
--- a/dlls/dinput/joystick_linuxinput.c
+++ b/dlls/dinput/joystick_linuxinput.c
@@ -154,7 +154,7 @@ static void fake_current_js_state(Joysti
 static int find_property_offset(JoystickImpl *This, LPCDIPROPHEADER ph);
 static DWORD map_pov(int event_value, int is_x);
 static void find_joydevs(void);
-static int lxinput_to_djoy2_offset(int ie_type, int ie_code);
+static int lxinput_to_user_offset(JoystickImpl *This, int ie_type, int ie_code);
 static int offset_to_object(JoystickImpl *This, int offset);
 static void calculate_ids(LPDIDATAFORMAT df);
 
@@ -761,41 +761,42 @@ static int find_property_offset(Joystick
 
 /* defines how the linux input system offset mappings into c_dfDIJoystick2 */
 static int
-lxinput_to_djoy2_offset( int ie_type, int ie_code )
+lxinput_to_user_offset(JoystickImpl *This, int ie_type, int ie_code )
 {
+  int offset = -1;
   switch (ie_type) {
     case EV_ABS:
       switch (ie_code) {
-        case ABS_X:             return 0;
-        case ABS_Y:             return 1;
-        case ABS_Z:             return 2;
-        case ABS_RX:            return 3;
-        case ABS_RY:            return 4;
-        case ABS_RZ:            return 5;
-        case ABS_THROTTLE:      return 6;
-        case ABS_RUDDER:        return 7;
-        case ABS_HAT0X:
-        case ABS_HAT0Y:         return 8;
-        case ABS_HAT1X: 
-        case ABS_HAT1Y:         return 9;
-        case ABS_HAT2X: 
-        case ABS_HAT2Y:         return 10;
-        case ABS_HAT3X:
-        case ABS_HAT3Y:         return 11;
+        case ABS_X:                     offset = 0; break;
+        case ABS_Y:                     offset = 1; break;
+        case ABS_Z:                     offset = 2; break;
+        case ABS_RX:                    offset = 3; break;
+        case ABS_RY:                    offset = 4; break;
+        case ABS_RZ:                    offset = 5; break;
+        case ABS_THROTTLE:              offset = 6; break;
+        case ABS_RUDDER:                offset = 7; break;
+        case ABS_HAT0X: case ABS_HAT0Y: offset = 8; break;
+        case ABS_HAT1X: case ABS_HAT1Y: offset = 9; break;
+        case ABS_HAT2X: case ABS_HAT2Y: offset = 10; break;
+        case ABS_HAT3X: case ABS_HAT3Y: offset = 11; break;
+        /* XXX when adding new axes here also fix the offset for the buttons bellow */
         default:
           FIXME("Unhandled EV_ABS(0x%02X)\n", ie_code);
           return -1;
       }
+      break;
     case EV_KEY:
-      if (ie_code < 128) {
-        return 12 + ie_code;
-      } else {
+      if (ie_code >= 128) {
         WARN("DX8 does not support more than 128 buttons\n");
+        return -1;
       }
+      offset = 12 + ie_code; /* XXX */
+      break;
+    default:
+      FIXME("Unhandled type(0x%02X)\n", ie_type);
       return -1;
   }
-  FIXME("Unhandled type(0x%02X)\n", ie_type);
-  return -1;
+  return This->offsets[offset];
 }
 
 /* convert wine format offset to user format object index */
@@ -888,14 +889,7 @@ static void joy_polldev(JoystickImpl *Th
             TRACE("(%p) %d -> %d\n", This, ie.code, btn);
             if (btn&0x80) {
               btn &= 0x7F;
-	      /* see if there is a mapping */
-	      offset = lxinput_to_djoy2_offset(ie.type, btn);
-	      if (offset==-1) {
-		return;
-	      }
-	      /* and see if there is an offset in the df */
-	      offset = This->offsets[offset];
-	      if (offset==-1) {
+	      if ((offset = lxinput_to_user_offset(This, ie.type, btn)) == -1) {
 		return;
 	      }
               This->js.rgbButtons[btn] = ie.value?0x80:0x00;
@@ -903,14 +897,7 @@ static void joy_polldev(JoystickImpl *Th
             }
             break;
 	case EV_ABS:
-            /* see if there is a mapping */
-            offset = lxinput_to_djoy2_offset(ie.type, ie.code);
-            if (offset==-1) {
-              return;
-            }
-            /* and see if there is an offset in the df */
-            offset = This->offsets[offset];
-            if (offset==-1) {
+            if ((offset = lxinput_to_user_offset(This, ie.type, ie.code)) == -1) {
               return;
             }
 	    switch (ie.code) {
@@ -1289,8 +1276,6 @@ static HRESULT WINAPI JoystickAImpl_Enum
 	ddoi.guidType = GUID_RzAxis;
 	break;
       case ABS_THROTTLE:
-	ddoi.guidType = GUID_Slider;
-	break;
       case ABS_RUDDER:
 	ddoi.guidType = GUID_Slider;
 	break;
@@ -1304,12 +1289,7 @@ static HRESULT WINAPI JoystickAImpl_Enum
   	FIXME("unhandled abs axis 0x%02x, ignoring!\n",i);
 	continue;
       }
-      user_offset = lxinput_to_djoy2_offset(EV_ABS, i);
-      if (user_offset == -1) {
-        continue;
-      }
-      user_offset = This->offsets[user_offset];
-      if (user_offset == -1) {
+      if ((user_offset = lxinput_to_user_offset(This, EV_ABS, i)) == -1) {
         continue;
       }
       user_object = offset_to_object(This, user_offset);
@@ -1334,12 +1314,7 @@ static HRESULT WINAPI JoystickAImpl_Enum
     ddoi.guidType = GUID_POV;
     for (i=0; i<4; i++) {
       if (test_bit(This->joydev->absbits,ABS_HAT0X+(i<<1)) && test_bit(This->joydev->absbits,ABS_HAT0Y+(i<<1))) {
-        user_offset = lxinput_to_djoy2_offset(EV_ABS, ABS_HAT0X+i);
-        if (user_offset == -1) {
-          continue;
-        }
-        user_offset = This->offsets[user_offset];
-        if (user_offset == -1) {
+        if ((user_offset = lxinput_to_user_offset(This, EV_ABS, ABS_HAT0X+i))== -1) {
           continue;
         }
         user_object = offset_to_object(This, user_offset);
@@ -1364,12 +1339,7 @@ static HRESULT WINAPI JoystickAImpl_Enum
 
     for (i = 0; i < KEY_MAX; i++) {
       if (!test_bit(This->joydev->keybits,i)) continue;
-      user_offset = lxinput_to_djoy2_offset(EV_KEY, btncount);
-      if (user_offset == -1) {
-        continue;
-      }
-      user_offset = This->offsets[user_offset];
-      if (user_offset == -1) {
+      if ((user_offset = lxinput_to_user_offset(This, EV_KEY, btncount)) == -1) {
         continue;
       }
       user_object = offset_to_object(This, user_offset);




More information about the wine-cvs mailing list