source: windows/kbdneo2/Quelldateien/kbdneo2.c @ 836

Letzte Änderung dieser Datei seit 836 war 836, erstellt von florian vor 11 Jahren

Aktualisierung des Hauptfeldes,
Numpad noch nicht aktuell

Dateigröße: 41.2 KB
Zeile 
1/***************************************************************************\
2* Module Name: KBDNEO2.C
3*
4* keyboard layout for German NEO 2.0
5*
6* History:
7\***************************************************************************/
8
9#include <windows.h>
10#include "kbd.h"
11#include "kbdneo2.h"
12
13#if defined(_M_IA64)
14#pragma section(".data")
15#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
16#else
17#pragma data_seg(".data")
18#define ALLOC_SECTION_LDATA
19#endif
20
21/***************************************************************************\
22* ausVK[] - Virtual Scan Code to Virtual Key conversion table for German
23\***************************************************************************/
24
25static ALLOC_SECTION_LDATA USHORT ausVK[] = {
26    T00, T01, T02, T03, T04, T05, T06, T07,
27    T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
28    T10, T11, T12, T13, T14, T15, T16, T17,
29    T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
30    T20, T21, T22, T23, T24, T25, T26, T27,
31    T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
32    T30, T31, T32, T33, T34, T35,
33
34    /*
35     * Right-hand Shift key must have KBDEXT bit set.
36     */
37    T36 | KBDEXT,
38
39    T37 | KBDMULTIVK,               // numpad_* + Shift/Alt -> SnapShot
40
41    T38, T39, T3A, T3B, T3C, T3D, T3E,
42    T3F, T40, T41, T42, T43, T44,
43
44    /*
45     * NumLock Key:
46     *     KBDEXT     - VK_NUMLOCK is an Extended key
47     *     KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
48     */
49    T45 | KBDEXT | KBDMULTIVK,
50
51    T46 | KBDMULTIVK,
52
53    /*
54     * Number Pad keys:
55     *     KBDNUMPAD  - digits 0-9 and decimal point.
56     *     KBDSPECIAL - require special processing by Windows
57     */
58    T47 | KBDNUMPAD | KBDSPECIAL,   // Numpad 7 (Home)
59    T48 | KBDNUMPAD | KBDSPECIAL,   // Numpad 8 (Up),
60    T49 | KBDNUMPAD | KBDSPECIAL,   // Numpad 9 (PgUp),
61    T4A,
62    T4B | KBDNUMPAD | KBDSPECIAL,   // Numpad 4 (Left),
63    T4C | KBDNUMPAD | KBDSPECIAL,   // Numpad 5 (Clear),
64    T4D | KBDNUMPAD | KBDSPECIAL,   // Numpad 6 (Right),
65    T4E,
66    T4F | KBDNUMPAD | KBDSPECIAL,   // Numpad 1 (End),
67    T50 | KBDNUMPAD | KBDSPECIAL,   // Numpad 2 (Down),
68    T51 | KBDNUMPAD | KBDSPECIAL,   // Numpad 3 (PgDn),
69    T52 | KBDNUMPAD | KBDSPECIAL,   // Numpad 0 (Ins),
70    T53 | KBDNUMPAD | KBDSPECIAL,   // Numpad . (Del),
71
72    T54, T55, T56, T57, T58, T59, T5A, T5B,
73    T5C, T5D, T5E, T5F, T60, T61, T62, T63,
74    T64, T65, T66, T67, T68, T69, T6A, T6B,
75    T6C, T6D, T6E, T6F, T70, T71, T72, T73,
76    T74, T75, T76, T77, T78, T79, T7A, T7B,
77    T7C, T7D, T7E
78
79};
80
81static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
82        { 0x10, X10 | KBDEXT              },  // Speedracer: Previous Track
83        { 0x19, X19 | KBDEXT              },  // Speedracer: Next Track
84        { 0x1D, X1D | KBDEXT              },  // RControl
85        { 0x20, X20 | KBDEXT              },  // Speedracer: Volume Mute
86        { 0x21, X21 | KBDEXT              },  // Speedracer: Launch App 2
87        { 0x22, X22 | KBDEXT              },  // Speedracer: Media Play/Pause
88        { 0x24, X24 | KBDEXT              },  // Speedracer: Media Stop
89        { 0x2E, X2E | KBDEXT              },  // Speedracer: Volume Down
90        { 0x30, X30 | KBDEXT              },  // Speedracer: Volume Up
91        { 0x32, X32 | KBDEXT              },  // Speedracer: Browser Home
92        { 0x35, X35 | KBDEXT              },  // Numpad Divide
93        { 0x37, X37 | KBDEXT              },  // Snapshot
94        { 0x38, X38 | KBDEXT              },  // RMenu
95        { 0x47, X47 | KBDEXT              },  // Home
96        { 0x48, X48 | KBDEXT              },  // Up
97        { 0x49, X49 | KBDEXT              },  // Prior
98        { 0x4B, X4B | KBDEXT              },  // Left
99        { 0x4D, X4D | KBDEXT              },  // Right
100        { 0x4F, X4F | KBDEXT              },  // End
101        { 0x50, X50 | KBDEXT              },  // Down
102        { 0x51, X51 | KBDEXT              },  // Next
103        { 0x52, X52 | KBDEXT              },  // Insert
104        { 0x53, X53 | KBDEXT              },  // Delete
105        { 0x5B, X5B | KBDEXT              },  // Left Win
106        { 0x5C, X5C | KBDEXT              },  // Right Win
107        { 0x5D, X5D | KBDEXT              },  // Application
108        { 0x5F, X5F | KBDEXT              },  // Speedracer: Sleep
109        { 0x65, X65 | KBDEXT              },  // Speedracer: Browser Search
110        { 0x66, X66 | KBDEXT              },  // Speedracer: Browser Favorites
111        { 0x67, X67 | KBDEXT              },  // Speedracer: Browser Refresh
112        { 0x68, X68 | KBDEXT              },  // Speedracer: Browser Stop
113        { 0x69, X69 | KBDEXT              },  // Speedracer: Browser Forward
114        { 0x6A, X6A | KBDEXT              },  // Speedracer: Browser Back
115        { 0x6B, X6B | KBDEXT              },  // Speedracer: Launch App 1
116        { 0x6C, X6C | KBDEXT              },  // Speedracer: Launch Mail
117        { 0x6D, X6D | KBDEXT              },  // Speedracer: Launch Media Selector
118        { 0x1C, X1C | KBDEXT              },  // Numpad Enter
119        { 0x46, X46 | KBDEXT              },  // Break (Ctrl + Pause)
120        { 0,      0                       }
121};
122
123static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
124        { 0x1D, Y1D                       },  // Pause
125        { 0   ,   0                       }
126};
127
128/***************************************************************************\
129* aVkToBits[]  - map Virtual Keys to Modifier Bits
130*
131* See kbd.h for a full description.
132\***************************************************************************/
133// Es wird nicht zwischen linken und/oder rechtem Modifier unterschieden
134static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
135    { VK_SHIFT          ,   KBDSHIFT    },
136    { VK_CONTROL        ,   KBDCTRL             },     
137        { VK_MENU               ,   KBDALT              },
138        { VK_KANA               ,   KBDKANA             }, //Mod 3
139        { VK_OEM_102    ,   16                  }, //Mod 4
140        { 0                             ,   0                   }
141};
142
143/***************************************************************************\
144* aModification[]  - map character modifier bits to modification number
145*
146* See kbd.h for a full description.
147*
148\***************************************************************************/
149
150static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
151    &aVkToBits[0],
152    25, //Anzahl der verwendeten Ebenen (inklusive der INVALIDen!)
153    {
154        //  Modifier NEO
155        //  Ebene 0 - nix
156        //  Ebene 1 - Shift
157        //  Ebene 2 - Kana = Mod 3
158        //  Ebene 3 - Neu = Mod 4
159        //  Ebene 4 - Kana+Shift
160        //  Ebene 5 - Neu+Kana
161        // 
162        //  Modification# //  Keys Pressed
163    //  ============= // ===========    Neu     Kana    Alt     Strg    Shift
164                0,                              //      0       0       0       0       0
165                1,                              //      0       0       0       0       1
166                6,                              //      0       0       0       1       0
167                7,                              //      0       0       0       1       1
168                SHFT_INVALID,   //      0       0       1       0       0
169                SHFT_INVALID,   //      0       0       1       0       1
170                SHFT_INVALID,   //      0       0       1       1       0
171                SHFT_INVALID,   //      0       0       1       1       1
172                2,                              //      0       1       0       0       0
173                4,                              //      0       1       0       0       1
174                SHFT_INVALID,   //      0       1       0       1       0
175                SHFT_INVALID,   //      0       1       0       1       1
176                SHFT_INVALID,   //      0       1       1       0       0
177                SHFT_INVALID,   //      0       1       1       0       1
178                SHFT_INVALID,   //      0       1       1       1       0
179                SHFT_INVALID,   //      0       1       1       1       1
180                3,                              //      1       0       0       0       0
181                8,                              //      1       0       0       0       1 
182                SHFT_INVALID,   //      1       0       0       1       0
183                SHFT_INVALID,   //      1       0       0       1       1
184                SHFT_INVALID,   //      1       0       1       0       0
185                SHFT_INVALID,   //      1       0       1       0       1
186                SHFT_INVALID,   //      1       0       1       1       0
187                SHFT_INVALID,   //      1       0       1       1       1
188                5,                              //      1       1       0       0       0
189        }
190};                     
191
192
193/***************************************************************************\
194*
195* aVkToWch2[]  - Virtual Key to WCHAR translation for 2 shift states
196* aVkToWch3[]  - Virtual Key to WCHAR translation for 3 shift states
197* aVkToWch4[]  - Virtual Key to WCHAR translation for 4 shift states
198* aVkToWch5[]  - Virtual Key to WCHAR translation for 5 shift states
199* aVkToWch6[]  - Virtual Key to WCHAR translation for 6 shift states
200* aVkToWch7[]  - Virtual Key to WCHAR translation for 7 shift states
201* aVkToWch8[]  - Virtual Key to WCHAR translation for 8 shift states
202* aVkToWch9[]  - Virtual Key to WCHAR translation for 9 shift states
203*
204* Table attributes: Unordered Scan, null-terminated
205*
206* Search this table for an entry with a matching Virtual Key to find the
207* corresponding unshifted and shifted WCHAR characters.
208*
209* Special values for VirtualKey (column 1)
210*     0xff          - dead chars for the previous entry
211*     0             - terminate the list
212*
213* Special values for Attributes (column 2)
214*     CAPLOK bit    - CAPS-LOCK affect this key like SHIFT
215*
216* Special values for wch[*] (column 3 & 4)
217*     WCH_NONE      - No character
218*     WCH_DEAD      - Dead Key (diaresis) or invalid (US keyboard has none)
219*     WCH_LGTR      - Ligature (generates multiple characters)
220*
221\***************************************************************************/
222
223//      Reihenfolge der Ebene wie oben ( ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {    &aVkToBits[0],)… festgelegt
224
225static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
226//                                                      |                       |   SHIFT                 |   KANA                  |  NEU              |  KANA+Shift      |   NEU+Kana  |
227//                                                      |                       |===============|================|===============|===============|================|
228{VK_OEM_1               ,0                      ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       },//Tote Taste 1
229{0xff                   ,0                      ,'^'            ,0x02c7         ,0x02d8         ,0x00b7         ,'-'            ,'.'            },
230{'1'                    ,0                      ,'1'            ,0x00b0         ,0x00B9         ,0x2022         ,0x2081         ,0x00ac         },
231{'3'                    ,0                      ,'3'            ,0x00a7         ,0x00b3         ,WCH_NONE       ,0x2083         ,0x2227         },
232{'4'                    ,0                      ,'4'            ,0x00bb         ,0x203A         ,WCH_NONE       ,0x2113         ,0x22a5         }, //WCH_NONE sollte »Bild auf« sein (AHK?)
233{'5'                    ,0                      ,'5'            ,0x00ab         ,0x2039         ,WCH_NONE       ,0x2640         ,0x2221         },
234{'7'                    ,0                      ,'7'            ,0x0024         ,0x00a5         ,0x00a4         ,0x03f0         ,0x2209         },
235{'8'                    ,0                      ,'8'            ,0x201E         ,0x201A         ,0x002F         ,0x27E8         ,0x2204         },
236{'9'                    ,0                      ,'9'            ,0x201C         ,0x2018         ,0x002A         ,0x27E9         ,0x2226         },
237{'0'                    ,0                      ,'0'            ,0x201D         ,0x2019         ,0x002D         ,0x2080         ,0x2205         },
238{VK_OEM_MINUS   ,0                      ,'-'            ,0x2013         ,0x2014         ,WCH_DEAD       ,0x0011         ,0x00ad         },
239{VK_OEM_2               ,0                      ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       },//Tote Taste 2
240{0xff                   ,0                      ,0x00B4         ,0x0060         ,0x00b8         ,0x02d9         ,0x02DB         ,0x02DA         },
241{VK_TAB                 ,0                      ,'\t'           ,'\t'           ,WCH_DEAD       ,'\t'           ,'\t'           ,'\t'           },
242{0xff                   ,0                      ,WCH_NONE       ,WCH_NONE       ,0x266b         ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       },
243{'X'                    ,CAPLOK         ,'x'            ,'X'            ,0x2026         ,0x22ee         ,0x03BE         ,0x039E         },
244{'V'                    ,CAPLOK         ,'v'            ,'V'            ,'_'            ,'\b'           ,WCH_NONE       ,0x2259         },
245{'L'                    ,CAPLOK         ,'l'            ,'L'            ,'['            ,WCH_NONE       ,0x03BB         ,0x039b         }, //WCH_NONE sollte »Pfeil hoch« sein (AHK?)
246{'C'                    ,CAPLOK         ,'c'            ,'C'            ,']'            ,0x007f         ,0x03C7         ,0x2102         }, //0x007f sollte »Entfernen« sein (AHK?)
247{'W'                    ,CAPLOK         ,'w'            ,'W'            ,0x005E         ,WCH_NONE       ,0x03c9         ,0x03a9         }, //WCH_NONE sollte »Einfügen« sein (AHK?)
248{'K'                    ,CAPLOK         ,'k'            ,'K'            ,'!'            ,0x00A1         ,0x03BA         ,0x221a         },
249{'H'                    ,CAPLOK         ,'h'            ,'H'            ,'<'            ,'7'            ,0x03C8         ,0x03A8         },
250{'G'                    ,CAPLOK         ,'g'            ,'G'            ,'>'            ,'8'            ,0x03B3         ,0x0393         },
251{'F'                    ,CAPLOK         ,'f'            ,'F'            ,'='            ,'9'            ,0x03C6         ,0x03A6         },
252{'Q'                    ,CAPLOK         ,'q'            ,'Q'            ,'&'            ,'+'            ,0x03d5         ,0x211a         },
253{'U'                    ,CAPLOK         ,'u'            ,'U'            ,'\\'           ,WCH_NONE       ,WCH_NONE       ,0x222e         }, //1. WCH_NONE sollte »Pos 1« sein (AHK?)
254{'I'                    ,CAPLOK         ,'i'            ,'I'            ,'/'            ,WCH_NONE       ,0x03B9         ,0x222b         }, //WCH_NONE sollte »Pfeil links« sein (AHK?)
255{'A'                    ,CAPLOK         ,'a'            ,'A'            ,'{'            ,WCH_NONE       ,0x03B1         ,0x2200         }, //WCH_NONE sollte »Pfeil runter« sein (AHK?)
256{'E'                    ,CAPLOK         ,'e'            ,'E'            ,'}'            ,WCH_NONE       ,0x03B5         ,0x2203         }, //WCH_NONE sollte »Pfeil rechts« sein (AHK?)
257{'O'                    ,CAPLOK         ,'o'            ,'O'            ,'*'            ,WCH_NONE       ,0x03bf         ,0x2208         }, //WCH_NONE sollte »Ende« sein (AHK?)
258{'S'                    ,CAPLOK         ,'s'            ,'S'            ,'?'            ,0x00BF         ,0x03C3         ,0x03A3         },
259{'N'                    ,CAPLOK         ,'n'            ,'N'            ,'('            ,'4'            ,0x03BD         ,0x2115         },
260{'R'                    ,CAPLOK         ,'r'            ,'R'            ,')'            ,'5'            ,0x03f1         ,0x211d         },
261{'T'                    ,CAPLOK         ,'t'            ,'T'            ,'-'            ,'6'            ,0x03C4         ,0x2202         },
262{'D'                    ,CAPLOK         ,'d'            ,'D'            ,':'            ,','            ,0x03B4         ,0x0394         },
263{VK_OEM_5               ,CAPLOK         ,0x00FC         ,0x00DC         ,'#'            ,0x001b         ,WCH_NONE       ,0x221d         },
264
265{VK_OEM_7               ,CAPLOK         ,0x00E4         ,0x00C4         ,'|'            ,WCH_NONE       ,0x03B7         ,0x211c         }, //WCH_NONE sollte »Bild runter« sein (AHK?)
266{'P'                    ,CAPLOK         ,'p'            ,'P'            ,'~'            ,'\r'           ,0x03C0         ,0x03A0         },
267{'Z'                    ,CAPLOK         ,'z'            ,'Z'            ,'`'            ,WCH_NONE       ,0x03B6         ,0x2124         },
268{'B'                    ,CAPLOK         ,'b'            ,'B'            ,'+'            ,':'            ,0x03B2         ,0x21d0         },
269{'M'                    ,CAPLOK         ,'m'            ,'M'            ,'%'            ,'1'            ,0x00b5         ,0x21d4         },
270{VK_OEM_COMMA   ,0                      ,','            ,0x22ee         ,'\"'           ,'2'            ,0x03c1         ,0x21d2         },
271{VK_OEM_PERIOD  ,0                      ,'.'            ,0x2026         ,'\''           ,'3'            ,0x03d1         ,0x0398         },
272{0                              ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      }
273};                                                                 
274
275static ALLOC_SECTION_LDATA VK_TO_WCHARS7 aVkToWch7[] = {
276//                                                      |                       |   SHIFT                 |   KANA                  |  NEU              |  KANA+Shift      |   NEU+Kana  |  Control             |
277//                                                      |                       |===============|================|===============|===============|================|===============|
278{VK_OEM_3               ,CAPLOK         ,0x00df         ,0x1E9E         ,0x017F         ,WCH_NONE       ,0x03C2         ,0x2218         ,0x2218         },
279{VK_OEM_4               ,0                      ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,0x001d         },//Tote Taste 3
280{0xff                   ,0                      ,0x007E         ,0x00AF         ,0x00A8         ,0x002F         ,0x02DD         ,','            ,WCH_NONE       },
281{'Y'                    ,CAPLOK         ,'y'            ,'Y'            ,'@'            ,'.'            ,0x03C5         ,0x2207         ,0x001c         },
282{VK_OEM_6               ,CAPLOK         ,0x00F6         ,0x00D6         ,'$'            ,'\t'           ,WCH_NONE       ,0x2111         ,WCH_NONE       },
283{VK_SPACE               ,0              ,' '            ,' '            ,' '            ,'0'            ,0x00a0         ,0x2009         ,' '            },
284{VK_BACK                ,0                      ,'\b'           ,'\b'           ,'\b'           ,'\b'           ,'\b'           ,'\b'           ,0x007f         },
285{VK_ESCAPE              ,0                      ,0x001b         ,0x001b         ,0x001b         ,0x001b         ,0x001b         ,0x001b         ,0x001b         },
286{VK_RETURN              ,0                      ,'\r'           ,'\r'           ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,'\n'           },
287{VK_CANCEL              ,0                      ,0x0003         ,0x0003         ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,0x0003         },
288{0                              ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      }
289};                                                                 
290
291static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = {
292//                                                      |                       |   SHIFT                 |   KANA                  |  NEU              |  KANA+Shift      |   NEU+Kana  |  Control             |  Control+Shift        |
293//                                                      |                       |===============|================|===============|===============|================|===============|===============|
294{'2'                    ,0                      ,'2'            ,0x2116         ,0x00b2         ,0x2023         ,0x2082         ,0x2228         ,WCH_NONE       ,0x0000         },
295{'6'                    ,0                      ,'6'            ,0x20ac         ,0x00A2         ,0x00a3         ,0x2642         ,0x2225         ,WCH_NONE       ,0x001e         },
296{'J'                    ,CAPLOK         ,'j'            ,'J'            ,';'            ,';'            ,0x03b8         ,0x2261         ,WCH_NONE       ,0x001f         },
297{0                              ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      }
298};                                                                 
299
300// Put this last so that VkKeyScan interprets number characters
301// as coming from the main section of the kbd  before considering
302// the numpad.
303
304/*
305Entgegen der neo20.txt vorgesehene Belegung 1,2,3,5 ist hier 1,2,3,4 umgesetzt:
306
307== Vier Ebenen – Ziffernblock ==
308 +-----+
309¦ 1  4 ¦ 
310¦ 2  3 ¦
311 +-----+
3121. Ebene (kein Mod)     (Ziffern)
3132. Ebene (Umschalt)     (Steuertasten)
3143. Ebene (Mod3)         (Pfeile u.ä.)
3154. Ebene (Mod4)         (anderes Zeug)
316*/
317
318
319static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
320//                                                      |                       |   SHIFT               |   KANA                |      NEU              |
321//                                                      |                       |===============|================|===============|
322{VK_ADD                 ,0                      ,'+'            ,'+'            ,0x00b1         ,0x2213         },
323{VK_DIVIDE              ,0                      ,'/'            ,'/'            ,0x00f7         ,0x2215         },
324{VK_MULTIPLY    ,0                      ,'*'            ,'*'            ,0x00d7         ,0x2219         },
325{VK_SUBTRACT    ,0                      ,'-'            ,'-'            ,0x2052         ,WCH_NONE       },
326{VK_DECIMAL             ,0                      ,','            ,','            ,'.'            ,','            },
327{VK_NUMPAD0             ,0              ,'0'            ,'0'            ,0x0025         ,0x2030         },
328{VK_NUMPAD1             ,0              ,'1'            ,'1'            ,0x2194         ,0x2264         },
329{VK_NUMPAD2             ,0              ,'2'            ,'2'            ,0x2193         ,0x222a         },
330{VK_NUMPAD3             ,0              ,'3'            ,'3'            ,0x21cc         ,0x2265         },
331{VK_NUMPAD4             ,0              ,'4'            ,'4'            ,0x2190         ,0x2282         },
332{VK_NUMPAD5             ,0              ,'5'            ,'5'            ,0x221e         ,0x220B         },
333{VK_NUMPAD6             ,0              ,'6'            ,'6'            ,0x2192         ,0x2283         },
334{VK_NUMPAD7             ,0              ,'7'            ,'7'            ,0x2195         ,0x226a         },
335{VK_NUMPAD8             ,0              ,'8'            ,'8'            ,0x2191         ,0x2229         },
336{VK_NUMPAD9             ,0              ,'9'            ,'9'            ,0x2297         ,0x226b         },
337{0                              ,0                      ,0                      ,0                      ,0                      ,0                      }
338};                                                     
339
340// Hier müssen die verwendeten WChar_Tables vorkommen; Numpad MUSS letzte Zeile sein.
341static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
342    {  (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) },
343    {  (PVK_TO_WCHARS1)aVkToWch7, 7, sizeof(aVkToWch7[0]) },
344        {  (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) },
345    {  (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
346    {                       NULL, 0, 0                    },
347};
348
349/***************************************************************************\
350* aKeyNames[], aKeyNamesExt[]  - Virtual Scancode to Key Name tables
351*
352* Table attributes: Ordered Scan (by scancode), null-terminated
353*
354* Only the names of Extended, NumPad, Dead and Non-Printable keys are here.
355* (Keys producing printable characters are named by that character)
356\***************************************************************************/
357
358static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
359    0x01,    L"ESC",
360    0x0e,    L"R\x00DC" L"CKTASTE",
361    0x0f,    L"TABULATOR",
362    0x1c,    L"EINGABE",
363    0x1d,    L"STRG",
364    0x2a,    L"UMSCHALT",
365        0x2b,    L"MOD 3 RECHTS",
366    0x36,    L"UMSCHALT RECHTS",
367    0x37,    L"* (ZEHNERTASTATUR)",
368    0x38,    L"ALT",
369    0x39,    L"LEER",
370    0x3a,    L"MOD 3 LINKS",
371    0x3b,    L"F1",
372    0x3c,    L"F2",
373    0x3d,    L"F3",
374    0x3e,    L"F4",
375    0x3f,    L"F5",
376    0x40,    L"F6",
377    0x41,    L"F7",
378    0x42,    L"F8",
379    0x43,    L"F9",
380    0x44,    L"F10",
381    0x45,    L"PAUSE",
382    0x46,    L"ROLLEN-FESTSTELL",
383    0x47,    L"7 (ZEHNERTASTATUR)",
384    0x48,    L"8 (ZEHNERTASTATUR)",
385    0x49,    L"9 (ZEHNERTASTATUR)",
386    0x4a,    L"- (ZEHNERTASTATUR)",
387    0x4b,    L"4 (ZEHNERTASTATUR)",
388    0x4c,    L"5 (ZEHNERTASTATUR)",
389    0x4d,    L"6 (ZEHNERTASTATUR)",
390    0x4e,    L"+ (ZEHNERTASTATUR)",
391    0x4f,    L"1 (ZEHNERTASTATUR)",
392    0x50,    L"2 (ZEHNERTASTATUR)",
393    0x51,    L"3 (ZEHNERTASTATUR)",
394    0x52,    L"0 (ZEHNERTASTATUR)",
395    0x53,    L"KOMMA (ZEHNERTASTATUR)",
396        0x56,    L"MOD 4 LINKS",
397    0x57,    L"F11",
398    0x58,    L"F12",
399    0   ,    NULL
400};
401
402static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
403    0x1c,    L"EINGABE (ZEHNERTASTATUR)",
404    0x1d,    L"STRG-RECHTS",
405    0x35,    L"/ (ZEHNERTASTATUR)",
406    0x37,    L"DRUCK",
407    0x38,    L"MOD 4 RECHTS",
408    0x45,    L"NUM-FESTSTELL",
409    0x46,    L"UNTBR",
410    0x47,    L"POS1",
411    0x48,    L"NACH-OBEN",
412    0x49,    L"BILD-NACH-OBEN",
413    0x4b,    L"NACH-LINKS",
414    0x4d,    L"NACH-RECHTS",
415    0x4f,    L"ENDE",
416    0x50,    L"NACH-UNTEN",
417    0x51,    L"BILD-NACH-UNTEN",
418    0x52,    L"EINFG",
419    0x53,    L"ENTF",
420    0x54,    L"<00>",
421    0x56,    L"HILFE",
422    0x5b,    L"LINKE WINDOWS",
423    0x5c,    L"RECHTE WINDOWS",
424    0x5d,    L"ANWENDUNG",
425    0   ,    NULL
426};
427
428static ALLOC_SECTION_LDATA DEADKEY_LPWSTR aKeyNamesDead[] = {
429    L"^"                L"ZIRKUMFLEX",
430    L"\x02C7"   L"CARON",
431        L"\x02D8"       L"BREVIS",
432        L"\x00B7"       L"DOT_MID",
433        L"\x002D"       L"QUERSTRICH",
434        L"\x002E"       L"DOT_BELOW",
435           
436        L"\x00B4"       L"AKUT",
437    L"\x0060"   L"GRAVIS",
438        L"\x00B8"       L"CEDILLA",
439        L"\x02D9"       L"DOT_ABOVE",
440        L"\x02BD"       L"OGONEK",
441        L"\x02DA"       L"RING",
442           
443        L"\x007E"       L"TILDE",
444        L"\x00AF"       L"MAKRON",
445        L"\x00A8"       L"TREMA",
446        L"\x00AF"       L"SCHRAEGSTRICH",
447        L"\x02DD"       L"DOPPEL_AKUT", 
448        L"\x002C"       L"KOMMA_BELOW",
449       
450
451    NULL
452};
453
454static ALLOC_SECTION_LDATA DEADKEY aDeadKey[] = {
455// Schema:
456//      Deadtrans( Name oder Unicode der normalen Taste,        Name oder Unicode der toten Taste,      Name oder Unicode der zu bildenden Taste,       0x0000 für  sichtbar, 0x0001 für tot)
457//      0, 0    terminiert komplette Liste
458
459//Compose
460//Erstes Zeichen für Compose alphabetisch
461        DEADTRANS( L' '         ,0x266B ,0x266b ,0x0000 ),
462        DEADTRANS( L'O'         ,0x266B ,L'O'   ,0x0001 ),
463        DEADTRANS( L'o'         ,0x266B ,L'o'   ,0x0001 ),
464        DEADTRANS( L'R'         ,0x266B ,L'R'   ,0x0001 ),
465//Zweites Zeichen für Compose die ›o‹ oder ›O‹ anfangen
466        DEADTRANS( L'C'         ,L'O'   ,0x00a9 ,0x0000 ),//  O + C = 0x00A9 (Copyright Sign)
467        DEADTRANS( L'c'         ,L'o'   ,0x00a9 ,0x0000 ),//  o + c = 0x00A9 (Copyright Sign)
468        DEADTRANS( L'R'         ,L'O'   ,0x00ae ,0x0000 ),//  O + R = 0x00AE (Registered Sign)
469        DEADTRANS( L'r'         ,L'o'   ,0x00ae ,0x0000 ),//  o + r = 0x00AE (Registered Sign)
470//Zweites Zeichen für Compose die ›t‹ oder ›T‹ anfangen
471        DEADTRANS( L'M'         ,L'T'   ,0x2122 ,0x0000 ),//  T + M = 0x2122 (Trade Mark Sign)
472
473//Deadkeys
474// Anfang der Taste links neben der 1
475    DEADTRANS( L' '   , L'^'   , L'^'   , 0x0000), //Zirkumflex
476    DEADTRANS( L'^'   , L'^'   , 0x0302 , 0x0000), //2x für Combining
477        DEADTRANS( L'1'   , L'^'   , 0x00b9 , 0x0000),
478        DEADTRANS( L'2'   , L'^'   , 0x00b2 , 0x0000),
479        DEADTRANS( L'3'   , L'^'   , 0x00b3 , 0x0000),
480        DEADTRANS( L'4'   , L'^'   , 0x2074 , 0x0000),
481        DEADTRANS( L'5'   , L'^'   , 0x2075     , 0x0000),
482        DEADTRANS( L'6'   , L'^'   , 0x2076     , 0x0000),
483        DEADTRANS( L'7'   , L'^'   , 0x2077     , 0x0000),
484        DEADTRANS( L'8'   , L'^'   , 0x2078     , 0x0000),
485        DEADTRANS( L'9'   , L'^'   , 0x2079     , 0x0000),
486        DEADTRANS( L'0'   , L'^'   , 0x2070 , 0x0000),
487        DEADTRANS( L'+'   , L'^'   , 0x207a , 0x0000),
488        DEADTRANS( L'-'   , L'^'   , 0x207b , 0x0000),
489        DEADTRANS( L'='   , L'^'   , 0x207c , 0x0000),
490        DEADTRANS( L'('   , L'^'   , 0x207d , 0x0000),
491        DEADTRANS( L')'   , L'^'   , 0x207e , 0x0000),
492        DEADTRANS( L'n'   , L'^'   , 0x207f , 0x0000),
493    DEADTRANS( L'A'   , L'^'   , 0x00c2 , 0x0000),     
494        DEADTRANS( L'a'   , L'^'   , 0x00e2 , 0x0000),
495        DEADTRANS( L'C'   , L'^'   , 0x0108 , 0x0000),
496        DEADTRANS( L'c'   , L'^'   , 0x0109 , 0x0000),
497        DEADTRANS( L'E'   , L'^'   , 0x00ca , 0x0000),
498    DEADTRANS( L'e'   , L'^'   , 0x00ea , 0x0000),
499        DEADTRANS( L'G'   , L'^'   , 0x011c , 0x0000),
500        DEADTRANS( L'g'   , L'^'   , 0x011d , 0x0000),
501        DEADTRANS( L'H'   , L'^'   , 0x0124 , 0x0000),
502        DEADTRANS( L'h'   , L'^'   , 0x0125 , 0x0000),
503    DEADTRANS( L'I'   , L'^'   , 0x00ce , 0x0000),
504    DEADTRANS( L'i'   , L'^'   , 0x00ee , 0x0000),
505        DEADTRANS( L'J'   , L'^'   , 0x0134 , 0x0000),
506        DEADTRANS( L'j'   , L'^'   , 0x0135 , 0x0000),
507    DEADTRANS( L'O'   , L'^'   , 0x00d4 , 0x0000),
508    DEADTRANS( L'o'   , L'^'   , 0x00f4 , 0x0000),
509        DEADTRANS( L'S'   , L'^'   , 0x015c , 0x0000),
510        DEADTRANS( L's'   , L'^'   , 0x015d , 0x0000),
511    DEADTRANS( L'U'   , L'^'   , 0x00db , 0x0000),     
512    DEADTRANS( L'u'   , L'^'   , 0x00fb , 0x0000),     
513        DEADTRANS( L'W'   , L'^'   , 0x0174 , 0x0000),
514        DEADTRANS( L'w'   , L'^'   , 0x0175 , 0x0000),
515        DEADTRANS( L'Y'   , L'^'   , 0x0176 , 0x0000),
516        DEADTRANS( L'y'   , L'^'   , 0x0177 , 0x0000),
517        DEADTRANS( L'Z'   , L'^'   , 0x1e90 , 0x0000),
518        DEADTRANS( L'z'   , L'^'   , 0x1e91 , 0x0000),
519       
520        DEADTRANS( L' '   , 0x02c7 , 0x02c7   , 0x0000), //Caron
521        DEADTRANS( 0x02c7 , 0x02c7 , 0x030C   , 0x0000), //2x für Combining
522        DEADTRANS( L'C'   , 0x02c7 , 0x010c   , 0x0000),
523        DEADTRANS( L'c'   , 0x02c7 , 0x010d   , 0x0000), 
524        DEADTRANS( L'D'   , 0x02c7 , 0x010e   , 0x0000), 
525        DEADTRANS( L'd'   , 0x02c7 , 0x010f   , 0x0000),
526        DEADTRANS( L'E'   , 0x02c7 , 0x011a   , 0x0000),
527        DEADTRANS( L'e'   , 0x02c7 , 0x011b   , 0x0000),
528        DEADTRANS( L'L'   , 0x02c7 , 0x013d   , 0x0000),
529        DEADTRANS( L'l'   , 0x02c7 , 0x013e   , 0x0000),
530        DEADTRANS( L'N'   , 0x02c7 , 0x0147   , 0x0000),
531        DEADTRANS( L'n'   , 0x02c7 , 0x0148   , 0x0000),
532        DEADTRANS( L'R'   , 0x02c7 , 0x0158   , 0x0000),
533        DEADTRANS( L'r'   , 0x02c7 , 0x0159   , 0x0000),
534        DEADTRANS( L'S'   , 0x02c7 , 0x0160   , 0x0000),
535        DEADTRANS( L's'   , 0x02c7 , 0x0161   , 0x0000),
536        DEADTRANS( L'T'   , 0x02c7 , 0x0164   , 0x0000),
537        DEADTRANS( L't'   , 0x02c7 , 0x0165   , 0x0000),
538        DEADTRANS( L'Z'   , 0x02c7 , 0x017d   , 0x0000),
539        DEADTRANS( L'z'   , 0x02c7 , 0x017e   , 0x0000),
540        DEADTRANS( L'A'   , 0x02c7 , 0x01cd   , 0x0000),
541        DEADTRANS( L'a'   , 0x02c7 , 0x01ce   , 0x0000),
542        DEADTRANS( L'I'   , 0x02c7 , 0x01cf   , 0x0000),
543        DEADTRANS( L'i'   , 0x02c7 , 0x01d0   , 0x0000),
544        DEADTRANS( L'O'   , 0x02c7 , 0x01d1   , 0x0000),
545        DEADTRANS( L'o'   , 0x02c7 , 0x01d2   , 0x0000),
546        DEADTRANS( L'U'   , 0x02c7 , 0x01d3   , 0x0000),
547        DEADTRANS( L'u'   , 0x02c7 , 0x01d4   , 0x0000),
548        DEADTRANS( L'G'   , 0x02c7 , 0x01e6   , 0x0000),
549        DEADTRANS( L'g'   , 0x02c7 , 0x01e7   , 0x0000),
550        DEADTRANS( L'K'   , 0x02c7 , 0x01e8   , 0x0000),
551        DEADTRANS( L'k'   , 0x02c7 , 0x01e9   , 0x0000),
552        DEADTRANS( L'j'   , 0x02c7 , 0x01f0   , 0x0000),
553        DEADTRANS( L'H'   , 0x02c7 , 0x021e   , 0x0000),
554        DEADTRANS( L'h'   , 0x02c7 , 0x021f   , 0x0000),
555        DEADTRANS( 0x00fc , 0x02c7 , 0x01da   , 0x0000),
556        DEADTRANS( 0x00dc , 0x02c7 , 0x01d9   , 0x0000),
557       
558        DEADTRANS( L' '   , 0x02D8 , 0x02D8   , 0x0000),        //Brevis
559        DEADTRANS( 0x02D8 , 0x02D8 , 0x0306   , 0x0000),        //2x für Combining
560        DEADTRANS( L'A'   , 0x02D8 , 0x0102   , 0x0000),
561        DEADTRANS( L'a'   , 0x02D8 , 0x0103   , 0x0000),
562        DEADTRANS( L'E'   , 0x02D8 , 0x0114   , 0x0000),
563        DEADTRANS( L'e'   , 0x02D8 , 0x0115   , 0x0000),
564        DEADTRANS( L'G'   , 0x02D8 , 0x011e   , 0x0000),
565        DEADTRANS( L'g'   , 0x02D8 , 0x011f   , 0x0000),
566        DEADTRANS( L'I'   , 0x02D8 , 0x012c   , 0x0000),
567        DEADTRANS( L'i'   , 0x02D8 , 0x012d   , 0x0000),
568        DEADTRANS( L'O'   , 0x02D8 , 0x014e   , 0x0000),
569        DEADTRANS( L'o'   , 0x02D8 , 0x014f   , 0x0000),
570        DEADTRANS( L'U'   , 0x02D8 , 0x016c   , 0x0000),
571        DEADTRANS( L'u'   , 0x02D8 , 0x016d   , 0x0000),
572
573        DEADTRANS( L' '   , 0x00b7 , 0x00b7   , 0x0000),        //Dot Middle
574        DEADTRANS( 0x00b7 , 0x00b7 , 0x00b7   , 0x0000),        //kein Combining vorhanden
575        DEADTRANS( L'L'   , 0x00b7 , 0x013F   , 0x0000),
576        DEADTRANS( L'l'   , 0x00b7 , 0x0140   , 0x0000),
577       
578        DEADTRANS( L' '   , '-' , '-'      , 0x0000),   //Querstrich
579        DEADTRANS( L'-'   , '-' , 0x0335   , 0x0000),   //2x für Combining
580        DEADTRANS( L'1'   , '-' , 0x2081   , 0x0000),
581        DEADTRANS( L'2'   , '-' , 0x2082   , 0x0000),
582        DEADTRANS( L'3'   , '-' , 0x2083   , 0x0000),
583        DEADTRANS( L'4'   , '-' , 0x2084   , 0x0000),
584        DEADTRANS( L'5'   , '-' , 0x2085   , 0x0000),
585        DEADTRANS( L'6'   , '-' , 0x2086   , 0x0000),
586        DEADTRANS( L'7'   , '-' , 0x2087   , 0x0000),
587        DEADTRANS( L'8'   , '-' , 0x2088   , 0x0000),
588        DEADTRANS( L'9'   , '-' , 0x2089   , 0x0000),
589        DEADTRANS( L'0'   , '-' , 0x2080   , 0x0000),
590        DEADTRANS( L'+'   , '-' , 0x208a   , 0x0000),
591        DEADTRANS( L'-'   , '-' , 0x208b   , 0x0000),
592        DEADTRANS( L'='   , '-' , 0x208c   , 0x0000),
593        DEADTRANS( L'('   , '-' , 0x208d   , 0x0000),
594        DEADTRANS( L')'   , '-' , 0x208e   , 0x0000),
595        DEADTRANS( L'x'   , '-' , 0x2093   , 0x0000),
596       
597        DEADTRANS( L' '   , '.' , '.'      , 0x0000),   //Dot Below
598        DEADTRANS( L'.'   , '.' , 0x0323   , 0x0000),   //2x für Combining
599        DEADTRANS( L'B'   , '.' , 0x1e04   , 0x0000),
600        DEADTRANS( L'b'   , '.' , 0x1e05   , 0x0000),
601        DEADTRANS( L'D'   , '.' , 0x1e0c   , 0x0000),
602        DEADTRANS( L'd'   , '.' , 0x1e0d   , 0x0000),
603        DEADTRANS( L'H'   , '.' , 0x1e24   , 0x0000),
604        DEADTRANS( L'h'   , '.' , 0x1e25   , 0x0000),
605        DEADTRANS( L'K'   , '.' , 0x1e32   , 0x0000),
606        DEADTRANS( L'k'   , '.' , 0x1e33   , 0x0000),
607        DEADTRANS( L'L'   , '.' , 0x1e36   , 0x0000),
608        DEADTRANS( L'l'   , '.' , 0x1e37   , 0x0000),
609        DEADTRANS( L'M'   , '.' , 0x1e42   , 0x0000),
610        DEADTRANS( L'm'   , '.' , 0x1e43   , 0x0000),
611        DEADTRANS( L'N'   , '.' , 0x1e46   , 0x0000),
612        DEADTRANS( L'n'   , '.' , 0x1e47   , 0x0000),
613        DEADTRANS( L'R'   , '.' , 0x1e5a   , 0x0000),
614        DEADTRANS( L'r'   , '.' , 0x1e5b   , 0x0000),
615        DEADTRANS( L'S'   , '.' , 0x1e62   , 0x0000),
616        DEADTRANS( L's'   , '.' , 0x1e63   , 0x0000),
617        DEADTRANS( L'T'   , '.' , 0x1e6c   , 0x0000),
618        DEADTRANS( L't'   , '.' , 0x1e6d   , 0x0000),
619        DEADTRANS( L'V'   , '.' , 0x1e7e   , 0x0000),
620        DEADTRANS( L'v'   , '.' , 0x1e7f   , 0x0000),
621        DEADTRANS( L'W'   , '.' , 0x1e88   , 0x0000),
622        DEADTRANS( L'w'   , '.' , 0x1e89   , 0x0000),
623        DEADTRANS( L'Z'   , '.' , 0x1e92   , 0x0000),
624        DEADTRANS( L'z'   , '.' , 0x1e93   , 0x0000),
625        DEADTRANS( L'A'   , '.' , 0x1ea0   , 0x0000),
626        DEADTRANS( L'a'   , '.' , 0x1ea1   , 0x0000),
627        DEADTRANS( L'E'   , '.' , 0x1eb8   , 0x0000),
628        DEADTRANS( L'e'   , '.' , 0x1eb9   , 0x0000),
629        DEADTRANS( L'I'   , '.' , 0x1eca   , 0x0000),
630        DEADTRANS( L'i'   , '.' , 0x1ecb   , 0x0000),
631        DEADTRANS( L'O'   , '.' , 0x1ecc   , 0x0000),
632        DEADTRANS( L'o'   , '.' , 0x1ecd   , 0x0000),
633        DEADTRANS( L'Y'   , '.' , 0x1ef4   , 0x0000),
634        DEADTRANS( L'y'   , '.' , 0x1ef5   , 0x0000),
635// Ende der Taste links neben der 1
636// Anfang der Tasten zwei rechts neben der 0
637        DEADTRANS( L' '   , 0x00B4 , 0x00B4 , 0x0000),  //Akut
638        DEADTRANS( 0x00B4 , 0x00B4 , 0x0301 , 0x0000),  //2x für Combining
639    DEADTRANS( L'a'   , 0x00B4 , 0x00e1 , 0x0000),
640    DEADTRANS( L'e'   , 0x00B4 , 0x00e9 , 0x0000),
641    DEADTRANS( L'i'   , 0x00B4 , 0x00ed , 0x0000),
642    DEADTRANS( L'o'   , 0x00B4 , 0x00f3 , 0x0000),
643    DEADTRANS( L'u'   , 0x00B4 , 0x00fa , 0x0000),
644    DEADTRANS( L'y'   , 0x00B4 , 0x00fd , 0x0000),
645    DEADTRANS( L'A'   , 0x00B4 , 0x00c1 , 0x0000),
646    DEADTRANS( L'E'   , 0x00B4 , 0x00c9 , 0x0000),
647    DEADTRANS( L'I'   , 0x00B4 , 0x00cd , 0x0000),
648    DEADTRANS( L'O'   , 0x00B4 , 0x00d3 , 0x0000),
649    DEADTRANS( L'U'   , 0x00B4 , 0x00da , 0x0000),
650    DEADTRANS( L'Y'   , 0x00B4 , 0x00dd , 0x0000),
651        DEADTRANS( L'C'   , 0x00B4 , 0x0106 , 0x0000),
652    DEADTRANS( L'c'   , 0x00B4 , 0x0106 , 0x0000),
653        DEADTRANS( L'L'   , 0x00B4 , 0x0139 , 0x0000),
654    DEADTRANS( L'l'   , 0x00B4 , 0x013a , 0x0000),
655        DEADTRANS( L'N'   , 0x00B4 , 0x0143 , 0x0000),
656    DEADTRANS( L'n'   , 0x00B4 , 0x0144 , 0x0000),
657        DEADTRANS( L'R'   , 0x00B4 , 0x0154 , 0x0000),
658    DEADTRANS( L'r'   , 0x00B4 , 0x0155 , 0x0000),
659        DEADTRANS( L'S'   , 0x00B4 , 0x015a , 0x0000),
660    DEADTRANS( L's'   , 0x00B4 , 0x015b , 0x0000),
661        DEADTRANS( L'Z'   , 0x00B4 , 0x0179 , 0x0000),
662    DEADTRANS( L'z'   , 0x00B4 , 0x017a , 0x0000),
663        DEADTRANS( 0x00fc , 0x00B4 , 0x01d8 , 0x0000),
664        DEADTRANS( 0x00dc , 0x00B4 , 0x01d7 , 0x0000),
665        DEADTRANS( L'G'   , 0x00B4 , 0x01f4 , 0x0000),
666    DEADTRANS( L'g'   , 0x00B4 , 0x01f5 , 0x0000),
667        DEADTRANS( L'K'   , 0x00B4 , 0x1e30 , 0x0000),
668    DEADTRANS( L'k'   , 0x00B4 , 0x1e31 , 0x0000),
669        DEADTRANS( L'M'   , 0x00B4 , 0x1e3e , 0x0000),
670    DEADTRANS( L'm'   , 0x00B4 , 0x1e3f , 0x0000),
671        DEADTRANS( L'P'   , 0x00B4 , 0x1e54 , 0x0000),
672    DEADTRANS( L'p'   , 0x00B4 , 0x1e55 , 0x0000),
673        DEADTRANS( L'W'   , 0x00B4 , 0x1e82 , 0x0000),
674    DEADTRANS( L'w'   , 0x00B4 , 0x1e83 , 0x0000),
675
676        DEADTRANS( L' '   , 0x0060 , 0x0060 , 0x0000),  //Gravis
677        DEADTRANS( 0x0060 , 0x0060 , 0x0300 , 0x0000),
678    DEADTRANS( L'a'   , 0x0060 , 0x00e0 , 0x0000),
679    DEADTRANS( L'e'   , 0x0060 , 0x00e8 , 0x0000),
680    DEADTRANS( L'i'   , 0x0060 , 0x00ec , 0x0000),
681    DEADTRANS( L'o'   , 0x0060 , 0x00f2 , 0x0000),
682    DEADTRANS( L'u'   , 0x0060 , 0x00f9 , 0x0000),
683    DEADTRANS( L'A'   , 0x0060 , 0x00c0 , 0x0000),
684    DEADTRANS( L'E'   , 0x0060 , 0x00c8 , 0x0000),
685    DEADTRANS( L'I'   , 0x0060 , 0x00cc , 0x0000),
686    DEADTRANS( L'O'   , 0x0060 , 0x00d2 , 0x0000),
687    DEADTRANS( L'U'   , 0x0060 , 0x00d9 , 0x0000),
688    DEADTRANS( 0x00dc , 0x0060 , 0x01db , 0x0000),
689        DEADTRANS( 0x00fc , 0x0060 , 0x01dc , 0x0000),
690        DEADTRANS( L'N'   , 0x0060 , 0x01f8 , 0x0000),
691        DEADTRANS( L'n'   , 0x0060 , 0x01f9 , 0x0000),
692        DEADTRANS( L'W'   , 0x0060 , 0x1e80 , 0x0000),
693        DEADTRANS( L'w'   , 0x0060 , 0x1e81 , 0x0000),
694        DEADTRANS( L'Y'   , 0x0060 , 0x1ef2 , 0x0000),
695        DEADTRANS( L'y'   , 0x0060 , 0x1ef3 , 0x0000),
696       
697        DEADTRANS( L' '   , 0x00b8 , 0x00b8 , 0x0000),  //Cedilla
698        DEADTRANS( 0x00b8 , 0x00b8 , 0x0327 , 0x0000),  //2x für Combining
699        DEADTRANS( L'C'   , 0x00b8 , 0x00c7 , 0x0000),
700        DEADTRANS( L'c'   , 0x00b8 , 0x00e7 , 0x0000),
701        DEADTRANS( L'G'   , 0x00b8 , 0x0122 , 0x0000),
702        DEADTRANS( L'g'   , 0x00b8 , 0x0123 , 0x0000),
703        DEADTRANS( L'K'   , 0x00b8 , 0x0136 , 0x0000),
704        DEADTRANS( L'k'   , 0x00b8 , 0x0137 , 0x0000),
705        DEADTRANS( L'L'   , 0x00b8 , 0x013b , 0x0000),
706        DEADTRANS( L'l'   , 0x00b8 , 0x013c , 0x0000),
707        DEADTRANS( L'N'   , 0x00b8 , 0x0145 , 0x0000),
708        DEADTRANS( L'n'   , 0x00b8 , 0x0146 , 0x0000),
709        DEADTRANS( L'R'   , 0x00b8 , 0x0156 , 0x0000),
710        DEADTRANS( L'r'   , 0x00b8 , 0x0157 , 0x0000),
711        DEADTRANS( L'S'   , 0x00b8 , 0x015e , 0x0000),
712        DEADTRANS( L's'   , 0x00b8 , 0x015f , 0x0000),
713        DEADTRANS( L'T'   , 0x00b8 , 0x0162 , 0x0000),
714        DEADTRANS( L't'   , 0x00b8 , 0x0163 , 0x0000),
715        DEADTRANS( L'E'   , 0x00b8 , 0x0228 , 0x0000),
716        DEADTRANS( L'e'   , 0x00b8 , 0x0229 , 0x0000),
717        DEADTRANS( L'D'   , 0x00b8 , 0x1e10 , 0x0000),
718        DEADTRANS( L'd'   , 0x00b8 , 0x1e11 , 0x0000),
719        DEADTRANS( L'H'   , 0x00b8 , 0x1e28 , 0x0000),
720        DEADTRANS( L'h'   , 0x00b8 , 0x1e29 , 0x0000),
721       
722        DEADTRANS( L' '   , 0x02d9 , 0x02d9 , 0x0000),  //Dot Above
723        DEADTRANS( 0x02d9 , 0x02d9 , 0x0307 , 0x0000),  //2x für Combining
724        DEADTRANS( L'C'   , 0x02d9 , 0x010a , 0x0000),
725        DEADTRANS( L'c'   , 0x02d9 , 0x010b , 0x0000),
726        DEADTRANS( L'E'   , 0x02d9 , 0x0116 , 0x0000),
727        DEADTRANS( L'e'   , 0x02d9 , 0x0117 , 0x0000),
728        DEADTRANS( L'G'   , 0x02d9 , 0x0120 , 0x0000),
729        DEADTRANS( L'g'   , 0x02d9 , 0x0121 , 0x0000),
730        DEADTRANS( L'I'   , 0x02d9 , 0x0130 , 0x0000),
731        DEADTRANS( L'i'   , 0x02d9 , 0x0131 , 0x0000),
732        DEADTRANS( L'Z'   , 0x02d9 , 0x017b , 0x0000),
733        DEADTRANS( L'z'   , 0x02d9 , 0x017c , 0x0000),
734        DEADTRANS( L'A'   , 0x02d9 , 0x0226 , 0x0000),
735        DEADTRANS( L'a'   , 0x02d9 , 0x0227 , 0x0000),
736        DEADTRANS( L'O'   , 0x02d9 , 0x022e , 0x0000),
737        DEADTRANS( L'o'   , 0x02d9 , 0x022f , 0x0000),
738        DEADTRANS( L'B'   , 0x02d9 , 0x1e02 , 0x0000),
739        DEADTRANS( L'b'   , 0x02d9 , 0x1e03 , 0x0000),
740        DEADTRANS( L'D'   , 0x02d9 , 0x1e0a , 0x0000),
741        DEADTRANS( L'd'   , 0x02d9 , 0x1e0b , 0x0000),
742        DEADTRANS( L'F'   , 0x02d9 , 0x1e1e , 0x0000),
743        DEADTRANS( L'f'   , 0x02d9 , 0x1e1f , 0x0000),
744        DEADTRANS( L'H'   , 0x02d9 , 0x1e22 , 0x0000),
745        DEADTRANS( L'h'   , 0x02d9 , 0x1e23 , 0x0000),
746        DEADTRANS( L'M'   , 0x02d9 , 0x1e40 , 0x0000),
747        DEADTRANS( L'm'   , 0x02d9 , 0x1e41 , 0x0000),
748        DEADTRANS( L'N'   , 0x02d9 , 0x1e44 , 0x0000),
749        DEADTRANS( L'n'   , 0x02d9 , 0x1e45 , 0x0000),
750        DEADTRANS( L'P'   , 0x02d9 , 0x1e56 , 0x0000),
751        DEADTRANS( L'p'   , 0x02d9 , 0x1e57 , 0x0000),
752        DEADTRANS( L'R'   , 0x02d9 , 0x1e58 , 0x0000),
753        DEADTRANS( L'r'   , 0x02d9 , 0x1e59 , 0x0000),
754        DEADTRANS( L'S'   , 0x02d9 , 0x1e60 , 0x0000),
755        DEADTRANS( L's'   , 0x02d9 , 0x1e61 , 0x0000),
756        DEADTRANS( L'T'   , 0x02d9 , 0x1e6a , 0x0000),
757        DEADTRANS( L't'   , 0x02d9 , 0x1e6b , 0x0000),
758        DEADTRANS( L'W'   , 0x02d9 , 0x1e86 , 0x0000),
759        DEADTRANS( L'w'   , 0x02d9 , 0x1e87 , 0x0000),
760        DEADTRANS( L'X'   , 0x02d9 , 0x1e8a , 0x0000),
761        DEADTRANS( L'x'   , 0x02d9 , 0x1e8b , 0x0000),
762        DEADTRANS( L'Y'   , 0x02d9 , 0x1e8e , 0x0000),
763        DEADTRANS( L'y'   , 0x02d9 , 0x1e8f , 0x0000),
764               
765        DEADTRANS( L' '   , 0x02DB , 0x02DB , 0x0000),  //Ogonek
766        DEADTRANS( 0x02DB , 0x02DB , 0x0328 , 0x0000),  //2x für Combining
767        DEADTRANS( L'A'   , 0x02DB , 0x0104 , 0x0000),
768        DEADTRANS( L'a'   , 0x02DB , 0x0105 , 0x0000),
769        DEADTRANS( L'E'   , 0x02DB , 0x0118 , 0x0000),
770        DEADTRANS( L'e'   , 0x02DB , 0x0119 , 0x0000),
771        DEADTRANS( L'I'   , 0x02DB , 0x012e , 0x0000),
772        DEADTRANS( L'i'   , 0x02DB , 0x012f , 0x0000),
773        DEADTRANS( L'U'   , 0x02DB , 0x0172 , 0x0000),
774        DEADTRANS( L'u'   , 0x02DB , 0x0173 , 0x0000),
775        DEADTRANS( L'O'   , 0x02DB , 0x01ea , 0x0000),
776        DEADTRANS( L'o'   , 0x02DB , 0x01eb , 0x0000),
777
778        DEADTRANS( L' '   , 0x02DA , 0x02DA , 0x0000),  //Ring
779        DEADTRANS( 0x02DA , 0x02DA , 0x030A , 0x0000),  //2x für Combining
780        DEADTRANS( L'E'   , 0x02DA , 0x0116 , 0x0000),
781        DEADTRANS( L'e'   , 0x02DA , 0x0117 , 0x0000),
782        DEADTRANS( L'G'   , 0x02DA , 0x0120 , 0x0000),
783        DEADTRANS( L'g'   , 0x02DA , 0x0121 , 0x0000),
784        DEADTRANS( L'I'   , 0x02DA , 0x0130 , 0x0000),
785        DEADTRANS( L'i'   , 0x02DA , 0x0131 , 0x0000),
786        DEADTRANS( L'Z'   , 0x02DA , 0x017B , 0x0000),
787        DEADTRANS( L'z'   , 0x02DA , 0x017C , 0x0000),
788        DEADTRANS( L'A'   , 0x02DA , 0x0226 , 0x0000),
789        DEADTRANS( L'a'   , 0x02DA , 0x0227 , 0x0000),
790        DEADTRANS( L'O'   , 0x02DA , 0x022e , 0x0000),
791        DEADTRANS( L'o'   , 0x02DA , 0x022f , 0x0000),
792        DEADTRANS( L'B'   , 0x02DA , 0x1e02 , 0x0000),
793        DEADTRANS( L'b'   , 0x02DA , 0x1e03 , 0x0000),
794        DEADTRANS( L'D'   , 0x02DA , 0x1e0a , 0x0000),
795        DEADTRANS( L'd'   , 0x02DA , 0x1e0b , 0x0000),
796        DEADTRANS( L'F'   , 0x02DA , 0x1e1e , 0x0000),
797        DEADTRANS( L'f'   , 0x02DA , 0x1e1f , 0x0000),
798        DEADTRANS( L'H'   , 0x02DA , 0x1e22 , 0x0000),
799        DEADTRANS( L'h'   , 0x02DA , 0x1e23 , 0x0000),
800        DEADTRANS( L'M'   , 0x02DA , 0x1e40 , 0x0000),
801        DEADTRANS( L'm'   , 0x02DA , 0x1e41 , 0x0000),
802        DEADTRANS( L'N'   , 0x02DA , 0x1e44 , 0x0000),
803        DEADTRANS( L'n'   , 0x02DA , 0x1e45 , 0x0000),
804        DEADTRANS( L'P'   , 0x02DA , 0x1e56 , 0x0000),
805        DEADTRANS( L'p'   , 0x02DA , 0x1e57 , 0x0000),
806        DEADTRANS( L'R'   , 0x02DA , 0x1e58 , 0x0000),
807        DEADTRANS( L'r'   , 0x02DA , 0x1e59 , 0x0000),
808        DEADTRANS( L'S'   , 0x02DA , 0x1e60 , 0x0000),
809        DEADTRANS( L's'   , 0x02DA , 0x1e61 , 0x0000),
810        DEADTRANS( L'T'   , 0x02DA , 0x1e6a , 0x0000),
811        DEADTRANS( L't'   , 0x02DA , 0x1e6b , 0x0000),
812        DEADTRANS( L'W'   , 0x02DA , 0x1e86 , 0x0000),
813        DEADTRANS( L'w'   , 0x02DA , 0x1e87 , 0x0000),
814        DEADTRANS( L'X'   , 0x02DA , 0x1e8a , 0x0000),
815        DEADTRANS( L'x'   , 0x02DA , 0x1e8b , 0x0000),
816        DEADTRANS( L'Y'   , 0x02DA , 0x1e8e , 0x0000),
817        DEADTRANS( L'y'   , 0x02DA , 0x1e8f , 0x0000),
818        // Ende der Taste zwei rechts neben der 0
819        // Anfang der Taste rechts neben dem »ß«
820        DEADTRANS( L' '   , 0x007E , 0x007E , 0x0000), //Tilde
821        DEADTRANS( 0x007E , 0x007E , 0x0303 , 0x0000), //2x für Combining
822        DEADTRANS( L'A'   , 0x007E , 0x00c3 , 0x0000),
823        DEADTRANS( L'N'   , 0x007E , 0x00d1 , 0x0000),
824        DEADTRANS( L'O'   , 0x007E , 0x00d5 , 0x0000),
825        DEADTRANS( L'a'   , 0x007E , 0x00e3 , 0x0000),
826        DEADTRANS( L'n'   , 0x007E , 0x00f1 , 0x0000),
827        DEADTRANS( L'o'   , 0x007E , 0x00f5 , 0x0000),
828        DEADTRANS( L'I'   , 0x007E , 0x0128 , 0x0000),
829        DEADTRANS( L'i'   , 0x007E , 0x0129 , 0x0000),
830        DEADTRANS( L'U'   , 0x007E , 0x0168 , 0x0000),
831        DEADTRANS( L'u'   , 0x007E , 0x0169 , 0x0000),
832        DEADTRANS( L'V'   , 0x007E , 0x1e7c , 0x0000),
833        DEADTRANS( L'v'   , 0x007E , 0x1e7d , 0x0000),
834        DEADTRANS( L'E'   , 0x007E , 0x1ebc , 0x0000),
835        DEADTRANS( L'e'   , 0x007E , 0x1ebd , 0x0000),
836        DEADTRANS( L'Y'   , 0x007E , 0x1ef8 , 0x0000),
837        DEADTRANS( L'y'   , 0x007E , 0x1ef9 , 0x0000),
838       
839        DEADTRANS( L' '   , 0x00AF , 0x00AF , 0x0000), //Makron
840        DEADTRANS( 0x00AF , 0x00AF , 0x0304 , 0x0000), //2x für Combining
841        DEADTRANS( L'A'   , 0x00AF , 0x0100 , 0x0000),
842        DEADTRANS( L'a'   , 0x00AF , 0x0101 , 0x0000),
843        DEADTRANS( L'E'   , 0x00AF , 0x0112 , 0x0000),
844        DEADTRANS( L'e'   , 0x00AF , 0x0113 , 0x0000),
845        DEADTRANS( L'I'   , 0x00AF , 0x012a , 0x0000),
846        DEADTRANS( L'i'   , 0x00AF , 0x012b , 0x0000),
847        DEADTRANS( L'O'   , 0x00AF , 0x014c , 0x0000),
848        DEADTRANS( L'o'   , 0x00AF , 0x014d , 0x0000),
849        DEADTRANS( L'U'   , 0x00AF , 0x016a , 0x0000),
850        DEADTRANS( L'u'   , 0x00AF , 0x016b , 0x0000),
851        DEADTRANS( L'Y'   , 0x00AF , 0x0232 , 0x0000),
852        DEADTRANS( L'y'   , 0x00AF , 0x0233 , 0x0000),
853        DEADTRANS( L'G'   , 0x00AF , 0x1e20 , 0x0000),
854        DEADTRANS( L'g'   , 0x00AF , 0x1e21 , 0x0000),
855       
856        DEADTRANS( L' '   , 0x00A8 , 0x00A8 , 0x0000), //Diaräse
857        DEADTRANS( 0x00A8 , 0x00A8 , 0x0308 , 0x0000), //2x für Combining
858        DEADTRANS( L'A'   , 0x00A8 , 0x00c4 , 0x0000),
859        DEADTRANS( L'E'   , 0x00A8 , 0x00cb , 0x0000),
860        DEADTRANS( L'I'   , 0x00A8 , 0x00cf , 0x0000),
861        DEADTRANS( L'O'   , 0x00A8 , 0x00d6 , 0x0000),
862        DEADTRANS( L'U'   , 0x00A8 , 0x00dc , 0x0000),
863        DEADTRANS( L'a'   , 0x00A8 , 0x00e4 , 0x0000),
864        DEADTRANS( L'e'   , 0x00A8 , 0x00eb , 0x0000),
865        DEADTRANS( L'i'   , 0x00A8 , 0x00ef , 0x0000),
866        DEADTRANS( L'o'   , 0x00A8 , 0x00f6 , 0x0000),
867        DEADTRANS( L'u'   , 0x00A8 , 0x00fc , 0x0000),
868        DEADTRANS( L'y'   , 0x00A8 , 0x0177 , 0x0000),
869        DEADTRANS( L'Y'   , 0x00A8 , 0x0178 , 0x0000),
870        DEADTRANS( L'H'   , 0x00A8 , 0x1e26 , 0x0000),
871        DEADTRANS( L'h'   , 0x00A8 , 0x1e27 , 0x0000),
872        DEADTRANS( L'W'   , 0x00A8 , 0x1e84 , 0x0000),
873        DEADTRANS( L'w'   , 0x00A8 , 0x1e85 , 0x0000),
874        DEADTRANS( L'X'   , 0x00A8 , 0x1e8c , 0x0000),
875        DEADTRANS( L'x'   , 0x00A8 , 0x1e8d , 0x0000),
876        DEADTRANS( L't'   , 0x00A8 , 0x1e97 , 0x0000),
877
878        DEADTRANS( L' '   , 0x002F , 0x002F , 0x0000), //Schrägstrich
879        DEADTRANS( 0x002F , 0x002F , 0x0337 , 0x0000), //2x für Combining
880        DEADTRANS( L'O'   , 0x002F , 0x00d8 , 0x0000),
881        DEADTRANS( L'o'   , 0x002F , 0x00f8 , 0x0000),
882        DEADTRANS( L'L'   , 0x002F , 0x0141 , 0x0000),
883        DEADTRANS( L'l'   , 0x002F , 0x0142 , 0x0000),
884
885        DEADTRANS( L' '   , 0x02DD , 0x02DD , 0x0000), //Doppel Akut
886        DEADTRANS( 0x02DD , 0x02DD , 0x030B , 0x0000), //2x für Combining
887        DEADTRANS( L'O'   , 0x02DD , 0x0150 , 0x0000),
888        DEADTRANS( L'o'   , 0x02DD , 0x0151 , 0x0000),
889        DEADTRANS( L'U'   , 0x02DD , 0x0170 , 0x0000),
890        DEADTRANS( L'u'   , 0x02DD , 0x0171 , 0x0000),
891        DEADTRANS( L' '   , 0x02DD , 0x02DD , 0x0000),
892
893        DEADTRANS( L' '   , ',' , ','    , 0x0000), //Komma Below
894        DEADTRANS( L','   , ',' , ','    , 0x0000),      //2x für Combining
895        DEADTRANS( L'S'   , ',' , 0x0218 , 0x0000),
896        DEADTRANS( L's'   , ',' , 0x0219 , 0x0000),
897        DEADTRANS( L'T'   , ',' , 0x021a , 0x0000),
898        DEADTRANS( L't'   , ',' , 0x021b , 0x0000),
899        DEADTRANS( L' '   , ',' , 0x0326 , 0x0000),
900// Ende der Tasten rechts neben dem »ß«
901    0, 0
902};
903
904
905static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
906/*
907* Modifier keys
908*/
909    &CharModifiers,
910
911/*
912* Characters tables
913*/
914    aVkToWcharTable,
915
916/*
917* Diacritics
918*/
919    aDeadKey,
920
921/*
922* Names of Keys
923*/
924    aKeyNames,
925    aKeyNamesExt,
926    aKeyNamesDead,
927
928/*
929* Scan codes to Virtual Keys
930*/
931    ausVK,
932    sizeof(ausVK) / sizeof(ausVK[0]),
933    aE0VscToVk,
934    aE1VscToVk,
935
936/*
937* Locale-specific special processing
938* KLLF_ALTGR damit AltGr = Strg+Alt
939*/
940        MAKELONG(KLLF_ALTGR, KBD_VERSION),
941
942/*
943* Ligatures
944*/
945        0,
946        0,
947        NULL
948};
949
950PKBDTABLES KbdLayerDescriptor(VOID)
951{
952    return &KbdTables;
953}
Hinweis: Hilfe zum Repository-Browser finden Sie in TracBrowser.