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";
12 /* #define 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
);