+#include "log.h"
+
+
+// Class member initialization
+/*static*/ int Gamepad::numJoysticks = 0;
+/*static*/ SDL_Joystick * Gamepad::pad[8];
+/*static*/ int Gamepad::numButtons[8];
+/*static*/ int Gamepad::numHats[8];
+/*static*/ bool Gamepad::button[8][256];
+/*static*/ uint8_t Gamepad::hat[8][32];
+
+
+Gamepad::Gamepad(void)//: numJoysticks(0)
+{
+ AllocateJoysticks();
+}
+
+
+Gamepad::~Gamepad(void)
+{
+ DeallocateJoysticks();
+}
+
+
+void Gamepad::AllocateJoysticks(void)
+{
+// DeallocateJoysticks();
+ numJoysticks = SDL_NumJoysticks();
+
+ // Sanity check
+ if (numJoysticks > 8)
+ numJoysticks = 8;
+
+ for(int i=0; i<numJoysticks; i++)
+ {
+ pad[i] = SDL_JoystickOpen(i);
+ numButtons[i] = numHats[i] = 0;
+
+ if (pad[i])
+ {
+ numButtons[i] = SDL_JoystickNumButtons(pad[i]);
+ numHats[i] = SDL_JoystickNumHats(pad[i]);
+ }
+ }
+
+ WriteLog("Gamepad: Found %u joystick%s.\n", numJoysticks, (numJoysticks == 1 ? "" : "s"));
+}
+
+
+void Gamepad::DeallocateJoysticks(void)
+{
+ for(int i=0; i<numJoysticks; i++)
+ SDL_JoystickClose(pad[i]);
+}