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