rnd-20111007-1-src
[rocksndiamonds.git] / src / libgame / joystick.c
index af30a82067eb8812399b6c5eb26f5ca3fdf100e7..d5a78a290465dfa71730ab29d00de1fe7ef23e92 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Artsoft Retro-Game Library                               *
 *----------------------------------------------------------*
-* (c) 1995-2002 Artsoft Entertainment                      *
+* (c) 1995-2006 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
 
 
 /* ========================================================================= */
-/* platform dependant joystick functions                                     */
+/* platform dependent joystick functions                                     */
 /* ========================================================================= */
 
 #if defined(PLATFORM_UNIX) && !defined(TARGET_SDL)
 void UnixInitJoysticks()
 {
+  static boolean unix_joystick_subsystem_initialized = FALSE;
+  boolean print_warning = !unix_joystick_subsystem_initialized;
   int i;
 
-  for (i=0; i<MAX_PLAYERS; i++)
+  for (i = 0; i < MAX_PLAYERS; i++)
   {
     char *device_name = setup.input[i].joy.device_name;
 
@@ -44,18 +46,24 @@ void UnixInitJoysticks()
 
     if (access(device_name, R_OK) != 0)
     {
-      Error(ERR_WARN, "cannot access joystick device '%s'", device_name);
+      if (print_warning)
+       Error(ERR_WARN, "cannot access joystick device '%s'", device_name);
+
       continue;
     }
 
     if ((joystick.fd[i] = open(device_name, O_RDONLY)) < 0)
     {
-      Error(ERR_WARN, "cannot open joystick device '%s'", device_name);
+      if (print_warning)
+       Error(ERR_WARN, "cannot open joystick device '%s'", device_name);
+
       continue;
     }
 
     joystick.status = JOYSTICK_ACTIVATED;
   }
+
+  unix_joystick_subsystem_initialized = TRUE;
 }
 
 boolean UnixReadJoystick(int fd, int *x, int *y, boolean *b1, boolean *b2)
@@ -97,7 +105,7 @@ boolean UnixReadJoystick(int fd, int *x, int *y, boolean *b1, boolean *b2)
 
 
 /* ========================================================================= */
-/* platform independant joystick functions                                   */
+/* platform independent joystick functions                                   */
 /* ========================================================================= */
 
 #define TRANSLATE_JOYSYMBOL_TO_JOYNAME 0
@@ -125,7 +133,7 @@ void translate_joyname(int *joysymbol, char **name, int mode)
   {
     *name = "[undefined]";
 
-    for (i=0; i<6; i++)
+    for (i = 0; i < 6; i++)
     {
       if (*joysymbol == translate_joy[i].joysymbol)
       {
@@ -138,9 +146,9 @@ void translate_joyname(int *joysymbol, char **name, int mode)
   {
     *joysymbol = 0;
 
-    for (i=0; i<6; i++)
+    for (i = 0; i < 6; i++)
     {
-      if (strcmp(*name, translate_joy[i].name) == 0)
+      if (strEqual(*name, translate_joy[i].name))
       {
        *joysymbol = translate_joy[i].joysymbol;
        break;
@@ -200,7 +208,7 @@ char *getDeviceNameFromJoystickNr(int joystick_nr)
 
 static int JoystickPositionPercent(int center, int border, int actual)
 {
-  long range, position;
+  int range, position;
   int percent;
 
   if (border < center && actual > center)
@@ -224,7 +232,7 @@ void CheckJoystickData()
   int i;
   int distance = 100;
 
-  for(i=0; i<MAX_PLAYERS; i++)
+  for (i = 0; i < MAX_PLAYERS; i++)
   {
     if (setup.input[i].joy.xleft >= setup.input[i].joy.xmiddle)
       setup.input[i].joy.xleft = setup.input[i].joy.xmiddle - distance;
@@ -317,7 +325,7 @@ int AnyJoystick()
   int i;
   int result = 0;
 
-  for (i=0; i<MAX_PLAYERS; i++)
+  for (i = 0; i < MAX_PLAYERS; i++)
     result |= Joystick(i);
 
   return result;
@@ -326,9 +334,9 @@ int AnyJoystick()
 int AnyJoystickButton()
 {
   int i;
-  int result;
+  int result = JOY_BUTTON_NOT_PRESSED;
 
-  for (i=0; i<MAX_PLAYERS; i++)
+  for (i = 0; i < MAX_PLAYERS; i++)
   {
     result = JoystickButton(i);
     if (result != JOY_BUTTON_NOT_PRESSED)