I play with the idea of introducing generic, device-dependent extension events (inspired by the X Input Extension - see http://capderec.udg.es:81/ebt-bin/nph-dweb/dynaweb/SGI_Developer/X11_LibSpc):
An extension device provides keys, buttons, and motion data.
There is a primitive to list all available extension devices with their parameters: - number of keys, min and max key code - number of buttons - number of axes, min and max value for each axe
Then there is another primitive to request events for a device ("open" the device). After this, device events would be fed into the main event queue: key press/release events, button press/release events, and motion events: - Each event: device id and timestamp - Key event: key code, pressed/released flag - Button: button number, pressed/released flag - Motion: current value of each axis This last event might be too large for the current 8 int array - there could be a "continuation flag" so two events get read.
This gives unified access to almost every input device there is. Some examples:
Keys:min..max But. Axes:min..max Keyboard 248:8..255 0 0 Mouse 0 3 2:0..1024,0..768 Tablet 32:8..39 4 5:0..30480,0..24060,0..1023,-64..64,-64..64 Joystick 0 2 2:-128..128,-128..128
(The first three are actual values from my setup - the tablet motion data is x, y, pressure, tilt x, tilt y, the buttons are on the stylus, the keys are regions on the tablet that can be clicked)
This achitecture would easily be supported in X, I guess Windows provides something similar with DirectInput, don't know about Mac.
How does that sound?
-- Bert