20#ifndef FREERDP_LOCALE_KEYBOARD_H 
   21#define FREERDP_LOCALE_KEYBOARD_H 
   23#include <winpr/input.h> 
   25#include <freerdp/api.h> 
   26#include <freerdp/types.h> 
   27#include <freerdp/scancode.h> 
   34  typedef struct rdp_remap_table FREERDP_REMAP_TABLE;
 
   38    RDP_KEYBOARD_LAYOUT_TYPE_STANDARD = 1,
 
   39    RDP_KEYBOARD_LAYOUT_TYPE_VARIANT = 2,
 
   40    RDP_KEYBOARD_LAYOUT_TYPE_IME = 4
 
   41  } FREERDP_KEYBOARD_LAYOUT_TYPES;
 
   49    char primaryLanguage[512];
 
   50    char primaryLanguageSymbol[512];
 
   51    char subLanguage[512];
 
   52    char subLanguageSymbol[512];
 
 
   64  KBD_ARABIC_101 = 0x00000401,
 
   65  KBD_BULGARIAN = 0x00000402,
 
   66  KBD_CHINESE_TRADITIONAL_US = 0x00000404,
 
   67  KBD_CZECH = 0x00000405,
 
   68  KBD_DANISH = 0x00000406,
 
   69  KBD_GERMAN = 0x00000407,
 
   70  KBD_GREEK = 0x00000408,
 
   72  KBD_SPANISH = 0x0000040A,
 
   73  KBD_FINNISH = 0x0000040B,
 
   74  KBD_FRENCH = 0x0000040C,
 
   75  KBD_HEBREW = 0x0000040D,
 
   76  KBD_HUNGARIAN = 0x0000040E,
 
   77  KBD_ICELANDIC = 0x0000040F,
 
   78  KBD_ITALIAN = 0x00000410,
 
   79  KBD_JAPANESE = 0x00000411,
 
   80  KBD_KOREAN = 0x00000412,
 
   81  KBD_DUTCH = 0x00000413,
 
   82  KBD_NORWEGIAN = 0x00000414,
 
   83  KBD_POLISH_PROGRAMMERS = 0x00000415,
 
   84  KBD_PORTUGUESE_BRAZILIAN_ABNT = 0x00000416,
 
   85  KBD_ROMANIAN = 0x00000418,
 
   86  KBD_RUSSIAN = 0x00000419,
 
   87  KBD_CROATIAN = 0x0000041A,
 
   88  KBD_SLOVAK = 0x0000041B,
 
   89  KBD_ALBANIAN = 0x0000041C,
 
   90  KBD_SWEDISH = 0x0000041D,
 
   91  KBD_THAI_KEDMANEE = 0x0000041E,
 
   92  KBD_TURKISH_Q = 0x0000041F,
 
   93  KBD_URDU = 0x00000420,
 
   94  KBD_UKRAINIAN = 0x00000422,
 
   95  KBD_BELARUSIAN = 0x00000423,
 
   96  KBD_SLOVENIAN = 0x00000424,
 
   97  KBD_ESTONIAN = 0x00000425,
 
   98  KBD_LATVIAN = 0x00000426,
 
   99  KBD_LITHUANIAN_IBM = 0x00000427,
 
  100  KBD_FARSI = 0x00000429,
 
  101  KBD_VIETNAMESE = 0x0000042A,
 
  102  KBD_ARMENIAN_EASTERN = 0x0000042B,
 
  103  KBD_AZERI_LATIN = 0x0000042C,
 
  104  KBD_FYRO_MACEDONIAN = 0x0000042F,
 
  105  KBD_GEORGIAN = 0x00000437,
 
  106  KBD_FAEROESE = 0x00000438,
 
  107  KBD_DEVANAGARI_INSCRIPT = 0x00000439,
 
  108  KBD_MALTESE_47_KEY = 0x0000043A,
 
  109  KBD_NORWEGIAN_WITH_SAMI = 0x0000043B,
 
  110  KBD_KAZAKH = 0x0000043F,
 
  111  KBD_KYRGYZ_CYRILLIC = 0x00000440,
 
  112  KBD_TATAR = 0x00000444,
 
  113  KBD_BENGALI = 0x00000445,
 
  114  KBD_PUNJABI = 0x00000446,
 
  115  KBD_GUJARATI = 0x00000447,
 
  116  KBD_TAMIL = 0x00000449,
 
  117  KBD_TELUGU = 0x0000044A,
 
  118  KBD_KANNADA = 0x0000044B,
 
  119  KBD_MALAYALAM = 0x0000044C,
 
  120  KBD_MARATHI = 0x0000044E,
 
  121  KBD_MONGOLIAN_CYRILLIC = 0x00000450,
 
  122  KBD_UNITED_KINGDOM_EXTENDED = 0x00000452,
 
  123  KBD_SYRIAC = 0x0000045A,
 
  124  KBD_NEPALI = 0x00000461,
 
  125  KBD_PASHTO = 0x00000463,
 
  126  KBD_DIVEHI_PHONETIC = 0x00000465,
 
  127  KBD_LUXEMBOURGISH = 0x0000046E,
 
  128  KBD_MAORI = 0x00000481,
 
  129  KBD_CHINESE_SIMPLIFIED_US = 0x00000804,
 
  130  KBD_SWISS_GERMAN = 0x00000807,
 
  131  KBD_UNITED_KINGDOM = 0x00000809,
 
  132  KBD_LATIN_AMERICAN = 0x0000080A,
 
  133  KBD_BELGIAN_FRENCH = 0x0000080C,
 
  134  KBD_BELGIAN_PERIOD = 0x00000813,
 
  135  KBD_PORTUGUESE = 0x00000816,
 
  136  KBD_SERBIAN_LATIN = 0x0000081A,
 
  137  KBD_AZERI_CYRILLIC = 0x0000082C,
 
  138  KBD_SWEDISH_WITH_SAMI = 0x0000083B,
 
  139  KBD_UZBEK_CYRILLIC = 0x00000843,
 
  140  KBD_INUKTITUT_LATIN = 0x0000085D,
 
  141  KBD_CANADIAN_FRENCH_LEGACY = 0x00000C0C,
 
  142  KBD_SERBIAN_CYRILLIC = 0x00000C1A,
 
  143  KBD_CANADIAN_FRENCH = 0x00001009,
 
  144  KBD_SWISS_FRENCH = 0x0000100C,
 
  145  KBD_BOSNIAN = 0x0000141A,
 
  146  KBD_IRISH = 0x00001809,
 
  147  KBD_BOSNIAN_CYRILLIC = 0x0000201A
 
  148} FREERDP_KBD_LAYOUT_ID;
 
  153  KBD_ARABIC_102 = 0x00010401,
 
  154  KBD_BULGARIAN_LATIN = 0x00010402,
 
  155  KBD_CZECH_QWERTY = 0x00010405,
 
  156  KBD_GERMAN_IBM = 0x00010407,
 
  157  KBD_GREEK_220 = 0x00010408,
 
  158  KBD_UNITED_STATES_DVORAK = 0x00010409,
 
  159  KBD_SPANISH_VARIATION = 0x0001040A,
 
  160  KBD_HUNGARIAN_101_KEY = 0x0001040E,
 
  161  KBD_ITALIAN_142 = 0x00010410,
 
  162  KBD_POLISH_214 = 0x00010415,
 
  163  KBD_PORTUGUESE_BRAZILIAN_ABNT2 = 0x00010416,
 
  164  KBD_ROMANIAN_STANDARD = 0x00010418,
 
  165  KBD_RUSSIAN_TYPEWRITER = 0x00010419,
 
  166  KBD_SLOVAK_QWERTY = 0x0001041B,
 
  167  KBD_THAI_PATTACHOTE = 0x0001041E,
 
  168  KBD_TURKISH_F = 0x0001041F,
 
  169  KBD_LATVIAN_QWERTY = 0x00010426,
 
  170  KBD_LITHUANIAN = 0x00010427,
 
  171  KBD_ARMENIAN_WESTERN = 0x0001042B,
 
  172  KBD_GEORGIAN_QUERTY = 0x00010437,
 
  173  KBD_HINDI_TRADITIONAL = 0x00010439,
 
  174  KBD_MALTESE_48_KEY = 0x0001043A,
 
  175  KBD_SAMI_EXTENDED_NORWAY = 0x0001043B,
 
  176  KBD_BENGALI_INSCRIPT = 0x00010445,
 
  177  KBD_KHMER = 0x00010453,
 
  178  KBD_SYRIAC_PHONETIC = 0x0001045A,
 
  179  KBD_DIVEHI_TYPEWRITER = 0x00010465,
 
  180  KBD_BELGIAN_COMMA = 0x0001080C,
 
  181  KBD_FINNISH_WITH_SAMI = 0x0001083B,
 
  182  KBD_CANADIAN_MULTILINGUAL_STANDARD = 0x00011009,
 
  183  KBD_GAELIC = 0x00011809,
 
  184  KBD_ARABIC_102_AZERTY = 0x00020401,
 
  185  KBD_CZECH_PROGRAMMERS = 0x00020405,
 
  186  KBD_GREEK_319 = 0x00020408,
 
  187  KBD_UNITED_STATES_INTERNATIONAL = 0x00020409,
 
  188  KBD_HEBREW_STANDARD = 0x0002040D, 
 
  189  KBD_RUSSIAN_PHONETIC = 0x00020419,
 
  190  KBD_THAI_KEDMANEE_NON_SHIFTLOCK = 0x0002041E,
 
  191  KBD_BANGLA = 0x00020445,
 
  192  KBD_SAMI_EXTENDED_FINLAND_SWEDEN = 0x0002083B,
 
  193  KBD_GREEK_220_LATIN = 0x00030408,
 
  194  KBD_UNITED_STATES_DVORAK_FOR_LEFT_HAND = 0x00030409,
 
  195  KBD_THAI_PATTACHOTE_NON_SHIFTLOCK = 0x0003041E,
 
  196  KBD_BULGARIAN_PHONETIC = 0x00040402,
 
  197  KBD_GREEK_319_LATIN = 0x00040408,
 
  198  KBD_UNITED_STATES_DVORAK_FOR_RIGHT_HAND = 0x00040409,
 
  199  KBD_UNITED_STATES_DVORAK_PROGRAMMER = 0x19360409,
 
  200  KBD_GREEK_LATIN = 0x00050408,
 
  201  KBD_PERSIAN = 0x00050429,
 
  202  KBD_US_ENGLISH_TABLE_FOR_IBM_ARABIC_238_L = 0x00050409,
 
  203  KBD_GREEK_POLYTONIC = 0x00060408,
 
  204  KBD_FRENCH_BEPO = WINPR_CXX_COMPAT_CAST(
int, 0xa000040c),
 
  205  KBD_GERMAN_NEO = WINPR_CXX_COMPAT_CAST(
int, 0xB0000407)
 
  206} FREERDP_KBD_LAYPUT_VARIANT_ID;
 
  211  KBD_CHINESE_TRADITIONAL_PHONETIC = WINPR_CXX_COMPAT_CAST(
int, 0xE0010404),
 
  212  KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002 = WINPR_CXX_COMPAT_CAST(
int, 0xE0010411),
 
  213  KBD_KOREAN_INPUT_SYSTEM_IME_2000 = WINPR_CXX_COMPAT_CAST(
int, 0xE0010412),
 
  214  KBD_CHINESE_SIMPLIFIED_QUANPIN = WINPR_CXX_COMPAT_CAST(
int, 0xE0010804),
 
  215  KBD_CHINESE_TRADITIONAL_CHANGJIE = WINPR_CXX_COMPAT_CAST(
int, 0xE0020404),
 
  216  KBD_CHINESE_SIMPLIFIED_SHUANGPIN = WINPR_CXX_COMPAT_CAST(
int, 0xE0020804),
 
  217  KBD_CHINESE_TRADITIONAL_QUICK = WINPR_CXX_COMPAT_CAST(
int, 0xE0030404),
 
  218  KBD_CHINESE_SIMPLIFIED_ZHENGMA = WINPR_CXX_COMPAT_CAST(
int, 0xE0030804),
 
  219  KBD_CHINESE_TRADITIONAL_BIG5_CODE = WINPR_CXX_COMPAT_CAST(
int, 0xE0040404),
 
  220  KBD_CHINESE_TRADITIONAL_ARRAY = WINPR_CXX_COMPAT_CAST(
int, 0xE0050404),
 
  221  KBD_CHINESE_SIMPLIFIED_NEIMA = WINPR_CXX_COMPAT_CAST(
int, 0xE0050804),
 
  222  KBD_CHINESE_TRADITIONAL_DAYI = WINPR_CXX_COMPAT_CAST(
int, 0xE0060404),
 
  223  KBD_CHINESE_TRADITIONAL_UNICODE = WINPR_CXX_COMPAT_CAST(
int, 0xE0070404),
 
  224  KBD_CHINESE_TRADITIONAL_NEW_PHONETIC = WINPR_CXX_COMPAT_CAST(
int, 0xE0080404),
 
  225  KBD_CHINESE_TRADITIONAL_NEW_CHANGJIE = WINPR_CXX_COMPAT_CAST(
int, 0xE0090404),
 
  226  KBD_CHINESE_TRADITIONAL_MICROSOFT_PINYIN_IME_3 = WINPR_CXX_COMPAT_CAST(
int, 0xE00E0804),
 
  227  KBD_CHINESE_TRADITIONAL_ALPHANUMERIC = WINPR_CXX_COMPAT_CAST(
int, 0xE00F0404)
 
  245WINPR_ATTR_MALLOC(freerdp_keyboard_layouts_free, 1)
 
  255FREERDP_API const 
