KeySym *XGetKeyboardMapping(display, first_keycode, keycode_count, 
                            keysyms_per_keycode_return)
      Display *display;
      KeyCode first_keycode;
      int keycode_count;
      int *keysyms_per_keycode_return;
| display | Specifies the connection to the X server. | 
| first_keycode | Specifies the first KeyCode that is to be returned. | 
| keycode_count | Specifies the number of KeyCodes that are to be returned. | 
| keysyms_per_keycode_return | Returns the number of KeySyms per KeyCode. | 
first_keycode + keycode_count - 1
If this is not the case, a BadValue error results. The number of elements in the KeySyms list is:
keycode_count * keysyms_per_keycode_return
KeySym number N, counting from zero, for KeyCode K has the following index in the list, counting from zero:
(K - first_code) * keysyms_per_code_return + N
The X server arbitrarily chooses the keysyms_per_keycode_return value to be large enough to report all requested symbols. A special KeySym value of NoSymbol is used to fill in unused elements for individual KeyCodes. To free the storage returned by XGetKeyboardMapping(), use XFree().
XGetKeyboardMapping() can generate a BadValue error.
| BadValue | Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. |