rnd-20000806-1-src
[rocksndiamonds.git] / src / main.c
index 86b7eb179e4668d08a7a03590c041cbd36455783..7c51c2b6810683cee41230f8c2dc72f1691a2835 100644 (file)
@@ -747,6 +747,193 @@ void TEST_SDL_EVENT_LOOP()
   SDL_Quit();
 }
 
+#define SCREEN_WIDTH   640
+#define SCREEN_HEIGHT  480
+
+void WatchJoysticks()
+{
+       SDL_Surface *screen;
+       const char *name;
+       int i, done;
+       SDL_Event event;
+       int x, y, draw;
+       SDL_Rect axis_area[2];
+       int joystick_nr = 0;
+       SDL_Joystick *joystick = Get_SDL_Joystick(joystick_nr);
+
+       /* Set a video mode to display joystick axis position */
+       screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, 0);
+       if ( screen == NULL ) {
+               fprintf(stderr, "Couldn't set video mode: %s\n",SDL_GetError());
+               return;
+       }
+
+       /* Print info about the joysticks we are watching */
+       for (i=0; i<2; i++)
+       {
+         joystick = Get_SDL_Joystick(i);
+
+         name = SDL_JoystickName(i);
+         printf("Watching joystick %d: (%s)\n", i,
+                name ? name : "Unknown Joystick");
+         printf("Joystick has %d axes, %d hats, %d balls, and %d buttons\n",
+                SDL_JoystickNumAxes(joystick),
+                SDL_JoystickNumHats(joystick),
+                SDL_JoystickNumBalls(joystick),
+                SDL_JoystickNumButtons(joystick));
+       }
+
+       /* Initialize drawing rectangles */
+       memset(axis_area, 0, (sizeof axis_area));
+       draw = 0;
+
+       /* Loop, getting joystick events! */
+       done = 0;
+       while ( ! done ) {
+               while ( SDL_PollEvent(&event) ) {
+                       switch (event.type) {
+                           case SDL_JOYAXISMOTION:
+                             joystick_nr = event.jaxis.which;
+                               printf("Joystick %d axis %d value: %d\n",
+                                      event.jaxis.which,
+                                      event.jaxis.axis,
+                                      event.jaxis.value);
+                               break;
+                           case SDL_JOYHATMOTION:
+                             joystick_nr = event.jaxis.which;
+                               printf("Joystick %d hat %d value:",
+                                      event.jhat.which,
+                                      event.jhat.hat);
+                               if ( event.jhat.value == SDL_HAT_CENTERED )
+                                       printf(" centered");
+                               if ( event.jhat.value & SDL_HAT_UP )
+                                       printf(" up");
+                               if ( event.jhat.value & SDL_HAT_RIGHT )
+                                       printf(" right");
+                               if ( event.jhat.value & SDL_HAT_DOWN )
+                                       printf(" down");
+                               if ( event.jhat.value & SDL_HAT_LEFT )
+                                       printf(" left");
+                               printf("\n");
+                               break;
+                           case SDL_JOYBALLMOTION:
+                             joystick_nr = event.jaxis.which;
+                               printf("Joystick %d ball %d delta: (%d,%d)\n",
+                                      event.jball.which,
+                                      event.jball.ball,
+                                      event.jball.xrel,
+                                      event.jball.yrel);
+                               break;
+                           case SDL_JOYBUTTONDOWN:
+                             joystick_nr = event.jaxis.which;
+                               printf("Joystick %d button %d down\n",
+                                      event.jbutton.which,
+                                      event.jbutton.button);
+                               break;
+                           case SDL_JOYBUTTONUP:
+                             joystick_nr = event.jaxis.which;
+                               printf("Joystick %d button %d up\n",
+                                      event.jbutton.which,
+                                      event.jbutton.button);
+                               break;
+                           case SDL_KEYDOWN:
+                               if ( event.key.keysym.sym != SDLK_ESCAPE ) {
+                                       break;
+                               }
+                               /* Fall through to signal quit */
+                           case SDL_QUIT:
+                               done = 1;
+                               break;
+                           default:
+                               break;
+                       }
+               }
+
+               joystick = Get_SDL_Joystick(joystick_nr);               
+
+               /* Update visual joystick state */
+               for ( i=0; i<SDL_JoystickNumButtons(joystick); ++i ) {
+                       SDL_Rect area;
+
+                       area.x = i*34;
+                       area.y = SCREEN_HEIGHT-34;
+                       area.w = 32;
+                       area.h = 32;
+                       if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) {
+                               SDL_FillRect(screen, &area, 0xFFFF);
+                       } else {
+                               SDL_FillRect(screen, &area, 0x0000);
+                       }
+                       SDL_UpdateRects(screen, 1, &area);
+               }
+
+               /* Erase previous axes */
+               SDL_FillRect(screen, &axis_area[draw], 0x0000);
+
+               /* Draw the X/Y axis */
+               draw = !draw;
+               x = (((int)SDL_JoystickGetAxis(joystick, 0))+32768);
+               x *= SCREEN_WIDTH;
+               x /= 65535;
+               if ( x < 0 ) {
+                       x = 0;
+               } else
+               if ( x > (SCREEN_WIDTH-16) ) {
+                       x = SCREEN_WIDTH-16;
+               }
+               y = (((int)SDL_JoystickGetAxis(joystick, 1))+32768);
+               y *= SCREEN_HEIGHT;
+               y /= 65535;
+               if ( y < 0 ) {
+                       y = 0;
+               } else
+               if ( y > (SCREEN_HEIGHT-16) ) {
+                       y = SCREEN_HEIGHT-16;
+               }
+               axis_area[draw].x = (Sint16)x;
+               axis_area[draw].y = (Sint16)y;
+               axis_area[draw].w = 16;
+               axis_area[draw].h = 16;
+               SDL_FillRect(screen, &axis_area[draw], 0xFFFF);
+
+               SDL_UpdateRects(screen, 2, axis_area);
+       }
+}
+
+void TEST_SDL_JOYSTICK()
+{
+  const char *name;
+  int i;
+
+  /* Initialize SDL (Note: video is required to start event loop) */
+  if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0 )
+  {
+    fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
+    exit(1);
+  }
+
+  /* Print information about the joysticks */
+  printf("There are %d joysticks attached\n", SDL_NumJoysticks());
+  for ( i=0; i<SDL_NumJoysticks(); ++i )
+  {
+    name = SDL_JoystickName(i);
+    printf("Joystick %d: %s\n",i,name ? name : "Unknown Joystick");
+  }
+
+  for (i=0; i<2; i++)
+  {
+    if (!Open_SDL_Joystick(i))
+      printf("Couldn't open joystick %d: %s\n", i, SDL_GetError());
+  }
+
+  WatchJoysticks();
+
+  for (i=0; i<2; i++)
+    Close_SDL_Joystick(i);
+
+  SDL_QuitSubSystem(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK);
+}
+
 #endif /* USE_SDL_LIBRARY */
 
 /* +-----------------------------------------------------------------------+ */
@@ -763,13 +950,18 @@ int main(int argc, char *argv[])
   _fmode = O_BINARY;
 #endif
 
+#if 1
   GetOptions(argv);
   OpenAll(argc,argv);
+#endif
 
 #if 0
 #ifdef USE_SDL_LIBRARY
+  /*
   TEST_SDL_BLIT_RECT((WIN_XSIZE - TILEX)/2, (WIN_YSIZE - TILEY)/2);
   TEST_SDL_EVENT_LOOP();
+  */
+  TEST_SDL_JOYSTICK();
   exit(0);
 #endif
 #endif