Release 950122
[wine] / windows / keyboard.c
1 /*
2  * Keyboard related functions
3  *
4  * Copyright 1993 Bob Amstadt
5  */
6 #include <string.h>
7 #include "win.h"
8 #include "windows.h"
9
10 extern BOOL MouseButtonsStates[3];
11 extern BOOL AsyncMouseButtonsStates[3];
12 extern BYTE KeyStateTable[256];
13 extern BYTE AsyncKeyStateTable[256];
14
15 /**********************************************************************
16  *              GetKeyState                     [USER.106]
17  */
18 int GetKeyState(int keycode)
19 {
20         switch(keycode) {
21                 case VK_LBUTTON:
22                     return MouseButtonsStates[0];
23                 case VK_MBUTTON:
24                     return MouseButtonsStates[1];
25                 case VK_RBUTTON:
26                     return MouseButtonsStates[2];
27                 default:
28                     return KeyStateTable[keycode];
29                 }
30 }
31
32 /**********************************************************************
33  *              GetKeyboardState                        [USER.222]
34  */
35 void GetKeyboardState(BYTE FAR *lpKeyState)
36 {
37     if (lpKeyState != NULL) {
38         KeyStateTable[VK_LBUTTON] = MouseButtonsStates[0];
39         KeyStateTable[VK_MBUTTON] = MouseButtonsStates[1];
40         KeyStateTable[VK_RBUTTON] = MouseButtonsStates[2];
41         memcpy(lpKeyState, KeyStateTable, 256);
42     }
43 }
44
45 /**********************************************************************
46  *            GetAsyncKeyState        (USER.249)
47  *
48  *      Determine if a key is or was pressed.  retval has high-order 
49  * byte set to 1 if currently pressed, low-order byte 1 if key has
50  * been pressed.
51  *
52  *      This uses the variable AsyncMouseButtonsStates and
53  * AsyncKeyStateTable (set in event.c) which have the mouse button
54  * number or key number (whichever is applicable) set to true if the
55  * mouse or key had been depressed since the last call to 
56  * GetAsyncKeyState.
57  */
58 int GetAsyncKeyState(int nKey)
59 {
60         short   retval; 
61
62         switch (nKey) {
63
64            case VK_LBUTTON:
65                 retval = AsyncMouseButtonsStates[0] | 
66                               (MouseButtonsStates[0] << 8);
67                 break;
68            case VK_MBUTTON:
69                 retval = AsyncMouseButtonsStates[1] |
70                               (MouseButtonsStates[1] << 8);
71                 break;
72            case VK_RBUTTON:
73                 retval = AsyncMouseButtonsStates[2] |
74                               (MouseButtonsStates[2] << 8);
75                 break;
76            default:
77                 retval = AsyncKeyStateTable[nKey] | 
78                               (KeyStateTable[nKey] << 8);
79                 break;
80         }
81
82         bzero(AsyncMouseButtonsStates, 3);      /* all states to false */
83         bzero(AsyncKeyStateTable, 256);
84
85         return retval;
86 }
87