Release 950606
[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  *      SetKeyboardState            [USER.223]
47  */
48 void SetKeyboardState(BYTE FAR *lpKeyState)
49 {
50         if (lpKeyState != NULL) {
51         memcpy(KeyStateTable, lpKeyState, 256);
52         MouseButtonsStates[0] = KeyStateTable[VK_LBUTTON];
53         MouseButtonsStates[1] = KeyStateTable[VK_MBUTTON];
54         MouseButtonsStates[2] = KeyStateTable[VK_RBUTTON];
55         }
56 }
57 /**********************************************************************
58  *            GetAsyncKeyState        (USER.249)
59  *
60  *      Determine if a key is or was pressed.  retval has high-order 
61  * byte set to 1 if currently pressed, low-order byte 1 if key has
62  * been pressed.
63  *
64  *      This uses the variable AsyncMouseButtonsStates and
65  * AsyncKeyStateTable (set in event.c) which have the mouse button
66  * number or key number (whichever is applicable) set to true if the
67  * mouse or key had been depressed since the last call to 
68  * GetAsyncKeyState.
69  */
70 int GetAsyncKeyState(int nKey)
71 {
72         short   retval; 
73
74         switch (nKey) {
75
76            case VK_LBUTTON:
77                 retval = AsyncMouseButtonsStates[0] | 
78                               (MouseButtonsStates[0] << 8);
79                 break;
80            case VK_MBUTTON:
81                 retval = AsyncMouseButtonsStates[1] |
82                               (MouseButtonsStates[1] << 8);
83                 break;
84            case VK_RBUTTON:
85                 retval = AsyncMouseButtonsStates[2] |
86                               (MouseButtonsStates[2] << 8);
87                 break;
88            default:
89                 retval = AsyncKeyStateTable[nKey] | 
90                               (KeyStateTable[nKey] << 8);
91                 break;
92         }
93
94         bzero(AsyncMouseButtonsStates, 3);      /* all states to false */
95         bzero(AsyncKeyStateTable, 256);
96
97         return retval;
98 }
99