summaryrefslogtreecommitdiff
path: root/input/layout
diff options
context:
space:
mode:
authorkarlf <[email protected]>2016-08-11 13:28:13 -0700
committerkarlf <[email protected]>2016-08-11 13:28:13 -0700
commit96eb96dfb613e4c745db6bd1f53a92fe7e2290fc (patch)
treead5f3ede5cbcd6b598677ce41bcf8318471bdd92 /input/layout
parent687b274aa38fd05c8c26e3068932121876d7f745 (diff)
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'input/layout')
-rw-r--r--input/layout/README.md82
-rw-r--r--input/layout/all_kbds/kbdfr/kbdfr.c491
-rw-r--r--input/layout/all_kbds/kbdfr/kbdfr.def4
-rw-r--r--input/layout/all_kbds/kbdfr/kbdfr.h66
-rw-r--r--input/layout/all_kbds/kbdfr/kbdfr.rc11
-rw-r--r--input/layout/all_kbds/kbdfr/kbdfr.vcxproj219
-rw-r--r--input/layout/all_kbds/kbdfr/kbdfr.vcxproj.Filters30
-rw-r--r--input/layout/all_kbds/kbdgr/kbdgr.c482
-rw-r--r--input/layout/all_kbds/kbdgr/kbdgr.def4
-rw-r--r--input/layout/all_kbds/kbdgr/kbdgr.h58
-rw-r--r--input/layout/all_kbds/kbdgr/kbdgr.rc11
-rw-r--r--input/layout/all_kbds/kbdgr/kbdgr.vcxproj219
-rw-r--r--input/layout/all_kbds/kbdgr/kbdgr.vcxproj.Filters30
-rw-r--r--input/layout/fe_kbds/fekbds.inc23
-rw-r--r--input/layout/fe_kbds/jpn/101/kbd101.c556
-rw-r--r--input/layout/fe_kbds/jpn/101/kbd101.def5
-rw-r--r--input/layout/fe_kbds/jpn/101/kbd101.h20
-rw-r--r--input/layout/fe_kbds/jpn/101/kbd101.rc12
-rw-r--r--input/layout/fe_kbds/jpn/101/kbd101.vcxproj275
-rw-r--r--input/layout/fe_kbds/jpn/101/kbd101.vcxproj.Filters30
-rw-r--r--input/layout/fe_kbds/jpn/106/kbd106.c622
-rw-r--r--input/layout/fe_kbds/jpn/106/kbd106.def5
-rw-r--r--input/layout/fe_kbds/jpn/106/kbd106.h20
-rw-r--r--input/layout/fe_kbds/jpn/106/kbd106.rc12
-rw-r--r--input/layout/fe_kbds/jpn/106/kbd106.vcxproj275
-rw-r--r--input/layout/fe_kbds/jpn/106/kbd106.vcxproj.Filters30
-rw-r--r--input/layout/fe_kbds/jpn/inc/kbdjpn.h138
-rw-r--r--input/layout/fe_kbds/jpn/japan.inc18
-rw-r--r--input/layout/kbd.sln96
-rw-r--r--input/layout/kbdus/kbdus.c433
-rw-r--r--input/layout/kbdus/kbdus.def4
-rw-r--r--input/layout/kbdus/kbdus.h38
-rw-r--r--input/layout/kbdus/kbdus.rc11
-rw-r--r--input/layout/kbdus/kbdus.vcxproj219
-rw-r--r--input/layout/kbdus/kbdus.vcxproj.Filters30
35 files changed, 4579 insertions, 0 deletions
diff --git a/input/layout/README.md b/input/layout/README.md
new file mode 100644
index 00000000..341c8ade
--- /dev/null
+++ b/input/layout/README.md
@@ -0,0 +1,82 @@
+Keyboard Layout Samples
+=======================
+
+The keyboard layout samples demonstrate how to generate layouts for various keyboards and locales.
+
+Build the sample
+----------------
+
+Starting in the WDK, you can build the sample in two ways: using the Visual Studio Integrated Development Environment (IDE) or from the command line using the Visual Studio Command Prompt window and the Microsoft Build Engine (MSBuild.exe).
+
+### Building the sample using Visual Studio
+
+1. Open Visual Studio. From the **File** menu, select **Open Project/Solution**. Within your WDK installation, navigate to src\\input\\layout and open the kbd.sln project file.
+2. Right-click the solution in the **Solution Explorer** and select **Configuration Manager**.
+3. From the **Configuration Manager**, select the **Active Solution Configuration** (for example, Windows 8.1 Debug or Windows 8.1 Release) and the **Active Solution Platform** (for example, Win32) that correspond to the type of build you are interested in.
+4. From the **Build** menu, click **Build Solution** (Ctrl+Shift+B).
+
+Previous versions of the WDK used the Windows Build utility (Build.exe) and provided separate build environment windows for each of the supported build configurations. Starting in the WDK, you can use the Visual Studio Command Prompt window for all build configurations.
+
+### Building the sample using the command line (MSBuild)
+
+1. Open a Visual Studio Command Prompt window. Click **Start** and search for **Developer Command Prompt**. If your project is under %PROGRAMFILES%, you need to open the command prompt window using elevated permissions (**Run as administrator**). From this window you can use MsBuild.exe to build any Visual Studio project by specifying the project (.VcxProj) or solutions (.Sln) file.
+2. Navigate to the project directory and enter the **MSbuild** command for your target. For example, to perform a clean build of a Visual Studio driver project called kbdus.vcxproj, navigate to the project directory and enter the following MSBuild command: **msbuild /t:clean /t:build .\\kbdus.vcxproj**.
+3. If the build succeeds, you will find the driver (kbdus.dll) in the binary output directory corresponding to the target platform, for example src\\input\\layout\\kbdus\\Windows 8.1 Debug.
+
+Design and Operation
+--------------------
+
+### Keyboard Layout Samples
+
+The layout DLL is loaded by the window manager when needed. One of the examples is the logon. The default set of the input locales is set in the HKCU registry, according to user's preference, which can be customized by the Regional and Language Options application in Control Panel. The window manager reads the HKCU registry and loads the keyboard layouts accordingly.
+
+The samples under input/layout include the following keyboard layouts:
+
+- kbdus
+
+ US-English keyboard layout
+
+- kbdfr
+
+ French keyboard layout
+
+- kbdgr
+
+ German keyboard layout
+
+- kbd101
+
+ Japanese 101 keyboard layout
+
+- kbd106
+
+ Japanese 106 keyboard layout
+
+### Conversion Tables
+
+A keyboard layout DLL consists of a set of tables. One of the tables converts the scancode to virtual key code, while the other table provides the conversion rule from the virtual key code to the character. Not all the keys or key combinations generate the characters. The modifier keys, such as the SHIFT key or the CTRL key, alter the character generation, but do not generate the characters. The special keys, such as F1-F12 functions keys, the Delete key or the Home key, do not generate the characters either.
+
+The conversion rule from the scancode to the virtual key code is predefined in kbd.h, but can be customized in the layout-specific header files. The layout-specific headers define the keyboard type as it appears in kbd.h, and may redefine some definitions that are specific to each layout.
+
+For the typical keyboard hardware, three types of the scancode to the Virtual Key Code conversion table must be defined in the C source file, including non-extended scancode, E0-prefixed scancode, and E1-prefixed scancode.
+
+The conversion table for the character generation has multiple columns. Each column represents the modifier status and contains the character corresponding to the status. The number of the columns could vary from layout to layout, depending on the number of possible combinations of the modifier keys. Generally speaking, ALT GR-enabled keyboard layouts, such as French or German keyboard layouts, have more columns than non-ALT GR-enabled keyboard, such as US-English keyboard layout.
+
+### Exports from keyboard layout DLL
+
+The layout DLLs export one or more entry points, which are called by the window manager to obtain the table address and the information about the layouts.
+
+For the East Asian keyboard layouts, the keyboard layout DLL has to provide language-specific entry points. Those additional entries expose the language-specific information, such as the kana conversion table, or the special conversion rule, including the VK\_KANJI generation.
+
+Installation
+------------
+
+To install a customized version of a layout DLL, it is recommended to substitute the existing DLL installed by the operating system with the customized DLL. The layout DLLs should be installed in the %windir%\\system32 directory (exceptions may apply on 64-bit platforms). You may need to disable the System File Protection (SFP) before replacing the layout DLLs. After the layout DLLs are installed, you may need to reboot the system to ensure the new layouts are used..
+
+Loading the Sample
+------------------
+
+In order to load the layout DLLs, you may need to turn to the Regional and Language Options application in Control Panel and add input locales that use the keyboard layouts you installed.
+
+You may also choose to do it programmatically. LoadKeyboardLayout API can be used to load the keyboard layouts. To activate the keyboard layout, you may choose to specify KLF\_ACTIVATE flag to LoadKeyboardLayout API, or you may need to call ActivateKeyboardLayout API.
+
diff --git a/input/layout/all_kbds/kbdfr/kbdfr.c b/input/layout/all_kbds/kbdfr/kbdfr.c
new file mode 100644
index 00000000..784b9dd1
--- /dev/null
+++ b/input/layout/all_kbds/kbdfr/kbdfr.c
@@ -0,0 +1,491 @@
+/***************************************************************************\
+* Module Name: KBDFR.C
+*
+* keyboard layout for French
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* History:
+* KBDTOOL v3.11 - Created Thu Aug 24 18:10:18 2000
+\***************************************************************************/
+
+#include <windows.h>
+#include "kbd.h"
+#include "kbdFR.h"
+
+#if defined(_M_IA64)
+#pragma section(".data")
+#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
+#else
+#pragma data_seg(".data")
+#define ALLOC_SECTION_LDATA
+#endif
+
+/***************************************************************************\
+* ausVK[] - Virtual Scan Code to Virtual Key conversion table for French
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA USHORT ausVK[] = {
+ T00, T01, T02, T03, T04, T05, T06, T07,
+ T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
+ T10, T11, T12, T13, T14, T15, T16, T17,
+ T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
+ T20, T21, T22, T23, T24, T25, T26, T27,
+ T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
+ T30, T31, T32, T33, T34, T35,
+
+ /*
+ * Right-hand Shift key must have KBDEXT bit set.
+ */
+ T36 | KBDEXT,
+
+ T37 | KBDMULTIVK, // numpad_* + Shift/Alt -> SnapShot
+
+ T38, T39, T3A, T3B, T3C, T3D, T3E,
+ T3F, T40, T41, T42, T43, T44,
+
+ /*
+ * NumLock Key:
+ * KBDEXT - VK_NUMLOCK is an Extended key
+ * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
+ */
+ T45 | KBDEXT | KBDMULTIVK,
+
+ T46 | KBDMULTIVK,
+
+ /*
+ * Number Pad keys:
+ * KBDNUMPAD - digits 0-9 and decimal point.
+ * KBDSPECIAL - require special processing by Windows
+ */
+ T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home)
+ T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up),
+ T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp),
+ T4A,
+ T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left),
+ T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear),
+ T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right),
+ T4E,
+ T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End),
+ T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down),
+ T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn),
+ T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins),
+ T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del),
+
+ T54, T55, T56, T57, T58, T59, T5A, T5B,
+ T5C, T5D, T5E, T5F, T60, T61, T62, T63,
+ T64, T65, T66, T67, T68, T69, T6A, T6B,
+ T6C, T6D, T6E, T6F, T70, T71, T72, T73,
+ T74, T75, T76, T77, T78, T79, T7A, T7B,
+ T7C, T7D, T7E
+
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
+ { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track
+ { 0x19, X19 | KBDEXT }, // Speedracer: Next Track
+ { 0x1D, X1D | KBDEXT }, // RControl
+ { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute
+ { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2
+ { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause
+ { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop
+ { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down
+ { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up
+ { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home
+ { 0x35, X35 | KBDEXT }, // Numpad Divide
+ { 0x37, X37 | KBDEXT }, // Snapshot
+ { 0x38, X38 | KBDEXT }, // RMenu
+ { 0x47, X47 | KBDEXT }, // Home
+ { 0x48, X48 | KBDEXT }, // Up
+ { 0x49, X49 | KBDEXT }, // Prior
+ { 0x4B, X4B | KBDEXT }, // Left
+ { 0x4D, X4D | KBDEXT }, // Right
+ { 0x4F, X4F | KBDEXT }, // End
+ { 0x50, X50 | KBDEXT }, // Down
+ { 0x51, X51 | KBDEXT }, // Next
+ { 0x52, X52 | KBDEXT }, // Insert
+ { 0x53, X53 | KBDEXT }, // Delete
+ { 0x5B, X5B | KBDEXT }, // Left Win
+ { 0x5C, X5C | KBDEXT }, // Right Win
+ { 0x5D, X5D | KBDEXT }, // Application
+ { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep
+ { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search
+ { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites
+ { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh
+ { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop
+ { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward
+ { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back
+ { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1
+ { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail
+ { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector
+ { 0x1C, X1C | KBDEXT }, // Numpad Enter
+ { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause)
+ { 0, 0 }
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
+ { 0x1D, Y1D }, // Pause
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aVkToBits[] - map Virtual Keys to Modifier Bits
+*
+* See kbd.h for a full description.
+*
+* French Keyboard has only three shifter keys:
+* SHIFT (L & R) affects alphabnumeric keys,
+* CTRL (L & R) is used to generate control characters
+* ALT (L & R) used for generating characters by number with numpad
+\***************************************************************************/
+static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
+ { VK_SHIFT , KBDSHIFT },
+ { VK_CONTROL , KBDCTRL },
+ { VK_MENU , KBDALT },
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aModification[] - map character modifier bits to modification number
+*
+* See kbd.h for a full description.
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
+ &aVkToBits[0],
+ 6,
+ {
+ // Modification# // Keys Pressed
+ // ============= // =============
+ 0, //
+ 1, // Shift
+ 2, // Control
+ 4, // Shift + Control
+ SHFT_INVALID, // Menu
+ SHFT_INVALID, // Shift + Menu
+ 3 // Control + Menu
+ }
+};
+
+/***************************************************************************\
+*
+* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states
+* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states
+* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states
+* aVkToWch5[] - Virtual Key to WCHAR translation for 5 shift states
+*
+* Table attributes: Unordered Scan, null-terminated
+*
+* Search this table for an entry with a matching Virtual Key to find the
+* corresponding unshifted and shifted WCHAR characters.
+*
+* Special values for VirtualKey (column 1)
+* 0xff - dead chars for the previous entry
+* 0 - terminate the list
+*
+* Special values for Attributes (column 2)
+* CAPLOK bit - CAPS-LOCK affect this key like SHIFT
+*
+* Special values for wch[*] (column 3 & 4)
+* WCH_NONE - No character
+* WCH_DEAD - Dead Key (diaresis) or invalid (US keyboard has none)
+* WCH_LGTR - Ligature (generates multiple characters)
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS2 aVkToWch2[] = {
+// | | Shift |
+// |=========|=========|
+ {VK_OEM_7 ,0 ,0x00b2 ,WCH_NONE },
+ {'1' ,CAPLOK ,'&' ,'1' },
+ {'A' ,CAPLOK ,'a' ,'A' },
+ {'Z' ,CAPLOK ,'z' ,'Z' },
+ {'R' ,CAPLOK ,'r' ,'R' },
+ {'T' ,CAPLOK ,'t' ,'T' },
+ {'Y' ,CAPLOK ,'y' ,'Y' },
+ {'U' ,CAPLOK ,'u' ,'U' },
+ {'I' ,CAPLOK ,'i' ,'I' },
+ {'O' ,CAPLOK ,'o' ,'O' },
+ {'P' ,CAPLOK ,'p' ,'P' },
+ {'Q' ,CAPLOK ,'q' ,'Q' },
+ {'S' ,CAPLOK ,'s' ,'S' },
+ {'D' ,CAPLOK ,'d' ,'D' },
+ {'F' ,CAPLOK ,'f' ,'F' },
+ {'G' ,CAPLOK ,'g' ,'G' },
+ {'H' ,CAPLOK ,'h' ,'H' },
+ {'J' ,CAPLOK ,'j' ,'J' },
+ {'K' ,CAPLOK ,'k' ,'K' },
+ {'L' ,CAPLOK ,'l' ,'L' },
+ {'M' ,CAPLOK ,'m' ,'M' },
+ {VK_OEM_3 ,CAPLOK ,0x00f9 ,'%' },
+ {'W' ,CAPLOK ,'w' ,'W' },
+ {'X' ,CAPLOK ,'x' ,'X' },
+ {'C' ,CAPLOK ,'c' ,'C' },
+ {'V' ,CAPLOK ,'v' ,'V' },
+ {'B' ,CAPLOK ,'b' ,'B' },
+ {'N' ,CAPLOK ,'n' ,'N' },
+ {VK_OEM_COMMA ,CAPLOK ,',' ,'?' },
+ {VK_OEM_PERIOD,CAPLOK ,';' ,'.' },
+ {VK_OEM_2 ,CAPLOK ,':' ,'/' },
+ {VK_OEM_8 ,CAPLOK ,'!' ,0x00a7 },
+ {VK_DECIMAL ,0 ,'.' ,'.' },
+ {VK_TAB ,0 ,'\t' ,'\t' },
+ {VK_ADD ,0 ,'+' ,'+' },
+ {VK_DIVIDE ,0 ,'/' ,'/' },
+ {VK_MULTIPLY ,0 ,'*' ,'*' },
+ {VK_SUBTRACT ,0 ,'-' ,'-' },
+ {0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS3 aVkToWch3[] = {
+// | | Shift | Ctrl |
+// |=========|=========|=========|
+ {VK_OEM_6 ,CAPLOK ,WCH_DEAD ,WCH_DEAD ,0x001b },
+ {0xff ,0 ,'^' ,0x00a8 ,WCH_NONE },
+ {VK_OEM_5 ,CAPLOK ,'*' ,0x00b5 ,0x001c },
+ {VK_OEM_102 ,0 ,'<' ,'>' ,0x001c },
+ {VK_BACK ,0 ,'\b' ,'\b' ,0x007f },
+ {VK_ESCAPE ,0 ,0x001b ,0x001b ,0x001b },
+ {VK_RETURN ,0 ,'\r' ,'\r' ,'\n' },
+ {VK_SPACE ,0 ,' ' ,' ' ,' ' },
+ {VK_CANCEL ,0 ,0x0003 ,0x0003 ,0x0003 },
+ {0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
+// | | Shift | Ctrl | Ctl+Alt|
+// |=========|=========|=========|=========|
+ {'2' ,CAPLOK ,0x00e9 ,'2' ,WCH_NONE ,WCH_DEAD },
+ {0xff ,0 ,WCH_NONE ,WCH_NONE ,WCH_NONE ,'~' },
+ {'3' ,CAPLOK ,'\"' ,'3' ,WCH_NONE ,'#' },
+ {'4' ,CAPLOK ,'\'' ,'4' ,WCH_NONE ,'{' },
+ {'7' ,CAPLOK ,0x00e8 ,'7' ,WCH_NONE ,WCH_DEAD },
+ {0xff ,0 ,WCH_NONE ,WCH_NONE ,WCH_NONE ,'`' },
+ {'0' ,CAPLOK ,0x00e0 ,'0' ,0x0000 ,'@' },
+ {VK_OEM_4 ,CAPLOK ,')' ,0x00b0 ,WCH_NONE ,']' },
+ {VK_OEM_PLUS ,CAPLOK ,'=' ,'+' ,WCH_NONE ,'}' },
+ {'E' ,CAPLOK ,'e' ,'E' ,WCH_NONE ,0x20ac },
+ {VK_OEM_1 ,CAPLOK ,'$' ,0x00a3 ,0x001d ,0x00a4 },
+ {0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS5 aVkToWch5[] = {
+// | | Shift | Ctrl | Ctl+Alt|S+Ctrl |
+// |=========|=========|=========|=========|=========|
+ {'5' ,CAPLOK ,'(' ,'5' ,WCH_NONE ,'[' ,0x001b },
+ {'6' ,CAPLOK ,'-' ,'6' ,WCH_NONE ,'|' ,0x001f },
+ {'8' ,CAPLOK ,'_' ,'8' ,WCH_NONE ,'\\' ,0x001c },
+ {'9' ,CAPLOK ,0x00e7 ,'9' ,WCH_NONE ,'^' ,0x001e },
+ {0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+// Put this last so that VkKeyScan interprets number characters
+// as coming from the main section of the kbd (aVkToWch2 and
+// aVkToWch5) before considering the numpad (aVkToWch1).
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS1 aVkToWch1[] = {
+ { VK_NUMPAD0 , 0 , '0' },
+ { VK_NUMPAD1 , 0 , '1' },
+ { VK_NUMPAD2 , 0 , '2' },
+ { VK_NUMPAD3 , 0 , '3' },
+ { VK_NUMPAD4 , 0 , '4' },
+ { VK_NUMPAD5 , 0 , '5' },
+ { VK_NUMPAD6 , 0 , '6' },
+ { VK_NUMPAD7 , 0 , '7' },
+ { VK_NUMPAD8 , 0 , '8' },
+ { VK_NUMPAD9 , 0 , '9' },
+ { 0 , 0 , '\0' }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+ { (PVK_TO_WCHARS1)aVkToWch3, 3, sizeof(aVkToWch3[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch5, 5, sizeof(aVkToWch5[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) },
+ { NULL, 0, 0 },
+};
+
+/***************************************************************************\
+* aKeyNames[], aKeyNamesExt[] - Virtual Scancode to Key Name tables
+*
+* Table attributes: Ordered Scan (by scancode), null-terminated
+*
+* Only the names of Extended, NumPad, Dead and Non-Printable keys are here.
+* (Keys producing printable characters are named by that character)
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
+ 0x01, L"ECHAP",
+ 0x0e, L"RET.ARR",
+ 0x0f, L"TAB",
+ 0x1c, L"ENTREE",
+ 0x1d, L"CTRL",
+ 0x2a, L"MAJ",
+ 0x36, L"MAJ DROITE",
+ 0x37, L"* (PAVE NUM.)",
+ 0x38, L"ALT",
+ 0x39, L"ESPACE",
+ 0x3a, L"VERR.MAJ",
+ 0x3b, L"F1",
+ 0x3c, L"F2",
+ 0x3d, L"F3",
+ 0x3e, L"F4",
+ 0x3f, L"F5",
+ 0x40, L"F6",
+ 0x41, L"F7",
+ 0x42, L"F8",
+ 0x43, L"F9",
+ 0x44, L"F10",
+ 0x45, L"Pause",
+ 0x46, L"DEFIL",
+ 0x47, L"7 (PAVE NUM.)",
+ 0x48, L"8 (PAVE NUM.)",
+ 0x49, L"9 (PAVE NUM.)",
+ 0x4a, L"- (PAVE NUM.)",
+ 0x4b, L"4 (PAVE NUM.)",
+ 0x4c, L"5 (PAVE NUM.)",
+ 0x4d, L"6 (PAVE NUM.)",
+ 0x4e, L"+ (PAVE NUM.)",
+ 0x4f, L"1 (PAVE NUM.)",
+ 0x50, L"2 (PAVE NUM.)",
+ 0x51, L"3 (PAVE NUM.)",
+ 0x52, L"0 (PAVE NUM.)",
+ 0x53, L". (PAVE NUM.)",
+ 0x57, L"F11",
+ 0x58, L"F12",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
+ 0x1c, L"ENTREE (PAVE NUM.)",
+ 0x1d, L"CTRL DROITE",
+ 0x35, L"/ (PAVE NUM.)",
+ 0x37, L"Impr.Ecran",
+ 0x38, L"ALT DROITE",
+ 0x45, L"Ver.Num",
+ 0x46, L"ATTN",
+ 0x47, L"ORIGINE",
+ 0x48, L"HAUT",
+ 0x49, L"PG.PREC",
+ 0x4b, L"GAUCHE",
+ 0x4d, L"DROITE",
+ 0x4f, L"FIN",
+ 0x50, L"BAS",
+ 0x51, L"PG.SUIV",
+ 0x52, L"INS",
+ 0x53, L"SUPPR",
+ 0x54, L"<00>",
+ 0x56, L"AIDE",
+ 0x5b, L"WINDOWS GAUCHE",
+ 0x5c, L"WINDOWS DROITE",
+ 0x5d, L"APPLICATION",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY_LPWSTR aKeyNamesDead[] = {
+ L"^" L"ACCENT CIRCONFLEXE",
+ L"\x00a8" L"TREMA",
+ L"~" L"TILDE",
+ L"`" L"GRAVE",
+ NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY aDeadKey[] = {
+ DEADTRANS( L'a' , L'^' , 0x00e2 , 0x0000),
+ DEADTRANS( L'e' , L'^' , 0x00ea , 0x0000),
+ DEADTRANS( L'i' , L'^' , 0x00ee , 0x0000),
+ DEADTRANS( L'o' , L'^' , 0x00f4 , 0x0000),
+ DEADTRANS( L'u' , L'^' , 0x00fb , 0x0000),
+ DEADTRANS( L'A' , L'^' , 0x00c2 , 0x0000),
+ DEADTRANS( L'E' , L'^' , 0x00ca , 0x0000),
+ DEADTRANS( L'I' , L'^' , 0x00ce , 0x0000),
+ DEADTRANS( L'O' , L'^' , 0x00d4 , 0x0000),
+ DEADTRANS( L'U' , L'^' , 0x00db , 0x0000),
+ DEADTRANS( L' ' , L'^' , L'^' , 0x0000),
+
+ DEADTRANS( L'a' , 0x00a8 , 0x00e4 , 0x0000),
+ DEADTRANS( L'e' , 0x00a8 , 0x00eb , 0x0000),
+ DEADTRANS( L'i' , 0x00a8 , 0x00ef , 0x0000),
+ DEADTRANS( L'o' , 0x00a8 , 0x00f6 , 0x0000),
+ DEADTRANS( L'u' , 0x00a8 , 0x00fc , 0x0000),
+ DEADTRANS( L'y' , 0x00a8 , 0x00ff , 0x0000),
+ DEADTRANS( L'A' , 0x00a8 , 0x00c4 , 0x0000),
+ DEADTRANS( L'E' , 0x00a8 , 0x00cb , 0x0000),
+ DEADTRANS( L'I' , 0x00a8 , 0x00cf , 0x0000),
+ DEADTRANS( L'O' , 0x00a8 , 0x00d6 , 0x0000),
+ DEADTRANS( L'U' , 0x00a8 , 0x00dc , 0x0000),
+ DEADTRANS( L' ' , 0x00a8 , 0x00a8 , 0x0000),
+
+ DEADTRANS( L'a' , L'~' , 0x00e3 , 0x0000),
+ DEADTRANS( L'A' , L'~' , 0x00c3 , 0x0000),
+ DEADTRANS( L'n' , L'~' , 0x00f1 , 0x0000),
+ DEADTRANS( L'N' , L'~' , 0x00d1 , 0x0000),
+ DEADTRANS( L'o' , L'~' , 0x00f5 , 0x0000),
+ DEADTRANS( L'O' , L'~' , 0x00d5 , 0x0000),
+ DEADTRANS( L' ' , L'~' , L'~' , 0x0000),
+
+ DEADTRANS( L'a' , L'`' , 0x00e0 , 0x0000),
+ DEADTRANS( L'e' , L'`' , 0x00e8 , 0x0000),
+ DEADTRANS( L'i' , L'`' , 0x00ec , 0x0000),
+ DEADTRANS( L'o' , L'`' , 0x00f2 , 0x0000),
+ DEADTRANS( L'u' , L'`' , 0x00f9 , 0x0000),
+ DEADTRANS( L'A' , L'`' , 0x00c0 , 0x0000),
+ DEADTRANS( L'E' , L'`' , 0x00c8 , 0x0000),
+ DEADTRANS( L'I' , L'`' , 0x00cc , 0x0000),
+ DEADTRANS( L'O' , L'`' , 0x00d2 , 0x0000),
+ DEADTRANS( L'U' , L'`' , 0x00d9 , 0x0000),
+ DEADTRANS( L' ' , L'`' , L'`' , 0x0000),
+
+ 0, 0
+};
+
+static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
+ /*
+ * Modifier keys
+ */
+ &CharModifiers,
+
+ /*
+ * Characters tables
+ */
+ aVkToWcharTable,
+
+ /*
+ * Diacritics
+ */
+ aDeadKey,
+
+ /*
+ * Names of Keys
+ */
+ aKeyNames,
+ aKeyNamesExt,
+ aKeyNamesDead,
+
+ /*
+ * Scan codes to Virtual Keys
+ */
+ ausVK,
+ sizeof(ausVK) / sizeof(ausVK[0]),
+ aE0VscToVk,
+ aE1VscToVk,
+
+ /*
+ * Locale-specific special processing
+ */
+ MAKELONG(KLLF_ALTGR, KBD_VERSION),
+
+ /*
+ * Ligatures
+ */
+ 0,
+ 0,
+ NULL
+};
+
+PKBDTABLES KbdLayerDescriptor(VOID)
+{
+ return &KbdTables;
+}
diff --git a/input/layout/all_kbds/kbdfr/kbdfr.def b/input/layout/all_kbds/kbdfr/kbdfr.def
new file mode 100644
index 00000000..3e8131fb
--- /dev/null
+++ b/input/layout/all_kbds/kbdfr/kbdfr.def
@@ -0,0 +1,4 @@
+LIBRARY KBDFR
+
+EXPORTS
+ KbdLayerDescriptor @1
diff --git a/input/layout/all_kbds/kbdfr/kbdfr.h b/input/layout/all_kbds/kbdfr/kbdfr.h
new file mode 100644
index 00000000..ec23fd5f
--- /dev/null
+++ b/input/layout/all_kbds/kbdfr/kbdfr.h
@@ -0,0 +1,66 @@
+/****************************** Module Header ******************************\
+* Module Name: KBDFR.H
+*
+* keyboard layout header for French
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* Various defines for use by keyboard input code.
+*
+* History:
+*
+* created by KBDTOOL v3.11 Thu Aug 24 18:10:18 2000
+*
+\***************************************************************************/
+
+/*
+ * kbd type should be controlled by cl command-line argument
+ */
+#define KBD_TYPE 4
+
+/*
+* Include the basis of all keyboard table values
+*/
+#include "kbd.h"
+#include <dontuse.h>
+/***************************************************************************\
+* The table below defines the virtual keys for various keyboard types where
+* the keyboard differ from the US keyboard.
+*
+* _EQ() : all keyboard types have the same virtual key for this scancode
+* _NE() : different virtual keys for this scancode, depending on kbd type
+*
+* +------+ +----------+----------+----------+----------+----------+----------+
+* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd |
+* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 |
+\****+-------+_+----------+----------+----------+----------+----------+----------+*/
+
+#undef T29
+#define T29 _EQ( OEM_7 )
+#undef T0C
+#define T0C _EQ( OEM_4 )
+#undef T10
+#define T10 _EQ( 'A' )
+#undef T11
+#define T11 _EQ( 'Z' )
+#undef T1A
+#define T1A _EQ( OEM_6 )
+#undef T1B
+#define T1B _EQ( OEM_1 )
+#undef T1E
+#define T1E _EQ( 'Q' )
+#undef T27
+#define T27 _EQ( 'M' )
+#undef T28
+#define T28 _EQ( OEM_3 )
+#undef T2C
+#define T2C _EQ( 'W' )
+#undef T32
+#define T32 _EQ( OEM_COMMA )
+#undef T33
+#define T33 _EQ( OEM_PERIOD )
+#undef T34
+#define T34 _EQ( OEM_2 )
+#undef T35
+#define T35 _EQ( OEM_8 )
+
diff --git a/input/layout/all_kbds/kbdfr/kbdfr.rc b/input/layout/all_kbds/kbdfr/kbdfr.rc
new file mode 100644
index 00000000..cb42c445
--- /dev/null
+++ b/input/layout/all_kbds/kbdfr/kbdfr.rc
@@ -0,0 +1,11 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_DRV_KEYBOARD
+#define VER_FILEDESCRIPTION_STR "French Keyboard Layout"
+#define VER_INTERNALNAME_STR "kbdfr (3.11)"
+#define VER_ORIGINALFILENAME_STR "kbdfr.dll"
+
+#define VER_LANGNEUTRAL
+#include "common.ver"
diff --git a/input/layout/all_kbds/kbdfr/kbdfr.vcxproj b/input/layout/all_kbds/kbdfr/kbdfr.vcxproj
new file mode 100644
index 00000000..d4252520
--- /dev/null
+++ b/input/layout/all_kbds/kbdfr/kbdfr.vcxproj
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}</ProjectGuid>
+ <RootNamespace>$(MSBuildProjectName)</RootNamespace>
+ <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <SampleGuid>{051CA44C-EEB6-4936-84E5-972987B6EBE3}</SampleGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <PropertyGroup>
+ <OutDir>$(IntDir)</OutDir>
+ </PropertyGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ItemGroup Label="WrappedTaskItems" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>kbdfr</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>kbdfr</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>kbdfr</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>kbdfr</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdfr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdfr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdfr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdfr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="kbdfr.c" />
+ <ResourceCompile Include="kbdfr.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Exclude="@(Inf)" Include="*.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
+ <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
+ <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project> \ No newline at end of file
diff --git a/input/layout/all_kbds/kbdfr/kbdfr.vcxproj.Filters b/input/layout/all_kbds/kbdfr/kbdfr.vcxproj.Filters
new file mode 100644
index 00000000..bfaa9336
--- /dev/null
+++ b/input/layout/all_kbds/kbdfr/kbdfr.vcxproj.Filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
+ <UniqueIdentifier>{15C7D960-5582-4A58-9857-E07EFB799C67}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <UniqueIdentifier>{7C275084-2AF3-4B5E-A09E-79492E933729}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource Files">
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
+ <UniqueIdentifier>{E3BA19AC-3AB1-4E9A-957A-6F65CC116AE3}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="kbdfr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <None Include="kbdfr.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="kbdfr.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/input/layout/all_kbds/kbdgr/kbdgr.c b/input/layout/all_kbds/kbdgr/kbdgr.c
new file mode 100644
index 00000000..1c93c26f
--- /dev/null
+++ b/input/layout/all_kbds/kbdgr/kbdgr.c
@@ -0,0 +1,482 @@
+/***************************************************************************\
+* Module Name: KBDGR.C
+*
+* keyboard layout for German
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* History:
+* KBDTOOL v3.11 - Created Thu Aug 24 18:10:19 2000
+\***************************************************************************/
+
+#include <windows.h>
+#include "kbd.h"
+#include "kbdGR.h"
+
+#if defined(_M_IA64)
+#pragma section(".data")
+#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
+#else
+#pragma data_seg(".data")
+#define ALLOC_SECTION_LDATA
+#endif
+
+/***************************************************************************\
+* ausVK[] - Virtual Scan Code to Virtual Key conversion table for German
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA USHORT ausVK[] = {
+ T00, T01, T02, T03, T04, T05, T06, T07,
+ T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
+ T10, T11, T12, T13, T14, T15, T16, T17,
+ T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
+ T20, T21, T22, T23, T24, T25, T26, T27,
+ T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
+ T30, T31, T32, T33, T34, T35,
+
+ /*
+ * Right-hand Shift key must have KBDEXT bit set.
+ */
+ T36 | KBDEXT,
+
+ T37 | KBDMULTIVK, // numpad_* + Shift/Alt -> SnapShot
+
+ T38, T39, T3A, T3B, T3C, T3D, T3E,
+ T3F, T40, T41, T42, T43, T44,
+
+ /*
+ * NumLock Key:
+ * KBDEXT - VK_NUMLOCK is an Extended key
+ * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
+ */
+ T45 | KBDEXT | KBDMULTIVK,
+
+ T46 | KBDMULTIVK,
+
+ /*
+ * Number Pad keys:
+ * KBDNUMPAD - digits 0-9 and decimal point.
+ * KBDSPECIAL - require special processing by Windows
+ */
+ T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home)
+ T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up),
+ T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp),
+ T4A,
+ T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left),
+ T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear),
+ T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right),
+ T4E,
+ T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End),
+ T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down),
+ T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn),
+ T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins),
+ T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del),
+
+ T54, T55, T56, T57, T58, T59, T5A, T5B,
+ T5C, T5D, T5E, T5F, T60, T61, T62, T63,
+ T64, T65, T66, T67, T68, T69, T6A, T6B,
+ T6C, T6D, T6E, T6F, T70, T71, T72, T73,
+ T74, T75, T76, T77, T78, T79, T7A, T7B,
+ T7C, T7D, T7E
+
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
+ { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track
+ { 0x19, X19 | KBDEXT }, // Speedracer: Next Track
+ { 0x1D, X1D | KBDEXT }, // RControl
+ { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute
+ { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2
+ { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause
+ { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop
+ { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down
+ { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up
+ { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home
+ { 0x35, X35 | KBDEXT }, // Numpad Divide
+ { 0x37, X37 | KBDEXT }, // Snapshot
+ { 0x38, X38 | KBDEXT }, // RMenu
+ { 0x47, X47 | KBDEXT }, // Home
+ { 0x48, X48 | KBDEXT }, // Up
+ { 0x49, X49 | KBDEXT }, // Prior
+ { 0x4B, X4B | KBDEXT }, // Left
+ { 0x4D, X4D | KBDEXT }, // Right
+ { 0x4F, X4F | KBDEXT }, // End
+ { 0x50, X50 | KBDEXT }, // Down
+ { 0x51, X51 | KBDEXT }, // Next
+ { 0x52, X52 | KBDEXT }, // Insert
+ { 0x53, X53 | KBDEXT }, // Delete
+ { 0x5B, X5B | KBDEXT }, // Left Win
+ { 0x5C, X5C | KBDEXT }, // Right Win
+ { 0x5D, X5D | KBDEXT }, // Application
+ { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep
+ { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search
+ { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites
+ { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh
+ { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop
+ { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward
+ { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back
+ { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1
+ { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail
+ { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector
+ { 0x1C, X1C | KBDEXT }, // Numpad Enter
+ { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause)
+ { 0, 0 }
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
+ { 0x1D, Y1D }, // Pause
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aVkToBits[] - map Virtual Keys to Modifier Bits
+*
+* See kbd.h for a full description.
+*
+* German Keyboard has only three shifter keys:
+* SHIFT (L & R) affects alphabnumeric keys,
+* CTRL (L & R) is used to generate control characters
+* ALT (L & R) used for generating characters by number with numpad
+\***************************************************************************/
+static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
+ { VK_SHIFT , KBDSHIFT },
+ { VK_CONTROL , KBDCTRL },
+ { VK_MENU , KBDALT },
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aModification[] - map character modifier bits to modification number
+*
+* See kbd.h for a full description.
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
+ &aVkToBits[0],
+ 6,
+ {
+ // Modification# // Keys Pressed
+ // ============= // =============
+ 0, //
+ 1, // Shift
+ 3, // Control
+ 4, // Shift + Control
+ SHFT_INVALID, // Menu
+ SHFT_INVALID, // Shift + Menu
+ 2 // Control + Menu
+ }
+};
+
+/***************************************************************************\
+*
+* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states
+* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states
+* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states
+* aVkToWch5[] - Virtual Key to WCHAR translation for 5 shift states
+*
+* Table attributes: Unordered Scan, null-terminated
+*
+* Search this table for an entry with a matching Virtual Key to find the
+* corresponding unshifted and shifted WCHAR characters.
+*
+* Special values for VirtualKey (column 1)
+* 0xff - dead chars for the previous entry
+* 0 - terminate the list
+*
+* Special values for Attributes (column 2)
+* CAPLOK bit - CAPS-LOCK affect this key like SHIFT
+*
+* Special values for wch[*] (column 3 & 4)
+* WCH_NONE - No character
+* WCH_DEAD - Dead Key (diaresis) or invalid (US keyboard has none)
+* WCH_LGTR - Ligature (generates multiple characters)
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS2 aVkToWch2[] = {
+// | | Shift |
+// |=========|=========|
+ {VK_OEM_5 ,0 ,WCH_DEAD ,0x00b0 },
+ {0xff ,0 ,'^' ,WCH_NONE },
+ {'1' ,CAPLOK ,'1' ,'!' },
+ {'4' ,CAPLOK ,'4' ,'$' },
+ {'5' ,CAPLOK ,'5' ,'%' },
+ {VK_OEM_6 ,0 ,WCH_DEAD ,WCH_DEAD },
+ {0xff ,0 ,0x00b4 ,'`' },
+ {'W' ,CAPLOK ,'w' ,'W' },
+ {'R' ,CAPLOK ,'r' ,'R' },
+ {'T' ,CAPLOK ,'t' ,'T' },
+ {'Z' ,CAPLOK ,'z' ,'Z' },
+ {'U' ,CAPLOK ,'u' ,'U' },
+ {'I' ,CAPLOK ,'i' ,'I' },
+ {'O' ,CAPLOK ,'o' ,'O' },
+ {'P' ,CAPLOK ,'p' ,'P' },
+ {'A' ,CAPLOK ,'a' ,'A' },
+ {'S' ,CAPLOK ,'s' ,'S' },
+ {'D' ,CAPLOK ,'d' ,'D' },
+ {'F' ,CAPLOK ,'f' ,'F' },
+ {'G' ,CAPLOK ,'g' ,'G' },
+ {'H' ,CAPLOK ,'h' ,'H' },
+ {'J' ,CAPLOK ,'j' ,'J' },
+ {'K' ,CAPLOK ,'k' ,'K' },
+ {'L' ,CAPLOK ,'l' ,'L' },
+ {VK_OEM_3 ,CAPLOK ,0x00f6 ,0x00d6 },
+ {VK_OEM_7 ,CAPLOK ,0x00e4 ,0x00c4 },
+ {'Y' ,CAPLOK ,'y' ,'Y' },
+ {'X' ,CAPLOK ,'x' ,'X' },
+ {'C' ,CAPLOK ,'c' ,'C' },
+ {'V' ,CAPLOK ,'v' ,'V' },
+ {'B' ,CAPLOK ,'b' ,'B' },
+ {'N' ,CAPLOK ,'n' ,'N' },
+ {VK_OEM_COMMA ,CAPLOK ,',' ,';' },
+ {VK_OEM_PERIOD,CAPLOK ,'.' ,':' },
+ {VK_DECIMAL ,0 ,',' ,',' },
+ {VK_TAB ,0 ,'\t' ,'\t' },
+ {VK_ADD ,0 ,'+' ,'+' },
+ {VK_DIVIDE ,0 ,'/' ,'/' },
+ {VK_MULTIPLY ,0 ,'*' ,'*' },
+ {VK_SUBTRACT ,0 ,'-' ,'-' },
+ {0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS3 aVkToWch3[] = {
+// | | Shift | Ctl+Alt|
+// |=========|=========|=========|
+ {'3' ,CAPLOK ,'3' ,0x00a7 ,0x00b3 },
+ {'7' ,CAPLOK ,'7' ,'/' ,'{' },
+ {'8' ,CAPLOK ,'8' ,'(' ,'[' },
+ {'9' ,CAPLOK ,'9' ,')' ,']' },
+ {'0' ,CAPLOK ,'0' ,'=' ,'}' },
+ {VK_OEM_4 ,CAPLOK ,0x00df ,'?' ,'\\' },
+ {'Q' ,CAPLOK ,'q' ,'Q' ,'@' },
+ {'E' ,CAPLOK ,'e' ,'E' ,0x20ac },
+ {'M' ,CAPLOK ,'m' ,'M' ,0x00b5 },
+ {VK_OEM_102 ,0 ,'<' ,'>' ,'|' },
+ {0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
+// | | Shift | Ctl+Alt| Ctrl |
+// |=========|=========|=========|=========|
+ {VK_OEM_1 ,CAPLOK ,0x00fc ,0x00dc ,WCH_NONE ,0x001b },
+ {VK_OEM_PLUS ,CAPLOK ,'+' ,'*' ,'~' ,0x001d },
+ {VK_OEM_2 ,CAPLOK ,'#' ,'\'' ,WCH_NONE ,0x001c },
+ {VK_BACK ,0 ,'\b' ,'\b' ,WCH_NONE ,0x007f },
+ {VK_ESCAPE ,0 ,0x001b ,0x001b ,WCH_NONE ,0x001b },
+ {VK_RETURN ,0 ,'\r' ,'\r' ,WCH_NONE ,'\n' },
+ {VK_SPACE ,0 ,' ' ,' ' ,WCH_NONE ,' ' },
+ {VK_CANCEL ,0 ,0x0003 ,0x0003 ,WCH_NONE ,0x0003 },
+ {0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS5 aVkToWch5[] = {
+// | | Shift | Ctl+Alt| Ctrl |S+Ctrl |
+// |=========|=========|=========|=========|=========|
+ {'2' ,CAPLOK ,'2' ,'\"' ,0x00b2 ,WCH_NONE ,0x0000 },
+ {'6' ,CAPLOK ,'6' ,'&' ,WCH_NONE ,WCH_NONE ,0x001e },
+ {VK_OEM_MINUS ,0 ,'-' ,'_' ,WCH_NONE ,WCH_NONE ,0x001f },
+ {0 ,0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+// Put this last so that VkKeyScan interprets number characters
+// as coming from the main section of the kbd (aVkToWch2 and
+// aVkToWch5) before considering the numpad (aVkToWch1).
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS1 aVkToWch1[] = {
+ { VK_NUMPAD0 , 0 , '0' },
+ { VK_NUMPAD1 , 0 , '1' },
+ { VK_NUMPAD2 , 0 , '2' },
+ { VK_NUMPAD3 , 0 , '3' },
+ { VK_NUMPAD4 , 0 , '4' },
+ { VK_NUMPAD5 , 0 , '5' },
+ { VK_NUMPAD6 , 0 , '6' },
+ { VK_NUMPAD7 , 0 , '7' },
+ { VK_NUMPAD8 , 0 , '8' },
+ { VK_NUMPAD9 , 0 , '9' },
+ { 0 , 0 , '\0' }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+ { (PVK_TO_WCHARS1)aVkToWch3, 3, sizeof(aVkToWch3[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch5, 5, sizeof(aVkToWch5[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) },
+ { NULL, 0, 0 },
+};
+
+/***************************************************************************\
+* aKeyNames[], aKeyNamesExt[] - Virtual Scancode to Key Name tables
+*
+* Table attributes: Ordered Scan (by scancode), null-terminated
+*
+* Only the names of Extended, NumPad, Dead and Non-Printable keys are here.
+* (Keys producing printable characters are named by that character)
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
+ 0x01, L"ESC",
+ 0x0e, L"R\x00DC" L"CK",
+ 0x0f, L"TABULATOR",
+ 0x1c, L"EINGABE",
+ 0x1d, L"STRG",
+ 0x2a, L"UMSCHALT",
+ 0x36, L"UMSCHALT RECHTS",
+ 0x37, L" (ZEHNERTASTATUR)",
+ 0x38, L"ALT",
+ 0x39, L"LEER",
+ 0x3a, L"FESTSTELL",
+ 0x3b, L"F1",
+ 0x3c, L"F2",
+ 0x3d, L"F3",
+ 0x3e, L"F4",
+ 0x3f, L"F5",
+ 0x40, L"F6",
+ 0x41, L"F7",
+ 0x42, L"F8",
+ 0x43, L"F9",
+ 0x44, L"F10",
+ 0x45, L"PAUSE",
+ 0x46, L"ROLLEN-FESTSTELL",
+ 0x47, L"7 (ZEHNERTASTATUR)",
+ 0x48, L"8 (ZEHNERTASTATUR)",
+ 0x49, L"9 (ZEHNERTASTATUR)",
+ 0x4a, L"- (ZEHNERTASTATUR)",
+ 0x4b, L"4 (ZEHNERTASTATUR)",
+ 0x4c, L"5 (ZEHNERTASTATUR)",
+ 0x4d, L"6 (ZEHNERTASTATUR)",
+ 0x4e, L"+ (ZEHNERTASTATUR)",
+ 0x4f, L"1 (ZEHNERTASTATUR)",
+ 0x50, L"2 (ZEHNERTASTATUR)",
+ 0x51, L"3 (ZEHNERTASTATUR)",
+ 0x52, L"0 (ZEHNERTASTATUR)",
+ 0x53, L"KOMMA (ZEHNERTASTATUR)",
+ 0x57, L"F11",
+ 0x58, L"F12",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
+ 0x1c, L"EINGABE (ZEHNERTASTATUR)",
+ 0x1d, L"STRG-RECHTS",
+ 0x35, L" (ZEHNERTASTATUR)",
+ 0x37, L"DRUCK",
+ 0x38, L"ALT GR",
+ 0x45, L"NUM-FESTSTELL",
+ 0x46, L"UNTBR",
+ 0x47, L"POS1",
+ 0x48, L"NACH-OBEN",
+ 0x49, L"BILD-NACH-OBEN",
+ 0x4b, L"NACH-LINKS",
+ 0x4d, L"NACH-RECHTS",
+ 0x4f, L"ENDE",
+ 0x50, L"NACH-UNTEN",
+ 0x51, L"BILD-NACH-UNTEN",
+ 0x52, L"EINFG",
+ 0x53, L"ENTF",
+ 0x54, L"<00>",
+ 0x56, L"HILFE",
+ 0x5b, L"LINKE WINDOWS",
+ 0x5c, L"RECHTE WINDOWS",
+ 0x5d, L"ANWENDUNG",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY_LPWSTR aKeyNamesDead[] = {
+ L"\x00b4" L"AKUT",
+ L"`" L"GRAVIS",
+ L"^" L"ZIRKUMFLEX",
+ NULL
+};
+
+static ALLOC_SECTION_LDATA DEADKEY aDeadKey[] = {
+ DEADTRANS( L'a' , L'^' , 0x00e2 , 0x0000),
+ DEADTRANS( L'e' , L'^' , 0x00ea , 0x0000),
+ DEADTRANS( L'i' , L'^' , 0x00ee , 0x0000),
+ DEADTRANS( L'o' , L'^' , 0x00f4 , 0x0000),
+ DEADTRANS( L'u' , L'^' , 0x00fb , 0x0000),
+ DEADTRANS( L'A' , L'^' , 0x00c2 , 0x0000),
+ DEADTRANS( L'E' , L'^' , 0x00ca , 0x0000),
+ DEADTRANS( L'I' , L'^' , 0x00ce , 0x0000),
+ DEADTRANS( L'O' , L'^' , 0x00d4 , 0x0000),
+ DEADTRANS( L'U' , L'^' , 0x00db , 0x0000),
+ DEADTRANS( L' ' , L'^' , L'^' , 0x0000),
+
+ DEADTRANS( L'a' , 0x00b4 , 0x00e1 , 0x0000),
+ DEADTRANS( L'e' , 0x00b4 , 0x00e9 , 0x0000),
+ DEADTRANS( L'i' , 0x00b4 , 0x00ed , 0x0000),
+ DEADTRANS( L'o' , 0x00b4 , 0x00f3 , 0x0000),
+ DEADTRANS( L'u' , 0x00b4 , 0x00fa , 0x0000),
+ DEADTRANS( L'y' , 0x00b4 , 0x00fd , 0x0000),
+ DEADTRANS( L'A' , 0x00b4 , 0x00c1 , 0x0000),
+ DEADTRANS( L'E' , 0x00b4 , 0x00c9 , 0x0000),
+ DEADTRANS( L'I' , 0x00b4 , 0x00cd , 0x0000),
+ DEADTRANS( L'O' , 0x00b4 , 0x00d3 , 0x0000),
+ DEADTRANS( L'U' , 0x00b4 , 0x00da , 0x0000),
+ DEADTRANS( L'Y' , 0x00b4 , 0x00dd , 0x0000),
+ DEADTRANS( L' ' , 0x00b4 , 0x00b4 , 0x0000),
+
+ DEADTRANS( L'a' , L'`' , 0x00e0 , 0x0000),
+ DEADTRANS( L'e' , L'`' , 0x00e8 , 0x0000),
+ DEADTRANS( L'i' , L'`' , 0x00ec , 0x0000),
+ DEADTRANS( L'o' , L'`' , 0x00f2 , 0x0000),
+ DEADTRANS( L'u' , L'`' , 0x00f9 , 0x0000),
+ DEADTRANS( L'A' , L'`' , 0x00c0 , 0x0000),
+ DEADTRANS( L'E' , L'`' , 0x00c8 , 0x0000),
+ DEADTRANS( L'I' , L'`' , 0x00cc , 0x0000),
+ DEADTRANS( L'O' , L'`' , 0x00d2 , 0x0000),
+ DEADTRANS( L'U' , L'`' , 0x00d9 , 0x0000),
+ DEADTRANS( L' ' , L'`' , L'`' , 0x0000),
+
+ 0, 0
+};
+
+static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
+ /*
+ * Modifier keys
+ */
+ &CharModifiers,
+
+ /*
+ * Characters tables
+ */
+ aVkToWcharTable,
+
+ /*
+ * Diacritics
+ */
+ aDeadKey,
+
+ /*
+ * Names of Keys
+ */
+ aKeyNames,
+ aKeyNamesExt,
+ aKeyNamesDead,
+
+ /*
+ * Scan codes to Virtual Keys
+ */
+ ausVK,
+ sizeof(ausVK) / sizeof(ausVK[0]),
+ aE0VscToVk,
+ aE1VscToVk,
+
+ /*
+ * Locale-specific special processing
+ */
+ MAKELONG(KLLF_ALTGR, KBD_VERSION),
+
+ /*
+ * Ligatures
+ */
+ 0,
+ 0,
+ NULL
+};
+
+PKBDTABLES KbdLayerDescriptor(VOID)
+{
+ return &KbdTables;
+}
diff --git a/input/layout/all_kbds/kbdgr/kbdgr.def b/input/layout/all_kbds/kbdgr/kbdgr.def
new file mode 100644
index 00000000..a6a97d5a
--- /dev/null
+++ b/input/layout/all_kbds/kbdgr/kbdgr.def
@@ -0,0 +1,4 @@
+LIBRARY KBDGR
+
+EXPORTS
+ KbdLayerDescriptor @1
diff --git a/input/layout/all_kbds/kbdgr/kbdgr.h b/input/layout/all_kbds/kbdgr/kbdgr.h
new file mode 100644
index 00000000..5a283440
--- /dev/null
+++ b/input/layout/all_kbds/kbdgr/kbdgr.h
@@ -0,0 +1,58 @@
+/****************************** Module Header ******************************\
+* Module Name: KBDGR.H
+*
+* keyboard layout header for German
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* Various defines for use by keyboard input code.
+*
+* History:
+*
+* created by KBDTOOL v3.11 Thu Aug 24 18:10:19 2000
+*
+\***************************************************************************/
+
+/*
+ * kbd type should be controlled by cl command-line argument
+ */
+#define KBD_TYPE 4
+
+/*
+* Include the basis of all keyboard table values
+*/
+#include "kbd.h"
+#include <dontuse.h>
+/***************************************************************************\
+* The table below defines the virtual keys for various keyboard types where
+* the keyboard differ from the US keyboard.
+*
+* _EQ() : all keyboard types have the same virtual key for this scancode
+* _NE() : different virtual keys for this scancode, depending on kbd type
+*
+* +------+ +----------+----------+----------+----------+----------+----------+
+* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd |
+* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 |
+\****+-------+_+----------+----------+----------+----------+----------+----------+*/
+
+#undef T29
+#define T29 _EQ( OEM_5 )
+#undef T0C
+#define T0C _EQ( OEM_4 )
+#undef T0D
+#define T0D _EQ( OEM_6 )
+#undef T15
+#define T15 _EQ( 'Z' )
+#undef T1A
+#define T1A _EQ( OEM_1 )
+#undef T1B
+#define T1B _EQ( OEM_PLUS )
+#undef T2B
+#define T2B _EQ( OEM_2 )
+#undef T27
+#define T27 _EQ( OEM_3 )
+#undef T2C
+#define T2C _EQ( 'Y' )
+#undef T35
+#define T35 _EQ( OEM_MINUS )
+
diff --git a/input/layout/all_kbds/kbdgr/kbdgr.rc b/input/layout/all_kbds/kbdgr/kbdgr.rc
new file mode 100644
index 00000000..6c66f938
--- /dev/null
+++ b/input/layout/all_kbds/kbdgr/kbdgr.rc
@@ -0,0 +1,11 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_DRV_KEYBOARD
+#define VER_FILEDESCRIPTION_STR "German Keyboard Layout"
+#define VER_INTERNALNAME_STR "kbdgr (3.11)"
+#define VER_ORIGINALFILENAME_STR "kbdgr.dll"
+
+#define VER_LANGNEUTRAL
+#include "common.ver"
diff --git a/input/layout/all_kbds/kbdgr/kbdgr.vcxproj b/input/layout/all_kbds/kbdgr/kbdgr.vcxproj
new file mode 100644
index 00000000..c59a9625
--- /dev/null
+++ b/input/layout/all_kbds/kbdgr/kbdgr.vcxproj
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F918E44C-4E53-4267-BFDB-71112122DFE2}</ProjectGuid>
+ <RootNamespace>$(MSBuildProjectName)</RootNamespace>
+ <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <SampleGuid>{410247ED-4375-426C-A52A-1242555AB0AE}</SampleGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <PropertyGroup>
+ <OutDir>$(IntDir)</OutDir>
+ </PropertyGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ItemGroup Label="WrappedTaskItems" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>kbdgr</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>kbdgr</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>kbdgr</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>kbdgr</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdgr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdgr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdgr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdgr.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="kbdgr.c" />
+ <ResourceCompile Include="kbdgr.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Exclude="@(Inf)" Include="*.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
+ <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
+ <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project> \ No newline at end of file
diff --git a/input/layout/all_kbds/kbdgr/kbdgr.vcxproj.Filters b/input/layout/all_kbds/kbdgr/kbdgr.vcxproj.Filters
new file mode 100644
index 00000000..7972fc8c
--- /dev/null
+++ b/input/layout/all_kbds/kbdgr/kbdgr.vcxproj.Filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
+ <UniqueIdentifier>{04250DA4-9C11-47C6-ADB5-D51AFB576121}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <UniqueIdentifier>{44BD7566-A35B-46E2-8C7A-C5DB8E778A25}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource Files">
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
+ <UniqueIdentifier>{6E6580AB-01C6-4F48-A3DA-B2802C85EC4F}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="kbdgr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <None Include="kbdgr.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="kbdgr.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/input/layout/fe_kbds/fekbds.inc b/input/layout/fe_kbds/fekbds.inc
new file mode 100644
index 00000000..5c4f68f6
--- /dev/null
+++ b/input/layout/fe_kbds/fekbds.inc
@@ -0,0 +1,23 @@
+#****************************** File Header ******************************\
+# File Name: Sources.inc for FE KBDs
+#
+# Copyright (c) 1985-2000, Microsoft Corporation
+#
+# Project specific SOURCES file.
+#
+# History:
+# May-14-1999 HiroYama Created
+#***************************************************************************/
+
+
+TARGETNAME=$(LAYOUTNAME)
+
+
+!include ..\..\..\sources.inc
+
+
+# Override some of the values set by sources.inc
+SOURCES=$(LAYOUTNAME).c $(LAYOUTNAME).rc
+
+C_DEFINES=$(C_DEFINES) -DFE_SB -DFE_IME
+
diff --git a/input/layout/fe_kbds/jpn/101/kbd101.c b/input/layout/fe_kbds/jpn/101/kbd101.c
new file mode 100644
index 00000000..141bc194
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/101/kbd101.c
@@ -0,0 +1,556 @@
+/***************************************************************************\
+* Module Name: kbd101.c
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* History:
+\***************************************************************************/
+
+#include <windows.h>
+#include "kbdjpn.h"
+#include "kbd101.h"
+
+#if defined(_M_IA64)
+#pragma section(".data")
+#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
+#else
+#pragma data_seg(".data")
+#define ALLOC_SECTION_LDATA
+#endif
+
+/***************************************************************************\
+* ausVK[] - Virtual Scan Code to Virtual Key conversion table for 101
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA USHORT ausVK[] = {
+ T00, T01, T02, T03, T04, T05, T06, T07,
+ T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
+ T10, T11, T12, T13, T14, T15, T16, T17,
+ T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
+ T20, T21, T22, T23, T24, T25, T26, T27,
+ T28,
+
+ /*
+ * '~' key must have KBDSPECIAL bit set. (NLS key)
+ */
+ T29 | KBDSPECIAL,
+
+ T2A, T2B, T2C, T2D, T2E, T2F,
+ T30, T31, T32, T33, T34, T35,
+
+ /*
+ * Right-hand Shift key must have KBDEXT bit set.
+ */
+ T36 | KBDEXT,
+
+ /*
+ * numpad_* + Shift/Alt -> SnapShot
+ */
+ T37 | KBDMULTIVK,
+
+ T38, T39,
+
+ /*
+ * CapsLock key must have KBDSPECIAL bit set. (NLS key)
+ */
+ T3A | KBDSPECIAL,
+
+ T3B, T3C, T3D, T3E, T3F,
+ T40, T41, T42, T43, T44,
+
+ /*
+ * NumLock Key:
+ * KBDEXT - VK_NUMLOCK is an Extended key
+ * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
+ */
+ T45 | KBDEXT | KBDMULTIVK,
+
+ T46 | KBDMULTIVK,
+
+ /*
+ * Number Pad keys:
+ * KBDNUMPAD - digits 0-9 and decimal point.
+ * KBDSPECIAL - require special processing by Windows
+ */
+ T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home)
+ T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up),
+ T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp),
+ T4A,
+ T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left),
+ T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear),
+ T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right),
+ T4E,
+ T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End),
+ T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down),
+ T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn),
+ T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins),
+ T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del),
+
+ T54, T55, T56, T57, T58, T59, T5A, T5B,
+ T5C, T5D, T5E, T5F, T60, T61, T62, T63,
+ T64, T65, T66, T67, T68, T69, T6A, T6B,
+ T6C, T6D, T6E, T6F, T70, T71, T72, T73,
+ T74, T75, T76, T77, T78, T79, T7A, T7B,
+ T7C, T7D, T7E, T7F
+
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
+ { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track
+ { 0x19, X19 | KBDEXT }, // Speedracer: Next Track
+ { 0x1C, X1C | KBDEXT }, // Numpad Enter
+ { 0x1D, X1D | KBDEXT }, // RControl
+ { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute
+ { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2
+ { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause
+ { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop
+ { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down
+ { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up
+ { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home
+ { 0x35, X35 | KBDEXT }, // Numpad Divide
+ { 0x37, X37 | KBDEXT }, // Snapshot
+ { 0x38, X38 | KBDEXT }, // RMenu
+ { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause)
+ { 0x47, X47 | KBDEXT }, // Home
+ { 0x48, X48 | KBDEXT }, // Up
+ { 0x49, X49 | KBDEXT }, // Prior
+ { 0x4B, X4B | KBDEXT }, // Left
+ { 0x4D, X4D | KBDEXT }, // Right
+ { 0x4F, X4F | KBDEXT }, // End
+ { 0x50, X50 | KBDEXT }, // Down
+ { 0x51, X51 | KBDEXT }, // Next
+ { 0x52, X52 | KBDEXT }, // Insert
+ { 0x53, X53 | KBDEXT }, // Delete
+ { 0x5B, X5B | KBDEXT }, // Left Win
+ { 0x5C, X5C | KBDEXT }, // Right Win
+ { 0x5D, X5D | KBDEXT }, // Application
+ { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep
+ { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search
+ { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites
+ { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh
+ { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop
+ { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward
+ { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back
+ { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1
+ { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail
+ { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector
+ { 0, 0 }
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
+ { 0x1D, Y1D }, // Pause
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aVkToBits[] - map Virtual Keys to Modifier Bits
+*
+* See kbd.h for a full description.
+*
+* US Keyboard has only three shifter keys:
+* SHIFT (L & R) affects alphabnumeric keys,
+* CTRL (L & R) is used to generate control characters
+* ALT (L & R) used for generating characters by number with numpad
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
+ { VK_KANA, KBDKANA },
+ { 0, 0 }
+};
+
+/***************************************************************************\
+* aModification[] - map character modifier bits to modification number
+*
+* See kbd.h for a full description.
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
+ &aVkToBits[0],
+ 11,
+ {
+ // Modification# // Keys Pressed : Explanation
+ // ============= // ============== : =============================
+ 0, // : unshifted characters
+ 1, // SHIFT : capitals, ~!@#$%^&*()_+{}:"<>? etc.
+ 4, // CTRL : control characters
+ 6, // CTRL SHIFT :
+ SHFT_INVALID, // ALT : invalid
+ SHFT_INVALID, // ALT SHIFT : invalid
+ SHFT_INVALID, // ALT CTRL : invalid
+ SHFT_INVALID, // ALT CTRL SHIFT : invalid
+ 2, //KANA
+ 3, //KANA SHIFT
+ 5, //KANA CTRL
+ 7 //KANA CTRL SHIFT
+ }
+};
+
+/***************************************************************************\
+*
+* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states
+* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states
+* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states
+*
+* Table attributes: Unordered Scan, null-terminated
+*
+* Search this table for an entry with a matching Virtual Key to find the
+* corresponding unshifted and shifted WCHAR characters.
+*
+* Reserved VirtualKey values (first column)
+* -1 - this line contains dead characters (diacritic)
+* 0 - terminator
+*
+* Reserved Attribute values (second column)
+* CAPLOK - CapsLock affects this key like Shift
+* KANALOK - The KANA-LOCK key affects this key like KANA
+*
+* Reserved character values (third through last column)
+* WCH_NONE - No character
+* WCH_DEAD - Dead character (diacritic) value is in next line
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
+ // | | SHIFT | KANA | K+SHFT |
+ // | |==========|========|========|
+ {'0' , KANALOK ,'0' ,')' ,WCH_WA ,WCH_WO },
+ {'1' , KANALOK ,'1' ,'!' ,WCH_NU ,WCH_NU },
+ {'3' , KANALOK ,'3' ,'#' ,WCH_A ,WCH_AA },
+ {'4' , KANALOK ,'4' ,'$' ,WCH_U ,WCH_UU },
+ {'5' , KANALOK ,'5' ,'%' ,WCH_E ,WCH_EE },
+ {'7' , KANALOK ,'7' ,'&' ,WCH_YA ,WCH_YAA },
+ {'8' , KANALOK ,'8' ,'*' ,WCH_YU ,WCH_YUU },
+ {'9' , KANALOK ,'9' ,'(' ,WCH_YO ,WCH_YOO },
+ {'A' , CAPLOK | KANALOK ,'a' ,'A' ,WCH_TI ,WCH_TI },
+ {'B' , CAPLOK | KANALOK ,'b' ,'B' ,WCH_KO ,WCH_KO },
+ {'C' , CAPLOK | KANALOK ,'c' ,'C' ,WCH_SO ,WCH_SO },
+ {'D' , CAPLOK | KANALOK ,'d' ,'D' ,WCH_SI ,WCH_SI },
+ {'E' , CAPLOK | KANALOK ,'e' ,'E' ,WCH_I ,WCH_II },
+ {'F' , CAPLOK | KANALOK ,'f' ,'F' ,WCH_HA ,WCH_HA },
+ {'G' , CAPLOK | KANALOK ,'g' ,'G' ,WCH_KI ,WCH_KI },
+ {'H' , CAPLOK | KANALOK ,'h' ,'H' ,WCH_KU ,WCH_KU },
+ {'I' , CAPLOK | KANALOK ,'i' ,'I' ,WCH_NI ,WCH_NI },
+ {'J' , CAPLOK | KANALOK ,'j' ,'J' ,WCH_MA ,WCH_MA },
+ {'K' , CAPLOK | KANALOK ,'k' ,'K' ,WCH_NO ,WCH_NO },
+ {'L' , CAPLOK | KANALOK ,'l' ,'L' ,WCH_RI ,WCH_RI },
+ {'M' , CAPLOK | KANALOK ,'m' ,'M' ,WCH_MO ,WCH_MO },
+ {'N' , CAPLOK | KANALOK ,'n' ,'N' ,WCH_MI ,WCH_MI },
+ {'O' , CAPLOK | KANALOK ,'o' ,'O' ,WCH_RA ,WCH_RA },
+ {'P' , CAPLOK | KANALOK ,'p' ,'P' ,WCH_SE ,WCH_SE },
+ {'Q' , CAPLOK | KANALOK ,'q' ,'Q' ,WCH_TA ,WCH_TA },
+ {'R' , CAPLOK | KANALOK ,'r' ,'R' ,WCH_SU ,WCH_SU },
+ {'S' , CAPLOK | KANALOK ,'s' ,'S' ,WCH_TO ,WCH_TO },
+ {'T' , CAPLOK | KANALOK ,'t' ,'T' ,WCH_KA ,WCH_KA },
+ {'U' , CAPLOK | KANALOK ,'u' ,'U' ,WCH_NA ,WCH_NA },
+ {'V' , CAPLOK | KANALOK ,'v' ,'V' ,WCH_HI ,WCH_HI },
+ {'W' , CAPLOK | KANALOK ,'w' ,'W' ,WCH_TE ,WCH_TE },
+ {'X' , CAPLOK | KANALOK ,'x' ,'X' ,WCH_SA ,WCH_SA },
+ {'Y' , CAPLOK | KANALOK ,'y' ,'Y' ,WCH_NN ,WCH_NN },
+ {'Z' , CAPLOK | KANALOK ,'z' ,'Z' ,WCH_TU ,WCH_TUU },
+ {VK_OEM_1 , KANALOK ,';' ,':' ,WCH_RE ,WCH_RE },
+ {VK_OEM_2 , KANALOK ,'/' ,'?' ,WCH_ME ,WCH_MD },
+ {VK_OEM_3 , KANALOK ,'`' ,'~' ,WCH_RO ,WCH_RO },
+ {VK_OEM_7 , KANALOK ,0x27 ,'"' ,WCH_KE ,WCH_KE },
+ {VK_OEM_8 , 0 ,WCH_NONE ,WCH_NONE ,WCH_NONE,WCH_NONE},
+ {VK_OEM_COMMA , KANALOK ,',' ,'<' ,WCH_NE ,WCH_IC },
+ {VK_OEM_PERIOD, KANALOK ,'.' ,'>' ,WCH_RU ,WCH_IP },
+ {VK_OEM_PLUS , KANALOK ,'=' ,'+' ,WCH_HE ,WCH_HE },
+ {VK_TAB , 0 ,'\t' ,'\t' ,'\t' ,'\t' },
+ {VK_ADD , 0 ,'+' ,'+' ,'+' ,'+' },
+ {VK_DECIMAL , 0 ,'.' ,'.' ,'.' ,'.' },
+ {VK_DIVIDE , 0 ,'/' ,'/' ,'/' ,'/' },
+ {VK_MULTIPLY , 0 ,'*' ,'*' ,'*' ,'*' },
+ {VK_SUBTRACT , 0 ,'-' ,'-' ,'-' ,'-' },
+ {0 , 0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
+ // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL |
+ // | |==========|========|========|===========|===========|
+ {VK_BACK , 0 ,'\b' ,'\b' ,'\b' ,'\b' , 0x7f , 0x7f },
+ {VK_CANCEL , 0 ,0x03 ,0x03 ,0x03 ,0x03 , 0x03 , 0x03 },
+ {VK_ESCAPE , 0 ,0x1b ,0x1b ,0x1b ,0x1b , 0x1b , 0x1b },
+ {VK_OEM_4 , KANALOK ,'[' ,'{' ,WCH_VS ,WCH_OB , 0x1b , 0x1b },
+ {VK_OEM_5 , KANALOK ,'\\' ,'|' ,WCH_MU ,WCH_MU , 0x1c , 0x1c },
+ {VK_OEM_102 , KANALOK ,'\\' ,'|' ,WCH_MU ,WCH_MU , 0x1c , 0x1c },
+ {VK_OEM_6 , KANALOK ,']' ,'}' ,WCH_SVS ,WCH_CB , 0x1d , 0x1d },
+ {VK_RETURN , 0 ,'\r' ,'\r' ,'\r' ,'\r' , '\n' , '\n' },
+ {VK_SPACE , 0 ,' ' ,' ' ,' ' ,' ' , 0x20 , 0x20 },
+ {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = {
+ // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL | SHFT+CTRL |K+SHFT+CTRL|
+ // | |==========|========|========|===========|===========|===========|===========|
+ {'2' , KANALOK ,'2' ,'@' ,WCH_HU ,WCH_HU , WCH_NONE , WCH_NONE , 0x00 , 0x00 },
+ {'6' , KANALOK ,'6' ,'^' ,WCH_O ,WCH_OO , WCH_NONE , WCH_NONE , 0x1e , 0x1e },
+ {VK_OEM_MINUS , KANALOK ,'-' ,'_' ,WCH_HO ,WCH_PS , WCH_NONE , WCH_NONE , 0x1f , 0x1f },
+ {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 }
+};
+
+// Put this last so that VkKeyScan interprets number characters
+// as coming from the main section of the kbd (aVkToWch2 and
+// aVkToWch4) before considering the numpad (aVkToWch1).
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch1[] = {
+ // | | SHIFT | KANA | K+SHFT |
+ // | |==========|========|========|
+ { VK_NUMPAD0 , 0 , '0' , WCH_NONE , '0' ,WCH_NONE},
+ { VK_NUMPAD1 , 0 , '1' , WCH_NONE , '1' ,WCH_NONE},
+ { VK_NUMPAD2 , 0 , '2' , WCH_NONE , '2' ,WCH_NONE},
+ { VK_NUMPAD3 , 0 , '3' , WCH_NONE , '3' ,WCH_NONE},
+ { VK_NUMPAD4 , 0 , '4' , WCH_NONE , '4' ,WCH_NONE},
+ { VK_NUMPAD5 , 0 , '5' , WCH_NONE , '5' ,WCH_NONE},
+ { VK_NUMPAD6 , 0 , '6' , WCH_NONE , '6' ,WCH_NONE},
+ { VK_NUMPAD7 , 0 , '7' , WCH_NONE , '7' ,WCH_NONE},
+ { VK_NUMPAD8 , 0 , '8' , WCH_NONE , '8' ,WCH_NONE},
+ { VK_NUMPAD9 , 0 , '9' , WCH_NONE , '9' ,WCH_NONE},
+ { 0 , 0 , '\0' , 0 , 0 ,0 } //null terminator
+};
+
+/***************************************************************************\
+* aVkToWcharTable: table of pointers to Character Tables
+*
+* Describes the character tables and the order they should be searched.
+*
+* Note: the order determines the behavior of VkKeyScan() : this function
+* takes a character and attempts to find a Virtual Key and character-
+* modifier key combination that produces that character. The table
+* containing the numeric keypad (aVkToWch1) must appear last so that
+* VkKeyScan('0') will be interpreted as one of keys from the main
+* section, not the numpad. etc.
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+ { (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch1, 4, sizeof(aVkToWch1[0]) }, // must come last
+ { NULL, 0, 0 }
+};
+
+/***************************************************************************\
+* aKeyNames[], aKeyNamesExt[] - Scan Code -> Key Name tables
+*
+* For the GetKeyNameText() API function
+*
+* Tables for non-extended and extended (KBDEXT) keys.
+* (Keys producing printable characters are named by the character itself)
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
+ 0x01, L"Esc",
+ 0x0e, L"Backspace",
+ 0x0f, L"Tab",
+ 0x1c, L"Enter",
+ 0x1d, L"Ctrl",
+ 0x2a, L"Shift",
+ 0x36, L"Right Shift",
+ 0x37, L"Num *",
+ 0x38, L"Alt",
+ 0x39, L"Space",
+ 0x3a, L"Caps Lock",
+ 0x3b, L"F1",
+ 0x3c, L"F2",
+ 0x3d, L"F3",
+ 0x3e, L"F4",
+ 0x3f, L"F5",
+ 0x40, L"F6",
+ 0x41, L"F7",
+ 0x42, L"F8",
+ 0x43, L"F9",
+ 0x44, L"F10",
+ 0x45, L"Pause",
+ 0x46, L"Scroll Lock",
+ 0x47, L"Num 7",
+ 0x48, L"Num 8",
+ 0x49, L"Num 9",
+ 0x4a, L"Num -",
+ 0x4b, L"Num 4",
+ 0x4c, L"Num 5",
+ 0x4d, L"Num 6",
+ 0x4e, L"Num +",
+ 0x4f, L"Num 1",
+ 0x50, L"Num 2",
+ 0x51, L"Num 3",
+ 0x52, L"Num 0",
+ 0x53, L"Num Del",
+ 0x54, L"Sys Req",
+ 0x57, L"F11",
+ 0x58, L"F12",
+ 0x7C, L"F13",
+ 0x7D, L"F14",
+ 0x7E, L"F15",
+ 0x7F, L"F16",
+ 0x80, L"F17",
+ 0x81, L"F18",
+ 0x82, L"F19",
+ 0x83, L"F20",
+ 0x84, L"F21",
+ 0x85, L"F22",
+ 0x86, L"F23",
+ 0x87, L"F24",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
+ 0x1c, L"Num Enter",
+ 0x1d, L"Right Control",
+ 0x35, L"Num /",
+ 0x37, L"Prnt Scrn",
+ 0x38, L"Right Alt",
+ 0x45, L"Num Lock",
+ 0x46, L"Break",
+ 0x47, L"Home",
+ 0x48, L"Up",
+ 0x49, L"Page Up",
+ 0x4b, L"Left",
+ 0x4d, L"Right",
+ 0x4f, L"End",
+ 0x50, L"Down",
+ 0x51, L"Page Down",
+ 0x52, L"Insert",
+ 0x53, L"Delete",
+ 0x5B, L"Left Windows",
+ 0x5C, L"Right Windows",
+ 0x5D, L"Application",
+ 0 , NULL
+};
+
+ALLOC_SECTION_LDATA KBDTABLES KbdTables101 = {
+ /*
+ * Modifier keys
+ */
+ &CharModifiers,
+
+ /*
+ * Characters tables
+ */
+ aVkToWcharTable,
+
+ /*
+ * Diacritics (none for US English)
+ */
+ NULL,
+
+ /*
+ * Names of Keys (no dead keys)
+ */
+ aKeyNames,
+ aKeyNamesExt,
+ NULL,
+
+ /*
+ * Scan codes to Virtual Keys
+ */
+ ausVK,
+ sizeof(ausVK) / sizeof(ausVK[0]),
+ aE0VscToVk,
+ aE1VscToVk,
+
+ /*
+ * No Locale-specific special processing
+ */
+ 0,
+
+
+ /*
+ * No Ligatures
+ */
+ 0, 0, NULL,
+
+ /*
+ * Type and subtype.
+ */
+ KEYBOARD_TYPE_GENERIC_101, // Generic 101
+ MAKEWORD(MICROSOFT_KBD_101_TYPE, NLSKBD_OEM_MICROSOFT),
+};
+
+PKBDTABLES KbdLayerDescriptor(VOID)
+{
+ return &KbdTables101;
+}
+
+/***********************************************************************\
+* VkToFuncTable_101[]
+*
+\***********************************************************************/
+
+static ALLOC_SECTION_LDATA VK_F VkToFuncTable_101[] = {
+ {
+ VK_CAPITAL, // Base Vk
+ KBDNLS_TYPE_TOGGLE, // NLSFEProcType
+ KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
+ 0x08, /* 00001000 */ // NLSFEProcSwitch
+ { // NLSFEProc
+ {KBDNLS_SEND_BASE_VK,0}, // Base
+ {KBDNLS_ALPHANUM,0}, // Shift
+ {KBDNLS_HIRAGANA,0}, // Control
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift+Control
+ {KBDNLS_KATAKANA,0}, // Alt
+ {KBDNLS_SEND_BASE_VK,0}, // Shift+Alt
+ {KBDNLS_SEND_BASE_VK,0}, // Control+Alt
+ {KBDNLS_SEND_BASE_VK,0} // Shift+Control+Alt
+ },
+ { // NLSFEProcAlt
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Base
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Control
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift+Control
+ {KBDNLS_SEND_BASE_VK,0}, // Alt
+ {KBDNLS_SEND_BASE_VK,0}, // Shift+Alt
+ {KBDNLS_SEND_BASE_VK,0}, // Control+Alt
+ {KBDNLS_SEND_BASE_VK,0} // Shift+Control+Alt
+ }
+ },
+ {
+ VK_OEM_3, // Base Vk
+ KBDNLS_TYPE_NORMAL, // NLSFEProcType
+ KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
+ 0, // NLSFEProcSwitch
+ { // NLSFEProc
+ {KBDNLS_SEND_BASE_VK,0}, // Base
+ {KBDNLS_SEND_BASE_VK,0}, // Shift
+ {KBDNLS_SBCSDBCS,0}, // Control
+ {KBDNLS_SEND_BASE_VK,0}, // Shift+Control
+ {KBDNLS_SEND_PARAM_VK,VK_KANJI}, // Alt
+ {KBDNLS_SEND_BASE_VK,0}, // Shift+Alt
+ {KBDNLS_SEND_BASE_VK,0}, // Control+Alt
+ {KBDNLS_SEND_BASE_VK,0} // Shift+Control+Alt
+ },
+ { // NLSFEProcIndexAlt
+ {KBDNLS_NULL,0}, // Base
+ {KBDNLS_NULL,0}, // Shift
+ {KBDNLS_NULL,0}, // Control
+ {KBDNLS_NULL,0}, // Shift+Control
+ {KBDNLS_NULL,0}, // Alt
+ {KBDNLS_NULL,0}, // Shift+Alt
+ {KBDNLS_NULL,0}, // Control+Alt
+ {KBDNLS_NULL,0} // Shift+Control+Alt
+ }
+ }
+};
+
+/***********************************************************************\
+* KbdNlsTables
+*
+\***********************************************************************/
+
+ALLOC_SECTION_LDATA KBDNLSTABLES KbdNlsTables101 = {
+ 0, // OEM ID (0 = Microsoft)
+ 0, // Information
+ 2, // Number of VK_F entry
+ VkToFuncTable_101, // Pointer to VK_F array
+ 0, // Number of MouseVk entry
+ NULL // Pointer to MouseVk array
+};
+
+PKBDNLSTABLES KbdNlsLayerDescriptor(VOID)
+{
+ return &KbdNlsTables101;
+}
+
diff --git a/input/layout/fe_kbds/jpn/101/kbd101.def b/input/layout/fe_kbds/jpn/101/kbd101.def
new file mode 100644
index 00000000..5c81a408
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/101/kbd101.def
@@ -0,0 +1,5 @@
+LIBRARY KBD101
+
+EXPORTS
+ KbdLayerDescriptor @1
+ KbdNlsLayerDescriptor @2
diff --git a/input/layout/fe_kbds/jpn/101/kbd101.h b/input/layout/fe_kbds/jpn/101/kbd101.h
new file mode 100644
index 00000000..8c895b5b
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/101/kbd101.h
@@ -0,0 +1,20 @@
+/****************************** Module Header ******************************\
+* Module Name: kbd101.h
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* Various defines for use by keyboard input code.
+*
+* History:
+\***************************************************************************/
+
+/*
+ * kbd type should be controlled by cl command-line argument
+ */
+#define KBD_TYPE 4
+
+/*
+ * Include the basis of all keyboard table values
+ */
+#include "kbd.h"
+#include <dontuse.h>
diff --git a/input/layout/fe_kbds/jpn/101/kbd101.rc b/input/layout/fe_kbds/jpn/101/kbd101.rc
new file mode 100644
index 00000000..743b51c1
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/101/kbd101.rc
@@ -0,0 +1,12 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "JP Japanese Keyboard Layout for 101"
+#define VER_INTERNALNAME_STR "kbd101"
+#define VER_ORIGINALFILENAME_STR "kbd101.dll"
+
+#define VER_LANGNEUTRAL
+#include "common.ver"
+
diff --git a/input/layout/fe_kbds/jpn/101/kbd101.vcxproj b/input/layout/fe_kbds/jpn/101/kbd101.vcxproj
new file mode 100644
index 00000000..8f5a90fe
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/101/kbd101.vcxproj
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{FBA54F55-C1FA-48D3-85E5-403BA6AD2469}</ProjectGuid>
+ <RootNamespace>$(MSBuildProjectName)</RootNamespace>
+ <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <SampleGuid>{5AD33954-9318-4EA3-A0B2-ADA558406846}</SampleGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <PropertyGroup>
+ <OutDir>$(IntDir)</OutDir>
+ </PropertyGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ItemGroup Label="WrappedTaskItems" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>kbd101</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>kbd101</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>kbd101</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>kbd101</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd101.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd101.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd101.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd101.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="kbd101.c" />
+ <ResourceCompile Include="kbd101.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Exclude="@(Inf)" Include="*.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
+ <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
+ <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project> \ No newline at end of file
diff --git a/input/layout/fe_kbds/jpn/101/kbd101.vcxproj.Filters b/input/layout/fe_kbds/jpn/101/kbd101.vcxproj.Filters
new file mode 100644
index 00000000..6bf975fa
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/101/kbd101.vcxproj.Filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
+ <UniqueIdentifier>{B1265714-28A1-4EB7-A6F2-881E16A3B572}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <UniqueIdentifier>{4254380D-B671-4A2B-B143-81DF3E3E2989}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource Files">
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
+ <UniqueIdentifier>{B81617E9-FFB7-4D8F-8EE8-D62C8224FE45}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="kbd101.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <None Include="kbd101.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="kbd101.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/input/layout/fe_kbds/jpn/106/kbd106.c b/input/layout/fe_kbds/jpn/106/kbd106.c
new file mode 100644
index 00000000..b865d5a4
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/106/kbd106.c
@@ -0,0 +1,622 @@
+/***************************************************************************\
+* Module Name: kbd106.c
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* History:
+\***************************************************************************/
+
+#include <windows.h>
+#include "kbdjpn.h"
+#include "kbd106.h"
+
+#if defined(_M_IA64)
+#pragma section(".data")
+#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
+#else
+#pragma data_seg(".data")
+#define ALLOC_SECTION_LDATA
+#endif
+
+/***************************************************************************\
+* ausVK[] - Virtual Scan Code to Virtual Key conversion table for 106
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA USHORT ausVK[] = {
+ T00, T01, T02, T03, T04, T05, T06, T07,
+ T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
+ T10, T11, T12, T13, T14, T15, T16, T17,
+ T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
+ T20, T21, T22, T23, T24, T25, T26, T27,
+ T28,
+
+ /*
+ * Hankaku/Zenkaku/Kanji key must have KBDSPECIAL bit set (NLS key)
+ */
+ T29 | KBDSPECIAL,
+
+ T2A, T2B, T2C, T2D, T2E, T2F,
+ T30, T31, T32, T33, T34, T35,
+
+ /*
+ * Right-hand Shift key must have KBDEXT bit set.
+ */
+ T36 | KBDEXT,
+
+ /*
+ * numpad_* + Shift/Alt -> SnapShot
+ */
+ T37 | KBDMULTIVK,
+
+ T38, T39,
+
+ /*
+ * Alphanumeric/CapsLock key must have KBDSPECIAL bit set (NLS key)
+ */
+ T3A | KBDSPECIAL,
+
+ T3B, T3C, T3D, T3E, T3F,
+ T40, T41, T42, T43, T44,
+
+ /*
+ * NumLock Key:
+ * KBDEXT - VK_NUMLOCK is an Extended key
+ * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
+ */
+ T45 | KBDEXT | KBDMULTIVK,
+
+ T46 | KBDMULTIVK,
+
+ /*
+ * Number Pad keys:
+ * KBDNUMPAD - digits 0-9 and decimal point.
+ * KBDSPECIAL - require special processing by Windows
+ */
+ T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home)
+ T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up),
+ T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp),
+ T4A,
+ T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left),
+ T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear),
+ T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right),
+ T4E,
+ T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End),
+ T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down),
+ T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn),
+ T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins),
+ T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del),
+
+ T54, T55, T56, T57, T58, T59, T5A, T5B,
+ T5C, T5D, T5E, T5F, T60, T61, T62, T63,
+ T64, T65, T66, T67, T68, T69, T6A, T6B,
+ T6C, T6D, T6E, T6F,
+
+ /*
+ * Hiragana/Katakana/Roman key must have KBDSPECIAL bit set (NLS key)
+ */
+ T70 | KBDSPECIAL,
+
+ T71, T72, T73,
+ T74, T75, T76, T77, T78,
+
+ /*
+ * Conversion key must have KBDSPECIAL bit set (NLS key)
+ */
+ T79 | KBDSPECIAL,
+
+ T7A,
+
+ /*
+ * Non-Conversion key must have KBDSPECIAL bit set (NLS key)
+ */
+ T7B | KBDSPECIAL,
+
+ T7C, T7D, T7E, T7F
+
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
+ { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track
+ { 0x19, X19 | KBDEXT }, // Speedracer: Next Track
+ { 0x1C, X1C | KBDEXT }, // Numpad Enter
+ { 0x1D, X1D | KBDEXT }, // RControl
+ { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute
+ { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2
+ { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause
+ { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop
+ { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down
+ { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up
+ { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home
+ { 0x35, X35 | KBDEXT }, // Numpad Divide
+ { 0x37, X37 | KBDEXT }, // Snapshot
+ { 0x38, X38 | KBDEXT }, // RMenu
+ { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause)
+ { 0x47, X47 | KBDEXT }, // Home
+ { 0x48, X48 | KBDEXT }, // Up
+ { 0x49, X49 | KBDEXT }, // Prior
+ { 0x4B, X4B | KBDEXT }, // Left
+ { 0x4D, X4D | KBDEXT }, // Right
+ { 0x4F, X4F | KBDEXT }, // End
+ { 0x50, X50 | KBDEXT }, // Down
+ { 0x51, X51 | KBDEXT }, // Next
+ { 0x52, X52 | KBDEXT }, // Insert
+ { 0x53, X53 | KBDEXT }, // Delete
+ { 0x5B, X5B | KBDEXT }, // Left Win
+ { 0x5C, X5C | KBDEXT }, // Right Win
+ { 0x5D, X5D | KBDEXT }, // Application
+ { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep
+ { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search
+ { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites
+ { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh
+ { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop
+ { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward
+ { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back
+ { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1
+ { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail
+ { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector
+ { 0, 0 }
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
+ { 0x1D, Y1D }, // Pause
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aVkToBits[] - map Virtual Keys to Modifier Bits
+*
+* See kbd.h for a full description.
+*
+* US Keyboard has only three shifter keys:
+* SHIFT (L & R) affects alphabnumeric keys,
+* CTRL (L & R) is used to generate control characters
+* ALT (L & R) used for generating characters by number with numpad
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
+ { VK_SHIFT, KBDSHIFT },
+ { VK_CONTROL, KBDCTRL },
+ { VK_MENU, KBDALT },
+ { VK_KANA, KBDKANA },
+ { 0, 0 }
+};
+
+/***************************************************************************\
+* aModification[] - map character modifier bits to modification number
+*
+* See kbd.h for a full description.
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
+ &aVkToBits[0],
+ 11,
+ {
+ // Modification# // Keys Pressed : Explanation
+ // ============= // ============== : =============================
+ 0, // : unshifted characters
+ 1, // SHIFT : capitals, ~!@#$%^&*()_+{}:"<>? etc.
+ 4, // CTRL : control characters
+ 6, // CTRL SHIFT :
+ SHFT_INVALID, // ALT : invalid
+ SHFT_INVALID, // ALT SHIFT : invalid
+ SHFT_INVALID, // ALT CTRL : invalid
+ SHFT_INVALID, // ALT CTRL SHIFT : invalid
+ 2, //KANA
+ 3, //KANA SHIFT
+ 5, //KANA CTRL
+ 7 //KANA CTRL SHIFT
+ }
+};
+
+/***************************************************************************\
+*
+* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states
+* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states
+* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states
+*
+* Table attributes: Unordered Scan, null-terminated
+*
+* Search this table for an entry with a matching Virtual Key to find the
+* corresponding unshifted and shifted WCHAR characters.
+*
+* Reserved VirtualKey values (first column)
+* -1 - this line contains dead characters (diacritic)
+* 0 - terminator
+*
+* Reserved Attribute values (second column)
+* CAPLOK - CapsLock affects this key like Shift
+* KANALOK - The KANA-LOCK key affects this key like KANA
+*
+* Reserved character values (third through last column)
+* WCH_NONE - No character
+* WCH_DEAD - Dead character (diacritic) value is in next line
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
+ // | | SHIFT | KANA | K+SHFT |
+ // | |==========|========|========|
+ {'0' , KANALOK ,'0' ,WCH_NONE ,WCH_WA ,WCH_WO },
+ {'1' , KANALOK ,'1' ,'!' ,WCH_NU ,WCH_NU },
+ {'3' , KANALOK ,'3' ,'#' ,WCH_A ,WCH_AA },
+ {'4' , KANALOK ,'4' ,'$' ,WCH_U ,WCH_UU },
+ {'5' , KANALOK ,'5' ,'%' ,WCH_E ,WCH_EE },
+ {'7' , KANALOK ,'7' ,0x27 ,WCH_YA ,WCH_YAA },
+ {'8' , KANALOK ,'8' ,'(' ,WCH_YU ,WCH_YUU },
+ {'9' , KANALOK ,'9' ,')' ,WCH_YO ,WCH_YOO },
+ {'A' , CAPLOK | KANALOK ,'a' ,'A' ,WCH_TI ,WCH_TI },
+ {'B' , CAPLOK | KANALOK ,'b' ,'B' ,WCH_KO ,WCH_KO },
+ {'C' , CAPLOK | KANALOK ,'c' ,'C' ,WCH_SO ,WCH_SO },
+ {'D' , CAPLOK | KANALOK ,'d' ,'D' ,WCH_SI ,WCH_SI },
+ {'E' , CAPLOK | KANALOK ,'e' ,'E' ,WCH_I ,WCH_II },
+ {'F' , CAPLOK | KANALOK ,'f' ,'F' ,WCH_HA ,WCH_HA },
+ {'G' , CAPLOK | KANALOK ,'g' ,'G' ,WCH_KI ,WCH_KI },
+ {'H' , CAPLOK | KANALOK ,'h' ,'H' ,WCH_KU ,WCH_KU },
+ {'I' , CAPLOK | KANALOK ,'i' ,'I' ,WCH_NI ,WCH_NI },
+ {'J' , CAPLOK | KANALOK ,'j' ,'J' ,WCH_MA ,WCH_MA },
+ {'K' , CAPLOK | KANALOK ,'k' ,'K' ,WCH_NO ,WCH_NO },
+ {'L' , CAPLOK | KANALOK ,'l' ,'L' ,WCH_RI ,WCH_RI },
+ {'M' , CAPLOK | KANALOK ,'m' ,'M' ,WCH_MO ,WCH_MO },
+ {'N' , CAPLOK | KANALOK ,'n' ,'N' ,WCH_MI ,WCH_MI },
+ {'O' , CAPLOK | KANALOK ,'o' ,'O' ,WCH_RA ,WCH_RA },
+ {'P' , CAPLOK | KANALOK ,'p' ,'P' ,WCH_SE ,WCH_SE },
+ {'Q' , CAPLOK | KANALOK ,'q' ,'Q' ,WCH_TA ,WCH_TA },
+ {'R' , CAPLOK | KANALOK ,'r' ,'R' ,WCH_SU ,WCH_SU },
+ {'S' , CAPLOK | KANALOK ,'s' ,'S' ,WCH_TO ,WCH_TO },
+ {'T' , CAPLOK | KANALOK ,'t' ,'T' ,WCH_KA ,WCH_KA },
+ {'U' , CAPLOK | KANALOK ,'u' ,'U' ,WCH_NA ,WCH_NA },
+ {'V' , CAPLOK | KANALOK ,'v' ,'V' ,WCH_HI ,WCH_HI },
+ {'W' , CAPLOK | KANALOK ,'w' ,'W' ,WCH_TE ,WCH_TE },
+ {'X' , CAPLOK | KANALOK ,'x' ,'X' ,WCH_SA ,WCH_SA },
+ {'Y' , CAPLOK | KANALOK ,'y' ,'Y' ,WCH_NN ,WCH_NN },
+ {'Z' , CAPLOK | KANALOK ,'z' ,'Z' ,WCH_TU ,WCH_TUU },
+ {VK_OEM_1 , KANALOK ,':' ,'*' ,WCH_KE ,WCH_KE },
+ {VK_OEM_2 , KANALOK ,'/' ,'?' ,WCH_ME ,WCH_MD },
+ {VK_OEM_3 , KANALOK ,'@' ,'`' ,WCH_VS ,WCH_VS },
+ {VK_OEM_7 , KANALOK ,'^' ,'~' ,WCH_HE ,WCH_HE },
+ {VK_OEM_8 , 0 ,WCH_NONE ,WCH_NONE ,WCH_NONE,WCH_NONE},
+ {VK_OEM_COMMA , KANALOK ,',' ,'<' ,WCH_NE ,WCH_IC },
+ {VK_OEM_PERIOD, KANALOK ,'.' ,'>' ,WCH_RU ,WCH_IP },
+ {VK_OEM_PLUS , KANALOK ,';' ,'+' ,WCH_RE ,WCH_RE },
+ {VK_TAB , 0 ,'\t' ,'\t' ,'\t' ,'\t' },
+ {VK_ADD , 0 ,'+' ,'+' ,'+' ,'+' },
+ {VK_DECIMAL , 0 ,'.' ,'.' ,'.' ,'.' },
+ {VK_DIVIDE , 0 ,'/' ,'/' ,'/' ,'/' },
+ {VK_MULTIPLY , 0 ,'*' ,'*' ,'*' ,'*' },
+ {VK_SUBTRACT , 0 ,'-' ,'-' ,'-' ,'-' },
+ {0 , 0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
+ // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL |
+ // | |==========|========|========|===========|===========|
+ {VK_BACK , 0 ,'\b' ,'\b' ,'\b' ,'\b' , 0x7f , 0x7f },
+ {VK_CANCEL , 0 ,0x03 ,0x03 ,0x03 ,0x03 , 0x03 , 0x03 },
+ {VK_ESCAPE , 0 ,0x1b ,0x1b ,0x1b ,0x1b , 0x1b , 0x1b },
+ {VK_OEM_4 , KANALOK ,'[' ,'{' ,WCH_SVS ,WCH_OB , 0x1b , 0x1b },
+ {VK_OEM_5 , KANALOK ,'\\' ,'|' ,WCH_PS ,WCH_PS , 0x1c , 0x1c },
+ {VK_OEM_102 , KANALOK ,'\\' ,'_' ,WCH_RO ,WCH_RO , 0x1c , 0x1c },
+ {VK_OEM_6 , KANALOK ,']' ,'}' ,WCH_MU ,WCH_CB , 0x1d , 0x1d },
+ {VK_RETURN , 0 ,'\r' ,'\r' ,'\r' ,'\r' , '\n' , '\n' },
+ {VK_SPACE , 0 ,' ' ,' ' ,' ' ,' ' , 0x20 , 0x20 },
+ {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = {
+ // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL | SHFT+CTRL |K+SHFT+CTRL|
+ // | |==========|========|========|===========|===========|===========|===========|
+ {'2' , KANALOK ,'2' ,'"' ,WCH_HU ,WCH_HU , WCH_NONE , WCH_NONE , 0x00 , 0x00 },
+ {'6' , KANALOK ,'6' ,'&' ,WCH_O ,WCH_OO , WCH_NONE , WCH_NONE , 0x1e , 0x1e },
+ {VK_OEM_MINUS , KANALOK ,'-' ,'=' ,WCH_HO ,WCH_HO , WCH_NONE , WCH_NONE , 0x1f , 0x1f },
+ {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 }
+};
+
+// Put this last so that VkKeyScan interprets number characters
+// as coming from the main section of the kbd (aVkToWch2 and
+// aVkToWch4) before considering the numpad (aVkToWch1).
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch1[] = {
+ // | | SHIFT | KANA | K+SHFT |
+ // | |==========|========|========|
+ { VK_NUMPAD0 , 0 , '0' , WCH_NONE , '0' ,WCH_NONE},
+ { VK_NUMPAD1 , 0 , '1' , WCH_NONE , '1' ,WCH_NONE},
+ { VK_NUMPAD2 , 0 , '2' , WCH_NONE , '2' ,WCH_NONE},
+ { VK_NUMPAD3 , 0 , '3' , WCH_NONE , '3' ,WCH_NONE},
+ { VK_NUMPAD4 , 0 , '4' , WCH_NONE , '4' ,WCH_NONE},
+ { VK_NUMPAD5 , 0 , '5' , WCH_NONE , '5' ,WCH_NONE},
+ { VK_NUMPAD6 , 0 , '6' , WCH_NONE , '6' ,WCH_NONE},
+ { VK_NUMPAD7 , 0 , '7' , WCH_NONE , '7' ,WCH_NONE},
+ { VK_NUMPAD8 , 0 , '8' , WCH_NONE , '8' ,WCH_NONE},
+ { VK_NUMPAD9 , 0 , '9' , WCH_NONE , '9' ,WCH_NONE},
+ { 0 , 0 , '\0' , 0 , 0 ,0 } //null terminator
+};
+
+/***************************************************************************\
+* aVkToWcharTable: table of pointers to Character Tables
+*
+* Describes the character tables and the order they should be searched.
+*
+* Note: the order determines the behavior of VkKeyScan() : this function
+* takes a character and attempts to find a Virtual Key and character-
+* modifier key combination that produces that character. The table
+* containing the numeric keypad (aVkToWch1) must appear last so that
+* VkKeyScan('0') will be interpreted as one of keys from the main
+* section, not the numpad. etc.
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+ { (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch1, 4, sizeof(aVkToWch1[0]) }, // must come last
+ { NULL, 0, 0 }
+};
+
+/***************************************************************************\
+* aKeyNames[], aKeyNamesExt[] - Scan Code -> Key Name tables
+*
+* For the GetKeyNameText() API function
+*
+* Tables for non-extended and extended (KBDEXT) keys.
+* (Keys producing printable characters are named by the character itself)
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
+ 0x01, L"Esc",
+ 0x0e, L"Backspace",
+ 0x0f, L"Tab",
+ 0x1c, L"Enter",
+ 0x1d, L"Ctrl",
+ 0x29, (LPWSTR)SZ_KEY_NAME_HANKAKU_ZENKAKU, // NLS Key
+ 0x2a, L"Shift",
+ 0x36, L"Right Shift",
+ 0x37, L"Num *",
+ 0x38, L"Alt",
+ 0x39, L"Space",
+ 0x3a, L"Caps Lock",
+ 0x3b, L"F1",
+ 0x3c, L"F2",
+ 0x3d, L"F3",
+ 0x3e, L"F4",
+ 0x3f, L"F5",
+ 0x40, L"F6",
+ 0x41, L"F7",
+ 0x42, L"F8",
+ 0x43, L"F9",
+ 0x44, L"F10",
+ 0x45, L"Pause",
+ 0x46, L"Scroll Lock",
+ 0x47, L"Num 7",
+ 0x48, L"Num 8",
+ 0x49, L"Num 9",
+ 0x4a, L"Num -",
+ 0x4b, L"Num 4",
+ 0x4c, L"Num 5",
+ 0x4d, L"Num 6",
+ 0x4e, L"Num +",
+ 0x4f, L"Num 1",
+ 0x50, L"Num 2",
+ 0x51, L"Num 3",
+ 0x52, L"Num 0",
+ 0x53, L"Num Del",
+ 0x54, L"Sys Req",
+ 0x57, L"F11",
+ 0x58, L"F12",
+ 0x70, (LPWSTR)SZ_KEY_NAME_HIRAGANA,
+ 0x79, (LPWSTR)SZ_KEY_NAME_HENKAN,
+ 0x7b, (LPWSTR)SZ_KEY_NAME_MUHENKAN,
+ 0x7C, L"F13",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
+ 0x1c, L"Num Enter",
+ 0x1d, L"Right Control",
+ 0x35, L"Num /",
+ 0x37, L"Prnt Scrn",
+ 0x38, L"Right Alt",
+ 0x45, L"Num Lock",
+ 0x46, L"Break",
+ 0x47, L"Home",
+ 0x48, L"Up",
+ 0x49, L"Page Up",
+ 0x4b, L"Left",
+ 0x4d, L"Right",
+ 0x4f, L"End",
+ 0x50, L"Down",
+ 0x51, L"Page Down",
+ 0x52, L"Insert",
+ 0x53, L"Delete",
+ 0x5B, L"Left Windows",
+ 0x5C, L"Right Windows",
+ 0x5D, L"Application",
+ 0 , NULL
+};
+
+ALLOC_SECTION_LDATA KBDTABLES KbdTables106 = {
+ /*
+ * Modifier keys
+ */
+ &CharModifiers,
+
+ /*
+ * Characters tables
+ */
+ aVkToWcharTable,
+
+ /*
+ * Diacritics (none for US English)
+ */
+ NULL,
+
+ /*
+ * Names of Keys (no dead keys)
+ */
+ aKeyNames,
+ aKeyNamesExt,
+ NULL,
+
+ /*
+ * Scan codes to Virtual Keys
+ */
+ ausVK,
+ sizeof(ausVK) / sizeof(ausVK[0]),
+ aE0VscToVk,
+ aE1VscToVk,
+
+ /*
+ * No Locale-specific special processing
+ */
+ 0,
+
+ /*
+ * No Ligatures
+ */
+ 0, 0, NULL,
+
+ /*
+ * Type and subtype.
+ */
+ KEYBOARD_TYPE_JAPAN, // Japanese Keyboard Layout
+ MAKEWORD(MICROSOFT_KBD_106_TYPE, NLSKBD_OEM_MICROSOFT),
+};
+
+PKBDTABLES KbdLayerDescriptor(VOID)
+{
+ return &KbdTables106;
+}
+
+/***********************************************************************\
+* VkToFuncTable_106[]
+*
+\***********************************************************************/
+
+static ALLOC_SECTION_LDATA VK_F VkToFuncTable_106[] = {
+ {
+ VK_DBE_ALPHANUMERIC, // Base Vk
+ KBDNLS_TYPE_TOGGLE, // NLSFEProcType
+ KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
+ 0x02, /* 00000010 */ // NLSFEProcSwitch
+ { // NLSFEProc
+ {KBDNLS_ALPHANUM,0}, // Base
+ {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Shift
+ {KBDNLS_ALPHANUM,0}, // Control
+ {KBDNLS_ALPHANUM,0}, // Shift+Control
+ {KBDNLS_ALPHANUM,0}, // Alt
+ {KBDNLS_ALPHANUM,0}, // Shift+Alt
+ {KBDNLS_CODEINPUT,0}, // Control+Alt
+ {KBDNLS_CODEINPUT,0} // Shift+Control+Alt
+ },
+ { // NLSFEProcAlt
+ {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Base
+ {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Shift
+ {KBDNLS_NOEVENT,0}, // Control
+ {KBDNLS_NOEVENT,0}, // Shift+Control
+ {KBDNLS_NOEVENT,0}, // Alt
+ {KBDNLS_NOEVENT,0}, // Shift+Alt
+ {KBDNLS_NOEVENT,0}, // Control+Alt
+ {KBDNLS_NOEVENT,0} // Shift+Control+Alt
+ }
+ },
+ {
+ VK_DBE_HIRAGANA, // Base Vk
+ KBDNLS_TYPE_TOGGLE, // NLSFEProcType
+ KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
+ 0x08, /* 00001000 */ // NLSFEProcSwitch
+ { // NLSFEProc
+ {KBDNLS_HIRAGANA,0}, // Base
+ {KBDNLS_KATAKANA,0}, // Shift
+ {KBDNLS_HIRAGANA,0}, // Control
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift+Control
+ {KBDNLS_ROMAN,0}, // Alt
+ {KBDNLS_ROMAN,0}, // Shift+Alt
+ {KBDNLS_ROMAN,0}, // Control+Alt
+ {KBDNLS_NOEVENT,0} // Shift+Control+Alt
+ },
+ { // NLSFEProcIndexAlt
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Base
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Control
+ {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift+Control
+ {KBDNLS_NOEVENT,0}, // Alt
+ {KBDNLS_NOEVENT,0}, // Shift+Alt
+ {KBDNLS_NOEVENT,0}, // Control+Alt
+ {KBDNLS_NOEVENT,0} // Shift+Control+Alt
+ }
+ },
+ {
+ VK_DBE_SBCSCHAR, // Base Vk
+ KBDNLS_TYPE_NORMAL, // NLSFEProcType
+ KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
+ 0x0, // NLSFEProcSwitch
+ { // NLSFEProc
+ {KBDNLS_SBCSDBCS,0}, // Base
+ {KBDNLS_SBCSDBCS,0}, // Shift
+ {KBDNLS_SBCSDBCS,0}, // Control
+ {KBDNLS_SBCSDBCS,0}, // Shift+Control
+ {KBDNLS_SEND_PARAM_VK,VK_KANJI}, // Alt
+ {KBDNLS_SBCSDBCS,0}, // Shift+Alt
+ {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}, // Control+Alt
+ {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE} // Shift+Control+Alt
+ },
+ { // NLSFEProcIndexAlt
+ {KBDNLS_NULL,0}, // Base
+ {KBDNLS_NULL,0}, // Shift
+ {KBDNLS_NULL,0}, // Control
+ {KBDNLS_NULL,0}, // Shift+Control
+ {KBDNLS_NULL,0}, // Alt
+ {KBDNLS_NULL,0}, // Shift+Alt
+ {KBDNLS_NULL,0}, // Control+Alt
+ {KBDNLS_NULL,0} // Shift+Control+Alt
+ }
+ },
+ {
+ VK_NONCONVERT, // Base Vk
+ KBDNLS_TYPE_NORMAL, // NLSFEProcType
+ KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent
+ 0x0, // NLSFEProcSwitch
+ { // NLSFEProc
+ {KBDNLS_SEND_BASE_VK,0}, // Base
+ {KBDNLS_SEND_BASE_VK,0}, // Shift
+ {KBDNLS_SEND_BASE_VK,0}, // Control
+ {KBDNLS_SEND_BASE_VK,0}, // Shift+Control
+ {KBDNLS_SEND_BASE_VK,0}, // Alt
+ {KBDNLS_SEND_BASE_VK,0}, // Shift+Alt
+ {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE}, // Control+Alt
+ {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE} // Shift+Control+Alt
+ },
+ { // NLSFEProcIndexAlt
+ {KBDNLS_NULL,0}, // Base
+ {KBDNLS_NULL,0}, // Shift
+ {KBDNLS_NULL,0}, // Control
+ {KBDNLS_NULL,0}, // Shift+Control
+ {KBDNLS_NULL,0}, // Alt
+ {KBDNLS_NULL,0}, // Shift+Alt
+ {KBDNLS_NULL,0}, // Control+Alt
+ {KBDNLS_NULL,0} // Shift+Control+Alt
+ }
+ }
+};
+
+/***********************************************************************\
+* KbdNlsTables
+*
+\***********************************************************************/
+
+ALLOC_SECTION_LDATA KBDNLSTABLES KbdNlsTables106 = {
+ 0, // OEM ID (0 = Microsoft)
+ 0, // Information
+ 4, // Number of VK_F entry
+ VkToFuncTable_106, // Pointer to VK_F array
+ 0, // Number of MouseVk entry
+ NULL // Pointer to MouseVk array
+};
+
+
+PKBDNLSTABLES KbdNlsLayerDescriptor(VOID)
+{
+ return &KbdNlsTables106;
+}
+
+
diff --git a/input/layout/fe_kbds/jpn/106/kbd106.def b/input/layout/fe_kbds/jpn/106/kbd106.def
new file mode 100644
index 00000000..520c6dbd
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/106/kbd106.def
@@ -0,0 +1,5 @@
+LIBRARY KBD106
+
+EXPORTS
+ KbdLayerDescriptor @1
+ KbdNlsLayerDescriptor @2
diff --git a/input/layout/fe_kbds/jpn/106/kbd106.h b/input/layout/fe_kbds/jpn/106/kbd106.h
new file mode 100644
index 00000000..aa9a1880
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/106/kbd106.h
@@ -0,0 +1,20 @@
+/****************************** Module Header ******************************\
+* Module Name: kbd106.h
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* Various defines for use by keyboard input code.
+*
+* History:
+\***************************************************************************/
+
+/*
+ * kbd type should be controlled by cl command-line argument
+ */
+#define KBD_TYPE 8
+
+/*
+ * Include the basis of all keyboard table values
+ */
+#include "kbd.h"
+#include <dontuse.h>
diff --git a/input/layout/fe_kbds/jpn/106/kbd106.rc b/input/layout/fe_kbds/jpn/106/kbd106.rc
new file mode 100644
index 00000000..8d006a97
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/106/kbd106.rc
@@ -0,0 +1,12 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_UNKNOWN
+#define VER_FILEDESCRIPTION_STR "JP Japanese Keyboard Layout for 106"
+#define VER_INTERNALNAME_STR "kbd106"
+#define VER_ORIGINALFILENAME_STR "kbd106.dll"
+
+#define VER_LANGNEUTRAL
+#include "common.ver"
+
diff --git a/input/layout/fe_kbds/jpn/106/kbd106.vcxproj b/input/layout/fe_kbds/jpn/106/kbd106.vcxproj
new file mode 100644
index 00000000..00e66e63
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/106/kbd106.vcxproj
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{07365E50-1324-40D2-832B-62DE0747FE4D}</ProjectGuid>
+ <RootNamespace>$(MSBuildProjectName)</RootNamespace>
+ <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <SampleGuid>{609BEE41-57F5-434E-98AB-81332C8D8BD0}</SampleGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <PropertyGroup>
+ <OutDir>$(IntDir)</OutDir>
+ </PropertyGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ItemGroup Label="WrappedTaskItems" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>kbd106</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>kbd106</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>kbd106</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>kbd106</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd106.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd106.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd106.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbd106.def</ModuleDefinitionFile>
+ <NoEntryPoint>true</NoEntryPoint>
+ </Link>
+ <ClCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ <Midl>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </Midl>
+ <ResourceCompile>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);FE_SB;FE_IME</PreprocessorDefinitions>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions);JAPAN</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\inc</AdditionalIncludeDirectories>
+ </ResourceCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="kbd106.c" />
+ <ResourceCompile Include="kbd106.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Exclude="@(Inf)" Include="*.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
+ <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
+ <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project> \ No newline at end of file
diff --git a/input/layout/fe_kbds/jpn/106/kbd106.vcxproj.Filters b/input/layout/fe_kbds/jpn/106/kbd106.vcxproj.Filters
new file mode 100644
index 00000000..fe9dd004
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/106/kbd106.vcxproj.Filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
+ <UniqueIdentifier>{C09BABDD-1513-408C-910D-A914FF59E167}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <UniqueIdentifier>{0260B346-91B0-4102-9FB5-C45CD6349580}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource Files">
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
+ <UniqueIdentifier>{F0BC7E56-491F-4C93-8C11-0DE7CE6812D6}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="kbd106.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <None Include="kbd106.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="kbd106.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/input/layout/fe_kbds/jpn/inc/kbdjpn.h b/input/layout/fe_kbds/jpn/inc/kbdjpn.h
new file mode 100644
index 00000000..8e45958d
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/inc/kbdjpn.h
@@ -0,0 +1,138 @@
+/****************************** Module Header ******************************\
+* Module Name: kbdjpn.h
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* Various defines for use by keyboard input code.
+*
+* History:
+\***************************************************************************/
+/*
+ * Katakana Unicode
+ */
+enum _KATAKANA_UNICODE {
+ WCH_IP=0xff61, // Ideographic Period
+ WCH_OB, // Opening Corner Bracket
+ WCH_CB, // Closing Corner Bracket
+ WCH_IC, // Ideographic Comma
+ WCH_MD, // Katakana Middle Dot
+ WCH_WO, // Katakana Letter WO
+ WCH_AA, // Katakana Letter Small A
+ WCH_II, // Katakana Letter Small I
+ WCH_UU, // Katakana Letter Small U
+ WCH_EE, // Katakana Letter Small E
+ WCH_OO, // Katakana Letter Small O
+ WCH_YAA, // Katakana Letter Small YA
+ WCH_YUU, // Katakana Letter Small YU
+ WCH_YOO, // Katakana Letter Small YO
+ WCH_TUU, // Katakana Letter Small TU
+ WCH_PS, // Katakana Prolonged Sound Mark
+ WCH_A, // Katakana Letter A
+ WCH_I, // Katakana Letter I
+ WCH_U, // Katakana Letter U
+ WCH_E, // Katakana Letter E
+ WCH_O, // Katakana Letter O
+ WCH_KA, // Katakana Letter KA
+ WCH_KI, // Katakana Letter KI
+ WCH_KU, // Katakana Letter KU
+ WCH_KE, // Katakana Letter KE
+ WCH_KO, // Katakana Letter KO
+ WCH_SA, // Katakana Letter SA
+ WCH_SI, // Katakana Letter SI
+ WCH_SU, // Katakana Letter SU
+ WCH_SE, // Katakana Letter SE
+ WCH_SO, // Katakana Letter SO
+ WCH_TA, // Katakana Letter TA
+ WCH_TI, // Katakana Letter TI
+ WCH_TU, // Katakana Letter TU
+ WCH_TE, // Katakana Letter TE
+ WCH_TO, // Katakana Letter TO
+ WCH_NA, // Katakana Letter NA
+ WCH_NI, // Kanakana Letter NI
+ WCH_NU, // Katakana Letter NU
+ WCH_NE, // Katakana Letter NE
+ WCH_NO, // Katakana Letter NO
+ WCH_HA, // Katakana Letter HA
+ WCH_HI, // Katakana Letter HI
+ WCH_HU, // Katakana Letter HU
+ WCH_HE, // Katakana Letter HE
+ WCH_HO, // Katakana Letter HO
+ WCH_MA, // Katakana Letter MA
+ WCH_MI, // Katakana Letter MI
+ WCH_MU, // Katakana Letter MU
+ WCH_ME, // Katakana Letter ME
+ WCH_MO, // Katakana Letter MO
+ WCH_YA, // Katakana Letter YA
+ WCH_YU, // Katakana Letter YU
+ WCH_YO, // Katakana Letter YO
+ WCH_RA, // Katakana Letter RA
+ WCH_RI, // Katakana Letter RI
+ WCH_RU, // Katakana Letter RU
+ WCH_RE, // Katakana Letter RE
+ WCH_RO, // Katakana Letter RO
+ WCH_WA, // Katakana Letter WA
+ WCH_NN, // Katakana Letter N
+ WCH_VS, // Katakana Voiced Sound Mark
+ WCH_SVS // Katakana Semi-Voiced Sound Mark
+};
+
+/***************************************************************************\
+* OEM Key Name -
+\***************************************************************************/
+
+ // lo hi lo hi
+#define SZ_KEY_NAME_HENKAN "\x09\x59\xdb\x63\000\000"
+#define SZ_KEY_NAME_MUHENKAN "\x21\x71\x09\x59\xdb\x63\000\000"
+#define SZ_KEY_NAME_KANJI "\x22\x6f\x57\x5b\000\000"
+#define SZ_KEY_NAME_EISU_KANA "\xf1\x82\x70\x65\x20\000\xab\x30\xca\x30\000\000"
+#define SZ_KEY_NAME_HANKAKU_ZENKAKU "\x4a\x53\xd2\x89\x2f\000\x68\x51\xd2\x89\000\000"
+#define SZ_KEY_NAME_KATAKANA "\xab\x30\xbf\x30\xab\x30\xca\x30\000\000"
+#define SZ_KEY_NAME_HIRAGANA "\x72\x30\x89\x30\x4c\x30\x6a\x30\000\000"
+// FMR Jul.13.1994 KA
+// For the GetKeyNameText() API function.
+#define SZ_KEY_NAME_BACKSPACE "\x8C\x5F\x00\x90\000\000"
+#define SZ_KEY_NAME_ENTER "\x39\x65\x4C\x88\000\000"
+#define SZ_KEY_NAME_NUMPADENTER "\x4E\x00\x75\x00\x6d\x00\x20\x00\x39\x65\x4C\x88\000\000"
+#define SZ_KEY_NAME_SPACE "\x7A\x7A\x7D\x76\000\000"
+#define SZ_KEY_NAME_INSERT "\x3F\x63\x65\x51\000\000"
+#define SZ_KEY_NAME_DELETE "\x4A\x52\x64\x96\000\000"
+#define SZ_KEY_NAME_KANAKANJI "\x4b\x30\x6a\x30\x22\x6f\x57\x5b\000\000"
+#define SZ_KEY_NAME_SHIFTLEFT "\xB7\x30\xD5\x30\xC8\x30\xE6\x5D\000\000"
+#define SZ_KEY_NAME_SHIFTRIGHT "\xB7\x30\xD5\x30\xC8\x30\xF3\x53\000\000"
+#define SZ_KEY_NAME_EIJI "\xF1\x82\x57\x5B\000\000"
+#define SZ_KEY_NAME_JISHO "\x58\x53\x9E\x8A\x9E\x8F\xF8\x66\000\000"
+#define SZ_KEY_NAME_MASSHOU "\x58\x53\x9E\x8A\xB9\x62\x88\x6D\000\000"
+#define SZ_KEY_NAME_TOUROKU "\x58\x53\x9E\x8A\x7B\x76\x32\x93\000\000"
+#define SZ_KEY_NAME_PRIOR "\x4D\x52\x4C\x88\000\000"
+#define SZ_KEY_NAME_NEXT "\x21\x6B\x4C\x88\000\000"
+#define SZ_KEY_NAME_CANCEL "\xD6\x53\x88\x6D\000\000"
+#define SZ_KEY_NAME_EXECUTE "\x9F\x5B\x4C\x88\000\000"
+#define SZ_KEY_NAME_TAB "\xBF\x30\xD6\x30\000\000"
+
+
+//----------------------[ NEC Code Original Start ]-----------------
+ // ff76(ka) ff85(na) for Unicode
+#define SZ_KEY_NAME_KANA "\x76\xff\x85\xff"
+#define SZ_KEY_NAME_F1 "\x66\x00\x65\xff\x31\x00"
+#define SZ_KEY_NAME_F2 "\x66\x00\x65\xff\x32\x00"
+#define SZ_KEY_NAME_F3 "\x66\x00\x65\xff\x33\x00"
+#define SZ_KEY_NAME_F4 "\x66\x00\x65\xff\x34\x00"
+#define SZ_KEY_NAME_F5 "\x66\x00\x65\xff\x35\x00"
+#define SZ_KEY_NAME_F6 "\x66\x00\x65\xff\x36\x00"
+#define SZ_KEY_NAME_F7 "\x66\x00\x65\xff\x37\x00"
+#define SZ_KEY_NAME_F8 "\x66\x00\x65\xff\x38\x00"
+#define SZ_KEY_NAME_F9 "\x66\x00\x65\xff\x39\x00"
+#define SZ_KEY_NAME_F10 "\x66\x00\x65\xff\x31\x00\x30\x00"
+#define SZ_KEY_NAME_F11 "\x66\x00\x65\xff\x31\x00\x31\x00"
+#define SZ_KEY_NAME_F12 "\x66\x00\x65\xff\x31\x00\x32\x00"
+#define SZ_KEY_NAME_F13 "\x66\x00\x65\xff\x31\x00\x33\x00"
+#define SZ_KEY_NAME_F14 "\x66\x00\x65\xff\x31\x00\x34\x00"
+#define SZ_KEY_NAME_F15 "\x66\x00\x65\xff\x31\x00\x35\x00"
+
+//----------------------[ NEC Code Original Start ]-----------------
+//This is NEC Document Processer define
+//
+#define SZ_KEY_NAME_DP_ZENKAKU_HANKAKU "\x68\x51\xd2\x89\x2f\000\x4a\x53\xd2\x89\000\000"
+#define SZ_KEY_NAME_DP_KANA "\x4b\x30\x6a\x30\000\000"
+#define SZ_KEY_NAME_DP_KATAKANA "\xab\x30\xbf\x30\xab\x30\xca\x30\000\000"
+#define SZ_KEY_NAME_DP_EISU "\xf1\x82\x70\x65\000\000"
diff --git a/input/layout/fe_kbds/jpn/japan.inc b/input/layout/fe_kbds/jpn/japan.inc
new file mode 100644
index 00000000..9bf337ba
--- /dev/null
+++ b/input/layout/fe_kbds/jpn/japan.inc
@@ -0,0 +1,18 @@
+#****************************** File Header ******************************\
+# File Name: Sources.inc for JPN KBDs
+#
+# Copyright (c) 1985-2000, Microsoft Corporation
+#
+# Project specific SOURCES file.
+#
+# History:
+# May-14-1999 HiroYama Created
+#***************************************************************************/
+
+!include ..\..\fekbds.inc
+
+C_DEFINES=$(C_DEFINES) -DJAPAN
+
+
+INCLUDES=$(INCLUDES);..\inc
+
diff --git a/input/layout/kbd.sln b/input/layout/kbd.sln
new file mode 100644
index 00000000..7eb0b1ad
--- /dev/null
+++ b/input/layout/kbd.sln
@@ -0,0 +1,96 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0
+MinimumVisualStudioVersion = 12.0
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kbdus", "Kbdus", "{65AC1222-C01E-4CBC-BBAC-29FF85DB8679}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kbdfr", "Kbdfr", "{AF5388EE-4390-4207-95FF-03AA09D8B109}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "All_kbds", "All_kbds", "{28B0BF55-88F8-41A7-8A51-45757B6EC513}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kbdgr", "Kbdgr", "{338A9141-AB61-4793-9C37-69B594B2B287}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "101", "101", "{3B5A6244-9F6D-499B-BE95-EC1F2B9C9654}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Jpn", "Jpn", "{F05C7CB3-D49D-4067-A685-78ADFD20C09B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Fe_kbds", "Fe_kbds", "{FEB51C0D-8BBA-403B-A896-20580F8BF462}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "106", "106", "{64764DD6-E2B0-4DCA-9515-06A238B351A9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbdus", "kbdus\kbdus.vcxproj", "{C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbdfr", "all_kbds\kbdfr\kbdfr.vcxproj", "{8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbdgr", "all_kbds\kbdgr\kbdgr.vcxproj", "{F918E44C-4E53-4267-BFDB-71112122DFE2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbd101", "fe_kbds\jpn\101\kbd101.vcxproj", "{FBA54F55-C1FA-48D3-85E5-403BA6AD2469}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbd106", "fe_kbds\jpn\106\kbd106.vcxproj", "{07365E50-1324-40D2-832B-62DE0747FE4D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Debug|Win32.Build.0 = Debug|Win32
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Release|Win32.ActiveCfg = Release|Win32
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Release|Win32.Build.0 = Release|Win32
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Debug|x64.ActiveCfg = Debug|x64
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Debug|x64.Build.0 = Debug|x64
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Release|x64.ActiveCfg = Release|x64
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}.Release|x64.Build.0 = Release|x64
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Debug|Win32.Build.0 = Debug|Win32
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Release|Win32.ActiveCfg = Release|Win32
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Release|Win32.Build.0 = Release|Win32
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Debug|x64.ActiveCfg = Debug|x64
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Debug|x64.Build.0 = Debug|x64
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Release|x64.ActiveCfg = Release|x64
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD}.Release|x64.Build.0 = Release|x64
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Debug|Win32.Build.0 = Debug|Win32
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Release|Win32.ActiveCfg = Release|Win32
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Release|Win32.Build.0 = Release|Win32
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Debug|x64.ActiveCfg = Debug|x64
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Debug|x64.Build.0 = Debug|x64
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Release|x64.ActiveCfg = Release|x64
+ {F918E44C-4E53-4267-BFDB-71112122DFE2}.Release|x64.Build.0 = Release|x64
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Debug|Win32.Build.0 = Debug|Win32
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Release|Win32.ActiveCfg = Release|Win32
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Release|Win32.Build.0 = Release|Win32
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Debug|x64.ActiveCfg = Debug|x64
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Debug|x64.Build.0 = Debug|x64
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Release|x64.ActiveCfg = Release|x64
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469}.Release|x64.Build.0 = Release|x64
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Debug|Win32.Build.0 = Debug|Win32
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Release|Win32.ActiveCfg = Release|Win32
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Release|Win32.Build.0 = Release|Win32
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Debug|x64.ActiveCfg = Debug|x64
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Debug|x64.Build.0 = Debug|x64
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Release|x64.ActiveCfg = Release|x64
+ {07365E50-1324-40D2-832B-62DE0747FE4D}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C} = {65AC1222-C01E-4CBC-BBAC-29FF85DB8679}
+ {8CC545F3-0678-4AC8-8A25-2110DB6BF1BD} = {AF5388EE-4390-4207-95FF-03AA09D8B109}
+ {F918E44C-4E53-4267-BFDB-71112122DFE2} = {338A9141-AB61-4793-9C37-69B594B2B287}
+ {FBA54F55-C1FA-48D3-85E5-403BA6AD2469} = {3B5A6244-9F6D-499B-BE95-EC1F2B9C9654}
+ {07365E50-1324-40D2-832B-62DE0747FE4D} = {64764DD6-E2B0-4DCA-9515-06A238B351A9}
+ {AF5388EE-4390-4207-95FF-03AA09D8B109} = {28B0BF55-88F8-41A7-8A51-45757B6EC513}
+ {338A9141-AB61-4793-9C37-69B594B2B287} = {28B0BF55-88F8-41A7-8A51-45757B6EC513}
+ {3B5A6244-9F6D-499B-BE95-EC1F2B9C9654} = {F05C7CB3-D49D-4067-A685-78ADFD20C09B}
+ {F05C7CB3-D49D-4067-A685-78ADFD20C09B} = {FEB51C0D-8BBA-403B-A896-20580F8BF462}
+ {64764DD6-E2B0-4DCA-9515-06A238B351A9} = {F05C7CB3-D49D-4067-A685-78ADFD20C09B}
+ EndGlobalSection
+EndGlobal
diff --git a/input/layout/kbdus/kbdus.c b/input/layout/kbdus/kbdus.c
new file mode 100644
index 00000000..4cbb3ddd
--- /dev/null
+++ b/input/layout/kbdus/kbdus.c
@@ -0,0 +1,433 @@
+/***************************************************************************\
+* Module Name: KBDUS.C
+*
+* keyboard layout for United States
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* History:
+* KBDTOOL v3.11 - Created Thu Aug 24 18:10:11 2000
+\***************************************************************************/
+
+#include <windows.h>
+#include "kbd.h"
+#include "kbdUS.h"
+
+#if defined(_M_IA64)
+#pragma section(".data")
+#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
+#else
+#pragma data_seg(".data")
+#define ALLOC_SECTION_LDATA
+#endif
+
+/***************************************************************************\
+* ausVK[] - Virtual Scan Code to Virtual Key conversion table for United States
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA USHORT ausVK[] = {
+ T00, T01, T02, T03, T04, T05, T06, T07,
+ T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
+ T10, T11, T12, T13, T14, T15, T16, T17,
+ T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
+ T20, T21, T22, T23, T24, T25, T26, T27,
+ T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
+ T30, T31, T32, T33, T34, T35,
+
+ /*
+ * Right-hand Shift key must have KBDEXT bit set.
+ */
+ T36 | KBDEXT,
+
+ T37 | KBDMULTIVK, // numpad_* + Shift/Alt -> SnapShot
+
+ T38, T39, T3A, T3B, T3C, T3D, T3E,
+ T3F, T40, T41, T42, T43, T44,
+
+ /*
+ * NumLock Key:
+ * KBDEXT - VK_NUMLOCK is an Extended key
+ * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
+ */
+ T45 | KBDEXT | KBDMULTIVK,
+
+ T46 | KBDMULTIVK,
+
+ /*
+ * Number Pad keys:
+ * KBDNUMPAD - digits 0-9 and decimal point.
+ * KBDSPECIAL - require special processing by Windows
+ */
+ T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home)
+ T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up),
+ T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp),
+ T4A,
+ T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left),
+ T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear),
+ T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right),
+ T4E,
+ T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End),
+ T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down),
+ T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn),
+ T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins),
+ T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del),
+
+ T54, T55, T56, T57, T58, T59, T5A, T5B,
+ T5C, T5D, T5E, T5F, T60, T61, T62, T63,
+ T64, T65, T66, T67, T68, T69, T6A, T6B,
+ T6C, T6D, T6E, T6F, T70, T71, T72, T73,
+ T74, T75, T76, T77, T78, T79, T7A, T7B,
+ T7C, T7D, T7E
+
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
+ { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track
+ { 0x19, X19 | KBDEXT }, // Speedracer: Next Track
+ { 0x1D, X1D | KBDEXT }, // RControl
+ { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute
+ { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2
+ { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause
+ { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop
+ { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down
+ { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up
+ { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home
+ { 0x35, X35 | KBDEXT }, // Numpad Divide
+ { 0x37, X37 | KBDEXT }, // Snapshot
+ { 0x38, X38 | KBDEXT }, // RMenu
+ { 0x47, X47 | KBDEXT }, // Home
+ { 0x48, X48 | KBDEXT }, // Up
+ { 0x49, X49 | KBDEXT }, // Prior
+ { 0x4B, X4B | KBDEXT }, // Left
+ { 0x4D, X4D | KBDEXT }, // Right
+ { 0x4F, X4F | KBDEXT }, // End
+ { 0x50, X50 | KBDEXT }, // Down
+ { 0x51, X51 | KBDEXT }, // Next
+ { 0x52, X52 | KBDEXT }, // Insert
+ { 0x53, X53 | KBDEXT }, // Delete
+ { 0x5B, X5B | KBDEXT }, // Left Win
+ { 0x5C, X5C | KBDEXT }, // Right Win
+ { 0x5D, X5D | KBDEXT }, // Application
+ { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep
+ { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search
+ { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites
+ { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh
+ { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop
+ { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward
+ { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back
+ { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1
+ { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail
+ { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector
+ { 0x1C, X1C | KBDEXT }, // Numpad Enter
+ { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause)
+ { 0, 0 }
+};
+
+static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
+ { 0x1D, Y1D }, // Pause
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aVkToBits[] - map Virtual Keys to Modifier Bits
+*
+* See kbd.h for a full description.
+*
+* United States Keyboard has only three shifter keys:
+* SHIFT (L & R) affects alphabnumeric keys,
+* CTRL (L & R) is used to generate control characters
+* ALT (L & R) used for generating characters by number with numpad
+\***************************************************************************/
+static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
+ { VK_SHIFT , KBDSHIFT },
+ { VK_CONTROL , KBDCTRL },
+ { VK_MENU , KBDALT },
+ { 0 , 0 }
+};
+
+/***************************************************************************\
+* aModification[] - map character modifier bits to modification number
+*
+* See kbd.h for a full description.
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
+ &aVkToBits[0],
+ 3,
+ {
+ // Modification# // Keys Pressed
+ // ============= // =============
+ 0, //
+ 1, // Shift
+ 2, // Control
+ 3 // Shift + Control
+ }
+};
+
+/***************************************************************************\
+*
+* aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states
+* aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states
+* aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states
+*
+* Table attributes: Unordered Scan, null-terminated
+*
+* Search this table for an entry with a matching Virtual Key to find the
+* corresponding unshifted and shifted WCHAR characters.
+*
+* Special values for VirtualKey (column 1)
+* 0xff - dead chars for the previous entry
+* 0 - terminate the list
+*
+* Special values for Attributes (column 2)
+* CAPLOK bit - CAPS-LOCK affect this key like SHIFT
+*
+* Special values for wch[*] (column 3 & 4)
+* WCH_NONE - No character
+* WCH_DEAD - Dead Key (diaresis) or invalid (US keyboard has none)
+* WCH_LGTR - Ligature (generates multiple characters)
+*
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS2 aVkToWch2[] = {
+// | | Shift |
+// |=========|=========|
+ {VK_OEM_3 ,0 ,'`' ,'~' },
+ {'1' ,0 ,'1' ,'!' },
+ {'3' ,0 ,'3' ,'#' },
+ {'4' ,0 ,'4' ,'$' },
+ {'5' ,0 ,'5' ,'%' },
+ {'7' ,0 ,'7' ,'&' },
+ {'8' ,0 ,'8' ,'*' },
+ {'9' ,0 ,'9' ,'(' },
+ {'0' ,0 ,'0' ,')' },
+ {VK_OEM_PLUS ,0 ,'=' ,'+' },
+ {'Q' ,CAPLOK ,'q' ,'Q' },
+ {'W' ,CAPLOK ,'w' ,'W' },
+ {'E' ,CAPLOK ,'e' ,'E' },
+ {'R' ,CAPLOK ,'r' ,'R' },
+ {'T' ,CAPLOK ,'t' ,'T' },
+ {'Y' ,CAPLOK ,'y' ,'Y' },
+ {'U' ,CAPLOK ,'u' ,'U' },
+ {'I' ,CAPLOK ,'i' ,'I' },
+ {'O' ,CAPLOK ,'o' ,'O' },
+ {'P' ,CAPLOK ,'p' ,'P' },
+ {'A' ,CAPLOK ,'a' ,'A' },
+ {'S' ,CAPLOK ,'s' ,'S' },
+ {'D' ,CAPLOK ,'d' ,'D' },
+ {'F' ,CAPLOK ,'f' ,'F' },
+ {'G' ,CAPLOK ,'g' ,'G' },
+ {'H' ,CAPLOK ,'h' ,'H' },
+ {'J' ,CAPLOK ,'j' ,'J' },
+ {'K' ,CAPLOK ,'k' ,'K' },
+ {'L' ,CAPLOK ,'l' ,'L' },
+ {VK_OEM_1 ,0 ,';' ,':' },
+ {VK_OEM_7 ,0 ,'\'' ,'\"' },
+ {'Z' ,CAPLOK ,'z' ,'Z' },
+ {'X' ,CAPLOK ,'x' ,'X' },
+ {'C' ,CAPLOK ,'c' ,'C' },
+ {'V' ,CAPLOK ,'v' ,'V' },
+ {'B' ,CAPLOK ,'b' ,'B' },
+ {'N' ,CAPLOK ,'n' ,'N' },
+ {'M' ,CAPLOK ,'m' ,'M' },
+ {VK_OEM_COMMA ,0 ,',' ,'<' },
+ {VK_OEM_PERIOD,0 ,'.' ,'>' },
+ {VK_OEM_2 ,0 ,'/' ,'?' },
+ {VK_DECIMAL ,0 ,'.' ,'.' },
+ {VK_TAB ,0 ,'\t' ,'\t' },
+ {VK_ADD ,0 ,'+' ,'+' },
+ {VK_DIVIDE ,0 ,'/' ,'/' },
+ {VK_MULTIPLY ,0 ,'*' ,'*' },
+ {VK_SUBTRACT ,0 ,'-' ,'-' },
+ {0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS3 aVkToWch3[] = {
+// | | Shift | Ctrl |
+// |=========|=========|=========|
+ {VK_OEM_4 ,0 ,'[' ,'{' ,0x001b },
+ {VK_OEM_6 ,0 ,']' ,'}' ,0x001d },
+ {VK_OEM_5 ,0 ,'\\' ,'|' ,0x001c },
+ {VK_OEM_102 ,0 ,'\\' ,'|' ,0x001c },
+ {VK_BACK ,0 ,'\b' ,'\b' ,0x007f },
+ {VK_ESCAPE ,0 ,0x001b ,0x001b ,0x001b },
+ {VK_RETURN ,0 ,'\r' ,'\r' ,'\n' },
+ {VK_SPACE ,0 ,' ' ,' ' ,' ' },
+ {VK_CANCEL ,0 ,0x0003 ,0x0003 ,0x0003 },
+ {0 ,0 ,0 ,0 ,0 }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
+// | | Shift | Ctrl |S+Ctrl |
+// |=========|=========|=========|=========|
+ {'2' ,0 ,'2' ,'@' ,WCH_NONE ,0x0000 },
+ {'6' ,0 ,'6' ,'^' ,WCH_NONE ,0x001e },
+ {VK_OEM_MINUS ,0 ,'-' ,'_' ,WCH_NONE ,0x001f },
+ {0 ,0 ,0 ,0 ,0 ,0 }
+};
+
+// Put this last so that VkKeyScan interprets number characters
+// as coming from the main section of the kbd (aVkToWch2 and
+// aVkToWch5) before considering the numpad (aVkToWch1).
+
+static ALLOC_SECTION_LDATA VK_TO_WCHARS1 aVkToWch1[] = {
+ { VK_NUMPAD0 , 0 , '0' },
+ { VK_NUMPAD1 , 0 , '1' },
+ { VK_NUMPAD2 , 0 , '2' },
+ { VK_NUMPAD3 , 0 , '3' },
+ { VK_NUMPAD4 , 0 , '4' },
+ { VK_NUMPAD5 , 0 , '5' },
+ { VK_NUMPAD6 , 0 , '6' },
+ { VK_NUMPAD7 , 0 , '7' },
+ { VK_NUMPAD8 , 0 , '8' },
+ { VK_NUMPAD9 , 0 , '9' },
+ { 0 , 0 , '\0' }
+};
+
+static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+ { (PVK_TO_WCHARS1)aVkToWch3, 3, sizeof(aVkToWch3[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
+ { (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) },
+ { NULL, 0, 0 },
+};
+
+/***************************************************************************\
+* aKeyNames[], aKeyNamesExt[] - Virtual Scancode to Key Name tables
+*
+* Table attributes: Ordered Scan (by scancode), null-terminated
+*
+* Only the names of Extended, NumPad, Dead and Non-Printable keys are here.
+* (Keys producing printable characters are named by that character)
+\***************************************************************************/
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
+ 0x01, L"Esc",
+ 0x0e, L"Backspace",
+ 0x0f, L"Tab",
+ 0x1c, L"Enter",
+ 0x1d, L"Ctrl",
+ 0x2a, L"Shift",
+ 0x36, L"Right Shift",
+ 0x37, L"Num *",
+ 0x38, L"Alt",
+ 0x39, L"Space",
+ 0x3a, L"Caps Lock",
+ 0x3b, L"F1",
+ 0x3c, L"F2",
+ 0x3d, L"F3",
+ 0x3e, L"F4",
+ 0x3f, L"F5",
+ 0x40, L"F6",
+ 0x41, L"F7",
+ 0x42, L"F8",
+ 0x43, L"F9",
+ 0x44, L"F10",
+ 0x45, L"Pause",
+ 0x46, L"Scroll Lock",
+ 0x47, L"Num 7",
+ 0x48, L"Num 8",
+ 0x49, L"Num 9",
+ 0x4a, L"Num -",
+ 0x4b, L"Num 4",
+ 0x4c, L"Num 5",
+ 0x4d, L"Num 6",
+ 0x4e, L"Num +",
+ 0x4f, L"Num 1",
+ 0x50, L"Num 2",
+ 0x51, L"Num 3",
+ 0x52, L"Num 0",
+ 0x53, L"Num Del",
+ 0x54, L"Sys Req",
+ 0x57, L"F11",
+ 0x58, L"F12",
+ 0x7c, L"F13",
+ 0x7d, L"F14",
+ 0x7e, L"F15",
+ 0x7f, L"F16",
+ 0x80, L"F17",
+ 0x81, L"F18",
+ 0x82, L"F19",
+ 0x83, L"F20",
+ 0x84, L"F21",
+ 0x85, L"F22",
+ 0x86, L"F23",
+ 0x87, L"F24",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
+ 0x1c, L"Num Enter",
+ 0x1d, L"Right Ctrl",
+ 0x35, L"Num /",
+ 0x37, L"Prnt Scrn",
+ 0x38, L"Right Alt",
+ 0x45, L"Num Lock",
+ 0x46, L"Break",
+ 0x47, L"Home",
+ 0x48, L"Up",
+ 0x49, L"Page Up",
+ 0x4b, L"Left",
+ 0x4d, L"Right",
+ 0x4f, L"End",
+ 0x50, L"Down",
+ 0x51, L"Page Down",
+ 0x52, L"Insert",
+ 0x53, L"Delete",
+ 0x54, L"<00>",
+ 0x56, L"Help",
+ 0x5b, L"Left Windows",
+ 0x5c, L"Right Windows",
+ 0x5d, L"Application",
+ 0 , NULL
+};
+
+static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
+ /*
+ * Modifier keys
+ */
+ &CharModifiers,
+
+ /*
+ * Characters tables
+ */
+ aVkToWcharTable,
+
+ /*
+ * Diacritics
+ */
+ NULL,
+
+ /*
+ * Names of Keys
+ */
+ aKeyNames,
+ aKeyNamesExt,
+ NULL,
+
+ /*
+ * Scan codes to Virtual Keys
+ */
+ ausVK,
+ sizeof(ausVK) / sizeof(ausVK[0]),
+ aE0VscToVk,
+ aE1VscToVk,
+
+ /*
+ * Locale-specific special processing
+ */
+ MAKELONG(0, KBD_VERSION),
+
+ /*
+ * Ligatures
+ */
+ 0,
+ 0,
+ NULL
+};
+
+PKBDTABLES KbdLayerDescriptor(VOID)
+{
+ return &KbdTables;
+}
diff --git a/input/layout/kbdus/kbdus.def b/input/layout/kbdus/kbdus.def
new file mode 100644
index 00000000..a94c263d
--- /dev/null
+++ b/input/layout/kbdus/kbdus.def
@@ -0,0 +1,4 @@
+LIBRARY KBDUS
+
+EXPORTS
+ KbdLayerDescriptor @1
diff --git a/input/layout/kbdus/kbdus.h b/input/layout/kbdus/kbdus.h
new file mode 100644
index 00000000..32ea0e9a
--- /dev/null
+++ b/input/layout/kbdus/kbdus.h
@@ -0,0 +1,38 @@
+/****************************** Module Header ******************************\
+* Module Name: KBDUS.H
+*
+* keyboard layout header for United States
+*
+* Copyright (c) 1985-2000, Microsoft Corporation
+*
+* Various defines for use by keyboard input code.
+*
+* History:
+*
+* created by KBDTOOL v3.11 Thu Aug 24 18:10:11 2000
+*
+\***************************************************************************/
+
+/*
+ * kbd type should be controlled by cl command-line argument
+ */
+#define KBD_TYPE 4
+
+/*
+* Include the basis of all keyboard table values
+*/
+#include "kbd.h"
+#include <dontuse.h>
+/***************************************************************************\
+* The table below defines the virtual keys for various keyboard types where
+* the keyboard differ from the US keyboard.
+*
+* _EQ() : all keyboard types have the same virtual key for this scancode
+* _NE() : different virtual keys for this scancode, depending on kbd type
+*
+* +------+ +----------+----------+----------+----------+----------+----------+
+* | Scan | | kbd | kbd | kbd | kbd | kbd | kbd |
+* | code | | type 1 | type 2 | type 3 | type 4 | type 5 | type 6 |
+\****+-------+_+----------+----------+----------+----------+----------+----------+*/
+
+
diff --git a/input/layout/kbdus/kbdus.rc b/input/layout/kbdus/kbdus.rc
new file mode 100644
index 00000000..85ea293b
--- /dev/null
+++ b/input/layout/kbdus/kbdus.rc
@@ -0,0 +1,11 @@
+#include <windows.h>
+#include <ntverp.h>
+
+#define VER_FILETYPE VFT_DLL
+#define VER_FILESUBTYPE VFT2_DRV_KEYBOARD
+#define VER_FILEDESCRIPTION_STR "United States Keyboard Layout"
+#define VER_INTERNALNAME_STR "kbdus (3.11)"
+#define VER_ORIGINALFILENAME_STR "kbdus.dll"
+
+#define VER_LANGNEUTRAL
+#include "common.ver"
diff --git a/input/layout/kbdus/kbdus.vcxproj b/input/layout/kbdus/kbdus.vcxproj
new file mode 100644
index 00000000..7e14a70b
--- /dev/null
+++ b/input/layout/kbdus/kbdus.vcxproj
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C51EA5C9-2C11-4BA0-A8F1-E59CE1315B3C}</ProjectGuid>
+ <RootNamespace>$(MSBuildProjectName)</RootNamespace>
+ <Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <SampleGuid>{5FDFB1FB-FD24-4035-A1DF-B769A6623FAD}</SampleGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>False</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetVersion>Windows10</TargetVersion>
+ <UseDebugLibraries>True</UseDebugLibraries>
+ <DriverTargetPlatform>Universal</DriverTargetPlatform>
+ <DriverType />
+ <PlatformToolset>WindowsApplicationForDrivers10.0</PlatformToolset>
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <PropertyGroup>
+ <OutDir>$(IntDir)</OutDir>
+ </PropertyGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
+ </ImportGroup>
+ <ItemGroup Label="WrappedTaskItems" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetName>kbdus</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetName>kbdus</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <TargetName>kbdus</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <TargetName>kbdus</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ResourceCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ClCompile>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Midl>
+ <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);..\..\inc</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </Midl>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdus.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdus.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdus.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Link>
+ <AdditionalOptions>%(AdditionalOptions) -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data -section:.data,re</AdditionalOptions>
+ <AdditionalOptions>%(AdditionalOptions) /ignore:4254</AdditionalOptions>
+ <ModuleDefinitionFile>kbdus.def</ModuleDefinitionFile>
+ </Link>
+ <ClCompile>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="kbdus.c" />
+ <ResourceCompile Include="kbdus.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <Inf Exclude="@(Inf)" Include="*.inf" />
+ <FilesToPackage Include="$(TargetPath)" Condition="'$(ConfigurationType)'=='Driver' or '$(ConfigurationType)'=='DynamicLibrary'" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Exclude="@(None)" Include="*.txt;*.htm;*.html" />
+ <None Exclude="@(None)" Include="*.ico;*.cur;*.bmp;*.dlg;*.rct;*.gif;*.jpg;*.jpeg;*.wav;*.jpe;*.tiff;*.tif;*.png;*.rc2" />
+ <None Exclude="@(None)" Include="*.def;*.bat;*.hpj;*.asmx" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Exclude="@(ClInclude)" Include="*.h;*.hpp;*.hxx;*.hm;*.inl;*.xsd" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+</Project> \ No newline at end of file
diff --git a/input/layout/kbdus/kbdus.vcxproj.Filters b/input/layout/kbdus/kbdus.vcxproj.Filters
new file mode 100644
index 00000000..609976b8
--- /dev/null
+++ b/input/layout/kbdus/kbdus.vcxproj.Filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
+ <UniqueIdentifier>{2D0B008F-79FE-49A9-ADA6-B6D82DE2B8C5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Header Files">
+ <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ <UniqueIdentifier>{6CBCD00A-C745-4F86-BB31-62DE2062C430}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Resource Files">
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml</Extensions>
+ <UniqueIdentifier>{AB0F9528-F2D0-490B-85F9-2D9B84A2C85A}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="kbdus.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <None Include="kbdus.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="kbdus.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file