Changeset 6149 for trunk/src/user32/winkeyboard.cpp
- Timestamp:
- Jul 3, 2001, 3:23:32 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/winkeyboard.cpp
r5196 r6149 1 /* $Id: winkeyboard.cpp,v 1. 8 2001-02-19 21:43:18sandervl Exp $ */1 /* $Id: winkeyboard.cpp,v 1.9 2001-07-03 13:23:32 sandervl Exp $ */ 2 2 /* 3 3 * Win32 <-> PM key translation … … 14 14 #include "oslibwin.h" 15 15 #include <heapstring.h> 16 #include <pmscan.h> 16 17 17 18 #define DBG_LOCALLOG DBG_winkeyboard 18 19 #include "dbglocal.h" 20 21 BOOL OPEN32API _O32_GetKeyboardState( PBYTE lpKeyState ); 22 23 inline BOOL O32_GetKeyboardState(PBYTE lpKeyState) 24 { 25 BOOL yyrc; 26 USHORT sel = RestoreOS2FS(); 27 28 yyrc = _O32_GetKeyboardState(lpKeyState); 29 SetFS(sel); 30 31 return yyrc; 32 } 33 19 34 20 35 BYTE abPMScanToWinVKey[256] = … … 51 66 /* 0x1B PMSCAN_BRACKETRIGHT */ , VK_BRACKETRIGHT 52 67 /* 0x1C PMSCAN_ENTER */ , VK_RETURN 53 /* 0x1D PMSCAN_CTRLLEFT */ , VK_ CONTROL68 /* 0x1D PMSCAN_CTRLLEFT */ , VK_LCONTROL 54 69 /* 0x1E PMSCAN_A */ , VK_A 55 70 /* 0x1F PMSCAN_S */ , VK_S … … 64 79 /* 0x28 PMSCAN_QUOTESINGLE */ , VK_QUOTESINGLE 65 80 /* 0x29 PMSCAN_GRAVE */ , VK_GRAVE 66 /* 0x2A PMSCAN_SHIFTLEFT */ , VK_ SHIFT81 /* 0x2A PMSCAN_SHIFTLEFT */ , VK_LSHIFT 67 82 /* 0x2B PMSCAN_BACKSLASH */ , VK_BACKSLASH 68 83 /* 0x2C PMSCAN_Z */ , VK_Z … … 76 91 /* 0x34 PMSCAN_PERIOD */ , VK_PERIOD 77 92 /* 0x35 PMSCAN_SLASH */ , VK_SLASH 78 /* 0x36 PMSCAN_SHIFTRIGHT */ , VK_ SHIFT93 /* 0x36 PMSCAN_SHIFTRIGHT */ , VK_RSHIFT 79 94 /* 0x37 PMSCAN_PADASTERISK */ , VK_MULTIPLY 80 /* 0x38 PMSCAN_ALTLEFT */ , VK_ MENU95 /* 0x38 PMSCAN_ALTLEFT */ , VK_LMENU 81 96 /* 0x39 PMSCAN_SPACE */ , VK_SPACE 82 97 /* 0x3A PMSCAN_CAPSLOCK */ , VK_CAPITAL … … 116 131 /* 0x5C PMSCAN_PADSLASH */ , VK_DIVIDE 117 132 /* 0x5D PMSCAN_PRINT */ , VK_PRINT 118 /* 0x5E PMSCAN_ALTRIGHT */ , VK_ MENU133 /* 0x5E PMSCAN_ALTRIGHT */ , VK_RMENU 119 134 /* 0x5F PMSCAN_PAUSE */ , VK_PAUSE 120 135 /* 0x60 PMSCAN_HOME */ , VK_HOME … … 280 295 }; 281 296 282 //****************************************************************************** 283 //****************************************************************************** 284 BYTE WIN32API KeyTranslatePMToWin(BYTE key) 285 { 286 return abPMScanToWinVKey[key]; 287 } 297 BYTE abWinVKeyToPMScan[256] = 298 /****************************************/ 299 /* Vkey * Scancode */ 300 /****************************************/ 301 /* 0x00 */ { 0x00 302 /* 0x01 VK_LBUTTON */ , 0x00 303 /* 0x02 VK_RBUTTON */ , 0x00 304 /* 0x03 VK_CANCEL */ , PMSCAN_BREAK 305 /* 0x04 VK_MBUTTON */ , 0x00 306 /* 0x05 */ , 0x00 307 /* 0x06 */ , 0x00 308 /* 0x07 */ , 0x00 309 /* 0x08 VK_BACK */ , PMSCAN_BACKSPACE 310 /* 0x09 VK_TAB */ , PMSCAN_TAB 311 /* 0x0A */ , 0x00 312 /* 0x0B */ , 0x00 313 /* 0x0C VK_CLEAR */ , PMSCAN_PAD5 314 /* 0x0D VK_RETURN */ , PMSCAN_ENTER 315 /* 0x0E */ , 0x00 316 /* 0x0F */ , 0x00 317 /* 0x10 VK_SHIFT */ , PMSCAN_SHIFTLEFT 318 /* 0x11 VK_CONTROL */ , PMSCAN_CTRLLEFT 319 /* 0x12 VK_MENU */ , PMSCAN_ALTLEFT 320 /* 0x13 VK_PAUSE */ , PMSCAN_PAUSE 321 /* 0x14 VK_CAPITAL */ , PMSCAN_CAPSLOCK 322 /* 0x15 */ , 0x00 323 /* 0x16 */ , 0x00 324 /* 0x17 */ , 0x00 325 /* 0x18 */ , 0x00 326 /* 0x19 */ , 0x00 327 /* 0x1A */ , 0x00 328 /* 0x1B VK_ESCAPE */ , PMSCAN_ESC 329 /* 0x1C */ , 0x00 330 /* 0x1D */ , 0x00 331 /* 0x1E */ , 0x00 332 /* 0x1F */ , 0x00 333 /* 0x20 VK_SPACE */ , PMSCAN_SPACE 334 /* 0x21 VK_PRIOR */ , PMSCAN_PAGEUP 335 /* 0x22 VK_NEXT */ , PMSCAN_PAGEDOWN 336 /* 0x23 VK_END */ , PMSCAN_END 337 /* 0x24 VK_HOME */ , PMSCAN_HOME 338 /* 0x25 VK_LEFT */ , PMSCAN_LEFT 339 /* 0x26 VK_UP */ , PMSCAN_UP 340 /* 0x27 VK_RIGHT */ , PMSCAN_RIGHT 341 /* 0x28 VK_DOWN */ , PMSCAN_DOWN 342 /* 0x29 VK_SELECT */ , 0x00 343 /* 0x2A VK_PRINT */ , PMSCAN_PRINT 344 /* 0x2B VK_EXECUTE */ , 0x00 345 /* 0x2C VK_SNAPSHOT */ , 0x00 346 /* 0x2D VK_INSERT */ , PMSCAN_INSERT 347 /* 0x2E VK_DELETE */ , PMSCAN_DELETE 348 /* 0x2F VK_HELP */ , PMSCAN_HELP 349 /* 0x30 VK_0 */ , PMSCAN_ZERO 350 /* 0x31 VK_1 */ , PMSCAN_ONE 351 /* 0x32 VK_2 */ , PMSCAN_TWO 352 /* 0x33 VK_3 */ , PMSCAN_THREE 353 /* 0x34 VK_4 */ , PMSCAN_FOUR 354 /* 0x35 VK_5 */ , PMSCAN_FIVE 355 /* 0x36 VK_6 */ , PMSCAN_SIX 356 /* 0x37 VK_7 */ , PMSCAN_SEVEN 357 /* 0x38 VK_8 */ , PMSCAN_EIGHT 358 /* 0x39 VK_9 */ , PMSCAN_NINE 359 /* 0x3A */ , 0x00 360 /* 0x3B */ , 0x00 361 /* 0x3C */ , 0x00 362 /* 0x3D */ , 0x00 363 /* 0x3E */ , 0x00 364 /* 0x3F */ , 0x00 365 /* 0x40 */ , 0x00 366 /* 0x41 VK_A */ , PMSCAN_A 367 /* 0x42 VK_B */ , PMSCAN_B 368 /* 0x43 VK_C */ , PMSCAN_C 369 /* 0x44 VK_D */ , PMSCAN_D 370 /* 0x45 VK_E */ , PMSCAN_E 371 /* 0x46 VK_F */ , PMSCAN_F 372 /* 0x47 VK_G */ , PMSCAN_G 373 /* 0x48 VK_H */ , PMSCAN_H 374 /* 0x49 VK_I */ , PMSCAN_I 375 /* 0x4A VK_J */ , PMSCAN_J 376 /* 0x4B VK_K */ , PMSCAN_K 377 /* 0x4C VK_L */ , PMSCAN_L 378 /* 0x4D VK_M */ , PMSCAN_M 379 /* 0x4E VK_N */ , PMSCAN_N 380 /* 0x4F VK_O */ , PMSCAN_O 381 /* 0x50 VK_P */ , PMSCAN_P 382 /* 0x51 VK_Q */ , PMSCAN_Q 383 /* 0x52 VK_R */ , PMSCAN_R 384 /* 0x53 VK_S */ , PMSCAN_S 385 /* 0x54 VK_T */ , PMSCAN_T 386 /* 0x55 VK_U */ , PMSCAN_U 387 /* 0x56 VK_V */ , PMSCAN_V 388 /* 0x57 VK */ , PMSCAN_W 389 /* 0x58 VK_X */ , PMSCAN_X 390 /* 0x59 VK_Y */ , PMSCAN_Y 391 /* 0x5A VK_Z */ , PMSCAN_Z 392 /* 0x5B VK_LWIN */ , PMSCAN_WINLEFT 393 /* 0x5C VK_RWIN */ , PMSCAN_WINRIGHT 394 /* 0x5D VK_APPS */ , PMSCAN_APPLICATION 395 /* 0x5E */ , 0x00 396 /* 0x5F */ , 0x00 397 /* 0x60 VK_NUMPAD0 */ , PMSCAN_PAD0 398 /* 0x61 VK_NUMPAD1 */ , PMSCAN_PAD1 399 /* 0x62 VK_NUMPAD2 */ , PMSCAN_PAD2 400 /* 0x63 VK_NUMPAD3 */ , PMSCAN_PAD3 401 /* 0x64 VK_NUMPAD4 */ , PMSCAN_PAD4 402 /* 0x65 VK_NUMPAD5 */ , PMSCAN_PAD5 403 /* 0x66 VK_NUMPAD6 */ , PMSCAN_PAD6 404 /* 0x67 VK_NUMPAD7 */ , PMSCAN_PAD7 405 /* 0x68 VK_NUMPAD8 */ , PMSCAN_PAD8 406 /* 0x69 VK_NUMPAD9 */ , PMSCAN_PAD9 407 /* 0x6A VK_MULTIPLY */ , PMSCAN_PADASTERISK 408 /* 0x6B VK_ADD */ , PMSCAN_PADPLUS 409 /* 0x6C VK_SEPARATOR */ , 0x00 410 /* 0x6D VK_SUBTRACT */ , PMSCAN_PADMINUS 411 /* 0x6E VK_DECIMAL */ , PMSCAN_PADPERIOD 412 /* 0x6F VK_DIVIDE */ , PMSCAN_PADSLASH 413 /* 0x70 VK_F1 */ , PMSCAN_F1 414 /* 0x71 VK_F2 */ , PMSCAN_F2 415 /* 0x72 VK_F3 */ , PMSCAN_F3 416 /* 0x73 VK_F4 */ , PMSCAN_F4 417 /* 0x74 VK_F5 */ , PMSCAN_F5 418 /* 0x75 VK_F6 */ , PMSCAN_F6 419 /* 0x76 VK_F7 */ , PMSCAN_F7 420 /* 0x77 VK_F8 */ , PMSCAN_F8 421 /* 0x78 VK_F9 */ , PMSCAN_F9 422 /* 0x79 VK_F10 */ , PMSCAN_F10 423 /* 0x7A VK_F11 */ , PMSCAN_F11 424 /* 0x7B VK_F12 */ , PMSCAN_F12 425 /* 0x7C VK_F13 */ , PMSCAN_F13 426 /* 0x7D VK_F14 */ , PMSCAN_F14 427 /* 0x7E VK_F15 */ , PMSCAN_F15 428 /* 0x7F VK_F16 */ , PMSCAN_F16 429 /* 0x80 VK_F17 */ , PMSCAN_F17 430 /* 0x81 VK_F18 */ , PMSCAN_F18 431 /* 0x82 VK_F19 */ , PMSCAN_F19 432 /* 0x83 VK_F20 */ , PMSCAN_F20 433 /* 0x84 VK_F21 */ , PMSCAN_F21 434 /* 0x85 VK_F22 */ , PMSCAN_F22 435 /* 0x86 VK_F23 */ , PMSCAN_F23 436 /* 0x87 VK_F24 */ , PMSCAN_F24 437 /* 0x88 */ , 0x00 438 /* 0x89 */ , 0x00 439 /* 0x8A */ , 0x00 440 /* 0x8B */ , 0x00 441 /* 0x8C */ , 0x00 442 /* 0x8D */ , 0x00 443 /* 0x8E */ , 0x00 444 /* 0x8F */ , 0x00 445 /* 0x90 VK_NUMLOCK */ , PMSCAN_NUMLOCK 446 /* 0x91 VK_SCROLL */ , PMSCAN_SCROLLLOCK 447 /* 0x92 */ , 0x00 448 /* 0x93 */ , 0x00 449 /* 0x94 */ , 0x00 450 /* 0x95 */ , 0x00 451 /* 0x96 */ , 0x00 452 /* 0x97 */ , 0x00 453 /* 0x98 */ , 0x00 454 /* 0x99 */ , 0x00 455 /* 0x9A */ , 0x00 456 /* 0x9B */ , 0x00 457 /* 0x9C */ , 0x00 458 /* 0x9D */ , 0x00 459 /* 0x9E */ , 0x00 460 /* 0x9F */ , 0x00 461 /* 0xA0 VK_LSHIFT */ , PMSCAN_SHIFTLEFT 462 /* 0xA1 VK_RSHIFT */ , PMSCAN_SHIFTRIGHT 463 /* 0xA2 VK_LCONTROL */ , PMSCAN_CTRLLEFT 464 /* 0xA3 VK_RCONTROL */ , PMSCAN_CTRLRIGHT 465 /* 0xA4 VK_LMENU */ , PMSCAN_ALTLEFT 466 /* 0xA5 VK_RMENU */ , PMSCAN_ALTRIGHT 467 /* 0xA6 */ , 0x00 468 /* 0xA7 */ , 0x00 469 /* 0xA8 */ , 0x00 470 /* 0xA9 */ , 0x00 471 /* 0xAA */ , 0x00 472 /* 0xAB */ , 0x00 473 /* 0xAC */ , 0x00 474 /* 0xAD */ , 0x00 475 /* 0xAE */ , 0x00 476 /* 0xAF */ , 0x00 477 /* 0xB0 */ , 0x00 478 /* 0xB1 */ , 0x00 479 /* 0xB2 */ , 0x00 480 /* 0xB3 */ , 0x00 481 /* 0xB4 */ , 0x00 482 /* 0xB5 */ , 0x00 483 /* 0xB6 */ , 0x00 484 /* 0xB7 */ , 0x00 485 /* 0xB8 */ , 0x00 486 /* 0xB9 */ , 0x00 487 /* 0xBA VK_SEMICOLON */ , PMSCAN_SEMICOLON 488 /* 0xBB VK_EQUAL */ , PMSCAN_EQUAL 489 /* 0xBC VK_COMMA */ , PMSCAN_COMMA 490 /* 0xBD VK_HYPHEN */ , PMSCAN_HYPHEN 491 /* 0xBE VK_PERIOD */ , PMSCAN_PERIOD 492 /* 0xBF VK_SLASH */ , PMSCAN_SLASH 493 /* 0xC0 VK_GRAVE */ , PMSCAN_GRAVE 494 /* 0xC1 VK_FFC1 */ , PMSCAN_JEXTRA 495 /* 0xC2 VK_YEN */ , PMSCAN_YEN 496 /* 0xC3 */ , 0x00 497 /* 0xC4 */ , 0x00 498 /* 0xC5 */ , 0x00 499 /* 0xC6 */ , 0x00 500 /* 0xC7 */ , 0x00 501 /* 0xC8 */ , 0x00 502 /* 0xC9 */ , 0x00 503 /* 0xCA */ , 0x00 504 /* 0xCB */ , 0x00 505 /* 0xCC */ , 0x00 506 /* 0xCD */ , 0x00 507 /* 0xCE */ , 0x00 508 /* 0xCF */ , 0x00 509 /* 0xD0 */ , 0x00 510 /* 0xD1 */ , 0x00 511 /* 0xD2 */ , 0x00 512 /* 0xD3 */ , 0x00 513 /* 0xD4 */ , 0x00 514 /* 0xD5 */ , 0x00 515 /* 0xD6 */ , 0x00 516 /* 0xD7 */ , 0x00 517 /* 0xD8 */ , 0x00 518 /* 0xD9 */ , 0x00 519 /* 0xDA */ , 0x00 520 /* 0xDB VK_BRACKETLEFT */ , PMSCAN_BRACKETLEFT 521 /* 0xDC VK_BACKSLASH */ , PMSCAN_BACKSLASH 522 /* 0xDD VK_BRACKETRIGHT */ , PMSCAN_BRACKETRIGHT 523 /* 0xDE VK_QUOTESINGLE */ , PMSCAN_QUOTESINGLE 524 /* 0xDF */ , 0x00 525 /* 0xE0 */ , 0x00 526 /* 0xE1 */ , 0x00 527 /* 0xE2 VK_EXTRA */ , PMSCAN_EXTRA 528 /* 0xE3 */ , 0x00 529 /* 0xE4 */ , 0x00 530 /* 0xE5 */ , 0x00 531 /* 0xE6 */ , 0x00 532 /* 0xE7 */ , 0x00 533 /* 0xE8 */ , 0x00 534 /* 0xE9 */ , 0x00 535 /* 0xEA */ , 0x00 536 /* 0xEB */ , 0x00 537 /* 0xEC */ , 0x00 538 /* 0xED */ , 0x00 539 /* 0xEE */ , 0x00 540 /* 0xEF */ , 0x00 541 /* 0xF0 */ , 0x00 542 /* 0xF1 */ , 0x00 543 /* 0xF2 */ , 0x00 544 /* 0xF3 */ , 0x00 545 /* 0xF4 */ , 0x00 546 /* 0xF5 */ , 0x00 547 /* 0xF6 VK_ATTN */ , 0x00 548 /* 0xF7 VK_CRSEL */ , 0x00 549 /* 0xF8 VK_EXSEL */ , 0x00 550 /* 0xF9 VK_EREOF */ , PMSCAN_ERASEEOF 551 /* 0xFA VK_PLAY */ , 0x00 552 /* 0xFB VK_ZOOM */ , 0x00 553 /* 0xFC VK_NONAME */ , 0x00 554 /* 0xFD VK_PA1 */ , PMSCAN_PA1 555 /* 0xFE VK_OEM_CLEAR */ , 0x00 556 /* 0xFF */ , 0x00 557 }; 558 288 559 //****************************************************************************** 289 560 //****************************************************************************** 290 561 void WIN32API KeyTranslatePMToWinBuf(BYTE *pmkey, BYTE *winkey, int nrkeys) 291 562 { 292 for(int i=0;i<nrkeys;i++) { 293 winkey[i] = abPMScanToWinVKey[pmkey[i]]; 563 for(int i=1;i<nrkeys;i++) { 564 if(abWinVKeyToPMScan[i]) { 565 winkey[i] = pmkey[OSLibWinTranslateChar(abWinVKeyToPMScan[i])]; 566 } 294 567 } 568 winkey[VK_SHIFT] = winkey[VK_LSHIFT] | winkey[VK_RSHIFT]; 569 winkey[VK_CONTROL] = winkey[VK_LCONTROL] | winkey[VK_RCONTROL]; 570 winkey[VK_MENU] = winkey[VK_LMENU] | winkey[VK_RMENU]; 295 571 } 296 572 //****************************************************************************** … … 298 574 int WIN32API GetKeyboardType( int nTypeFlag) 299 575 { 300 dprintf(("USER32: GetKeyboardType\n"));576 dprintf(("USER32: GetKeyboardType %x", nTypeFlag)); 301 577 return O32_GetKeyboardType(nTypeFlag); 302 578 } … … 309 585 310 586 dprintf(("USER32: GetKeyboardState %x", lpKeyState)); 311 rc = OSLibWinGetKeyboardStateTable((PBYTE)&PMKeyState ); 312 587 memset(PMKeyState, 0, sizeof(PMKeyState)); 588 memset(lpKeyState, 0, 256); 589 rc = OSLibWinGetKeyboardStateTable((PBYTE)&PMKeyState[0] ); 590 //// rc = O32_GetKeyboardState(lpKeyState); 313 591 if(rc == TRUE) 314 592 { 315 KeyTranslatePMToWinBuf((BYTE *)&PMKeyState, lpKeyState, 256); 593 KeyTranslatePMToWinBuf((BYTE *)&PMKeyState[0], lpKeyState, 256); 594 #ifdef DEBUG 595 for(int i=0;i<256;i++) { 596 if(PMKeyState[i] & 0x80) { 597 dprintf2(("PM key 0x%0x = %x", i, PMKeyState[i])); 598 } 599 } 600 for(i=0;i<256;i++) { 601 if(lpKeyState[i] & 0x80) { 602 dprintf2(("Win key 0x%0x = %x", i, lpKeyState[i])); 603 } 604 } 605 #endif 316 606 return TRUE; 317 607 } … … 441 731 UINT fuState) 442 732 { 443 dprintf(("USER32:ToAscii (%u,%u,%08xh,%08xh,%u) not implemented.\n", 444 uVirtKey, 445 uScanCode, 446 lpbKeyState, 447 lpwTransKey, 448 fuState)); 733 dprintf(("USER32:ToAscii (%u,%u,%08xh,%08xh,%u) partially implemented", 734 uVirtKey, uScanCode, lpbKeyState, lpwTransKey, fuState)); 449 735 450 736 INT ret; … … 461 747 return 0; 462 748 } 749 #if 0 463 750 /* We have a special case to handle : Shift + arrow, shift + home, ... 464 751 X returns a char for it, but Windows doesn't. Let's eat it. */ … … 471 758 } 472 759 else 760 #endif 473 761 /* We have another special case for delete key (XK_Delete) on an 474 762 extended keyboard. X returns a char for it, but Windows doesn't */ … … 479 767 } 480 768 else { 481 *(char*)lpwTransKey = uVirtKey; 769 if(uVirtKey >= VK_A && uVirtKey <= VK_Z && !(lpbKeyState[VK_SHIFT] & 0x80)) { 770 *(char*)lpwTransKey = uVirtKey + 32; //translate to lower case 771 } 772 else *(char*)lpwTransKey = uVirtKey; 482 773 ret = 1; 483 774 }
Note:
See TracChangeset
for help on using the changeset viewer.