ReactOS Fundraising Campaign 2012
 
€ 4,060 / € 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

kbdno.c
Go to the documentation of this file.
00001 /*
00002  * Norwegian Keyboard layout
00003  * Copyright (C) 2004 ReactOS Development Team
00004  */
00005 #include <windows.h>
00006 #include <ndk/kbd.h>
00007 
00008 #ifdef _M_IA64
00009 #define ROSDATA static __declspec(allocate(".data"))
00010 #else
00011 #ifdef _MSC_VER
00012 #pragma data_seg(".data")
00013 #define ROSDATA static
00014 #else
00015 #define ROSDATA static __attribute__((section(".data")))
00016 #endif
00017 #endif
00018 
00019 #define VK_EMPTY  0xff   /* The non-existent VK */
00020 
00021 #define KNUMS     KBDNUMPAD|KBDSPECIAL /* Special + number pad */
00022 #define KMEXT     KBDEXT|KBDMULTIVK    /* Multi + ext */
00023 
00024 ROSDATA USHORT scancode_to_vk[] = {
00025   /* Numbers Row */
00026   /* - 00 - */
00027   /* 1 ...         2 ...         3 ...         4 ... */
00028   VK_EMPTY,     VK_ESCAPE,    '1',          '2',
00029   '3',          '4',          '5',          '6',
00030   '7',          '8',          '9',          '0',
00031   VK_OEM_PLUS,  VK_OEM_4,     VK_BACK,
00032   /* - 0f - */
00033   /* First Letters Row */
00034   VK_TAB,       'Q',          'W',          'E',
00035   'R',          'T',          'Y',          'U',
00036   'I',          'O',          'P',
00037   VK_OEM_6,     VK_OEM_1,     VK_RETURN,
00038   /* - 1d - */
00039   /* Second Letters Row */
00040   VK_LCONTROL,
00041   'A',          'S',          'D',          'F',
00042   'G',          'H',          'J',          'K',
00043   'L',          VK_OEM_3,     VK_OEM_7,     VK_OEM_5,
00044   VK_LSHIFT,    VK_OEM_2,
00045   /* - 2c - */
00046   /* Third letters row */
00047   'Z',          'X',          'C',          'V',
00048   'B',          'N',          'M',          VK_OEM_COMMA,
00049   VK_OEM_PERIOD,VK_OEM_MINUS, VK_RSHIFT,
00050   /* - 37 - */
00051   /* Bottom Row */
00052   VK_MULTIPLY,  VK_LMENU,     VK_SPACE,     VK_CAPITAL,
00053 
00054   /* - 3b - */
00055   /* F-Keys */
00056   VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6,
00057   VK_F7, VK_F8, VK_F9, VK_F10,
00058   /* - 45 - */
00059   /* Locks */
00060   VK_NUMLOCK | KMEXT,
00061   VK_SCROLL | KBDMULTIVK,
00062   /* - 47 - */
00063   /* Number-Pad */
00064   VK_HOME | KNUMS,      VK_UP | KNUMS,         VK_PRIOR | KNUMS, VK_SUBTRACT,
00065   VK_LEFT | KNUMS,      VK_CLEAR | KNUMS,      VK_RIGHT | KNUMS, VK_ADD,
00066   VK_END | KNUMS,       VK_DOWN | KNUMS,       VK_NEXT | KNUMS,
00067   VK_INSERT | KNUMS,    VK_DELETE | KNUMS,
00068   /* - 54 - */
00069   /* Presumably PrtSc */
00070   VK_SNAPSHOT,
00071   /* - 55 - */
00072   /* Oddities, and the remaining standard F-Keys */
00073   VK_EMPTY,     VK_OEM_102,   VK_F11,       VK_F12,
00074   /* - 59 - */
00075   VK_CLEAR,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* EREOF */
00076   VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* ZOOM */
00077   VK_HELP,
00078   /* - 64 - */
00079   /* Even more F-Keys (for example, NCR keyboards from the early 90's) */
00080   VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20,
00081   VK_F21, VK_F22, VK_F23,
00082   /* - 6f - */
00083   /* Not sure who uses these codes */
00084   VK_EMPTY, VK_EMPTY, VK_EMPTY,
00085   /* - 72 - */
00086   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00087   /* - 76 - */
00088   /* One more f-key */
00089   VK_F24,
00090   /* - 77 - */
00091   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00092   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, /* PA1 */
00093   VK_EMPTY,
00094   /* - 80 - */
00095   0
00096 };
00097 
00098 ROSDATA VSC_VK extcode0_to_vk[] = {
00099   { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
00100   { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
00101   { 0x1D, VK_RCONTROL | KBDEXT },
00102   { 0x20, VK_VOLUME_MUTE | KBDEXT },
00103   { 0x21, VK_LAUNCH_APP2 | KBDEXT },
00104   { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
00105   { 0x24, VK_MEDIA_STOP | KBDEXT },
00106   { 0x2E, VK_VOLUME_DOWN | KBDEXT },
00107   { 0x30, VK_VOLUME_UP | KBDEXT },
00108   { 0x32, VK_BROWSER_HOME | KBDEXT },
00109   { 0x35, VK_DIVIDE | KBDEXT },
00110   { 0x37, VK_SNAPSHOT | KBDEXT },
00111   { 0x38, VK_RMENU | KBDEXT },
00112   { 0x47, VK_HOME | KBDEXT },
00113   { 0x48, VK_UP | KBDEXT },
00114   { 0x49, VK_PRIOR | KBDEXT },
00115   { 0x4B, VK_LEFT | KBDEXT },
00116   { 0x4D, VK_RIGHT | KBDEXT },
00117   { 0x4F, VK_END | KBDEXT },
00118   { 0x50, VK_DOWN | KBDEXT },
00119   { 0x51, VK_NEXT | KBDEXT },
00120   { 0x52, VK_INSERT | KBDEXT },
00121   { 0x53, VK_DELETE | KBDEXT },
00122   { 0x5B, VK_LWIN | KBDEXT },
00123   { 0x5C, VK_RWIN | KBDEXT },
00124   { 0x5D, VK_APPS | KBDEXT },
00125   { 0x5F, VK_SLEEP | KBDEXT },
00126   { 0x65, VK_BROWSER_SEARCH | KBDEXT },
00127   { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
00128   { 0x67, VK_BROWSER_REFRESH | KBDEXT },
00129   { 0x68, VK_BROWSER_STOP | KBDEXT },
00130   { 0x69, VK_BROWSER_FORWARD | KBDEXT },
00131   { 0x6A, VK_BROWSER_BACK | KBDEXT },
00132   { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
00133   { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
00134   { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
00135   { 0x1C, VK_RETURN | KBDEXT },
00136   { 0x46, VK_CANCEL | KBDEXT },
00137   { 0, 0 },
00138 };
00139 
00140 ROSDATA VSC_VK extcode1_to_vk[] = {
00141   { 0x1d, VK_PAUSE},
00142   { 0, 0 },
00143 };
00144 
00145 ROSDATA VK_TO_BIT modifier_keys[] = {
00146   { VK_SHIFT,   KBDSHIFT },
00147   { VK_CONTROL, KBDCTRL },
00148   { VK_MENU,    KBDALT },
00149   { 0,          0 }
00150 };
00151 
00152 ROSDATA MODIFIERS modifier_bits = {
00153   modifier_keys,
00154   6,
00155   { 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT, MENU, SHIFT + MENU, CTRL + MENU */
00156 };
00157 
00158 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00159   /* Normal vs Shifted */
00160   /* The numbers */
00161   { VK_OEM_5,      0, {'|',     0xa7} }, /* Button to the left of 1.  0xa7=§ */
00162   { '1',           0, {'1',      '!'} },
00163   /* Ctrl-2 generates NUL */
00164   { VK_OEM_PLUS,   0, {'+',      '?'} },
00165   { VK_OEM_6,      CAPLOK,   {0xe5,     0xc5} }, /* Å */
00166 
00167   /* Specials */
00168   { VK_OEM_3,        CAPLOK,   {0xf8,     0xd8} }, /* Ø */
00169   { VK_OEM_7,        CAPLOK,   {0xe6,     0xc6} }, /* Æ */
00170 
00171   { VK_OEM_COMMA,  CAPLOK,   {',',      ';'} },
00172   { VK_OEM_PERIOD, CAPLOK,   {'.',      ':'} },
00173   { VK_OEM_2,        0, {'\'',     '*'} },
00174 
00175   { VK_DECIMAL,    0, {',',      ','} },
00176   { VK_TAB,        0, {'\t',     '\t'} },
00177   { VK_ADD,        0, {'+',      '+'} },
00178   { VK_DIVIDE,     0, {'/',      '/'} },
00179   { VK_MULTIPLY,   0, {'*',      '*'} },
00180   { VK_SUBTRACT,   0, {'-',      '-'} },
00181   { 0, 0 }
00182 };
00183 
00184 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00185   /* Normal, Shifted, Ctrl */
00186 
00187   /* The alphabet */
00188   { 'A',         CAPLOK,   {'a', 'A', 0x01} },
00189   { 'B',         CAPLOK,   {'b', 'B', 0x02} },
00190   { 'C',         CAPLOK,   {'c', 'C', 0x03} },
00191   { 'D',         CAPLOK,   {'d', 'D', 0x04} },
00192   { 'F',         CAPLOK,   {'f', 'F', 0x06} },
00193   { 'G',         CAPLOK,   {'g', 'G', 0x07} },
00194   { 'H',         CAPLOK,   {'h', 'H', 0x08} },
00195   { 'I',         CAPLOK,   {'i', 'I', 0x09} },
00196   { 'J',         CAPLOK,   {'j', 'J', 0x0a} },
00197   { 'K',         CAPLOK,   {'k', 'K', 0x0b} },
00198   { 'L',         CAPLOK,   {'l', 'L', 0x0c} },
00199   { 'M',         CAPLOK,   {'m', 'M', 0x0d} },
00200   { 'N',         CAPLOK,   {'n', 'N', 0x0e} },
00201   { 'O',         CAPLOK,   {'o', 'O', 0x0f} },
00202   { 'P',         CAPLOK,   {'p', 'P', 0x10} },
00203   { 'Q',         CAPLOK,   {'q', 'Q', 0x11} },
00204   { 'R',         CAPLOK,   {'r', 'R', 0x12} },
00205   { 'S',         CAPLOK,   {'s', 'S', 0x13} },
00206   { 'T',         CAPLOK,   {'t', 'T', 0x14} },
00207   { 'U',         CAPLOK,   {'u', 'U', 0x15} },
00208   { 'V',         CAPLOK,   {'v', 'V', 0x16} },
00209   { 'W',         CAPLOK,   {'w', 'W', 0x17} },
00210   { 'X',         CAPLOK,   {'x', 'X', 0x18} },
00211   { 'Y',         CAPLOK,   {'y', 'Y', 0x19} },
00212   { 'Z',         CAPLOK,   {'z', 'Z', 0x1a} },
00213 
00214   /* Legacy (telnet-style) ascii escapes */
00215   { VK_OEM_MINUS, 0, {'-',      '_',      0x1f /* US */} },
00216   { VK_RETURN,    0, {'\r',     '\r',     '\n'} },
00217 
00218   { VK_BACK,      0, {'\b',     '\b',     0x7f} },
00219   { VK_ESCAPE,    0, {0x1b,     0x1b,     0x1b} },
00220   { VK_SPACE,     0, {' ',      ' ',      ' '} },
00221   { VK_CANCEL,    0, {0x03,     0x03,     0x03} },
00222 
00223   { 0,0 }
00224 };
00225 
00226 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00227   /* Normal, Shifted, Ctrl, Ctrl-Alt */
00228   /* Legacy Ascii generators */
00229   { '2',         0, {'2',      '\"',     WCH_NONE, '@'} },
00230   { '3',         0, {'3',      '#',      WCH_NONE, 0x00a3} },
00231   { '4',         0, {'4',      0xa4,     WCH_NONE, '$'} },
00232   { '5',         0, {'5',      '%',      WCH_NONE, 0x20ac} },
00233   { '7',         0, {'7',      '/',      WCH_NONE, '{'} },
00234   { '8',         0, {'8',      '(',      WCH_NONE, '['} },
00235   { '9',         0, {'9',      ')',      WCH_NONE, ']'} },
00236   { '0',         0, {'0',      '=',      WCH_NONE, '}'} },
00237   { VK_OEM_4,    0, {'\\', 0x60, WCH_NONE, 0xb4} }, //VK_OEM_4 is between +? and backspace
00238   { VK_EMPTY ,   0, {0xb4,     '`',      '|',      WCH_NONE} },
00239 
00240   { 'E',         CAPLOK,   {'e',      'E',      0x05, 0x20ac} },
00241   { VK_OEM_1,    0, {WCH_DEAD, WCH_DEAD, WCH_NONE, WCH_DEAD} },
00242   { VK_EMPTY ,   0, {0xa8,     '^',      WCH_NONE, '~'} },
00243 
00244   { 'M',         CAPLOK,   {'m',      'M',      0x0d, 0x00b5} },
00245   { VK_OEM_102,  0, {'<',      '>',      0x001c,   '\\'} },
00246   { 0, 0 }
00247 };
00248 
00249 ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
00250   /* Normal, Shifted, Ctrl, Ctrl-Alt, C-S-x */
00251   { '6', 0, {'6', '&', WCH_NONE, WCH_NONE, 0x1e /* RS */} },
00252   { 0, 0 }
00253 };
00254 
00255 ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
00256   { VK_NUMPAD0, 0, {'0'} },
00257   { VK_NUMPAD1, 0, {'1'} },
00258   { VK_NUMPAD2, 0, {'2'} },
00259   { VK_NUMPAD3, 0, {'3'} },
00260   { VK_NUMPAD4, 0, {'4'} },
00261   { VK_NUMPAD5, 0, {'5'} },
00262   { VK_NUMPAD6, 0, {'6'} },
00263   { VK_NUMPAD7, 0, {'7'} },
00264   { VK_NUMPAD8, 0, {'8'} },
00265   { VK_NUMPAD9, 0, {'9'} },
00266   { VK_DECIMAL, 0, {'.'} },
00267   { 0,0 }
00268 };
00269 
00270 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00271 
00272 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
00273   vk_master(3, key_to_chars_3mod),
00274   vk_master(4, key_to_chars_4mod),
00275   vk_master(5, key_to_chars_5mod),
00276   vk_master(2, key_to_chars_2mod),
00277   vk_master(1, keypad_numbers),
00278   { 0,0,0 }
00279 };
00280 
00281 ROSDATA VSC_LPWSTR key_names[] = {
00282   { 0x00, L"" },
00283   { 0x01, L"ESC" },
00284   { 0x0e, L"TILBAKE" },
00285   { 0x0f, L"TAB" },
00286   { 0x1c, L"ENTER" },
00287   { 0x1d, L"CTRL" },
00288   { 0x2a, L"SHIFT" },
00289   { 0x36, L"H\x00D8YRE SHIFT" },
00290   { 0x37, L"NUM * (Numerisk del)" },
00291   { 0x38, L"ALT" },
00292   { 0x39, L"MELLOMROM" },
00293   { 0x3a, L"CAPLOK LOCK" },
00294   { 0x3b, L"F1" },
00295   { 0x3c, L"F2" },
00296   { 0x3d, L"F3" },
00297   { 0x3e, L"F4" },
00298   { 0x3f, L"F5" },
00299   { 0x40, L"F6" },
00300   { 0x41, L"F7" },
00301   { 0x42, L"F8" },
00302   { 0x43, L"F9" },
00303   { 0x44, L"F10" },
00304   { 0x45, L"PAUSE" },
00305   { 0x46, L"SCROLL LOCK" },
00306   { 0x47, L"7 (Numerisk del)" },
00307   { 0x48, L"8 (Numerisk del)" },
00308   { 0x49, L"9 (Numerisk del)" },
00309   { 0x4a, L"- (Numerisk del)" },
00310   { 0x4b, L"4 (Numerisk del)" },
00311   { 0x4c, L"5 (Numerisk del)" },
00312   { 0x4d, L"6 (Numerisk del)" },
00313   { 0x4e, L"+ (Numerisk del)" },
00314   { 0x4f, L"1 (Numerisk del)" },
00315   { 0x50, L"2 (Numerisk del)" },
00316   { 0x51, L"3 (Numerisk del)" },
00317   { 0x52, L"0 (Numerisk del)" },
00318   { 0x53, L"DESIMAL (Numerisk del)" },
00319   { 0x54, L"SYS REQ" },
00320   { 0x57, L"F11" },
00321   { 0x58, L"F12" },
00322   { 0x7c, L"F13" },
00323   { 0x7d, L"F14" },
00324   { 0x7e, L"F15" },
00325   { 0x7f, L"F16" },
00326   { 0x80, L"F17" },
00327   { 0x81, L"F18" },
00328   { 0x82, L"F19" },
00329   { 0x83, L"F20" },
00330   { 0x84, L"F21" },
00331   { 0x85, L"F22" },
00332   { 0x86, L"F23" },
00333   { 0x87, L"F24" },
00334   { 0, NULL }
00335 };
00336 
00337 ROSDATA VSC_LPWSTR extended_key_names[] = {
00338   { 0x1c, L"ENTER (Numerisk del)" },
00339   { 0x1d, L"H\x00D8YRE CTRL" },
00340   { 0x35, L"DIVISION (Numerisk del)" },
00341   { 0x37, L"PRINT SCREEN" },
00342   { 0x38, L"H\x00D8YRE ALT" },
00343   { 0x45, L"NUM LOCK" },
00344   { 0x46, L"BREAK" },
00345   { 0x47, L"HOME" },
00346   { 0x48, L"PIL OPP" },
00347   { 0x49, L"PAGE UP" },
00348   { 0x4b, L"VENSTRE PIL" },
00349 //{ 0x4c, L"Center" },
00350   { 0x4d, L"H\x00D8YRE PIL" },
00351   { 0x4f, L"END" },
00352   { 0x50, L"PIL NED" },
00353   { 0x51, L"PAGE DOWN" },
00354   { 0x52, L"INS" },
00355   { 0x53, L"DEL" },
00356   { 0x54, L"<ReactOS>" },
00357   { 0x56, L"HJELP" },
00358   { 0x5b, L"VENSTRE <ReactOS>" },
00359   { 0x5c, L"H\x00D8YRE <ReactOS>" },
00360   { 0x5d, L"Program" },
00361   { 0, NULL }
00362 };
00363 
00364 ROSDATA DEADKEY_LPWSTR dead_key_names[] = {
00365     L"\x00a8"   L"Omlyd",
00366     L"\x005e"   L"Cirkumfleks",
00367     L"\x007e"   L"Tilde",
00368     L"\x00b4"   L"Akut",
00369     L"\x0060"   L"Grave",
00370     NULL
00371 };
00372 
00373 #define DEADTRANS(ch, accent, comp, flags) MAKELONG(ch, accent), comp, flags
00374 
00375 ROSDATA DEADKEY dead_key[] = {
00376   /* ¨ */
00377   { DEADTRANS(0x0061, 0x00a8, 0x00e4, 0x0000) },
00378   { DEADTRANS(0x0065, 0x00a8, 0x00eb, 0x0000) },
00379   { DEADTRANS(0x0069, 0x00a8, 0x00ef, 0x0000) },
00380   { DEADTRANS(0x006f, 0x00a8, 0x00f6, 0x0000) },
00381   { DEADTRANS(0x0075, 0x00a8, 0x00fc, 0x0000) },
00382   { DEADTRANS(0x0079, 0x00a8, 0x00ff, 0x0000) },
00383   { DEADTRANS(0x0041, 0x00a8, 0x00c4, 0x0000) },
00384   { DEADTRANS(0x0045, 0x00a8, 0x00cb, 0x0000) },
00385   { DEADTRANS(0x0049, 0x00a8, 0x00cf, 0x0000) },
00386   { DEADTRANS(0x004f, 0x00a8, 0x00d6, 0x0000) },
00387   { DEADTRANS(0x0055, 0x00a8, 0x00dc, 0x0000) },
00388   { DEADTRANS(0x0020, 0x00a8, 0x00a8, 0x0000) },
00389 
00390   /* ^ */
00391   { DEADTRANS(0x0061, 0x005e, 0x00e2, 0x0000) },
00392   { DEADTRANS(0x0065, 0x005e, 0x00ea, 0x0000) },
00393   { DEADTRANS(0x0069, 0x005e, 0x00ee, 0x0000) },
00394   { DEADTRANS(0x006f, 0x005e, 0x00f4, 0x0000) },
00395   { DEADTRANS(0x0075, 0x005e, 0x00fb, 0x0000) },
00396   { DEADTRANS(0x0041, 0x005e, 0x00c2, 0x0000) },
00397   { DEADTRANS(0x0045, 0x005e, 0x00ca, 0x0000) },
00398   { DEADTRANS(0x0049, 0x005e, 0x00ce, 0x0000) },
00399   { DEADTRANS(0x004f, 0x005e, 0x00d4, 0x0000) },
00400   { DEADTRANS(0x0055, 0x005e, 0x00db, 0x0000) },
00401   { DEADTRANS(0x0020, 0x005e, 0x005e, 0x0000) },
00402 
00403   /* ~ */
00404   { DEADTRANS(0x0061, 0x007e, 0x00e3, 0x0000) },
00405   { DEADTRANS(0x006f, 0x007e, 0x00f5, 0x0000) },
00406   { DEADTRANS(0x006e, 0x007e, 0x00f1, 0x0000) },
00407   { DEADTRANS(0x0041, 0x007e, 0x00c3, 0x0000) },
00408   { DEADTRANS(0x004f, 0x007e, 0x00d5, 0x0000) },
00409   { DEADTRANS(0x004e, 0x007e, 0x00d1, 0x0000) },
00410   { DEADTRANS(0x0020, 0x007e, 0x007e, 0x0000) },
00411 
00412   /* ´ */
00413   { DEADTRANS(0x0061, 0x00b4, 0x00e1, 0x0000) },
00414   { DEADTRANS(0x0065, 0x00b4, 0x00e9, 0x0000) },
00415   { DEADTRANS(0x0069, 0x00b4, 0x00ed, 0x0000) },
00416   { DEADTRANS(0x006f, 0x00b4, 0x00f3, 0x0000) },
00417   { DEADTRANS(0x0075, 0x00b4, 0x00fa, 0x0000) },
00418   { DEADTRANS(0x0079, 0x00b4, 0x00fd, 0x0000) },
00419   { DEADTRANS(0x0041, 0x00b4, 0x00c1, 0x0000) },
00420   { DEADTRANS(0x0045, 0x00b4, 0x00c9, 0x0000) },
00421   { DEADTRANS(0x0049, 0x00b4, 0x00cd, 0x0000) },
00422   { DEADTRANS(0x004f, 0x00b4, 0x00d3, 0x0000) },
00423   { DEADTRANS(0x0055, 0x00b4, 0x00da, 0x0000) },
00424   { DEADTRANS(0x0059, 0x00b4, 0x00dd, 0x0000) },
00425   { DEADTRANS(0x0020, 0x00b4, 0x00b4, 0x0000) },
00426 
00427   /* ` */
00428   { DEADTRANS(0x0061, 0x0060, 0x00e0, 0x0000) },
00429   { DEADTRANS(0x0065, 0x0060, 0x00e8, 0x0000) },
00430   { DEADTRANS(0x0069, 0x0060, 0x00ec, 0x0000) },
00431   { DEADTRANS(0x006f, 0x0060, 0x00f2, 0x0000) },
00432   { DEADTRANS(0x0075, 0x0060, 0x00f9, 0x0000) },
00433   { DEADTRANS(0x0041, 0x0060, 0x00c0, 0x0000) },
00434   { DEADTRANS(0x0045, 0x0060, 0x00c8, 0x0000) },
00435   { DEADTRANS(0x0049, 0x0060, 0x00cc, 0x0000) },
00436   { DEADTRANS(0x004f, 0x0060, 0x00d2, 0x0000) },
00437   { DEADTRANS(0x0055, 0x0060, 0x00d9, 0x0000) },
00438   { DEADTRANS(0x0020, 0x0060, 0x0060, 0x0000) },
00439   { 0, 0 }
00440 };
00441 
00442 /* Finally, the master table */
00443 ROSDATA KBDTABLES keyboard_layout_table = {
00444   /* modifier assignments */
00445   &modifier_bits,
00446 
00447   /* character from vk tables */
00448   vk_to_wchar_master_table,
00449 
00450   /* diacritical marks -- currently implemented by wine code */
00451   dead_key,
00452 
00453   /* Key names */
00454   (VSC_LPWSTR *)key_names,
00455   (VSC_LPWSTR *)extended_key_names,
00456   dead_key_names, /* Dead key names */
00457 
00458   /* scan code to virtual key maps */
00459   scancode_to_vk,
00460   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00461   extcode0_to_vk,
00462   extcode1_to_vk,
00463 
00464   MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
00465 
00466   /* Ligatures -- Norwegian doesn't have any (æ is not a ligature!)*/
00467   0,
00468   0,
00469   NULL
00470 };
00471 
00472 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
00473   return &keyboard_layout_table;
00474 }
00475 
00476 INT WINAPI
00477 DllMain(
00478   PVOID hinstDll,
00479   ULONG dwReason,
00480   PVOID reserved)
00481 {
00482   UNREFERENCED_PARAMETER(hinstDll);
00483   UNREFERENCED_PARAMETER(dwReason);
00484   UNREFERENCED_PARAMETER(reserved);
00485   return 1;
00486 }

Generated on Tue May 22 2012 04:26:06 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.