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

kbd101.c

Go to the documentation of this file.
00001 /***************************************************************************\ 00002 * Module Name: kbd101.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 "kbd101.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 101 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, 00034 00035 /* 00036 * '~' key must have KBDSPECIAL bit set. (NLS key) 00037 */ 00038 T29 | KBDSPECIAL, 00039 00040 T2A, T2B, T2C, T2D, T2E, T2F, 00041 T30, T31, T32, T33, T34, T35, 00042 00043 /* 00044 * Right-hand Shift key must have KBDEXT bit set. 00045 */ 00046 T36 | KBDEXT, 00047 00048 /* 00049 * numpad_* + Shift/Alt -> SnapShot 00050 */ 00051 T37 | KBDMULTIVK, 00052 00053 T38, T39, 00054 00055 /* 00056 * CapsLock key must have KBDSPECIAL bit set. (NLS key) 00057 */ 00058 T3A | KBDSPECIAL, 00059 00060 T3B, T3C, T3D, T3E, T3F, 00061 T40, T41, T42, T43, T44, 00062 00063 /* 00064 * NumLock Key: 00065 * KBDEXT - VK_NUMLOCK is an Extended key 00066 * KBDMULTIVK - VK_NUMLOCK or VK_PAUSE (without or with CTRL) 00067 */ 00068 T45 | KBDEXT | KBDMULTIVK, 00069 00070 T46 | KBDMULTIVK, 00071 00072 /* 00073 * Number Pad keys: 00074 * KBDNUMPAD - digits 0-9 and decimal point. 00075 * KBDSPECIAL - require special processing by Windows 00076 */ 00077 T47 | KBDNUMPAD | KBDSPECIAL, // Numpad 7 (Home) 00078 T48 | KBDNUMPAD | KBDSPECIAL, // Numpad 8 (Up), 00079 T49 | KBDNUMPAD | KBDSPECIAL, // Numpad 9 (PgUp), 00080 T4A, 00081 T4B | KBDNUMPAD | KBDSPECIAL, // Numpad 4 (Left), 00082 T4C | KBDNUMPAD | KBDSPECIAL, // Numpad 5 (Clear), 00083 T4D | KBDNUMPAD | KBDSPECIAL, // Numpad 6 (Right), 00084 T4E, 00085 T4F | KBDNUMPAD | KBDSPECIAL, // Numpad 1 (End), 00086 T50 | KBDNUMPAD | KBDSPECIAL, // Numpad 2 (Down), 00087 T51 | KBDNUMPAD | KBDSPECIAL, // Numpad 3 (PgDn), 00088 T52 | KBDNUMPAD | KBDSPECIAL, // Numpad 0 (Ins), 00089 T53 | KBDNUMPAD | KBDSPECIAL, // Numpad . (Del), 00090 00091 T54, T55, T56, T57, T58, T59, T5A, T5B, 00092 T5C, T5D, T5E, T5F, T60, T61, T62, T63, 00093 T64, T65, T66, T67, T68, T69, T6A, T6B, 00094 T6C, T6D, T6E, T6F, T70, T71, T72, T73, 00095 T74, T75, T76, T77, T78, T79, T7A, T7B, 00096 T7C, T7D, T7E, T7F 00097 00098 }; 00099 00100 static ALLOC_SECTION_LDATA VSC_VK aE0VscToVk[] = { 00101 { 0x10, X10 | KBDEXT }, // Speedracer: Previous Track 00102 { 0x19, X19 | KBDEXT }, // Speedracer: Next Track 00103 { 0x1C, X1C | KBDEXT }, // Numpad Enter 00104 { 0x1D, X1D | KBDEXT }, // RControl 00105 { 0x20, X20 | KBDEXT }, // Speedracer: Volume Mute 00106 { 0x21, X21 | KBDEXT }, // Speedracer: Launch App 2 00107 { 0x22, X22 | KBDEXT }, // Speedracer: Media Play/Pause 00108 { 0x24, X24 | KBDEXT }, // Speedracer: Media Stop 00109 { 0x2E, X2E | KBDEXT }, // Speedracer: Volume Down 00110 { 0x30, X30 | KBDEXT }, // Speedracer: Volume Up 00111 { 0x32, X32 | KBDEXT }, // Speedracer: Browser Home 00112 { 0x35, X35 | KBDEXT }, // Numpad Divide 00113 { 0x37, X37 | KBDEXT }, // Snapshot 00114 { 0x38, X38 | KBDEXT }, // RMenu 00115 { 0x46, X46 | KBDEXT }, // Break (Ctrl + Pause) 00116 { 0x47, X47 | KBDEXT }, // Home 00117 { 0x48, X48 | KBDEXT }, // Up 00118 { 0x49, X49 | KBDEXT }, // Prior 00119 { 0x4B, X4B | KBDEXT }, // Left 00120 { 0x4D, X4D | KBDEXT }, // Right 00121 { 0x4F, X4F | KBDEXT }, // End 00122 { 0x50, X50 | KBDEXT }, // Down 00123 { 0x51, X51 | KBDEXT }, // Next 00124 { 0x52, X52 | KBDEXT }, // Insert 00125 { 0x53, X53 | KBDEXT }, // Delete 00126 { 0x5B, X5B | KBDEXT }, // Left Win 00127 { 0x5C, X5C | KBDEXT }, // Right Win 00128 { 0x5D, X5D | KBDEXT }, // Application 00129 { 0x5F, X5F | KBDEXT }, // Speedracer: Sleep 00130 { 0x65, X65 | KBDEXT }, // Speedracer: Browser Search 00131 { 0x66, X66 | KBDEXT }, // Speedracer: Browser Favorites 00132 { 0x67, X67 | KBDEXT }, // Speedracer: Browser Refresh 00133 { 0x68, X68 | KBDEXT }, // Speedracer: Browser Stop 00134 { 0x69, X69 | KBDEXT }, // Speedracer: Browser Forward 00135 { 0x6A, X6A | KBDEXT }, // Speedracer: Browser Back 00136 { 0x6B, X6B | KBDEXT }, // Speedracer: Launch App 1 00137 { 0x6C, X6C | KBDEXT }, // Speedracer: Launch Mail 00138 { 0x6D, X6D | KBDEXT }, // Speedracer: Launch Media Selector 00139 { 0, 0 } 00140 }; 00141 00142 static ALLOC_SECTION_LDATA VSC_VK aE1VscToVk[] = { 00143 { 0x1D, Y1D }, // Pause 00144 { 0 , 0 } 00145 }; 00146 00147 /***************************************************************************\ 00148 * aVkToBits[] - map Virtual Keys to Modifier Bits 00149 * 00150 * See kbd.h for a full description. 00151 * 00152 * US Keyboard has only three shifter keys: 00153 * SHIFT (L & R) affects alphabnumeric keys, 00154 * CTRL (L & R) is used to generate control characters 00155 * ALT (L & R) used for generating characters by number with numpad 00156 \***************************************************************************/ 00157 00158 static ALLOC_SECTION_LDATA VK_TO_BIT aVkToBits[] = { 00159 { VK_SHIFT, KBDSHIFT }, 00160 { VK_CONTROL, KBDCTRL }, 00161 { VK_MENU, KBDALT }, 00162 { VK_KANA, KBDKANA }, 00163 { 0, 0 } 00164 }; 00165 00166 /***************************************************************************\ 00167 * aModification[] - map character modifier bits to modification number 00168 * 00169 * See kbd.h for a full description. 00170 * 00171 \***************************************************************************/ 00172 00173 static ALLOC_SECTION_LDATA MODIFIERS CharModifiers = { 00174 &aVkToBits[0], 00175 11, 00176 { 00177 // Modification# // Keys Pressed : Explanation 00178 // ============= // ============== : ============================= 00179 0, // : unshifted characters 00180 1, // SHIFT : capitals, ~!@#$%^&*()_+{}:"<>? etc. 00181 4, // CTRL : control characters 00182 6, // CTRL SHIFT : 00183 SHFT_INVALID, // ALT : invalid 00184 SHFT_INVALID, // ALT SHIFT : invalid 00185 SHFT_INVALID, // ALT CTRL : invalid 00186 SHFT_INVALID, // ALT CTRL SHIFT : invalid 00187 2, //KANA 00188 3, //KANA SHIFT 00189 5, //KANA CTRL 00190 7 //KANA CTRL SHIFT 00191 } 00192 }; 00193 00194 /***************************************************************************\ 00195 * 00196 * aVkToWch2[] - Virtual Key to WCHAR translation for 2 shift states 00197 * aVkToWch3[] - Virtual Key to WCHAR translation for 3 shift states 00198 * aVkToWch4[] - Virtual Key to WCHAR translation for 4 shift states 00199 * 00200 * Table attributes: Unordered Scan, null-terminated 00201 * 00202 * Search this table for an entry with a matching Virtual Key to find the 00203 * corresponding unshifted and shifted WCHAR characters. 00204 * 00205 * Reserved VirtualKey values (first column) 00206 * -1 - this line contains dead characters (diacritic) 00207 * 0 - terminator 00208 * 00209 * Reserved Attribute values (second column) 00210 * CAPLOK - CapsLock affects this key like Shift 00211 * KANALOK - The KANA-LOCK key affects this key like KANA 00212 * 00213 * Reserved character values (third through last column) 00214 * WCH_NONE - No character 00215 * WCH_DEAD - Dead character (diacritic) value is in next line 00216 * 00217 \***************************************************************************/ 00218 00219 static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch4[] = { 00220 // | | SHIFT | KANA | K+SHFT | 00221 // | |==========|========|========| 00222 {'0' , KANALOK ,'0' ,')' ,WCH_WA ,WCH_WO }, 00223 {'1' , KANALOK ,'1' ,'!' ,WCH_NU ,WCH_NU }, 00224 {'3' , KANALOK ,'3' ,'#' ,WCH_A ,WCH_AA }, 00225 {'4' , KANALOK ,'4' ,'$' ,WCH_U ,WCH_UU }, 00226 {'5' , KANALOK ,'5' ,'%' ,WCH_E ,WCH_EE }, 00227 {'7' , KANALOK ,'7' ,'&' ,WCH_YA ,WCH_YAA }, 00228 {'8' , KANALOK ,'8' ,'*' ,WCH_YU ,WCH_YUU }, 00229 {'9' , KANALOK ,'9' ,'(' ,WCH_YO ,WCH_YOO }, 00230 {'A' , CAPLOK | KANALOK ,'a' ,'A' ,WCH_TI ,WCH_TI }, 00231 {'B' , CAPLOK | KANALOK ,'b' ,'B' ,WCH_KO ,WCH_KO }, 00232 {'C' , CAPLOK | KANALOK ,'c' ,'C' ,WCH_SO ,WCH_SO }, 00233 {'D' , CAPLOK | KANALOK ,'d' ,'D' ,WCH_SI ,WCH_SI }, 00234 {'E' , CAPLOK | KANALOK ,'e' ,'E' ,WCH_I ,WCH_II }, 00235 {'F' , CAPLOK | KANALOK ,'f' ,'F' ,WCH_HA ,WCH_HA }, 00236 {'G' , CAPLOK | KANALOK ,'g' ,'G' ,WCH_KI ,WCH_KI }, 00237 {'H' , CAPLOK | KANALOK ,'h' ,'H' ,WCH_KU ,WCH_KU }, 00238 {'I' , CAPLOK | KANALOK ,'i' ,'I' ,WCH_NI ,WCH_NI }, 00239 {'J' , CAPLOK | KANALOK ,'j' ,'J' ,WCH_MA ,WCH_MA }, 00240 {'K' , CAPLOK | KANALOK ,'k' ,'K' ,WCH_NO ,WCH_NO }, 00241 {'L' , CAPLOK | KANALOK ,'l' ,'L' ,WCH_RI ,WCH_RI }, 00242 {'M' , CAPLOK | KANALOK ,'m' ,'M' ,WCH_MO ,WCH_MO }, 00243 {'N' , CAPLOK | KANALOK ,'n' ,'N' ,WCH_MI ,WCH_MI }, 00244 {'O' , CAPLOK | KANALOK ,'o' ,'O' ,WCH_RA ,WCH_RA }, 00245 {'P' , CAPLOK | KANALOK ,'p' ,'P' ,WCH_SE ,WCH_SE }, 00246 {'Q' , CAPLOK | KANALOK ,'q' ,'Q' ,WCH_TA ,WCH_TA }, 00247 {'R' , CAPLOK | KANALOK ,'r' ,'R' ,WCH_SU ,WCH_SU }, 00248 {'S' , CAPLOK | KANALOK ,'s' ,'S' ,WCH_TO ,WCH_TO }, 00249 {'T' , CAPLOK | KANALOK ,'t' ,'T' ,WCH_KA ,WCH_KA }, 00250 {'U' , CAPLOK | KANALOK ,'u' ,'U' ,WCH_NA ,WCH_NA }, 00251 {'V' , CAPLOK | KANALOK ,'v' ,'V' ,WCH_HI ,WCH_HI }, 00252 {'W' , CAPLOK | KANALOK ,'w' ,'W' ,WCH_TE ,WCH_TE }, 00253 {'X' , CAPLOK | KANALOK ,'x' ,'X' ,WCH_SA ,WCH_SA }, 00254 {'Y' , CAPLOK | KANALOK ,'y' ,'Y' ,WCH_NN ,WCH_NN }, 00255 {'Z' , CAPLOK | KANALOK ,'z' ,'Z' ,WCH_TU ,WCH_TUU }, 00256 {VK_OEM_1 , KANALOK ,';' ,':' ,WCH_RE ,WCH_RE }, 00257 {VK_OEM_2 , KANALOK ,'/' ,'?' ,WCH_ME ,WCH_MD }, 00258 {VK_OEM_3 , KANALOK ,'`' ,'~' ,WCH_RO ,WCH_RO }, 00259 {VK_OEM_7 , KANALOK ,0x27 ,'"' ,WCH_KE ,WCH_KE }, 00260 {VK_OEM_8 , 0 ,WCH_NONE ,WCH_NONE ,WCH_NONE,WCH_NONE}, 00261 {VK_OEM_COMMA , KANALOK ,',' ,'<' ,WCH_NE ,WCH_IC }, 00262 {VK_OEM_PERIOD, KANALOK ,'.' ,'>' ,WCH_RU ,WCH_IP }, 00263 {VK_OEM_PLUS , KANALOK ,'=' ,'+' ,WCH_HE ,WCH_HE }, 00264 {VK_TAB , 0 ,'\t' ,'\t' ,'\t' ,'\t' }, 00265 {VK_ADD , 0 ,'+' ,'+' ,'+' ,'+' }, 00266 {VK_DECIMAL , 0 ,'.' ,'.' ,'.' ,'.' }, 00267 {VK_DIVIDE , 0 ,'/' ,'/' ,'/' ,'/' }, 00268 {VK_MULTIPLY , 0 ,'*' ,'*' ,'*' ,'*' }, 00269 {VK_SUBTRACT , 0 ,'-' ,'-' ,'-' ,'-' }, 00270 {0 , 0 ,0 ,0 ,0 ,0 } 00271 }; 00272 00273 static ALLOC_SECTION_LDATA VK_TO_WCHARS6 aVkToWch6[] = { 00274 // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL | 00275 // | |==========|========|========|===========|===========| 00276 {VK_BACK , 0 ,'\b' ,'\b' ,'\b' ,'\b' , 0x7f , 0x7f }, 00277 {VK_CANCEL , 0 ,0x03 ,0x03 ,0x03 ,0x03 , 0x03 , 0x03 }, 00278 {VK_ESCAPE , 0 ,0x1b ,0x1b ,0x1b ,0x1b , 0x1b , 0x1b }, 00279 {VK_OEM_4 , KANALOK ,'[' ,'{' ,WCH_VS ,WCH_OB , 0x1b , 0x1b }, 00280 {VK_OEM_5 , KANALOK ,'\\' ,'|' ,WCH_MU ,WCH_MU , 0x1c , 0x1c }, 00281 {VK_OEM_102 , KANALOK ,'\\' ,'|' ,WCH_MU ,WCH_MU , 0x1c , 0x1c }, 00282 {VK_OEM_6 , KANALOK ,']' ,'}' ,WCH_SVS ,WCH_CB , 0x1d , 0x1d }, 00283 {VK_RETURN , 0 ,'\r' ,'\r' ,'\r' ,'\r' , '\n' , '\n' }, 00284 {VK_SPACE , 0 ,' ' ,' ' ,' ' ,' ' , 0x20 , 0x20 }, 00285 {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 } 00286 }; 00287 00288 static ALLOC_SECTION_LDATA VK_TO_WCHARS8 aVkToWch8[] = { 00289 // | | SHIFT | KANA | K+SHFT | CONTROL | K+CTRL | SHFT+CTRL |K+SHFT+CTRL| 00290 // | |==========|========|========|===========|===========|===========|===========| 00291 {'2' , KANALOK ,'2' ,'@' ,WCH_HU ,WCH_HU , WCH_NONE , WCH_NONE , 0x00 , 0x00 }, 00292 {'6' , KANALOK ,'6' ,'^' ,WCH_O ,WCH_OO , WCH_NONE , WCH_NONE , 0x1e , 0x1e }, 00293 {VK_OEM_MINUS , KANALOK ,'-' ,'_' ,WCH_HO ,WCH_PS , WCH_NONE , WCH_NONE , 0x1f , 0x1f }, 00294 {0 , 0 ,0 ,0 ,0 ,0 , 0 , 0 , 0 , 0 } 00295 }; 00296 00297 // Put this last so that VkKeyScan interprets number characters 00298 // as coming from the main section of the kbd (aVkToWch2 and 00299 // aVkToWch4) before considering the numpad (aVkToWch1). 00300 00301 static ALLOC_SECTION_LDATA VK_TO_WCHARS4 aVkToWch1[] = { 00302 // | | SHIFT | KANA | K+SHFT | 00303 // | |==========|========|========| 00304 { VK_NUMPAD0 , 0 , '0' , WCH_NONE , '0' ,WCH_NONE}, 00305 { VK_NUMPAD1 , 0 , '1' , WCH_NONE , '1' ,WCH_NONE}, 00306 { VK_NUMPAD2 , 0 , '2' , WCH_NONE , '2' ,WCH_NONE}, 00307 { VK_NUMPAD3 , 0 , '3' , WCH_NONE , '3' ,WCH_NONE}, 00308 { VK_NUMPAD4 , 0 , '4' , WCH_NONE , '4' ,WCH_NONE}, 00309 { VK_NUMPAD5 , 0 , '5' , WCH_NONE , '5' ,WCH_NONE}, 00310 { VK_NUMPAD6 , 0 , '6' , WCH_NONE , '6' ,WCH_NONE}, 00311 { VK_NUMPAD7 , 0 , '7' , WCH_NONE , '7' ,WCH_NONE}, 00312 { VK_NUMPAD8 , 0 , '8' , WCH_NONE , '8' ,WCH_NONE}, 00313 { VK_NUMPAD9 , 0 , '9' , WCH_NONE , '9' ,WCH_NONE}, 00314 { 0 , 0 , '\0' , 0 , 0 ,0 } //null terminator 00315 }; 00316 00317 /***************************************************************************\ 00318 * aVkToWcharTable: table of pointers to Character Tables 00319 * 00320 * Describes the character tables and the order they should be searched. 00321 * 00322 * Note: the order determines the behavior of VkKeyScan() : this function 00323 * takes a character and attempts to find a Virtual Key and character- 00324 * modifier key combination that produces that character. The table 00325 * containing the numeric keypad (aVkToWch1) must appear last so that 00326 * VkKeyScan('0') will be interpreted as one of keys from the main 00327 * section, not the numpad. etc. 00328 \***************************************************************************/ 00329 00330 static ALLOC_SECTION_LDATA VK_TO_WCHAR_TABLE aVkToWcharTable[] = { 00331 { (PVK_TO_WCHARS1)aVkToWch6, 6, sizeof(aVkToWch6[0]) }, 00332 { (PVK_TO_WCHARS1)aVkToWch8, 8, sizeof(aVkToWch8[0]) }, 00333 { (PVK_TO_WCHARS1)aVkToWch4, 4, sizeof(aVkToWch4[0]) }, 00334 { (PVK_TO_WCHARS1)aVkToWch1, 4, sizeof(aVkToWch1[0]) }, // must come last 00335 { NULL, 0, 0 } 00336 }; 00337 00338 /***************************************************************************\ 00339 * aKeyNames[], aKeyNamesExt[] - Scan Code -> Key Name tables 00340 * 00341 * For the GetKeyNameText() API function 00342 * 00343 * Tables for non-extended and extended (KBDEXT) keys. 00344 * (Keys producing printable characters are named by the character itself) 00345 \***************************************************************************/ 00346 00347 static ALLOC_SECTION_LDATA VSC_LPWSTR aKeyNames[] = { 00348 0x01, L"Esc", 00349 0x0e, L"Backspace", 00350 0x0f, L"Tab", 00351 0x1c, L"Enter", 00352 0x1d, L"Ctrl", 00353 0x2a, L"Shift", 00354 0x36, L"Right Shift", 00355 0x37, L"Num *", 00356 0x38, L"Alt", 00357 0x39, L"Space", 00358 0x3a, L"Caps Lock", 00359 0x3b, L"F1", 00360 0x3c, L"F2", 00361 0x3d, L"F3", 00362 0x3e, L"F4", 00363 0x3f, L"F5", 00364 0x40, L"F6", 00365 0x41, L"F7", 00366 0x42, L"F8", 00367 0x43, L"F9", 00368 0x44, L"F10", 00369 0x45, L"Pause", 00370 0x46, L"Scroll Lock", 00371 0x47, L"Num 7", 00372 0x48, L"Num 8", 00373 0x49, L"Num 9", 00374 0x4a, L"Num -", 00375 0x4b, L"Num 4", 00376 0x4c, L"Num 5", 00377 0x4d, L"Num 6", 00378 0x4e, L"Num +", 00379 0x4f, L"Num 1", 00380 0x50, L"Num 2", 00381 0x51, L"Num 3", 00382 0x52, L"Num 0", 00383 0x53, L"Num Del", 00384 0x54, L"Sys Req", 00385 0x57, L"F11", 00386 0x58, L"F12", 00387 0x7C, L"F13", 00388 0x7D, L"F14", 00389 0x7E, L"F15", 00390 0x7F, L"F16", 00391 0x80, L"F17", 00392 0x81, L"F18", 00393 0x82, L"F19", 00394 0x83, L"F20", 00395 0x84, L"F21", 00396 0x85, L"F22", 00397 0x86, L"F23", 00398 0x87, L"F24", 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_101[] 00470 * 00471 \***********************************************************************/ 00472 00473 static ALLOC_SECTION_LDATA VK_F VkToFuncTable_101[] = { 00474 { 00475 VK_CAPITAL, // Base Vk 00476 KBDNLS_TYPE_TOGGLE, // NLSFEProcType 00477 KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent 00478 0x08, /* 00001000 */ // NLSFEProcSwitch 00479 { // NLSFEProc 00480 {KBDNLS_SEND_BASE_VK,0}, // Base 00481 {KBDNLS_ALPHANUM,0}, // Shift 00482 {KBDNLS_HIRAGANA,0}, // Control 00483 {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift+Control 00484 {KBDNLS_KATAKANA,0}, // Alt 00485 {KBDNLS_SEND_BASE_VK,0}, // Shift+Alt 00486 {KBDNLS_SEND_BASE_VK,0}, // Control+Alt 00487 {KBDNLS_SEND_BASE_VK,0} // Shift+Control+Alt 00488 }, 00489 { // NLSFEProcAlt 00490 {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Base 00491 {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift 00492 {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Control 00493 {KBDNLS_SEND_PARAM_VK,VK_KANA}, // Shift+Control 00494 {KBDNLS_SEND_BASE_VK,0}, // Alt 00495 {KBDNLS_SEND_BASE_VK,0}, // Shift+Alt 00496 {KBDNLS_SEND_BASE_VK,0}, // Control+Alt 00497 {KBDNLS_SEND_BASE_VK,0} // Shift+Control+Alt 00498 } 00499 }, 00500 { 00501 VK_OEM_3, // Base Vk 00502 KBDNLS_TYPE_NORMAL, // NLSFEProcType 00503 KBDNLS_INDEX_NORMAL, // NLSFEProcCurrent 00504 0, // NLSFEProcSwitch 00505 { // NLSFEProc 00506 {KBDNLS_SEND_BASE_VK,0}, // Base 00507 {KBDNLS_SEND_BASE_VK,0}, // Shift 00508 {KBDNLS_SBCSDBCS,0}, // Control 00509 {KBDNLS_SEND_BASE_VK,0}, // Shift+Control 00510 {KBDNLS_SEND_PARAM_VK,VK_KANJI}, // Alt 00511 {KBDNLS_SEND_BASE_VK,0}, // Shift+Alt 00512 {KBDNLS_SEND_BASE_VK,0}, // Control+Alt 00513 {KBDNLS_SEND_BASE_VK,0} // Shift+Control+Alt 00514 }, 00515 { // NLSFEProcIndexAlt 00516 {KBDNLS_NULL,0}, // Base 00517 {KBDNLS_NULL,0}, // Shift 00518 {KBDNLS_NULL,0}, // Control 00519 {KBDNLS_NULL,0}, // Shift+Control 00520 {KBDNLS_NULL,0}, // Alt 00521 {KBDNLS_NULL,0}, // Shift+Alt 00522 {KBDNLS_NULL,0}, // Control+Alt 00523 {KBDNLS_NULL,0} // Shift+Control+Alt 00524 } 00525 } 00526 }; 00527 00528 /***********************************************************************\ 00529 * KbdNlsTables 00530 * 00531 \***********************************************************************/ 00532 00533 static ALLOC_SECTION_LDATA KBDNLSTABLES KbdNlsTables = { 00534 0, // OEM ID (0 = Microsoft) 00535 0, // Information 00536 2, // Number of VK_F entry 00537 VkToFuncTable_101, // Pointer to VK_F array 00538 0, // Number of MouseVk entry 00539 NULL // Pointer to MouseVk array 00540 }; 00541 00542 PKBDNLSTABLES KbdNlsLayerDescriptor(VOID) 00543 { 00544 return &KbdNlsTables; 00545 } 00546

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