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

kbd101c.c

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

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