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";
7 #include "prototypes.h"
11 /* #define DEBUG_KEYBOARD /* */
12 /* #undef DEBUG_KEYBOARD /* */
15 int ToAscii(WORD wVirtKey, WORD wScanCode, LPSTR lpKeyState,
16 LPVOID lpChar, WORD wFlags)
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;
35 DWORD OemKeyScan(WORD wOemChar)
37 dprintf_keyboard(stddeb,"*OemKeyScan (%d)\n",wOemChar);
42 /* VkKeyScan translates an ANSI character to a virtual-key and shift code
43 * for the current keyboard. */
45 WORD VkKeyScan(WORD cChar)
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;
58 int GetKeyboardType(int nTypeFlag)
60 dprintf_keyboard(stddeb,"GetKeyboardType(%d)\n",nTypeFlag);
63 case 0: /* Keyboard type */
64 return 4; /* AT-101 */
66 case 1: /* Keyboard Subtype */
67 return 0; /* There are no defined subtypes */
69 case 2: /* Number of F-keys */
70 return 12; /* We're doing an 101 for now, so return 12 F-keys */
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)
86 for (i = 0 ; i != KeyTableSize ; i++)
87 if (KeyTable[i].virtualkey == wCode)
88 return KeyTable[i].scancode;
92 for (i = 0 ; i != KeyTableSize ; i++)
93 if (KeyTable[i].scancode == wCode)
94 return KeyTable[i].virtualkey;
98 for (i = 0 ; i != KeyTableSize ; i++)
99 if (KeyTable[i].virtualkey == wCode)
100 return KeyTable[i].ASCII;
104 fprintf(stderr, "MapVirtualKey: unknown wMapType!\n");
110 int GetKbCodePage(void)
112 dprintf_keyboard(stddeb,"GetKbCodePage()\n");
116 int GetKeyNameText(LONG lParam, LPSTR lpBuffer, int nSize)
120 dprintf_keyboard(stddeb,"GetKeyNameText(%ld,<ptr>,%d)\n",lParam,nSize);
125 for (i = 0 ; i != KeyTableSize ; i++)
126 if (KeyTable[i].scancode == lParam) {
127 strncpy(lpBuffer, KeyTable[i].name, nSize);
128 return strlen(lpBuffer);