ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

kbdsg.c
Go to the documentation of this file.
00001 /*
00002  * ReactOS German (Switzerland) ASCII Keyboard layout
00003  * Copyright (C) 2005 ReactOS
00004  * License: LGPL, see: LGPL.txt
00005  *
00006  * Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php
00007  * and http://www.win.tue.nl/~aeb/linux/kbd/scancodes-1.html
00008  * and http://www.unicode.org/charts/
00009  */
00010 
00011 #include <windows.h>
00012 #include <ndk/kbd.h>
00013 
00014 #ifdef _M_IA64
00015 #define ROSDATA static __declspec(allocate(".data"))
00016 #else
00017 #ifdef _MSC_VER
00018 #pragma data_seg(".data")
00019 #define ROSDATA static
00020 #else
00021 #define ROSDATA static __attribute__((section(".data")))
00022 #endif
00023 #endif
00024 
00025 #define VK_EMPTY  0xff   /* The non-existent VK */
00026 
00027 #define KNUMS     KBDNUMPAD|KBDSPECIAL /* Special + number pad */
00028 #define KMEXT     KBDEXT|KBDMULTIVK    /* Multi + ext */
00029 
00030 ROSDATA USHORT scancode_to_vk[] = {
00031   /* Numbers Row */
00032   /* - 00 - */
00033   /* 1 ...         2 ...         3 ...         4 ... */
00034   VK_EMPTY,     VK_ESCAPE,    '1',          '2',
00035   '3',          '4',          '5',          '6',
00036   '7',          '8',          '9',          '0',
00037   VK_OEM_4, VK_OEM_6,  VK_BACK,
00038   /* - 0f - */
00039   /* First Letters Row */
00040   VK_TAB,       'Q',          'W',          'E',
00041   'R',          'T',          'Z',          'U',
00042   'I',          'O',          'P',
00043   VK_OEM_1,     VK_OEM_PLUS,     VK_RETURN,
00044   /* - 1d - */
00045   /* Second Letters Row */
00046   VK_LCONTROL,
00047   'A',          'S',          'D',          'F',
00048   'G',          'H',          'J',          'K',
00049   'L',          VK_OEM_3,     VK_OEM_7,     VK_OEM_5,
00050   /* - 2c - */
00051   /* Third letters row */
00052   VK_LSHIFT,    VK_OEM_2,
00053   'Y',          'X',          'C',          'V',
00054   'B',          'N',          'M',          VK_OEM_COMMA,
00055   VK_OEM_PERIOD, VK_OEM_MINUS,     VK_RSHIFT,
00056   /* - 37 - */
00057   /* Bottom Row */
00058   VK_MULTIPLY,  VK_LMENU,     VK_SPACE,   VK_CAPITAL,
00059 
00060   /* - 3b - */
00061   /* F-Keys */
00062   VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6,
00063   VK_F7, VK_F8, VK_F9, VK_F10,
00064   /* - 45 - */
00065   /* Locks */
00066   VK_NUMLOCK | KMEXT,
00067   VK_SCROLL | KBDMULTIVK,
00068   /* - 47 - */
00069   /* Number-Pad */
00070   VK_HOME | KNUMS,      VK_UP | KNUMS,         VK_PRIOR | KNUMS, VK_SUBTRACT,
00071   VK_LEFT | KNUMS,      VK_CLEAR | KNUMS,      VK_RIGHT | KNUMS, VK_ADD,
00072   VK_END | KNUMS,       VK_DOWN | KNUMS,       VK_NEXT | KNUMS,
00073   VK_INSERT | KNUMS,    VK_DELETE | KNUMS,
00074   /* - 54 - */
00075   /* Presumably PrtSc */
00076   VK_SNAPSHOT,
00077   /* - 55 - */
00078   /* Oddities, and the remaining standard F-Keys */
00079   VK_EMPTY,   VK_OEM_102,     VK_F11,       VK_F12,
00080   /* - 59 - */
00081   VK_CLEAR,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* EREOF */
00082   VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* ZOOM */
00083   VK_HELP,
00084   /* - 64 - */
00085   /* Even more F-Keys (for example, NCR keyboards from the early 90's) */
00086   VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20,
00087   VK_F21, VK_F22, VK_F23,
00088   /* - 6f - */
00089   /* Not sure who uses these codes */
00090   VK_EMPTY, VK_EMPTY, VK_EMPTY,
00091   /* - 72 - */
00092   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00093   /* - 76 - */
00094   /* One more f-key */
00095   VK_F24,
00096   /* - 77 - */
00097   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00098   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, /* PA1 */
00099   VK_EMPTY,
00100   /* - 80 - */
00101   0
00102 };
00103 
00104 ROSDATA VSC_VK extcode0_to_vk[] = {
00105   { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
00106   { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
00107   { 0x1D, VK_RCONTROL | KBDEXT },
00108   { 0x20, VK_VOLUME_MUTE | KBDEXT },
00109   { 0x21, VK_LAUNCH_APP2 | KBDEXT },
00110   { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
00111   { 0x24, VK_MEDIA_STOP | KBDEXT },
00112   { 0x2E, VK_VOLUME_DOWN | KBDEXT },
00113   { 0x30, VK_VOLUME_UP | KBDEXT },
00114   { 0x32, VK_BROWSER_HOME | KBDEXT },
00115   { 0x35, VK_DIVIDE | KBDEXT },
00116   { 0x37, VK_SNAPSHOT | KBDEXT },
00117   { 0x38, VK_RMENU | KBDEXT },
00118   { 0x47, VK_HOME | KBDEXT },
00119   { 0x48, VK_UP | KBDEXT },
00120   { 0x49, VK_PRIOR | KBDEXT },
00121   { 0x4B, VK_LEFT | KBDEXT },
00122   { 0x4D, VK_RIGHT | KBDEXT },
00123   { 0x4F, VK_END | KBDEXT },
00124   { 0x50, VK_DOWN | KBDEXT },
00125   { 0x51, VK_NEXT | KBDEXT },
00126   { 0x52, VK_INSERT | KBDEXT },
00127   { 0x53, VK_DELETE | KBDEXT },
00128   { 0x5B, VK_LWIN | KBDEXT },
00129   { 0x5C, VK_RWIN | KBDEXT },
00130   { 0x5D, VK_APPS | KBDEXT },
00131   { 0x5F, VK_SLEEP | KBDEXT },
00132   { 0x65, VK_BROWSER_SEARCH | KBDEXT },
00133   { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
00134   { 0x67, VK_BROWSER_REFRESH | KBDEXT },
00135   { 0x68, VK_BROWSER_STOP | KBDEXT },
00136   { 0x69, VK_BROWSER_FORWARD | KBDEXT },
00137   { 0x6A, VK_BROWSER_BACK | KBDEXT },
00138   { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
00139   { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
00140   { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
00141   { 0x1C, VK_RETURN | KBDEXT },
00142   { 0x46, VK_CANCEL | KBDEXT },
00143   { 0, 0 },
00144 };
00145 
00146 ROSDATA VSC_VK extcode1_to_vk[] = {
00147   { 0x1d, VK_PAUSE},
00148   { 0, 0 },
00149 };
00150 
00151 ROSDATA VK_TO_BIT modifier_keys[] = {
00152   { VK_SHIFT,   KBDSHIFT },
00153   { VK_CONTROL, KBDCTRL },
00154   { VK_MENU,    KBDALT },
00155   { 0,          0 }
00156 };
00157 
00158 ROSDATA MODIFIERS modifier_bits = {
00159   modifier_keys,
00160   6,
00161   { 0, 1, 3, 4, SHFT_INVALID, SHFT_INVALID, 2 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
00162 };
00163 
00164 /* ############################################ */
00165 /* ############################################ */
00166 /* ############################################ */
00167 /* ############################################ */
00168 /* ############################################ */
00169 
00170 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00171   { VK_OEM_5, 0, {0xa7, 0xb0} }, /* § ° */
00172 
00173   /* Normal vs Shifted */
00174   /* The numbers */
00175   /* Ctrl-2 generates NUL */
00176   { 0xff,        0, {0xa7, 0x9B} }, /* what is this for? */
00177   { '4',         0, {'4',  0xE7} },
00178   { '5',         0, {'5',  '%'} },
00179   { '9',         0, {'9',  ')'} },
00180   { '0',         0, {'0',  '='} },
00181 
00182   /* First letter row */
00183   { 'W',         CAPLOK,   {'w', 'W'} },
00184   { 'R',         CAPLOK,   {'r', 'R'} },
00185   { 'T',         CAPLOK,   {'t', 'T'} },
00186   { 'Z',         CAPLOK,   {'z', 'Z'} },
00187   { 'U',         CAPLOK,   {'u', 'U'} },
00188   { 'I',         CAPLOK,   {'i', 'I'} },
00189   { 'O',         CAPLOK,   {'o', 'O'} },
00190   { 'P',         CAPLOK,   {'p', 'P'} },
00191   /* Second letter row */
00192   { 'A',         CAPLOK,   {'a', 'A'} },
00193   { 'S',         CAPLOK,   {'s', 'S'} },
00194   { 'D',         CAPLOK,   {'d', 'D'} },
00195   { 'F',         CAPLOK,   {'f', 'F'} },
00196   { 'G',         CAPLOK,   {'g', 'G'} },
00197   { 'H',         CAPLOK,   {'h', 'H'} },
00198   { 'J',         CAPLOK,   {'j', 'J'} },
00199   { 'K',         CAPLOK,   {'k', 'K'} },
00200   { 'L',         CAPLOK,   {'l', 'L'} },
00201   /* Third letter row */
00202   { 'Y',         CAPLOK,   {'y', 'Y'} },
00203   { 'X',         CAPLOK,   {'x', 'X'} },
00204   { 'V',         CAPLOK,   {'v', 'V'} },
00205   { 'B',         CAPLOK,   {'b', 'B'} },
00206   { 'N',         CAPLOK,   {'n', 'N'} },
00207 
00208   /* Specials */
00209   { VK_OEM_COMMA,  0, {',', ';'} },
00210   { VK_OEM_PERIOD, 0, {'.', ':'} },
00211   { VK_OEM_MINUS,  0, {'-', '_'} },
00212   { VK_DECIMAL,    0, {'.', '.'} },
00213   { VK_TAB,        0, {'\t', '\t'} },
00214   { VK_ADD,        0, {'+', '+'} },
00215   { VK_DIVIDE,     0, {0x2f, 0x2f} }, /* '/' */
00216   { VK_MULTIPLY,   0, {'*', '*'} },
00217   { VK_SUBTRACT,   0, {'-', '-'} },
00218   { 0, 0 }
00219 };
00220 
00221 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00222   /* Normal, Shifted, Alt Gr */
00223   /* Legacy (telnet-style) ascii escapes */
00224   { VK_OEM_4, 0, {'\''     , '?'     , WCH_DEAD} },          /* ' ? ´ */
00225       { 0xff, 0,  {WCH_NONE, WCH_NONE, 0xb4} },
00226   { 'Q', CAPLOK, {'q', 'Q', '@'} },
00227   { 'C', CAPLOK, {'c', 'C', 0xa9} },    /* c C Copyright-Sign */
00228   { 'E', CAPLOK, {'e', 'E', 0x20ac} }, /* e E € */
00229   { 'M', CAPLOK, {'m', 'M', 0xb5} },   /* m M mu-Sign */
00230   { VK_OEM_102, 0, {'<', '>', '\\'} },
00231   { 0,0 }
00232 };
00233 
00234 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00235   /* Normal, Shifted, Alt Gr, C-S-x */
00236   /* Legacy Ascii generators */
00237   { VK_BACK, 0, {'\b', '\b', WCH_NONE, 0x7f} },
00238   { VK_ESCAPE, 0, {0x1b, 0x1b, WCH_NONE, 0x1b} },
00239   { VK_RETURN, 0, {'\r', '\r', WCH_NONE, '\n'} },
00240   { VK_SPACE, 0, {' ', ' ', WCH_NONE, ' '} },
00241   { VK_CANCEL, 0, {0x03, 0x03, WCH_NONE, 0x03} },
00242   { 0, 0 }
00243 };
00244 
00245 ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
00246   /* Normal, Shifted, Alt Gr, Ctrl */
00247   { '1', 0, {'1', '+',  '|',  WCH_NONE, 0x00} },
00248   { '2', 0, {'2', '\"', '@',  WCH_NONE, 0x00} },
00249   { '3', 0, {'3', '*',  '#',  WCH_NONE, 0x00} },
00250   { '6', 0, {'6', '&',  0xac, WCH_NONE, 0x00} },
00251   { '7', 0, {'7', '/',  0xa6, WCH_NONE, 0x00} },
00252   { '8', 0, {'8', '(',  0xa2, WCH_NONE, 0x00} },
00253   { VK_OEM_1, KBDCTRL, {0xfc, 0xe8, 0x5b, 0Xdc, 0xc8} },                    /*    ü è [ Ü È   */
00254   { VK_OEM_2, 0, {0x24, 0xa3, 0x7d, WCH_NONE, 0x00} },                    /*    $ £ }    */
00255   { VK_OEM_3, KBDCTRL, {0xf6, 0xe9, WCH_NONE, 0xd6, 0xc9} },                     /* ö é Ö É*/
00256   { VK_OEM_6, 0, {WCH_DEAD, WCH_DEAD, WCH_DEAD,  WCH_NONE, 0x00} },       /*    ^ ` ~    */
00257       { 0xff, 0, {0x5e    , 0x27    , 0x7e     , WCH_NONE, 0x00} },
00258   { VK_OEM_7, KBDCTRL, {0xe4, 0xe0, 0x7b, 0xc4, 0xc0} },   /* ä à { Ä À */
00259   { VK_OEM_PLUS, 0, {WCH_DEAD, 0x21    , 0x5D    , WCH_NONE, 0x00} },    /*    ¨ ! ]    */
00260          { 0xff, 0, {0xa8    , WCH_NONE, WCH_NONE, WCH_NONE, 0x00} },
00261   { 0, 0 }
00262 };
00263 
00264 ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
00265   { VK_DECIMAL, 0, {'.'} }, /* I have no idea why this has to be like this. Shouldn't it be a "."? */
00266   { VK_NUMPAD0, 0, {'0'} },
00267   { VK_NUMPAD1, 0, {'1'} },
00268   { VK_NUMPAD2, 0, {'2'} },
00269   { VK_NUMPAD3, 0, {'3'} },
00270   { VK_NUMPAD4, 0, {'4'} },
00271   { VK_NUMPAD5, 0, {'5'} },
00272   { VK_NUMPAD6, 0, {'6'} },
00273   { VK_NUMPAD7, 0, {'7'} },
00274   { VK_NUMPAD8, 0, {'8'} },
00275   { VK_NUMPAD9, 0, {'9'} },
00276 //  { VK_BACK,    0, '\010' },
00277   { 0,0 }
00278 };
00279 
00280 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00281 
00282 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
00283   vk_master(3,key_to_chars_3mod),
00284   vk_master(4,key_to_chars_4mod),
00285   vk_master(5,key_to_chars_5mod),
00286   vk_master(2,key_to_chars_2mod),
00287   vk_master(1,keypad_numbers),
00288   { 0,0,0 }
00289 };
00290 
00291 ROSDATA VSC_LPWSTR key_names[] = {
00292   { 0x00, L"" },
00293   { 0x01, L"Esc" },
00294   { 0x0e, L"R\x00fc" L"ck" },
00295   { 0x0f, L"Tabulator" },
00296   { 0x1c, L"Eingabe" },
00297   { 0x1d, L"Ctrl" },
00298   { 0x2a, L"Umschalt Links" },
00299   { 0x36, L"Umschalt Rechts" },
00300   { 0x37, L" (Zehnertastatur)" },
00301   { 0x38, L"Alt" },
00302   { 0x39, L"Leer" },
00303   { 0x3a, L"CAPLOK Lock" },
00304   { 0x3b, L"F1" },
00305   { 0x3c, L"F2" },
00306   { 0x3d, L"F3" },
00307   { 0x3e, L"F4" },
00308   { 0x3f, L"F5" },
00309   { 0x40, L"F6" },
00310   { 0x41, L"F7" },
00311   { 0x42, L"F8" },
00312   { 0x43, L"F9" },
00313   { 0x44, L"F10" },
00314   { 0x45, L"Pause" },
00315   { 0x46, L"Rollen-Feststell" },
00316   { 0x47, L"7 (Zehnertastatur)" },
00317   { 0x48, L"8 (Zehnertastatur)" },
00318   { 0x49, L"9 (Zehnertastatur)" },
00319   { 0x4a, L"- (Zehnertastatur)" },
00320   { 0x4b, L"4 (Zehnertastatur)" },
00321   { 0x4c, L"5 (Zehnertastatur)" },
00322   { 0x4d, L"6 (Zehnertastatur)" },
00323   { 0x4e, L"+ (Zehnertastatur)" },
00324   { 0x4f, L"1 (Zehnertastatur)" },
00325   { 0x50, L"2 (Zehnertastatur)" },
00326   { 0x51, L"3 (Zehnertastatur)" },
00327   { 0x52, L"0 (Zehnertastatur)" },
00328   { 0x53, L"Punkt (Zehnertastatur)" },
00329   { 0x54, L"Sys Req" },
00330   { 0x57, L"F11" },
00331   { 0x58, L"F12" },
00332   { 0x7c, L"F13" },
00333   { 0x7d, L"F14" },
00334   { 0x7e, L"F15" },
00335   { 0x7f, L"F16" },
00336   { 0x80, L"F17" },
00337   { 0x81, L"F18" },
00338   { 0x82, L"F19" },
00339   { 0x83, L"F20" },
00340   { 0x84, L"F21" },
00341   { 0x85, L"F22" },
00342   { 0x86, L"F23" },
00343   { 0x87, L"F24" },
00344   { 0, NULL },
00345 };
00346 
00347 ROSDATA VSC_LPWSTR extended_key_names[] = {
00348   { 0x1c, L"Eingabe (Zehnertastatur" },
00349   { 0x1d, L"Strg-Rechts" },
00350   { 0x35, L" (Zehnertastatur)" },
00351   { 0x37, L"Druck" },
00352   { 0x38, L"Alt Gr" },
00353   { 0x45, L"Num-Feststell" },
00354   { 0x46, L"Untbr" },
00355   { 0x47, L"Pos1" },
00356   { 0x48, L"Nach-Oben" },
00357   { 0x49, L"Bild-Nach-Oben" },
00358   { 0x4b, L"Nach-Links" },
00359 //{ 0x4c, L"Center" },
00360   { 0x4d, L"Nach-Rechts" },
00361   { 0x4f, L"Ende" },
00362   { 0x50, L"Nach-Unten" },
00363   { 0x51, L"Bild-Nach-Unten" },
00364   { 0x52, L"Einfg" },
00365   { 0x53, L"Entf" },
00366   { 0x54, L"<ReactOS>" },
00367   { 0x55, L"Hilfe" },
00368   { 0x56, L"Linke <ReactOS>" },
00369   { 0x5b, L"Rechte <ReactOS>" },
00370   { 0, NULL },
00371 };
00372 
00373 ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
00374     L"\x00b4"   L"Akut",
00375     L"`"    L"Gravis",
00376     L"^"    L"Zirkumflex",
00377     NULL
00378 };
00379 
00380 #define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
00381 
00382 ROSDATA DEADKEY dead_key[] = {
00383   { DEADTRANS(L'a', L'^', 0xe2, 0x00) },/* ^ */
00384   { DEADTRANS(L'e', L'^', 0xea, 0x00) },
00385   { DEADTRANS(L'i', L'^', 0xee, 0x00) },
00386   { DEADTRANS(L'o', L'^', 0xf4, 0x00) },
00387   { DEADTRANS(L'u', L'^', 0xfb, 0x00) },
00388   { DEADTRANS(L'A', L'^', 0xc2, 0x00) },
00389   { DEADTRANS(L'E', L'^', 0xca, 0x00) },
00390   { DEADTRANS(L'I', L'^', 0xce, 0x00) },
00391   { DEADTRANS(L'O', L'^', 0xd4, 0x00) },
00392   { DEADTRANS(L'U', L'^', 0xdb, 0x00) },
00393   { DEADTRANS(L' ', L'^', L'^', 0x00) },
00394   { DEADTRANS(L'a', 0xb4, 0xe1, 0x00) }, /* ´ */
00395   { DEADTRANS(L'e', 0xb4, 0xe9, 0x00) },
00396   { DEADTRANS(L'i', 0xb4, 0xed, 0x00) },
00397   { DEADTRANS(L'o', 0xb4, 0xf3, 0x00) },
00398   { DEADTRANS(L'u', 0xb4, 0xfa, 0x00) },
00399   { DEADTRANS(L'y', 0xb4, 0xfd, 0x00) },
00400   { DEADTRANS(L'A', 0xb4, 0xc1, 0x00) },
00401   { DEADTRANS(L'E', 0xb4, 0xc9, 0x00) },
00402   { DEADTRANS(L'I', 0xb4, 0xcd, 0x00) },
00403   { DEADTRANS(L'O', 0xb4, 0xd3, 0x00) },
00404   { DEADTRANS(L'U', 0xb4, 0xda, 0x00) },
00405   { DEADTRANS(L'Y', 0xb4, 0xdd, 0x00) },
00406   { DEADTRANS(L' ', 0xb4, 0xb4, 0x00) },
00407   { DEADTRANS(L'a', L'`', 0xe0, 0x00) }, /* ` */
00408   { DEADTRANS(L'e', L'`', 0xe8, 0x00) },
00409   { DEADTRANS(L'i', L'`', 0xec, 0x00) },
00410   { DEADTRANS(L'o', L'`', 0xf2, 0x00) },
00411   { DEADTRANS(L'u', L'`', 0xf9, 0x00) },
00412   { DEADTRANS(L'A', L'`', 0xc0, 0x00) },
00413   { DEADTRANS(L'E', L'`', 0xc8, 0x00) },
00414   { DEADTRANS(L'I', L'`', 0xcc, 0x00) },
00415   { DEADTRANS(L'O', L'`', 0xd2, 0x00) },
00416   { DEADTRANS(L'U', L'`', 0xd9, 0x00) },
00417   { DEADTRANS(L' ', L'`', L'`', 0x00) },
00418   { DEADTRANS(L' ', 0xa8, 0xa8, 0x00) }, /* ¨ */
00419   { DEADTRANS(L'a', 0xa8, 0xe4, 0x00) },
00420   { DEADTRANS(L'e', 0xa8, 0xeb, 0x00) },
00421   { DEADTRANS(L'i', 0xa8, 0xef, 0x00) },
00422   { DEADTRANS(L'o', 0xa8, 0xf6, 0x00) },
00423   { DEADTRANS(L'u', 0xa8, 0xfc, 0x00) },
00424   { DEADTRANS(L'y', 0xa8, 0xff, 0x00) },
00425   { DEADTRANS(L'A', 0xa8, 0xc4, 0x00) },
00426   { DEADTRANS(L'E', 0xa8, 0xcb, 0x00) },
00427   { DEADTRANS(L'I', 0xa8, 0xcf, 0x00) },
00428   { DEADTRANS(L'O', 0xa8, 0xd6, 0x00) },
00429   { DEADTRANS(L'U', 0xa8, 0xdc, 0x00) },
00430   { DEADTRANS(L' ', 0x7e, 0x7e, 0x00) }, /* ~ */
00431   { DEADTRANS(L'a', 0x7e, 0xe3, 0x00) },
00432   { DEADTRANS(L'o', 0x7e, 0xf5, 0x00) },
00433   { DEADTRANS(L'n', 0x7e, 0xf1, 0x00) },
00434   { DEADTRANS(L'A', 0x7e, 0xc3, 0x00) },
00435   { DEADTRANS(L'O', 0x7e, 0xd5, 0x00) },
00436   { DEADTRANS(L'N', 0x7e, 0xd1, 0x00) },
00437   { 0, 0 }
00438 };
00439 
00440 /* Finally, the master table */
00441 ROSDATA KBDTABLES keyboard_layout_table = {
00442   /* modifier assignments */
00443   &modifier_bits,
00444 
00445   /* character from vk tables */
00446   vk_to_wchar_master_table,
00447 
00448   /* diacritical marks -- currently implemented by wine code */
00449   dead_key,
00450 
00451   /* Key names */
00452   (VSC_LPWSTR *)key_names,
00453   (VSC_LPWSTR *)extended_key_names,
00454   dead_key_names, /* Dead key names */
00455 
00456   /* scan code to virtual key maps */
00457   scancode_to_vk,
00458   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00459   extcode0_to_vk,
00460   extcode1_to_vk,
00461 
00462   MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
00463 
00464   /* Ligatures -- German doesn't have any */
00465   0,
00466   0,
00467   NULL
00468 };
00469 
00470 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
00471   return &keyboard_layout_table;
00472 }
00473 

Generated on Sat May 26 2012 04:20:57 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.