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

Letzte Änderung dieser Datei seit 505 war 505, erstellt von florian vor 11 Jahren
Dateigröße: 33.5 KB
Zeile 
1/***************************************************************************\
2* Module Name: KBDNEO2.C
3*
4* keyboard layout for German
5*
6* Copyright (c) 1985-2000, Microsoft Corporation
7*
8* History:
9\***************************************************************************/
10
11#include <windows.h>
12#include "kbd.h"
13#include "kbdneo2.h"
14
15#if defined(_M_IA64)
16#pragma section(".data")
17#define ALLOC_SECTION_LDATA __declspec(allocate(".data"))
18#else
19#pragma data_seg(".data")
20#define ALLOC_SECTION_LDATA
21#endif
22
23/***************************************************************************\
24* ausVK[] - Virtual Scan Code to Virtual Key conversion table for German
25\***************************************************************************/
26
27static ALLOC_SECTION_LDATA USHORT ausVK[] = {
28    T00, T01, T02, T03, T04, T05, T06, T07,
29    T08, T09, T0A, T0B, T0C, T0D, T0E, T0F,
30    T10, T11, T12, T13, T14, T15, T16, T17,
31    T18, T19, T1A, T1B, T1C, T1D, T1E, T1F,
32    T20, T21, T22, T23, T24, T25, T26, T27,
33    T28, T29, T2A, T2B, T2C, T2D, T2E, T2F,
34    T30, T31, T32, T33, T34, T35,
35
36    /*
37     * Right-hand Shift key must have KBDEXT bit set.
38     */
39    T36 | KBDEXT,
40
41    T37 | KBDMULTIVK,               // numpad_* + Shift/Alt -> SnapShot
42
43    T38, T39, T3A, T3B, T3C, T3D, T3E,
44    T3F, T40, T41, T42, T43, T44,
45
46    /*
47     * NumLock Key:
48     *     KBDEXT     - VK_NUMLOCK is an Extended key
49     *     KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL)
50     */
51    T45 | KBDEXT | KBDMULTIVK,
52
53    T46 | KBDMULTIVK,
54
55    /*
56     * Number Pad keys:
57     *     KBDNUMPAD  - digits 0-9 and decimal point.
58     *     KBDSPECIAL - require special processing by Windows
59     */
60    T47 | KBDNUMPAD | KBDSPECIAL,   // Numpad 7 (Home)
61    T48 | KBDNUMPAD | KBDSPECIAL,   // Numpad 8 (Up),
62    T49 | KBDNUMPAD | KBDSPECIAL,   // Numpad 9 (PgUp),
63    T4A,
64    T4B | KBDNUMPAD | KBDSPECIAL,   // Numpad 4 (Left),
65    T4C | KBDNUMPAD | KBDSPECIAL,   // Numpad 5 (Clear),
66    T4D | KBDNUMPAD | KBDSPECIAL,   // Numpad 6 (Right),
67    T4E,
68    T4F | KBDNUMPAD | KBDSPECIAL,   // Numpad 1 (End),
69    T50 | KBDNUMPAD | KBDSPECIAL,   // Numpad 2 (Down),
70    T51 | KBDNUMPAD | KBDSPECIAL,   // Numpad 3 (PgDn),
71    T52 | KBDNUMPAD | KBDSPECIAL,   // Numpad 0 (Ins),
72    T53 | KBDNUMPAD | KBDSPECIAL,   // Numpad . (Del),
73
74    T54, T55, T56, T57, T58, T59, T5A, T5B,
75    T5C, T5D, T5E, T5F, T60, T61, T62, T63,
76    T64, T65, T66, T67, T68, T69, T6A, T6B,
77    T6C, T6D, T6E, T6F, T70, T71, T72, T73,
78    T74, T75, T76, T77, T78, T79, T7A, T7B,
79    T7C, T7D, T7E
80
81};
82
83static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = {
84        { 0x10, X10 | KBDEXT              },  // Speedracer: Previous Track
85        { 0x19, X19 | KBDEXT              },  // Speedracer: Next Track
86        { 0x1D, X1D | KBDEXT              },  // RControl
87        { 0x20, X20 | KBDEXT              },  // Speedracer: Volume Mute
88        { 0x21, X21 | KBDEXT              },  // Speedracer: Launch App 2
89        { 0x22, X22 | KBDEXT              },  // Speedracer: Media Play/Pause
90        { 0x24, X24 | KBDEXT              },  // Speedracer: Media Stop
91        { 0x2E, X2E | KBDEXT              },  // Speedracer: Volume Down
92        { 0x30, X30 | KBDEXT              },  // Speedracer: Volume Up
93        { 0x32, X32 | KBDEXT              },  // Speedracer: Browser Home
94        { 0x35, X35 | KBDEXT              },  // Numpad Divide
95        { 0x37, X37 | KBDEXT              },  // Snapshot
96        { 0x38, X38 | KBDEXT              },  // RMenu
97        { 0x47, X47 | KBDEXT              },  // Home
98        { 0x48, X48 | KBDEXT              },  // Up
99        { 0x49, X49 | KBDEXT              },  // Prior
100        { 0x4B, X4B | KBDEXT              },  // Left
101        { 0x4D, X4D | KBDEXT              },  // Right
102        { 0x4F, X4F | KBDEXT              },  // End
103        { 0x50, X50 | KBDEXT              },  // Down
104        { 0x51, X51 | KBDEXT              },  // Next
105        { 0x52, X52 | KBDEXT              },  // Insert
106        { 0x53, X53 | KBDEXT              },  // Delete
107        { 0x5B, X5B | KBDEXT              },  // Left Win
108        { 0x5C, X5C | KBDEXT              },  // Right Win
109        { 0x5D, X5D | KBDEXT              },  // Application
110        { 0x5F, X5F | KBDEXT              },  // Speedracer: Sleep
111        { 0x65, X65 | KBDEXT              },  // Speedracer: Browser Search
112        { 0x66, X66 | KBDEXT              },  // Speedracer: Browser Favorites
113        { 0x67, X67 | KBDEXT              },  // Speedracer: Browser Refresh
114        { 0x68, X68 | KBDEXT              },  // Speedracer: Browser Stop
115        { 0x69, X69 | KBDEXT              },  // Speedracer: Browser Forward
116        { 0x6A, X6A | KBDEXT              },  // Speedracer: Browser Back
117        { 0x6B, X6B | KBDEXT              },  // Speedracer: Launch App 1
118        { 0x6C, X6C | KBDEXT              },  // Speedracer: Launch Mail
119        { 0x6D, X6D | KBDEXT              },  // Speedracer: Launch Media Selector
120        { 0x1C, X1C | KBDEXT              },  // Numpad Enter
121        { 0x46, X46 | KBDEXT              },  // Break (Ctrl + Pause)
122        { 0,      0                       }
123};
124
125static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = {
126        { 0x1D, Y1D                       },  // Pause
127        { 0   ,   0                       }
128};
129
130/***************************************************************************\
131* aVkToBits[]  - map Virtual Keys to Modifier Bits
132*
133* See kbd.h for a full description.
134*
135* German Keyboard has only three shifter keys:
136*     SHIFT (L & R) affects alphabnumeric keys,
137*     CTRL  (L & R) is used to generate control characters
138*     ALT   (L & R) used for generating characters by number with numpad
139\***************************************************************************/
140static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = {
141    { VK_SHIFT    ,   KBDSHIFT     },
142    { VK_CONTROL  ,   KBDCTRL      },   
143        { VK_MENU     ,   KBDALT       },
144        { VK_KANA     ,   KBDKANA          },
145        { 0           ,   0            }
146};
147
148/***************************************************************************\
149* aModification[]  - map character modifier bits to modification number
150*
151* See kbd.h for a full description.
152*
153\***************************************************************************/
154static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = {
155    &aVkToBits[0],
156    14,
157    {
158        //  Modifier NEO
159        //  Ebene 1 - nix
160        //  Ebene 2 - Shift
161        //  Ebene 3 - Kana
162        //  Ebene 4 - AltGr
163        //  Ebene 5 - Kana+Shift
164        //  Ebene 6 - AltGr+Kana
165        // 
166        //  Modification# //  Keys Pressed
167    //  ============= // =============
168        0,              // 0000
169        1,              // 0001 Shift
170        6,              // 0010 Strg
171        7,              // 0011 Shift + Strg
172        SHFT_INVALID,   // 0100 Menu
173        SHFT_INVALID,   // 0101 Shift + Menu
174        3,                              // 0110 Strg + Menu
175                SHFT_INVALID,   // 0111 Shift + Strg + Menu
176                2,                              // 1000 Kana
177                4,              // 1001 Shift + Kana
178                SHFT_INVALID,   // 1010 Strg + Kana
179                SHFT_INVALID,   // 1011 Shift + Strg + Kana
180                SHFT_INVALID,   // 1100 Menu + Kana
181                SHFT_INVALID,   // 1101 Shift + Menu + Kana
182                5                               // 1110 Menu + Strg + Kana
183               
184        }
185};
186
187
188/***************************************************************************\
189*
190* aVkToWch2[]  - Virtual Key to WCHAR translation for 2 shift states
191* aVkToWch3[]  - Virtual Key to WCHAR translation for 3 shift states
192* aVkToWch4[]  - Virtual Key to WCHAR translation for 4 shift states
193* aVkToWch5[]  - Virtual Key to WCHAR translation for 5 shift states
194* aVkToWch6[]  - Virtual Key to WCHAR translation for 6 shift states
195* aVkToWch7[]  - Virtual Key to WCHAR translation for 7 shift states
196* aVkToWch8[]  - Virtual Key to WCHAR translation for 8 shift states
197* aVkToWch9[]  - Virtual Key to WCHAR translation for 9 shift states
198*
199* Table attributes: Unordered Scan, null-terminated
200*
201* Search this table for an entry with a matching Virtual Key to find the
202* corresponding unshifted and shifted WCHAR characters.
203*
204* Special values for VirtualKey (column 1)
205*     0xff          - dead chars for the previous entry
206*     0             - terminate the list
207*
208* Special values for Attributes (column 2)
209*     CAPLOK bit    - CAPS-LOCK affect this key like SHIFT
210*
211* Special values for wch[*] (column 3 & 4)
212*     WCH_NONE      - No character
213*     WCH_DEAD      - Dead Key (diaresis) or invalid (US keyboard has none)
214*     WCH_LGTR      - Ligature (generates multiple characters)
215*
216\***************************************************************************/
217
218static ALLOC_SECTION_LDATA VK_TO_WCHARS2 aVkToWch2[] = {
219//                              |                |    Shift      |
220//                              |===========|=========|
221{VK_DECIMAL             ,0      ,','      ,','      },
222{0              ,0      ,0        ,0        }
223};
224
225static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = {
226//                                                      |                       |   SHIFT               |   KANA                   |  ALT+CTL             |
227//                                                      |                       |===============|================|===============|
228{VK_ADD                 ,0                      ,'+'            ,'+'            ,0x00b1         ,0x2213         },
229{VK_DIVIDE              ,0                      ,'/'            ,'/'            ,0x00f7         ,0x2215         },
230{VK_MULTIPLY    ,0                      ,'*'            ,'*'            ,0x00d7         ,0x22c5         },
231{VK_SUBTRACT    ,0                      ,'-'            ,'-'            ,WCH_NONE       ,0x2052         },
232{0                              ,0                      ,0                      ,0                      ,0                      ,0                      }
233};                                                               
234
235static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = {
236//                                                      |                       |   SHIFT                 |   KANA                  |  ALT+CTL            |  KANA+Shift      |   ALT+CTL+Kana    |
237//                                                      |                       |===============|================|===============|===============|================|
238{VK_OEM_1               ,0                      ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       },
239{0xff                   ,0                      ,'^'            ,0x030c         ,0x0306         ,0x00b7         ,0x0335         ,0x0323         },
240{'1'                    ,CAPLOK         ,'1'            ,0x00b0         ,0x00B9         ,0x2022         ,0x2640         ,0x00ac         },
241{'3'                    ,CAPLOK         ,'3'            ,0x00a7         ,0x00b3         ,WCH_NONE       ,0x2640         ,0x2227         },
242{'4'                    ,CAPLOK         ,'4'            ,0x00bb         ,0x203A         ,WCH_NONE       ,0x2113         ,0x02d4         },
243{'5'                    ,CAPLOK         ,'5'            ,0x00ab         ,0x2039         ,WCH_NONE       ,0x2020         ,0x2221         },
244{'7'                    ,CAPLOK         ,'7'            ,0x0024         ,0x00a5         ,0x00a4         ,0x03f0         ,0x2209         },
245{'8'                    ,CAPLOK         ,'8'            ,0x201E         ,0x201A         ,0x002F         ,WCH_NONE       ,0x2204         },
246{'9'                    ,CAPLOK         ,'9'            ,0x201C         ,0x2018         ,0x002A         ,WCH_NONE       ,0x2226         },
247{'0'                    ,CAPLOK         ,'0'            ,0x201D         ,0x2019         ,0x002D         ,WCH_NONE       ,0x2205         },
248{VK_OEM_MINUS   ,0                      ,'-'            ,0x2013         ,0x2014         ,0X2011         ,0x00AD         ,0x2227         },
249{VK_OEM_2               ,0                      ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       },
250{0xff                   ,0                      ,0x0301         ,0x0300         ,0x0327         ,0x0307         ,0x0328         ,0x030a         },
251{VK_TAB                 ,0                      ,'\t'           ,'\t'           ,'\t'           ,'\t'           ,'\t'           ,'\t'           },
252{'X'                    ,CAPLOK         ,'x'            ,'X'            ,WCH_NONE       ,WCH_NONE       ,0x03BE         ,0x039E         },
253{'V'                    ,CAPLOK         ,'v'            ,'V'            ,'_'            ,'\b'           ,WCH_NONE       ,0x2259         },
254{'L'                    ,CAPLOK         ,'l'            ,'L'            ,'['            ,WCH_NONE       ,0x03BB         ,0x039b         },
255{'C'                    ,CAPLOK         ,'c'            ,'C'            ,']'            ,0x007f         ,0x03C7         ,0x2102         }, 
256{'W'                    ,CAPLOK         ,'w'            ,'W'            ,0x005E         ,WCH_NONE       ,0x1f7c         ,0x03a9         },
257{'K'                    ,CAPLOK         ,'k'            ,'K'            ,'!'            ,0x00A1         ,0x03BA         ,0x221a         },
258{'H'                    ,CAPLOK         ,'h'            ,'H'            ,'<'            ,'7'            ,0x03C8         ,0x03A8         },
259{'G'                    ,CAPLOK         ,'g'            ,'G'            ,'>'            ,'8'            ,0x03B3         ,0x0393         },
260{'F'                    ,CAPLOK         ,'f'            ,'F'            ,'='            ,'9'            ,0x03C6         ,0x03A6         },
261{'Q'                    ,CAPLOK         ,'q'            ,'Q'            ,'&'            ,'+'            ,0x0278         ,0x211a         },
262{'U'                    ,CAPLOK         ,'u'            ,'U'            ,'\\'           ,WCH_NONE       ,WCH_NONE       ,0x222e         },
263{'I'                    ,CAPLOK         ,'i'            ,'I'            ,'/'            ,WCH_NONE       ,0x03B9         ,0x222b         },
264{'A'                    ,CAPLOK         ,'a'            ,'A'            ,'{'            ,WCH_NONE       ,0x03B1         ,0x2200         },
265{'E'                    ,CAPLOK         ,'e'            ,'E'            ,'}'            ,WCH_NONE       ,0x03B5         ,0x2203         },
266{'O'                    ,CAPLOK         ,'o'            ,'O'            ,'*'            ,WCH_NONE       ,0x03bf         ,0x2208         },
267{'S'                    ,CAPLOK         ,'s'            ,'S'            ,'?'            ,0x00BF         ,0x03C3         ,0x03A3         },
268{'N'                    ,CAPLOK         ,'n'            ,'N'            ,'('            ,'4'            ,0x03BD         ,0x2115         },
269{'R'                    ,CAPLOK         ,'r'            ,'R'            ,')'            ,'5'            ,0x03C1         ,0x211d         },
270{'T'                    ,CAPLOK         ,'t'            ,'T'            ,'-'            ,'6'            ,0x03C4         ,0x2202         },
271{'D'                    ,CAPLOK         ,'d'            ,'D'            ,':'            ,','            ,0x03B4         ,0x0394         },
272{VK_OEM_5               ,CAPLOK         ,0x00FC         ,0x00DC         ,'#'            ,0x001b         ,WCH_NONE       ,0x221d         },
273{VK_OEM_6               ,CAPLOK         ,0x00F6         ,0x00D6         ,'$'            ,'\t'           ,WCH_NONE       ,0x2111         },
274{VK_OEM_7               ,CAPLOK         ,0x00E4         ,0x00C4         ,'|'            ,WCH_NONE       ,0x03B7         ,0x211c         },
275{'P'                    ,CAPLOK         ,'p'            ,'P'            ,'~'            ,'\r'           ,0x03C0         ,0x03A0         },
276{'Z'                    ,CAPLOK         ,'z'            ,'Z'            ,'`'            ,WCH_NONE       ,0x03B6         ,0x2124         },
277{'B'                    ,CAPLOK         ,'b'            ,'B'            ,'+'            ,WCH_NONE       ,0x03B2         ,0x212d         },
278{'M'                    ,CAPLOK         ,'m'            ,'M'            ,'%'            ,'1'            ,0x00b5         ,0x21d4         },
279{VK_OEM_COMMA   ,0                      ,','            ,0x22ee         ,'\''           ,'2'            ,0x03F1         ,0x21d0         },
280{VK_OEM_PERIOD  ,0                      ,'.'            ,0x2026         ,'\"'           ,'3'            ,0x03B8         ,0x0398         },
281{0                              ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      }
282};                                                                 
283
284static ALLOC_SECTION_LDATA VK_TO_WCHARS7 aVkToWch7[] = {
285//                                                      |                       |   SHIFT                 |   KANA                  |  ALT+CTL            |  KANA+Shift       |   ALT+CTL+Kana   |  Control             |
286//                                                      |                       |===============|================|===============|===============|================|===============|
287{VK_OEM_3               ,CAPLOK         ,0x00df         ,0x1E9E         ,0x017F         ,WCH_NONE       ,0x03C2         ,0x018F         ,0x2218         },
288{VK_OEM_4               ,0                      ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,WCH_DEAD       ,0x001d         },
289{0xff                   ,0                      ,0x0303         ,0x0304         ,0x0308         ,0x0337         ,0x030b         ,0x0326         ,WCH_NONE       },
290{'Y'                    ,CAPLOK         ,'y'            ,'Y'            ,'@'            ,WCH_NONE       ,0x03C5         ,0x2207         ,0x001c         },
291{VK_SPACE               ,0              ,' '            ,' '            ,0x00A0         ,'0'            ,' '            ,0x2009         ,' '            },
292{VK_BACK                ,0                      ,'\b'           ,'\b'           ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,0x007f         },
293{VK_ESCAPE              ,0                      ,0x001b         ,0x001b         ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,0x001b         },
294{VK_RETURN              ,0                      ,'\r'           ,'\r'           ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,'\n'           },
295{VK_CANCEL              ,0                      ,0x0003         ,0x0003         ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,WCH_NONE       ,0x0003         },
296{0                              ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      }
297};                                                                 
298
299static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = {
300//                                                      |                       |   SHIFT                 |   KANA                  |  ALT+CTL            |  KANA+Shift       |   ALT+CTL+Kana   |  Control             |  Control+Shift        |
301//                                                      |                       |===============|================|===============|===============|================|===============|===============|
302{'2'                    ,CAPLOK         ,'2'            ,0x2116         ,0x00b2         ,0x2023         ,0x26A5         ,0x2228         ,WCH_NONE       ,0x0000         },
303{'6'                    ,CAPLOK         ,'6'            ,0x20ac         ,0x00Ac         ,0x00a3         ,WCH_NONE       ,0x2225         ,WCH_NONE       ,0x001e         },
304{'J'                    ,CAPLOK         ,'j'            ,'J'            ,';'            ,'.'            ,0x03D1         ,0x2261         ,WCH_NONE       ,0x001f         },
305{0                              ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      ,0                      }
306};                                                                 
307
308// Put this last so that VkKeyScan interprets number characters
309// as coming from the main section of the kbd (aVkToWch2 and
310// aVkToWch5) before considering the numpad (aVkToWch1).
311
312static ALLOC_SECTION_LDATA VK_TO_WCHARS1 aVkToWch1[] = {
313    { VK_NUMPAD0   , 0      ,  '0'   },
314    { VK_NUMPAD1   , 0      ,  '1'   },
315    { VK_NUMPAD2   , 0      ,  '2'   },
316    { VK_NUMPAD3   , 0      ,  '3'   },
317    { VK_NUMPAD4   , 0      ,  '4'   },
318    { VK_NUMPAD5   , 0      ,  '5'   },
319    { VK_NUMPAD6   , 0      ,  '6'   },
320    { VK_NUMPAD7   , 0      ,  '7'   },
321    { VK_NUMPAD8   , 0      ,  '8'   },
322    { VK_NUMPAD9   , 0      ,  '9'   },
323    { 0            , 0      ,  '\0'  }
324};
325
326static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = {
327    {  (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) },
328    {  (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) },
329    {  (PVK_TO_WCHARS1)aVkToWch7, 7, sizeof(aVkToWch7[0]) },
330        {  (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) },
331    {  (PVK_TO_WCHARS1)aVkToWch2, 2, sizeof(aVkToWch2[0]) },
332    {  (PVK_TO_WCHARS1)aVkToWch1, 1, sizeof(aVkToWch1[0]) },
333    {                       NULL, 0, 0                    },
334};
335
336/***************************************************************************\
337* aKeyNames[], aKeyNamesExt[]  - Virtual Scancode to Key Name tables
338*
339* Table attributes: Ordered Scan (by scancode), null-terminated
340*
341* Only the names of Extended, NumPad, Dead and Non-Printable keys are here.
342* (Keys producing printable characters are named by that character)
343\***************************************************************************/
344
345static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = {
346    0x01,    L"ESC",
347    0x0e,    L"R\x00DC" L"CK",
348    0x0f,    L"TABULATOR",
349    0x1c,    L"EINGABE",
350    0x1d,    L"STRG",
351    0x2a,    L"UMSCHALT",
352    0x36,    L"UMSCHALT RECHTS",
353    0x37,    L" (ZEHNERTASTATUR)",
354    0x38,    L"ALT",
355    0x39,    L"LEER",
356    0x3a,    L"FESTSTELL",
357    0x3b,    L"F1",
358    0x3c,    L"F2",
359    0x3d,    L"F3",
360    0x3e,    L"F4",
361    0x3f,    L"F5",
362    0x40,    L"F6",
363    0x41,    L"F7",
364    0x42,    L"F8",
365    0x43,    L"F9",
366    0x44,    L"F10",
367    0x45,    L"PAUSE",
368    0x46,    L"ROLLEN-FESTSTELL",
369    0x47,    L"7 (ZEHNERTASTATUR)",
370    0x48,    L"8 (ZEHNERTASTATUR)",
371    0x49,    L"9 (ZEHNERTASTATUR)",
372    0x4a,    L"- (ZEHNERTASTATUR)",
373    0x4b,    L"4 (ZEHNERTASTATUR)",
374    0x4c,    L"5 (ZEHNERTASTATUR)",
375    0x4d,    L"6 (ZEHNERTASTATUR)",
376    0x4e,    L"+ (ZEHNERTASTATUR)",
377    0x4f,    L"1 (ZEHNERTASTATUR)",
378    0x50,    L"2 (ZEHNERTASTATUR)",
379    0x51,    L"3 (ZEHNERTASTATUR)",
380    0x52,    L"0 (ZEHNERTASTATUR)",
381    0x53,    L"KOMMA (ZEHNERTASTATUR)",
382    0x57,    L"F11",
383    0x58,    L"F12",
384    0   ,    NULL
385};
386
387static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = {
388    0x1c,    L"EINGABE (ZEHNERTASTATUR)",
389    0x1d,    L"STRG-RECHTS",
390    0x35,    L" (ZEHNERTASTATUR)",
391    0x37,    L"DRUCK",
392    0x38,    L"ALT GR",
393    0x45,    L"NUM-FESTSTELL",
394    0x46,    L"UNTBR",
395    0x47,    L"POS1",
396    0x48,    L"NACH-OBEN",
397    0x49,    L"BILD-NACH-OBEN",
398    0x4b,    L"NACH-LINKS",
399    0x4d,    L"NACH-RECHTS",
400    0x4f,    L"ENDE",
401    0x50,    L"NACH-UNTEN",
402    0x51,    L"BILD-NACH-UNTEN",
403    0x52,    L"EINFG",
404    0x53,    L"ENTF",
405    0x54,    L"<00>",
406    0x56,    L"HILFE",
407    0x5b,    L"LINKE WINDOWS",
408    0x5c,    L"RECHTE WINDOWS",
409    0x5d,    L"ANWENDUNG",
410    0   ,    NULL
411};
412
413static ALLOC_SECTION_LDATA DEADKEY_LPWSTR aKeyNamesDead[] = {
414    L"^"                L"ZIRKUMFLEX",
415    L"\x030c"   L"CARON",
416        L"\x0306"       L"BREVIS",
417        L"\x0335"       L"QUERSTRICH",
418        L"\x00b7"       L"DOT_MID",
419        L"\x0323"       L"DOT_BELOW",
420       
421        L"\x0301"       L"AKUT",
422    L"\x0300"   L"GRAVIS",
423        L"\x0327"       L"CEDILLA",
424        L"\x0328"       L"OGONEK",
425        L"\x0307"       L"DOT_ABOVE",
426        L"\x030a"       L"RING",
427       
428        L"\x0303"       L"TILDE",
429        L"\x0304"       L"MAKRON",
430        L"\x0308"       L"DIAERASE",
431        L"\x030b"       L"DOPPEL_AKUT",
432        L"\x0337"       L"SCHRAEGSTRICH",
433        L"\x0326"       L"KOMMA_BELOW",
434
435
436    NULL
437};
438
439static ALLOC_SECTION_LDATA DEADKEY aDeadKey[] = {
440
441// Anfang der Taste links neben der 1
442        DEADTRANS( L'1'   , L'^'   , 0x00b9 , 0x0000), //ZIRKUMFLEX
443        DEADTRANS( L'2'   , L'^'   , 0x00b2 , 0x0000),
444        DEADTRANS( L'3'   , L'^'   , 0x00b3 , 0x0000),
445    DEADTRANS( L'A'   , L'^'   , 0x00c2 , 0x0000),     
446    DEADTRANS( L'E'   , L'^'   , 0x00ca , 0x0000),
447    DEADTRANS( L'I'   , L'^'   , 0x00ce , 0x0000),
448    DEADTRANS( L'O'   , L'^'   , 0x00d4 , 0x0000),
449    DEADTRANS( L'U'   , L'^'   , 0x00db , 0x0000),     
450        DEADTRANS( L'a'   , L'^'   , 0x00e2 , 0x0000),
451    DEADTRANS( L'e'   , L'^'   , 0x00ea , 0x0000),
452    DEADTRANS( L'i'   , L'^'   , 0x00ee , 0x0000),
453    DEADTRANS( L'o'   , L'^'   , 0x00f4 , 0x0000),
454    DEADTRANS( L'u'   , L'^'   , 0x00fb , 0x0000),     
455        DEADTRANS( L'C'   , L'^'   , 0x0108 , 0x0000),
456        DEADTRANS( L'c'   , L'^'   , 0x0109 , 0x0000),
457        DEADTRANS( L'G'   , L'^'   , 0x011c , 0x0000),
458        DEADTRANS( L'g'   , L'^'   , 0x011d , 0x0000),
459        DEADTRANS( L'H'   , L'^'   , 0x0124 , 0x0000),
460        DEADTRANS( L'h'   , L'^'   , 0x0125 , 0x0000),
461        DEADTRANS( L'J'   , L'^'   , 0x0134 , 0x0000),
462        DEADTRANS( L'j'   , L'^'   , 0x0135 , 0x0000),
463        DEADTRANS( L'S'   , L'^'   , 0x015c , 0x0000),
464        DEADTRANS( L's'   , L'^'   , 0x015d , 0x0000),
465        DEADTRANS( L'W'   , L'^'   , 0x0174 , 0x0000),
466        DEADTRANS( L'w'   , L'^'   , 0x0175 , 0x0000),
467        DEADTRANS( L'Y'   , L'^'   , 0x0176 , 0x0000),
468        DEADTRANS( L'y'   , L'^'   , 0x0177 , 0x0000),
469        DEADTRANS( L'Z'   , L'^'   , 0x1e90 , 0x0000),
470        DEADTRANS( L'z'   , L'^'   , 0x1e91 , 0x0000),
471        DEADTRANS( L'1'   , L'^'   , 0x00b9 , 0x0000),
472        DEADTRANS( L'2'   , L'^'   , 0x00b2 , 0x0000),
473        DEADTRANS( L'3'   , L'^'   , 0x00b3 , 0x0000),
474        DEADTRANS( L'4'   , L'^'   , 0x2074 , 0x0000),
475        DEADTRANS( L'5'   , L'^'   , 0x2075     , 0x0000),
476        DEADTRANS( L'6'   , L'^'   , 0x2076     , 0x0000),
477        DEADTRANS( L'7'   , L'^'   , 0x2077     , 0x0000),
478        DEADTRANS( L'8'   , L'^'   , 0x2078     , 0x0000),
479        DEADTRANS( L'9'   , L'^'   , 0x2079     , 0x0000),
480        DEADTRANS( L'0'   , L'^'   , 0x2070 , 0x0000),
481        DEADTRANS( L'+'   , L'^'   , 0x207a , 0x0000),
482        DEADTRANS( L'-'   , L'^'   , 0x207b , 0x0000),
483        DEADTRANS( L'='   , L'^'   , 0x207c , 0x0000),
484        DEADTRANS( L'('   , L'^'   , 0x207d , 0x0000),
485        DEADTRANS( L')'   , L'^'   , 0x207e , 0x0000),
486        DEADTRANS( L'n'   , L'^'   , 0x207f , 0x0000),
487    DEADTRANS( L' '   , L'^'   , L'^'   , 0x0000),
488       
489        DEADTRANS( L'C'   , 0x030c , 0x010c   , 0x0000), //CARON
490        DEADTRANS( L'c'   , 0x030c , 0x010d   , 0x0000), 
491        DEADTRANS( L'D'   , 0x030c , 0x010e   , 0x0000), 
492        DEADTRANS( L'd'   , 0x030c , 0x010f   , 0x0000),
493        DEADTRANS( L'E'   , 0x030c , 0x011a   , 0x0000),
494        DEADTRANS( L'e'   , 0x030c , 0x011b   , 0x0000),
495        DEADTRANS( L'L'   , 0x030c , 0x013d   , 0x0000),
496        DEADTRANS( L'l'   , 0x030c , 0x013e   , 0x0000),
497        DEADTRANS( L'N'   , 0x030c , 0x0147   , 0x0000),
498        DEADTRANS( L'n'   , 0x030c , 0x0148   , 0x0000),
499        DEADTRANS( L'R'   , 0x030c , 0x0158   , 0x0000),
500        DEADTRANS( L'r'   , 0x030c , 0x0159   , 0x0000),
501        DEADTRANS( L'S'   , 0x030c , 0x0160   , 0x0000),
502        DEADTRANS( L's'   , 0x030c , 0x0161   , 0x0000),
503        DEADTRANS( L'T'   , 0x030c , 0x0164   , 0x0000),
504        DEADTRANS( L't'   , 0x030c , 0x0165   , 0x0000),
505        DEADTRANS( L'Z'   , 0x030c , 0x017d   , 0x0000),
506        DEADTRANS( L'z'   , 0x030c , 0x017e   , 0x0000),
507        DEADTRANS( L'A'   , 0x030c , 0x01cd   , 0x0000),
508        DEADTRANS( L'a'   , 0x030c , 0x01ce   , 0x0000),
509        DEADTRANS( L'I'   , 0x030c , 0x01cf   , 0x0000),
510        DEADTRANS( L'i'   , 0x030c , 0x01d0   , 0x0000),
511        DEADTRANS( L'O'   , 0x030c , 0x01d1   , 0x0000),
512        DEADTRANS( L'o'   , 0x030c , 0x01d2   , 0x0000),
513        DEADTRANS( L'U'   , 0x030c , 0x01d3   , 0x0000),
514        DEADTRANS( L'u'   , 0x030c , 0x01d4   , 0x0000),
515        DEADTRANS( L'G'   , 0x030c , 0x01e6   , 0x0000),
516        DEADTRANS( L'g'   , 0x030c , 0x01e7   , 0x0000),
517        DEADTRANS( L'K'   , 0x030c , 0x01e8   , 0x0000),
518        DEADTRANS( L'k'   , 0x030c , 0x01e9   , 0x0000),
519        DEADTRANS( L'j'   , 0x030c , 0x01f0   , 0x0000),
520        DEADTRANS( L'H'   , 0x030c , 0x021e   , 0x0000),
521        DEADTRANS( L'h'   , 0x030c , 0x021f   , 0x0000),
522        DEADTRANS( 0x00fc , 0x030c , 0x01da   , 0x0000),
523        DEADTRANS( 0x00dc , 0x030c , 0x01d9   , 0x0000),
524        DEADTRANS( L' '   , 0x030c , 0x030c   , 0x0000), 
525       
526        DEADTRANS( L'A'   , 0x0306 , 0x0102   , 0x0000),        //BREVIS
527        DEADTRANS( L'a'   , 0x0306 , 0x0103   , 0x0000),
528        DEADTRANS( L'E'   , 0x0306 , 0x0114   , 0x0000),
529        DEADTRANS( L'e'   , 0x0306 , 0x0115   , 0x0000),
530        DEADTRANS( L'G'   , 0x0306 , 0x011e   , 0x0000),
531        DEADTRANS( L'g'   , 0x0306 , 0x011f   , 0x0000),
532        DEADTRANS( L'I'   , 0x0306 , 0x012c   , 0x0000),
533        DEADTRANS( L'i'   , 0x0306 , 0x012d   , 0x0000),
534        DEADTRANS( L'O'   , 0x0306 , 0x014e   , 0x0000),
535        DEADTRANS( L'o'   , 0x0306 , 0x014f   , 0x0000),
536        DEADTRANS( L'U'   , 0x0306 , 0x016c   , 0x0000),
537        DEADTRANS( L'u'   , 0x0306 , 0x016d   , 0x0000),
538        DEADTRANS( L' '   , 0x0306 , 0x0306   , 0x0000),
539       
540        DEADTRANS( L'1'   , 0x0335 , 0x2081   , 0x0000),        //QUERSTRICH
541        DEADTRANS( L'2'   , 0x0335 , 0x2082   , 0x0000),
542        DEADTRANS( L'3'   , 0x0335 , 0x2083   , 0x0000),
543        DEADTRANS( L'4'   , 0x0335 , 0x2084   , 0x0000),
544        DEADTRANS( L'5'   , 0x0335 , 0x2085   , 0x0000),
545        DEADTRANS( L'6'   , 0x0335 , 0x2086   , 0x0000),
546        DEADTRANS( L'7'   , 0x0335 , 0x2087   , 0x0000),
547        DEADTRANS( L'8'   , 0x0335 , 0x2088   , 0x0000),
548        DEADTRANS( L'9'   , 0x0335 , 0x2089   , 0x0000),
549        DEADTRANS( L'0'   , 0x0335 , 0x2080   , 0x0000),
550        DEADTRANS( L'+'   , 0x0335 , 0x208a   , 0x0000),
551        DEADTRANS( L'-'   , 0x0335 , 0x208b   , 0x0000),
552        DEADTRANS( L'='   , 0x0335 , 0x208c   , 0x0000),
553        DEADTRANS( L'('   , 0x0335 , 0x208d   , 0x0000),
554        DEADTRANS( L')'   , 0x0335 , 0x208e   , 0x0000),
555        DEADTRANS( L'x'   , 0x0335 , 0x2093   , 0x0000),
556        DEADTRANS( L' '   , 0x0335 , 0x0335   , 0x0000),
557       
558        DEADTRANS( L' '   , 0x00b7 , 0x00b7   , 0x0000),        //DOT_MID
559       
560        DEADTRANS( L'B'   , 0x0323 , 0x1e04   , 0x0000),        //DOT_BELOW
561        DEADTRANS( L'b'   , 0x0323 , 0x1e05   , 0x0000),
562        DEADTRANS( L'D'   , 0x0323 , 0x1e0c   , 0x0000),
563        DEADTRANS( L'd'   , 0x0323 , 0x1e0d   , 0x0000),
564        DEADTRANS( L'H'   , 0x0323 , 0x1e24   , 0x0000),
565        DEADTRANS( L'h'   , 0x0323 , 0x1e25   , 0x0000),
566        DEADTRANS( L'K'   , 0x0323 , 0x1e32   , 0x0000),
567        DEADTRANS( L'k'   , 0x0323 , 0x1e33   , 0x0000),
568        DEADTRANS( L'L'   , 0x0323 , 0x1e36   , 0x0000),
569        DEADTRANS( L'l'   , 0x0323 , 0x1e37   , 0x0000),
570        DEADTRANS( L'M'   , 0x0323 , 0x1e42   , 0x0000),
571        DEADTRANS( L'm'   , 0x0323 , 0x1e43   , 0x0000),
572        DEADTRANS( L'N'   , 0x0323 , 0x1e46   , 0x0000),
573        DEADTRANS( L'n'   , 0x0323 , 0x1e47   , 0x0000),
574        DEADTRANS( L'R'   , 0x0323 , 0x1e5a   , 0x0000),
575        DEADTRANS( L'r'   , 0x0323 , 0x1e5b   , 0x0000),
576        DEADTRANS( L'S'   , 0x0323 , 0x1e62   , 0x0000),
577        DEADTRANS( L's'   , 0x0323 , 0x1e63   , 0x0000),
578        DEADTRANS( L'T'   , 0x0323 , 0x1e6c   , 0x0000),
579        DEADTRANS( L't'   , 0x0323 , 0x1e6d   , 0x0000),
580        DEADTRANS( L'V'   , 0x0323 , 0x1e7e   , 0x0000),
581        DEADTRANS( L'v'   , 0x0323 , 0x1e7f   , 0x0000),
582        DEADTRANS( L'W'   , 0x0323 , 0x1e88   , 0x0000),
583        DEADTRANS( L'w'   , 0x0323 , 0x1e89   , 0x0000),
584        DEADTRANS( L'Z'   , 0x0323 , 0x1e92   , 0x0000),
585        DEADTRANS( L'z'   , 0x0323 , 0x1e93   , 0x0000),
586        DEADTRANS( L'A'   , 0x0323 , 0x1ea0   , 0x0000),
587        DEADTRANS( L'a'   , 0x0323 , 0x1ea1   , 0x0000),
588        DEADTRANS( L'E'   , 0x0323 , 0x1eb8   , 0x0000),
589        DEADTRANS( L'e'   , 0x0323 , 0x1eb9   , 0x0000),
590        DEADTRANS( L'I'   , 0x0323 , 0x1eca   , 0x0000),
591        DEADTRANS( L'i'   , 0x0323 , 0x1ecb   , 0x0000),
592        DEADTRANS( L'O'   , 0x0323 , 0x1ecc   , 0x0000),
593        DEADTRANS( L'o'   , 0x0323 , 0x1ecd   , 0x0000),
594        DEADTRANS( L'Y'   , 0x0323 , 0x1ef4   , 0x0000),
595        DEADTRANS( L'y'   , 0x0323 , 0x1ef5   , 0x0000),
596        DEADTRANS( L' '   , 0x0323 , 0x0323   , 0x0000),
597// Ende der Taste links neben der 1
598// Anfang der Tasten zwei rechts neben der 0
599    DEADTRANS( L'a'   , 0x0301 , 0x00e1 , 0x0000),      //AKUT
600    DEADTRANS( L'e'   , 0x0301 , 0x00e9 , 0x0000),
601    DEADTRANS( L'i'   , 0x0301 , 0x00ed , 0x0000),
602    DEADTRANS( L'o'   , 0x0301 , 0x00f3 , 0x0000),
603    DEADTRANS( L'u'   , 0x0301 , 0x00fa , 0x0000),
604    DEADTRANS( L'y'   , 0x0301 , 0x00fd , 0x0000),
605    DEADTRANS( L'A'   , 0x0301 , 0x00c1 , 0x0000),
606    DEADTRANS( L'E'   , 0x0301 , 0x00c9 , 0x0000),
607    DEADTRANS( L'I'   , 0x0301 , 0x00cd , 0x0000),
608    DEADTRANS( L'O'   , 0x0301 , 0x00d3 , 0x0000),
609    DEADTRANS( L'U'   , 0x0301 , 0x00da , 0x0000),
610    DEADTRANS( L'Y'   , 0x0301 , 0x00dd , 0x0000),
611        DEADTRANS( L'C'   , 0x0301 , 0x0106 , 0x0000),
612    DEADTRANS( L'c'   , 0x0301 , 0x0106 , 0x0000),
613        DEADTRANS( L'L'   , 0x0301 , 0x0139 , 0x0000),
614    DEADTRANS( L'l'   , 0x0301 , 0x013a , 0x0000),
615        DEADTRANS( L'N'   , 0x0301 , 0x0143 , 0x0000),
616    DEADTRANS( L'n'   , 0x0301 , 0x0144 , 0x0000),
617        DEADTRANS( L'R'   , 0x0301 , 0x0154 , 0x0000),
618    DEADTRANS( L'r'   , 0x0301 , 0x0155 , 0x0000),
619        DEADTRANS( L'S'   , 0x0301 , 0x015a , 0x0000),
620    DEADTRANS( L's'   , 0x0301 , 0x015b , 0x0000),
621        DEADTRANS( L'Z'   , 0x0301 , 0x0179 , 0x0000),
622    DEADTRANS( L'z'   , 0x0301 , 0x017a , 0x0000),
623        DEADTRANS( 0x00fc , 0x0301 , 0x01d8 , 0x0000),
624        DEADTRANS( 0x00dc , 0x0301 , 0x01d7 , 0x0000),
625        DEADTRANS( L'G'   , 0x0301 , 0x01f4 , 0x0000),
626    DEADTRANS( L'g'   , 0x0301 , 0x01f5 , 0x0000),
627        DEADTRANS( L'K'   , 0x0301 , 0x1e30 , 0x0000),
628    DEADTRANS( L'k'   , 0x0301 , 0x1e31 , 0x0000),
629        DEADTRANS( L'M'   , 0x0301 , 0x1e3e , 0x0000),
630    DEADTRANS( L'm'   , 0x0301 , 0x1e3f , 0x0000),
631        DEADTRANS( L'P'   , 0x0301 , 0x1e54 , 0x0000),
632    DEADTRANS( L'p'   , 0x0301 , 0x1e55 , 0x0000),
633        DEADTRANS( L'W'   , 0x0301 , 0x1e82 , 0x0000),
634    DEADTRANS( L'w'   , 0x0301 , 0x1e83 , 0x0000),
635        DEADTRANS( L' '   , 0x0301 , 0x0301 , 0x0000),
636
637    DEADTRANS( L'a'   , 0x0300 , 0x00e0 , 0x0000),      //GRAVIS
638    DEADTRANS( L'e'   , 0x0300 , 0x00e8 , 0x0000),
639    DEADTRANS( L'i'   , 0x0300 , 0x00ec , 0x0000),
640    DEADTRANS( L'o'   , 0x0300 , 0x00f2 , 0x0000),
641    DEADTRANS( L'u'   , 0x0300 , 0x00f9 , 0x0000),
642    DEADTRANS( L'A'   , 0x0300 , 0x00c0 , 0x0000),
643    DEADTRANS( L'E'   , 0x0300 , 0x00c8 , 0x0000),
644    DEADTRANS( L'I'   , 0x0300 , 0x00cc , 0x0000),
645    DEADTRANS( L'O'   , 0x0300 , 0x00d2 , 0x0000),
646    DEADTRANS( L'U'   , 0x0300 , 0x00d9 , 0x0000),
647    DEADTRANS( 0x00dc , 0x0300 , 0x01db , 0x0000),
648        DEADTRANS( 0x00fc , 0x0300 , 0x01dc , 0x0000),
649        DEADTRANS( L'N'   , 0x0300 , 0x01f8 , 0x0000),
650        DEADTRANS( L'n'   , 0x0300 , 0x01f9 , 0x0000),
651        DEADTRANS( L'W'   , 0x0300 , 0x1e80 , 0x0000),
652        DEADTRANS( L'w'   , 0x0300 , 0x1e81 , 0x0000),
653        DEADTRANS( L'Y'   , 0x0300 , 0x1ef2 , 0x0000),
654        DEADTRANS( L'y'   , 0x0300 , 0x1ef3 , 0x0000),
655        DEADTRANS( L' '   , 0x0300 , 0x0300 , 0x0000),
656       
657        DEADTRANS( L'C'   , 0x0327 , 0x00c7 , 0x0000),  //CEDILLA
658        DEADTRANS( L'c'   , 0x0327 , 0x00e7 , 0x0000),
659        DEADTRANS( L'G'   , 0x0327 , 0x0122 , 0x0000),
660        DEADTRANS( L'g'   , 0x0327 , 0x0123 , 0x0000),
661        DEADTRANS( L'K'   , 0x0327 , 0x0136 , 0x0000),
662        DEADTRANS( L'k'   , 0x0327 , 0x0137 , 0x0000),
663        DEADTRANS( L'L'   , 0x0327 , 0x013b , 0x0000),
664        DEADTRANS( L'l'   , 0x0327 , 0x013c , 0x0000),
665        DEADTRANS( L'N'   , 0x0327 , 0x0145 , 0x0000),
666        DEADTRANS( L'n'   , 0x0327 , 0x0146 , 0x0000),
667        DEADTRANS( L'R'   , 0x0327 , 0x0156 , 0x0000),
668        DEADTRANS( L'r'   , 0x0327 , 0x0157 , 0x0000),
669        DEADTRANS( L'S'   , 0x0327 , 0x015e , 0x0000),
670        DEADTRANS( L's'   , 0x0327 , 0x015f , 0x0000),
671        DEADTRANS( L'T'   , 0x0327 , 0x0162 , 0x0000),
672        DEADTRANS( L't'   , 0x0327 , 0x0163 , 0x0000),
673        DEADTRANS( L'E'   , 0x0327 , 0x0228 , 0x0000),
674        DEADTRANS( L'e'   , 0x0327 , 0x0229 , 0x0000),
675        DEADTRANS( L'D'   , 0x0327 , 0x1e10 , 0x0000),
676        DEADTRANS( L'd'   , 0x0327 , 0x1e11 , 0x0000),
677        DEADTRANS( L'H'   , 0x0327 , 0x1e28 , 0x0000),
678        DEADTRANS( L'h'   , 0x0327 , 0x1e29 , 0x0000),
679        DEADTRANS( L' '   , 0x0327 , 0x0327 , 0x0000),
680               
681        DEADTRANS( L'A'   , 0x0328 , 0x0104 , 0x0000),  //OGONEK
682        DEADTRANS( L'a'   , 0x0328 , 0x0105 , 0x0000),
683        DEADTRANS( L'E'   , 0x0328 , 0x0118 , 0x0000),
684        DEADTRANS( L'e'   , 0x0328 , 0x0119 , 0x0000),
685        DEADTRANS( L'I'   , 0x0328 , 0x012e , 0x0000),
686        DEADTRANS( L'i'   , 0x0328 , 0x012f , 0x0000),
687        DEADTRANS( L'U'   , 0x0328 , 0x0172 , 0x0000),
688        DEADTRANS( L'u'   , 0x0328 , 0x0173 , 0x0000),
689        DEADTRANS( L'O'   , 0x0328 , 0x01ea , 0x0000),
690        DEADTRANS( L'o'   , 0x0328 , 0x01eb , 0x0000),
691        DEADTRANS( L' '   , 0x0328 , 0x0328 , 0x0000),
692       
693        DEADTRANS( L'C'   , 0x0307 , 0x010a , 0x0000),  //DOT_ABOVE
694        DEADTRANS( L'c'   , 0x0307 , 0x010b , 0x0000),
695        DEADTRANS( L'E'   , 0x0307 , 0x0116 , 0x0000),
696        DEADTRANS( L'e'   , 0x0307 , 0x0117 , 0x0000),
697        DEADTRANS( L'G'   , 0x0307 , 0x0120 , 0x0000),
698        DEADTRANS( L'g'   , 0x0307 , 0x0121 , 0x0000),
699        DEADTRANS( L'I'   , 0x0307 , 0x0130 , 0x0000),
700        DEADTRANS( L'i'   , 0x0307 , 0x0131 , 0x0000),
701        DEADTRANS( L'Z'   , 0x0307 , 0x017b , 0x0000),
702        DEADTRANS( L'z'   , 0x0307 , 0x017c , 0x0000),
703        DEADTRANS( L'A'   , 0x0307 , 0x0226 , 0x0000),
704        DEADTRANS( L'a'   , 0x0307 , 0x0227 , 0x0000),
705        DEADTRANS( L'O'   , 0x0307 , 0x022e , 0x0000),
706        DEADTRANS( L'o'   , 0x0307 , 0x022f , 0x0000),
707        DEADTRANS( L'B'   , 0x0307 , 0x1e02 , 0x0000),
708        DEADTRANS( L'b'   , 0x0307 , 0x1e03 , 0x0000),
709        DEADTRANS( L'D'   , 0x0307 , 0x1e0a , 0x0000),
710        DEADTRANS( L'd'   , 0x0307 , 0x1e0b , 0x0000),
711        DEADTRANS( L'F'   , 0x0307 , 0x1e1e , 0x0000),
712        DEADTRANS( L'f'   , 0x0307 , 0x1e1f , 0x0000),
713        DEADTRANS( L'H'   , 0x0307 , 0x1e22 , 0x0000),
714        DEADTRANS( L'h'   , 0x0307 , 0x1e23 , 0x0000),
715        DEADTRANS( L'M'   , 0x0307 , 0x1e40 , 0x0000),
716        DEADTRANS( L'm'   , 0x0307 , 0x1e41 , 0x0000),
717        DEADTRANS( L'N'   , 0x0307 , 0x1e44 , 0x0000),
718        DEADTRANS( L'n'   , 0x0307 , 0x1e45 , 0x0000),
719        DEADTRANS( L'P'   , 0x0307 , 0x1e56 , 0x0000),
720        DEADTRANS( L'p'   , 0x0307 , 0x1e57 , 0x0000),
721        DEADTRANS( L'R'   , 0x0307 , 0x1e58 , 0x0000),
722        DEADTRANS( L'r'   , 0x0307 , 0x1e59 , 0x0000),
723        DEADTRANS( L'S'   , 0x0307 , 0x1e60 , 0x0000),
724        DEADTRANS( L's'   , 0x0307 , 0x1e61 , 0x0000),
725        DEADTRANS( L'T'   , 0x0307 , 0x1e6a , 0x0000),
726        DEADTRANS( L't'   , 0x0307 , 0x1e6b , 0x0000),
727        DEADTRANS( L'W'   , 0x0307 , 0x1e86 , 0x0000),
728        DEADTRANS( L'w'   , 0x0307 , 0x1e87 , 0x0000),
729        DEADTRANS( L'X'   , 0x0307 , 0x1e8a , 0x0000),
730        DEADTRANS( L'x'   , 0x0307 , 0x1e8b , 0x0000),
731        DEADTRANS( L'Y'   , 0x0307 , 0x1e8e , 0x0000),
732        DEADTRANS( L'y'   , 0x0307 , 0x1e8f , 0x0000),
733        DEADTRANS( L' '   , 0x0307 , 0x0307 , 0x0000),
734       
735        DEADTRANS( L'E'   , 0x030a , 0x0116 , 0x0000),  //RING
736        DEADTRANS( L'e'   , 0x030a , 0x030a , 0x0000),
737        DEADTRANS( L'e'   , 0x030a , 0x030a , 0x0000),
738       
739       
740        DEADTRANS( L'e'   , 0x030a , 0x030a , 0x0000),
741       
742       
743       
744       
745       
746       
747       
748       
749       
750       
751// Ende der Tasten zwei rechts neben der 0
752//Fehlt noch viel :(   
753    0, 0
754};
755
756
757static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
758    /*
759     * Modifier keys
760     */
761    &CharModifiers,
762
763    /*
764     * Characters tables
765     */
766    aVkToWcharTable,
767
768    /*
769     * Diacritics
770     */
771    aDeadKey,
772
773    /*
774     * Names of Keys
775     */
776    aKeyNames,
777    aKeyNamesExt,
778    aKeyNamesDead,
779
780    /*
781     * Scan codes to Virtual Keys
782     */
783    ausVK,
784    sizeof(ausVK) / sizeof(ausVK[0]),
785    aE0VscToVk,
786    aE1VscToVk,
787
788    /*
789     * Locale-specific special processing
790     */
791    MAKELONG(KLLF_ALTGR, KBD_VERSION),
792
793    /*
794     * Ligatures
795     */
796   0,
797   0,
798    NULL
799};
800
801PKBDTABLES KbdLayerDescriptor(VOID)
802{
803    return &KbdTables;
804}
Hinweis: Hilfe zum Repository-Browser finden Sie in TracBrowser.