Release 941122
[wine] / misc / keyboard.c
1 static char RCSId[] = "$Id: keyboard.c,v 1.2 1993/09/13 18:52:02 scott Exp $";
2 static char Copyright[] = "Copyright  Scott A. Laird, Erik Bos  1993, 1994";
3
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include "prototypes.h"
8 #include "windows.h"
9 #include "keyboard.h"
10 #include "stddebug.h"
11 /* #define DEBUG_KEYBOARD /* */
12 /* #undef  DEBUG_KEYBOARD /* */
13 #include "debug.h"
14
15 int ToAscii(WORD wVirtKey, WORD wScanCode, LPSTR lpKeyState, 
16         LPVOID lpChar, WORD wFlags) 
17 {
18         int i;
19
20         dprintf_keyboard(stddeb,"ToAscii (%d,%d)\n",wVirtKey, wScanCode);
21
22         /* FIXME: this is not sufficient but better than returing -1 */
23
24         for (i = 0 ; i != KeyTableSize ; i++) 
25                 if (KeyTable[i].virtualkey == wVirtKey)  {
26                         *(BYTE*)lpChar++ = *KeyTable[i].name;
27                         *(BYTE*)lpChar = 0;
28                         return 1;
29                 }
30
31         *(BYTE*)lpChar = 0;
32         return 0;
33 }
34
35 DWORD OemKeyScan(WORD wOemChar)
36 {
37     dprintf_keyboard(stddeb,"*OemKeyScan (%d)\n",wOemChar);
38
39         return wOemChar;
40 }
41
42 /* VkKeyScan translates an ANSI character to a virtual-key and shift code
43  * for the current keyboard. */
44
45 WORD VkKeyScan(WORD cChar)
46 {
47         int i;
48         
49         dprintf_keyboard(stddeb,"VkKeyScan (%d)\n",cChar);
50         
51         for (i = 0 ; i != KeyTableSize ; i++) 
52                 if (KeyTable[i].ASCII == cChar)
53                         return KeyTable[i].virtualkey;
54
55         return -1;
56 }
57
58 int GetKeyboardType(int nTypeFlag)
59 {
60   dprintf_keyboard(stddeb,"GetKeyboardType(%d)\n",nTypeFlag);
61   switch(nTypeFlag)
62     {
63     case 0:      /* Keyboard type */
64       return 4;    /* AT-101 */
65       break;
66     case 1:      /* Keyboard Subtype */
67       return 0;    /* There are no defined subtypes */
68       break;
69     case 2:      /* Number of F-keys */
70       return 12;   /* We're doing an 101 for now, so return 12 F-keys */
71       break;
72     default:     
73       fprintf(stderr, "Unknown type on GetKeyboardType\n");
74       return 0;    /* The book says 0 here, so 0 */
75     }
76 }
77
78 /* MapVirtualKey translates keycodes from one format to another. */
79
80 WORD MapVirtualKey(WORD wCode, WORD wMapType)
81 {
82         int i;
83         
84         switch(wMapType) {
85                 case 0:
86                         for (i = 0 ; i != KeyTableSize ; i++) 
87                                 if (KeyTable[i].virtualkey == wCode) 
88                                         return KeyTable[i].scancode;
89                         return 0;
90
91                 case 1:
92                         for (i = 0 ; i != KeyTableSize ; i++) 
93                                 if (KeyTable[i].scancode == wCode) 
94                                         return KeyTable[i].virtualkey;
95                         return 0;
96
97                 case 2:
98                         for (i = 0 ; i != KeyTableSize ; i++) 
99                                 if (KeyTable[i].virtualkey == wCode) 
100                                         return KeyTable[i].ASCII;
101                         return 0;
102
103                 default: 
104                         fprintf(stderr, "MapVirtualKey: unknown wMapType!\n");
105                         return 0;       
106         }
107         return 0;
108 }
109
110 int GetKbCodePage(void)
111 {
112         dprintf_keyboard(stddeb,"GetKbCodePage()\n");
113         return 850;
114 }
115
116 int GetKeyNameText(LONG lParam, LPSTR lpBuffer, int nSize)
117 {
118         int i;
119         
120         dprintf_keyboard(stddeb,"GetKeyNameText(%ld,<ptr>,%d)\n",lParam,nSize);
121
122         lParam >>= 16;
123         lParam &= 0xff;
124
125         for (i = 0 ; i != KeyTableSize ; i++) 
126                 if (KeyTable[i].scancode == lParam)  {
127                         strncpy(lpBuffer, KeyTable[i].name, nSize);
128                         return strlen(lpBuffer);
129                 }
130
131         *lpBuffer = 0;
132         return 0;
133 }