Code-remapping for xf86-input-evdev

The standard xf86-input-evdev driver that comes with xorg only
uses keycodes between 8 and 255, dropping all others. This is fine
most of the time (who ever saw a keyboard with more than 247 keys on
it?), but it causes problems when the keycodes generated are not
compact.

For example, the Apple Aluminum Keyboard (USB ID 05ac:0221)
produces at least one code above 255: the "fn" key is 464. People have
found other cases, and have reported them as a bug.

Since I needed my keyboard to work as I want it, I did the only
sensible thing: I cloned the repository and patched the
code.

My patch adds a configuration option, called event_key_remap. Its
value must be a (whitespace-separated) list of "assignments" of the
format $evdev_code = $x11_code; the $evdev_code can be
obtained with showkey -k, the $x11_code can be found in
/usr/share/X11/xkb/keycodes/evdev (or wherever your distribution
put it).

The implementation is rather simple, creating a look-up table from the
configuration; the table is not implemented as a simple array, since
that would have meant taking 64KiB for each device (evdev uses 16
bits for a key event). Instead, I allocate "pages" of 256 bytes, and
only the pages needed. This way, devices with no remapping use only
one more pointer in their structures, and devices with very few codes
to remap use only 256 bytes.

Of course, the configuration can be set in the xorg.conf
file. Mine contains: