* Represents a keysym-to-scancode mapping for RDP, with extra information
* about the state of prerequisite keysyms.
*/
-typedef struct guac_rdp_keymap {
+typedef struct guac_rdp_scancode_map {
/**
* The scancode this keysym maps to.
* Null-terminated list of keysyms which must be down for this keysym
* to be properly typed.
*/
- int* set_keysyms;
+ const int* set_keysyms;
/**
* Null-terminated list of keysyms which must be up for this keysym
* to be properly typed.
*/
- int* clear_keysyms;
+ const int* clear_keysyms;
-} guac_rdp_keymap;
+} guac_rdp_scancode_map;
/**
* Represents the Alt-code which types a given keysym. This is used as a
*
* See: http://en.wikipedia.org/wiki/Alt_code
*/
-typedef struct guac_rdp_alt_keymap {
+typedef struct guac_rdp_altcode_map {
/**
* The 4-digit Alt-code which types this keysym.
*/
- char alt_code[4];
+ const char* altcode;
-} guac_rdp_alt_keymap;
+} guac_rdp_altcode_map;
/**
- * Map of X11 keysyms to RDP scancodes.
+ * Mapping from keysym to current state
*/
-extern const guac_rdp_keymap guac_rdp_keysym_scancode[256][256];
+typedef int guac_rdp_keysym_state_map[256][256];
+
+/**
+ * Static mapping from keysyms to scancodes.
+ */
+typedef guac_rdp_scancode_map guac_rdp_keysym_scancode_map[256][256];
+
+/**
+ * Static mapping from keysyms to Alt-codes.
+ */
+typedef guac_rdp_altcode_map guac_rdp_keysym_altcode_map[256][256];
+
+/**
+ * Map of X11 keysyms to RDP scancodes (US English).
+ */
+extern const guac_rdp_keysym_scancode_map guac_rdp_keysym_scancode_en_us;
/**
* Map of X11 keysyms to Windows Alt-codes.
*/
-extern const guac_rdp_alt_keymap guac_rdp_keysym_altcode[256][256];
+extern const guac_rdp_keysym_altcode_map guac_rdp_keysym_altcode;
+
+/**
+ * Simple macro for referencing the mapped value of an altcode or scancode for a given keysym.
+ */
+#define GUAC_RDP_KEYSYM_LOOKUP(keysym_mapping, keysym) ((keysym_mapping)[((keysym) & 0xFF00) >> 8][(keysym) & 0xFF])
+
+/**
+ * Keysym string containing only the left "shift" key.
+ */
+extern const int GUAC_KEYSYMS_SHIFT[];
#endif