| /* |
| * Keyboard related functions |
| * |
| * Copyright 1993 Bob Amstadt |
| */ |
| #include <string.h> |
| #include "win.h" |
| #include "windows.h" |
| |
| extern BOOL MouseButtonsStates[3]; |
| extern BOOL AsyncMouseButtonsStates[3]; |
| extern BYTE KeyStateTable[256]; |
| extern BYTE AsyncKeyStateTable[256]; |
| |
| /********************************************************************** |
| * GetKeyState [USER.106] |
| */ |
| int GetKeyState(int keycode) |
| { |
| switch(keycode) { |
| case VK_LBUTTON: |
| return MouseButtonsStates[0]; |
| case VK_MBUTTON: |
| return MouseButtonsStates[1]; |
| case VK_RBUTTON: |
| return MouseButtonsStates[2]; |
| default: |
| return KeyStateTable[keycode]; |
| } |
| } |
| |
| /********************************************************************** |
| * GetKeyboardState [USER.222] |
| */ |
| void GetKeyboardState(BYTE FAR *lpKeyState) |
| { |
| if (lpKeyState != NULL) { |
| KeyStateTable[VK_LBUTTON] = MouseButtonsStates[0]; |
| KeyStateTable[VK_MBUTTON] = MouseButtonsStates[1]; |
| KeyStateTable[VK_RBUTTON] = MouseButtonsStates[2]; |
| memcpy(lpKeyState, KeyStateTable, 256); |
| } |
| } |
| |
| /********************************************************************** |
| * GetAsyncKeyState (USER.249) |
| * |
| * Determine if a key is or was pressed. retval has high-order |
| * byte set to 1 if currently pressed, low-order byte 1 if key has |
| * been pressed. |
| * |
| * This uses the variable AsyncMouseButtonsStates and |
| * AsyncKeyStateTable (set in event.c) which have the mouse button |
| * number or key number (whichever is applicable) set to true if the |
| * mouse or key had been depressed since the last call to |
| * GetAsyncKeyState. |
| */ |
| int GetAsyncKeyState(int nKey) |
| { |
| short retval; |
| |
| switch (nKey) { |
| |
| case VK_LBUTTON: |
| retval = AsyncMouseButtonsStates[0] | |
| (MouseButtonsStates[0] << 8); |
| break; |
| case VK_MBUTTON: |
| retval = AsyncMouseButtonsStates[1] | |
| (MouseButtonsStates[1] << 8); |
| break; |
| case VK_RBUTTON: |
| retval = AsyncMouseButtonsStates[2] | |
| (MouseButtonsStates[2] << 8); |
| break; |
| default: |
| retval = AsyncKeyStateTable[nKey] | |
| (KeyStateTable[nKey] << 8); |
| break; |
| } |
| |
| bzero(AsyncMouseButtonsStates, 3); /* all states to false */ |
| bzero(AsyncKeyStateTable, 256); |
| |
| return retval; |
| } |
| |