The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
--- iz-ru-la.C.orig	2013-06-30 11:58:28.079116700 -0700
+++ iz-ru-la.C	2013-06-30 12:09:01.975373500 -0700
@@ -97,6 +97,7 @@ static ALLOC_SECTION_LDATA VSC_VK aE0Vsc
         { 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
@@ -141,10 +142,15 @@ static ALLOC_SECTION_LDATA VSC_VK aE1Vsc
 *     CTRL  (L & R) is used to generate control characters
 *     ALT   (L & R) used for generating characters by number with numpad
 \***************************************************************************/
+#define KBD_Z	0x40
+#define KBD_T	0x80
 static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
     { VK_SHIFT    ,   KBDSHIFT     },
-    { VK_CONTROL  ,   KBDCTRL      },
-    { VK_MENU     ,   KBDALT       },
+    { VK_LCONTROL ,   KBDCTRL + KBDLOYA      },
+    { VK_RCONTROL ,   KBDCTRL + KBDALT + KBDROYA      },
+    { VK_LMENU    ,   KBDALT + KBDKANA       },
+    { VK_RMENU    ,   KBDALT + KBDCTRL + KBDLOYA + KBD_Z       },
+    { VK_OEM_AX   ,   KBDALT + KBDCTRL + KBD_T      },
     { 0           ,   0           }
 };
 
@@ -169,8 +175,8 @@ static ALLOC_SECTION_LDATA MODIFIERS Cha
 	SHFT_INVALID, // Shift		Alt
 	SHFT_INVALID, // 	Ctrl	Alt
 	SHFT_INVALID, // Shift	Ctrl	Alt
-	SHFT_INVALID, // 			Kana
-	SHFT_INVALID, // Shift			Kana
+	0,            // 			Kana
+	1,            // Shift			Kana
 	SHFT_INVALID, // 	Ctrl		Kana
 	SHFT_INVALID, // Shift	Ctrl		Kana
 	SHFT_INVALID, // 		Alt	Kana
@@ -187,8 +189,8 @@ static ALLOC_SECTION_LDATA MODIFIERS Cha
 	SHFT_INVALID, // Shift	Ctrl			Roya
 	SHFT_INVALID, // 		Alt		Roya
 	SHFT_INVALID, // Shift		Alt		Roya
-	SHFT_INVALID, // 	Ctrl	Alt		Roya
-	SHFT_INVALID, // Shift	Ctrl	Alt		Roya
+	2,            // 	Ctrl	Alt		Roya
+	3,            // Shift	Ctrl	Alt		Roya
 	SHFT_INVALID, // 			Kana	Roya
 	SHFT_INVALID, // Shift			Kana	Roya
 	SHFT_INVALID, // 	Ctrl		Kana	Roya
@@ -199,8 +201,8 @@ static ALLOC_SECTION_LDATA MODIFIERS Cha
 	16,           // Shift	Ctrl	Alt	Kana	Roya
 	SHFT_INVALID, // 					Loya
 	SHFT_INVALID, // Shift					Loya
-	SHFT_INVALID, // 	Ctrl				Loya
-	SHFT_INVALID, // Shift	Ctrl				Loya
+	2,            // 	Ctrl				Loya
+	3,            // Shift	Ctrl				Loya
 	SHFT_INVALID, // 		Alt			Loya
 	SHFT_INVALID, // Shift		Alt			Loya
 	SHFT_INVALID, // 	Ctrl	Alt			Loya
@@ -523,16 +529,20 @@ static ALLOC_SECTION_LDATA VK_TO_WCHARS3
   {0            ,0      ,0        ,0        ,0        }
 };
 
