00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <odin.h>
00011 #include <odinwrap.h>
00012 #include <os2sel.h>
00013
00014 #include <os2win.h>
00015
00016 #include <string.h>
00017 #include <stdio.h>
00018 #include <winkeyboard.h>
00019 #include "oslibwin.h"
00020 #include <heapstring.h>
00021 #include <pmscan.h>
00022 #include <winscan.h>
00023 #include <winuser32.h>
00024 #include "initterm.h"
00025
00026 #define DBG_LOCALLOG DBG_winkeyboard
00027 #include "dbglocal.h"
00028
00029
00030
00031
00032 ODINDEBUGCHANNEL(USER32-WINKBD)
00033
00034
00035
00036
00037
00038
00039 static char arrchOverlayKeyState[256] = {0};
00040
00041
00042
00043
00044
00045
00046
00047
00048 BOOL OPEN32API _O32_GetKeyboardState( PBYTE lpKeyState );
00049
00050 inline BOOL O32_GetKeyboardState(PBYTE lpKeyState)
00051 {
00052 BOOL yyrc;
00053 USHORT sel = RestoreOS2FS();
00054
00055 yyrc = _O32_GetKeyboardState(lpKeyState);
00056 SetFS(sel);
00057
00058 return yyrc;
00059 }
00060
00061
00062 BYTE abPMScanToWinVKey[256][2] =
00063
00064
00065
00066 { 0x00, FALSE
00067 , VK_ESCAPE ,FALSE
00068 , VK_1 ,FALSE
00069 , VK_2 ,FALSE
00070 , VK_3 ,FALSE
00071 , VK_4 ,FALSE
00072 , VK_5 ,FALSE
00073 , VK_6 ,FALSE
00074 , VK_7 ,FALSE
00075 , VK_8 ,FALSE
00076 , VK_9 ,FALSE
00077 , VK_0 ,FALSE
00078 , VK_HYPHEN ,FALSE
00079 , VK_EQUAL ,FALSE
00080 , VK_BACK ,FALSE
00081 , VK_TAB ,FALSE
00082 , VK_Q ,FALSE
00083 , VK_W ,FALSE
00084 , VK_E ,FALSE
00085 , VK_R ,FALSE
00086 , VK_T ,FALSE
00087 , VK_Y ,FALSE
00088 , VK_U ,FALSE
00089 , VK_I ,FALSE
00090 , VK_O ,FALSE
00091 , VK_P ,FALSE
00092 , VK_BRACKETLEFT ,FALSE
00093 , VK_BRACKETRIGHT ,FALSE
00094 , VK_RETURN ,FALSE
00095 , VK_LCONTROL ,FALSE
00096 , VK_A ,FALSE
00097 , VK_S ,FALSE
00098 , VK_D ,FALSE
00099 , VK_F ,FALSE
00100 , VK_G ,FALSE
00101 , VK_H ,FALSE
00102 , VK_J ,FALSE
00103 , VK_K ,FALSE
00104 , VK_L ,FALSE
00105 , VK_SEMICOLON ,FALSE
00106 , VK_QUOTESINGLE ,FALSE
00107 , VK_GRAVE ,FALSE
00108 , VK_LSHIFT ,FALSE
00109 , VK_BACKSLASH ,FALSE
00110 , VK_Z ,FALSE
00111 , VK_X ,FALSE
00112 , VK_C ,FALSE
00113 , VK_V ,FALSE
00114 , VK_B ,FALSE
00115 , VK_N ,FALSE
00116 , VK_M ,FALSE
00117 , VK_COMMA ,FALSE
00118 , VK_PERIOD ,FALSE
00119 , VK_SLASH ,FALSE
00120 , VK_RSHIFT ,TRUE
00121 , VK_MULTIPLY ,FALSE
00122 , VK_LMENU ,FALSE
00123 , VK_SPACE ,FALSE
00124 , VK_CAPITAL ,FALSE
00125 , VK_F1 ,FALSE
00126 , VK_F2 ,FALSE
00127 , VK_F3 ,FALSE
00128 , VK_F4 ,FALSE
00129 , VK_F5 ,FALSE
00130 , VK_F6 ,FALSE
00131 , VK_F7 ,FALSE
00132 , VK_F8 ,FALSE
00133 , VK_F9 ,FALSE
00134 , VK_F10 ,FALSE
00135 , VK_NUMLOCK ,TRUE
00136 , VK_SCROLL ,FALSE
00137 , VK_NUMPAD7 ,FALSE
00138 , VK_NUMPAD8 ,FALSE
00139 , VK_NUMPAD9 ,FALSE
00140 , VK_SUBTRACT ,FALSE
00141 , VK_NUMPAD4 ,FALSE
00142 , VK_NUMPAD5 ,FALSE
00143 , VK_NUMPAD6 ,FALSE
00144 , VK_ADD ,FALSE
00145 , VK_NUMPAD1 ,FALSE
00146 , VK_NUMPAD2 ,FALSE
00147 , VK_NUMPAD3 ,FALSE
00148 , VK_NUMPAD0 ,FALSE
00149 , VK_DECIMAL ,FALSE
00150 , 0x00 ,FALSE
00151 , 0x00 ,FALSE
00152 , VK_EXTRA ,FALSE
00153 , VK_F11 ,FALSE
00154 , VK_F12 ,FALSE
00155 , 0x00 ,FALSE
00156 , VK_RETURN ,TRUE
00157 , VK_RCONTROL ,TRUE
00158 , VK_DIVIDE ,TRUE
00159 , VK_SNAPSHOT ,TRUE
00160 , VK_RMENU ,TRUE
00161 , VK_PAUSE ,FALSE
00162 , VK_HOME ,TRUE
00163 , VK_UP ,TRUE
00164 , VK_PRIOR ,TRUE
00165 , VK_LEFT ,TRUE
00166 , VK_RIGHT ,TRUE
00167 , VK_END ,TRUE
00168 , VK_DOWN ,TRUE
00169 , VK_NEXT ,TRUE
00170 , VK_INSERT ,TRUE
00171 , VK_DELETE ,TRUE
00172 , VK_F23 ,FALSE
00173 , VK_F24 ,FALSE
00174 , 0x00 ,FALSE
00175 , VK_EREOF ,FALSE
00176 , VK_CANCEL ,TRUE
00177 , 0x00 ,FALSE
00178 , 0x00 ,FALSE
00179 , VK_HELP ,FALSE
00180 , 0x00 ,FALSE
00181 , 0x00 ,FALSE
00182 , 0x00 ,FALSE
00183 , 0x00 ,FALSE
00184 , 0x00 ,FALSE
00185 , 0x00 ,FALSE
00186 , 0x00 ,FALSE
00187 , 0x00 ,FALSE
00188 , 0x00 ,FALSE
00189 , 0x00 ,FALSE
00190 , VK_APPS ,TRUE
00191 , 0x00 ,FALSE
00192 , VK_LWIN ,TRUE
00193 , VK_RWIN ,TRUE
00194 , VK_PA1 ,FALSE
00195 , VK_F13 ,FALSE
00196 , VK_F14 ,FALSE
00197 , VK_F15 ,FALSE
00198 , 0x00 ,FALSE
00199 , 0x00 ,FALSE
00200 , 0x00 ,FALSE
00201 , 0x00 ,FALSE
00202 , 0x00 ,FALSE
00203 , VK_F16 ,FALSE
00204 , VK_F17 ,FALSE
00205 , VK_F18 ,FALSE
00206 , VK_F19 ,FALSE
00207 , VK_F20 ,FALSE
00208 , VK_F21 ,FALSE
00209 , VK_F22 ,FALSE
00210 , 0x00 ,FALSE
00211 , 0x00 ,FALSE
00212 , 0x00 ,FALSE
00213 , 0x00 ,FALSE
00214 , 0x00 ,FALSE
00215 , 0x00 ,FALSE
00216 , 0x00 ,FALSE
00217 , 0x00 ,FALSE
00218 , 0x00 ,FALSE
00219 , 0x00 ,FALSE
00220 , 0x00 ,FALSE
00221 , 0x00 ,FALSE
00222 , 0x00 ,FALSE
00223 , 0x00 ,FALSE
00224 , 0x00 ,FALSE
00225 , 0x00 ,FALSE
00226 , 0x00 ,FALSE
00227 , 0x00 ,FALSE
00228 , 0x00 ,FALSE
00229 , 0x00 ,FALSE
00230 , 0x00 ,FALSE
00231 , 0x00 ,FALSE
00232 , 0x00 ,FALSE
00233 , 0x00 ,FALSE
00234 , 0x00 ,FALSE
00235 , 0x00 ,FALSE
00236 , 0x00 ,FALSE
00237 , 0x00 ,FALSE
00238 , 0x00 ,FALSE
00239 , 0x00 ,FALSE
00240 , 0x00 ,FALSE
00241 , 0x00 ,FALSE
00242 , 0x00 ,FALSE
00243 , 0x00 ,FALSE
00244 , 0x00 ,FALSE
00245 , 0x00 ,FALSE
00246 , 0x00 ,FALSE
00247 , 0x00 ,FALSE
00248 , 0x00 ,FALSE
00249 , 0x00 ,FALSE
00250 , 0x00 ,FALSE
00251 , 0x00 ,FALSE
00252 , 0x00 ,FALSE
00253 , 0x00 ,FALSE
00254 , 0x00 ,FALSE
00255 , 0x00 ,FALSE
00256 , 0x00 ,FALSE
00257 , 0x00 ,FALSE
00258 , 0x00 ,FALSE
00259 , 0x00 ,FALSE
00260 , 0x00 ,FALSE
00261 , 0x00 ,FALSE
00262 , 0x00 ,FALSE
00263 , 0x00 ,FALSE
00264 , 0x00 ,FALSE
00265 , 0x00 ,FALSE
00266 , 0x00 ,FALSE
00267 , 0x00 ,FALSE
00268 , 0x00 ,FALSE
00269 , 0x00 ,FALSE
00270 , 0x00 ,FALSE
00271 , 0x00 ,FALSE
00272 , 0x00 ,FALSE
00273 , 0x00 ,FALSE
00274 , 0x00 ,FALSE
00275 , 0x00 ,FALSE
00276 , 0x00 ,FALSE
00277 , 0x00 ,FALSE
00278 , 0x00 ,FALSE
00279 , 0x00 ,FALSE
00280 , 0x00 ,FALSE
00281 , 0x00 ,FALSE
00282 , 0x00 ,FALSE
00283 , 0x00 ,FALSE
00284 , 0x00 ,FALSE
00285 , 0x00 ,FALSE
00286 , 0x00 ,FALSE
00287 , 0x00 ,FALSE
00288 , 0x00 ,FALSE
00289 , 0x00 ,FALSE
00290 , 0x00 ,FALSE
00291 , 0x00 ,FALSE
00292 , 0x00 ,FALSE
00293 , 0x00 ,FALSE
00294 , 0x00 ,FALSE
00295 , 0x00 ,FALSE
00296 , 0x00 ,FALSE
00297 , 0x00 ,FALSE
00298 , 0x00 ,FALSE
00299 , 0x00 ,FALSE
00300 , 0x00 ,FALSE
00301 , 0x00 ,FALSE
00302 , 0x00 ,FALSE
00303 , 0x00 ,FALSE
00304 , 0x00 ,FALSE
00305 , 0x00 ,FALSE
00306 , 0x00 ,FALSE
00307 , 0x00 ,FALSE
00308 , 0x00 ,FALSE
00309 , 0x00 ,FALSE
00310 , 0x00 ,FALSE
00311 , 0x00 ,FALSE
00312 , 0x00 ,FALSE
00313 , 0x00 ,FALSE
00314 , 0x00 ,FALSE
00315 , 0x00 ,FALSE
00316 , 0x00 ,FALSE
00317 , 0x00 ,FALSE
00318 , 0x00 ,FALSE
00319 , 0x00 ,FALSE
00320 , 0x00 ,FALSE
00321 , 0x00 ,FALSE
00322 };
00323
00324 typedef struct tagWinVKeyToPMScan
00325 {
00326
00327 BYTE bPMScanCode;
00328 LPSTR lpstrName;
00329 } WINVKEYTOPMSCAN, *PWINVKEYTOPMSCAN;
00330
00331 WINVKEYTOPMSCAN abWinVKeyToPMScan[256] =
00332
00333
00334
00335 { 0x00 , NULL
00336 , 0x00 , NULL
00337 , 0x00 , NULL
00338 , PMSCAN_BREAK , "Break"
00339 , 0x00 , NULL
00340 , 0x00 , NULL
00341 , 0x00 , NULL
00342 , 0x00 , NULL
00343 , PMSCAN_BACKSPACE , "Backspace"
00344 , PMSCAN_TAB , "Tab"
00345 , 0x00 , NULL
00346 , 0x00 , NULL
00347 , PMSCAN_PAD5 , "Num 5"
00348 , PMSCAN_ENTER , "Enter"
00349 , 0x00 , NULL
00350 , 0x00 , NULL
00351 , PMSCAN_SHIFTLEFT , "Left Shift"
00352 , PMSCAN_CTRLLEFT , "Left Control"
00353 , PMSCAN_ALTLEFT , "Left Alt"
00354 , PMSCAN_PAUSE , "Pause"
00355 , PMSCAN_CAPSLOCK , "Caps Lock"
00356 , 0x00 , NULL
00357 , 0x00 , NULL
00358 , 0x00 , NULL
00359 , 0x00 , NULL
00360 , 0x00 , NULL
00361 , 0x00 , NULL
00362 , PMSCAN_ESC , "Escape"
00363 , 0x00 , NULL
00364 , 0x00 , NULL
00365 , 0x00 , NULL
00366 , 0x00 , NULL
00367 , PMSCAN_SPACE , "Space"
00368 , PMSCAN_PAGEUP , "Page Up"
00369 , PMSCAN_PAGEDOWN , "Page Down"
00370 , PMSCAN_END , "End"
00371 , PMSCAN_HOME , "Home"
00372 , PMSCAN_LEFT , "Left"
00373 , PMSCAN_UP , "Up"
00374 , PMSCAN_RIGHT , "Right"
00375 , PMSCAN_DOWN , "Down"
00376 , 0x00 , NULL
00377 , 0x00 , NULL
00378 , 0x00 , NULL
00379 , PMSCAN_PRINT , "Print"
00380 , PMSCAN_INSERT , "Insert"
00381 , PMSCAN_DELETE , "Delete"
00382 , PMSCAN_HELP , "Help"
00383 , PMSCAN_ZERO , "0"
00384 , PMSCAN_ONE , "1"
00385 , PMSCAN_TWO , "2"
00386 , PMSCAN_THREE , "3"
00387 , PMSCAN_FOUR , "4"
00388 , PMSCAN_FIVE , "5"
00389 , PMSCAN_SIX , "6"
00390 , PMSCAN_SEVEN , "7"
00391 , PMSCAN_EIGHT , "8"
00392 , PMSCAN_NINE , "9"
00393 , 0x00 , NULL
00394 , 0x00 , NULL
00395 , 0x00 , NULL
00396 , 0x00 , NULL
00397 , 0x00 , NULL
00398 , 0x00 , NULL
00399 , 0x00 , NULL
00400 , PMSCAN_A , "A"
00401 , PMSCAN_B , "B"
00402 , PMSCAN_C , "C"
00403 , PMSCAN_D , "D"
00404 , PMSCAN_E , "E"
00405 , PMSCAN_F , "F"
00406 , PMSCAN_G , "G"
00407 , PMSCAN_H , "H"
00408 , PMSCAN_I , "I"
00409 , PMSCAN_J , "J"
00410 , PMSCAN_K , "K"
00411 , PMSCAN_L , "L"
00412 , PMSCAN_M , "M"
00413 , PMSCAN_N , "N"
00414 , PMSCAN_O , "O"
00415 , PMSCAN_P , "P"
00416 , PMSCAN_Q , "Q"
00417 , PMSCAN_R , "R"
00418 , PMSCAN_S , "S"
00419 , PMSCAN_T , "T"
00420 , PMSCAN_U , "U"
00421 , PMSCAN_V , "V"
00422 , PMSCAN_W , "W"
00423 , PMSCAN_X , "X"
00424 , PMSCAN_Y , "Y"
00425 , PMSCAN_Z , "Z"
00426 , PMSCAN_WINLEFT , "Left Win"
00427 , PMSCAN_WINRIGHT , "Right Win"
00428 , PMSCAN_APPLICATION , "Application"
00429 , 0x00 , NULL
00430 , 0x00 , NULL
00431 , PMSCAN_PAD0 , "Num 0"
00432 , PMSCAN_PAD1 , "Num 1"
00433 , PMSCAN_PAD2 , "Num 2"
00434 , PMSCAN_PAD3 , "Num 3"
00435 , PMSCAN_PAD4 , "Num 4"
00436 , PMSCAN_PAD5 , "Num 5"
00437 , PMSCAN_PAD6 , "Num 6"
00438 , PMSCAN_PAD7 , "Num 7"
00439 , PMSCAN_PAD8 , "Num 8"
00440 , PMSCAN_PAD9 , "Num 9"
00441 , PMSCAN_PADASTERISK , "Num *"
00442 , PMSCAN_PADPLUS , "Num +"
00443 , 0x00 , NULL
00444 , PMSCAN_PADMINUS , "Num -"
00445 , PMSCAN_PADPERIOD , "Num ."
00446 , PMSCAN_PADSLASH , "Num /"
00447 , PMSCAN_F1 , "F1"
00448 , PMSCAN_F2 , "F2"
00449 , PMSCAN_F3 , "F3"
00450 , PMSCAN_F4 , "F4"
00451 , PMSCAN_F5 , "F5"
00452 , PMSCAN_F6 , "F6"
00453 , PMSCAN_F7 , "F7"
00454 , PMSCAN_F8 , "F8"
00455 , PMSCAN_F9 , "F9"
00456 , PMSCAN_F10 , "F10"
00457 , PMSCAN_F11 , "F11"
00458 , PMSCAN_F12 , "F12"
00459 , PMSCAN_F13 , "F13"
00460 , PMSCAN_F14 , "F14"
00461 , PMSCAN_F15 , "F15"
00462 , PMSCAN_F16 , "F16"
00463 , PMSCAN_F17 , "F17"
00464 , PMSCAN_F18 , "F18"
00465 , PMSCAN_F19 , "F19"
00466 , PMSCAN_F20 , "F20"
00467 , PMSCAN_F21 , "F21"
00468 , PMSCAN_F22 , "F22"
00469 , PMSCAN_F23 , "F23"
00470 , PMSCAN_F24 , "F24"
00471 , 0x00 , NULL
00472 , 0x00 , NULL
00473 , 0x00 , NULL
00474 , 0x00 , NULL
00475 , 0x00 , NULL
00476 , 0x00 , NULL
00477 , 0x00 , NULL
00478 , 0x00 , NULL
00479 , PMSCAN_NUMLOCK , "Num Lock"
00480 , PMSCAN_SCROLLLOCK , "Scroll Lock"
00481 , 0x00 , NULL
00482 , 0x00 , NULL
00483 , 0x00 , NULL
00484 , 0x00 , NULL
00485 , 0x00 , NULL
00486 , 0x00 , NULL
00487 , 0x00 , NULL
00488 , 0x00 , NULL
00489 , 0x00 , NULL
00490 , 0x00 , NULL
00491 , 0x00 , NULL
00492 , 0x00 , NULL
00493 , 0x00 , NULL
00494 , 0x00 , NULL
00495 , PMSCAN_SHIFTLEFT , "Left Shift"
00496 , PMSCAN_SHIFTRIGHT , "Right Shift"
00497 , PMSCAN_CTRLLEFT , "Left Control"
00498 , PMSCAN_CTRLRIGHT , "Right Control"
00499 , PMSCAN_ALTLEFT , "Left Alt"
00500 , PMSCAN_ALTRIGHT , "Right Alt"
00501 , 0x00 , NULL
00502 , 0x00 , NULL
00503 , 0x00 , NULL
00504 , 0x00 , NULL
00505 , 0x00 , NULL
00506 , 0x00 , NULL
00507 , 0x00 , NULL
00508 , 0x00 , NULL
00509 , 0x00 , NULL
00510 , 0x00 , NULL
00511 , 0x00 , NULL
00512 , 0x00 , NULL
00513 , 0x00 , NULL
00514 , 0x00 , NULL
00515 , 0x00 , NULL
00516 , 0x00 , NULL
00517 , 0x00 , NULL
00518 , 0x00 , NULL
00519 , 0x00 , NULL
00520 , 0x00 , NULL
00521 , PMSCAN_SEMICOLON , ";"
00522 , PMSCAN_EQUAL , "="
00523 , PMSCAN_COMMA , ","
00524 , PMSCAN_HYPHEN , "-"
00525 , PMSCAN_PERIOD , "."
00526 , PMSCAN_SLASH , "/"
00527 , PMSCAN_GRAVE , "'"
00528 , PMSCAN_JEXTRA , "JExtra"
00529 , PMSCAN_YEN , "Yen"
00530 , 0x00 , NULL
00531 , 0x00 , NULL
00532 , 0x00 , NULL
00533 , 0x00 , NULL
00534 , 0x00 , NULL
00535 , 0x00 , NULL
00536 , 0x00 , NULL
00537 , 0x00 , NULL
00538 , 0x00 , NULL
00539 , 0x00 , NULL
00540 , 0x00 , NULL
00541 , 0x00 , NULL
00542 , 0x00 , NULL
00543 , 0x00 , NULL
00544 , 0x00 , NULL
00545 , 0x00 , NULL
00546 , 0x00 , NULL
00547 , 0x00 , NULL
00548 , 0x00 , NULL
00549 , 0x00 , NULL
00550 , 0x00 , NULL
00551 , 0x00 , NULL
00552 , 0x00 , NULL
00553 , 0x00 , NULL
00554 , PMSCAN_BRACKETLEFT , "["
00555 , PMSCAN_BACKSLASH , "\\"
00556 , PMSCAN_BRACKETRIGHT , "]"
00557 , PMSCAN_QUOTESINGLE , "'"
00558 , 0x00 , NULL
00559 , 0x00 , NULL
00560 , 0x00 , NULL
00561 , PMSCAN_EXTRA , "<"
00562 , 0x00 , NULL
00563 , 0x00 , NULL
00564 , 0x00 , NULL
00565 , 0x00 , NULL
00566 , 0x00 , NULL
00567 , 0x00 , NULL
00568 , 0x00 , NULL
00569 , 0x00 , NULL
00570 , 0x00 , NULL
00571 , 0x00 , NULL
00572 , 0x00 , NULL
00573 , 0x00 , NULL
00574 , 0x00 , NULL
00575 , 0x00 , NULL
00576 , 0x00 , NULL
00577 , 0x00 , NULL
00578 , 0x00 , NULL
00579 , 0x00 , NULL
00580 , 0x00 , NULL
00581 , 0x00 , NULL
00582 , 0x00 , NULL
00583 , 0x00 , NULL
00584 , PMSCAN_ERASEEOF , "Erase"
00585 , 0x00 , NULL
00586 , 0x00 , NULL
00587 , 0x00 , NULL
00588 , PMSCAN_PA1 , "PA1"
00589 , 0x00 , NULL
00590 , 0x00 , NULL
00591 };
00592
00593
00594
00595
00596
00597 BYTE abPMScanToWinScan[256][2] =
00598
00599
00600
00601 { 0x00, FALSE
00602 , WINSCAN_ESC ,FALSE
00603 , WINSCAN_ONE ,FALSE
00604 , WINSCAN_TWO ,FALSE
00605 , WINSCAN_THREE ,FALSE
00606 , WINSCAN_FOUR ,FALSE
00607 , WINSCAN_FIVE ,FALSE
00608 , WINSCAN_SIX ,FALSE
00609 , WINSCAN_SEVEN ,FALSE
00610 , WINSCAN_EIGHT ,FALSE
00611 , WINSCAN_NINE ,FALSE
00612 , WINSCAN_ZERO ,FALSE
00613 , WINSCAN_HYPHEN ,FALSE
00614 , WINSCAN_EQUAL ,FALSE
00615 , WINSCAN_BACKSPACE ,FALSE
00616 , WINSCAN_TAB ,FALSE
00617 , WINSCAN_Q ,FALSE
00618 , WINSCAN_W ,FALSE
00619 , WINSCAN_E ,FALSE
00620 , WINSCAN_R ,FALSE
00621 , WINSCAN_T ,FALSE
00622 , WINSCAN_Y ,FALSE
00623 , WINSCAN_U ,FALSE
00624 , WINSCAN_I ,FALSE
00625 , WINSCAN_O ,FALSE
00626 , WINSCAN_P ,FALSE
00627 , WINSCAN_BRACKETLEFT ,FALSE
00628 , WINSCAN_BRACKETRIGHT ,FALSE
00629 , WINSCAN_ENTER ,FALSE
00630 , WINSCAN_CTRLLEFT ,FALSE
00631 , WINSCAN_A ,FALSE
00632 , WINSCAN_S ,FALSE
00633 , WINSCAN_D ,FALSE
00634 , WINSCAN_F ,FALSE
00635 , WINSCAN_G ,FALSE
00636 , WINSCAN_H ,FALSE
00637 , WINSCAN_J ,FALSE
00638 , WINSCAN_K ,FALSE
00639 , WINSCAN_L ,FALSE
00640 , WINSCAN_SEMICOLON ,FALSE
00641 , WINSCAN_QUOTESINGLE ,FALSE
00642 , WINSCAN_GRAVE ,FALSE
00643 , WINSCAN_SHIFTLEFT ,FALSE
00644 , WINSCAN_BACKSLASH ,FALSE
00645 , WINSCAN_Z ,FALSE
00646 , WINSCAN_X ,FALSE
00647 , WINSCAN_C ,FALSE
00648 , WINSCAN_V ,FALSE
00649 , WINSCAN_B ,FALSE
00650 , WINSCAN_N ,FALSE
00651 , WINSCAN_M ,FALSE
00652 , WINSCAN_COMMA ,FALSE
00653 , WINSCAN_PERIOD ,FALSE
00654 , WINSCAN_SLASH ,FALSE
00655 , WINSCAN_SHIFTRIGHT ,TRUE
00656 , WINSCAN_PADASTERISK ,FALSE
00657 , WINSCAN_ALTLEFT ,FALSE
00658 , WINSCAN_SPACE ,FALSE
00659 , WINSCAN_CAPSLOCK ,FALSE
00660 , WINSCAN_F1 ,FALSE
00661 , WINSCAN_F2 ,FALSE
00662 , WINSCAN_F3 ,FALSE
00663 , WINSCAN_F4 ,FALSE
00664 , WINSCAN_F5 ,FALSE
00665 , WINSCAN_F6 ,FALSE
00666 , WINSCAN_F7 ,FALSE
00667 , WINSCAN_F8 ,FALSE
00668 , WINSCAN_F9 ,FALSE
00669 , WINSCAN_F10 ,FALSE
00670 , WINSCAN_NUMLOCK ,TRUE
00671 , WINSCAN_SCROLLLOCK ,FALSE
00672 , WINSCAN_PAD7 ,FALSE
00673 , WINSCAN_PAD8 ,FALSE
00674 , WINSCAN_PAD9 ,FALSE
00675 , WINSCAN_PADMINUS ,FALSE
00676 , WINSCAN_PAD4 ,FALSE
00677 , WINSCAN_PAD5 ,FALSE
00678 , WINSCAN_PAD6 ,FALSE
00679 , WINSCAN_PADPLUS ,FALSE
00680 , WINSCAN_PAD1 ,FALSE
00681 , WINSCAN_PAD2 ,FALSE
00682 , WINSCAN_PAD3 ,FALSE
00683 , WINSCAN_PAD0 ,FALSE
00684 , WINSCAN_PADPERIOD ,FALSE
00685 , 0x00 ,FALSE
00686 , 0x00 ,FALSE
00687 , WINSCAN_EXTRA ,FALSE
00688 , WINSCAN_F11 ,FALSE
00689 , WINSCAN_F12 ,FALSE
00690 , 0x00 ,FALSE
00691 , WINSCAN_PADENTER ,TRUE
00692 , WINSCAN_CTRLRIGHT ,TRUE
00693 , WINSCAN_PADSLASH ,TRUE
00694 , WINSCAN_PRINT ,TRUE
00695 , WINSCAN_ALTRIGHT ,TRUE
00696 , WINSCAN_PAUSE ,FALSE
00697 , WINSCAN_HOME ,TRUE
00698 , WINSCAN_UP ,TRUE
00699 , WINSCAN_PAGEUP ,TRUE
00700 , WINSCAN_LEFT ,TRUE
00701 , WINSCAN_RIGHT ,TRUE
00702 , WINSCAN_END ,TRUE
00703 , WINSCAN_DOWN ,TRUE
00704 , WINSCAN_PAGEDOWN ,TRUE
00705 , WINSCAN_INSERT ,TRUE
00706 , WINSCAN_DELETE ,TRUE
00707 , WINSCAN_F23 ,FALSE
00708 , WINSCAN_F24 ,FALSE
00709 , 0x00 ,FALSE
00710 , WINSCAN_ERASEEOF ,FALSE
00711 , WINSCAN_BREAK ,TRUE
00712 , 0x00 ,FALSE
00713 , WINSCAN_NLS3 ,FALSE
00714 , WINSCAN_HELP ,FALSE
00715 , 0x00 ,FALSE
00716 , WINSCAN_B11 ,FALSE
00717 , 0x00 ,FALSE
00718 , 0x00 ,FALSE
00719 , 0x00 ,FALSE
00720 , 0x00 ,FALSE
00721 , 0x00 ,FALSE
00722 , WINSCAN_NLS2 ,FALSE
00723 , 0x00 ,FALSE
00724 , WINSCAN_NLS1 ,FALSE
00725 , WINSCAN_APPLICATION ,TRUE
00726 , WINSCAN_YEN ,FALSE
00727 , WINSCAN_WINLEFT ,TRUE
00728 , WINSCAN_WINRIGHT ,TRUE
00729 , WINSCAN_PA1 ,FALSE
00730 , WINSCAN_F13 ,FALSE
00731 , WINSCAN_F14 ,FALSE
00732 , WINSCAN_F15 ,FALSE
00733 , 0x00 ,FALSE
00734 , 0x00 ,FALSE
00735 , 0x00 ,FALSE
00736 , 0x00 ,FALSE
00737 , 0x00 ,FALSE
00738 , WINSCAN_F16 ,FALSE
00739 , WINSCAN_F17 ,FALSE
00740 , WINSCAN_F18 ,FALSE
00741 , WINSCAN_F19 ,FALSE
00742 , WINSCAN_F20 ,FALSE
00743 , WINSCAN_F21 ,FALSE
00744 , WINSCAN_F22 ,FALSE
00745 , WINSCAN_PREVTRACK ,FALSE
00746 , WINSCAN_AT ,FALSE
00747 , WINSCAN_COLON ,FALSE
00748 , WINSCAN_UNDERLINE ,FALSE
00749 , WINSCAN_KANJI ,FALSE
00750 , WINSCAN_STOP ,FALSE
00751 , WINSCAN_AX ,FALSE
00752 , WINSCAN_UNLABELED ,FALSE
00753 , 0x00 ,FALSE
00754 , WINSCAN_NEXTTRACK ,FALSE
00755 , 0x00 ,FALSE
00756 , 0x00 ,FALSE
00757 , 0x00 ,FALSE
00758 , 0x00 ,FALSE
00759 , 0x00 ,FALSE
00760 , 0x00 ,FALSE
00761 , WINSCAN_MUTE ,FALSE
00762 , WINSCAN_CALCULATOR ,FALSE
00763 , WINSCAN_PLAYPAUSE ,FALSE
00764 , 0x00 ,FALSE
00765 , WINSCAN_MEDIASTOP ,FALSE
00766 , 0x00 ,FALSE
00767 , 0x00 ,FALSE
00768 , 0x00 ,FALSE
00769 , 0x00 ,FALSE
00770 , 0x00 ,FALSE
00771 , 0x00 ,FALSE
00772 , 0x00 ,FALSE
00773 , 0x00 ,FALSE
00774 , 0x00 ,FALSE
00775 , WINSCAN_VOLUMEDOWN ,FALSE
00776 , 0x00 ,FALSE
00777 , WINSCAN_VOLUMEUP ,FALSE
00778 , 0x00 ,FALSE
00779 , WINSCAN_WEBHOME ,FALSE
00780 , WINSCAN_NUMPADCOMMA ,FALSE
00781 , 0x00 ,FALSE
00782 , 0x00 ,FALSE
00783 , 0x00 ,FALSE
00784 , 0x00 ,FALSE
00785 , 0x00 ,FALSE
00786 , 0x00 ,FALSE
00787 , 0x00 ,FALSE
00788 , 0x00 ,FALSE
00789 , 0x00 ,FALSE
00790 , 0x00 ,FALSE
00791 , 0x00 ,FALSE
00792 , 0x00 ,FALSE
00793 , 0x00 ,FALSE
00794 , 0x00 ,FALSE
00795 , 0x00 ,FALSE
00796 , 0x00 ,FALSE
00797 , 0x00 ,FALSE
00798 , 0x00 ,FALSE
00799 , 0x00 ,FALSE
00800 , 0x00 ,FALSE
00801 , 0x00 ,FALSE
00802 , 0x00 ,FALSE
00803 , 0x00 ,FALSE
00804 , 0x00 ,FALSE
00805 , 0x00 ,FALSE
00806 , 0x00 ,FALSE
00807 , 0x00 ,FALSE
00808 , 0x00 ,FALSE
00809 , 0x00 ,FALSE
00810 , 0x00 ,FALSE
00811 , 0x00 ,FALSE
00812 , 0x00 ,FALSE
00813 , 0x00 ,FALSE
00814 , 0x00 ,FALSE
00815 , 0x00 ,FALSE
00816 , 0x00 ,FALSE
00817 , 0x00 ,FALSE
00818 , 0x00 ,FALSE
00819 , 0x00 ,FALSE
00820 , 0x00 ,FALSE
00821 , 0x00 ,FALSE
00822 , 0x00 ,FALSE
00823 , WINSCAN_POWER ,FALSE
00824 , WINSCAN_SLEEP ,FALSE
00825 , 0x00 ,FALSE
00826 , 0x00 ,FALSE
00827 , 0x00 ,FALSE
00828 , WINSCAN_WAKE ,FALSE
00829 , 0x00 ,FALSE
00830 , WINSCAN_WEBSEARCH ,FALSE
00831 , WINSCAN_WEBFAVORITES ,FALSE
00832 , WINSCAN_WEBREFRESH ,FALSE
00833 , WINSCAN_WEBSTOP ,FALSE
00834 , WINSCAN_WEBFORWARD ,FALSE
00835 , WINSCAN_WEBBACK ,FALSE
00836 , WINSCAN_MYCOMPUTER ,FALSE
00837 , WINSCAN_MAIL ,FALSE
00838 , WINSCAN_MEDIASELECT ,FALSE
00839 , 0x00 ,FALSE
00840 , 0x00 ,FALSE
00841 , 0x00 ,FALSE
00842 , 0x00 ,FALSE
00843 , 0x00 ,FALSE
00844 , 0x00 ,FALSE
00845 , 0x00 ,FALSE
00846 , 0x00 ,FALSE
00847 , 0x00 ,FALSE
00848 , 0x00 ,FALSE
00849 , 0x00 ,FALSE
00850 , 0x00 ,FALSE
00851 , 0x00 ,FALSE
00852 , 0x00 ,FALSE
00853 , 0x00 ,FALSE
00854 , 0x00 ,FALSE
00855 , 0x00 ,FALSE
00856 , 0x00 ,FALSE
00857 };
00858
00859
00860
00861
00862
00863 ODINPROCEDURE3(KeyTranslatePMToWinBuf,
00864 BYTE *, pmkey,
00865 BYTE *, winkey,
00866 int, nrkeys)
00867 {
00868 for(int i=1;i<nrkeys;i++) {
00869 if(abWinVKeyToPMScan[i].bPMScanCode) {
00870 winkey[i] = pmkey[OSLibWinTranslateChar(abWinVKeyToPMScan[i].bPMScanCode, TC_SCANCODETOVIRTUALKEY, 0)];
00871 }
00872 }
00873 winkey[VK_SHIFT] = winkey[VK_LSHIFT] | winkey[VK_RSHIFT];
00874 winkey[VK_CONTROL] = winkey[VK_LCONTROL] | winkey[VK_RCONTROL];
00875 winkey[VK_MENU] = winkey[VK_LMENU] | winkey[VK_RMENU];
00876 }
00877
00878
00879 BYTE KeyTranslateWinVKeyToPMScan(BYTE bWinVKey, BOOL fExtended)
00880 {
00881
00882
00883 BYTE bAlmost = 0;
00884
00885
00886 #if 0
00887 bAlmost = abWinVKeyToPMScan[bWinVKey].bPMScanCode;
00888 #else
00889 for(int i = 0;
00890 i < 256;
00891 i++)
00892 {
00893 if (abPMScanToWinVKey[i][0] == bWinVKey)
00894 {
00895
00896 bAlmost = i;
00897
00898
00899 if (abPMScanToWinVKey[i][1] == fExtended)
00900 break;
00901 }
00902 }
00903 #endif
00904
00905 dprintf(("KeyTranslateWinVKeyToPMScan(%02xh,%d) = %02xh",
00906 bWinVKey,
00907 fExtended,
00908 bAlmost));
00909
00910
00911 return bAlmost;
00912 }
00913
00914
00915 void KeyTranslatePMScanToWinVKey(BYTE bPMScan,
00916 BOOL bNumLock,
00917 PBYTE pbWinVKey,
00918 WORD* pwWinScan,
00919 PBOOL pfExtended)
00920 {
00921
00922 if (pbWinVKey)
00923 *pbWinVKey = abPMScanToWinVKey[bPMScan][0];
00924
00925 if (pfExtended)
00926 *pfExtended = abPMScanToWinVKey[bPMScan][1];
00927
00928 if (pwWinScan)
00929 *pwWinScan = abPMScanToWinScan[bPMScan][0];
00930 }
00931
00932
00933 BYTE KeyTranslateWinScanToPMScan(BYTE bWinScan, BOOL fExtended)
00934 {
00935
00936
00937
00938
00939
00940
00941 BYTE bAlmost = 0;
00942
00943 for(int i = 0;
00944 i < 256;
00945 i++)
00946 {
00947 if (abPMScanToWinScan[i][0] == bWinScan)
00948 {
00949
00950 bAlmost = i;
00951
00952
00953 if (abPMScanToWinVKey[i][1] == fExtended)
00954 break;
00955 }
00956 }
00957
00958 dprintf(("KeyTranslateWinScanToPMScan(%02xh,%d) = %02xh",
00959 bWinScan,
00960 fExtended,
00961 bAlmost));
00962
00963
00964 return bAlmost;
00965
00966 }
00967
00968
00969 ODINFUNCTION1(int, GetKeyboardType,
00970 int, nTypeFlag)
00971 {
00972 return O32_GetKeyboardType(nTypeFlag);
00973 }
00974
00975
00976 ODINFUNCTION1(BOOL, GetKeyboardState,
00977 PBYTE, lpKeyState)
00978 {
00979 BYTE PMKeyState[256];
00980 BOOL rc;
00981
00982 memset(PMKeyState, 0, sizeof(PMKeyState));
00983 memset(lpKeyState, 0, 256);
00984 rc = OSLibWinGetKeyboardStateTable((PBYTE)&PMKeyState[0] );
00985
00986 if(rc == TRUE)
00987 {
00988 KeyTranslatePMToWinBuf((BYTE *)&PMKeyState[0], lpKeyState, 256);
00989
00990
00991
00992
00993 #ifdef DEBUG
00994 for(int i=0;i<256;i++) {
00995 if(PMKeyState[i] & 0x80) {
00996 dprintf2(("PM key 0x%0x = %x", i, PMKeyState[i]));
00997 }
00998 }
00999 for(i=0;i<256;i++) {
01000 if(lpKeyState[i]) {
01001 dprintf2(("Win key 0x%0x = %x", i, lpKeyState[i]));
01002 }
01003 }
01004 #endif
01005 return TRUE;
01006 }
01007 return FALSE;
01008 }
01009
01010
01011 ODINFUNCTION1(BOOL, SetKeyboardState,
01012 PBYTE, lpKeyState)
01013 {
01014 dprintf(("USER32: SetKeyboardState %x not implemented", lpKeyState));
01015 return(TRUE);
01016 }
01017
01018
01019
01020
01021
01022
01023
01024
01025 ODINFUNCTION1(HKL, GetKeyboardLayout,
01026 DWORD, dwLayout)
01027 {
01028 HKL layout;
01029 layout = GetSystemDefaultLCID();
01030 layout |= (layout<<16);
01031 dprintf(("GetKeyboardLayout returning %08x\n",layout));
01032 return layout;
01033 }
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048 ODINFUNCTION1(INT, GetKeyboardLayoutNameA,
01049 LPSTR, pwszKLID)
01050 {
01051 dprintf(("not correctly implemented"));
01052
01053 sprintf(pwszKLID, "%08x",GetKeyboardLayout(0));
01054 return 1;
01055 }
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072 ODINFUNCTION1(INT, GetKeyboardLayoutNameW,
01073 LPWSTR, pwszKLID)
01074 {
01075 LPSTR buf = (LPSTR)HEAP_xalloc( GetProcessHeap(), 0, strlen("00000409")+1);
01076
01077 int res = GetKeyboardLayoutNameA(buf);
01078 lstrcpyAtoW(pwszKLID,buf);
01079 HeapFree( GetProcessHeap(), 0, buf );
01080 return res;
01081 }
01082
01083
01084
01085
01086
01087
01088
01089
01090
01091
01092
01093 ODINFUNCTION2(INT, GetKeyboardLayoutList,
01094 INT, nBuff,
01095 HKL *, layouts)
01096 {
01097 dprintf(("not correctly implemented"));
01098
01099 if (!nBuff || !layouts)
01100 return 1;
01101
01102 if (layouts)
01103 layouts[0] = GetKeyboardLayout(0);
01104
01105 return 1;
01106 }
01107
01108
01109
01110
01111
01112
01113
01114
01115
01116
01117
01118
01119
01120
01121
01122
01123
01124
01125
01126
01127
01128
01129
01130 ODINFUNCTION5(int, ToAscii,
01131 UINT, uVirtKey,
01132 UINT, uScanCode,
01133 PBYTE, lpbKeyState,
01134 LPWORD, lpwTransKey,
01135 UINT, fuState)
01136 {
01137 INT ret;
01138
01139 if (uScanCode == 0) {
01140
01141
01142 dprintf2(("scanCode=0, doing nothing"));
01143 return 0;
01144 }
01145 if (uScanCode & 0x8000)
01146 {
01147 dprintf2(("Key UP, doing nothing"));
01148 return 0;
01149 }
01150
01151
01152
01153 if (uVirtKey == VK_DELETE)
01154 {
01155 *(char*)lpwTransKey = 0;
01156 ret = 0;
01157 }
01158 else
01159 if (uVirtKey == VK_ESCAPE) {
01160
01161 *(char*)lpwTransKey = VK_ESCAPE;
01162 ret = 1;
01163 }
01164 else {
01165 ULONG shiftstate = 0;
01166
01167
01168
01169 if(lpbKeyState[VK_LSHIFT] & 0x80) shiftstate |= TCF_LSHIFT;
01170 if(lpbKeyState[VK_RSHIFT] & 0x80) shiftstate |= TCF_RSHIFT;
01171 if(lpbKeyState[VK_SHIFT] & 0x80) shiftstate |= TCF_SHIFT;
01172 if(lpbKeyState[VK_LCONTROL] & 0x80) shiftstate |= TCF_LCONTROL;
01173 if(lpbKeyState[VK_RCONTROL] & 0x80) shiftstate |= TCF_RCONTROL;
01174 if(lpbKeyState[VK_CONTROL] & 0x80) shiftstate |= TCF_CONTROL;
01175 if(lpbKeyState[VK_LMENU] & 0x80) shiftstate |= TCF_ALT;
01176 if(lpbKeyState[VK_RMENU] & 0x80) shiftstate |= TCF_ALTGR;
01177 if(lpbKeyState[VK_MENU] & 0x80) shiftstate |= TCF_ALT;
01178 if(lpbKeyState[VK_CAPITAL] & 1) shiftstate |= TCF_CAPSLOCK;
01179 if(lpbKeyState[VK_NUMLOCK] & 1) shiftstate |= TCF_NUMLOCK;
01180
01181
01182 *(char *)lpwTransKey = OSLibWinTranslateChar(uScanCode, TC_SCANCODETOCHAR, shiftstate);
01183
01184 if(shiftstate & TCF_CONTROL) {
01185 if(uVirtKey >= VK_A && uVirtKey <= VK_Z) {
01186
01187 if(shiftstate & (TCF_SHIFT|TCF_CAPSLOCK)) {
01188 *(char *)lpwTransKey -= 0x40;
01189 }
01190 else *(char *)lpwTransKey -= 0x60;
01191 }
01192 else
01193 if(uVirtKey == VK_SPACE) {
01194 if(shiftstate & TCF_SHIFT) {
01195
01196 *lpwTransKey = 0;
01197 }
01198 }
01199 else {
01200
01201 *lpwTransKey = 0;
01202 }
01203 }
01204
01205 if(*(char *)lpwTransKey == 0) {
01206 ret = 0;
01207 }
01208 else ret = 1;
01209 }
01210 dprintf2(("USER32:ToAscii returned %x, len %d", *lpwTransKey, ret));
01211 return ret;
01212 }
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237 ODINFUNCTION6(int, ToAsciiEx,
01238 UINT, uVirtKey,
01239 UINT, uScanCode,
01240 PBYTE, lpbKeyState,
01241 LPWORD, lpwTransKey,
01242 UINT, fuState,
01243 HKL, hkl)
01244 {
01245 dprintf(("imcompletely implemented"));
01246
01247 return ToAscii(uVirtKey, uScanCode, lpbKeyState, lpwTransKey, fuState);
01248 }
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266
01267
01268
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283 ODINFUNCTION6(int, ToUnicode,
01284 UINT, uVirtKey,
01285 UINT, uScanCode,
01286 PBYTE, lpKeyState,
01287 LPWSTR, pwszBuff,
01288 int, cchBuff,
01289 UINT, wFlags)
01290 {
01291 dprintf(("not implemented.\n"));
01292
01293 return (0);
01294 }
01295
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312 ODINFUNCTION0(UINT, GetKBCodePage)
01313 {
01314 return (GetOEMCP());
01315 }
01316
01317
01318 ODINFUNCTION3(int, GetKeyNameTextA,
01319 LPARAM, lParam,
01320 LPSTR, lpString,
01321 int, nSize)
01322 {
01323
01324
01325 BOOL fDontCare = (lParam & WIN_KEY_DONTCARE) != 0;
01326 BOOL fExtended = (lParam & WIN_KEY_EXTENDED) != 0;
01327 UCHAR ucWinScan = (lParam & 0x00ff0000) >> 16;
01328 UCHAR ucWinVKey;
01329 UCHAR ucPMScan;
01330 int result;
01331
01332 if (fDontCare)
01333 {
01334 fExtended = FALSE;
01335
01336
01337
01338
01339
01340 }
01341
01342
01343
01344 ucPMScan = KeyTranslateWinScanToPMScan(ucWinScan, fExtended);
01345 dprintf(("ucWinScan=%02xh, fExtended=%d translated to PMscan=%02xh\n",
01346 ucWinScan,
01347 fExtended,
01348 ucPMScan));
01349 ucWinVKey = abPMScanToWinVKey[ucPMScan][0];
01350 dprintf(("ucPMScan=%02xh translated to ucWinVKey=%02xh\n",
01351 ucPMScan,
01352 ucWinVKey));
01353
01354
01355
01356
01357
01358
01359
01360 memset(lpString, 0, nSize);
01361
01362 LPSTR lpstrKey = abWinVKeyToPMScan[ucWinVKey].lpstrName;
01363 if (NULL == lpstrKey)
01364 {
01365 dprintf(("ERROR: keyname for winscan=%02xh winvkey=%02xh, fExtended=%d not found.\n",
01366 ucWinScan, ucWinVKey, fExtended & !fDontCare));
01367
01368
01369
01370 CHAR szName[10];
01371 sprintf(szName,
01372 "VKey%02x%c",
01373 ucWinScan,
01374 fExtended ? '+' : 0);
01375 memcpy(lpString, szName, nSize);
01376
01377
01378 result = min(nSize, strlen(lpString));
01379 }
01380 else
01381 {
01382 result = min(nSize, strlen(lpstrKey));
01383 strncpy (lpString, lpstrKey, result);
01384 }
01385
01386 dprintf(("keyname=[%s]\n",
01387 lpString));
01388
01389 return result;
01390 }
01391
01392
01393 ODINFUNCTION3(int, GetKeyNameTextW,
01394 LPARAM, lParam,
01395 LPWSTR, lpString,
01396 int, nSize)
01397 {
01398 dprintf(("USER32: GetKeyNameTextW DOES NOT WORK (not implemented)\n"));
01399
01400 return 0;
01401
01402 }
01403
01404
01405 ODINFUNCTION1(SHORT, GetKeyState,
01406 int, nVirtKey)
01407 {
01408
01409 char nState = arrchOverlayKeyState[nVirtKey & 0xff];
01410 switch (nState)
01411 {
01412 case KEYOVERLAYSTATE_DONTCARE:
01413
01414 break;
01415
01416
01417 case KEYOVERLAYSTATE_DOWN:
01418 return 0x8000;
01419
01420 case KEYOVERLAYSTATE_UP:
01421 return 0x0000;
01422 }
01423 return O32_GetKeyState(nVirtKey);
01424 }
01425
01426
01427 ODINFUNCTION1(WORD, GetAsyncKeyState,
01428 INT, nVirtKey)
01429 {
01430
01431 char nState = arrchOverlayKeyState[nVirtKey & 0xff];
01432 switch (nState)
01433 {
01434 case KEYOVERLAYSTATE_DONTCARE:
01435
01436 break;
01437
01438
01439 case KEYOVERLAYSTATE_DOWN:
01440 return 0x8000;
01441
01442 case KEYOVERLAYSTATE_UP:
01443 return 0x0000;
01444 }
01445 return O32_GetAsyncKeyState(nVirtKey);
01446 }
01447
01448
01449 ODINFUNCTION2(UINT, MapVirtualKeyA,
01450 UINT, uCode,
01451 UINT, uMapType)
01452 {
01453 dprintf(("imcompletely implemented"));
01454
01455
01456 switch (uMapType)
01457 {
01458 case 2:
01459 if (uCode >= VK_A && uCode <= VK_Z)
01460 {
01461 return 'A' + uCode - VK_A;
01462 }
01463 break;
01464
01465 case 1:
01466 case 3:
01467
01468
01469 BYTE bPMScan = KeyTranslateWinScanToPMScan(uCode, FALSE);
01470 return O32_MapVirtualKey(bPMScan, uMapType);
01471 }
01472 return O32_MapVirtualKey(uCode, uMapType);
01473 }
01474
01475
01476 ODINFUNCTION2(UINT, MapVirtualKeyW,
01477 UINT, uCode,
01478 UINT, uMapType)
01479 {
01480 dprintf(("incorrectly implemented\n"));
01481
01482
01483 return O32_MapVirtualKey(uCode,uMapType);
01484 }
01485
01486
01487
01488
01489
01490
01491
01492
01493
01494
01495
01496
01497
01498
01499
01500
01501
01502 ODINFUNCTION3(UINT, MapVirtualKeyExA,
01503 UINT, uCode,
01504 UINT, uMapType,
01505 HKL, dwhkl)
01506 {
01507 dprintf(("incompletely implemented"));
01508
01509 return MapVirtualKeyA(uCode, uMapType);
01510 }
01511
01512
01513
01514
01515
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526
01527
01528 ODINFUNCTION3(UINT, MapVirtualKeyExW,
01529 UINT, uCode,
01530 UINT, uMapType,
01531 HKL, dwhkl)
01532 {
01533 dprintf(("incompletely implemented"));
01534
01535 return MapVirtualKeyW(uCode, uMapType);
01536 }
01537
01538
01539
01540
01541
01542
01543
01544
01545
01546
01547
01548
01549
01550
01551 ODINFUNCTION1(DWORD, OemKeyScan,
01552 WORD, wOemChar)
01553 {
01554 int nVirtKey;
01555
01556 OemToCharBuffA((LPCSTR)&wOemChar,
01557 (LPSTR) &nVirtKey,
01558 1);
01559 if (nVirtKey != 0)
01560 {
01561 SHORT sScan = VkKeyScanA(nVirtKey);
01562 nVirtKey = MapVirtualKeyA( (sScan & 0xff), 0);
01563 if (nVirtKey != 0)
01564 {
01565 return ( (nVirtKey & 0x00FF) ||
01566 ( (nVirtKey & 0xFF00) << 8) );
01567 }
01568 }
01569
01570
01571 return 0xffffffff;
01572 }
01573
01574
01575 ODINFUNCTION4(BOOL, RegisterHotKey,
01576 HWND, hwnd,
01577 int, idHotKey,
01578 UINT, fuModifiers,
01579 UINT, uVirtKey)
01580 {
01581 dprintf(("not implemented"));
01582
01583 hwnd = Win32ToOS2Handle(hwnd);
01584 return(TRUE);
01585 }
01586
01587
01588 ODINFUNCTION2(BOOL, UnregisterHotKey,
01589 HWND, hwnd,
01590 int, idHotKey)
01591 {
01592 dprintf(("not implemented"));
01593
01594 hwnd = Win32ToOS2Handle(hwnd);
01595
01596 return(TRUE);
01597 }
01598
01599
01600
01601
01602 ODINFUNCTION1(WORD, VkKeyScanA,
01603 char, ch)
01604 {
01605 return O32_VkKeyScan(ch);
01606 }
01607
01608
01609 ODINFUNCTION1(WORD, VkKeyScanW,
01610 WCHAR, wch)
01611 {
01612 dprintf(("incorrectly implemented"));
01613
01614 return O32_VkKeyScan((char)wch);
01615 }
01616
01617
01618
01619
01620
01621
01622
01623
01624
01625
01626
01627
01628
01629
01630
01631 ODINFUNCTION2(WORD, VkKeyScanExW,
01632 WCHAR, uChar,
01633 HKL, hkl)
01634 {
01635 dprintf(("partially implemented"));
01636
01637 return VkKeyScanW(uChar);
01638 }
01639
01640
01641
01642
01643
01644
01645
01646
01647
01648
01649
01650
01651
01652
01653
01654 ODINFUNCTION2(WORD, VkKeyScanExA,
01655 CHAR, uChar,
01656 HKL, hkl)
01657 {
01658 dprintf(("partially implemented"));
01659
01660 return VkKeyScanA(uChar);
01661 }
01662
01663
01664
01665
01666
01667
01668
01669
01670
01671
01672
01673
01674
01675
01676
01677
01678
01679
01680 ODINPROCEDURE4(keybd_event,
01681 BYTE, bVk,
01682 BYTE, bScan,
01683 DWORD, dwFlags,
01684 DWORD, dwExtraInfo)
01685 {
01686 INPUT i;
01687
01688
01689 i.type = INPUT_KEYBOARD;
01690 i.ki.wVk = bVk;
01691 i.ki.wScan = bScan;
01692 i.ki.dwFlags = dwFlags;
01693 i.ki.dwExtraInfo = dwExtraInfo;
01694
01695
01696 SendInput(1, &i, sizeof(i) );
01697 }
01698
01699
01700
01701
01702
01703
01704
01705
01706
01707
01708
01709
01710
01711
01712
01713
01714
01715 ODINFUNCTION2(HKL, LoadKeyboardLayoutA,
01716 LPCSTR, pwszKLID,
01717 UINT, Flags)
01718 {
01719 dprintf(("USER32:LeadKeyboardLayoutA (%s,%u) not implemented.\n",
01720 pwszKLID,
01721 Flags));
01722
01723 return (NULL);
01724 }
01725
01726
01727
01728
01729
01730
01731
01732
01733
01734
01735
01736
01737
01738
01739
01740
01741
01742 ODINFUNCTION2(HKL, LoadKeyboardLayoutW,
01743 LPCWSTR, pwszKLID,
01744 UINT, Flags)
01745 {
01746 dprintf(("USER32:LoadKeyboardLayoutW (%ls,%u) not implemented.\n",
01747 pwszKLID,
01748 Flags));
01749
01750 return (NULL);
01751 }
01752
01753
01754 ODINFUNCTION2(BOOL, ActivateKeyboardLayout,
01755 HKL, hkl,
01756 UINT, fuFlags)
01757 {
01758 dprintf(("not implemented\n"));
01759 return(TRUE);
01760 }
01761
01762
01763
01764
01765
01766
01767
01768
01769
01770
01771
01772
01773
01774 ODINFUNCTION1(BOOL, UnloadKeyboardLayout,
01775 HKL, hkl)
01776 {
01777 dprintf(("not implemented.\n"));
01778
01779 return (TRUE);
01780 }
01781
01782
01783
01784
01785 ODINPROCEDURE2(KeySetOverlayKeyState,
01786 int, nVirtKey,
01787 char, nState)
01788 {
01789
01790 arrchOverlayKeyState[nVirtKey & 0xff] = nState;
01791 }
01792