From 554d07ad415c61143d4924d073541b07baf64787 Mon Sep 17 00:00:00 2001
From: root <root@lamia.panaceas.james.local>
Date: Mon, 25 May 2015 18:00:35 +0100
Subject: fish

---
 keymap.c | 444 ++++++++++++++++++++++++++++++++-------------------------------
 keymap.h |  30 +++--
 2 files changed, 245 insertions(+), 229 deletions(-)

diff --git a/keymap.c b/keymap.c
index 7da942b..882dbe3 100644
--- a/keymap.c
+++ b/keymap.c
@@ -24,12 +24,12 @@
 // If the source code for the VNC system is not available from the place 
 // whence you received this file, check http://www.uk.research.att.com/vnc or contact
 // the authors on vnc@uk.research.att.com for information on obtaining it.
-  
+
 // Thanks to Martin C. Mueller <mcm@itwm.uni-kl.de> for assistance with the
 // international keyboard mapping stuff.
-  
+
 // KeyMap.cpp
-  
+
 #ifdef WIN_2_X
 #include <stdio.h>
 #include <windows.h>
@@ -37,225 +37,239 @@
 #define XK_LATIN1
 #define XK_XKB_KEYS
 #include "keymap.h"
-  
+
 // Define the keymap structure
-  typedef struct vncKeymapping_struct
-{
-  
unsigned int wincode;
-   
KeySym Xcode;
- 
} vncKeymapping;
-
 
static const vncKeymapping keymap[] = { 
-    {VK_BACK, XK_BackSpace}, 
-  {VK_TAB, XK_Tab}, 
-  {VK_CLEAR, XK_Clear}, 
-  {VK_RETURN, XK_Return}, 
-  {VK_LSHIFT, XK_Shift_L}, 
-  {VK_RSHIFT, XK_Shift_L}, /* XXX mdh - never gen SHIFT_R */ 
-{VK_SHIFT, XK_Shift_L}, 
{VK_LCONTROL, XK_Control_L}, 
{VK_RCONTROL, XK_Control_R}, 
{VK_CONTROL, XK_Control_L}, 
{VK_LMENU, XK_Alt_L}, 
{VK_RMENU, XK_Alt_R}, 
{VK_MENU, XK_Alt_L}, 
{VK_PAUSE, XK_Pause}, 
{VK_CAPITAL, XK_Caps_Lock}, 
{VK_ESCAPE, XK_Escape}, 
{VK_SPACE, XK_space}, 
{VK_PRIOR, XK_Page_Up}, 
{VK_NEXT, XK_Page_Down}, 
{VK_END, XK_End}, 
{VK_HOME, XK_Home}, 
{VK_LEFT, XK_Left}, 
{VK_UP, XK_Up}, 
{VK_RIGHT, XK_Right}, 
{VK_DOWN, XK_Down}, 
{VK_SELECT, XK_Select}, 
{VK_EXECUTE, XK_Execute}, 
{VK_SNAPSHOT, XK_Print}, 
{VK_INSERT, XK_Insert}, 
{VK_DELETE, XK_Delete}, 
{VK_HELP, XK_Help}, 
{VK_NUMPAD0, XK_KP_0}, 
{VK_NUMPAD1, XK_KP_1}, 
{VK_NUMPAD2, XK_KP_2}, 
{VK_NUMPAD3, XK_KP_3}, 
{VK_NUMPAD4, XK_KP_4}, 
{VK_NUMPAD5, XK_KP_5}, 
{VK_NUMPAD6, XK_KP_6}, 
{VK_NUMPAD7, XK_KP_7}, 
{VK_NUMPAD8, XK_KP_8}, 
{VK_NUMPAD9, XK_KP_9}, 
{VK_MULTIPLY, XK_KP_Multiply}, 
{VK_ADD, XK_KP_Add}, 
{VK_SEPARATOR, XK_KP_Separator}, // often comma
-{VK_SUBTRACT, XK_KP_Subtract}, 
-  {VK_DECIMAL, XK_KP_Decimal}, 
-  {VK_DIVIDE, XK_KP_Divide}, 
-  {VK_F1, XK_F1}, 
-  {VK_F2, XK_F2}, 
-  {VK_F3, XK_F3}, 
-  {VK_F4, XK_F4}, 
-  {VK_F5, XK_F5}, 
-  {VK_F6, XK_F6}, 
-  {VK_F7, XK_F7}, 
-  {VK_F8, XK_F8}, 
-  {VK_F9, XK_F9}, 
-  {VK_F10, XK_F10}, 
-  {VK_F11, XK_F11}, 
-  {VK_F12, XK_F12}, 
-  {VK_F13, XK_F13}, 
-  {VK_F14, XK_F14}, 
-  {VK_F15, XK_F15}, 
-  {VK_F16, XK_F16}, 
-  {VK_F17, XK_F17}, 
-  {VK_F18, XK_F18}, 
-  {VK_F19, XK_F19}, 
-  {VK_F20, XK_F20}, 
-  {VK_F21, XK_F21}, 
-  {VK_F22, XK_F22}, 
-  {VK_F23, XK_F23}, 
-  {VK_F24, XK_F24}, 
{VK_NUMLOCK, XK_Num_Lock}, 
{VK_SCROLL, XK_Scroll_Lock} 
-};
-
-
 
