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

kbdbgt.c
Go to the documentation of this file.
00001 /*
00002  * Tundzha - Bulgarian keyboard layout
00003  * Òóíäæà - Áúëãàðñêà êëàâèàòóðíà ïîçâóêîâà ïîäðåäáà 'ÿâåðòú' çà ÐåàêòÎÑ
00004  * Copyright (C) 2007 ReactOS
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   { 0,          0 }
00156 };
00157 
00158 ROSDATA MODIFIERS modifier_bits = {
00159   modifier_keys,
00160   6,
00161   { 0, 1, 2, 4, SHFT_INVALID, SHFT_INVALID, 3 }
00162 };
00163 
00164 /* Öèôðîâ ðåä */
00165 /* VK_OEM_3 = ÷× */
00166 
00167 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00168   {VK_OEM_3,     CAPLOK, {0x447, 0x427} },
00169   { '1',         0, {'1', '!'} },
00170   { '2',         0, {'2', '@'} },
00171 //  { '3',         0, {'3', '#'} },
00172   { '4',         0, {'4', '$'} },
00173   { '5',         0, {'5', '%'} },
00174 //  { '6',         0, {'6', '^'} },
00175 //  { '7',         0, {'7', '&'} },
00176   { '8',         0, {'8', '*'} },
00177   { '9',         0, {'9', '('} },
00178   { '0',         0, {'0', ')'} },
00179   { VK_OEM_PLUS, 0, {'=', '+'} },
00180 
00181   /* First letter row Ïúðâè ðåä áóêâè ÿâåðòúóèîïøù*/
00182   { 'Q',         CAPLOK,   {0x44f, 0x42f} },
00183   { 'W',         CAPLOK,   {0x432, 0x412} },
00184 //  { 'E',         CAPLOK,   {0x435, 0x415} },
00185   { 'R',         CAPLOK,   {0x440, 0x420} },
00186   { 'T',         CAPLOK,   {0x442, 0x422} },
00187   { 'Y',         CAPLOK,   {0x44a, 0x42a} },
00188   { 'U',         CAPLOK,   {0x443, 0x423} },
00189 //  { 'I',         CAPLOK,   {0x438, 0x418} },
00190 //  { 'O',         CAPLOK,   {0x43e, 0x41e} },
00191   { 'P',         CAPLOK,   {0x43f, 0x41f} },
00192   { VK_OEM_4,    CAPLOK,   {0x448, 0x428} },
00193   { VK_OEM_6,    CAPLOK,   {0x449, 0x429} },
00194 
00195   /* Second letter row Âòîðè ðåä áóêâè àñäôãõéêë ;:'" */
00196   { 'A',         CAPLOK,   {0x430, 0x410} },
00197   { 'S',         CAPLOK,   {0x441, 0x421} },
00198   { 'D',         CAPLOK,   {0x434, 0x414} },
00199   { 'F',         CAPLOK,   {0x444, 0x424} },
00200   { 'G',         CAPLOK,   {0x433, 0x413} },
00201   { 'H',         CAPLOK,   {0x445, 0x425} },
00202 //  { 'J',         CAPLOK,   {0x439, 0x419} },
00203   { 'K',         CAPLOK,   {0x43a, 0x41a} },
00204   { 'L',         CAPLOK,   {0x43b, 0x41b} },
00205   { VK_OEM_1,    0, {';', ':'} },
00206 //  { VK_OEM_7,    0, {'\'','\"'} },
00207 
00208   /* Third letter row Òðåòè ðåä áóêâè */
00209   { 'Z',         CAPLOK,   {0x437, 0x417} },
00210   { 'X',         CAPLOK,   {0x44c, 0x42c} },
00211   { 'C',         CAPLOK,   {0x446, 0x426} },
00212   { 'V',         CAPLOK,   {0x436, 0x416} },
00213   { 'B',         CAPLOK,   {0x431, 0x411} },
00214   { 'N',         CAPLOK,   {0x43d, 0x41d} },
00215   { 'M',         CAPLOK,   {0x43c, 0x41c} },
00216 /*  { VK_OEM_COMMA,CAPLOK,   {0x431, 0x411} }, */
00217   { VK_OEM_COMMA,   0, {',', '<'} },
00218 /*  { VK_OEM_PERIOD,CAPLOK,  {0x44e, 0x42e} }, */
00219   { VK_OEM_PERIOD,  0, {'.', '>'} },
00220 /*  { VK_OEM_2, 0,    {'.', ','} }, */
00221   { VK_OEM_2,       0,    {'/', '?'} },
00222 
00223   /* Specials */
00224   { 0x6e,   0, {',', ','} },
00225   { VK_TAB, 0, {9, 9} },
00226   { VK_ADD,        0, {'+', '+'} },
00227   { VK_DIVIDE,     0, {'/', '/'} },
00228   { VK_MULTIPLY,   0, {'*', '*'} },
00229   { VK_SUBTRACT,   0, {'-', '-'} },
00230   { 0, 0 }
00231 };
00232 
00233 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00234   /* Normal, Shifted, Ctrl */
00235   /* Legacy (telnet-style) ascii escapes */
00236   { VK_OEM_5, CAPLOK, {0x44e, 0x42e} }, //þÞ
00237   { VK_OEM_102, 0, {0x5c, 0x7c} }, // \| Òîçè êëàâèø ëèïñâà íà ìíîãî êëàâèàòóðè
00238   { VK_BACK, 0, {0x8, 0x8, 0x7f} }, 
00239   { VK_ESCAPE, 0, {0x1b, 0x1b, 0x1b} },
00240   { VK_RETURN, 0, {'\r', '\r', '\n'} },
00241   { VK_SPACE, 0, {' ', ' ', ' '} },
00242   { VK_CANCEL, 0, {0x03, 0x03, 0x03} },
00243   { 0,0 }
00244 };
00245 
00246 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00247   /* Normal, Shifted, Ctrl, Ctrl-Alt */
00248 /*×èñò, Øèôò, Êòðë, Êòðë+ Øèôò */
00249   /* Legacy Ascii generators */
00250   { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x2014} }, //-_—
00251 //  { '3',   0, {'3', '#', WCH_NONE, 0x2116} },
00252 //  { '6',   0, {'6', '^', WCH_NONE, 0x20AC} },
00253 //  { '7',   0, {'7', '&', WCH_NONE, 0xA7} },
00254   { 0, 0 }
00255 };
00256 
00257 ROSDATA VK_TO_WCHARS5 key_to_chars_5mod[] = {
00258   /* Normal, Shifted, Ctrl, Ctrl+Alt, Ctrl+Shift */
00259   { 'E',   CAPLOK,   {0x435, 0x415, WCH_NONE, 0x44d, 0x42d} }, //eEýÝ
00260   { 'I',   CAPLOK,   {0x438, 0x418, WCH_NONE, 0x44b, 0x42b} }, //èÈûÛ
00261   { 'O',   CAPLOK,   {0x43e, 0x41e, WCH_NONE, 0x451, 0x401} }, //oO¸¨
00262   { 'J',   CAPLOK,   {0x439, 0x419, WCH_NONE, 0x45d, 0x40d} }, //éÉ ìàëêî è ãëàâíî „è” ñ óäàðåíèå
00263 //Ñëåäâàùèòå ðåäîâå ìîãàò äà ñà è â ROSDATA VK_TO_WCHARS4, 
00264 //êàòî ïîñëåäíîòî èì ïîïúëíåíèå òðÿáâà äà ñå ìàõíå
00265   { '3',   0, {'3', '#', WCH_NONE, 0x2116, 0x2116} }, //3#¹¹
00266   { '6',   0, {'6', '^', WCH_NONE, 0x20AC,0x20AC } }, //6^ˆˆ
00267   { '7',   0, {'7', '&', WCH_NONE, 0xA7, 0xA7} }, //7&§§
00268   { VK_OEM_7,    0, {'\'','\"', WCH_NONE, 0x201e, 0x201C } }, //'"„“
00269   { 0, 0 }
00270 };
00271 
00272 ROSDATA VK_TO_WCHARS1 keypad_numbers[] = {
00273   { VK_NUMPAD0, 0, {'0'} },
00274   { VK_NUMPAD1, 0, {'1'} },
00275   { VK_NUMPAD2, 0, {'2'} },
00276   { VK_NUMPAD3, 0, {'3'} },
00277   { VK_NUMPAD4, 0, {'4'} },
00278   { VK_NUMPAD5, 0, {'5'} },
00279   { VK_NUMPAD6, 0, {'6'} },
00280   { VK_NUMPAD7, 0, {'7'} },
00281   { VK_NUMPAD8, 0, {'8'} },
00282   { VK_NUMPAD9, 0, {'9'} },
00283   { 0,0 }
00284 };
00285 
00286 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00287 
00288 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] = {
00289   vk_master(3,key_to_chars_3mod),
00290   vk_master(4,key_to_chars_4mod),
00291   vk_master(5,key_to_chars_5mod),
00292   vk_master(2,key_to_chars_2mod),
00293   vk_master(1,keypad_numbers),
00294   { 0,0,0 }
00295 };
00296 
00297 ROSDATA VSC_LPWSTR key_names[] = {
00298   { 0x01, L"Esc" },
00299   { 0x0e, L"Backspace" },
00300   { 0x0f, L"Tab" },
00301   { 0x1c, L"Enter" },
00302   { 0x1d, L"Ctrl" },
00303   { 0x2a, L"Shift" },
00304   { 0x36, L"Right Shift" },
00305   { 0x37, L"Num *" },
00306   { 0x38, L"Alt" },
00307   { 0x39, L"Space" },
00308   { 0x3a, L"CAPLOK Lock" },
00309   { 0x3b, L"F1" },
00310   { 0x3c, L"F2" },
00311   { 0x3d, L"F3" },
00312   { 0x3e, L"F4" },
00313   { 0x3f, L"F5" },
00314   { 0x40, L"F6" },
00315   { 0x41, L"F7" },
00316   { 0x42, L"F8" },
00317   { 0x43, L"F9" },
00318   { 0x44, L"F10" },
00319   { 0x45, L"Pause" },
00320   { 0x46, L"Scroll Lock" },
00321   { 0x47, L"Num 7" },
00322   { 0x48, L"Num 8" },
00323   { 0x49, L"Num 9" },
00324   { 0x4a, L"Num -" },
00325   { 0x4b, L"Num 4" },
00326   { 0x4c, L"Num 5" },
00327   { 0x4d, L"Num 6" },
00328   { 0x4e, L"Num +" },
00329   { 0x4f, L"Num 1" },
00330   { 0x50, L"Num 2" },
00331   { 0x51, L"Num 3" },
00332   { 0x52, L"Num 0" },
00333   { 0x53, L"Num Del" },
00334   { 0x54, L"Sys Req" },
00335   { 0x57, L"F11" },
00336   { 0x58, L"F12" },
00337   { 0x7c, L"F13" },
00338   { 0x7d, L"F14" },
00339   { 0x7e, L"F15" },
00340   { 0x7f, L"F16" },
00341   { 0x80, L"F17" },
00342   { 0x81, L"F18" },
00343   { 0x82, L"F19" },
00344   { 0x83, L"F20" },
00345   { 0x84, L"F21" },
00346   { 0x85, L"F22" },
00347   { 0x86, L"F23" },
00348   { 0x87, L"F24" },
00349   { 0, NULL }
00350 };
00351 
00352 ROSDATA VSC_LPWSTR extended_key_names[] = {
00353   { 0x1c, L"Num Enter" },
00354   { 0x1d, L"Right Control" },
00355   { 0x35, L"Num /" },
00356   { 0x37, L"Prnt Scrn" },
00357   { 0x38, L"Right Alt" },
00358   { 0x45, L"Num Lock" },
00359   { 0x46, L"Break" },
00360   { 0x47, L"Home" },
00361   { 0x48, L"Up" },
00362   { 0x49, L"Page Up" },
00363   { 0x4b, L"Left" },
00364 //{ 0x4c, L"Center" },
00365   { 0x4d, L"Right" },
00366   { 0x4f, L"End" },
00367   { 0x50, L"Down" },
00368   { 0x51, L"Page Down" },
00369   { 0x52, L"Insert" },
00370   { 0x53, L"Delete" },
00371   { 0x54, L"<ReactOS>" },
00372   { 0x56, L"Help" },
00373   { 0x5b, L"Left <ReactOS>" },
00374   { 0x5c, L"Right <ReactOS>" },
00375   { 0x5d, L"Application" },
00376   { 0, NULL }
00377 };
00378 
00379 /* Finally, the master table */
00380 ROSDATA KBDTABLES keyboard_layout_table = {
00381   /* modifier assignments */
00382   &modifier_bits,
00383   
00384   /* character from vk tables */
00385   vk_to_wchar_master_table,
00386   
00387   /* diacritical marks */
00388   NULL,
00389 
00390   /* Key names */
00391   (VSC_LPWSTR *)key_names,
00392   (VSC_LPWSTR *)extended_key_names,
00393   // dead_key_names, /* Dead key names */
00394   NULL, /* Dead key names */
00395 
00396   /* scan code to virtual key maps */
00397   scancode_to_vk,
00398   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00399   extcode0_to_vk,
00400   extcode1_to_vk,
00401 
00402   MAKELONG(KLLF_ALTGR, 1), /* Version 1.0 */
00403 
00404   /* Ligatures -- Bulgarian doesn't have any */
00405   0,
00406   0,
00407   NULL
00408 };
00409 
00410 PKBDTABLES WINAPI KbdLayerDescriptor(VOID) {
00411   return &keyboard_layout_table;
00412 }
00413 
00414 INT WINAPI
00415 DllMain(
00416   PVOID hinstDll,
00417   ULONG dwReason,
00418   PVOID reserved)
00419 {
00420   return 1;
00421 }

Generated on Mon May 28 2012 04:21:57 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.