Replaced USER32.DLL use by hardcoded tables for VkKeyScanA and
MapVirtualKeyA.

diff --git a/win32/console.c b/win32/console.c
index 2d6f45e..d831db2 100644
--- a/win32/console.c
+++ b/win32/console.c
@@ -10,8 +10,6 @@
 /* FIXME:
  * - Completely lacks SCREENBUFFER interface.
  * - No abstraction for something other than xterm.
- * - Key input translation shouldn't use VkKeyScan and MapVirtualKey, since
- *   they are window (USER) driver dependend.
  * - Output sometimes is buffered (We switched off buffering by ~ICANON ?)
  */
 /* Reference applications:
@@ -54,6 +52,44 @@
 
 DEFAULT_DEBUG_CHANNEL(console)
 
+/* Ascii -> VK, generated by calling VkKeyScanA(i) */
+static int vkkeyscan_table[256] = {
+	0,0,0,0,0,0,0,0,8,9,0,0,0,13,0,0,0,0,0,19,145,556,0,0,0,0,0,27,0,0,0,
+	0,32,305,478,307,308,309,311,222,313,304,312,443,188,189,190,191,48,
+	49,50,51,52,53,54,55,56,57,442,186,444,187,446,447,306,321,322,323,
+	324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,
+	341,342,343,344,345,346,219,220,221,310,445,192,65,66,67,68,69,70,71,
+	72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,475,476,477,
+	448,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,400,0,0,0,0,0,0
+};
+
+static int mapvkey_0[256]={
+	0,0,0,0,0,0,0,0,14,15,0,0,0,28,0,0,42,29,56,69,58,0,0,0,0,0,0,1,0,0,
+	0,0,57,73,81,79,71,75,72,77,80,0,0,0,55,82,83,0,11,2,3,4,5,6,7,8,9,
+	10,0,0,0,0,0,0,0,30,48,46,32,18,33,34,35,23,36,37,38,50,49,24,25,16,
+	19,31,20,22,47,17,45,21,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,78,0,74,
+	0,53,59,60,61,62,63,64,65,66,67,68,87,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,69,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,13,51,12,52,53,41,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,43,27,40,76,96,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+};
+
+static int mapvkey_1[256]={
+	0,27,49,50,51,52,53,54,55,56,57,48,189,187,8,9,81,87,69,82,84,89,85,
+	73,79,80,219,221,13,17,65,83,68,70,71,72,74,75,76,186,222,192,16,220,
+	90,88,67,86,66,78,77,188,190,191,16,106,18,32,20,112,113,114,115,116,
+	117,118,119,120,121,144,145,36,38,33,109,37,223,39,107,35,40,34,45,
+	46,0,0,0,122,123,0,0,0,0,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+	0,0,0,0,0,0,0
+};
 
 /* FIXME:  Should be in an internal header file.  OK, so which one?
    Used by CONSOLE_makecomplex. */
@@ -102,22 +138,16 @@
 		ir.Event.KeyEvent.dwControlKeyState|=LEFT_ALT_PRESSED;
 		inchar &= ~0x80;
 	    }
-#if 0  /* FIXME: cannot call USER functions here */
-	    ir.Event.KeyEvent.wVirtualKeyCode = VkKeyScan16(inchar);
+	    ir.Event.KeyEvent.wVirtualKeyCode = vkkeyscan_table[inchar];
 	    if (ir.Event.KeyEvent.wVirtualKeyCode & 0x0100)
 		ir.Event.KeyEvent.dwControlKeyState|=SHIFT_PRESSED;
 	    if (ir.Event.KeyEvent.wVirtualKeyCode & 0x0200)
 		ir.Event.KeyEvent.dwControlKeyState|=LEFT_CTRL_PRESSED;
 	    if (ir.Event.KeyEvent.wVirtualKeyCode & 0x0400)
 		ir.Event.KeyEvent.dwControlKeyState|=LEFT_ALT_PRESSED;
-	    ir.Event.KeyEvent.wVirtualScanCode = MapVirtualKey16(
-	    	ir.Event.KeyEvent.wVirtualKeyCode & 0x00ff,
-		0 /* VirtualKeyCodes to ScanCode */
-	    );
-#else
-	    ir.Event.KeyEvent.wVirtualKeyCode = 0;
-	    ir.Event.KeyEvent.wVirtualScanCode = 0;
-#endif
+	    ir.Event.KeyEvent.wVirtualScanCode = mapvkey_0[
+	    	ir.Event.KeyEvent.wVirtualKeyCode & 0x00ff
+	    ]; /* VirtualKeyCodes to ScanCode */
 	    ir.Event.KeyEvent.uChar.AsciiChar = inchar;
 
 	    if ((inchar==127)||(inchar=='\b')) { /* backspace */
@@ -150,15 +180,10 @@
 	    ir.Event.KeyEvent.bKeyDown		= 1;
 	    ir.Event.KeyEvent.wRepeatCount	= 0;
 
-#if 0  /* FIXME: cannot call USER functions here */
-	    ir.Event.KeyEvent.wVirtualKeyCode	= VkKeyScan16(27);
-	    ir.Event.KeyEvent.wVirtualScanCode	= MapVirtualKey16(
-	    	ir.Event.KeyEvent.wVirtualKeyCode,0
-	    );
-#else
 	    ir.Event.KeyEvent.wVirtualKeyCode	= VK_ESCAPE;
-	    ir.Event.KeyEvent.wVirtualScanCode	= 1;
-#endif
+	    ir.Event.KeyEvent.wVirtualScanCode	= mapvkey_0[
+	    	ir.Event.KeyEvent.wVirtualKeyCode
+	    ];
 	    ir.Event.KeyEvent.dwControlKeyState = 0;
 	    ir.Event.KeyEvent.uChar.AsciiChar	= 27;
 	    assert(WriteConsoleInputA( hConsoleInput, &ir, 1, &junk ));
@@ -240,11 +265,7 @@
 	    }
 	    if (scancode) {
 		ir.Event.KeyEvent.wVirtualScanCode = scancode;
-#if 0  /* FIXME: cannot call USER functions here */
-		ir.Event.KeyEvent.wVirtualKeyCode = MapVirtualKey16(scancode,1);
-#else
-		ir.Event.KeyEvent.wVirtualKeyCode = 0;
-#endif
+		ir.Event.KeyEvent.wVirtualKeyCode  = mapvkey_1[scancode];
 		assert(WriteConsoleInputA( hConsoleInput, &ir, 1, &junk ));
 		ir.Event.KeyEvent.bKeyDown		= 0;
 		assert(WriteConsoleInputA( hConsoleInput, &ir, 1, &junk ));