static unsigned char buf[4];
-
static unsigned char keystate[256];
-
 
KeyActionSpec PCtoX (UINT virtkey, DWORD keyData)
-{
-  
int numkeys = 0;
-  
int mapsize, i;
-  
int extended;
-  
int ret;
-  
 
KeyActionSpec kas;
-  
kas.releaseModifiers = 0;
-  
 
extended = ((keyData & 0x1000000) != 0);
-  
+typedef struct vncKeymapping_struct {
+  unsigned int wincode;
+  KeySym Xcode;
+} vncKeymapping;
+
+static const vncKeymapping keymap[] = {
+	{VK_BACK,		XK_BackSpace},
+	{VK_TAB,		XK_Tab},
+	{VK_CLEAR,		XK_Clear},
+	{VK_RETURN,		XK_Return},
+	{VK_LSHIFT,		XK_Shift_L},
+	{VK_RSHIFT,		XK_Shift_L}, /* XXX mdh - never gen SHIFT_R */
+	{VK_SHIFT,      XK_Shift_L},
+	{VK_LCONTROL,	XK_Control_L},
+	{VK_RCONTROL,	XK_Control_R},
+    {VK_CONTROL,	XK_Control_L},
+    {VK_LMENU,		XK_Alt_L},
+    {VK_RMENU,		XK_Alt_R},
+    {VK_MENU,		XK_Alt_L},
+    {VK_PAUSE,		XK_Pause},
+    {VK_CAPITAL,	XK_Caps_Lock},
+    {VK_ESCAPE,		XK_Escape},
+    {VK_SPACE,		XK_space},
+    {VK_PRIOR,		XK_Page_Up},
+    {VK_NEXT,		XK_Page_Down},
+    {VK_END,		XK_End},
+    {VK_HOME,		XK_Home},
+    {VK_LEFT,		XK_Left},
+    {VK_UP,			XK_Up},
+    {VK_RIGHT,		XK_Right},
+    {VK_DOWN,		XK_Down},
+    {VK_SELECT,		XK_Select},
+    {VK_EXECUTE,	XK_Execute},
+    {VK_SNAPSHOT,	XK_Print},
+    {VK_INSERT,		XK_Insert},
+    {VK_DELETE,		XK_Delete},
+    {VK_HELP,		XK_Help},
+    {VK_NUMPAD0,	XK_KP_0},
+    {VK_NUMPAD1,	XK_KP_1},
+    {VK_NUMPAD2,	XK_KP_2},
+    {VK_NUMPAD3,	XK_KP_3},
+    {VK_NUMPAD4,	XK_KP_4},
+    {VK_NUMPAD5,	XK_KP_5},
+    {VK_NUMPAD6,	XK_KP_6},
+    {VK_NUMPAD7,	XK_KP_7},
+    {VK_NUMPAD8,	XK_KP_8},
+    {VK_NUMPAD9,	XK_KP_9},
+    {VK_MULTIPLY,	XK_KP_Multiply},
+    {VK_ADD,		XK_KP_Add},
+    {VK_SEPARATOR,	XK_KP_Separator},   // often comma
+    {VK_SUBTRACT,	XK_KP_Subtract},
+    {VK_DECIMAL,	XK_KP_Decimal},
+    {VK_DIVIDE,		XK_KP_Divide},
+    {VK_F1,			XK_F1},
+    {VK_F2,			XK_F2},
+    {VK_F3,			XK_F3},
+    {VK_F4,			XK_F4},
+    {VK_F5,			XK_F5},
+    {VK_F6,			XK_F6},
+    {VK_F7,			XK_F7},
+    {VK_F8,			XK_F8},
+    {VK_F9,			XK_F9},
+    {VK_F10,		XK_F10},
+    {VK_F11,		XK_F11},
+    {VK_F12,		XK_F12},
+    {VK_F13,		XK_F13},
+    {VK_F14,		XK_F14},
+    {VK_F15,		XK_F15},
+    {VK_F16,		XK_F16},
+    {VK_F17,		XK_F17},
+    {VK_F18,		XK_F18},
+    {VK_F19,		XK_F19},
+    {VK_F20,		XK_F20},
+    {VK_F21,		XK_F21},
+    {VK_F22,		XK_F22},
+    {VK_F23,		XK_F23},
+    {VK_F24,		XK_F24},
+    {VK_NUMLOCK,	XK_Num_Lock},
+    {VK_SCROLL,		XK_Scroll_Lock}
+};
+
+static unsigned char buf[4];
+static unsigned char keystate[256];
+
+KeyActionSpec PCtoX(UINT virtkey, DWORD keyData) { 
+  int numkeys = 0;
+  int mapsize, i;
+  int extended;
+  int ret;
+
+  KeyActionSpec kas;
+  kas.releaseModifiers = 0;
+
+  extended = ((keyData & 0x1000000) != 0);
 #ifdef DEBUG
-    printf (" keyData %04x ", (unsigned int) keyData);
-  
-#endif  /* 
 */
-    
if (extended)
-    {
-      
+  printf(" keyData %04x ", (unsigned int) keyData);
+#endif
+
+  if (extended) { 
 #ifdef DEBUG
-        printf (" (extended) ");
-      
-#endif  /* 
 */
-        switch (virtkey)
-        {
-        
case VK_MENU:
-          
virtkey = VK_RMENU;
-          
break;
-        
case VK_CONTROL:
-          
virtkey = VK_RCONTROL;
-          
break;
-        
}
-    
}
-  
 
-    // We try looking it up in our table
-    mapsize = sizeof (keymap) / sizeof (vncKeymapping);
-  
 
-    // Look up the desired code in the table
-    for (i = 0; i < mapsize; i++)
-    {
-      
if (keymap[i].wincode == virtkey)
-        {
-          
kas.keycodes[numkeys++] = keymap[i].Xcode;
-          
break;
-        
}
-    
}
-  
 
if (numkeys != 0)
-    {
-      
+    printf(" (extended) ");
+#endif
+    switch (virtkey) {
+    case VK_MENU :
+      virtkey = VK_RMENU;
+      break;
+    case VK_CONTROL:
+      virtkey = VK_RCONTROL;
+      break;
+    }
+  }
+    
+  // We try looking it up in our table
+  mapsize = sizeof(keymap) / sizeof(vncKeymapping);
+        
+  // Look up the desired code in the table
+  for (i = 0; i < mapsize; i++) {
+    if (keymap[i].wincode == virtkey) {
+      kas.keycodes[numkeys++] = keymap[i].Xcode;
+      break;
+    }
+  }
+    
+  if (numkeys != 0) {
 #ifdef DEBUG
-        UINT key = kas.keycodes[numkeys - 1];
-      
printf ("keymap gives %u (%x) ", key, key);
-      
-#endif  /* 
 */
-    }
-  else
-    {
-      
-        // not found in table
+    UINT key = kas.keycodes[numkeys-1];
+    printf("keymap gives %u (%x) ", key, key);
+#endif
+  } else {
+    // not found in table
 #ifdef DEBUG
-        printf ("not in special keymap, ");
-      
-#endif  /* 
 */
-        // we try a simple conversion to Ascii, using the current keyboard mapping
-        GetKeyboardState (keystate);
-      
 
ret = ToAscii (virtkey, 0, keystate, (WORD *) buf, 0);
-      
 
-        // If Left Ctrl & Alt both pressed and ToAscii gives a valid keysym
-        // This is for AltGr on international keyboards  (= LCtrl-Alt).
-        // e.g. Ctrl-Alt-Q gives @ on German keyboards
-        if (((keystate[VK_MENU] & 0x80) != 0) && 
-            ((keystate[VK_CONTROL] & 0x80) != 0))
-        {
-          
 
-            // If the key means anything in this keyboard layout
-            if ((ret >= 1) && 
-                (((*buf >= 32) && (*buf <= 126)) || 
-                 ((*buf >= 160) && (*buf <= 255))) 
)
-            {
-              
 
-                // Send the modifiers up, then the keystroke, then mods down
-                // We don't release the right control; this allows German users
-                // to use it for doing Ctl-@ etc. (though not under Win95 --
-                // see below)
-                
if (GetKeyState (VK_LCONTROL) & 0x8000)
-                
kas.releaseModifiers |= KEYMAP_LCONTROL;
-              
 
if (GetKeyState (VK_LMENU) & 0x8000)
-                
kas.releaseModifiers |= KEYMAP_LALT;
-              
 
if (GetKeyState (VK_RMENU) & 0x8000)
-                
kas.releaseModifiers |= KEYMAP_RALT;
-              
 
-                // This is for windows 95, and possibly other systems.  
-                // The above GetKeyState calls don't work in 95 - they always return 0.
-                // But if we're here at all we know that control and alt are pressed, so let's
-                // raise all Control and Alt keys if we haven't registered any yet.
-                if (kas.releaseModifiers == 0)
-                
kas.releaseModifiers =
-                  KEYMAP_LCONTROL | KEYMAP_LALT | KEYMAP_RALT;
-              
 
+    printf("not in special keymap, ");
+#endif
+    // we try a simple conversion to Ascii, using the current keyboard mapping
+    GetKeyboardState(keystate);
+
+    ret = ToAscii(virtkey, 0, keystate, (WORD *) buf, 0);
+
+    // If Left Ctrl & Alt both pressed and ToAscii gives a valid keysym
+    // This is for AltGr on international keyboards  (= LCtrl-Alt).
+    // e.g. Ctrl-Alt-Q gives @ on German keyboards
+    if (  ((keystate[VK_MENU] & 0x80) != 0) &&
+	  ((keystate[VK_CONTROL] & 0x80) != 0) ) {
+
+      // If the key means anything in this keyboard layout
+      if  ( (ret >= 1) && 
+	    ( ( (*buf >= 32) && (*buf <= 126) ) ||
+	      ( (*buf >= 160) && (*buf <= 255) ) ) 
+	    ) {
+
+	// Send the modifiers up, then the keystroke, then mods down
+	// We don't release the right control; this allows German users
+	// to use it for doing Ctl-@ etc. (though not under Win95 --
+	// see below)
+
+	if (GetKeyState(VK_LCONTROL) & 0x8000) 
+	  kas.releaseModifiers |= KEYMAP_LCONTROL;
+
+	if (GetKeyState(VK_LMENU)    & 0x8000) 
+	  kas.releaseModifiers |= KEYMAP_LALT;
+
+	if (GetKeyState(VK_RMENU)    & 0x8000) 
+	  kas.releaseModifiers |= KEYMAP_RALT;
+
+	// This is for windows 95, and possibly other systems.  
+	// The above GetKeyState calls don't work in 95 - they always return 0.
+	// But if we're here at all we know that control and alt are pressed, so let's
+	// raise all Control and Alt keys if we haven't registered any yet.
+	if (kas.releaseModifiers == 0)
+	  kas.releaseModifiers = KEYMAP_LCONTROL | KEYMAP_LALT | KEYMAP_RALT;
+
 #ifdef DEBUG
-                printf
-                ("Ctrl-Alt pressed ToAscii(without modifiers)returns %d bytes: ",
-                 
ret);
-              
-#endif  /* 
 */
-                for (i = 0; i < ret; i++)
-                {
-                  
kas.keycodes[numkeys++] = *(buf + i);
-                  
+	printf("Ctrl-Alt pressed ToAscii(without modifiers)returns %d bytes: ",
+	       ret);
+#endif
+	for (i = 0; i < ret; i++) {
+	  kas.keycodes[numkeys++] = *(buf+i);
 #ifdef DEBUG
-                    printf ("%02x (%c) ", *(buf + i), *(buf + i));
-                  
-#endif  /* 
 */
-                }
-              
+	  printf("%02x (%c) ", *(buf+i) , *(buf+i));
+#endif
+	}
 #ifdef DEBUG
-                printf ("\n");
-              
-#endif  /* 
 */
-            }
-        
 
}
-      
 
-        // If not a ctrl-alt key
-        if (numkeys == 0)
-        {
-          
 
-            // There are no keysyms corresponding to control characters 
-            // Eg Ctrl F.  The server already knows whether the control 
-            // key is pressed. So we are interested in the key that would be 
-            // there if the Ctrl were not pressed.
-            keystate[VK_CONTROL] = keystate[VK_LCONTROL] =
-            keystate[VK_RCONTROL] = 0;
-          
 
ret = ToAscii (virtkey, 0, keystate, (WORD *) buf, 0);
-          
if (ret < 0)
-            {
-              
switch (*buf)
-                {
-                
case '`':
-                  
kas.keycodes[numkeys++] = XK_dead_grave;
-                  
break;
-                
case '\'':
-                  
kas.keycodes[numkeys++] = XK_dead_acute;
-                  
break;
-                
case '~':
-                  
kas.keycodes[numkeys++] = XK_dead_tilde;
-                  
break;
-                
case '^':
-                  
kas.keycodes[numkeys++] = XK_dead_circumflex;
-                  
break;
-                
}
-            
}
-          
-            // if this works, and it's a regular printable character, just send that
-            if (ret >= 1)
-            {
-              
+	printf("\n");
+#endif
+      } 
+
+    } 
+        
+    // If not a ctrl-alt key
+    if (numkeys == 0) {
+
+      // There are no keysyms corresponding to control characters 
+      // Eg Ctrl F.  The server already knows whether the control 
+      // key is pressed. So we are interested in the key that would be 
+      // there if the Ctrl were not pressed.
+      keystate[VK_CONTROL] = keystate[VK_LCONTROL] = keystate[VK_RCONTROL] = 0;
+
+      ret = ToAscii(virtkey, 0, keystate, (WORD *) buf, 0);
+      if (ret < 0) {
+	switch (*buf) {
+	case '`' :
+	  kas.keycodes[numkeys++] = XK_dead_grave; 
+	  break;
+	case '\'' :
+	  kas.keycodes[numkeys++] = XK_dead_acute; 
+	  break;
+	case '~' :
+	  kas.keycodes[numkeys++] = XK_dead_tilde;
+	  break;
+	case '^':
+	  kas.keycodes[numkeys++] = XK_dead_circumflex;
+	  break;
+	}
+      }
+      // if this works, and it's a regular printable character, just send that
+      if (ret >= 1) {
 #ifdef DEBUG
-                printf ("ToAscii (without ctrl) returns %d byte(s): ", ret);
-              
-#endif  /* 
 */
-                for (i = 0; i < ret; i++)
-                {
-                  
kas.keycodes[numkeys++] = *(buf + i);
-                  
+	printf("ToAscii (without ctrl) returns %d byte(s): ", ret);
+#endif
+	for (i = 0; i < ret; i++) {
+	  kas.keycodes[numkeys++] = *(buf+i);
 #ifdef DEBUG
-                    printf ("%02x (%c) ", *(buf + i), *(buf + i));
-                  
-#endif  /* 
 */
-                }
-            
}
-        
}
-    
}
-  
 
kas.keycodes[numkeys] = VoidKeyCode;
-  
return kas;
-
}
-
-
 
-#endif  /* 
 */
+	  printf("%02x (%c) ", *(buf+i) , *(buf+i));
+#endif
+	}
+      }
+    }
+  }
+
+  kas.keycodes[numkeys] = VoidKeyCode;
+  return kas;
+}
+
+#endif
diff --git a/keymap.h b/keymap.h
index dde55d3..629aa5f 100644
--- a/keymap.h
+++ b/keymap.h
@@ -2,7 +2,7 @@
 // This file comes from the vncviewer source
 // Converted to C from C++ and used in -fromwin version of x2x
 // 2003 By Mark Hayter
