Release 951212
[wine/multimedia.git] / misc / keyboard.c
blob8058a7c068f7364e0e89b78820358f8488eb1001
1 /*
2 static char RCSId[] = "$Id: keyboard.c,v 1.2 1993/09/13 18:52:02 scott Exp $";
3 static char Copyright[] = "Copyright Scott A. Laird, Erik Bos 1993, 1994";
4 */
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <string.h>
9 #include "windows.h"
10 #include "keyboard.h"
11 #include "stddebug.h"
12 /* #define DEBUG_KEYBOARD */
13 #include "debug.h"
15 int ToAscii(WORD wVirtKey, WORD wScanCode, LPSTR lpKeyState,
16 LPVOID lpChar, WORD wFlags)
18 int i;
20 dprintf_keyboard(stddeb,"ToAscii (%d,%d)\n",wVirtKey, wScanCode);
22 /* FIXME: this is not sufficient but better than returing -1 */
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;
31 *(BYTE*)lpChar = 0;
32 return 0;
35 DWORD OemKeyScan(WORD wOemChar)
37 dprintf_keyboard(stddeb,"*OemKeyScan (%d)\n",wOemChar);
39 return wOemChar;
42 /* VkKeyScan translates an ANSI character to a virtual-key and shift code
43 * for the current keyboard. */
45 WORD VkKeyScan(WORD cChar)
47 int i;
49 dprintf_keyboard(stddeb,"VkKeyScan (%d)\n",cChar);
51 for (i = 0 ; i != KeyTableSize ; i++)
52 if (KeyTable[i].ASCII == cChar)
53 return KeyTable[i].virtualkey;
55 return -1;
58 int GetKeyboardType(int nTypeFlag)
60 dprintf_keyboard(stddeb,"GetKeyboardType(%d)\n",nTypeFlag);
61 switch(nTypeFlag)
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 */
78 /* MapVirtualKey translates keycodes from one format to another. */
80 WORD MapVirtualKey(WORD wCode, WORD wMapType)
82 int i;
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;
91 case 1:
92 for (i = 0 ; i != KeyTableSize ; i++)
93 if (KeyTable[i].scancode == wCode)
94 return KeyTable[i].virtualkey;
95 return 0;
97 case 2:
98 for (i = 0 ; i != KeyTableSize ; i++)
99 if (KeyTable[i].virtualkey == wCode)
100 return KeyTable[i].ASCII;
101 return 0;
103 default:
104 fprintf(stderr, "MapVirtualKey: unknown wMapType!\n");
105 return 0;
107 return 0;
110 int GetKbCodePage(void)
112 dprintf_keyboard(stddeb,"GetKbCodePage()\n");
113 return 850;
116 int GetKeyNameText(LONG lParam, LPSTR lpBuffer, int nSize)
118 int i;
120 dprintf_keyboard(stddeb,"GetKeyNameText(%ld,<ptr>,%d)\n",lParam,nSize);
122 lParam >>= 16;
123 lParam &= 0xff;
125 for (i = 0 ; i != KeyTableSize ; i++)
126 if (KeyTable[i].scancode == lParam) {
127 lstrcpyn(lpBuffer, KeyTable[i].name, nSize);
128 return strlen(lpBuffer);
131 *lpBuffer = 0;
132 return 0;