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

kbdlt1.c
Go to the documentation of this file.
00001 /*
00002  * ReactOS Lithuanian Keyboard layout
00003  * Copyright (C) 2007 ReactOS
00004  * Author: Vytis Girdþijauskas, "CMan", cman@cman.us
00005  * License: LGPL, see: LGPL.txt
00006  *
00007  * http://www.microsoft.com/globaldev/tools/msklc.mspx
00008  * http://www.likit.lt/all/stand/klaviatura/klav.htm
00009  * http://www.microsoft.com/globaldev/reference/keyboards.mspx
00010  */
00011 
00012 #include <windows.h>
00013 #include <ndk/kbd.h>
00014 
00015 #ifdef _M_IA64
00016 #define ROSDATA static __declspec(allocate(".data"))
00017 #else
00018 #ifdef _MSC_VER
00019 #pragma data_seg(".data")
00020 #define ROSDATA static
00021 #else
00022 #define ROSDATA static __attribute__((section(".data")))
00023 #endif
00024 #endif
00025 
00026 #define VK_EMPTY  0xff   /* The non-existent VK */
00027 
00028 #define KNUMS     KBDNUMPAD|KBDSPECIAL /* Special + number pad */
00029 #define KMEXT     KBDEXT|KBDMULTIVK    /* Multi + ext */
00030 
00031 ROSDATA USHORT scancode_to_vk[] = {
00032   /* Numbers Row */
00033   /* - 00 - */
00034   /* 1 ...         2 ...         3 ...         4 ... */
00035   VK_EMPTY,     VK_ESCAPE,    '1',          '2',
00036   '3',          '4',          '5',          '6',
00037   '7',          '8',          '9',          '0',
00038   VK_OEM_MINUS, VK_OEM_PLUS,  VK_BACK,
00039   /* - 0f - */
00040   /* First Letters Row */
00041   VK_TAB,       'Q',          'W',          'E',
00042   'R',          'T',          'Y',          'U',
00043   'I',          'O',          'P',
00044   VK_OEM_4,     VK_OEM_6,     VK_RETURN,
00045   /* - 1d - */
00046   /* Second Letters Row */
00047   VK_LCONTROL,
00048   'A',          'S',          'D',          'F',
00049   'G',          'H',          'J',          'K',
00050   'L',          VK_OEM_1,     VK_OEM_7,     VK_OEM_3,
00051   VK_LSHIFT,    VK_OEM_5,
00052   /* - 2c - */
00053   /* Third letters row */
00054   'Z',          'X',          'C',          'V',
00055   'B',          'N',          'M',          VK_OEM_COMMA,
00056   VK_OEM_PERIOD,VK_OEM_2,     VK_RSHIFT,
00057   /* - 37 - */
00058   /* Bottom Row */
00059   VK_MULTIPLY,  VK_LMENU,     VK_SPACE,     VK_CAPITAL,
00060 
00061   /* - 3b - */
00062   /* F-Keys */
00063   VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6,
00064   VK_F7, VK_F8, VK_F9, VK_F10,
00065   /* - 45 - */
00066   /* Locks */
00067   VK_NUMLOCK | KMEXT,
00068   VK_SCROLL | KBDMULTIVK,
00069   /* - 47 - */
00070   /* Number-Pad */
00071   VK_HOME | KNUMS,      VK_UP | KNUMS,         VK_PRIOR | KNUMS, VK_SUBTRACT,
00072   VK_LEFT | KNUMS,      VK_CLEAR | KNUMS,      VK_RIGHT | KNUMS, VK_ADD,
00073   VK_END | KNUMS,       VK_DOWN | KNUMS,       VK_NEXT | KNUMS,
00074   VK_INSERT | KNUMS,    VK_DELETE | KNUMS,
00075   /* - 54 - */
00076   /* Presumably PrtSc */
00077   VK_SNAPSHOT,
00078   /* - 55 - */
00079   /* Oddities, and the remaining standard F-Keys */
00080   VK_EMPTY,     VK_EMPTY,     VK_F11,       VK_F12,
00081   /* - 59 - */
00082   VK_CLEAR,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* EREOF */
00083   VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* ZOOM */
00084   VK_HELP,
00085   /* - 64 - */
00086   /* Even more F-Keys (for example, NCR keyboards from the early 90's) */
00087   VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20,
00088   VK_F21, VK_F22, VK_F23,
00089   /* - 6f - */
00090   /* Not sure who uses these codes */
00091   VK_EMPTY, VK_EMPTY, VK_EMPTY,
00092   /* - 72 - */
00093   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00094   /* - 76 - */
00095   /* One more f-key */
00096   VK_F24,
00097   /* - 77 - */
00098   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00099   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, /* PA1 */
00100   VK_EMPTY,
00101   /* - 80 - */
00102   0
00103 };
00104 
00105 ROSDATA VSC_VK extcode0_to_vk[] = {
00106   { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
00107   { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
00108   { 0x1D, VK_RCONTROL | KBDEXT },
00109   { 0x20, VK_VOLUME_MUTE | KBDEXT },
00110   { 0x21, VK_LAUNCH_APP2 | KBDEXT },
00111   { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
00112   { 0x24, VK_MEDIA_STOP | KBDEXT },
00113   { 0x2E, VK_VOLUME_DOWN | KBDEXT },
00114   { 0x30, VK_VOLUME_UP | KBDEXT },
00115   { 0x32, VK_BROWSER_HOME | KBDEXT },
00116   { 0x35, VK_DIVIDE | KBDEXT },
00117   { 0x37, VK_SNAPSHOT | KBDEXT },
00118   { 0x38, VK_RMENU | KBDEXT },
00119   { 0x47, VK_HOME | KBDEXT },
00120   { 0x48, VK_UP | KBDEXT },
00121   { 0x49, VK_PRIOR | KBDEXT },
00122   { 0x4B, VK_LEFT | KBDEXT },
00123   { 0x4D, VK_RIGHT | KBDEXT },
00124   { 0x4F, VK_END | KBDEXT },
00125   { 0x50, VK_DOWN | KBDEXT },
00126   { 0x51, VK_NEXT | KBDEXT },
00127   { 0x52, VK_INSERT | KBDEXT },
00128   { 0x53, VK_DELETE | KBDEXT },
00129   { 0x5B, VK_LWIN | KBDEXT },
00130   { 0x5C, VK_RWIN | KBDEXT },
00131   { 0x5D, VK_APPS | KBDEXT },
00132   { 0x5F, VK_SLEEP | KBDEXT },
00133   { 0x65, VK_BROWSER_SEARCH | KBDEXT },
00134   { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
00135   { 0x67, VK_BROWSER_REFRESH | KBDEXT },
00136   { 0x68, VK_BROWSER_STOP | KBDEXT },
00137   { 0x69, VK_BROWSER_FORWARD | KBDEXT },
00138   { 0x6A, VK_BROWSER_BACK | KBDEXT },
00139   { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
00140   { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
00141   { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
00142   { 0x1C, VK_RETURN | KBDEXT },
00143   { 0x46, VK_CANCEL | KBDEXT },
00144   { 0, 0 },
00145 };
00146 
00147 ROSDATA VSC_VK extcode1_to_vk[] = {
00148   { 0x1d, VK_PAUSE},
00149   { 0, 0 },
00150 };
00151 
00152 ROSDATA VK_TO_BIT modifier_keys[] = {
00153   { VK_SHIFT,   KBDSHIFT },
00154   { VK_CONTROL, KBDCTRL },
00155   { VK_MENU,    KBDALT },
00156   { 0,          0 }
00157 };
00158 
00159 ROSDATA MODIFIERS modifier_bits = {
00160   modifier_keys,
00161   7,
00162   { 0, 1, 2, SHFT_INVALID, SHFT_INVALID, SHFT_INVALID, 3, 4 }
00163 };
00164 
00165 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00166   /* Normal vs Shifted */
00167 
00168   { 'A',         CAPLOK,   {'a', 'A'} },
00169   { 'B',         CAPLOK,   {'b', 'B'} },
00170   { 'C',         CAPLOK,   {'c', 'C'} },
00171   { 'D',         CAPLOK,   {'d', 'D'} },
00172   { 'F',         CAPLOK,   {'f', 'F'} },
00173   { 'G',         CAPLOK,   {'g', 'G'} },
00174   { 'H',         CAPLOK,   {'h', 'H'} },
00175   { 'I',         CAPLOK,   {'i', 'I'} },
00176   { 'J',         CAPLOK,   {'j', 'J'} },
00177   { 'K',         CAPLOK,   {'k', 'K'} },
00178   { 'L',         CAPLOK,   {'l', 'L'} },
00179   { 'M',         CAPLOK,   {'m', 'M'} },
00180   { 'N',         CAPLOK,   {'n', 'N'} },
00181   { 'O',         CAPLOK,   {'o', 'O'} },
00182   { 'P',         CAPLOK,   {'p', 'P'} },
00183   { 'Q',         CAPLOK,   {'q', 'Q'} },
00184   { 'R',         CAPLOK,   {'r', 'R'} },
00185   { 'S',         CAPLOK,   {'s', 'S'} },
00186   { 'T',         CAPLOK,   {'t', 'T'} },
00187   { 'U',         CAPLOK,   {'u', 'U'} },
00188   { 'V',         CAPLOK,   {'v', 'V'} },
00189   { 'W',         CAPLOK,   {'w', 'W'} },
00190   { 'X',         CAPLOK,   {'x', 'X'} },
00191   { 'Y',         CAPLOK,   {'y', 'Y'} },
00192   { 'Z',         CAPLOK,   {'z', 'Z'} },
00193 
00194   { VK_OEM_1,      0, {';', ':'} },
00195   { VK_OEM_2,      0, {'/', '?'} },
00196   { VK_OEM_3,      0, {'`', '~'} },
00197   { VK_OEM_7,      0, {'\'','\"'} },
00198   { VK_OEM_MINUS,  0, {'-', '_'} },
00199   { VK_OEM_COMMA,  0, {',', '<'} },
00200   { VK_OEM_PERIOD, 0, {'.', '>'} },
00201 
00202   /* Keys that do not have shift states */
00203   { VK_TAB,      0, {'\t',   '\t'} },
00204   { VK_ADD,      0, {'+',    '+'} },
00205   { VK_SUBTRACT, 0, {'-',    '-'} },
00206   { VK_MULTIPLY, 0, {'*',    '*'} },
00207   { VK_DIVIDE,   0, {'/',    '/'} },
00208   { VK_ESCAPE,   0, {0x1b, 0x1b} },
00209   { 0, 0 }
00210 };
00211 
00212 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00213   { VK_OEM_4,   0, {'[',  '{',  0x1b /* ESC */} },
00214   { VK_OEM_6,   0, {']',  '}',  0x1d /* GS */} },
00215   { VK_OEM_5,   0, {'\\', '|',  0x1c /* FS */} },
00216   { VK_SPACE,   0, {' ',  ' ',  ' '} },
00217   { VK_RETURN,  0, {'\r', '\r', '\n'} },
00218   { VK_OEM_102, 0, {0x5c, 0x2f, 0x1c} },
00219   { 0, 0 }
00220 };
00221 
00222 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00223   { '9',       0, {'9', '(', WCH_NONE, '9'} },
00224   { '0',       0, {'0', ')', WCH_NONE, '0'} },
00225   { 'E',         CAPLOK, {'e', 'E', WCH_NONE, 0x20ac} },
00226   { 0, 0 }
00227 };
00228 
00229 ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
00230   { '1',         CAPLOK, {0x105, 0x104, 0x01,     '1', '!'} },
00231   { '2',         CAPLOK, {0x10d, 0x10c, 0x02,     '2', '@'} },
00232   { '3',         CAPLOK, {0x119, 0x118, 0x03,     '3', '#'} },
00233   { '4',         CAPLOK, {0x117, 0x116, WCH_NONE, '4', '$'} },
00234   { '5',         CAPLOK, {0x12f, 0x12e, WCH_NONE, '5', '%'} },
00235   { '6',         CAPLOK, {0x161, 0x160, WCH_NONE, '6', '^'} },
00236   { '7',         CAPLOK, {0x173, 0x172, WCH_NONE, '7', '&'} },
00237   { '8',         CAPLOK, {0x16b, 0x16a, WCH_NONE, '8', '*'} },
00238   { VK_OEM_PLUS, CAPLOK, {0x17e, 0x17d, WCH_NONE, '=', '+'} },
00239   { 0, 0 }
00240 };
00241 
00242 ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
00243   { VK_NUMPAD0, 0, {'0'} },
00244   { VK_NUMPAD1, 0, {'1'} },
00245   { VK_NUMPAD2, 0, {'2'} },
00246   { VK_NUMPAD3, 0, {'3'} },
00247   { VK_NUMPAD4, 0, {'4'} },
00248   { VK_NUMPAD5, 0, {'5'} },
00249   { VK_NUMPAD6, 0, {'6'} },
00250   { VK_NUMPAD7, 0, {'7'} },
00251   { VK_NUMPAD8, 0, {'8'} },
00252   { VK_NUMPAD9, 0, {'9'} },
00253   { VK_DECIMAL, 0, {','} },
00254   { VK_BACK,    0, {'\010'} },
00255   { 0, 0 }
00256 };
00257 
00258 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00259 
00260 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
00261   vk_master(3,key_to_chars_3mod),
00262   vk_master(4,key_to_chars_4mod),
00263   vk_master(5,key_to_chars_5mod),
00264   vk_master(2,key_to_chars_2mod),
00265   vk_master(1,keypad_numbers),
00266   { 0, 0, 0 }
00267 };
00268 
00269 ROSDATA VSC_LPWSTR key_names[] = {
00270   { 0x00, L"" },
00271   { 0x01, L"Esc" },
00272   { 0x0e, L"Backspace" },
00273   { 0x0f, L"Tab" },
00274   { 0x1c, L"Enter" },
00275   { 0x1d, L"Ctrl" },
00276   { 0x2a, L"Shift" },
00277   { 0x36, L"Right Shift" },
00278   { 0x37, L"Num *" },
00279   { 0x38, L"Alt" },
00280   { 0x39, L"Space" },
00281   { 0x3a, L"CAPLOK Lock" },
00282   { 0x3b, L"F1" },
00283   { 0x3c, L"F2" },
00284   { 0x3d, L"F3" },
00285   { 0x3e, L"F4" },
00286   { 0x3f, L"F5" },
00287   { 0x40, L"F6" },
00288   { 0x41, L"F7" },
00289   { 0x42, L"F8" },
00290   { 0x43, L"F9" },
00291   { 0x44, L"F10" },
00292   { 0x45, L"Pause" },
00293   { 0x46, L"Scroll Lock" },
00294   { 0x47, L"Num 7" },
00295   { 0x48, L"Num 8" },
00296   { 0x49, L"Num 9" },
00297   { 0x4a, L"Num -" },
00298   { 0x4b, L"Num 4" },
00299   { 0x4c, L"Num 5" },
00300   { 0x4d, L"Num 6" },
00301   { 0x4e, L"Num +" },
00302   { 0x4f, L"Num 1" },
00303   { 0x50, L"Num 2" },
00304   { 0x51, L"Num 3" },
00305   { 0x52, L"Num 0" },
00306   { 0x53, L"Num Del" },
00307   { 0x54, L"Sys Req" },
00308   { 0x57, L"F11" },
00309   { 0x58, L"F12" },
00310   { 0x7c, L"F13" },
00311   { 0x7d, L"F14" },
00312   { 0x7e, L"F15" },
00313   { 0x7f, L"F16" },
00314   { 0x80, L"F17" },
00315   { 0x81, L"F18" },
00316   { 0x82, L"F19" },
00317   { 0x83, L"F20" },
00318   { 0x84, L"F21" },
00319   { 0x85, L"F22" },
00320   { 0x86, L"F23" },
00321   { 0x87, L"F24" },
00322   { 0, NULL },
00323 };
00324 
00325 ROSDATA VSC_LPWSTR extended_key_names[] = {
00326   { 0x1c, L"Num Enter" },
00327   { 0x1d, L"Right Ctrl" },
00328   { 0x35, L"Num /" },
00329   { 0x37, L"Prnt Scrn" },
00330   { 0x38, L"Right Alt" },
00331   { 0x45, L"Num Lock" },
00332   { 0x46, L"Break" },
00333   { 0x47, L"Home" },
00334   { 0x48, L"Up" },
00335   { 0x49, L"Page Up" },
00336   { 0x4a, L"Left" },
00337   { 0x4c, L"Center" },
00338   { 0x4d, L"Right" },
00339   { 0x4f, L"End" },
00340   { 0x50, L"Down" },
00341   { 0x51, L"Page Down" },
00342   { 0x52, L"Insert" },
00343   { 0x53, L"Delete" },
00344   { 0x54, L"<ReactOS>" },
00345   { 0x55, L"Help" },
00346   { 0x56, L"Left ReactOS" },
00347   { 0x5b, L"Right ReactOS" },
00348   { 0, NULL },
00349 };
00350 
00351 /* Finally, the master table */
00352 ROSDATA KBDTABLES keyboard_layout_table = {
00353   /* modifier assignments */
00354   &modifier_bits,
00355 
00356   /* character from vk tables */
00357   vk_to_wchar_master_table,
00358 
00359   /* diacritical marks -- currently implemented by wine code */
00360   NULL,
00361 
00362   /* Key names */
00363   (VSC_LPWSTR *)key_names,
00364   (VSC_LPWSTR *)extended_key_names,
00365   NULL, /* Dead key names */
00366 
00367   /* scan code to virtual key maps */
00368   scancode_to_vk,
00369   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00370   extcode0_to_vk,
00371   extcode1_to_vk,
00372 
00373   MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
00374 
00375   /* Ligatures -- Lithuanian doesn't have any */
00376   0,
00377   0,
00378   NULL
00379 };
00380 
00381 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
00382   return &keyboard_layout_table;
00383 }

Generated on Sun May 27 2012 04:22:30 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.