mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-01 22:50:08 +00:00
342 lines
8.1 KiB
C
342 lines
8.1 KiB
C
/*
|
|
* Copyright 2022 Rémi Bernon for CodeWeavers
|
|
*
|
|
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
|
|
#ifndef __WINE_KBD_H
|
|
#define __WINE_KBD_H
|
|
|
|
#include "windef.h"
|
|
|
|
#define KBDBASE 0
|
|
#define KBDSHIFT 1
|
|
#define KBDCTRL 2
|
|
#define KBDALT 4
|
|
#define KBDKANA 8
|
|
#define KBDROYA 0x10
|
|
#define KBDLOYA 0x20
|
|
#define KBDGRPSELTAP 0x80
|
|
|
|
#define WCH_NONE 0xf000
|
|
#define WCH_DEAD 0xf001
|
|
#define WCH_LGTR 0xf002
|
|
|
|
#define CAPLOK 0x01
|
|
#define SGCAPS 0x02
|
|
#define CAPLOKALTGR 0x04
|
|
#define KANALOK 0x08
|
|
#define GRPSELTAP 0x80
|
|
|
|
typedef struct
|
|
{
|
|
BYTE Vk;
|
|
BYTE ModBits;
|
|
} VK_TO_BIT, *PVK_TO_BIT;
|
|
|
|
typedef struct
|
|
{
|
|
VK_TO_BIT *pVkToBit;
|
|
WORD wMaxModBits;
|
|
BYTE ModNumber[];
|
|
} MODIFIERS, *PMODIFIERS;
|
|
|
|
#define TYPEDEF_VK_TO_WCHARS(n) \
|
|
typedef struct _VK_TO_WCHARS##n \
|
|
{ \
|
|
BYTE VirtualKey; \
|
|
BYTE Attributes; \
|
|
WCHAR wch[n]; \
|
|
} VK_TO_WCHARS##n, *PVK_TO_WCHARS##n
|
|
|
|
TYPEDEF_VK_TO_WCHARS(1);
|
|
TYPEDEF_VK_TO_WCHARS(2);
|
|
TYPEDEF_VK_TO_WCHARS(3);
|
|
TYPEDEF_VK_TO_WCHARS(4);
|
|
TYPEDEF_VK_TO_WCHARS(5);
|
|
TYPEDEF_VK_TO_WCHARS(6);
|
|
TYPEDEF_VK_TO_WCHARS(7);
|
|
TYPEDEF_VK_TO_WCHARS(8);
|
|
TYPEDEF_VK_TO_WCHARS(9);
|
|
TYPEDEF_VK_TO_WCHARS(10);
|
|
|
|
typedef struct _VK_TO_WCHAR_TABLE
|
|
{
|
|
VK_TO_WCHARS1 *pVkToWchars;
|
|
BYTE nModifications;
|
|
BYTE cbSize;
|
|
} VK_TO_WCHAR_TABLE, *PVK_TO_WCHAR_TABLE;
|
|
|
|
typedef struct
|
|
{
|
|
DWORD dwBoth;
|
|
WCHAR wchComposed;
|
|
USHORT uFlags;
|
|
} DEADKEY, *PDEADKEY;
|
|
|
|
typedef struct
|
|
{
|
|
BYTE vsc;
|
|
WCHAR *pwsz;
|
|
} VSC_LPWSTR, *PVSC_LPWSTR;
|
|
|
|
typedef struct _VSC_VK
|
|
{
|
|
BYTE Vsc;
|
|
USHORT Vk;
|
|
} VSC_VK, *PVSC_VK;
|
|
|
|
#define TYPEDEF_LIGATURE(n) \
|
|
typedef struct _LIGATURE##n \
|
|
{ \
|
|
BYTE VirtualKey; \
|
|
WORD ModificationNumber; \
|
|
WCHAR wch[n]; \
|
|
} LIGATURE##n, *PLIGATURE##n;
|
|
|
|
TYPEDEF_LIGATURE(1)
|
|
TYPEDEF_LIGATURE(2)
|
|
TYPEDEF_LIGATURE(3)
|
|
TYPEDEF_LIGATURE(4)
|
|
TYPEDEF_LIGATURE(5)
|
|
|
|
typedef struct tagKbdLayer
|
|
{
|
|
MODIFIERS *pCharModifiers;
|
|
VK_TO_WCHAR_TABLE *pVkToWcharTable;
|
|
DEADKEY *pDeadKey;
|
|
VSC_LPWSTR *pKeyNames;
|
|
VSC_LPWSTR *pKeyNamesExt;
|
|
WCHAR **pKeyNamesDead;
|
|
USHORT *pusVSCtoVK;
|
|
BYTE bMaxVSCtoVK;
|
|
VSC_VK *pVSCtoVK_E0;
|
|
VSC_VK *pVSCtoVK_E1;
|
|
DWORD fLocaleFlags;
|
|
BYTE nLgMax;
|
|
BYTE cbLgEntry;
|
|
LIGATURE1 *pLigature;
|
|
DWORD dwType;
|
|
DWORD dwSubType;
|
|
} KBDTABLES, *PKBDTABLES;
|
|
|
|
#define KBD_VERSION 1
|
|
#define GET_KBD_VERSION(table) (HIWORD((table)->fLocaleFlags))
|
|
|
|
#ifndef KBD_TYPE
|
|
#define KBD_TYPE 4
|
|
#endif
|
|
|
|
#define KBDEXT (USHORT)0x0100
|
|
#define KBDMULTIVK (USHORT)0x0200
|
|
#define KBDSPECIAL (USHORT)0x0400
|
|
#define KBDNUMPAD (USHORT)0x0800
|
|
#define KBDUNICODE (USHORT)0x1000
|
|
#define KBDINJECTEDVK (USHORT)0x2000
|
|
#define KBDMAPPEDVK (USHORT)0x4000
|
|
#define KBDBREAK (USHORT)0x8000
|
|
|
|
#define VK__none_ 0xff
|
|
#define VK_ABNT_C1 0xc1
|
|
#define VK_ABNT_C2 0xc2
|
|
|
|
#if (KBD_TYPE <= 6)
|
|
#define _EQ(v4) (VK_##v4)
|
|
#if (KBD_TYPE == 1)
|
|
#define _NE(v1, v2, v3, v4, v5, v6) (VK_##v1)
|
|
#elif (KBD_TYPE == 2)
|
|
#define _NE(v1, v2, v3, v4, v5, v6) (VK_##v2)
|
|
#elif (KBD_TYPE == 3)
|
|
#define _NE(v1, v2, v3, v4, v5, v6) (VK_##v3)
|
|
#elif (KBD_TYPE == 4)
|
|
#define _NE(v1, v2, v3, v4, v5, v6) (VK_##v4)
|
|
#elif (KBD_TYPE == 5)
|
|
#define _NE(v1, v2, v3, v4, v5, v6) (VK_##v5)
|
|
#elif (KBD_TYPE == 6)
|
|
#define _NE(v1, v2, v3, v4, v5, v6) (VK_##v6)
|
|
#endif
|
|
#define T00 _EQ(_none_)
|
|
#define T01 _EQ(ESCAPE)
|
|
#define T02 '1'
|
|
#define T03 '2'
|
|
#define T04 '3'
|
|
#define T05 '4'
|
|
#define T06 '5'
|
|
#define T07 '6'
|
|
#define T08 '7'
|
|
#define T09 '8'
|
|
#define T0A '9'
|
|
#define T0B '0'
|
|
#define T0C _EQ(OEM_MINUS)
|
|
#define T0D _NE(OEM_PLUS,OEM_4, OEM_PLUS, OEM_PLUS, OEM_PLUS, OEM_PLUS)
|
|
#define T0E _EQ(BACK)
|
|
#define T0F _EQ(TAB)
|
|
#define T10 'Q'
|
|
#define T11 'W'
|
|
#define T12 'E'
|
|
#define T13 'R'
|
|
#define T14 'T'
|
|
#define T15 'Y'
|
|
#define T16 'U'
|
|
#define T17 'I'
|
|
#define T18 'O'
|
|
#define T19 'P'
|
|
#define T1A _NE(OEM_4, OEM_6, OEM_4, OEM_4, OEM_4, OEM_4)
|
|
#define T1B _NE(OEM_6, OEM_1, OEM_6, OEM_6, OEM_6, OEM_6)
|
|
#define T1C _EQ(RETURN)
|
|
#define T1D _EQ(LCONTROL)
|
|
#define T1E 'A'
|
|
#define T1F 'S'
|
|
#define T20 'D'
|
|
#define T21 'F'
|
|
#define T22 'G'
|
|
#define T23 'H'
|
|
#define T24 'J'
|
|
#define T25 'K'
|
|
#define T26 'L'
|
|
#define T27 _NE(OEM_1, OEM_PLUS, OEM_1, OEM_1, OEM_1, OEM_1)
|
|
#define T28 _NE(OEM_7, OEM_3, OEM_7, OEM_7, OEM_3, OEM_3)
|
|
#define T29 _NE(OEM_3, OEM_7, OEM_3, OEM_3, OEM_7, OEM_7)
|
|
#define T2A _EQ(LSHIFT)
|
|
#define T2B _EQ(OEM_5)
|
|
#define T2C 'Z'
|
|
#define T2D 'X'
|
|
#define T2E 'C'
|
|
#define T2F 'V'
|
|
#define T30 'B'
|
|
#define T31 'N'
|
|
#define T32 'M'
|
|
#define T33 _EQ(OEM_COMMA)
|
|
#define T34 _EQ(OEM_PERIOD)
|
|
#define T35 _EQ(OEM_2)
|
|
#define T36 _EQ(RSHIFT)
|
|
#define T37 _EQ(MULTIPLY)
|
|
#define T38 _EQ(LMENU)
|
|
#define T39 ' '
|
|
#define T3A _EQ(CAPITAL)
|
|
#define T3B _EQ(F1)
|
|
#define T3C _EQ(F2)
|
|
#define T3D _EQ(F3)
|
|
#define T3E _EQ(F4)
|
|
#define T3F _EQ(F5)
|
|
#define T40 _EQ(F6)
|
|
#define T41 _EQ(F7)
|
|
#define T42 _EQ(F8)
|
|
#define T43 _EQ(F9)
|
|
#define T44 _EQ(F10)
|
|
#define T45 _EQ(NUMLOCK)
|
|
#define T46 _EQ(SCROLL)
|
|
#define T47 _EQ(HOME)
|
|
#define T48 _EQ(UP)
|
|
#define T49 _EQ(PRIOR)
|
|
#define T4A _EQ(SUBTRACT)
|
|
#define T4B _EQ(LEFT)
|
|
#define T4C _EQ(CLEAR)
|
|
#define T4D _EQ(RIGHT)
|
|
#define T4E _EQ(ADD)
|
|
#define T4F _EQ(END)
|
|
#define T50 _EQ(DOWN)
|
|
#define T51 _EQ(NEXT)
|
|
#define T52 _EQ(INSERT)
|
|
#define T53 _EQ(DELETE)
|
|
#define T54 _EQ(SNAPSHOT)
|
|
#define T55 _EQ(_none_)
|
|
#define T56 _NE(OEM_102, HELP, OEM_102, OEM_102, _none_, OEM_PA2)
|
|
#define T57 _NE(F11, RETURN, F11, F11, _none_, HELP)
|
|
#define T58 _NE(F12, LEFT, F12, F12, _none_, OEM_102)
|
|
#define T59 _EQ(CLEAR)
|
|
#define T5A _EQ(OEM_WSCTRL)
|
|
#define T5B _EQ(OEM_FINISH)
|
|
#define T5C _EQ(OEM_JUMP)
|
|
#define T5D _EQ(EREOF)
|
|
#define T5E _EQ(OEM_BACKTAB)
|
|
#define T5F _EQ(OEM_AUTO)
|
|
#define T60 _EQ(_none_)
|
|
#define T61 _EQ(_none_)
|
|
#define T62 _EQ(ZOOM)
|
|
#define T63 _EQ(HELP)
|
|
#define T64 _EQ(F13)
|
|
#define T65 _EQ(F14)
|
|
#define T66 _EQ(F15)
|
|
#define T67 _EQ(F16)
|
|
#define T68 _EQ(F17)
|
|
#define T69 _EQ(F18)
|
|
#define T6A _EQ(F19)
|
|
#define T6B _EQ(F20)
|
|
#define T6C _EQ(F21)
|
|
#define T6D _EQ(F22)
|
|
#define T6E _EQ(F23)
|
|
#define T6F _EQ(OEM_PA3)
|
|
#define T70 _EQ(_none_)
|
|
#define T71 _EQ(OEM_RESET)
|
|
#define T72 _EQ(_none_)
|
|
#define T73 _EQ(ABNT_C1)
|
|
#define T74 _EQ(_none_)
|
|
#define T75 _EQ(_none_)
|
|
#define T76 _EQ(F24)
|
|
#define T77 _EQ(_none_)
|
|
#define T78 _EQ(_none_)
|
|
#define T79 _EQ(_none_)
|
|
#define T7A _EQ(_none_)
|
|
#define T7B _EQ(OEM_PA1)
|
|
#define T7C _EQ(TAB)
|
|
#define T7D _EQ(_none_)
|
|
#define T7E _EQ(ABNT_C2)
|
|
#define T7F _EQ(OEM_PA2)
|
|
#define X10 _EQ(MEDIA_PREV_TRACK)
|
|
#define X19 _EQ(MEDIA_NEXT_TRACK)
|
|
#define X1C _EQ(RETURN)
|
|
#define X1D _EQ(RCONTROL)
|
|
#define X20 _EQ(VOLUME_MUTE)
|
|
#define X21 _EQ(LAUNCH_APP2)
|
|
#define X22 _EQ(MEDIA_PLAY_PAUSE)
|
|
#define X24 _EQ(MEDIA_STOP)
|
|
#define X2E _EQ(VOLUME_DOWN)
|
|
#define X30 _EQ(VOLUME_UP)
|
|
#define X32 _EQ(BROWSER_HOME)
|
|
#define X35 _EQ(DIVIDE)
|
|
#define X37 _EQ(SNAPSHOT)
|
|
#define X38 _EQ(RMENU)
|
|
#define X46 _EQ(CANCEL)
|
|
#define X47 _EQ(HOME)
|
|
#define X48 _EQ(UP)
|
|
#define X49 _EQ(PRIOR)
|
|
#define X4B _EQ(LEFT)
|
|
#define X4D _EQ(RIGHT)
|
|
#define X4F _EQ(END)
|
|
#define X50 _EQ(DOWN)
|
|
#define X51 _NE(NEXT, F1, NEXT, NEXT, _none_, OEM_PA2)
|
|
#define X52 _EQ(INSERT)
|
|
#define X53 _EQ(DELETE)
|
|
#define X5B _EQ(LWIN)
|
|
#define X5C _EQ(RWIN)
|
|
#define X5D _EQ(APPS)
|
|
#define X5E _EQ(POWER)
|
|
#define X5F _EQ(SLEEP)
|
|
#define X65 _EQ(BROWSER_SEARCH)
|
|
#define X66 _EQ(BROWSER_FAVORITES)
|
|
#define X67 _EQ(BROWSER_REFRESH)
|
|
#define X68 _EQ(BROWSER_STOP)
|
|
#define X69 _EQ(BROWSER_FORWARD)
|
|
#define X6A _EQ(BROWSER_BACK)
|
|
#define X6B _EQ(LAUNCH_APP1)
|
|
#define X6C _EQ(LAUNCH_MAIL)
|
|
#define X6D _EQ(LAUNCH_MEDIA_SELECT)
|
|
#define Y1D _EQ(PAUSE)
|
|
#else
|
|
#error "Unsupported KBD_TYPE"
|
|
#endif
|
|
|
|
#endif /* __WINE_KBD_H */
|