Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

f3ahvoas.c

Go to the documentation of this file.
00001 /***************************************************************************\ 00002 * Module Name: f3ahvoas. 00003 * 00004 * Copyright (c) 1985-92, Microsoft Corporation 00005 * 00006 * History: 00007 \***************************************************************************/ 00008 00009 #include <nt.h> 00010 #include <ntrtl.h> 00011 #include <nturtl.h> 00012 #include <windows.h> 00013 #include <ime.h> 00014 #include "vkoem.h" 00015 #include "kbdjpn.h" 00016 #include "f3ahvoas.h" 00017 00018 #include "cscall.h" 00019 #include "usercall.h" 00020 00021 #if defined(_M_IA64) 00022 #pragma section(".data") 00023 #define ALLOC_SECTION_LDATA __declspec(allocate(".data")) 00024 #else 00025 #pragma data_seg(".data") 00026 #define ALLOC_SECTION_LDATA 00027 #endif 00028 00029 /***************************************************************************\ 00030 * ausVK[] - Virtual Scan Code to Virtual Key conversion table for F3AHVOAS 00031 \***************************************************************************/ 00032 00033 static ALLOC_SECTION_LDATA USHORT ausVK[] = { 00034 T00, T01, T02, T03, T04, T05, T06, T07, 00035 T08, T09, T0A, T0B, T0C, T0D, T0E, T0F, 00036 T10, T11, T12, T13, T14, T15, T16, T17, 00037 T18, T19, T1A, T1B, T1C, T1D, T1E, T1F, 00038 T20, T21, T22, T23, T24, T25, T26, T27, 00039 T28, 00040 00041 /* 00042 * Hankaku/Zenkaku/Kanji key must have KBDSPECIAL bit set (NLS key) 00043 */ 00044 T29 | KBDSPECIAL, 00045 00046 T2A, T2B, T2C, T2D, T2E, T2F, 00047 T30, T31, T32, T33, T34, T35, 00048 00049 /* 00050 * Right-hand Shift key must have KBDEXT bit set. 00051 */ 00052 T36 | KBDEXT, 00053 00054 /* 00055 * numpad_* + Shift/Alt -> SnapShot 00056 */ 00057 T37 | KBDMULTIVK, 00058 00059 T38, T39, 00060 00061 /* 00062 * Alphanumeric/CapsLock key must have KBDSPECIAL bit set (NLS key) 00063 */ 00064 T3A | KBDSPECIAL, 00065 00066 T3B, T3C, T3D, T3E, T3F, 00067 T40, T41, T42, T43, T44, 00068 00069 /* 00070 * NumLock Key: 00071 * KBDEXT - VK_NUMLOCK is an Extended key 00072 * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL) 00073 */ 00074 T45 | KBDEXT | KBDMULTIVK, 00075 00076 T46 | KBDMULTIVK, 00077 00078 /* 00079 * Number Pad keys: 00080 * KBDNUMPAD - digits 0-9 and decimal point. 00081 * KBDSPECIAL - require special processing by Windows 00082 */ 00083 T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home) 00084 T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up), 00085 T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp), 00086 T4A, 00087 T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left), 00088 T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear), 00089 T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right), 00090 T4E, 00091 T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End), 00092 T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down), 00093 T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn), 00094 T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins), 00095 T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del), 00096 00097 T54, T55, T56, T57, T58, T59, T5A, T5B, 00098 T5C, T5D, T5E, T5F, T60, T61, T62, T63, 00099 T64, T65, T66, T67, T68, T69, T6A, T6B, 00100 T6C, T6D, T6E, T6F, 00101 00102 /* 00103 * Hiragana/Katakana/Roman key must have KBDSPECIAL bit set (NLS key) 00104 */ 00105 T70 | KBDSPECIAL, 00106 00107 T71, T72, T73, 00108 T74, T75, T76, T77, T78, 00109 00110 /* 00111 * Conversion key must have KBDSPECIAL bit set (NLS key) 00112 */ 00113 T79 | KBDSPECIAL, 00114 00115 T7A, 00116 00117 /* 00118 * Non-Conversion key must have KBDSPECIAL bit set (NLS key) 00119 */ 00120 T7B | KBDSPECIAL, 00121 00122 T7C, T7D, T7E, T7F 00123 00124 }; 00125 00126 static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = { 00127 { 0x1C, X1C | KBDEXT }, // Numpad Enter 00128 { 0x1D, X1D | KBDEXT }, // RControl 00129 { 0x35, X35 | KBDEXT }, // Numpad Divide 00130 { 0x37, X37 | KBDEXT }, // Snapshot 00131 { 0x38, X38 | KBDEXT }, // RMenu 00132 { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause) 00133 { 0x47, X47 | KBDEXT }, // Home 00134 { 0x48, X48 | KBDEXT }, // Up 00135 { 0x49, X49 | KBDEXT }, // Prior 00136 { 0x4B, X4B | KBDEXT }, // Left 00137 { 0x4D, X4D | KBDEXT }, // Right 00138 { 0x4F, X4F | KBDEXT }, // End 00139 { 0x50, X50 | KBDEXT }, // Down 00140 { 0x51, X51 | KBDEXT }, // Next 00141 { 0x52, X52 | KBDEXT }, // Insert 00142 { 0x53, X53 | KBDEXT }, // Delete 00143 { 0x5B, X5B | KBDEXT }, // Left Win 00144 { 0x5C, X5C | KBDEXT }, // Right Win 00145 { 0x5D, X5D | KBDEXT }, // Application 00146 { 0, 0 } 00147 }; 00148 00149 static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = { 00150 { 0x1D, Y1D }, // Pause 00151 { 0 , 0 } 00152 }; 00153 00154 /***************************************************************************\ 00155 * aVkToBits[] - map Virtual Keys to Modifier Bits 00156 * 00157 * See kbd.h for a full description. 00158 * 00159 * US Keyboard has only three shifter keys: 00160 * SHIFT (L & R) affects alphabnumeric keys, 00161 * CTRL (L & R) is used to generate control characters 00162 * ALT (L & R) used for generating characters by number with numpad 00163 \***************************************************************************/ 00164 00165 static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = { 00166 { VK_SHIFT, KBDSHIFT }, 00167 { VK_CONTROL, KBDCTRL }, 00168 { VK_MENU, KBDALT }, 00169 { VK_KANA, KBDKANA }, 00170 { 0, 0 } 00171 }; 00172 00173 /***************************************************************************\ 00174 * aModification[] - map character modifier bits to modification number 00175 * 00176 * See kbd.h for a full description. 00177 * 00178 \***************************************************************************/ 00179 00180 static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = { 00181 &aVkToBits[0], 00182 11, 00183 { 00184 // Modification# // Keys Pressed : Explanation 00185 // ============= // ============== : ============================= 00186 0, // : unshifted characters 00187 1, // SHIFT : capitals, ~!@#$%^&*()_+{}:"<>? etc. 00188 4, // CTRL : control characters 00189 6, // CTRL SHIFT : 00190 SHFT_INVALID, // ALT : invalid 00191 SHFT_INVALID, // ALT SHIFT : invalid 00192 SHFT_INVALID, // ALT CTRL : invalid 00193 SHFT_INVALID, // ALT CTRL SHIFT : invalid 00194 2, //KANA 00195 3, //KANA SHIFT 00196 5, //KANA CTRL 00197 7 //KANA CTRL SHIFT 00198 } 00199 }; 00200 00201 /***************************************************************************\ 00202 * 00203 * aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states 00204 * aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states 00205 * aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states 00206 * 00207 * Table attributes: Unordered Scan, null-terminated 00208 * 00209 * Search this table for an entry with a matching Virtual Key to find the 00210 * corresponding unshifted and shifted WCHAR characters. 00211 * 00212 * Reserved VirtualKey values (first column) 00213 * -1 - this line contains dead characters (diacritic) 00214 * 0 - terminator 00215 * 00216 * Reserved Attribute values (second column) 00217 * CAPLOK - CapsLock affects this key like Shift 00218 * KANALOK - The KANA-LOCK key affects this key like KANA 00219 * 00220 * Reserved character values (third through last column) 00221 * WCH_NONE - No character 00222 * WCH_DEAD - Dead character (diacritic) value is in next line 00223 * 00224 \***************************************************************************/ 00225 00226 static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = { 00227 // | | SHIFT | KANA | K+SHFT | 00228 // | |==========|========|========| 00229 {'0' , KANALOK ,'0' ,WCH_NONE ,WCH_WA ,WCH_WO }, 00230 {'1' , KANALOK ,'1' ,'!' ,WCH_NU ,WCH_NU }, 00231 {'3' , KANALOK ,'3' ,'#' ,WCH_A ,WCH_AA }, 00232 {'4' , KANALOK ,'4' ,'$' ,WCH_U ,WCH_UU }, 00233 {'5' , KANALOK ,'5' ,'%' ,WCH_E ,WCH_EE }, 00234 {'7' , KANALOK ,'7' ,0x27 ,WCH_YA ,WCH_YAA }, 00235 {'8' , KANALOK ,'8' ,'(' ,WCH_YU ,WCH_YUU }, 00236 {'9' , KANALOK ,'9' ,')' ,WCH_YO ,WCH_YOO }, 00237 {'A' , CAPLOK | KANALOK ,'a' ,'A' ,WCH_TI ,WCH_TI }, 00238 {'B' , CAPLOK | KANALOK ,'b' ,'B' ,WCH_KO ,WCH_KO }, 00239 {'C' , CAPLOK | KANALOK ,'c' ,'C' ,WCH_SO ,WCH_SO }, 00240 {'D' , CAPLOK | KANALOK ,'d' ,'D' ,WCH_SI ,WCH_SI }, 00241 {'E' , CAPLOK | KANALOK ,'e' ,'E' ,WCH_I ,WCH_II }, 00242 {'F' , CAPLOK | KANALOK ,'f' ,'F' ,WCH_HA ,WCH_HA }, 00243 {'G' , CAPLOK | KANALOK ,'g' ,'G' ,WCH_KI ,WCH_KI }, 00244 {'H' , CAPLOK | KANALOK ,'h' ,'H' ,WCH_KU ,WCH_KU }, 00245 {'I' , CAPLOK | KANALOK ,'i' ,'I' ,WCH_NI ,WCH_NI }, 00246 {'J' , CAPLOK | KANALOK ,'j' ,'J' ,WCH_MA ,WCH_MA }, 00247 {'K' , CAPLOK | KANALOK ,'k' ,'K' ,WCH_NO ,WCH_NO }, 00248 {'L' , CAPLOK | KANALOK ,'l' ,'L' ,WCH_RI ,WCH_RI }, 00249 {'M' , CAPLOK | KANALOK ,'m' ,'M' ,WCH_MO ,WCH_MO }, 00250 {'N' , CAPLOK | KANALOK ,'n' ,'N' ,WCH_MI ,WCH_MI }, 00251 {'O' , CAPLOK | KANALOK ,'o' ,'O' ,WCH_RA ,WCH_RA }, 00252 {'P' , CAPLOK | KANALOK ,'p' ,'P' ,WCH_SE ,WCH_SE }, 00253 {'Q' , CAPLOK | KANALOK ,'q' ,'Q' ,WCH_TA ,WCH_TA }, 00254 {'R' , CAPLOK | KANALOK ,'r' ,'R' ,WCH_SU ,WCH_SU }, 00255 {'S' , CAPLOK | KANALOK ,'s' ,'S' ,WCH_TO ,WCH_TO }, 00256 {'T' , CAPLOK | KANALOK ,'t' ,'T' ,WCH_KA ,WCH_KA }, 00257 {'U' , CAPLOK | KANALOK ,'u' ,'U' ,WCH_NA ,WCH_NA }, 00258 {'V' , CAPLOK | KANALOK ,'v' ,'V' ,WCH_HI ,WCH_HI }, 00259 {'W' , CAPLOK | KANALOK ,'w' ,'W' ,WCH_TE ,WCH_TE }, 00260 {'X' , CAPLOK | KANALOK ,'x' ,'X' ,WCH_SA ,WCH_SA }, 00261 {'Y' , CAPLOK | KANALOK ,'y' ,'Y' ,WCH_NN ,WCH_NN }, 00262 {'Z' , CAPLOK | KANALOK ,'z' ,'Z' ,WCH_TU ,WCH_TUU }, 00263 {VK_OEM_1 , KANALOK ,':' ,'*' ,WCH_KE ,WCH_KE }, 00264 {VK_OEM_2 , KANALOK ,'/' ,'?' ,WCH_ME ,WCH_MD }, 00265 {VK_OEM_3 , KANALOK ,'@' ,'`' ,WCH_VS ,WCH_VS }, 00266 {VK_OEM_7 , KANALOK ,'^' ,'~' ,WCH_HE ,WCH_HE }, 00267 {VK_OEM_8 , 0 ,WCH_NONE ,WCH_NONE ,WCH_NONE,WCH_NONE}, 00268 {VK_OEM_COMMA , KANALOK ,',' ,'<' ,WCH_NE ,WCH_IC }, 00269 {VK_OEM_PERIOD, KANALOK ,'.' ,'>' ,WCH_RU ,WCH_IP }, 00270 {VK_OEM_PLUS , KANALOK ,';' ,'+' ,WCH_RE ,WCH_RE }, 00271 {VK_TAB , 0 ,'\t' ,'\t' ,'\t' ,'\t' }, 00272 {VK_ADD , 0 ,'+' ,'+' ,'+' ,'+' }, 00273 {VK_DECIMAL , 0 ,'.' ,'.' ,'.' ,'.' }, 00274 {VK_DIVIDE , 0 ,'/' ,'/' ,'/' ,'/' }, 00275 {VK_MULTIPLY , 0 ,'*' ,'*' ,'*' ,'*' }, 00276 {VK_SUBTRACT , 0 ,'-' ,'-' ,'-' ,'-' }, 00277 {0 , 0 ,0 ,0 ,0 ,0 } 00278 }; 00279 00280 static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = { 00281 // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL | 00282 // | |==========|========|========|===========|===========| 00283 {VK_BACK , 0 ,'\b' ,'\b' ,'\b' ,'\b' , 0x7f , 0x7f }, 00284 {VK_CANCEL , 0 ,0x03 ,0x03 ,0x03 ,0x03 , 0x03 , 0x03 }, 00285 {VK_ESCAPE , 0 ,0x1b ,0x1b ,0x1b ,0x1b , 0x1b , 0x1b }, 00286 {VK_OEM_4 , KANALOK ,'[' ,'{' ,WCH_SVS ,WCH_OB , 0x1b , 0x1b }, 00287 {VK_OEM_5 , KANALOK ,'\\' ,'|' ,WCH_PS ,WCH_PS , 0x1c , 0x1c }, 00288 {VK_OEM_102 , KANALOK ,'\\' ,'_' ,WCH_RO ,WCH_RO , 0x1c , 0x1c }, 00289 {VK_OEM_6 , KANALOK ,']' ,'}' ,WCH_MU ,WCH_CB , 0x1d , 0x1d }, 00290 {VK_RETURN , 0 ,'\r' ,'\r' ,'\r' ,'\r' , '\n' , '\n' }, 00291 {VK_SPACE , 0 ,' ' ,' ' ,' ' ,' ' , 0x20 , 0x20 }, 00292 {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 } 00293 }; 00294 00295 static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = { 00296 // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL | SHFT+CTRL |K+SHFT+CTRL| 00297 // | |==========|========|========|===========|===========|===========|===========| 00298 {'2' , KANALOK ,'2' ,'"' ,WCH_HU ,WCH_HU , WCH_NONE , WCH_NONE , 0x00 , 0x00 }, 00299 {'6' , KANALOK ,'6' ,'&' ,WCH_O ,WCH_OO , WCH_NONE , WCH_NONE , 0x1e , 0x1e }, 00300 {VK_OEM_MINUS , KANALOK ,'-' ,'=' ,WCH_HO ,WCH_HO , WCH_NONE , WCH_NONE , 0x1f , 0x1f }, 00301 {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 } 00302 }; 00303 00304 // Put this last so that VkKeyScan interprets number characters 00305 // as coming from the main section of the kbd (aVkToWch2 and 00306 // aVkToWch4) before considering the numpad (aVkToWch1). 00307 00308 static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch1[] = { 00309 // | | SHIFT | KANA | K+SHFT | 00310 // | |==========|========|========| 00311 { VK_NUMPAD0 , 0 , '0' , WCH_NONE , '0' ,WCH_NONE}, 00312 { VK_NUMPAD1 , 0 , '1' , WCH_NONE , '1' ,WCH_NONE}, 00313 { VK_NUMPAD2 , 0 , '2' , WCH_NONE , '2' ,WCH_NONE}, 00314 { VK_NUMPAD3 , 0 , '3' , WCH_NONE , '3' ,WCH_NONE}, 00315 { VK_NUMPAD4 , 0 , '4' , WCH_NONE , '4' ,WCH_NONE}, 00316 { VK_NUMPAD5 , 0 , '5' , WCH_NONE , '5' ,WCH_NONE}, 00317 { VK_NUMPAD6 , 0 , '6' , WCH_NONE , '6' ,WCH_NONE}, 00318 { VK_NUMPAD7 , 0 , '7' , WCH_NONE , '7' ,WCH_NONE}, 00319 { VK_NUMPAD8 , 0 , '8' , WCH_NONE , '8' ,WCH_NONE}, 00320 { VK_NUMPAD9 , 0 , '9' , WCH_NONE , '9' ,WCH_NONE}, 00321 { 0 , 0 , '\0' , 0 , 0 ,0 } //null terminator 00322 }; 00323 00324 /***************************************************************************\ 00325 * aVkToWcharTable: table of pointers to Character Tables 00326 * 00327 * Describes the character tables and the order they should be searched. 00328 * 00329 * Note: the order determines the behavior of VkKeyScan() : this function 00330 * takes a character and attempts to find a Virtual Key and character- 00331 * modifier key combination that produces that character. The table 00332 * containing the numeric keypad (aVkToWch1) must appear last so that 00333 * VkKeyScan('0') will be interpreted as one of keys from the main 00334 * section, not the numpad. etc. 00335 \***************************************************************************/ 00336 00337 static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = { 00338 { (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) }, 00339 { (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) }, 00340 { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) }, 00341 { (PVK_TO_WCHARS1)aVkToWch1, 4, sizeof(aVkToWch1[0]) }, // must come last 00342 { NULL, 0, 0 } 00343 }; 00344 00345 /***************************************************************************\ 00346 * aKeyNames[], aKeyNamesExt[] - Scan Code -> Key Name tables 00347 * 00348 * For the GetKeyNameText() API function 00349 * 00350 * Tables for non-extended and extended (KBDEXT) keys. 00351 * (Keys producing printable characters are named by the character itself) 00352 \***************************************************************************/ 00353 00354 static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = { 00355 0x01, L"Esc", 00356 0x0e, L"Backspace", 00357 0x0f, L"Tab", 00358 0x1c, L"Enter", 00359 0x1d, L"Ctrl", 00360 0x29, (LPWSTR)SZ_KEY_NAME_HANKAKU_ZENKAKU, // NLS Key 00361 0x2a, L"Shift", 00362 0x36, L"Right Shift", 00363 0x37, L"Num *", 00364 0x38, L"Alt", 00365 0x39, L"Space", 00366 0x3a, L"Caps Lock", 00367 0x3b, L"F1", 00368 0x3c, L"F2", 00369 0x3d, L"F3", 00370 0x3e, L"F4", 00371 0x3f, L"F5", 00372 0x40, L"F6", 00373 0x41, L"F7", 00374 0x42, L"F8", 00375 0x43, L"F9", 00376 0x44, L"F10", 00377 0x45, L"Pause", 00378 0x46, L"Scroll Lock", 00379 0x47, L"Num 7", 00380 0x48, L"Num 8", 00381 0x49, L"Num 9", 00382 0x4a, L"Num -", 00383 0x4b, L"Num 4", 00384 0x4c, L"Num 5", 00385 0x4d, L"Num 6", 00386 0x4e, L"Num +", 00387 0x4f, L"Num 1", 00388 0x50, L"Num 2", 00389 0x51, L"Num 3", 00390 0x52, L"Num 0", 00391 0x53, L"Num Del", 00392 0x54, L"Sys Req", 00393 0x57, L"F11", 00394 0x58, L"F12", 00395 0x70, (LPWSTR)SZ_KEY_NAME_HIRAGANA, 00396 0x79, (LPWSTR)SZ_KEY_NAME_HENKAN, 00397 0x7b, (LPWSTR)SZ_KEY_NAME_MUHENKAN, 00398 0x7C, L"F13", 00399 0 , NULL 00400 }; 00401 00402 static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNamesExt[] = { 00403 0x1c, L"Num Enter", 00404 0x1d, L"Right Control", 00405 0x35, L"Num /", 00406 0x37, L"Prnt Scrn", 00407 0x38, L"Right Alt", 00408 0x45, L"Num Lock", 00409 0x46, L"Break", 00410 0x47, L"Home", 00411 0x48, L"Up", 00412 0x49, L"Page Up", 00413 0x4b, L"Left", 00414 0x4d, L"Right", 00415 0x4f, L"End", 00416 0x50, L"Down", 00417 0x51, L"Page Down", 00418 0x52, L"Insert", 00419 0x53, L"Delete", 00420 0x5B, L"Left Windows", 00421 0x5C, L"Right Windows", 00422 0x5D, L"Application", 00423 0 , NULL 00424 }; 00425 00426 static ALLOC_SECTION_LDATA KBDTABLES KbdTables = { 00427 /* 00428 * Modifier keys 00429 */ 00430 &CharModifiers, 00431 00432 /* 00433 * Characters tables 00434 */ 00435 aVkToWcharTable, 00436 00437 /* 00438 * Diacritics (none for US English) 00439 */ 00440 NULL, 00441 00442 /* 00443 * Names of Keys (no dead keys) 00444 */ 00445 aKeyNames, 00446 aKeyNamesExt, 00447 NULL, 00448 00449 /* 00450 * Scan codes to Virtual Keys 00451 */ 00452 ausVK, 00453 sizeof(ausVK) / sizeof(ausVK[0]), 00454 aE0VscToVk, 00455 aE1VscToVk, 00456 00457 /* 00458 * No Locale-specific special processing 00459 */ 00460 0 00461 }; 00462 00463 PKBDTABLES KbdLayerDescriptor(VOID) 00464 { 00465 return &KbdTables; 00466 } 00467 00468 /***********************************************************************\ 00469 * VkToFuncTable_F3AHVOAS[] 00470 * 00471 \***********************************************************************/ 00472 00473 static ALLOC_SECTION_LDATA VK_F VkToFuncTable_F3AHVOAS[] = { 00474 { 00475 VK_DBE_ALPHANUMERIC, // Base Vk 00476 KBDNLS_TYPE_TOGGLE, // NLSFEProcType 00477 KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent 00478 0x02, /* 00000010 */ // NLSFEProcSwitch 00479 { // NLSFEProc 00480 {KBDNLS_ALPHANUM,0}, // Base 00481 {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Shift 00482 {KBDNLS_ALPHANUM,0}, // Control 00483 {KBDNLS_ALPHANUM,0}, // Shift+Control 00484 {KBDNLS_ALPHANUM,0}, // Alt 00485 {KBDNLS_ALPHANUM,0}, // Shift+Alt 00486 {KBDNLS_CODEINPUT,0}, // Control+Alt 00487 {KBDNLS_CODEINPUT,0} // Shift+Control+Alt 00488 }, 00489 { // NLSFEProcAlt 00490 {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Base 00491 {KBDNLS_SEND_PARAM_VK,VK_CAPITAL}, // Shift 00492 {KBDNLS_NOEVENT,0}, // Control 00493 {KBDNLS_NOEVENT,0}, // Shift+Control 00494 {KBDNLS_NOEVENT,0}, // Alt 00495 {KBDNLS_NOEVENT,0}, // Shift+Alt 00496 {KBDNLS_NOEVENT,0}, // Control+Alt 00497 {KBDNLS_NOEVENT,0} // Shift+Control+Alt 00498 } 00499 }, 00500 { 00501 VK_DBE_HIRAGANA, // Base Vk 00502 KBDNLS_TYPE_TOGGLE, // NLSFEProcType 00503 KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent 00504 0x08, /* 00001000 */ // NLSFEProcSwitch 00505 { // NLSFEProc 00506 {KBDNLS_HIRAGANA,0}, // Base 00507 {KBDNLS_KATAKANA,0}, // Shift 00508 {KBDNLS_HIRAGANA,0}, // Control 00509 {KBDNLS_KANAEVENT,VK_KANA}, // Shift+Control 00510 {KBDNLS_ROMAN,0}, // Alt 00511 {KBDNLS_ROMAN,0}, // Shift+Alt 00512 {KBDNLS_ROMAN,0}, // Control+Alt 00513 {KBDNLS_NOEVENT,0} // Shift+Control+Alt 00514 }, 00515 { // NLSFEProcIndexAlt 00516 {KBDNLS_KANAEVENT,VK_KANA}, // Base 00517 {KBDNLS_KANAEVENT,VK_KANA}, // Shift 00518 {KBDNLS_KANAEVENT,VK_KANA}, // Control 00519 {KBDNLS_KANAEVENT,VK_KANA}, // Shift+Control 00520 {KBDNLS_NOEVENT,0}, // Alt 00521 {KBDNLS_NOEVENT,0}, // Shift+Alt 00522 {KBDNLS_NOEVENT,0}, // Control+Alt 00523 {KBDNLS_NOEVENT,0} // Shift+Control+Alt 00524 } 00525 }, 00526 { 00527 VK_DBE_SBCSCHAR, // Base Vk 00528 KBDNLS_TYPE_NORMAL, // NLSFEProcType 00529 KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent 00530 0x0, // NLSFEProcSwitch 00531 { // NLSFEProc 00532 {KBDNLS_SBCSDBCS,0}, // Base 00533 {KBDNLS_SBCSDBCS,0}, // Shift 00534 {KBDNLS_SBCSDBCS,0}, // Control 00535 {KBDNLS_SBCSDBCS,0}, // Shift+Control 00536 {KBDNLS_SEND_PARAM_VK,VK_KANJI}, // Alt 00537 {KBDNLS_SBCSDBCS,0}, // Shift+Alt 00538 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE}, // Control+Alt 00539 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERIMECONFIGMODE} // Shift+Control+Alt 00540 }, 00541 { // NLSFEProcIndexAlt 00542 {KBDNLS_NULL,0}, // Base 00543 {KBDNLS_NULL,0}, // Shift 00544 {KBDNLS_NULL,0}, // Control 00545 {KBDNLS_NULL,0}, // Shift+Control 00546 {KBDNLS_NULL,0}, // Alt 00547 {KBDNLS_NULL,0}, // Shift+Alt 00548 {KBDNLS_NULL,0}, // Control+Alt 00549 {KBDNLS_NULL,0} // Shift+Control+Alt 00550 } 00551 }, 00552 { 00553 VK_CONVERT, // Base Vk 00554 KBDNLS_TYPE_NORMAL, // NLSFEProcType 00555 KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent 00556 0x0, // NLSFEProcSwitch 00557 { // NLSFEProc 00558 {KBDNLS_CONV_OR_NONCONV,0}, // Base 00559 {KBDNLS_CONV_OR_NONCONV,0}, // Shift 00560 {KBDNLS_CONV_OR_NONCONV,0}, // Control 00561 {KBDNLS_CONV_OR_NONCONV,0}, // Shift+Control 00562 {KBDNLS_CONV_OR_NONCONV,0}, // Alt 00563 {KBDNLS_CONV_OR_NONCONV,0}, // Shift+Alt 00564 {KBDNLS_CONV_OR_NONCONV,0}, // Control+Alt 00565 {KBDNLS_CONV_OR_NONCONV,0}, // Shift+Control+Alt 00566 }, 00567 { // NLSFEProcIndexAlt 00568 {KBDNLS_NULL,0}, // Base 00569 {KBDNLS_NULL,0}, // Shift 00570 {KBDNLS_NULL,0}, // Control 00571 {KBDNLS_NULL,0}, // Shift+Control 00572 {KBDNLS_NULL,0}, // Alt 00573 {KBDNLS_NULL,0}, // Shift+Alt 00574 {KBDNLS_NULL,0}, // Control+Alt 00575 {KBDNLS_NULL,0} // Shift+Control+Alt 00576 } 00577 }, 00578 { 00579 VK_NONCONVERT, // Base Vk 00580 KBDNLS_TYPE_NORMAL, // NLSFEProcType 00581 KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent 00582 0x0, // NLSFEProcSwitch 00583 { // NLSFEProc 00584 {KBDNLS_CONV_OR_NONCONV,0}, // Base 00585 {KBDNLS_CONV_OR_NONCONV,0}, // Shift 00586 {KBDNLS_CONV_OR_NONCONV,0}, // Control 00587 {KBDNLS_CONV_OR_NONCONV,0}, // Shift+Control 00588 {KBDNLS_CONV_OR_NONCONV,0}, // Alt 00589 {KBDNLS_CONV_OR_NONCONV,0}, // Shift+Alt 00590 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE}, // Control+Alt 00591 {KBDNLS_SEND_PARAM_VK,VK_DBE_ENTERWORDREGISTERMODE} // Shift+Control+Alt 00592 }, 00593 { // NLSFEProcIndexAlt 00594 {KBDNLS_NULL,0}, // Base 00595 {KBDNLS_NULL,0}, // Shift 00596 {KBDNLS_NULL,0}, // Control 00597 {KBDNLS_NULL,0}, // Shift+Control 00598 {KBDNLS_NULL,0}, // Alt 00599 {KBDNLS_NULL,0}, // Shift+Alt 00600 {KBDNLS_NULL,0}, // Control+Alt 00601 {KBDNLS_NULL,0} // Shift+Control+Alt 00602 } 00603 } 00604 }; 00605 00606 /***********************************************************************\ 00607 * KbdNlsTables 00608 * 00609 \***********************************************************************/ 00610 00611 static ALLOC_SECTION_LDATA KBDNLSTABLES KbdNlsTables = { 00612 NLSKBD_OEM_FUJITSU, // OEM ID (0 = Microsoft) 00613 NLSKBD_INFO_SEND_IME_NOTIFICATION | 00614 NLSKBD_INFO_EMURATE_106_KEYBOARD, // Information 00615 5, // Number of VK_F entry 00616 VkToFuncTable_F3AHVOAS, // Pointer to VK_F array 00617 0, // Pointer to MouseVk entry 00618 NULL // Pointer to MouseVk array 00619 }; 00620 00621 PKBDNLSTABLES KbdNlsLayerDescriptor(VOID) 00622 { 00623 return &KbdNlsTables; 00624 } 00625 00626 VOID FujitsuOyayubiControl(DWORD dwOpen, DWORD dwConversion) 00627 { 00628 NtUserCallTwoParam(dwOpen, dwConversion, SFI_NLSKBDSENDIMENOTIFICATION); 00629 }

Generated on Sat May 15 19:39:58 2004 for test by doxygen 1.3.7