-  
+
 //  Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
 //
 //  This file is part of the VNC system.
@@ -25,32 +25,34 @@
 // If the source code for the VNC system is not available from the place 
 // whence you received this file, check http://www.uk.research.att.com/vnc or contact
 // the authors on vnc@uk.research.att.com for information on obtaining it.
-  
 
+
+
 // KeyMap.h
 // mapping of windows virtual key codes to X keysyms.
-  
+
 #include <X11/Xlib.h>
 #include <X11/keysymdef.h>
-  
+
 // A single key press on the client may result in more than one 
 // going to the server.
-  
+
 #define MaxKeysPerKey 4
 #define VoidKeyCode XK_VoidSymbol
-  
+
 // keycodes contains the keysyms terminated by an VoidKeyCode.
 // The releaseModifiers is a set of ORed flags indicating whether 
 // particular modifier-up messages should be sent before the keys 
 // and modifier-down after.
-  
+
 #define KEYMAP_LCONTROL 0x0001
 #define KEYMAP_RCONTROL 0x0002
 #define KEYMAP_LALT     0x0004
 #define KEYMAP_RALT     0x0008
-  
typedef struct
-{
-  
KeySym keycodes[MaxKeysPerKey];
-  
int releaseModifiers;
- 
} KeyActionSpec;
-
 
KeyActionSpec PCtoX (unsigned int virtkey, DWORD keyData);
-
 
+
+typedef struct {
+    KeySym keycodes[MaxKeysPerKey];
+    int releaseModifiers;
+} KeyActionSpec;
+
+KeyActionSpec PCtoX(unsigned int virtkey, DWORD keyData);
+
-- 
cgit v1.2.3