-static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
+static ALLOC_SECTION_LDATA VK_TO_WCHARS10 aVkToWch10[] = {
 //                      |         |  Shift  |  Ctrl   |S+Ctrl   |  C+  X1 |  C+  X1 |
 //                      |=========|=========|=========|=========|=========|=========|
-  {VK_SPACE     ,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD },
-  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   },
-  {VK_ABNT_C2   ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   },
-  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE },
-  {VK_OEM_8     ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   },
-  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE },
-  {0            ,0      ,0        ,0        ,0        ,0        ,0        ,0        }
+  {VK_SPACE     ,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_DEAD ,WCH_NONE },
+  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   ,0x06f0   ,WCH_NONE ,0x06f0   ,WCH_NONE },
+  {VK_CONVERT   ,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,WCH_NONE },
+  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   ,0x06f0   ,WCH_NONE ,0x06f0   ,WCH_NONE },
+  {VK_NONCONVERT,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,WCH_NONE },
+  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   ,0x06f0   ,WCH_NONE ,0x06f0   ,WCH_NONE },
+  {VK_ABNT_C2   ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {VK_OEM_8     ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {0            ,0      ,0        ,0        ,0        ,0        ,0        ,0        ,0		 ,0 }
 };
 
 static ALLOC_SECTION_LDATA VK_TO_WCHARS45 aVkToWch45[] = {
@@ -656,6 +666,9 @@ static ALLOC_SECTION_LDATA VK_TO_WCHARS2
 };
 
 static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+    {  (PVK_TO_WCHARS1)aVkToWch3, 3, sizeof(aVkToWch3[0]) },
+    {  (PVK_TO_WCHARS1)aVkToWch10, 10, sizeof(aVkToWch10[0]) },
+    {  (PVK_TO_WCHARS1)aVkToWch45, 45, sizeof(aVkToWch45[0]) },
     {  (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
     {  (PVK_TO_WCHARS1)aVkToWch25, 25, sizeof(aVkToWch25[0]) },
     {                       NULL, 0, 0                    },
--- iz-ru-la.H.orig	2013-03-09 16:06:20.394533900 -0800
+++ iz-ru-la.H	2013-03-09 16:48:18.378554400 -0800
@@ -37,3 +37,13 @@
 #undef  T7D
  #define T7D _EQ(                                      OEM_8                      )
 
+#undef X5D			/* Was: APPS; move to non-special "kinda-KANA" */
+#define X5D _EQ(                                    OEM_AX                      )
+
+#undef T70			/* KANA */
+#define T70 _EQ(                                    APPS                      )
+
+#undef  T7B
+#define T7B _EQ(                                    NONCONVERT                      )
+#undef  T79
+#define T79 _EQ(                                    CONVERT                      )
--- iz-la-ru.C.orig	2013-06-30 11:58:27.984111300 -0700
+++ iz-la-ru.C	2013-06-30 12:05:57.478820900 -0700
@@ -97,6 +97,7 @@ static ALLOC_SECTION_LDATA VSC_VK aE0Vsc
         { 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
@@ -141,10 +142,15 @@ static ALLOC_SECTION_LDATA VSC_VK aE1Vsc
 *     CTRL  (L & R) is used to generate control characters
 *     ALT   (L & R) used for generating characters by number with numpad
 \***************************************************************************/
+#define KBD_Z	0x40
+#define KBD_T	0x80
 static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
     { VK_SHIFT    ,   KBDSHIFT     },
-    { VK_CONTROL  ,   KBDCTRL      },
-    { VK_MENU     ,   KBDALT       },
+    { VK_LCONTROL ,   KBDCTRL + KBDLOYA      },
+    { VK_RCONTROL ,   KBDCTRL + KBDALT + KBDROYA      },
+    { VK_LMENU    ,   KBDALT + KBDKANA       },
+    { VK_RMENU    ,   KBDALT + KBDCTRL + KBDLOYA + KBD_Z       },
+    { VK_OEM_AX   ,   KBDALT + KBDCTRL + KBD_T      },
     { 0           ,   0           }
 };
 
@@ -169,8 +175,8 @@ static ALLOC_SECTION_LDATA MODIFIERS Cha
 	SHFT_INVALID, // Shift		Alt
 	SHFT_INVALID, // 	Ctrl	Alt
 	SHFT_INVALID, // Shift	Ctrl	Alt
-	SHFT_INVALID, // 			Kana
-	SHFT_INVALID, // Shift			Kana
+	0,            // 			Kana
+	1,            // Shift			Kana
 	SHFT_INVALID, // 	Ctrl		Kana
 	SHFT_INVALID, // Shift	Ctrl		Kana
 	SHFT_INVALID, // 		Alt	Kana
@@ -187,8 +189,8 @@ static ALLOC_SECTION_LDATA MODIFIERS Cha
 	SHFT_INVALID, // Shift	Ctrl			Roya
 	SHFT_INVALID, // 		Alt		Roya
 	SHFT_INVALID, // Shift		Alt		Roya
-	SHFT_INVALID, // 	Ctrl	Alt		Roya
-	SHFT_INVALID, // Shift	Ctrl	Alt		Roya
+	2,            // 	Ctrl	Alt		Roya
+	3,            // Shift	Ctrl	Alt		Roya
 	SHFT_INVALID, // 			Kana	Roya
 	SHFT_INVALID, // Shift			Kana	Roya
 	SHFT_INVALID, // 	Ctrl		Kana	Roya
@@ -199,8 +201,8 @@ static ALLOC_SECTION_LDATA MODIFIERS Cha
 	16,           // Shift	Ctrl	Alt	Kana	Roya
 	SHFT_INVALID, // 					Loya
 	SHFT_INVALID, // Shift					Loya
-	SHFT_INVALID, // 	Ctrl				Loya
-	SHFT_INVALID, // Shift	Ctrl				Loya
+	2,            // 	Ctrl				Loya
+	3,            // Shift	Ctrl				Loya
 	SHFT_INVALID, // 		Alt			Loya
 	SHFT_INVALID, // Shift		Alt			Loya
 	SHFT_INVALID, // 	Ctrl	Alt			Loya
@@ -523,16 +529,20 @@ static ALLOC_SECTION_LDATA VK_TO_WCHARS3
   {0            ,0      ,0        ,0        ,0        }
 };
 
-static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
+static ALLOC_SECTION_LDATA VK_TO_WCHARS10 aVkToWch10[] = {
 //                      |         |  Shift  |  Ctrl   |S+Ctrl   |  C+  X1 |  C+  X1 |
 //                      |=========|=========|=========|=========|=========|=========|
-  {VK_SPACE     ,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD },
-  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   },
-  {VK_ABNT_C2   ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   },
-  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE },
-  {VK_OEM_8     ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   },
-  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE },
-  {0            ,0      ,0        ,0        ,0        ,0        ,0        ,0        }
+  {VK_SPACE     ,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_DEAD ,WCH_NONE },
+  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   ,0x06f0   ,WCH_NONE ,0x06f0   ,WCH_NONE },
+  {VK_CONVERT   ,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,WCH_NONE },
+  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   ,0x06f0   ,WCH_NONE ,0x06f0   ,WCH_NONE },
+  {VK_NONCONVERT,0      ,' '      ,WCH_DEAD ,' '      ,WCH_NONE ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,WCH_NONE },
+  {0xff         ,0      ,WCH_NONE ,0x0138   ,WCH_NONE ,WCH_NONE ,0x0192   ,0x00a0   ,0x06f0   ,WCH_NONE ,0x06f0   ,WCH_NONE },
+  {VK_ABNT_C2   ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {VK_OEM_8     ,0      ,WCH_DEAD ,WCH_DEAD ,WCH_NONE ,WCH_NONE ,WCH_DEAD ,0x0301   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {0xff         ,0      ,0x06f0   ,0x00a0   ,WCH_NONE ,WCH_NONE ,0x00a3   ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE ,WCH_NONE },
+  {0            ,0      ,0        ,0        ,0        ,0        ,0        ,0        ,0		 ,0 }
 };
 
 static ALLOC_SECTION_LDATA VK_TO_WCHARS45 aVkToWch45[] = {
@@ -656,6 +666,9 @@ static ALLOC_SECTION_LDATA VK_TO_WCHARS2
 };
 
 static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
+    {  (PVK_TO_WCHARS1)aVkToWch3, 3, sizeof(aVkToWch3[0]) },
+    {  (PVK_TO_WCHARS1)aVkToWch10, 10, sizeof(aVkToWch10[0]) },
+    {  (PVK_TO_WCHARS1)aVkToWch45, 45, sizeof(aVkToWch45[0]) },
     {  (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
     {  (PVK_TO_WCHARS1)aVkToWch25, 25, sizeof(aVkToWch25[0]) },
     {                       NULL, 0, 0                    },
--- iz-la-ru.H.orig	2013-03-09 16:06:20.205523100 -0800
+++ iz-la-ru.H	2013-03-09 16:48:24.179886200 -0800
@@ -37,3 +37,13 @@
 #undef  T7D
  #define T7D _EQ(                                      OEM_8                      )
 
+#undef X5D			/* Was: APPS; move to non-special "kinda-KANA" */
+#define X5D _EQ(                                    OEM_AX                      )
+
+#undef T70			/* KANA */
+#define T70 _EQ(                                    APPS                      )
+
+#undef  T7B
+#define T7B _EQ(                                    NONCONVERT                      )
+#undef  T79
+#define T79 _EQ(                                    CONVERT                      )