char* freerdp_keyboard_get_layout_name_from_id(DWORD keyboardLayoutId);
 
  263FREERDP_API DWORD freerdp_keyboard_get_layout_id_from_name(const 
char* name);
 
  265#if !defined(WITHOUT_FREERDP_3x_DEPRECATED) 
  266WINPR_DEPRECATED_VAR(
"since 3.11.0, implement yourself in client",
 
  267                   FREERDP_API DWORD freerdp_keyboard_init(DWORD keyboardLayoutId));
 
  269WINPR_DEPRECATED_VAR(
"since 3.11.0, implement yourself in client",
 
  270                   FREERDP_API DWORD freerdp_keyboard_init_ex(DWORD keyboardLayoutId,
 
  271                                                              const char* keyboardRemappingList));
 
  273WINPR_DEPRECATED_VAR(
"since 3.11.0, implement yourself in client",
 
  275                       freerdp_keyboard_get_rdp_scancode_from_x11_keycode(DWORD keycode));
 
  277WINPR_DEPRECATED_VAR(
"since 3.11.0, implement yourself in client",
 
  278                   FREERDP_API DWORD freerdp_keyboard_get_x11_keycode_from_rdp_scancode(
 
  279                       DWORD scancode, BOOL extended));
 
  288FREERDP_API 
void freerdp_keyboard_remap_free(FREERDP_REMAP_TABLE* table);
 
  300WINPR_ATTR_MALLOC(freerdp_keyboard_remap_free, 1)
 
  301FREERDP_API FREERDP_REMAP_TABLE* freerdp_keyboard_remap_string_to_list(const 
char* list);
 
  313FREERDP_API DWORD freerdp_keyboard_remap_key(const FREERDP_REMAP_TABLE* remap_table,
 
  321FREERDP_API 
void freerdp_codepages_free(
RDP_CODEPAGE* codepages);
 
  338WINPR_ATTR_MALLOC(freerdp_codepages_free, 1)
 
  339FREERDP_API 
RDP_CODEPAGE* freerdp_keyboard_get_matching_codepages(DWORD column, const 
char* filter,
 
  348FREERDP_API const 
char* freerdp_keyboard_scancode_name(DWORD scancode);