Changeset 7190 for trunk/src


Ignore:
Timestamp:
Oct 24, 2001, 2:27:06 PM (24 years ago)
Author:
phaller
Message:

.

Location:
trunk/src/user32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/HOOK.CPP

    r7165 r7190  
    1 /* $Id: HOOK.CPP,v 1.28 2001-10-23 06:22:52 phaller Exp $ */
     1/* $Id: HOOK.CPP,v 1.29 2001-10-24 12:26:56 phaller Exp $ */
    22
    33/*
     
    783783  // ALT-Key comes in with different scan code (0xa4 == VK_LMENU_W),
    784784  // then gets translated to 0x12
    785   if ( (msg->wParam == VK_LMENU) ||
    786        (msg->wParam == VK_RMENU) )
     785  switch (msg->wParam)
    787786  {
    788     msg->wParam = VK_MENU; // 0x12
     787    case VK_LMENU:
     788    case VK_RMENU:
     789      msg->wParam = VK_MENU; // 0x12
     790      break;
     791   
     792    case VK_LCONTROL:
     793    case VK_CONTROL:
     794    msg->wParam = VK_CONTROL; // 0x11
     795      break;
    789796  }
    790797 
  • trunk/src/user32/winkeyboard.cpp

    r7187 r7190  
    1 /* $Id: winkeyboard.cpp,v 1.19 2001-10-24 11:18:19 phaller Exp $ */
     1/* $Id: winkeyboard.cpp,v 1.20 2001-10-24 12:26:56 phaller Exp $ */
    22/*
    33 * Win32 <-> PM key translation
     
    2020#include <heapstring.h>
    2121#include <pmscan.h>
     22#include <winscan.h>
    2223#include <winuser32.h>
    2324#include "initterm.h"
     
    141142/* 0x59 PMSCAN_BACKTAB      */ , 0x00                       ,FALSE
    142143/* 0x5A PMSCAN_PADENTER     */ , VK_RETURN                  ,TRUE
    143 /* 0x5B PMSCAN_CTRLRIGHT    */ , VK_CONTROL                 ,TRUE
     144/* 0x5B PMSCAN_CTRLRIGHT    */ , VK_RCONTROL                ,TRUE
    144145/* 0x5C PMSCAN_PADSLASH     */ , VK_DIVIDE                  ,TRUE
    145146/* 0x5D PMSCAN_PRINT        */ , VK_PRINT                   ,FALSE
     
    577578                             };
    578579
     580
     581// @@@PH
     582// Note: windoes uses different scancodes if numlock is pressed
     583// This is not (yet) reflected here!
     584BYTE abPMScanToWinScan[256][2] =
     585/****************************************************************************/
     586/* PM Scancode              *    Win32 Scancode             Extended Key     */
     587/****************************************************************************/
     588/* 0x00                     */ { 0x00,                      FALSE
     589/* 0x01 PMSCAN_ESC          */ , WINSCAN_ESC                ,FALSE
     590/* 0x02 PMSCAN_ONE          */ , WINSCAN_ONE                ,FALSE
     591/* 0x03 PMSCAN_TWO          */ , WINSCAN_TWO                ,FALSE
     592/* 0x04 PMSCAN_THREE        */ , WINSCAN_THREE              ,FALSE
     593/* 0x05 PMSCAN_FOUR         */ , WINSCAN_FOUR               ,FALSE
     594/* 0x06 PMSCAN_FIVE         */ , WINSCAN_FIVE               ,FALSE
     595/* 0x07 PMSCAN_SIX          */ , WINSCAN_SIX                ,FALSE
     596/* 0x08 PMSCAN_SEVEN        */ , WINSCAN_SEVEN              ,FALSE
     597/* 0x09 PMSCAN_EIGHT        */ , WINSCAN_EIGHT              ,FALSE
     598/* 0x0A PMSCAN_NINE         */ , WINSCAN_NINE               ,FALSE
     599/* 0x0B PMSCAN_ZERO         */ , WINSCAN_ZERO               ,FALSE
     600/* 0x0C PMSCAN_HYPHEN       */ , WINSCAN_HYPHEN             ,FALSE
     601/* 0x0D PMSCAN_EQUAL        */ , WINSCAN_EQUAL              ,FALSE
     602/* 0x0E PMSCAN_BACKSPACE    */ , WINSCAN_BACKSPACE          ,FALSE
     603/* 0x0F PMSCAN_TAB          */ , WINSCAN_TAB                ,FALSE
     604/* 0x10 PMSCAN_Q            */ , WINSCAN_Q                  ,FALSE
     605/* 0x11 PMSCAN_W            */ , WINSCAN_W                  ,FALSE
     606/* 0x12 PMSCAN_E            */ , WINSCAN_E                  ,FALSE
     607/* 0x13 PMSCAN_R            */ , WINSCAN_R                  ,FALSE
     608/* 0x14 PMSCAN_T            */ , WINSCAN_T                  ,FALSE
     609/* 0x15 PMSCAN_Y            */ , WINSCAN_Y                  ,FALSE
     610/* 0x16 PMSCAN_U            */ , WINSCAN_U                  ,FALSE
     611/* 0x17 PMSCAN_I            */ , WINSCAN_I                  ,FALSE
     612/* 0x18 PMSCAN_O            */ , WINSCAN_O                  ,FALSE
     613/* 0x19 PMSCAN_P            */ , WINSCAN_P                  ,FALSE
     614/* 0x1A PMSCAN_BRACKETLEFT  */ , WINSCAN_BRACKETLEFT        ,FALSE
     615/* 0x1B PMSCAN_BRACKETRIGHT */ , WINSCAN_BRACKETRIGHT       ,FALSE
     616/* 0x1C PMSCAN_ENTER        */ , WINSCAN_ENTER              ,FALSE
     617/* 0x1D PMSCAN_CTRLLEFT     */ , WINSCAN_CTRLLEFT           ,FALSE
     618/* 0x1E PMSCAN_A            */ , WINSCAN_A                  ,FALSE
     619/* 0x1F PMSCAN_S            */ , WINSCAN_S                  ,FALSE
     620/* 0x20 PMSCAN_D            */ , WINSCAN_D                  ,FALSE
     621/* 0x21 PMSCAN_F            */ , WINSCAN_F                  ,FALSE
     622/* 0x22 PMSCAN_G            */ , WINSCAN_G                  ,FALSE
     623/* 0x23 PMSCAN_H            */ , WINSCAN_H                  ,FALSE
     624/* 0x24 PMSCAN_J            */ , WINSCAN_J                  ,FALSE
     625/* 0x25 PMSCAN_K            */ , WINSCAN_K                  ,FALSE
     626/* 0x26 PMSCAN_L            */ , WINSCAN_L                  ,FALSE
     627/* 0x27 PMSCAN_SEMICOLON    */ , WINSCAN_SEMICOLON          ,FALSE
     628/* 0x28 PMSCAN_QUOTESINGLE  */ , WINSCAN_QUOTESINGLE        ,FALSE
     629/* 0x29 PMSCAN_GRAVE        */ , WINSCAN_GRAVE              ,FALSE
     630/* 0x2A PMSCAN_SHIFTLEFT    */ , WINSCAN_SHIFTLEFT          ,FALSE
     631 
     632  // @@@PH not verified below
     633/* 0x2B PMSCAN_BACKSLASH    */ , WINSCAN_BACKSLASH          ,FALSE
     634/* 0x2C PMSCAN_Z            */ , WINSCAN_Z                  ,FALSE
     635/* 0x2D PMSCAN_X            */ , WINSCAN_X                  ,FALSE
     636/* 0x2E PMSCAN_C            */ , WINSCAN_C                  ,FALSE
     637/* 0x2F PMSCAN_V            */ , WINSCAN_V                  ,FALSE
     638/* 0x30 PMSCAN_B            */ , WINSCAN_B                  ,FALSE
     639/* 0x31 PMSCAN_N            */ , WINSCAN_N                  ,FALSE
     640/* 0x32 PMSCAN_M            */ , WINSCAN_M                  ,FALSE
     641/* 0x33 PMSCAN_COMMA        */ , WINSCAN_COMMA              ,FALSE
     642/* 0x34 PMSCAN_PERIOD       */ , WINSCAN_PERIOD             ,FALSE
     643/* 0x35 PMSCAN_SLASH        */ , WINSCAN_SLASH              ,FALSE
     644/* 0x36 PMSCAN_SHIFTRIGHT   */ , WINSCAN_SHIFTRIGHT         ,FALSE
     645/* 0x37 PMSCAN_PADASTERISK  */ , WINSCAN_PADASTERISK        ,FALSE
     646/* 0x38 PMSCAN_ALTLEFT      */ , WINSCAN_ALTLEFT            ,FALSE
     647/* 0x39 PMSCAN_SPACE        */ , WINSCAN_SPACE              ,FALSE
     648/* 0x3A PMSCAN_CAPSLOCK     */ , WINSCAN_CAPSLOCK           ,FALSE
     649/* 0x3B PMSCAN_F1           */ , WINSCAN_F1                 ,FALSE
     650/* 0x3C PMSCAN_F2           */ , WINSCAN_F2                 ,FALSE
     651/* 0x3D PMSCAN_F3           */ , WINSCAN_F3                 ,FALSE
     652/* 0x3E PMSCAN_F4           */ , WINSCAN_F4                 ,FALSE
     653/* 0x3F PMSCAN_F5           */ , WINSCAN_F5                 ,FALSE
     654/* 0x40 PMSCAN_F6           */ , WINSCAN_F6                 ,FALSE
     655/* 0x41 PMSCAN_F7           */ , WINSCAN_F7                 ,FALSE
     656/* 0x42 PMSCAN_F8           */ , WINSCAN_F8                 ,FALSE
     657/* 0x43 PMSCAN_F9           */ , WINSCAN_F9                 ,FALSE
     658/* 0x44 PMSCAN_F10          */ , WINSCAN_F10                ,FALSE
     659/* 0x45 PMSCAN_NUMLOCK      */ , WINSCAN_NUMLOCK            ,TRUE
     660/* 0x46 PMSCAN_SCROLLLOCK   */ , WINSCAN_SCROLLLOCK         ,FALSE
     661/* 0x47 PMSCAN_PAD7         */ , WINSCAN_PAD7               ,FALSE
     662/* 0x48 PMSCAN_PAD8         */ , WINSCAN_PAD8               ,FALSE
     663/* 0x49 PMSCAN_PAD9         */ , WINSCAN_PAD9               ,FALSE
     664/* 0x4A PMSCAN_PADMINUS     */ , WINSCAN_PADMINUS           ,FALSE
     665/* 0x4B PMSCAN_PAD4         */ , WINSCAN_PAD4               ,FALSE
     666/* 0x4C PMSCAN_PAD5         */ , WINSCAN_PAD5               ,FALSE
     667/* 0x4D PMSCAN_PAD6         */ , WINSCAN_PAD6               ,FALSE
     668/* 0x4E PMSCAN_PADPLUS      */ , WINSCAN_PADPLUS            ,FALSE
     669/* 0x4F PMSCAN_PAD1         */ , WINSCAN_PAD1               ,FALSE
     670/* 0x50 PMSCAN_PAD2         */ , WINSCAN_PAD2               ,FALSE
     671/* 0x51 PMSCAN_PAD3         */ , WINSCAN_PAD3               ,FALSE
     672/* 0x52 PMSCAN_PAD0         */ , WINSCAN_PAD0               ,FALSE
     673/* 0x53 PMSCAN_PADPERIOD    */ , WINSCAN_PADPERIOD          ,FALSE
     674/* 0x54 PMSCAN_SYSREQ       */ , 0x00                       ,FALSE
     675/* 0x55 PMSCAN_RESET        */ , 0x00                       ,FALSE
     676/* 0x56 PMSCAN_EXTRA        */ , WINSCAN_EXTRA              ,FALSE
     677/* 0x57 PMSCAN_F11          */ , WINSCAN_F11                ,FALSE
     678/* 0x58 PMSCAN_F12          */ , WINSCAN_F12                ,FALSE
     679/* 0x59 PMSCAN_BACKTAB      */ , 0x00                       ,FALSE
     680/* 0x5A PMSCAN_PADENTER     */ , WINSCAN_PADENTER           ,TRUE
     681/* 0x5B PMSCAN_CTRLRIGHT    */ , WINSCAN_CTRLRIGHT          ,TRUE
     682/* 0x5C PMSCAN_PADSLASH     */ , WINSCAN_PADSLASH           ,TRUE
     683/* 0x5D PMSCAN_PRINT        */ , WINSCAN_PRINT              ,FALSE
     684/* 0x5E PMSCAN_ALTRIGHT     */ , WINSCAN_ALTRIGHT           ,TRUE
     685/* 0x5F PMSCAN_PAUSE        */ , WINSCAN_PAUSE              ,FALSE
     686/* 0x60 PMSCAN_HOME         */ , WINSCAN_HOME               ,TRUE
     687/* 0x61 PMSCAN_UP           */ , WINSCAN_UP                 ,TRUE
     688/* 0x62 PMSCAN_PAGEUP       */ , WINSCAN_PAGEUP             ,TRUE
     689/* 0x63 PMSCAN_LEFT         */ , WINSCAN_LEFT               ,TRUE
     690/* 0x64 PMSCAN_RIGHT        */ , WINSCAN_RIGHT              ,TRUE
     691/* 0x65 PMSCAN_END          */ , WINSCAN_END                ,TRUE
     692/* 0x66 PMSCAN_DOWN         */ , WINSCAN_DOWN               ,TRUE
     693/* 0x67 PMSCAN_PAGEDOWN     */ , WINSCAN_PAGEDOWN           ,TRUE
     694/* 0x68 PMSCAN_INSERT       */ , WINSCAN_INSERT             ,TRUE
     695/* 0x69 PMSCAN_DELETE       */ , WINSCAN_DELETE             ,TRUE
     696/* 0x6A PMSCAN_F23          */ , WINSCAN_F23                ,FALSE
     697/* 0x6B PMSCAN_F24          */ , WINSCAN_F24                ,FALSE
     698/* 0x6C PMSCAN_SYSMEM       */ , 0x00                       ,FALSE
     699/* 0x6D PMSCAN_ERASEEOF     */ , WINSCAN_ERASEEOF           ,FALSE
     700/* 0x6E PMSCAN_BREAK        */ , WINSCAN_BREAK              ,TRUE
     701/* 0x6F PMSCAN_MOVEWIN      */ , 0x00                       ,FALSE
     702/* 0x70 PMSCAN_NLS3         */ , 0x00                       ,FALSE
     703/* 0x71 PMSCAN_HELP         */ , WINSCAN_HELP               ,FALSE
     704/* 0x72 PMSCAN_TASKMAN      */ , 0x00                       ,FALSE
     705/* 0x73 PMSCAN_B11          */ , 0x00                       ,FALSE
     706/* 0x74 PMSCAN_JUMP         */ , 0x00                       ,FALSE
     707/* 0x75 PMSCAN_MINWIN       */ , 0x00                       ,FALSE
     708/* 0x76 PMSCAN_CLEAR        */ , 0x00                       ,FALSE
     709/* 0x77 PMSCAN_77           */ , 0x00                       ,FALSE
     710/* 0x78 PMSCAN_78           */ , 0x00                       ,FALSE
     711/* 0x79 PMSCAN_NLS2         */ , 0x00                       ,FALSE
     712/* 0x7a PMSCAN_SIZE         */ , 0x00                       ,FALSE
     713/* 0x7b PMSCAN_NLS1         */ , 0x00                       ,FALSE
     714/* 0x7c PMSCAN_APPLICATION  */ , WINSCAN_APPLICATION        ,FALSE
     715/* 0x7d PMSCAN_E13          */ , 0x00                       ,FALSE
     716/* 0x7e PMSCAN              */ , 0x00                       ,FALSE
     717/* 0x7f PMSCAN              */ , 0x00                       ,FALSE
     718/* 0x80 PMSCAN_PA1          */ , WINSCAN_PA1                ,FALSE
     719/* 0x81 PMSCAN_F13          */ , WINSCAN_F13                ,FALSE
     720/* 0x82 PMSCAN_F14          */ , WINSCAN_F14                ,FALSE
     721/* 0x83 PMSCAN_F15          */ , WINSCAN_F15                ,FALSE
     722/* 0x84 PMSCAN_PA2          */ , 0x00                       ,FALSE
     723/* 0x85 PMSCAN_PA3          */ , 0x00                       ,FALSE
     724/* 0x86 PMSCAN_SPACEBREAK   */ , 0x00                       ,FALSE
     725/* 0x87 PMSCAN_TABRIGHT     */ , 0x00                       ,FALSE
     726/* 0x88 PMSCAN_NOOP         */ , 0x00                       ,FALSE
     727/* 0x89 PMSCAN_F16          */ , WINSCAN_F16                ,FALSE
     728/* 0x8a PMSCAN_F17          */ , WINSCAN_F17                ,FALSE
     729/* 0x8b PMSCAN_F18          */ , WINSCAN_F18                ,FALSE
     730/* 0x8c PMSCAN_F19          */ , WINSCAN_F19                ,FALSE
     731/* 0x8d PMSCAN_F20          */ , WINSCAN_F20                ,FALSE
     732/* 0x8e PMSCAN_F21          */ , WINSCAN_F21                ,FALSE
     733/* 0x8f PMSCAN_F22          */ , WINSCAN_F22                ,FALSE
     734/* 0x90                     */ , 0x00                       ,FALSE
     735/* 0x91                     */ , 0x00                       ,FALSE
     736/* 0x92                     */ , 0x00                       ,FALSE
     737/* 0x93                     */ , 0x00                       ,FALSE
     738/* 0x94                     */ , 0x00                       ,FALSE
     739/* 0x95                     */ , 0x00                       ,FALSE
     740/* 0x96                     */ , 0x00                       ,FALSE
     741/* 0x97                     */ , 0x00                       ,FALSE
     742/* 0x98                     */ , 0x00                       ,FALSE
     743/* 0x99                     */ , 0x00                       ,FALSE
     744/* 0x9A                     */ , 0x00                       ,FALSE
     745/* 0x9B                     */ , 0x00                       ,FALSE
     746/* 0x9C                     */ , 0x00                       ,FALSE
     747/* 0x9D                     */ , 0x00                       ,FALSE
     748/* 0x9E                     */ , 0x00                       ,FALSE
     749/* 0x9F                     */ , 0x00                       ,FALSE
     750/* 0xA0                     */ , 0x00                       ,FALSE
     751/* 0xA1                     */ , 0x00                       ,FALSE
     752/* 0xA2                     */ , 0x00                       ,FALSE
     753/* 0xA3                     */ , 0x00                       ,FALSE
     754/* 0xA4                     */ , 0x00                       ,FALSE
     755/* 0xA5                     */ , 0x00                       ,FALSE
     756/* 0xA6                     */ , 0x00                       ,FALSE
     757/* 0xA7                     */ , 0x00                       ,FALSE
     758/* 0xA8                     */ , 0x00                       ,FALSE
     759/* 0xA9                     */ , 0x00                       ,FALSE
     760/* 0xAA                     */ , 0x00                       ,FALSE
     761/* 0xAB                     */ , 0x00                       ,FALSE
     762/* 0xAC                     */ , 0x00                       ,FALSE
     763/* 0xAD                     */ , 0x00                       ,FALSE
     764/* 0xAE                     */ , 0x00                       ,FALSE
     765/* 0xAF                     */ , 0x00                       ,FALSE
     766/* 0xB0                     */ , 0x00                       ,FALSE
     767/* 0xB1                     */ , 0x00                       ,FALSE
     768/* 0xB2                     */ , 0x00                       ,FALSE
     769/* 0xB3                     */ , 0x00                       ,FALSE
     770/* 0xB4                     */ , 0x00                       ,FALSE
     771/* 0xB5                     */ , 0x00                       ,FALSE
     772/* 0xB6                     */ , 0x00                       ,FALSE
     773/* 0xB7                     */ , 0x00                       ,FALSE
     774/* 0xB8                     */ , 0x00                       ,FALSE
     775/* 0xB9                     */ , 0x00                       ,FALSE
     776/* 0xBA                     */ , 0x00                       ,FALSE
     777/* 0xBB                     */ , 0x00                       ,FALSE
     778/* 0xBC                     */ , 0x00                       ,FALSE
     779/* 0xBD                     */ , 0x00                       ,FALSE
     780/* 0xBE                     */ , 0x00                       ,FALSE
     781/* 0xBF                     */ , 0x00                       ,FALSE
     782/* 0xC0                     */ , 0x00                       ,FALSE
     783/* 0xC1                     */ , 0x00                       ,FALSE
     784/* 0xC2                     */ , 0x00                       ,FALSE
     785/* 0xC3                     */ , 0x00                       ,FALSE
     786/* 0xC4                     */ , 0x00                       ,FALSE
     787/* 0xC5                     */ , 0x00                       ,FALSE
     788/* 0xC6                     */ , 0x00                       ,FALSE
     789/* 0xC7                     */ , 0x00                       ,FALSE
     790/* 0xC8                     */ , 0x00                       ,FALSE
     791/* 0xC9                     */ , 0x00                       ,FALSE
     792/* 0xCA                     */ , 0x00                       ,FALSE
     793/* 0xCB                     */ , 0x00                       ,FALSE
     794/* 0xCC                     */ , 0x00                       ,FALSE
     795/* 0xCD                     */ , 0x00                       ,FALSE
     796/* 0xCE                     */ , 0x00                       ,FALSE
     797/* 0xCF                     */ , 0x00                       ,FALSE
     798/* 0xD0                     */ , 0x00                       ,FALSE
     799/* 0xD1                     */ , 0x00                       ,FALSE
     800/* 0xD2                     */ , 0x00                       ,FALSE
     801/* 0xD3                     */ , 0x00                       ,FALSE
     802/* 0xD4                     */ , 0x00                       ,FALSE
     803/* 0xD5                     */ , 0x00                       ,FALSE
     804/* 0xD6                     */ , 0x00                       ,FALSE
     805/* 0xD7                     */ , 0x00                       ,FALSE
     806/* 0xD8                     */ , 0x00                       ,FALSE
     807/* 0xD9                     */ , 0x00                       ,FALSE
     808/* 0xDA                     */ , 0x00                       ,FALSE
     809/* 0xDB                     */ , 0x00                       ,FALSE
     810/* 0xDC                     */ , 0x00                       ,FALSE
     811/* 0xDD                     */ , 0x00                       ,FALSE
     812/* 0xDE                     */ , 0x00                       ,FALSE
     813/* 0xDF                     */ , 0x00                       ,FALSE
     814/* 0xE0                     */ , 0x00                       ,FALSE
     815/* 0xE1                     */ , 0x00                       ,FALSE
     816/* 0xE2                     */ , 0x00                       ,FALSE
     817/* 0xE3                     */ , 0x00                       ,FALSE
     818/* 0xE4                     */ , 0x00                       ,FALSE
     819/* 0xE5                     */ , 0x00                       ,FALSE
     820/* 0xE6                     */ , 0x00                       ,FALSE
     821/* 0xE7                     */ , 0x00                       ,FALSE
     822/* 0xE8                     */ , 0x00                       ,FALSE
     823/* 0xE9                     */ , 0x00                       ,FALSE
     824/* 0xEA                     */ , 0x00                       ,FALSE
     825/* 0xEB                     */ , 0x00                       ,FALSE
     826/* 0xEC                     */ , 0x00                       ,FALSE
     827/* 0xED                     */ , 0x00                       ,FALSE
     828/* 0xEE                     */ , 0x00                       ,FALSE
     829/* 0xEF                     */ , 0x00                       ,FALSE
     830/* 0xF0                     */ , 0x00                       ,FALSE
     831/* 0xF1                     */ , 0x00                       ,FALSE
     832/* 0xF2                     */ , 0x00                       ,FALSE
     833/* 0xF3                     */ , 0x00                       ,FALSE
     834/* 0xF4                     */ , 0x00                       ,FALSE
     835/* 0xF5                     */ , 0x00                       ,FALSE
     836/* 0xF6                     */ , 0x00                       ,FALSE
     837/* 0xF7                     */ , 0x00                       ,FALSE
     838/* 0xF8                     */ , 0x00                       ,FALSE
     839/* 0xF9                     */ , 0x00                       ,FALSE
     840/* 0xFA                     */ , 0x00                       ,FALSE
     841/* 0xFB                     */ , 0x00                       ,FALSE
     842/* 0xFC                     */ , 0x00                       ,FALSE
     843/* 0xFD                     */ , 0x00                       ,FALSE
     844/* 0xFE                     */ , 0x00                       ,FALSE
     845/* 0xFF                     */ , 0x00                       ,FALSE
     846                               };
     847
     848
    579849//******************************************************************************
    580850//******************************************************************************
     
    634904BYTE KeyTranslateWinScanToPMScan(BYTE bWinScan, BOOL fExtended)
    635905{
    636   // Mode: translate scancode to vkey
    637   BYTE bWinVKey;
    638   bWinVKey = MapVirtualKeyA(bWinScan ,3);
    639  
    640   return KeyTranslateWinVKeyToPMScan(bWinVKey, fExtended);
     906  // Note:
     907  // MapVirtualKeyA requires this function,
     908  // O32_MapVirtualKeyA uses PM Scancodes only!
     909 
     910  // if the extended bit didn't match, this is
     911  // the closest hit
     912  BYTE bAlmost = 0;
     913 
     914  for(int i = 0;
     915      i < 256; // sizeof(row of abPMScanToWinVKey)
     916      i++)
     917  {
     918    if (abPMScanToWinScan[i][0] == bWinScan)
     919    {
     920      // this represents the PMScan code which is used as index     
     921      bAlmost = i;
     922     
     923      // exact match!
     924      if (abPMScanToWinVKey[i][1] == fExtended)
     925        break;
     926    }
     927  }
     928 
     929  dprintf(("KeyTranslateWinScanToPMScan(%02xh,%d) = %02xh",
     930           bWinScan,
     931           fExtended,
     932           bAlmost));
     933 
     934  // almost a match or no match at all.
     935  return bAlmost;
     936 
    641937}
    642938//******************************************************************************
     
    9941290  // check the scancodes if the extended key bit is set so
    9951291  // we can easily distinguish between "left" and "right" special keys, etc.
    996   BOOL  fDontCare = (lParam & (1 << 25) ) != 0;
    997   BOOL  fExtended = (lParam & (1 << 24) ) != 0;
     1292  BOOL  fDontCare = (lParam & 0x02000000) != 0;
     1293  BOOL  fExtended = (lParam & 0x01000000) != 0;
    9981294  UCHAR ucWinScan = (lParam & 0x00ff0000) >> 16;
    9991295  UCHAR ucWinVKey;
     1296  UCHAR ucPMScan;
    10001297  int   result;
    10011298 
    10021299  if (fDontCare)
    10031300  {
     1301    fExtended = FALSE;
     1302   
    10041303    // map "right keys" to "universal keys"
    10051304    // LALT,RALT -> ALT
     
    10091308 
    10101309  // Note: Open32 expects PM Scancodes, NOT Winscancodes.
    1011   ucWinVKey = MapVirtualKeyA(ucWinScan, 3);
    1012  
     1310  // Note: this is the only way of loss-less conversion!
     1311  ucPMScan = KeyTranslateWinScanToPMScan(ucWinScan, fExtended);
     1312  dprintf(("ucWinScan=%02xh, fExtended=%d translated to PMscan=%02xh\n",
     1313           ucWinScan,
     1314           fExtended,
     1315           ucPMScan));
     1316  ucWinVKey = abPMScanToWinVKey[ucPMScan][0];
     1317  dprintf(("ucPMScan=%02xh translated to ucWinVKey=%02xh\n",
     1318           ucPMScan,
     1319           ucWinVKey));
     1320
    10131321  // Bug in Open32:
    10141322  // 0 - expects PMScancodes instead of WinScancodes
     
    10881396{
    10891397  dprintf(("imcompletely implemented"));
     1398 
    10901399  /* A quick fix for Commandos, very incomplete */
    10911400  switch (uMapType)
     
    10961405        return 'A' + uCode - VK_A;
    10971406      }
    1098       break;
     1407    break;
     1408
     1409    case 1:
     1410    case 3:
     1411      // Open32 uses PMScancodes, not Windows Scancodes!!
     1412      // @@@PH the extended flag is to be ignored!
     1413      BYTE bPMScan = KeyTranslateWinScanToPMScan(uCode, FALSE);
     1414      return O32_MapVirtualKey(bPMScan, uMapType);
    10991415  }
    11001416  return O32_MapVirtualKey(uCode, uMapType);
Note: See TracChangeset for help on using the changeset viewer.