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

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

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.