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

kbdcan.c
Go to the documentation of this file.
00001 /*
00002  * ReactOS Canadian Multilingual Standard Keyboard layout
00003  * Copyright (C) 2008 ReactOS
00004  * Author: Dmitry Chapyshev
00005  * License: LGPL, see: LGPL.txt
00006  *
00007  * Thanks to: http://www.barcodeman.com/altek/mule/scandoc.php
00008  * and http://win.tue.nl/~aeb/linux/kbd/scancodes-1.html
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_MINUS, VK_OEM_PLUS,  VK_BACK,
00038   /* - 0f - */
00039   /* First Letters Row */
00040   VK_TAB,       'Q',          'W',          'E',
00041   'R',          'T',          'Y',          'U',
00042   'I',          'O',          'P',
00043   VK_OEM_4,     VK_OEM_6,     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_1,     VK_OEM_7,     VK_OEM_3,
00050   VK_LSHIFT,    VK_OEM_5,
00051   /* - 2c - */
00052   /* Third letters row */
00053   'Z',          'X',          'C',          'V',
00054   'B',          'N',          'M',          VK_OEM_COMMA,
00055   VK_OEM_PERIOD,VK_OEM_2,     VK_RSHIFT | KBDEXT,
00056   /* - 37 - */
00057   /* Bottom Row */
00058   0x26a,  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_OEM_WSCTRL,VK_OEM_FINISH,VK_OEM_JUMP,  VK_EREOF, /* EREOF */
00082   VK_OEM_BACKTAB,    VK_OEM_AUTO,  VK_EMPTY,    VK_ZOOM,            /* 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_OEM_PA3, VK_EMPTY, VK_OEM_RESET,
00091   /* - 72 - */
00092   VK_EMPTY, 0xc1, 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_OEM_PA1, VK_TAB, 0xc2, 0, /* PA1 */
00099   0,
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   { VK_OEM_8,   8 },
00156   { 0,          0 }
00157 };
00158 
00159 ROSDATA MODIFIERS modifier_bits = {
00160   modifier_keys,
00161   9,
00162   { 0, 1, 5, SHFT_INVALID, SHFT_INVALID, SHFT_INVALID, 4, SHFT_INVALID, 2, 3 }
00163 };
00164 
00165 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00166   /*                    Normal  Shifted */
00167   { VK_DECIMAL, 0,  {'.',    '.'} },
00168   { VK_TAB,     0,  {'\t',   '\t'} },
00169   { VK_ADD,     0,  {'+',    '+' } },
00170   { VK_DIVIDE,  0,  {'/',    '/' } },
00171   { VK_MULTIPLY,0,  {'*',    '*' } },
00172   { VK_SUBTRACT,0,  {'-',    '-' } },
00173   { 0, 0 }
00174 };
00175 
00176 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00177   { '2', 0, {'2', '@', 0x00b2} },
00178   { 'K', CAPLOK,   {'k', 'K', 0x0138} },
00179   { 0, 0 }
00180 };
00181 
00182 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00183   { '1',         0,   {'1',      '!',     0x00b9,    0x00a1  } },
00184   { '3',         0,   {'3',      '#',     0x00b3,    0x00a3  } },
00185   { '4',         0,   {'4',      '$',     0x00bc,    0x00a4  } },
00186   { '5',         0,   {'5',      '%',     0x00bd,    0x215c  } },
00187   { '6',         0,   {'6',      '?',     0x00be,    0x215d  } },
00188   { VK_OEM_MINUS,0,   {'-',      '_',     WCH_NONE,  0x00bf  } },
00189   { 'Q',         CAPLOK,     {'q',      'Q',     WCH_NONE,  0x2126  } },
00190   { 'W',         CAPLOK,     {'w',      'W',     0x0142,    0x0141  } },
00191   { 'E',         CAPLOK,     {'e',      'E',     0x0153,    0x0152  } },
00192   { 'R',         CAPLOK,     {'r',      'R',     0x00b6,    0x00ae  } },
00193   { 'T',         CAPLOK,     {'t',      'T',     0x0167,    0x0166  } },
00194   { 'Y',         CAPLOK,     {'y',      'Y',     0x2190,    0x00a5  } },
00195   { 'U',         CAPLOK,     {'u',      'U',     0x2193,    0x2191  } },
00196   { 'I',         CAPLOK,     {'i',      'I',     0x2192,    0x0131  } },
00197   { 'O',         CAPLOK,     {'o',      'O',     0x00f8,    0x00d8  } },
00198   { 'P',         CAPLOK,     {'p',      'P',     0x00fe,    0x00de  } },
00199   { VK_OEM_5,    CAPLOK,     {0x00e0,   0x00c0,  WCH_NONE,  WCH_DEAD} },
00200   { 0xff,        0,   {WCH_NONE, WCH_NONE,WCH_NONE,  0x02d8  } },
00201   { 'A',         CAPLOK,     {'a',      'A',     0x00e6,    0x00c6  } },
00202   { 'S',         CAPLOK,     {'s',      'S',     0x00df,    0x00a7  } },
00203   { 'D',         CAPLOK,     {'d',      'D',     0x00f0,    0x00d0  } },
00204   { 'F',         CAPLOK,     {'f',      'F',     WCH_NONE,  0x00aa  } },
00205   { 'G',         CAPLOK,     {'g',      'G',     0x014b,    0x014a  } },
00206   { 'H',         CAPLOK,     {'h',      'H',     0x0127,    0x0126  } },
00207   { 'J',         CAPLOK,     {'j',      'J',     0x0133,    0x0132  } },
00208   { 'L',         CAPLOK,     {'l',      'L',     0x0140,    0x013f  } },
00209   { VK_OEM_3,    CAPLOK,     {0x00e8,   0x00c8,  WCH_NONE,  WCH_DEAD} },
00210   { 0xff,        0,   {WCH_NONE, WCH_NONE,WCH_NONE,  0x02c7  } },
00211   { 'C',         CAPLOK,     {'c',      'C',     0x00a2,    0x00a9  } },
00212   { 'V',         CAPLOK,     {'v',      'V',     0x201c,    0x2018  } },
00213   { 'B',         CAPLOK,     {'b',      'B',     0x201d,    0x2019  } },
00214   { 'N',         CAPLOK,     {'n',      'N',     0x0149,    0x266a  } },
00215   { 'M',         CAPLOK,     {'m',      'M',     0x00b5,    0x00ba  } },
00216   { VK_OEM_2,    CAPLOK,     {0x00e9,   0x00c9,  WCH_NONE,  WCH_DEAD} },
00217   { 0xff,        0,   {WCH_NONE, WCH_NONE,WCH_NONE,  0x02d9  } },
00218   { VK_OEM_102,  CAPLOK,     {0x00f9,   0x00d9,  WCH_NONE,  0x00a6  } },
00219   { 0, 0 }
00220 };
00221 
00222 ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
00223   { VK_OEM_7,     0,  {'/',      '\\',     WCH_NONE, 0x00ad,  '|'     } },
00224   { '7',          0,  {'7',      '&',      WCH_NONE, 0x215e,  '{'     } },
00225   { '8',          0,  {'8',      '*',      WCH_NONE, 0x2122,  '}'     } },
00226   { '9',          0,  {'9',      '(',      WCH_NONE, 0x00b1,  '['     } },
00227   { '0',          0,  {'0',      ')',      WCH_NONE, WCH_NONE,']'     } },
00228   { VK_OEM_PLUS,  0,  {'=',      '+',      WCH_DEAD, WCH_DEAD,0x00ac  } },
00229   { 0xff,         0,  {WCH_NONE, WCH_NONE, 0x00b8,   0x02db,  WCH_NONE} },
00230   { VK_OEM_4,     0,  {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD,WCH_DEAD} },
00231   { 0xff,         0,  {'^',      0x00a8,   WCH_NONE, 0x02da,  '`'     } },
00232   { VK_OEM_6,     CAPLOK,    {0x00e7,   0x00c7,   '~',      WCH_DEAD,WCH_DEAD} },
00233   { 0xff,         0,  {WCH_NONE, WCH_NONE, WCH_NONE, 0x00af,  '~'     } },
00234   { VK_OEM_1,     0,  {';',      ':',      WCH_DEAD, WCH_DEAD,0x00b0  } },
00235   { 0xff,         0,  {WCH_NONE, WCH_NONE, 0x00b4,   0x02dd,  WCH_NONE} },
00236   { 'Z',          CAPLOK,    {'z',      'Z',      WCH_NONE, WCH_NONE,0x00ab  } },
00237   { 'X',          CAPLOK,    {'x',      'X',      WCH_NONE, WCH_NONE,0x00bb  } },
00238   { VK_OEM_COMMA, 0,  {',',      '\'',     0x2015,   0x00d7,  '<'     } },
00239   { VK_OEM_PERIOD,0,  {'.',      '\"',     WCH_DEAD, 0x00f7,  '>'     } },
00240   { 0xff,         0,  {WCH_NONE ,WCH_NONE, 0x02d9,   WCH_NONE,WCH_NONE} },
00241   { 0, 0 }
00242 };
00243 
00244 ROSDATA VK_TO_WCHARS6 key_to_chars_6mod[] = {
00245   { VK_SPACE,   0, {' ',    ' ',    ' ',      ' ',      0x00a0,   ' '   } },
00246   { VK_BACK,    0, {'\b',   '\b',   WCH_NONE, WCH_NONE, WCH_NONE, 0x007f} },
00247   { VK_ESCAPE,  0, {0x001b, 0x001b, WCH_NONE, WCH_NONE, WCH_NONE, 0x001b} },
00248   { VK_RETURN,  0, {'\r',   '\r',   WCH_NONE, WCH_NONE, WCH_NONE, '\n'  } },
00249   { VK_CANCEL,  0, {0x0003, 0x0003, WCH_NONE, WCH_NONE, WCH_NONE, 0x0003} },
00250   { 0, 0 }
00251 };
00252 
00253 ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
00254   { VK_NUMPAD0, 0, {'0'} },
00255   { VK_NUMPAD1, 0, {'1'} },
00256   { VK_NUMPAD2, 0, {'2'} },
00257   { VK_NUMPAD3, 0, {'3'} },
00258   { VK_NUMPAD4, 0, {'4'} },
00259   { VK_NUMPAD5, 0, {'5'} },
00260   { VK_NUMPAD6, 0, {'6'} },
00261   { VK_NUMPAD7, 0, {'7'} },
00262   { VK_NUMPAD8, 0, {'8'} },
00263   { VK_NUMPAD9, 0, {'9'} },
00264   { 0, 0 }
00265 };
00266 
00267 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00268 
00269 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
00270   vk_master(3,key_to_chars_3mod),
00271   vk_master(4,key_to_chars_4mod),
00272   vk_master(5,key_to_chars_5mod),
00273   vk_master(6,key_to_chars_6mod),
00274   vk_master(2,key_to_chars_2mod),
00275   vk_master(1,keypad_numbers),
00276   { 0,0,0 }
00277 };
00278 
00279 ROSDATA VSC_LPWSTR key_names[] = {
00280   { 0x01, L"Esc" },
00281   { 0x0e, L"Backspace" },
00282   { 0x0f, L"Tab" },
00283   { 0x1c, L"Enter" },
00284   { 0x1d, L"Ctrl" },
00285   { 0x2a, L"Shift" },
00286   { 0x36, L"Right Shift" },
00287   { 0x37, L"Num *" },
00288   { 0x38, L"Alt" },
00289   { 0x39, L"Space" },
00290   { 0x3a, L"CAPLOK Lock" },
00291   { 0x3b, L"F1" },
00292   { 0x3c, L"F2" },
00293   { 0x3d, L"F3" },
00294   { 0x3e, L"F4" },
00295   { 0x3f, L"F5" },
00296   { 0x40, L"F6" },
00297   { 0x41, L"F7" },
00298   { 0x42, L"F8" },
00299   { 0x43, L"F9" },
00300   { 0x44, L"F10" },
00301   { 0x45, L"Pause" },
00302   { 0x46, L"Scroll Lock" },
00303   { 0x47, L"Num 7" },
00304   { 0x48, L"Num 8" },
00305   { 0x49, L"Num 9" },
00306   { 0x4a, L"Num -" },
00307   { 0x4b, L"Num 4" },
00308   { 0x4c, L"Num 5" },
00309   { 0x4d, L"Num 6" },
00310   { 0x4e, L"Num +" },
00311   { 0x4f, L"Num 1" },
00312   { 0x50, L"Num 2" },
00313   { 0x51, L"Num 3" },
00314   { 0x52, L"Num 0" },
00315   { 0x53, L"Num Del" },
00316   { 0x54, L"Sys Req" },
00317   { 0x57, L"F11" },
00318   { 0x58, L"F12" },
00319   { 0x7c, L"F13" },
00320   { 0x7d, L"F14" },
00321   { 0x7e, L"F15" },
00322   { 0x7f, L"F16" },
00323   { 0x80, L"F17" },
00324   { 0x81, L"F18" },
00325   { 0x82, L"F19" },
00326   { 0x83, L"F20" },
00327   { 0x84, L"F21" },
00328   { 0x85, L"F22" },
00329   { 0x86, L"F23" },
00330   { 0x87, L"F24" },
00331   { 0, NULL }
00332 };
00333 
00334 ROSDATA VSC_LPWSTR extended_key_names[] = {
00335   { 0x1c, L"Num Enter" },
00336   { 0x1d, L"Right Control" },
00337   { 0x35, L"Num /" },
00338   { 0x37, L"Prnt Scrn" },
00339   { 0x38, L"Right Alt" },
00340   { 0x45, L"Num Lock" },
00341   { 0x46, L"Break" },
00342   { 0x47, L"Home" },
00343   { 0x48, L"Up" },
00344   { 0x49, L"Page Up" },
00345   { 0x4b, L"Left" },
00346 //{ 0x4c, L"Center" },
00347   { 0x4d, L"Right" },
00348   { 0x4f, L"End" },
00349   { 0x50, L"Down" },
00350   { 0x51, L"Page Down" },
00351   { 0x52, L"Insert" },
00352   { 0x53, L"Delete" },
00353   { 0x54, L"<ReactOS>" },
00354   { 0x56, L"Help" },
00355   { 0x5b, L"Left <ReactOS>" },
00356   { 0x5c, L"Right <ReactOS>" },
00357   { 0x5d, L"Application" },
00358   { 0, NULL }
00359 };
00360 
00361 ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
00362     L"\x00b4"   L"ACCENT AIGU",
00363     L"`"        L"ACCENT GRAVE",
00364     L"^"        L"ACCENT CIRCONFLEXE",
00365     L"\x00a8"   L"TREMA",
00366     L"\x00b8"   L"CEDILLE",
00367     NULL
00368 };
00369 
00370 #define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
00371 
00372 ROSDATA DEADKEY dead_key[] = {
00373    { DEADTRANS(L'a', 0x00b4, 0x00e1, 0x0000) },
00374    { DEADTRANS(L'e', 0x00b4, 0x00e9, 0x0000) },
00375    { DEADTRANS(L'i', 0x00b4, 0x00ed, 0x0000) },
00376    { DEADTRANS(L'o', 0x00b4, 0x00f3, 0x0000) },
00377    { DEADTRANS(L'u', 0x00b4, 0x00fa, 0x0000) },
00378    { DEADTRANS(L'y', 0x00b4, 0x00fd, 0x0000) },
00379    { DEADTRANS(L'A', 0x00b4, 0x00c1, 0x0000) },
00380    { DEADTRANS(L'E', 0x00b4, 0x00c9, 0x0000) },
00381    { DEADTRANS(L'I', 0x00b4, 0x00cd, 0x0000) },
00382    { DEADTRANS(L'O', 0x00b4, 0x00d3, 0x0000) },
00383    { DEADTRANS(L'U', 0x00b4, 0x00da, 0x0000) },
00384    { DEADTRANS(L'Y', 0x00b4, 0x00dd, 0x0000) },
00385    { DEADTRANS(L'C', 0x00b4, 0x0106, 0x0000) },
00386    { DEADTRANS(L'c', 0x00b4, 0x0107, 0x0000) },
00387    { DEADTRANS(L'L', 0x00b4, 0x0139, 0x0000) },
00388    { DEADTRANS(L'l', 0x00b4, 0x013a, 0x0000) },
00389    { DEADTRANS(L'N', 0x00b4, 0x0143, 0x0000) },
00390    { DEADTRANS(L'n', 0x00b4, 0x0144, 0x0000) },
00391    { DEADTRANS(L'R', 0x00b4, 0x0154, 0x0000) },
00392    { DEADTRANS(L'r', 0x00b4, 0x0155, 0x0000) },
00393    { DEADTRANS(L'S', 0x00b4, 0x015a, 0x0000) },
00394    { DEADTRANS(L's', 0x00b4, 0x015b, 0x0000) },
00395    { DEADTRANS(L'Z', 0x00b4, 0x0179, 0x0000) },
00396    { DEADTRANS(L'z', 0x00b4, 0x017a, 0x0000) },
00397    { DEADTRANS(L' ', 0x00b4, 0x00b4, 0x0000) },
00398 
00399    { DEADTRANS(L'a', L'`',   0x00e0, 0x0000) },
00400    { DEADTRANS(L'e', L'`',   0x00e8, 0x0000) },
00401    { DEADTRANS(L'i', L'`',   0x00ec, 0x0000) },
00402    { DEADTRANS(L'o', L'`',   0x00f2, 0x0000) },
00403    { DEADTRANS(L'u', L'`',   0x00f9, 0x0000) },
00404    { DEADTRANS(L'A', L'`',   0x00c0, 0x0000) },
00405    { DEADTRANS(L'E', L'`',   0x00c8, 0x0000) },
00406    { DEADTRANS(L'I', L'`',   0x00cc, 0x0000) },
00407    { DEADTRANS(L'O', L'`',   0x00d2, 0x0000) },
00408    { DEADTRANS(L'U', L'`',   0x00d9, 0x0000) },
00409    { DEADTRANS(L' ', L'`',   L'`',   0x0000) },
00410 
00411    { DEADTRANS(L'a', L'^',   0x00e2, 0x0000) },
00412    { DEADTRANS(L'e', L'^',   0x00ea, 0x0000) },
00413    { DEADTRANS(L'i', L'^',   0x00ee, 0x0000) },
00414    { DEADTRANS(L'o', L'^',   0x00f4, 0x0000) },
00415    { DEADTRANS(L'u', L'^',   0x00fb, 0x0000) },
00416    { DEADTRANS(L'A', L'^',   0x00c2, 0x0000) },
00417    { DEADTRANS(L'E', L'^',   0x00ca, 0x0000) },
00418    { DEADTRANS(L'I', L'^',   0x00ce, 0x0000) },
00419    { DEADTRANS(L'O', L'^',   0x00d4, 0x0000) },
00420    { DEADTRANS(L'U', L'^',   0x00db, 0x0000) },
00421    { DEADTRANS(L'C', L'^',   0x0108, 0x0000) },
00422    { DEADTRANS(L'c', L'^',   0x0109, 0x0000) },
00423    { DEADTRANS(L'G', L'^',   0x011c, 0x0000) },
00424    { DEADTRANS(L'g', L'^',   0x011d, 0x0000) },
00425    { DEADTRANS(L'H', L'^',   0x0124, 0x0000) },
00426    { DEADTRANS(L'h', L'^',   0x0125, 0x0000) },
00427    { DEADTRANS(L'J', L'^',   0x0134, 0x0000) },
00428    { DEADTRANS(L'j', L'^',   0x0135, 0x0000) },
00429    { DEADTRANS(L'S', L'^',   0x015c, 0x0000) },
00430    { DEADTRANS(L's', L'^',   0x015d, 0x0000) },
00431    { DEADTRANS(L'W', L'^',   0x0174, 0x0000) },
00432    { DEADTRANS(L'w', L'^',   0x0175, 0x0000) },
00433    { DEADTRANS(L'Y', L'^',   0x0176, 0x0000) },
00434    { DEADTRANS(L'y', L'^',   0x0177, 0x0000) },
00435    { DEADTRANS(L' ', L'^',   L'^',   0x0000) },
00436 
00437    { DEADTRANS(L'c', 0x00b8, 0x00e7, 0x0000) },
00438    { DEADTRANS(L'g', 0x00b8, 0x0123, 0x0000) },
00439    { DEADTRANS(L'k', 0x00b8, 0x0137, 0x0000) },
00440    { DEADTRANS(L'l', 0x00b8, 0x013c, 0x0000) },
00441    { DEADTRANS(L'n', 0x00b8, 0x0146, 0x0000) },
00442    { DEADTRANS(L'r', 0x00b8, 0x0157, 0x0000) },
00443    { DEADTRANS(L's', 0x00b8, 0x015f, 0x0000) },
00444    { DEADTRANS(L't', 0x00b8, 0x0163, 0x0000) },
00445    { DEADTRANS(L'C', 0x00b8, 0x00c7, 0x0000) },
00446    { DEADTRANS(L'G', 0x00b8, 0x0122, 0x0000) },
00447    { DEADTRANS(L'K', 0x00b8, 0x0136, 0x0000) },
00448    { DEADTRANS(L'L', 0x00b8, 0x013b, 0x0000) },
00449    { DEADTRANS(L'N', 0x00b8, 0x0145, 0x0000) },
00450    { DEADTRANS(L'R', 0x00b8, 0x0156, 0x0000) },
00451    { DEADTRANS(L'S', 0x00b8, 0x015e, 0x0000) },
00452    { DEADTRANS(L'T', 0x00b8, 0x0162, 0x0000) },
00453    { DEADTRANS(L' ', 0x00b8, 0x00b8, 0x0000) },
00454 
00455    { DEADTRANS(L'a', 0x00a8, 0x00e4, 0x0000) },
00456    { DEADTRANS(L'e', 0x00a8, 0x00eb, 0x0000) },
00457    { DEADTRANS(L'i', 0x00a8, 0x00ef, 0x0000) },
00458    { DEADTRANS(L'o', 0x00a8, 0x00f6, 0x0000) },
00459    { DEADTRANS(L'u', 0x00a8, 0x00fc, 0x0000) },
00460    { DEADTRANS(L'y', 0x00a8, 0x00ff, 0x0000) },
00461    { DEADTRANS(L'A', 0x00a8, 0x00c4, 0x0000) },
00462    { DEADTRANS(L'E', 0x00a8, 0x00cb, 0x0000) },
00463    { DEADTRANS(L'I', 0x00a8, 0x00cf, 0x0000) },
00464    { DEADTRANS(L'O', 0x00a8, 0x00d6, 0x0000) },
00465    { DEADTRANS(L'U', 0x00a8, 0x00dc, 0x0000) },
00466    { DEADTRANS(L'Y', 0x00a8, 0x0178, 0x0000) },
00467    { DEADTRANS(L' ', 0x00a8, 0x00a8, 0x0000) },
00468 
00469    { DEADTRANS(L'a', L'~',   0x00e3, 0x0000) },
00470    { DEADTRANS(L'i', L'~',   0x0129, 0x0000) },
00471    { DEADTRANS(L'n', L'~',   0x00f1, 0x0000) },
00472    { DEADTRANS(L'o', L'~',   0x00f5, 0x0000) },
00473    { DEADTRANS(L'u', L'~',   0x0169, 0x0000) },
00474    { DEADTRANS(L'A', L'~',   0x00c3, 0x0000) },
00475    { DEADTRANS(L'I', L'~',   0x0128, 0x0000) },
00476    { DEADTRANS(L'N', L'~',   0x00d1, 0x0000) },
00477    { DEADTRANS(L'O', L'~',   0x00d5, 0x0000) },
00478    { DEADTRANS(L'U', L'~',   0x0168, 0x0000) },
00479    { DEADTRANS(L' ', L'~',   L'~',   0x0000) },
00480 
00481    { DEADTRANS(L'c', 0x02c7, 0x010d, 0x0000) },
00482    { DEADTRANS(L'd', 0x02c7, 0x010f, 0x0000) },
00483    { DEADTRANS(L'e', 0x02c7, 0x011b, 0x0000) },
00484    { DEADTRANS(L'l', 0x02c7, 0x013e, 0x0000) },
00485    { DEADTRANS(L'n', 0x02c7, 0x0148, 0x0000) },
00486    { DEADTRANS(L'r', 0x02c7, 0x0159, 0x0000) },
00487    { DEADTRANS(L's', 0x02c7, 0x0161, 0x0000) },
00488    { DEADTRANS(L't', 0x02c7, 0x0165, 0x0000) },
00489    { DEADTRANS(L'z', 0x02c7, 0x017e, 0x0000) },
00490    { DEADTRANS(L'C', 0x02c7, 0x010c, 0x0000) },
00491    { DEADTRANS(L'D', 0x02c7, 0x010e, 0x0000) },
00492    { DEADTRANS(L'E', 0x02c7, 0x011a, 0x0000) },
00493    { DEADTRANS(L'L', 0x02c7, 0x013d, 0x0000) },
00494    { DEADTRANS(L'N', 0x02c7, 0x0147, 0x0000) },
00495    { DEADTRANS(L'R', 0x02c7, 0x0158, 0x0000) },
00496    { DEADTRANS(L'S', 0x02c7, 0x0160, 0x0000) },
00497    { DEADTRANS(L'T', 0x02c7, 0x0164, 0x0000) },
00498    { DEADTRANS(L'Z', 0x02c7, 0x017d, 0x0000) },
00499    { DEADTRANS(L' ', 0x02c7, 0x02c7, 0x0000) },
00500 
00501    { DEADTRANS(L'a', 0x02d8, 0x0103, 0x0000) },
00502    { DEADTRANS(L'g', 0x02d8, 0x011f, 0x0000) },
00503    { DEADTRANS(L'u', 0x02d8, 0x016d, 0x0000) },
00504    { DEADTRANS(L'A', 0x02d8, 0x0102, 0x0000) },
00505    { DEADTRANS(L'G', 0x02d8, 0x011e, 0x0000) },
00506    { DEADTRANS(L'U', 0x02d8, 0x016c, 0x0000) },
00507    { DEADTRANS(L' ', 0x02d8, 0x02d8, 0x0000) },
00508 
00509    { DEADTRANS(L'o', 0x02dd, 0x0151, 0x0000) },
00510    { DEADTRANS(L'u', 0x02dd, 0x0171, 0x0000) },
00511    { DEADTRANS(L'O', 0x02dd, 0x0150, 0x0000) },
00512    { DEADTRANS(L'U', 0x02dd, 0x0170, 0x0000) },
00513    { DEADTRANS(L' ', 0x02dd, 0x02dd, 0x0000) },
00514 
00515    { DEADTRANS(L'a', 0x02da, 0x00e5, 0x0000) },
00516    { DEADTRANS(L'u', 0x02da, 0x016f, 0x0000) },
00517    { DEADTRANS(L'A', 0x02da, 0x00c5, 0x0000) },
00518    { DEADTRANS(L'U', 0x02da, 0x016e, 0x0000) },
00519    { DEADTRANS(L' ', 0x02da, 0x02da, 0x0000) },
00520 
00521    { DEADTRANS(L'c', 0x02d9, 0x010b, 0x0000) },
00522    { DEADTRANS(L'e', 0x02d9, 0x0117, 0x0000) },
00523    { DEADTRANS(L'g', 0x02d9, 0x0121, 0x0000) },
00524    { DEADTRANS(L'z', 0x02d9, 0x0017, 0x0000) },
00525    { DEADTRANS(L'C', 0x02d9, 0x010a, 0x0000) },
00526    { DEADTRANS(L'E', 0x02d9, 0x0116, 0x0000) },
00527    { DEADTRANS(L'G', 0x02d9, 0x0120, 0x0000) },
00528    { DEADTRANS(L'I', 0x02d9, 0x0130, 0x0000) },
00529    { DEADTRANS(L'Z', 0x02d9, 0x017b, 0x0000) },
00530    { DEADTRANS(L' ', 0x02d9, 0x02d9, 0x0000) },
00531 
00532    { DEADTRANS(L'a', 0x00af, 0x0101, 0x0000) },
00533    { DEADTRANS(L'e', 0x00af, 0x0113, 0x0000) },
00534    { DEADTRANS(L'i', 0x00af, 0x012b, 0x0000) },
00535    { DEADTRANS(L'o', 0x00af, 0x014d, 0x0000) },
00536    { DEADTRANS(L'u', 0x00af, 0x016b, 0x0000) },
00537    { DEADTRANS(L'A', 0x00af, 0x0100, 0x0000) },
00538    { DEADTRANS(L'E', 0x00af, 0x0112, 0x0000) },
00539    { DEADTRANS(L'I', 0x00af, 0x012a, 0x0000) },
00540    { DEADTRANS(L'O', 0x00af, 0x014c, 0x0000) },
00541    { DEADTRANS(L'U', 0x00af, 0x016a, 0x0000) },
00542    { DEADTRANS(L' ', 0x00af, 0x00af, 0x0000) },
00543 
00544    { DEADTRANS(L'a', 0x02db, 0x0105, 0x0000) },
00545    { DEADTRANS(L'e', 0x02db, 0x0119, 0x0000) },
00546    { DEADTRANS(L'i', 0x02db, 0x012f, 0x0000) },
00547    { DEADTRANS(L'u', 0x02db, 0x0173, 0x0000) },
00548    { DEADTRANS(L'A', 0x02db, 0x0104, 0x0000) },
00549    { DEADTRANS(L'E', 0x02db, 0x0118, 0x0000) },
00550    { DEADTRANS(L'I', 0x02db, 0x012e, 0x0000) },
00551    { DEADTRANS(L'U', 0x02db, 0x0172, 0x0000) },
00552    { DEADTRANS(L' ', 0x02db, 0x02db, 0x0000) },
00553    { 0, 0 }
00554 };
00555 
00556 /* Finally, the master table */
00557 ROSDATA KBDTABLES keyboard_layout_table = {
00558   /* modifier assignments */
00559   &modifier_bits,
00560 
00561   /* character from vk tables */
00562   vk_to_wchar_master_table,
00563 
00564   /* diacritical marks */
00565   dead_key,
00566 
00567   /* Key names */
00568   (VSC_LPWSTR *)key_names,
00569   (VSC_LPWSTR *)extended_key_names,
00570   dead_key_names, /* Dead key names */
00571 
00572   /* scan code to virtual key maps */
00573   scancode_to_vk,
00574   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00575   extcode0_to_vk,
00576   extcode1_to_vk,
00577 
00578   MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
00579 
00580   0,
00581   0,
00582   NULL
00583 };
00584 
00585 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
00586   return &keyboard_layout_table;
00587 }
00588 
00589 INT WINAPI
00590 DllMain(
00591   PVOID hinstDll,
00592   ULONG dwReason,
00593   PVOID reserved)
00594 {
00595   return 1;
00596 }
00597 

Generated on Sat May 26 2012 04:20:54 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.