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

kbdax2.c

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

Generated on Sat May 15 19:40:32 2004 for test by doxygen 1.3.7