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

kbdit.c
Go to the documentation of this file.
00001 /*
00002  * ReactOS Italian Keyboard layout
00003  * Copyright (C) 2007 ReactOS
00004  * License: LGPL, see: LGPL.txt
00005  *
00006  */
00007 
00008 #include <windows.h>
00009 #include <ndk/kbd.h>
00010 
00011 #ifdef _M_IA64
00012 #define ROSDATA static __declspec(allocate(".data"))
00013 #else
00014 #ifdef _MSC_VER
00015 #pragma data_seg(".data")
00016 #define ROSDATA static
00017 #else
00018 #define ROSDATA static __attribute__((section(".data")))
00019 #endif
00020 #endif
00021 
00022 #define VK_EMPTY  0xff   /* The non-existent VK */
00023 
00024 #define KNUMS     KBDNUMPAD|KBDSPECIAL /* Special + number pad */
00025 #define KMEXT     KBDEXT|KBDMULTIVK    /* Multi + ext */
00026 
00027 ROSDATA USHORT scancode_to_vk[] = {
00028 /* 00 */  VK_EMPTY,
00029 /* 01 */  VK_ESCAPE,
00030 /* 02 */  '1',
00031 /* 03 */  '2',
00032 /* 04 */  '3',
00033 /* 05 */  '4',
00034 /* 06 */  '5',
00035 /* 07 */  '6',
00036 /* 08 */  '7',
00037 /* 09 */  '8',
00038 /* 0a */  '9',
00039 /* 0b */  '0',
00040 /* 0c */  VK_OEM_4,
00041 /* 0d */  VK_OEM_6,
00042 /* 0e */  VK_BACK,
00043 /* 0f */  VK_TAB,
00044 /* 10 */  'Q',
00045 /* 11 */  'W',
00046 /* 12 */  'E',
00047 /* 13 */  'R',
00048 /* 14 */  'T',
00049 /* 15 */  'Y',
00050 /* 16 */  'U',
00051 /* 17 */  'I',
00052 /* 18 */  'O',
00053 /* 19 */  'P',
00054 /* 1a */  VK_OEM_1,
00055 /* 1b */  VK_OEM_PLUS,
00056 /* 1c */  VK_RETURN,
00057 /* 1d */  VK_LCONTROL,
00058 /* 1e */  'A',
00059 /* 1f */  'S',
00060 /* 20 */  'D',
00061 /* 21 */  'F',
00062 /* 22 */  'G',
00063 /* 23 */  'H',
00064 /* 24 */  'J',
00065 /* 25 */  'K',
00066 /* 26 */  'L',
00067 /* 27 */  VK_OEM_3,
00068 /* 28 */  VK_OEM_7,
00069 /* 29 */  VK_OEM_2,
00070 /* 2a */  VK_LSHIFT,
00071 /* 2b */  VK_OEM_5,
00072 /* 2c */  'Z',
00073 /* 2d */  'X',
00074 /* 2e */  'C',
00075 /* 2f */  'V',
00076 /* 30 */  'B',
00077 /* 31 */  'N',
00078 /* 32 */  'M',
00079 /* 33 */  VK_OEM_COMMA,
00080 /* 34 */  VK_OEM_PERIOD,
00081 /* 35 */  VK_OEM_MINUS,
00082 /* 36 */  VK_RSHIFT,
00083 /* 37 */  VK_MULTIPLY,
00084 /* 38 */  VK_LMENU,
00085 /* 39 */  VK_SPACE,
00086 /* 3a */  VK_CAPITAL,
00087 /* 3b */  VK_F1,
00088 /* 3c */  VK_F2,
00089 /* 3d */  VK_F3,
00090 /* 3e */  VK_F4,
00091 /* 3f */  VK_F5,
00092 /* 40 */  VK_F6,
00093 /* 41 */  VK_F7,
00094 /* 42 */  VK_F8,
00095 /* 43 */  VK_F9,
00096 /* 44 */  VK_F10,
00097 /* 45 */  VK_NUMLOCK | KMEXT,
00098 /* 46 */  VK_SCROLL | KBDMULTIVK,
00099 /* 47 */  VK_HOME | KNUMS,
00100 /* 48 */  VK_UP | KNUMS,
00101 /* 49 */  VK_PRIOR | KNUMS,
00102 /* 4a */  VK_SUBTRACT,
00103 /* 4b */  VK_LEFT | KNUMS,
00104 /* 4c */  VK_CLEAR | KNUMS,
00105 /* 4d */  VK_RIGHT | KNUMS,
00106 /* 4e */  VK_ADD,
00107 /* 4f */  VK_END | KNUMS,
00108 /* 50 */  VK_DOWN | KNUMS,
00109 /* 51 */  VK_NEXT | KNUMS,
00110 /* 52 */  VK_INSERT | KNUMS,
00111 /* 53 */  VK_DELETE | KNUMS,
00112 /* 54 */  VK_SNAPSHOT,
00113 /* 55 */  VK_EMPTY,
00114 /* 56 */  VK_OEM_102,
00115 /* 57 */  VK_F11,
00116 /* 58 */  VK_F12,
00117 /* 59 */  VK_EMPTY,
00118 /* 5a */  VK_CLEAR,
00119 /* 5b */  VK_EMPTY,
00120 /* 5c */  VK_EMPTY,
00121 /* 5d */  VK_EMPTY,
00122 /* 5e */  VK_EMPTY, /* EREOF */
00123 /* 5f */  VK_EMPTY,
00124 /* 60 */  VK_EMPTY,
00125 /* 61 */  VK_EMPTY,
00126 /* 62 */  VK_EMPTY,
00127 /* 63 */  VK_EMPTY, /* ZOOM */
00128 /* 64 */  VK_HELP,
00129 /* 65 */  VK_F13,
00130 /* 66 */  VK_F14,
00131 /* 67 */  VK_F15,
00132 /* 68 */  VK_F16,
00133 /* 69 */  VK_F17,
00134 /* 6a */  VK_F18,
00135 /* 6b */  VK_F19,
00136 /* 6c */  VK_F20,
00137 /* 6d */  VK_F21,
00138 /* 6e */  VK_F22,
00139 /* 6f */  VK_F23,
00140 /* 70 */  VK_EMPTY,
00141 /* 71 */  VK_EMPTY,
00142 /* 72 */  VK_EMPTY,
00143 /* 73 */  VK_EMPTY,
00144 /* 74 */  VK_EMPTY,
00145 /* 75 */  VK_EMPTY,
00146 /* 76 */  VK_EMPTY,
00147 /* 77 */  VK_F24,
00148 /* 78 */  VK_EMPTY,
00149 /* 79 */  VK_EMPTY,
00150 /* 7a */  VK_EMPTY,
00151 /* 7b */  VK_EMPTY,
00152 /* 7c */  VK_EMPTY,
00153 /* 7d */  VK_EMPTY,
00154 /* 7e */  VK_EMPTY,
00155 /* 7f */  VK_EMPTY,
00156 /* 80 */  VK_EMPTY,
00157 /* 00 */  0
00158 };
00159 
00160 ROSDATA VSC_VK extcode0_to_vk[] = {
00161   { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
00162   { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
00163   { 0x1D, VK_RCONTROL | KBDEXT },
00164   { 0x20, VK_VOLUME_MUTE | KBDEXT },
00165   { 0x21, VK_LAUNCH_APP2 | KBDEXT },
00166   { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
00167   { 0x24, VK_MEDIA_STOP | KBDEXT },
00168   { 0x2E, VK_VOLUME_DOWN | KBDEXT },
00169   { 0x30, VK_VOLUME_UP | KBDEXT },
00170   { 0x32, VK_BROWSER_HOME | KBDEXT },
00171   { 0x35, VK_DIVIDE | KBDEXT },
00172   { 0x37, VK_SNAPSHOT | KBDEXT },
00173   { 0x38, VK_RMENU | KBDEXT },
00174   { 0x47, VK_HOME | KBDEXT },
00175   { 0x48, VK_UP | KBDEXT },
00176   { 0x49, VK_PRIOR | KBDEXT },
00177   { 0x4B, VK_LEFT | KBDEXT },
00178   { 0x4D, VK_RIGHT | KBDEXT },
00179   { 0x4F, VK_END | KBDEXT },
00180   { 0x50, VK_DOWN | KBDEXT },
00181   { 0x51, VK_NEXT | KBDEXT },
00182   { 0x52, VK_INSERT | KBDEXT },
00183   { 0x53, VK_DELETE | KBDEXT },
00184   { 0x5B, VK_LWIN | KBDEXT },
00185   { 0x5C, VK_RWIN | KBDEXT },
00186   { 0x5D, VK_APPS | KBDEXT },
00187   { 0x5F, VK_SLEEP | KBDEXT },
00188   { 0x65, VK_BROWSER_SEARCH | KBDEXT },
00189   { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
00190   { 0x67, VK_BROWSER_REFRESH | KBDEXT },
00191   { 0x68, VK_BROWSER_STOP | KBDEXT },
00192   { 0x69, VK_BROWSER_FORWARD | KBDEXT },
00193   { 0x6A, VK_BROWSER_BACK | KBDEXT },
00194   { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
00195   { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
00196   { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
00197   { 0x1C, VK_RETURN | KBDEXT },
00198   { 0x46, VK_CANCEL | KBDEXT },
00199   { 0, 0 },
00200 };
00201 
00202 ROSDATA VSC_VK extcode1_to_vk[] = {
00203   { 0x1d, VK_PAUSE },
00204   { 0, 0 },
00205 };
00206 
00207 ROSDATA VK_TO_BIT modifier_keys[] = {
00208   { VK_SHIFT,   KBDSHIFT },
00209   { VK_CONTROL, KBDCTRL },
00210   { VK_MENU,    KBDALT },
00211   { 0,          0 }
00212 };
00213 
00214 ROSDATA MODIFIERS modifier_bits = {
00215   modifier_keys,
00216   6,
00217   { 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 }
00218 };
00219 
00220 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00221   /* Normal vs Shifted */
00222   /* The alphabet */
00223   { 'A',         CAPLOK,   {'a', 'A'} },
00224   { 'B',         CAPLOK,   {'b', 'B'} },
00225   { 'C',         CAPLOK,   {'c', 'C'} },
00226   { 'D',         CAPLOK,   {'d', 'D'} },
00227   { 'F',         CAPLOK,   {'f', 'F'} },
00228   { 'G',         CAPLOK,   {'g', 'G'} },
00229   { 'H',         CAPLOK,   {'h', 'H'} },
00230   { 'I',         CAPLOK,   {'i', 'I'} },
00231   { 'J',         CAPLOK,   {'j', 'J'} },
00232   { 'K',         CAPLOK,   {'k', 'K'} },
00233   { 'L',         CAPLOK,   {'l', 'L'} },
00234   { 'M',         CAPLOK,   {'m', 'M'} },
00235   { 'N',         CAPLOK,   {'n', 'N'} },
00236   { 'O',         CAPLOK,   {'o', 'O'} },
00237   { 'P',         CAPLOK,   {'p', 'P'} },
00238   { 'Q',         CAPLOK,   {'q', 'Q'} },
00239   { 'R',         CAPLOK,   {'r', 'R'} },
00240   { 'S',         CAPLOK,   {'s', 'S'} },
00241   { 'T',         CAPLOK,   {'t', 'T'} },
00242   { 'U',         CAPLOK,   {'u', 'U'} },
00243   { 'V',         CAPLOK,   {'v', 'V'} },
00244   { 'W',         CAPLOK,   {'w', 'W'} },
00245   { 'X',         CAPLOK,   {'x', 'X'} },
00246   { 'Y',         CAPLOK,   {'y', 'Y'} },
00247   { 'Z',         CAPLOK,   {'z', 'Z'} },
00248 
00249   /* The numbers */
00250   { '1',         0, {'1', '!'} },
00251   { '2',         0, {'2', '"'} },
00252   { '3',         0, {'3', 0x00a3} },
00253   { '4',         0, {'4', '$'} },
00254   { '5',         0, {'5', '%'} },
00255   { '6',         0, {'6', '&'} },
00256   { '7',         0, {'7', '/'} },
00257   { '8',         0, {'8', '('} },
00258   { '9',         0, {'9', ')'} },
00259   { '0',         0, {'0', '='} },
00260 
00261   /* Specials */
00262   /* Ctrl-_ generates US */
00263   { VK_OEM_2       ,0, {'\\', '|'} },
00264   { VK_OEM_4       ,0, {'\'', '?'} },
00265   { VK_OEM_102     ,0, {'<', '>'} },
00266   { VK_OEM_COMMA   ,0, {',', ';'} },
00267   { VK_OEM_PERIOD  ,0, {'.', ':'} },
00268   { VK_OEM_MINUS   ,0, {'-', '_'} },
00269   /* Keys that do not have shift states */
00270   { VK_TAB     ,0, {'\t','\t'} },
00271   { VK_ADD     ,0, {'+', '+'} },
00272   { VK_SUBTRACT,0, {'-', '-'} },
00273   { VK_MULTIPLY,0, {'*', '*'} },
00274   { VK_DIVIDE  ,0, {'/', '/'} },
00275   { VK_ESCAPE  ,0, {0x1b,0x1b} },
00276   { VK_SPACE   ,0, {' ', ' '} },
00277   { VK_OEM_5   ,0, {0x00f9, 0x00a7} },//ù§
00278   { 0, 0 }
00279 };
00280 
00281 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00282   /* Normal, Shifted, Ctrl */
00283   /* Legacy (telnet-style) ascii escapes */
00284   { VK_RETURN,0, {'\r', '\r', '\n'} },
00285   { 0,0 }
00286 };
00287 
00288 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00289   /* Normal, Shifted, Ctrl, C-S-x */
00290   { VK_OEM_6,  0, {0x00ec, '^', WCH_NONE, '~' } },
00291   { VK_OEM_3,  0, {0x00f2, 0x00e7, WCH_NONE, '@' } },//òç
00292   { VK_OEM_7,  0, {0x00e0, 0x00b0, WCH_NONE, '#'} },//à°
00293 
00294   { VK_OEM_1,  0,   {0x00e8, 0x00e9, '{', '['} },// èé
00295   { VK_OEM_PLUS,0,   {'+', '*', '}', ']'} },
00296 
00297   /* The alphabet */
00298   { 'E',         CAPLOK,   {'e', 'E', 0x05, 0x20AC}  }, // eE€
00299 
00300   /* Legacy Ascii generators */
00301 //zz  { VK_OEM_MINUS, 0, {'\'', '?', WCH_NONE, 0x1f /* US */} },
00302   { 0, 0 }
00303 };
00304 
00305 ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
00306   { VK_NUMPAD0, 0, {'0'} },
00307   { VK_NUMPAD1, 0, {'1'} },
00308   { VK_NUMPAD2, 0, {'2'} },
00309   { VK_NUMPAD3, 0, {'3'} },
00310   { VK_NUMPAD4, 0, {'4'} },
00311   { VK_NUMPAD5, 0, {'5'} },
00312   { VK_NUMPAD6, 0, {'6'} },
00313   { VK_NUMPAD7, 0, {'7'} },
00314   { VK_NUMPAD8, 0, {'8'} },
00315   { VK_NUMPAD9, 0, {'9'} },
00316   { VK_DECIMAL, 0, {'.'} },
00317   { VK_BACK,    0, {'\010'} },
00318   { 0,0 }
00319 };
00320 
00321 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00322 
00323 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
00324   vk_master(1,keypad_numbers),
00325   vk_master(2,key_to_chars_2mod),
00326   vk_master(3,key_to_chars_3mod),
00327   vk_master(4,key_to_chars_4mod),
00328   { 0,0,0 }
00329 };
00330 
00331 ROSDATA VSC_LPWSTR key_names[] = {
00332   { 0x00, L"" },
00333   { 0x01, L"Esc" },
00334   { 0x0e, L"Backspace" },
00335   { 0x0f, L"Tab" },
00336   { 0x1c, L"Enter" },
00337   { 0x1d, L"Ctrl" },
00338   { 0x2a, L"Shift" },
00339   { 0x36, L"Right Shift" },
00340   { 0x37, L"Num *" },
00341   { 0x38, L"Alt" },
00342   { 0x39, L"Space" },
00343   { 0x3a, L"CAPLOK Lock" },
00344   { 0x3b, L"F1" },
00345   { 0x3c, L"F2" },
00346   { 0x3d, L"F3" },
00347   { 0x3e, L"F4" },
00348   { 0x3f, L"F5" },
00349   { 0x40, L"F6" },
00350   { 0x41, L"F7" },
00351   { 0x42, L"F8" },
00352   { 0x43, L"F9" },
00353   { 0x44, L"F10" },
00354   { 0x45, L"Pause" },
00355   { 0x46, L"Scroll Lock" },
00356   { 0x47, L"Num 7" },
00357   { 0x48, L"Num 8" },
00358   { 0x49, L"Num 9" },
00359   { 0x4a, L"Num -" },
00360   { 0x4b, L"Num 4" },
00361   { 0x4c, L"Num 5" },
00362   { 0x4d, L"Num 6" },
00363   { 0x4e, L"Num +" },
00364   { 0x4f, L"Num 1" },
00365   { 0x50, L"Num 2" },
00366   { 0x51, L"Num 3" },
00367   { 0x52, L"Num 0" },
00368   { 0x53, L"Num Del" },
00369   { 0x54, L"Sys Req" },
00370   { 0x57, L"F11" },
00371   { 0x58, L"F12" },
00372   { 0x7c, L"F13" },
00373   { 0x7d, L"F14" },
00374   { 0x7e, L"F15" },
00375   { 0x7f, L"F16" },
00376   { 0x80, L"F17" },
00377   { 0x81, L"F18" },
00378   { 0x82, L"F19" },
00379   { 0x83, L"F20" },
00380   { 0x84, L"F21" },
00381   { 0x85, L"F22" },
00382   { 0x86, L"F23" },
00383   { 0x87, L"F24" },
00384   { 0, NULL },
00385 };
00386 
00387 ROSDATA VSC_LPWSTR extended_key_names[] = {
00388   { 0x1c, L"Num Enter" },
00389   { 0x1d, L"Right Ctrl" },
00390   { 0x35, L"Num /" },
00391   { 0x37, L"Prnt Scrn" },
00392   { 0x38, L"Right Alt" },
00393   { 0x45, L"Num Lock" },
00394   { 0x46, L"Break" },
00395   { 0x47, L"Home" },
00396   { 0x48, L"Up" },
00397   { 0x49, L"Page Up" },
00398   { 0x4a, L"Left" },
00399   { 0x4c, L"Center" },
00400   { 0x4d, L"Right" },
00401   { 0x4f, L"End" },
00402   { 0x50, L"Down" },
00403   { 0x51, L"Page Down" },
00404   { 0x52, L"Insert" },
00405   { 0x53, L"Delete" },
00406   { 0x54, L"<ReactOS>" },
00407   { 0x55, L"Help" },
00408   { 0x56, L"Left Windows" },
00409   { 0x5b, L"Right Windows" },
00410   { 0, NULL },
00411 };
00412 
00413 /* Finally, the master table */
00414 ROSDATA KBDTABLES keyboard_layout_table = {
00415   /* modifier assignments */
00416   &modifier_bits,
00417 
00418   /* character from vk tables */
00419   vk_to_wchar_master_table,
00420 
00421   /* diacritical marks -- currently implemented by wine code */
00422   /* doesn't have any, anyway */
00423   NULL,
00424 
00425   /* Key names */
00426   (VSC_LPWSTR *)key_names,
00427   (VSC_LPWSTR *)extended_key_names,
00428   NULL, /* Dead key names */
00429 
00430   /* scan code to virtual key maps */
00431   scancode_to_vk,
00432   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00433   extcode0_to_vk,
00434   extcode1_to_vk,
00435 
00436   MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
00437 
00438   /* Ligatures */
00439   0,
00440   0,
00441   NULL
00442 };
00443 
00444 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
00445   return &keyboard_layout_table;
00446 }
00447 

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