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

kbdheb.c
Go to the documentation of this file.
00001 /*
00002  * ReactOS Hebrew ASCII Keyboard layout
00003  * Copyright (C) 2005 ReactOS
00004  * License: LGPL, see: LGPL.txt
00005  * author: Royce Mitchell III
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 _MSC_VER
00015 #ifndef WINAPI
00016 #define WINAPI __stdcall
00017 #endif
00018 #endif//_MSC_VER
00019 
00020 #ifdef _M_IA64
00021 #define ROSDATA static __declspec(allocate(".data"))
00022 #else
00023 #ifdef _MSC_VER
00024 #pragma data_seg(".data")
00025 #define ROSDATA static
00026 #else
00027 #define ROSDATA static __attribute__((section(".data")))
00028 #endif
00029 #endif
00030 
00031 #define VK_EMPTY  0xff   /* The non-existent VK */
00032 
00033 #define KNUMS     KBDNUMPAD|KBDSPECIAL /* Special + number pad */
00034 #define KMEXT     KBDEXT|KBDMULTIVK    /* Multi + ext */
00035 
00036 enum
00037 {
00038     // vowels, etc
00039     SHEVA = 0x5B0,
00040     HATAF_SEGOL,
00041     HATAF_PATAH,
00042     HATAF_QAMATS,
00043     HIRIQ,
00044     TSERE,
00045     SEGOL,
00046     PATAH,
00047     QAMATS,
00048     HOLAM,
00049     QUBUTS = 0x5BB,
00050     DAGESH,
00051     MAPIQ = DAGESH,
00052     METEG,
00053     MAQAF,
00054     RAFE,
00055     PASEQ,
00056     SHIN_DOT,
00057     SIN_DOT,
00058     SOF_PASUQ,
00059     YIDDISH_DOUBLE_VAV = 0x5F0,
00060     YIDDISH_VAV_YUD,
00061     YIDDISH_DOUBLE_YUD,
00062     GERESH,
00063     GERSHAYIM,
00064 
00065     // consonants
00066     ALEF = 0x5D0,
00067     BET,
00068     GIMEL,
00069     DALET,
00070     HEY,
00071     VAV,
00072     ZAYIN,
00073     HET,
00074     TET,
00075     YUD,
00076     KAF_SOFIT,
00077     KAF,
00078     LAMED,
00079     MEM_SOFIT,
00080     MEM,
00081     NUN_SOFIT,
00082     NUN,
00083     SAMEKH,
00084     AYIN,
00085     PEY_SOFIT,
00086     PEY,
00087     TSADI_SOFIT,
00088     TSADI,
00089     QOF,
00090     RESH,
00091     SHIN,
00092     TAV
00093 };
00094 
00095 ROSDATA USHORT scancode_to_vk[] =
00096 {
00097   /* Numbers Row */
00098 
00099   /* - 00 - */
00100   VK_EMPTY,     // 00: ?
00101   VK_ESCAPE,    // 01: esc
00102   '1',          // 02: '1'
00103   '2',          // 03: '2'
00104   '3',          // 04: '3'
00105   '4',          // 05: '4'
00106   '5',          // 06: '5'
00107   '6',          // 07: '6'
00108   '7',          // 08: '7'
00109   '8',          // 09: '8'
00110   '9',          // 0A: '9'
00111   '0',          // 0B: '0'
00112   VK_OEM_MINUS, // 0C: '-'
00113   VK_OEM_PLUS,  // OD: '+'
00114   VK_BACK,      // OE: backspace
00115 
00116   /* - 0f - */
00117   /* First Letters Row */
00118   VK_TAB,       // 0F: tab
00119   VK_OEM_2,     // 10: 'Q'
00120   VK_OEM_7,     // 11: 'W'
00121   'E',          // 12: 'E'
00122   'R',          // 13: 'R'
00123   'T',          // 14: 'T'
00124   'Y',          // 15: 'Y'
00125   'U',          // 16: 'U'
00126   'I',          // 17: 'I'
00127   'O',          // 18: 'O'
00128   'P',          // 19: 'P'
00129   VK_OEM_4,     // 1A: '{'
00130   VK_OEM_6,     // 1B: '}'
00131   VK_RETURN,    // 1C: enter
00132 
00133   /* - 1d - */
00134   /* Second Letters Row */
00135   VK_LCONTROL,  // 1D: lctrl
00136   'A',          // 1E: 'A'
00137   'S',          // 1F: 'S'
00138   'D',          // 20: 'D'
00139   'F',          // 21: 'F'
00140   'G',          // 22: 'G'
00141   'H',          // 23: 'H'
00142   'J',          // 24: 'J'
00143   'K',          // 25: 'K'
00144   'L',          // 26: 'L'
00145   VK_OEM_1,     // 27: ';'
00146   VK_OEM_COMMA, // 28: '\''
00147   VK_OEM_3,     // 29: ?
00148   VK_LSHIFT,    // 2A: lshift
00149   VK_OEM_5,     // 2B: ?
00150 
00151   /* - 2c - */
00152   /* Third letters row */
00153   'Z',          // 2C: 'Z'
00154   'X',          // 2D: 'X'
00155   'C',          // 2E: 'C'
00156   'V',          // 2F: 'V'
00157   'B',          // 30: 'B'
00158   'N',          // 31: 'N'
00159   'M',          // 32: 'M'
00160   'Q',          // 33: ','
00161   'W',          // 34: '.'
00162   VK_OEM_PERIOD,// 35: '/'
00163   VK_RSHIFT,    // 36: rshift
00164   /* - 37 - */
00165   /* Bottom Row */
00166   VK_MULTIPLY,  // 37: ?
00167   VK_LMENU,     // 38: lalt
00168   VK_SPACE,     // 39: space
00169   VK_CAPITAL,   // 3A: CAPLOK lock?
00170 
00171   /* - 3b - */
00172   /* F-Keys */
00173   VK_F1, VK_F2, VK_F3, VK_F4, VK_F5, VK_F6,
00174   VK_F7, VK_F8, VK_F9, VK_F10,
00175   /* - 45 - */
00176   /* Locks */
00177   VK_NUMLOCK | KMEXT,
00178   VK_SCROLL | KBDMULTIVK,
00179   /* - 47 - */
00180   /* Number-Pad */
00181   VK_HOME | KNUMS,      VK_UP | KNUMS,         VK_PRIOR | KNUMS, VK_SUBTRACT,
00182   VK_LEFT | KNUMS,      VK_CLEAR | KNUMS,      VK_RIGHT | KNUMS, VK_ADD,
00183   VK_END | KNUMS,       VK_DOWN | KNUMS,       VK_NEXT | KNUMS,
00184   VK_INSERT | KNUMS,    VK_DELETE | KNUMS,
00185   /* - 54 - */
00186   /* Presumably PrtSc */
00187   VK_SNAPSHOT,
00188   /* - 55 - */
00189   /* Oddities, and the remaining standard F-Keys */
00190   VK_EMPTY,     VK_EMPTY,     VK_F11,       VK_F12,
00191   /* - 59 - */
00192   VK_CLEAR,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* EREOF */
00193   VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY,     VK_EMPTY, /* ZOOM */
00194   VK_HELP,
00195   /* - 64 - */
00196   /* Even more F-Keys (for example, NCR keyboards from the early 90's) */
00197   VK_F13, VK_F14, VK_F15, VK_F16, VK_F17, VK_F18, VK_F19, VK_F20,
00198   VK_F21, VK_F22, VK_F23,
00199   /* - 6f - */
00200   /* Not sure who uses these codes */
00201   VK_EMPTY, VK_EMPTY, VK_EMPTY,
00202   /* - 72 - */
00203   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00204   /* - 76 - */
00205   /* One more f-key */
00206   VK_F24,
00207   /* - 77 - */
00208   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY,
00209   VK_EMPTY, VK_EMPTY, VK_EMPTY, VK_EMPTY, /* PA1 */
00210   VK_EMPTY,
00211   /* - 80 - */
00212   0
00213 };
00214 
00215 ROSDATA VSC_VK extcode0_to_vk[] = {
00216   { 0x10, VK_MEDIA_PREV_TRACK | KBDEXT },
00217   { 0x19, VK_MEDIA_NEXT_TRACK | KBDEXT },
00218   { 0x1D, VK_RCONTROL | KBDEXT },
00219   { 0x20, VK_VOLUME_MUTE | KBDEXT },
00220   { 0x21, VK_LAUNCH_APP2 | KBDEXT },
00221   { 0x22, VK_MEDIA_PLAY_PAUSE | KBDEXT },
00222   { 0x24, VK_MEDIA_STOP | KBDEXT },
00223   { 0x2E, VK_VOLUME_DOWN | KBDEXT },
00224   { 0x30, VK_VOLUME_UP | KBDEXT },
00225   { 0x32, VK_BROWSER_HOME | KBDEXT },
00226   { 0x35, VK_DIVIDE | KBDEXT },
00227   { 0x37, VK_SNAPSHOT | KBDEXT },
00228   { 0x38, VK_RMENU | KBDEXT },
00229   { 0x47, VK_HOME | KBDEXT },
00230   { 0x48, VK_UP | KBDEXT },
00231   { 0x49, VK_PRIOR | KBDEXT },
00232   { 0x4B, VK_LEFT | KBDEXT },
00233   { 0x4D, VK_RIGHT | KBDEXT },
00234   { 0x4F, VK_END | KBDEXT },
00235   { 0x50, VK_DOWN | KBDEXT },
00236   { 0x51, VK_NEXT | KBDEXT },
00237   { 0x52, VK_INSERT | KBDEXT },
00238   { 0x53, VK_DELETE | KBDEXT },
00239   { 0x5B, VK_LWIN | KBDEXT },
00240   { 0x5C, VK_RWIN | KBDEXT },
00241   { 0x5D, VK_APPS | KBDEXT },
00242   { 0x5F, VK_SLEEP | KBDEXT },
00243   { 0x65, VK_BROWSER_SEARCH | KBDEXT },
00244   { 0x66, VK_BROWSER_FAVORITES | KBDEXT },
00245   { 0x67, VK_BROWSER_REFRESH | KBDEXT },
00246   { 0x68, VK_BROWSER_STOP | KBDEXT },
00247   { 0x69, VK_BROWSER_FORWARD | KBDEXT },
00248   { 0x6A, VK_BROWSER_BACK | KBDEXT },
00249   { 0x6B, VK_LAUNCH_APP1 | KBDEXT },
00250   { 0x6C, VK_LAUNCH_MAIL | KBDEXT },
00251   { 0x6D, VK_LAUNCH_MEDIA_SELECT | KBDEXT },
00252   { 0x1C, VK_RETURN | KBDEXT },
00253   { 0x46, VK_CANCEL | KBDEXT },
00254   { 0, 0 },
00255 };
00256 
00257 ROSDATA VSC_VK extcode1_to_vk[] = {
00258   { 0x1d, VK_PAUSE },
00259   { 0, 0 },
00260 };
00261 
00262 ROSDATA VK_TO_BIT modifier_keys[] = {
00263   { VK_SHIFT,   KBDSHIFT },
00264   { VK_CONTROL, KBDCTRL },
00265   { VK_MENU,    KBDALT },
00266   { 0,          0 }
00267 };
00268 
00269 ROSDATA MODIFIERS modifier_bits = {
00270   modifier_keys,
00271   3,
00272   { 0, 1, 2, 3 } /* Modifier bit order, NONE, SHIFT, CTRL, ALT */
00273 };
00274 
00275 ROSDATA VK_TO_WCHARS2 key_to_chars_2mod[] = {
00276   /* Normal vs Shifted */
00277   /* The numbers */
00278   { '1',         0, {'1', '!'} },
00279   /* Ctrl-2 generates NUL */
00280   { '3',         0, {'3', '#'} },
00281   { '4',         0, {'4', '$'} },
00282   { '5',         0, {'5', '%'} },
00283   /* Ctrl-6 generates RS */
00284   { '7',         0, {'7', '&'} },
00285   { '8',         0, {'8', '*'} },
00286   { '9',         0, {'9', '('} },
00287   { '0',         0, {'0', ')'} },
00288 
00289   /* Specials */
00290   /* Ctrl-_ generates ? */
00291   { VK_OEM_PLUS    ,0, {'=', '+'} },
00292   { VK_OEM_1       ,0, {PEY_SOFIT, PEY_SOFIT} },
00293   { 'Q'            ,0, {TAV, TAV} },
00294   { 'W'            ,0, {TSADI_SOFIT, TSADI_SOFIT} },
00295   { VK_OEM_7       ,0, {'\'','\"'} },
00296   { VK_OEM_3       ,0, {'`', '~'} },
00297   { VK_OEM_COMMA   ,0, {',', '<'} },
00298   { VK_OEM_PERIOD  ,0, {'.', '>'} },
00299   { VK_OEM_2       ,0, {'/', '?'} },
00300   /* Keys that do not have shift states */
00301   { VK_TAB     ,0, {'\t','\t'} },
00302   { VK_ADD     ,0, {'+', '+'} },
00303   { VK_SUBTRACT,0, {'-', '-'} },
00304   { VK_MULTIPLY,0, {'*', '*'} },
00305   { VK_DIVIDE  ,0, {'/', '/'} },
00306   { VK_ESCAPE  ,0, {0x1b,0x1b} },
00307   { VK_SPACE   ,0, {' ', ' '} },
00308   { 0, 0 }
00309 };
00310 
00311 ROSDATA VK_TO_WCHARS3 key_to_chars_3mod[] = {
00312   /* Normal, Shifted, Ctrl */
00313   /* Legacy (telnet-style) ascii escapes */
00314   { VK_OEM_4, 0, {'[', '{', 0x1b /* ESC */} },
00315   { VK_OEM_6, 0, {']', '}', 0x1d /* GS */} },
00316   { VK_OEM_5, 0, {'\\','|', 0x1c /* FS */} },
00317   { VK_RETURN,0, {'\r', '\r', '\n'} },
00318   { 0,0 }
00319 };
00320 
00321 ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = {
00322   /* Normal, Shifted, Ctrl, C-S-x */
00323 
00324   /* The alphabet */
00325   { 'A',         0, {SHIN, SHIN, 0x01, 0x01} },
00326   { 'B',         0, {NUN, NUN, 0x02, 0x02} },
00327   { 'C',         0, {BET, BET, 0x03, 0x03} },
00328   { 'D',         0, {GIMEL, GIMEL, 0x04, 0x04} },
00329   { 'E',         0, {QOF, QOF, 0x05, 0x05} },
00330   { 'F',         0, {KAF, KAF, 0x06, 0x06} },
00331   { 'G',         0, {AYIN, AYIN, 0x07, 0x07} },
00332   { 'H',         0, {QOF, QOF, 0x08, 0x08} },
00333   { 'I',         0, {NUN_SOFIT, NUN_SOFIT, 0x09, 0x09} },
00334   { 'J',         0, {HET, HET, 0x0a, 0x0a} },
00335   { 'K',         0, {LAMED, LAMED, 0x0b, 0x0b} },
00336   { 'L',         0, {KAF_SOFIT, KAF_SOFIT, 0x0c, 0x0c} },
00337   { 'M',         0, {TSADI, TSADI, 0x0d, 0x0d} },
00338   { 'N',         0, {MEM, MEM, 0x0e, 0x0e} },
00339   { 'O',         0, {MEM_SOFIT, MEM_SOFIT, 0x0f, 0x0f} },
00340   { 'P',         0, {PEY, PEY, 0x10, 0x10} },
00341   { VK_OEM_2,    0, {'/', '?', 0x11, 0x11} },
00342   { 'R',         0, {RESH, RESH, 0x12, 0x12} },
00343   { 'S',         0, {DALET, DALET, 0x13, 0x13} },
00344   { 'T',         0, {ALEF, ALEF, 0x14, 0x14} },
00345   { 'U',         0, {VAV, VAV, 0x15, 0x15} },
00346   { 'V',         0, {HEY, HEY, 0x16, 0x16} },
00347   { VK_OEM_7,    0, {'\'', '\"', 0x17, 0x17} },
00348   { 'X',         0, {SAMEKH, SAMEKH, 0x18, 0x18} },
00349   { 'Y',         0, {TET, TET, 0x19, 0x19} },
00350   { 'Z',         0, {ZAYIN, ZAYIN, 0x1a, 0x1a} },
00351 
00352   /* Legacy Ascii generators */
00353   { '2', 0, {'2', '@', WCH_NONE, 0} },
00354   { '6', 0, {'6', '^', WCH_NONE, 0x1e /* RS */} },
00355   { VK_OEM_MINUS, 0, {'-', '_', WCH_NONE, 0x1f /* US */} },
00356   { 0, 0 }
00357 };
00358 
00359 ROSDATA VK_TO_WCHARS1 keypad_numbers[] =
00360 {
00361   { VK_NUMPAD0, 0, {'0'} },
00362   { VK_NUMPAD1, 0, {'1'} },
00363   { VK_NUMPAD2, 0, {'2'} },
00364   { VK_NUMPAD3, 0, {'3'} },
00365   { VK_NUMPAD4, 0, {'4'} },
00366   { VK_NUMPAD5, 0, {'5'} },
00367   { VK_NUMPAD6, 0, {'6'} },
00368   { VK_NUMPAD7, 0, {'7'} },
00369   { VK_NUMPAD8, 0, {'8'} },
00370   { VK_NUMPAD9, 0, {'9'} },
00371   { VK_DECIMAL, 0, {'.'} },
00372   { VK_BACK,    0, {'\010'} },
00373   { 0,0 }
00374 };
00375 
00376 #define vk_master(n,x) { (PVK_TO_WCHARS1)x, n, sizeof(x[0]) }
00377 
00378 ROSDATA VK_TO_WCHAR_TABLE vk_to_wchar_master_table[] =
00379 {
00380   vk_master(1,keypad_numbers),
00381   vk_master(2,key_to_chars_2mod),
00382   vk_master(3,key_to_chars_3mod),
00383   vk_master(4,key_to_chars_4mod),
00384   { 0,0,0 }
00385 };
00386 
00387 ROSDATA VSC_LPWSTR key_names[] =
00388 {
00389   { 0x00, L"" },
00390   { 0x01, L"Esc" },
00391   { 0x0e, L"Backspace" },
00392   { 0x0f, L"Tab" },
00393   { 0x1c, L"Enter" },
00394   { 0x1d, L"Ctrl" },
00395   { 0x2a, L"Shift" },
00396   { 0x36, L"Right Shift" },
00397   { 0x37, L"Num *" },
00398   { 0x38, L"Alt" },
00399   { 0x39, L"Space" },
00400   { 0x3a, L"CAPLOK Lock" },
00401   { 0x3b, L"F1" },
00402   { 0x3c, L"F2" },
00403   { 0x3d, L"F3" },
00404   { 0x3e, L"F4" },
00405   { 0x3f, L"F5" },
00406   { 0x40, L"F6" },
00407   { 0x41, L"F7" },
00408   { 0x42, L"F8" },
00409   { 0x43, L"F9" },
00410   { 0x44, L"F10" },
00411   { 0x45, L"Pause" },
00412   { 0x46, L"Scroll Lock" },
00413   { 0x47, L"Num 7" },
00414   { 0x48, L"Num 8" },
00415   { 0x49, L"Num 9" },
00416   { 0x4a, L"Num -" },
00417   { 0x4b, L"Num 4" },
00418   { 0x4c, L"Num 5" },
00419   { 0x4d, L"Num 6" },
00420   { 0x4e, L"Num +" },
00421   { 0x4f, L"Num 1" },
00422   { 0x50, L"Num 2" },
00423   { 0x51, L"Num 3" },
00424   { 0x52, L"Num 0" },
00425   { 0x53, L"Num Del" },
00426   { 0x54, L"Sys Req" },
00427   { 0x57, L"F11" },
00428   { 0x58, L"F12" },
00429   { 0x7c, L"F13" },
00430   { 0x7d, L"F14" },
00431   { 0x7e, L"F15" },
00432   { 0x7f, L"F16" },
00433   { 0x80, L"F17" },
00434   { 0x81, L"F18" },
00435   { 0x82, L"F19" },
00436   { 0x83, L"F20" },
00437   { 0x84, L"F21" },
00438   { 0x85, L"F22" },
00439   { 0x86, L"F23" },
00440   { 0x87, L"F24" },
00441   { 0, NULL },
00442 };
00443 
00444 ROSDATA VSC_LPWSTR extended_key_names[] =
00445 {
00446   { 0x1c, L"Num Enter" },
00447   { 0x1d, L"Right Ctrl" },
00448   { 0x35, L"Num /" },
00449   { 0x37, L"Prnt Scrn" },
00450   { 0x38, L"Right Alt" },
00451   { 0x45, L"Num Lock" },
00452   { 0x46, L"Break" },
00453   { 0x47, L"Home" },
00454   { 0x48, L"Up" },
00455   { 0x49, L"Page Up" },
00456   { 0x4a, L"Left" },
00457   { 0x4c, L"Center" },
00458   { 0x4d, L"Right" },
00459   { 0x4f, L"End" },
00460   { 0x50, L"Down" },
00461   { 0x51, L"Page Down" },
00462   { 0x52, L"Insert" },
00463   { 0x53, L"Delete" },
00464   { 0x54, L"<ReactOS>" },
00465   { 0x55, L"Help" },
00466   { 0x56, L"Left Windows" },
00467   { 0x5b, L"Right Windows" },
00468   { 0, NULL },
00469 };
00470 
00471 /* Finally, the master table */
00472 ROSDATA KBDTABLES keyboard_layout_table =
00473 {
00474   /* modifier assignments */
00475   &modifier_bits,
00476 
00477   /* character from vk tables */
00478   vk_to_wchar_master_table,
00479 
00480   /* diacritical marks -- currently implemented by wine code */
00481   NULL,
00482 
00483   /* Key names */
00484   (VSC_LPWSTR *)key_names,
00485   (VSC_LPWSTR *)extended_key_names,
00486   NULL, /* Dead key names */
00487 
00488   /* scan code to virtual key maps */
00489   scancode_to_vk,
00490   sizeof(scancode_to_vk) / sizeof(scancode_to_vk[0]),
00491   extcode0_to_vk,
00492   extcode1_to_vk,
00493 
00494   MAKELONG(0, 1), /* Version 1.0 */
00495 
00496   /* Ligatures -- Hebrew doesn't have any */
00497   0,
00498   0,
00499   NULL
00500 };
00501 
00502 PKBDTABLES WINAPI KbdLayerDescriptor(VOID)
00503 {
00504   return &keyboard_layout_table;
00505 }
00506 

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