* Add support for dancepad/mats (should just mean cleanup up the
  buttons/axis not provided by the dancepad/mat)

New Command Line Options:

--button-map BTN

  BTN is a list of integers, where each integer corresponds to the
  event that gets send

  A,B,X,Y,LB,RB,SL,SR,LT,RT,Start,Mode,Back,DPAD-UP,DPAD-DOWN,DPAD-LEFT,DPAD-RIGHT
  A,B,X,Y,TL2,TR2,TL,TR,

#define BTN_A			0x130
#define BTN_B			0x131
#define BTN_C			0x132
#define BTN_X			0x133
#define BTN_Y			0x134
#define BTN_Z			0x135
#define BTN_TL			0x136
#define BTN_TR			0x137
#define BTN_TL2			0x138
#define BTN_TR2			0x139
#define BTN_SELECT		0x13a
#define BTN_START		0x13b
#define BTN_MODE		0x13c
#define BTN_THUMBL		0x13d
#define BTN_THUMBR		0x13e

--dpad-first 
  Dpad becomes first and second axis, instead of last, useful for 2D
  jump'n run

--stick2-as-throttle
  Makes the second stick act as throttle control

* add support to remap keys

* allow mouse emulation

* allow swapping of dpad and analog axis, so that dpad is first instead of last

* merge this thing with Pingus Input handling to get a very flexible framework?

* ...

Use cases:
==========
* flightsim:
   expects:     X/Y      Rudder   Throttle
   XBox:    Left-Stick   LT+RT    Right-Stick(rel)

* FPS:
   expects:  Mouse-X/Y   Walk-X/Y  Trigger
   XBox:    Left-Stick   RickStick Trigger(btn)

* 2D Jump Run
   needs dpad first

Needed features:
================
* stick to mouse
* relative-axis (throttle doesn't flip back, a stick does, need to handle that)
* trigger to button
* dpad to axis
* dpad to button
* inversal of axis
* soft-axis for dpad

(controller 
  (button (name   "BTN_X") ;; X and Y send out BTN_X events
          (device (xbox360-button "Y")
                  (xbox360-button "X")))
  (button (name   "BTN_A") 
          (device (inverse (xbox360-button "Y"))))
  (axis   (name "ABS_X")
          ...
)

;; -- Pingus Input Configuration --
(pingus-controller
 (standard-pointer
  (usbmouse:pointer (device "/dev/input/mx500")))

 (standard-scroller
  (usbmouse:scroller (device "/dev/input/marblemouse")))

 (primary-button
  (usbmouse:button (device "/dev/input/mx500") (button 0)))

 (secondary-button
  (usbmouse:button (device "/dev/input/mx500") (button 1)))

 (pause-button
  (usbmouse:button (device "/dev/input/mx500") (button 4)))

 (fast-forward-button
  (usbmouse:button (device "/dev/input/mx500") (button 3)))

;; (armageddon-button
;;  (usbmouse:button (device "/dev/input/mx500") (button 4)))

 (escape-button
  (sdl:keyboard-button (key "escape")))

 (action-up-button
  (usbmouse:button (device "/dev/input/mx500") (button 6))) 

 (action-down-button
  (usbmouse:button (device "/dev/input/mx500") (button 5)))
 )

;; EOF ;;
 

# EOF #
