| /* | |
| * KEYBOARD driver | |
| * | |
| * Copyright 1993 Bob Amstadt | |
| * Copyright 1996 Albrecht Kleine | |
| * Copyright 1997 David Faure | |
| * Copyright 1998 Morten Welinder | |
| * Copyright 1998 Ulrich Weigand | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #include <stdlib.h> | |
| #include <string.h> | |
| #include <ctype.h> | |
| #include "windef.h" | |
| #include "winbase.h" | |
| #include "wingdi.h" | |
| #include "winuser.h" | |
| #include "win.h" | |
| #include "user.h" | |
| #include "message.h" | |
| #include "wine/debug.h" | |
| #include "winerror.h" | |
| WINE_DEFAULT_DEBUG_CHANNEL(keyboard); | |
| #include "pshpack1.h" | |
| typedef struct _KBINFO | |
| { | |
| BYTE Begin_First_Range; | |
| BYTE End_First_Range; | |
| BYTE Begin_Second_Range; | |
| BYTE End_Second_Range; | |
| WORD StateSize; | |
| } KBINFO, *LPKBINFO; | |
| #include "poppack.h" | |
| static FARPROC16 DefKeybEventProc; | |
| static LPBYTE pKeyStateTable; | |
| /*********************************************************************** | |
| * Inquire (KEYBOARD.1) | |
| */ | |
| WORD WINAPI KEYBOARD_Inquire(LPKBINFO kbInfo) | |
| { | |
| kbInfo->Begin_First_Range = 0; | |
| kbInfo->End_First_Range = 0; | |
| kbInfo->Begin_Second_Range = 0; | |
| kbInfo->End_Second_Range = 0; | |
| kbInfo->StateSize = 16; | |
| return sizeof(KBINFO); | |
| } | |
| /*********************************************************************** | |
| * Enable (KEYBOARD.2) | |
| */ | |
| VOID WINAPI KEYBOARD_Enable( FARPROC16 proc, LPBYTE lpKeyState ) | |
| { | |
| DefKeybEventProc = proc; | |
| pKeyStateTable = lpKeyState; | |
| memset( lpKeyState, 0, 256 ); /* all states to false */ | |
| } | |
| /*********************************************************************** | |
| * Disable (KEYBOARD.3) | |
| */ | |
| VOID WINAPI KEYBOARD_Disable(VOID) | |
| { | |
| DefKeybEventProc = NULL; | |
| pKeyStateTable = NULL; | |
| } | |
| /********************************************************************** | |
| * SetSpeed (KEYBOARD.7) | |
| */ | |
| WORD WINAPI SetSpeed16(WORD unused) | |
| { | |
| FIXME("(%04x): stub\n", unused); | |
| return 0xffff; | |
| } | |
| /********************************************************************** | |
| * ScreenSwitchEnable (KEYBOARD.100) | |
| */ | |
| VOID WINAPI ScreenSwitchEnable16(WORD unused) | |
| { | |
| FIXME("(%04x): stub\n", unused); | |
| } | |
| /********************************************************************** | |
| * OemKeyScan (KEYBOARD.128) | |
| * OemKeyScan (USER32.@) | |
| */ | |
| DWORD WINAPI OemKeyScan(WORD wOemChar) | |
| { | |
| TRACE("(%d)\n", wOemChar); | |
| return wOemChar; | |
| } | |
| /********************************************************************** | |
| * VkKeyScan (KEYBOARD.129) | |
| */ | |
| WORD WINAPI VkKeyScan16(CHAR cChar) | |
| { | |
| return VkKeyScanA( cChar ); | |
| } | |
| /****************************************************************************** | |
| * GetKeyboardType (KEYBOARD.130) | |
| */ | |
| INT16 WINAPI GetKeyboardType16(INT16 nTypeFlag) | |
| { | |
| return GetKeyboardType( nTypeFlag ); | |
| } | |
| /****************************************************************************** | |
| * MapVirtualKey (KEYBOARD.131) | |
| * | |
| * MapVirtualKey translates keycodes from one format to another | |
| */ | |
| UINT16 WINAPI MapVirtualKey16(UINT16 wCode, UINT16 wMapType) | |
| { | |
| return MapVirtualKeyA(wCode,wMapType); | |
| } | |
| /**************************************************************************** | |
| * GetKBCodePage (KEYBOARD.132) | |
| */ | |
| INT16 WINAPI GetKBCodePage16(void) | |
| { | |
| return GetKBCodePage(); | |
| } | |
| /**************************************************************************** | |
| * GetKeyNameText (KEYBOARD.133) | |
| */ | |
| INT16 WINAPI GetKeyNameText16(LONG lParam, LPSTR lpBuffer, INT16 nSize) | |
| { | |
| return GetKeyNameTextA( lParam, lpBuffer, nSize ); | |
| } | |
| /**************************************************************************** | |
| * ToAscii (KEYBOARD.4) | |
| * | |
| * The ToAscii function translates the specified virtual-key code and keyboard | |
| * state to the corresponding Windows character or characters. | |
| * | |
| * If the specified key is a dead key, the return value is negative. Otherwise, | |
| * it is one of the following values: | |
| * Value Meaning | |
| * 0 The specified virtual key has no translation for the current state of the keyboard. | |
| * 1 One Windows character was copied to the buffer. | |
| * 2 Two characters were copied to the buffer. This usually happens when a | |
| * dead-key character (accent or diacritic) stored in the keyboard layout cannot | |
| * be composed with the specified virtual key to form a single character. | |
| * | |
| * FIXME : should do the above (return 2 for non matching deadchar+char combinations) | |
| * | |
| */ | |
| INT16 WINAPI ToAscii16(UINT16 virtKey,UINT16 scanCode, LPBYTE lpKeyState, | |
| LPVOID lpChar, UINT16 flags) | |
| { | |
| return ToAscii( virtKey, scanCode, lpKeyState, lpChar, flags ); | |
| } | |
| /*********************************************************************** | |
| * MessageBeep (USER.104) | |
| */ | |
| void WINAPI MessageBeep16( UINT16 i ) | |
| { | |
| MessageBeep( i ); | |
| } | |
| /*********************************************************************** | |
| * MessageBeep (USER32.@) | |
| */ | |
| BOOL WINAPI MessageBeep( UINT i ) | |
| { | |
| BOOL active = TRUE; | |
| SystemParametersInfoA( SPI_GETBEEP, 0, &active, FALSE ); | |
| if (active) USER_Driver.pBeep(); | |
| return TRUE; | |
| } |