summaryrefslogtreecommitdiff
path: root/input
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
parent687b274aa38fd05c8c26e3068932121876d7f745 (diff)
Updated for "Windows 10 Anniversary Update" (Version 1607)
Diffstat (limited to 'input')
-rw-r--r--input/hiddigi/SynapticsTouch/README.md68
-rw-r--r--input/hiddigi/SynapticsTouch/SynapticsTouch.inxbin9020 -> 18440 bytes
-rw-r--r--input/hiddigi/SynapticsTouch/SynapticsTouch.sln18
-rw-r--r--input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj4
-rw-r--r--input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj.Filters8
-rw-r--r--input/hiddigi/SynapticsTouch/init.c7
-rw-r--r--input/hiddigi/SynapticsTouch/registry.c4
-rw-r--r--input/hiddigi/SynapticsTouch/resolutions.c4
-rw-r--r--input/hiddigi/SynapticsTouch/spb.c10
-rw-r--r--input/kbfiltr/exe/kbftest.vcxproj4
-rw-r--r--input/kbfiltr/exe/kbftest.vcxproj.Filters6
-rw-r--r--input/kbfiltr/kbfiltr.sln44
-rw-r--r--input/kbfiltr/sys/kbfiltr.inxbin2717 -> 5714 bytes
-rw-r--r--input/kbfiltr/sys/kbfiltr.vcxproj12
-rw-r--r--input/kbfiltr/sys/kbfiltr.vcxproj.Filters13
-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
-rw-r--r--input/moufiltr/Moufiltr.htm699
-rw-r--r--input/moufiltr/moufiltr.inxbin2712 -> 5704 bytes
-rw-r--r--input/moufiltr/moufiltr.sln18
-rw-r--r--input/moufiltr/moufiltr.vcxproj12
-rw-r--r--input/moufiltr/moufiltr.vcxproj.Filters13
55 files changed, 5406 insertions, 117 deletions
diff --git a/input/hiddigi/SynapticsTouch/README.md b/input/hiddigi/SynapticsTouch/README.md
index d52fd4fd..df0347d2 100644
--- a/input/hiddigi/SynapticsTouch/README.md
+++ b/input/hiddigi/SynapticsTouch/README.md
@@ -1,7 +1,9 @@
Synaptics Touch Sample
======================
+
The Synaptics Touch (KMDF) sample demonstrates how to write a HID miniport driver for the Synaptics 3202 touch controller.
+
## Universal Windows Driver Compliant
This sample builds a Universal Windows Driver. It uses only APIs and DDIs that are included in OneCoreUAP.
@@ -15,58 +17,88 @@ Related technologies
[Windows Pointer Device](http://msdn.microsoft.com/en-us/library/windows/hardware/jj151570)
-System requirements
+##System requirements
-------------------
-**Client:** Windows 10
+**Client:** Windows 10 Technical Preview
-**Server:** Windows 10
+**Server:** Windows 10 Technical Preview
-**Phone:** Windows 10
+**Phone:** Windows 10 Technical Preview
File Manifest
-------------
-#### driver.h, driver.c
+
+File
+
+Description
+
+driver.h, driver.c
+
DriverEntry and Events on the Driver Object.
-#### device.h, device.c
+device.h, device.c
+
Events on the Device Object.
-#### queue.h, queue.c
+queue.h, queue.c
+
Contains Events on the I/O Queue Objects.
-#### hid.c, hid.h
+hid.c, hid.h
+
Contains the HID descriptor and functions to handle to HID requests.
-#### idle.c, idle.h
+idle.c, idle.h
+
Contains the declarations for Power Idle specific callbacks and function definitions.
-#### internal.h
+internal.h
+
Contains common types and defintions used internally by the multi touch screen driver.
-#### spb.c
+spb.c
+
Contains all I2C-specific functionality.
-#### init.c
+init.c
+
Contains Synaptics initialization code.
-#### power.c
+power.c
+
Contains Synaptics power-on and power-off functionality.
-#### registry.c
+registry.c
+
This module retrieves platform-specific controller configuration from the registry, or assigns default values if no registry configuration is present.
-#### report.c
+report.c
+
Contains Synaptics specific code for reporting samples.
-#### resolutions.c
+resolutions.c
+
Contains resolution translation defines and types.
-#### rmiinternal.h
+rmiinternal.h
+
Contains common types and defintions used internally by the multi touch screen driver.
-#### SynapticsTouch.inx
+SynapticsTouch.inx
+
File that describes the installation of this driver. The build process converts this into an INF file.
+Makefile.inc
+
+A makefile that defines custom build actions. This includes the conversion of the .INX file into a .INF file
+
+Makefile
+
+This file merely redirects to the real makefile that is shared by all the driver components of the Windows NT DDK.
+
+Sources
+
+Generic file that lists source files and all the build options.
diff --git a/input/hiddigi/SynapticsTouch/SynapticsTouch.inx b/input/hiddigi/SynapticsTouch/SynapticsTouch.inx
index 680ba592..918076d8 100644
--- a/input/hiddigi/SynapticsTouch/SynapticsTouch.inx
+++ b/input/hiddigi/SynapticsTouch/SynapticsTouch.inx
Binary files differ
diff --git a/input/hiddigi/SynapticsTouch/SynapticsTouch.sln b/input/hiddigi/SynapticsTouch/SynapticsTouch.sln
index d0bb5610..1a31546c 100644
--- a/input/hiddigi/SynapticsTouch/SynapticsTouch.sln
+++ b/input/hiddigi/SynapticsTouch/SynapticsTouch.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SynapticsTouch", "SynapticsTouch.vcxproj", "{B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SynapticsTouch", "SynapticsTouch.vcxproj", "{1E12CAAD-D041-4C21-B673-6FF831FC3D70}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Debug|Win32.ActiveCfg = Debug|Win32
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Debug|Win32.Build.0 = Debug|Win32
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Release|Win32.ActiveCfg = Release|Win32
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Release|Win32.Build.0 = Release|Win32
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Debug|x64.ActiveCfg = Debug|x64
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Debug|x64.Build.0 = Debug|x64
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Release|x64.ActiveCfg = Release|x64
- {B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}.Release|x64.Build.0 = Release|x64
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Debug|Win32.Build.0 = Debug|Win32
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Release|Win32.ActiveCfg = Release|Win32
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Release|Win32.Build.0 = Release|Win32
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Debug|x64.ActiveCfg = Debug|x64
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Debug|x64.Build.0 = Debug|x64
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Release|x64.ActiveCfg = Release|x64
+ {1E12CAAD-D041-4C21-B673-6FF831FC3D70}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj b/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj
index 924a97e2..be63e4e3 100644
--- a/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj
+++ b/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{B07A4DCF-0F5D-4F7A-9C90-C972527A69CD}</ProjectGuid>
+ <ProjectGuid>{1E12CAAD-D041-4C21-B673-6FF831FC3D70}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{6FA87448-3C43-47E0-8863-483C7DA26875}</SampleGuid>
+ <SampleGuid>{25B3301B-A9D9-4EE3-8EA5-B1F1FBB3A18C}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj.Filters b/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj.Filters
index fa3943ae..5460e3f9 100644
--- a/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj.Filters
+++ b/input/hiddigi/SynapticsTouch/SynapticsTouch.vcxproj.Filters
@@ -3,19 +3,19 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{FFD83EEB-ECDA-42ED-9B34-C8F74E64369E}</UniqueIdentifier>
+ <UniqueIdentifier>{934070B2-3325-476F-AEBF-5A5FE4E02C36}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{1DCE09F2-2C5B-42B6-9AB0-8995F5C04B01}</UniqueIdentifier>
+ <UniqueIdentifier>{BEACF89E-6800-49FD-A14A-7B53288D5491}</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>{99D0F0CC-6C33-4FEB-969F-839D0D2D8B45}</UniqueIdentifier>
+ <UniqueIdentifier>{ABD7DD59-0820-45CB-9D9A-C88549CE43AE}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{6CA5C1EB-79DF-4295-B67B-20594E06BE0B}</UniqueIdentifier>
+ <UniqueIdentifier>{A2EA0C74-0B20-4F74-89F4-67DE9E1A7C98}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/input/hiddigi/SynapticsTouch/init.c b/input/hiddigi/SynapticsTouch/init.c
index fa72c9ba..9c4aa225 100644
--- a/input/hiddigi/SynapticsTouch/init.c
+++ b/input/hiddigi/SynapticsTouch/init.c
@@ -1077,7 +1077,7 @@ Return Value:
NTSTATUS status;
context = ExAllocatePoolWithTag(
- NonPagedPool,
+ NonPagedPoolNx,
sizeof(RMI4_CONTROLLER_CONTEXT),
TOUCH_POOL_TAG);
@@ -1113,9 +1113,10 @@ Return Value:
Trace(
TRACE_LEVEL_ERROR,
TRACE_FLAG_INIT,
- "Could not allocate controller context - %!STATUS!",
+ "Could not create lock - %!STATUS!",
status);
+ TchFreeContext(context);
goto exit;
}
@@ -1123,7 +1124,7 @@ Return Value:
*ControllerContext = context;
exit:
-
+
return status;
}
diff --git a/input/hiddigi/SynapticsTouch/registry.c b/input/hiddigi/SynapticsTouch/registry.c
index 29c66be3..651f508a 100644
--- a/input/hiddigi/SynapticsTouch/registry.c
+++ b/input/hiddigi/SynapticsTouch/registry.c
@@ -635,11 +635,11 @@ TchRegistryGetControllerSettings(
}
//
- // RtlQueryRegistryValues table must be allocated from NonPagedPool
+ // RtlQueryRegistryValues table must be allocated from NonPagedPoolNx
//
regTable = ExAllocatePoolWithTag(
- NonPagedPool,
+ NonPagedPoolNx,
gcbRegistryTable,
TOUCH_POOL_TAG);
diff --git a/input/hiddigi/SynapticsTouch/resolutions.c b/input/hiddigi/SynapticsTouch/resolutions.c
index 7cd1ea74..c624b264 100644
--- a/input/hiddigi/SynapticsTouch/resolutions.c
+++ b/input/hiddigi/SynapticsTouch/resolutions.c
@@ -400,10 +400,10 @@ TchGetScreenProperties(
//
// Table passed to RtlQueryRegistryValues must be allocated
- // from NonPagedPool
+ // from NonPagedPoolNx
//
regTable = ExAllocatePoolWithTag(
- NonPagedPool,
+ NonPagedPoolNx,
gcbRegistryTable,
TOUCH_POOL_TAG);
diff --git a/input/hiddigi/SynapticsTouch/spb.c b/input/hiddigi/SynapticsTouch/spb.c
index 4ec7c179..85207c2a 100644
--- a/input/hiddigi/SynapticsTouch/spb.c
+++ b/input/hiddigi/SynapticsTouch/spb.c
@@ -66,7 +66,7 @@ SpbDoWriteDataSynchronously(
{
status = WdfMemoryCreate(
WDF_NO_OBJECT_ATTRIBUTES,
- NonPagedPool,
+ NonPagedPoolNx,
TOUCH_POOL_TAG,
length,
&memory,
@@ -240,7 +240,7 @@ SpbReadDataSynchronously(
{
status = WdfMemoryCreate(
WDF_NO_OBJECT_ATTRIBUTES,
- NonPagedPool,
+ NonPagedPoolNx,
TOUCH_POOL_TAG,
Length,
&memory,
@@ -445,12 +445,12 @@ SpbTargetInitialize(
}
//
- // Allocate some fixed-size buffers from NonPagedPool for typical
+ // Allocate some fixed-size buffers from NonPagedPoolNx for typical
// Spb transaction sizes to avoid pool fragmentation in most cases
//
status = WdfMemoryCreate(
WDF_NO_OBJECT_ATTRIBUTES,
- NonPagedPool,
+ NonPagedPoolNx,
TOUCH_POOL_TAG,
DEFAULT_SPB_BUFFER_SIZE,
&SpbContext->WriteMemory,
@@ -468,7 +468,7 @@ SpbTargetInitialize(
status = WdfMemoryCreate(
WDF_NO_OBJECT_ATTRIBUTES,
- NonPagedPool,
+ NonPagedPoolNx,
TOUCH_POOL_TAG,
DEFAULT_SPB_BUFFER_SIZE,
&SpbContext->ReadMemory,
diff --git a/input/kbfiltr/exe/kbftest.vcxproj b/input/kbfiltr/exe/kbftest.vcxproj
index e51147f8..ec16ba8a 100644
--- a/input/kbfiltr/exe/kbftest.vcxproj
+++ b/input/kbfiltr/exe/kbftest.vcxproj
@@ -19,11 +19,11 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{4D3A4233-FEF4-479F-9874-8C239D8FF78E}</ProjectGuid>
+ <ProjectGuid>{CB35D9AC-AD35-4381-ADA4-84378289F086}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{6FB0E6F4-D53A-4112-BCA0-F1760AC63AEB}</SampleGuid>
+ <SampleGuid>{59782B64-B06B-4AB2-AB2A-748656C59DB3}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/input/kbfiltr/exe/kbftest.vcxproj.Filters b/input/kbfiltr/exe/kbftest.vcxproj.Filters
index 2f49b751..0964b295 100644
--- a/input/kbfiltr/exe/kbftest.vcxproj.Filters
+++ b/input/kbfiltr/exe/kbftest.vcxproj.Filters
@@ -3,15 +3,15 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{A3CB6490-2256-4820-8332-9513E8921148}</UniqueIdentifier>
+ <UniqueIdentifier>{36E465FA-C1F4-4BC1-8C9D-3BF543B2D569}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{6E637087-7080-45AE-889F-39D5089A8A25}</UniqueIdentifier>
+ <UniqueIdentifier>{AEE95AC2-A478-46ED-83E9-20529E0198F8}</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>{B1978376-1D0B-4A14-83B0-E6921A530878}</UniqueIdentifier>
+ <UniqueIdentifier>{51D79FBF-B30A-49FB-A34C-19FBE6DA4A8F}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
diff --git a/input/kbfiltr/kbfiltr.sln b/input/kbfiltr/kbfiltr.sln
index e2138f5d..a5a26331 100644
--- a/input/kbfiltr/kbfiltr.sln
+++ b/input/kbfiltr/kbfiltr.sln
@@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exe", "Exe", "{4A3D2BF5-DE3F-4CA9-95A3-E3FE41000D94}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exe", "Exe", "{FEF6FE00-75E7-4016-BD79-3A0DFFC7128F}"
EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{75FDC7AD-767A-4C07-975E-332B3D4DD47D}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{4F78C4A7-C561-4CAC-811B-D22496D2C231}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbftest", "exe\kbftest.vcxproj", "{4D3A4233-FEF4-479F-9874-8C239D8FF78E}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbftest", "exe\kbftest.vcxproj", "{CB35D9AC-AD35-4381-ADA4-84378289F086}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbfiltr", "sys\kbfiltr.vcxproj", "{CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kbfiltr", "sys\kbfiltr.vcxproj", "{7227DB35-883A-4EF0-B083-1698CFEF85A3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -19,28 +19,28 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Debug|Win32.ActiveCfg = Debug|Win32
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Debug|Win32.Build.0 = Debug|Win32
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Release|Win32.ActiveCfg = Release|Win32
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Release|Win32.Build.0 = Release|Win32
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Debug|x64.ActiveCfg = Debug|x64
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Debug|x64.Build.0 = Debug|x64
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Release|x64.ActiveCfg = Release|x64
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E}.Release|x64.Build.0 = Release|x64
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Debug|Win32.ActiveCfg = Debug|Win32
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Debug|Win32.Build.0 = Debug|Win32
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Release|Win32.ActiveCfg = Release|Win32
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Release|Win32.Build.0 = Release|Win32
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Debug|x64.ActiveCfg = Debug|x64
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Debug|x64.Build.0 = Debug|x64
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Release|x64.ActiveCfg = Release|x64
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}.Release|x64.Build.0 = Release|x64
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Debug|Win32.Build.0 = Debug|Win32
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Release|Win32.ActiveCfg = Release|Win32
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Release|Win32.Build.0 = Release|Win32
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Debug|x64.ActiveCfg = Debug|x64
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Debug|x64.Build.0 = Debug|x64
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Release|x64.ActiveCfg = Release|x64
+ {CB35D9AC-AD35-4381-ADA4-84378289F086}.Release|x64.Build.0 = Release|x64
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Debug|Win32.Build.0 = Debug|Win32
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Release|Win32.ActiveCfg = Release|Win32
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Release|Win32.Build.0 = Release|Win32
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Debug|x64.ActiveCfg = Debug|x64
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Debug|x64.Build.0 = Debug|x64
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Release|x64.ActiveCfg = Release|x64
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
- {4D3A4233-FEF4-479F-9874-8C239D8FF78E} = {4A3D2BF5-DE3F-4CA9-95A3-E3FE41000D94}
- {CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79} = {75FDC7AD-767A-4C07-975E-332B3D4DD47D}
+ {CB35D9AC-AD35-4381-ADA4-84378289F086} = {FEF6FE00-75E7-4016-BD79-3A0DFFC7128F}
+ {7227DB35-883A-4EF0-B083-1698CFEF85A3} = {4F78C4A7-C561-4CAC-811B-D22496D2C231}
EndGlobalSection
EndGlobal
diff --git a/input/kbfiltr/sys/kbfiltr.inx b/input/kbfiltr/sys/kbfiltr.inx
index bc9c438a..d5788b55 100644
--- a/input/kbfiltr/sys/kbfiltr.inx
+++ b/input/kbfiltr/sys/kbfiltr.inx
Binary files differ
diff --git a/input/kbfiltr/sys/kbfiltr.vcxproj b/input/kbfiltr/sys/kbfiltr.vcxproj
index 3a6ab3aa..c066cb2f 100644
--- a/input/kbfiltr/sys/kbfiltr.vcxproj
+++ b/input/kbfiltr/sys/kbfiltr.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{CABE9083-8EBA-41D4-A0D4-F0E3BFDD9E79}</ProjectGuid>
+ <ProjectGuid>{7227DB35-883A-4EF0-B083-1698CFEF85A3}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{05A1F2D0-FD58-49DA-881D-497087488E7D}</SampleGuid>
+ <SampleGuid>{878C17AE-8F1D-43E4-9F8E-0321CA186895}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -75,13 +75,7 @@
<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">
- <Inf Include=".\kbfiltr.inx">
- <Architecture>$(InfArch)</Architecture>
- <SpecifyArchitecture>true</SpecifyArchitecture>
- <CopyOutput>.\$(IntDir)\kbfiltr.inf</CopyOutput>
- </Inf>
- </ItemGroup>
+ <ItemGroup Label="WrappedTaskItems" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<TargetName>kbfiltr</TargetName>
</PropertyGroup>
diff --git a/input/kbfiltr/sys/kbfiltr.vcxproj.Filters b/input/kbfiltr/sys/kbfiltr.vcxproj.Filters
index 7e848d3b..1dec333d 100644
--- a/input/kbfiltr/sys/kbfiltr.vcxproj.Filters
+++ b/input/kbfiltr/sys/kbfiltr.vcxproj.Filters
@@ -3,27 +3,22 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{BC392AAF-022B-4F26-BED3-9CAECC2514DA}</UniqueIdentifier>
+ <UniqueIdentifier>{69D0BA5C-EFD2-4A08-8829-DABFDD34CCDE}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{EE24B2F3-A2C8-487E-A546-D09434A690B9}</UniqueIdentifier>
+ <UniqueIdentifier>{9DBC6F0A-A32B-4824-BE0B-1DF2B8F92760}</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>{167CCCE9-D380-4055-A99C-40FBD167AAA4}</UniqueIdentifier>
+ <UniqueIdentifier>{2EBD3B86-D170-4C37-8437-0A64E6864AA6}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{6B67A3D6-3C6D-4A28-9198-2603047EB5E6}</UniqueIdentifier>
+ <UniqueIdentifier>{A6674166-7336-4066-9782-8BC6F701B19A}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
- <Inf Include=".\kbfiltr.inx">
- <Filter>Driver Files</Filter>
- </Inf>
- </ItemGroup>
- <ItemGroup>
<ClCompile Include="kbfiltr.c">
<Filter>Source Files</Filter>
</ClCompile>
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
diff --git a/input/moufiltr/Moufiltr.htm b/input/moufiltr/Moufiltr.htm
new file mode 100644
index 00000000..85faea72
--- /dev/null
+++ b/input/moufiltr/Moufiltr.htm
@@ -0,0 +1,699 @@
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 12">
+<meta name=Originator content="Microsoft Word 12">
+<link rel=File-List href="Moufiltr_files/filelist.xml">
+<title>Moufiltr</title>
+<link rel=themeData href="Moufiltr_files/themedata.thmx">
+<link rel=colorSchemeMapping href="Moufiltr_files/colorschememapping.xml">
+<!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:SpellingState>Clean</w:SpellingState>
+ <w:GrammarState>Clean</w:GrammarState>
+ <w:TrackMoves>false</w:TrackMoves>
+ <w:TrackFormatting/>
+ <w:ValidateAgainstSchemas/>
+ <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
+ <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
+ <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
+ <w:DoNotPromoteQF/>
+ <w:LidThemeOther>EN-US</w:LidThemeOther>
+ <w:LidThemeAsian>X-NONE</w:LidThemeAsian>
+ <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
+ <w:Compatibility>
+ <w:BreakWrappedTables/>
+ <w:SnapToGridInCell/>
+ <w:WrapTextWithPunct/>
+ <w:UseAsianBreakRules/>
+ <w:DontGrowAutofit/>
+ <w:SplitPgBreakAndParaMark/>
+ <w:DontVertAlignCellWithSp/>
+ <w:DontBreakConstrainedForcedTables/>
+ <w:DontVertAlignInTxbx/>
+ <w:Word11KerningPairs/>
+ <w:CachedColBalance/>
+ </w:Compatibility>
+ <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ <m:mathPr>
+ <m:mathFont m:val="Cambria Math"/>
+ <m:brkBin m:val="before"/>
+ <m:brkBinSub m:val="&#45;-"/>
+ <m:smallFrac m:val="off"/>
+ <m:dispDef/>
+ <m:lMargin m:val="0"/>
+ <m:rMargin m:val="0"/>
+ <m:defJc m:val="centerGroup"/>
+ <m:wrapIndent m:val="1440"/>
+ <m:intLim m:val="subSup"/>
+ <m:naryLim m:val="undOvr"/>
+ </m:mathPr></w:WordDocument>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
+ DefSemiHidden="false" DefQFormat="false" LatentStyleCount="267">
+ <w:LsdException Locked="false" QFormat="true" Name="Normal"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 1"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 2"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 3"/>
+ <w:LsdException Locked="false" QFormat="true" Name="heading 4"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 5"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 6"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 7"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 8"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="heading 9"/>
+ <w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true"
+ QFormat="true" Name="caption"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Title"/>
+ <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Subtitle"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Strong"/>
+ <w:LsdException Locked="false" QFormat="true" Name="Emphasis"/>
+ <w:LsdException Locked="false" Priority="99" Name="No List"/>
+ <w:LsdException Locked="false" Priority="99" SemiHidden="true"
+ Name="Placeholder Text"/>
+ <w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="99" SemiHidden="true" Name="Revision"/>
+ <w:LsdException Locked="false" Priority="34" QFormat="true"
+ Name="List Paragraph"/>
+ <w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
+ <w:LsdException Locked="false" Priority="30" QFormat="true"
+ Name="Intense Quote"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
+ <w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
+ <w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
+ <w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
+ <w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
+ <w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
+ <w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
+ <w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
+ <w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
+ <w:LsdException Locked="false" Priority="19" QFormat="true"
+ Name="Subtle Emphasis"/>
+ <w:LsdException Locked="false" Priority="21" QFormat="true"
+ Name="Intense Emphasis"/>
+ <w:LsdException Locked="false" Priority="31" QFormat="true"
+ Name="Subtle Reference"/>
+ <w:LsdException Locked="false" Priority="32" QFormat="true"
+ Name="Intense Reference"/>
+ <w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
+ <w:LsdException Locked="false" Priority="37" SemiHidden="true"
+ UnhideWhenUsed="true" Name="Bibliography"/>
+ <w:LsdException Locked="false" Priority="39" SemiHidden="true"
+ UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
+ </w:LatentStyles>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+ {font-family:"Cambria Math";
+ panose-1:2 4 5 3 5 4 6 3 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:roman;
+ mso-font-pitch:variable;
+ mso-font-signature:-1610611985 1107304683 0 0 159 0;}
+@font-face
+ {font-family:Verdana;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:-1593833729 1073750107 16 0 415 0;}
+@font-face
+ {font-family:"MS Sans Serif";
+ panose-1:0 0 0 0 0 0 0 0 0 0;
+ mso-font-alt:"Times New Roman";
+ mso-font-charset:0;
+ mso-generic-font-family:roman;
+ mso-font-format:other;
+ mso-font-pitch:auto;
+ mso-font-signature:0 0 0 0 0 0;}
+@font-face
+ {font-family:Consolas;
+ panose-1:2 11 6 9 2 2 4 3 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:modern;
+ mso-font-pitch:fixed;
+ mso-font-signature:-1610611985 1073750091 0 0 159 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ color:black;}
+h2
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 2 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:2;
+ font-size:18.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+h3
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 3 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:3;
+ font-size:13.5pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+h4
+ {mso-style-unhide:no;
+ mso-style-qformat:yes;
+ mso-style-link:"Heading 4 Char";
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:4;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:minor-fareast;
+ color:black;
+ font-weight:bold;}
+a:link, span.MsoHyperlink
+ {mso-style-unhide:no;
+ color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+ {mso-style-unhide:no;
+ color:purple;
+ text-decoration:underline;
+ text-underline:single;}
+p
+ {mso-style-unhide:no;
+ mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman","serif";
+ mso-fareast-font-family:"Times New Roman";
+ color:black;}
+pre
+ {mso-style-unhide:no;
+ mso-style-link:"HTML Preformatted Char";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+ font-size:10.0pt;
+ font-family:"Courier New";
+ mso-fareast-font-family:"Times New Roman";
+ color:black;}
+span.Heading2Char
+ {mso-style-name:"Heading 2 Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 2";
+ mso-ansi-font-size:13.0pt;
+ mso-bidi-font-size:13.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;}
+span.Heading3Char
+ {mso-style-name:"Heading 3 Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 3";
+ mso-ansi-font-size:12.0pt;
+ mso-bidi-font-size:12.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;}
+span.Heading4Char
+ {mso-style-name:"Heading 4 Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"Heading 4";
+ mso-ansi-font-size:12.0pt;
+ mso-bidi-font-size:12.0pt;
+ font-family:"Cambria","serif";
+ mso-ascii-font-family:Cambria;
+ mso-ascii-theme-font:major-latin;
+ mso-fareast-font-family:"Times New Roman";
+ mso-fareast-theme-font:major-fareast;
+ mso-hansi-font-family:Cambria;
+ mso-hansi-theme-font:major-latin;
+ mso-bidi-font-family:"Times New Roman";
+ mso-bidi-theme-font:major-bidi;
+ color:#4F81BD;
+ mso-themecolor:accent1;
+ font-weight:bold;
+ font-style:italic;}
+span.HTMLPreformattedChar
+ {mso-style-name:"HTML Preformatted Char";
+ mso-style-unhide:no;
+ mso-style-locked:yes;
+ mso-style-link:"HTML Preformatted";
+ font-family:Consolas;
+ mso-ascii-font-family:Consolas;
+ mso-hansi-font-family:Consolas;
+ color:black;}
+span.SpellE
+ {mso-style-name:"";
+ mso-spl-e:yes;}
+span.GramE
+ {mso-style-name:"";
+ mso-gram-e:yes;}
+.MsoChpDefault
+ {mso-style-type:export-only;
+ mso-default-props:yes;
+ font-size:10.0pt;
+ mso-ansi-font-size:10.0pt;
+ mso-bidi-font-size:10.0pt;}
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+ /* List Definitions */
+ @list l0
+ {mso-list-id:435291962;
+ mso-list-template-ids:-741705326;}
+@list l0:level1
+ {mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level2
+ {mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level3
+ {mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level4
+ {mso-level-tab-stop:2.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level5
+ {mso-level-tab-stop:2.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level6
+ {mso-level-tab-stop:3.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level7
+ {mso-level-tab-stop:3.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level8
+ {mso-level-tab-stop:4.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l0:level9
+ {mso-level-tab-stop:4.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l1
+ {mso-list-id:950281396;
+ mso-list-template-ids:-189597544;}
+@list l1:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l2
+ {mso-list-id:1292129342;
+ mso-list-template-ids:97144484;}
+@list l3
+ {mso-list-id:1686593596;
+ mso-list-template-ids:1385997532;}
+@list l3:level1
+ {mso-level-number-format:bullet;
+ mso-level-text:\F0B7;
+ mso-level-tab-stop:.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;
+ mso-ansi-font-size:10.0pt;
+ font-family:Symbol;}
+@list l3:level2
+ {mso-level-tab-stop:1.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level3
+ {mso-level-tab-stop:1.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level4
+ {mso-level-tab-stop:2.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level5
+ {mso-level-tab-stop:2.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level6
+ {mso-level-tab-stop:3.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level7
+ {mso-level-tab-stop:3.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level8
+ {mso-level-tab-stop:4.0in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+@list l3:level9
+ {mso-level-tab-stop:4.5in;
+ mso-level-number-position:left;
+ text-indent:-.25in;}
+ol
+ {margin-bottom:0in;}
+ul
+ {margin-bottom:0in;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+ {mso-style-name:"Table Normal";
+ mso-tstyle-rowband-size:0;
+ mso-tstyle-colband-size:0;
+ mso-style-noshow:yes;
+ mso-style-priority:99;
+ mso-style-qformat:yes;
+ mso-style-parent:"";
+ mso-padding-alt:0in 5.4pt 0in 5.4pt;
+ mso-para-margin:0in;
+ mso-para-margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman","serif";}
+</style>
+<![endif]--><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="3074"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+ <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link=blue vlink=purple style='tab-interval:.5in'
+leftmargin=8>
+
+<div class=Section1>
+
+<h2><a name=MYSAMPLE></a><span class=SpellE><span style='mso-bookmark:MYSAMPLE'><span
+style='font-family:"Verdana","sans-serif";mso-fareast-font-family:"Times New Roman"'>Moufiltr</span></span></span><span
+style='mso-bookmark:MYSAMPLE'></span><span style='font-family:"Verdana","sans-serif";
+mso-fareast-font-family:"Times New Roman"'> <o:p></o:p></span></h2>
+
+<h3><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>SUMMARY<o:p></o:p></span></h3>
+
+<h3><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+font-weight:normal;mso-bidi-font-weight:bold'>This sample is WDF version of WDM
+filter driver sample. The WDM version of this sample has been deprecated.<o:p></o:p></span></h3>
+
+<h3><span style='font-size:10.0pt;font-family:"Verdana","sans-serif";
+font-weight:normal;mso-bidi-font-weight:bold'>This driver filters input for a
+particular mouse on the system. In its current state, it only hooks into the
+mouse packet report chain and the mouse ISR, and does not do any processing of
+the data that it sees. (The hooking of the ISR is only available in the
+i8042prt stack.) With additions to this current filter-only code base, the
+filter could conceivably add, remove, or modify input as needed. </span><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman";font-weight:normal;mso-bidi-font-weight:bold'><o:p></o:p></span></h3>
+
+<h3><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>BUILDING THE SAMPLE<o:p></o:p></span></h3>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>Click the Free Build
+Environment or Checked Build Environment icon under Development Kits program
+group to set basic environment variables. <o:p></o:p></span></p>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>Change to the directory
+containing the device source code, such as CD <span class=SpellE>src\input</span>\moufiltr.
+<o:p></o:p></span></p>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>Run <b>build -<span
+class=SpellE>ceZ</span>,</b> or use the macro <b>BLD</b>. This command invokes
+the Microsoft make routines to build the components. If the build </span>s<span
+style='font-size:10.0pt;font-family:Verdana'>ucceeds, you will find the driver,
+<span class=SpellE>moufiltr.sys,</span>
+in the binary output directory specified for the build environment. You can get the output path from the buildxxx.log file. If it fails you can find errors and warnings in the <span class=SpellE>buildxxx.err</span>
+and <span class=SpellE>buildxxx.wrn</span> respectively, where xxx is <span
+class=SpellE>either</span> <span class=SpellE>chk</span> or <span class=SpellE>fre</span>
+depending on the build environment. <o:p></o:p></span></p>
+
+<h3><span style='font-family:Verdana'>INSTALLATION<o:p></o:p></span></h3>
+
+<p><span style='font-size:10.0pt;font-family:Verdana'>
+Copy the KMDF coinstaller (wdfcoinstallerMMmmm.dll), driver binary and the moufiltr.inf file to a floppy disk or a temp folder. </span></p>
+
+<p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>This
+sample is installed via an .<span class=SpellE>inf</span> file. The .<span
+class=SpellE>inf</span> file included in this sample is designed to filter a
+PS/2 mouse. <o:p></o:p></span></p>
+
+<p><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>Use the
+following rules regarding the .<span class=SpellE>inf</span> file that installs
+the filter driver.<o:p></o:p></span></p>
+
+<ul type=disc>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l3 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>The .<span class=SpellE>inf</span> file
+ must install the class driver (<span class=SpellE>Mouclass</span>) and the
+ port driver (i8042prt, <span class=SpellE>Mouhid</span>, <span
+ class=SpellE>Sermouse</span>, etc.) by using Msmouse.inf and the INF
+ directives &quot;Needs&quot; and &quot;Include&quot;.<o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l3 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:"Verdana","sans-serif"'>The .<span class=SpellE>inf</span>
+ file must add the correct registry values for the class and port driver,
+ as well as using the new directives.<o:p></o:p></span></li>
+</ul>
+
+<p><b><span style='font-size:10.0pt;font-family:"Verdana","sans-serif"'>To
+install this filter, follow these steps:<o:p></o:p></span></b></p>
+
+<ol start=1 type=1>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:Verdana'>Open the <b>Device Manager</b>. <o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:Verdana'>Open the <b>Properties</b> of the PS/2 mouse
+ installed on the system.<o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:Verdana'>Click the <b>Driver</b> tab, and then click <b>Update
+ Driver</b>.<o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:Verdana'>Click the <b>Browse my computer for drivers software</b></span>.<o:p></o:p></span></li>
+<li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:Verdana'>Click the <b>Let me pick from a list of device drivers on my computer</b></span>.<o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:Verdana'>Click <b>Have Disk</b> and point to the location of
+ the .<span class=SpellE>inf</span> file.<o:p></o:p></span></li>
+ <li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;
+ mso-list:l0 level1 lfo3;tab-stops:list .5in'><span style='font-size:10.0pt;
+ font-family:Verdana'>Proceed through the rest of the install. You will
+ need to reboot the machine if you are filtering a PS/2 device.<o:p></o:p></span></li>
+</ol>
+
+<h3><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>CODE TOUR<o:p></o:p></span></h3>
+
+<h4><span style='font-family:"Verdana","sans-serif";mso-fareast-font-family:
+"Times New Roman"'>File Manifest<o:p></o:p></span></h4>
+
+<pre><u>File<span style='mso-tab-count:2'>���������� </span>Description<o:p></o:p></u></pre><pre><o:p>&nbsp;</o:p></pre><pre>Moufiltr.htm<span
+style='mso-tab-count:1'>�� </span>The documentation for this sample (this file).</pre>
+<pre><span class=SpellE>Moufiltr.c</span><span style='mso-tab-count:1'>���� </span>Hooks into the reporting chain, the initialization of a PS/2 mouse, and the PS/2 ISR</pre>
+<pre><span class=SpellE>Moufiltr.h</span><span style='mso-tab-count:1'>���� </span>Definitions</pre>
+<pre><span class=SpellE>Moufiltr.rc</span><span style='mso-tab-count:1'>��� </span>Resources</pre>
+<pre>Moufiltr.inx<span style='mso-tab-count:1'>�� </span>Sample .<span class=SpellE>inx</span> file </pre>
+<pre><span class=SpellE>Makefile.inc</span><span style='mso-tab-count:1'> </span>A makefile that defines custom build actions. This includes the conversion of the .INX file into a .INF file</pre>
+<pre><o:p>&nbsp;</o:p></pre>
+
+<p align=center style='text-align:center;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:10.0pt;font-family:"Courier New"'><a href="#top"><span
+style='font-family:"Verdana","sans-serif"'>Top of page</span></a></span><span
+style='font-size:10.0pt;font-family:"Verdana","sans-serif";mso-bidi-font-family:
+"Courier New"'> <o:p></o:p></span></p>
+
+<pre><o:p>&nbsp;</o:p></pre>
+
+<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=624
+ style='width:6.5in;mso-cellspacing:0in;mso-yfti-tbllook:1184;mso-padding-alt:
+ 0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes;mso-yfti-lastrow:yes;
+ height:1.5pt'>
+ <td style='background:aqua;padding:.75pt .75pt .75pt .75pt;height:1.5pt'>
+ <p class=MsoNormal><o:p>&nbsp;</o:p></p>
+ </td>
+ </tr>
+</table>
+
+<pre><o:p>&nbsp;</o:p></pre><pre><o:p>&nbsp;</o:p></pre>
+
+<p style='tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt'><span
+style='font-size:7.5pt;font-family:"MS Sans Serif","serif";mso-bidi-font-family:
+"Courier New"'>� 2004 Microsoft Corporation</span><span style='font-size:10.0pt;
+font-family:"Verdana","sans-serif";mso-bidi-font-family:"Courier New"'><o:p></o:p></span></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/input/moufiltr/moufiltr.inx b/input/moufiltr/moufiltr.inx
index 50878d68..406de846 100644
--- a/input/moufiltr/moufiltr.inx
+++ b/input/moufiltr/moufiltr.inx
Binary files differ
diff --git a/input/moufiltr/moufiltr.sln b/input/moufiltr/moufiltr.sln
index 0f1efdd9..eaf79092 100644
--- a/input/moufiltr/moufiltr.sln
+++ b/input/moufiltr/moufiltr.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0
MinimumVisualStudioVersion = 12.0
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moufiltr", "moufiltr.vcxproj", "{28C26795-633E-42B3-BAC7-F276679CDF90}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "moufiltr", "moufiltr.vcxproj", "{60D6C942-AC20-4C05-A2BE-54B5C966534D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -13,14 +13,14 @@ Global
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Debug|Win32.ActiveCfg = Debug|Win32
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Debug|Win32.Build.0 = Debug|Win32
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Release|Win32.ActiveCfg = Release|Win32
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Release|Win32.Build.0 = Release|Win32
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Debug|x64.ActiveCfg = Debug|x64
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Debug|x64.Build.0 = Debug|x64
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Release|x64.ActiveCfg = Release|x64
- {28C26795-633E-42B3-BAC7-F276679CDF90}.Release|x64.Build.0 = Release|x64
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Debug|Win32.Build.0 = Debug|Win32
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Release|Win32.ActiveCfg = Release|Win32
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Release|Win32.Build.0 = Release|Win32
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Debug|x64.ActiveCfg = Debug|x64
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Debug|x64.Build.0 = Debug|x64
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Release|x64.ActiveCfg = Release|x64
+ {60D6C942-AC20-4C05-A2BE-54B5C966534D}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/input/moufiltr/moufiltr.vcxproj b/input/moufiltr/moufiltr.vcxproj
index 9840820e..ef6b74fa 100644
--- a/input/moufiltr/moufiltr.vcxproj
+++ b/input/moufiltr/moufiltr.vcxproj
@@ -19,12 +19,12 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
- <ProjectGuid>{28C26795-633E-42B3-BAC7-F276679CDF90}</ProjectGuid>
+ <ProjectGuid>{60D6C942-AC20-4C05-A2BE-54B5C966534D}</ProjectGuid>
<RootNamespace>$(MSBuildProjectName)</RootNamespace>
<KMDF_VERSION_MAJOR>1</KMDF_VERSION_MAJOR>
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
- <SampleGuid>{FFF2D813-0AFF-43E7-9070-27C799AE8C4A}</SampleGuid>
+ <SampleGuid>{C3E0B8D8-9BDC-4A02-9E56-773CB59546DB}</SampleGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@@ -75,13 +75,7 @@
<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">
- <Inf Include=".\moufiltr.inx">
- <Architecture>$(InfArch)</Architecture>
- <SpecifyArchitecture>true</SpecifyArchitecture>
- <CopyOutput>.\$(IntDir)\moufiltr.inf</CopyOutput>
- </Inf>
- </ItemGroup>
+ <ItemGroup Label="WrappedTaskItems" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<TargetName>moufiltr</TargetName>
</PropertyGroup>
diff --git a/input/moufiltr/moufiltr.vcxproj.Filters b/input/moufiltr/moufiltr.vcxproj.Filters
index 100d3c05..cb05283c 100644
--- a/input/moufiltr/moufiltr.vcxproj.Filters
+++ b/input/moufiltr/moufiltr.vcxproj.Filters
@@ -3,27 +3,22 @@
<ItemGroup>
<Filter Include="Source Files">
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;*</Extensions>
- <UniqueIdentifier>{73708C87-AE82-4681-9C01-042DF504D5E3}</UniqueIdentifier>
+ <UniqueIdentifier>{6ADEEDAE-2AB9-4FBD-993D-C0F470817801}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
- <UniqueIdentifier>{3531B16D-3C4F-4E1C-ABD4-50E16BFD7670}</UniqueIdentifier>
+ <UniqueIdentifier>{B2C965ED-BF4B-4F1D-921B-74C2B133F5BA}</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>{3FD872CD-6DDF-47C5-ADEC-958E7540E672}</UniqueIdentifier>
+ <UniqueIdentifier>{09B8C7CE-5745-42A0-B9A6-997D2EA229B7}</UniqueIdentifier>
</Filter>
<Filter Include="Driver Files">
<Extensions>inf;inv;inx;mof;mc;</Extensions>
- <UniqueIdentifier>{E86BBEC3-C79D-42D9-98BA-B087184AAB24}</UniqueIdentifier>
+ <UniqueIdentifier>{806B75A0-6BB8-4F2E-9280-9B89E9CD3515}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
- <Inf Include=".\moufiltr.inx">
- <Filter>Driver Files</Filter>
- </Inf>
- </ItemGroup>
- <ItemGroup>
<ClCompile Include="moufiltr.c">
<Filter>Source Files</Filter>
</ClCompile>