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

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

Generated on Wed May 23 2012 04:20:21 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.