spiegel-keyman/common/windows/cpp/src/vkeys.cpp
SabineSIL 048448a2a4
feat(developer): cross-platform kmx compiler 🚑 (#6980)
* get keymans version



Merge branch 'master' of https://github.com/keymanapp/keyman into refactor/developer/6026-kmcompx-compiler-cross-platform-part-2-NEW_VERSION

# Conflicts:
#	common/core/desktop/src/kmx/kmx_context.h
#	common/core/desktop/src/kmx/kmx_processor.cpp
#	common/windows/cpp/include/keymanversion.h
#	common/windows/cpp/include/kkmnkbd/Compfile.h
#	common/windows/cpp/include/kmtip_guids.h
#	common/windows/cpp/src/kmtip_guids.cpp
#	core/src/kmx/kmx_conversion.cpp
#	core/src/kmx/kmx_conversion.h
#	core/src/kmx/kmx_file.cpp
#	core/src/kmx/kmx_processevent.cpp
#	core/src/kmx/kmx_processor.hpp
#	core/src/kmx/kmx_xstring.cpp
#	developer/js/.gitignore
#	developer/js/package-lock.json
#	developer/js/tests/tsconfig.json
#	developer/src/kmcmpdll/CasedKeys.cpp
#	developer/src/kmcmpdll/CheckFilenameConsistency.cpp
#	developer/src/kmcmpdll/CheckFilenameConsistency.h
#	developer/src/kmcmpdll/CheckForDuplicates.cpp
#	developer/src/kmcmpdll/CheckForDuplicates.h
#	developer/src/kmcmpdll/CheckNCapsConsistency.cpp
#	developer/src/kmcmpdll/CheckNCapsConsistency.h
#	developer/src/kmcmpdll/Compiler.cpp
#	developer/src/kmcmpdll/DeprecationChecks.cpp
#	developer/src/kmcmpdll/NamedCodeConstants.cpp
#	developer/src/kmcmpdll/UnreachableRules.cpp
#	developer/src/kmcmpdll/UnreachableRules.h
#	developer/src/kmcmpdll/compfile.h
#	developer/src/kmcmpdll/kcframe/kcframe.cpp
#	developer/src/kmcmpdll/kcframe/kcframe.vcxproj
#	developer/src/kmcmpdll/kcframe/kcframe.vcxproj.filters
#	developer/src/kmcmpdll/kmcmpdll.vcxproj
#	developer/src/kmcmpdll/kmcmpdll.vcxproj.filters
#	developer/src/kmcmpdll/version.rc
#	developer/src/kmcmpdll/versioning.cpp
#	developer/src/kmlmc/bundle.sh
#	developer/src/kmlmc/tests/test-join-word-breaker.ts
#	developer/src/kmlmc/tests/test-override-script-defaults.ts
#	developer/src/server/tsconfig.json
#	windows/src/developer/kmcmpdll/Makefile
#	windows/src/developer/kmcmpdll/vkeys.h
#	windows/src/engine/keyman32/keymanengine.h
#	windows/src/global/inc/Vkeys.h
#	windows/src/global/inc/rc4.h
#	windows/src/global/vc/rc4.cpp

* changes in meson + include-paths of several files

* chore: remove common/core

* chore: remove unnecessary files

* chore: move headers and refs

* refactor(developer): fixup path to tests

* refactor(developer): fixup path to tests
tidied up +removed unnecessary files
checked contents of files+included a few new functions needed for myVersion
changed datatypes in CheckForDuplicates
tidy up more paths
CheckFileConsistency: not able to fully adapt for use of char16_t on non windows p.
	-> used char16_t + commented out some AddWarning().

* sorted out some #includes
renamed some functions to reduce ambiguity

* fix(developer): solved linker errors

* chore(developer): remove some comments

* chore(developer): introduced KMX_UCHAR

* chore(developer): restored whitespace, comments

* chore(developer): tidied up vkeys.H / .cpp

* chore(developer): remove keyboardprocessor...

* chore(common): refactor shared types into km_types.h

* chore(core): remove duplicate types

* chore(core): move kmx_file.h to common

* chore(developper): removed typedefs of kmcompcx.h

* chore(developer): removed kmcompx/include/kmx_file.h

* chore(developer): chanched include of pch.h

* chore(developer): removed files from kmcompx/include/

* chore(developer): removed commented sections ( ** old **) if files

* chore(developer): removed doubled/overwritten functions

* chore(developer): removed doubled/overwritten functions

* chore(developer): changed #includes ".." -> <..>

* chore(developer): changed #includes ".." -> <..>

* chore(developer): enable tests for keyboards repo for kmcompx

* chore(developer): new functions e.g. string_from_wstring...

* chore(developer): changed printf->u16sprintf

* chore(developer): fopen

* chore(developer): fixed errors on running kmcompxtest

* chore(developer): changef u16fmt

* chore(developer): fixup u16ncat

* chore(developer): added return Msgs for different types of errors while compiling

* chore(developer): tests using RTL run Ok ( changed RTu->RTL)

* chore(developer): replaced u16ncmp with u16nicmp at most places

* chore(developer): changed Version number for tests 16.046 to 15.0265

* chore(developer): mostly whitespace changes

* chore(developer): tidied up code (not finished yet)

* chore(developer): removed #pragma once from wrong places, edited #includes

* chore(developer): removed #pragma once from wrong places, edited #includes

* chore(developer): CheckFileNameConsistency changed to take KMX_WCHART const* (= wchar_t* const); used in compiler.cpp now

* chore(developer): excluded some tests from kmcompxtest (use get_test_source_exclude_some_kmn.bat now)

* chore(developer): Win-functions in FileNameConsistency

* chore(developer): Win-functions in FileNameConsistency

* chore(developer): CheckFNConsuistency: called u16printf with f´different par.

* chore(developer): tidied up code

* chore(developer): tidied up code

* chore(developer): tiedied up code (compiler.cpp)

* chore(developer): tiedied up code

* chore(developer): tidied up code

* chore(developer): removed all commentaries _S2

* chore(developer): tidied up code

* chore(developer): tidied up code

* chore(developer): tidied up code

* chore(developer): removed several Windows-specific functions

* chore(developer): removed unused datatype typedefs

* chore(developer): new GetCompilerErrorString() used in AddCompileMessage()

* chore(developer): new GetCompilerErrorString() used in AddCompileMessage()

* chore(developer): removed CWARN/CHINT out of CompMsg

* chore(developer): adapted kmcompxtest to test kmn-files that have errors included

* chore(developer): changed gitignore

* chore(developer): changed gitignore

* chore(developer): changed Version Number fot Tests 15.0.265.0 -> 15.0.270.0

* chore(developer): added tests for kmcompx

* chore(developer): move tests (for ErrorMessages) to common/test/keyboards

* chore(developer): move CERR-tests into test/keyboards/invalid

* chore(developer): change mostly whitespace changes

* chore(developer): change mostly whitespace changes

* chore(developer): delete files of keyboards/kmcompx_tests

* chore(developer): include check for correct Filename + rename var + change whitespace changes

* chore(developer): revert changes in AddCompileMessage, tidy up CreateTempFile

* chore(developer): remove python from meson.build

* chore(developer): change ErrExtra, change CompileMsg, change _finddata in FileExists

* chore(developer): check for '_' after Errornumber in Filename

* chore(developer): re-include AddCompilerVersionStore in Compiler.cpp

* chore(developer): add Message CERR_InvalidCharacter to UTF16TempFromUTF8() ; change #include <> -> ""

* chore(developer): add some more keyboardtests

* chore(developer): add some more keyboardtests

* chore(developer): change remaining old datatype-names to new names ( e.g. char -> KMX_CHAR )

* chore(developer): edit + add CERR_tests

* chore(developer): edit + add CERR_tests

* chore(developer): use char16_t in CheckFileNameConsistency

* chore(developer): comments: converting functions in kmx_u16

* chore: reorganize

* chore: commit kmcompx-files

* chore: use ifdef for vkeys

* chore: copy files back

* chore: more cleanup

* chore: meson build for kmcmplib

* chore: tweak unit test, error messages, and paths

* chore(developer): make kmcmplib a static library

* chore(developer): start kmcmpdll link to kmcmplib

* chore(developer): add build.sh for kmcmplib

* chore(developer): link kmcmpdll to kmcmplib

* chore(common): avoid building 'invalid' shared keyboards

* chore(developer): include BEGIN_LINE (repeated Begin)

* chore(developer): add more CERR_tests and move some to other folder, edit readme

* chore(developer): addCompilerMsg for RepeatedBegin

* chore(developer):repeatedBEgin plus rename functions to prevent same names in kmcmpdll and kmcmplib

* chore(developer): add flag flag_use_kmcompx as switch to use old code (kmcmpdll) or new code kmcmplib

* chore(developer): introduce namespace kmcmp instead of different filenames

* chore(developer): more changes for using namespaces

* chore(developer): solve merge conflicts in namespaces

* chore(developer): use namespaces in kmcmplib (except for in dllexport-functions)

* chore(developer): remove some unnecessary CERR_ tests

* chore(developer): remove CERR_CallIsProfessionalFeature, CERR_IncludeCodesIsProfessionalFeature, CERR_MnemonicLayoutIsProfessionalFeature

* chore(developer): note about func.call_js; change all "VESION x.y " to "VESION x.y or higher" ; rename flag for kmcompx to flag_use_new_kmcomp

* chore(developer): use PKMX_DWORD/PKMX_WCHAR   instead of LPKMX_DWORD/LPKMX_WCHAR; use PKMX_STR instead of char* in CompilerMessageProc

* chore(developer): remove kmx-file; NamedCodeConstants: rename variables, set const variables for buf sizes, brackets in for-loops

* chore(developer): change include paths ../

* chore(developer): get rid of reopened namespaces of kmcmp

* chore(developer): restored kmcompxtest

* chore(developer): change #include paths ../ ; excange km_kbp_cp with KMX_WCHAR; change some variable names

* chore(developer): use environment var KEYMAN_ROOT in path for tests; remove try-catch from json-validation.cpp

* chore(developer): use environment var KEYMAN_ROOT in path for tests; remove try-catch from json-validation.cpp

* chore(developer): revert change in NamedCodeConstants

* chore(developer): restored kmcompxtest, adapted readme

* chore(developer): use res-fils/version.rc for kmcmplib

* chore(developer): rename some functions/variables

* chore(developer): typos, comments, add function u16rchr()

* chore(developer): typos, comments, add function u16rchr()

* chore(developer): rename Functions, version rc-files

* chore(developer): rename Functions, version rc-files, set flag_use_new_kmcomp to use (old) kmcmpdll

* chore(developer): add BeginLine in kmcmpdll/Compiler.cpp; fread() in kmcmp_CompileKeyboardFileToBuffer

* chore(developer): set flag_use_new_kmcomp to only use kmcmpdll

* chore(developer): set flag_use_new_kmcomp to only use kmcmpdll...and back to kmcmplib

* (chore(developer): set flag_use_new_kmcomp to only use kmcmpdll...and back

* (chore(developer): changes in NamedCodeConstants::reindex() to run hieroglyphic.kmn properly

* chore(developer): changes in UnrechableRules::VerifyUnreachableRules() to run test_6440_unreachable_code..kmn

* chore(developer): remove unneccessary files, get ErrorMsg for INCLUDECODES, VISUALKEYBOARD, UnreachableRules, ErrExrta

* chore(developer): remove unneccessary files, get ErrorMsg for INCLUDECODES, VISUALKEYBOARD, UnreachableRules, ErrExrta, CWARN_ OK

* chore(developer): after stash:remove unneccessary files, get ErrorMsg for INCLUDECODES, VISUALKEYBOARD, UnreachableRules, ErrExrta, CWARN_ OK

* chore(developer): replace some #include <> with "" ; rename ErrExtra -> ErrExtraW

* chore(developer): replace some #include <> with "" ; rename ErrExtra -> ErrExtraW

* chore(developer): new converting function convert_pchar16T_To_pwcharT in kmx_u16

* chore(developer): CheckFilenameConsistency added fclose()

* chore(developer): --

* chore(developer): removed printf (---> started in... / °°-> changed to...)

* chore(developer): AddDeprecatedCode to get CWARN when in kmcomp.exe -s-w is set

* chore(developer): change MakeHashKeyFromFileKey16() to get correct behaviour of CHINT

* chore(developer): change MakeHashKeyFromFileKey16() to get correct behaviour of CHINT

* chore(developer): move converting function to kmx_u16

* chore(developer): add more CERR_ tests

* chore(developer): Not ready yet: changes in CheckFilenameConsistency to use on non-windows

* chore(developer): Not ready yet: changes in CheckFilenameConsistency to use on non-windows

* chore(developer): copied contents of 3 files of commit fcfc6c698a to here to achieve state of fcfc6c698a

* chore(developer): copied contents of 3 files of commit fcfc6c698a to here to achieve state of fcfc6c698a

* chore(developer): move/rename converting functions

* chore(developer) : update .gitignore, remove converting function

* chore(developer) : update gitignore; sort code in CheckFilenameConsistency::CheckFilenameConsistency()

* chore(developer) : change Version number 15.0.270 -> 17.0.51

* chore(developer): change #includes, path in meson.build

* chore(developer): new function Open_File() to open files on windows and non-windows platforms

* chore(developer): create Function to replace fopen/_wfsopen

* chore(developer): exclude kmx, kvk from git

* chore(developer): exclude kmx, kvk from git

* chore(developer): change #includes to include from kmcmplib

* chore(developer): remove stray fopen

* chore(developer): include Open_File() (as comment for now)

* chore(developer): include Open_File() (as comment for now)

* chore(developer): remove path to kmcmpdll in include_directories

* chore(developer): use functin Open_File()

* chore(developer): remove #ifdef for '\\' and '/' in both IsRelativePath; remove Function Open_File again

* chore(developer): new fun  u16rchr_LinWin, strrchr_LinWin to exchange #ifndef for '\\' and '/'

* chore(developer): implement u16rchr_LinWin and strrchr_LinWin

* chore(developer): implement Open_File()

* chore(developer): new MakeHashKeyFromFileKey, remove comments for Open_File, & *LinWin-functions, delete 1 converting function

* chore(developer): tidy up comments

---------

Co-authored-by: Marc Durdin <marc@durdin.net>
2023-03-01 20:00:04 +11:00

565 lines
19 KiB
C++

/*
Name: vkeys
Copyright: Copyright (C) SIL International.
Documentation:
Description:
Create Date: 22 Mar 2010
Modified Date: 22 Mar 2010
Authors: mcdurdin
Related Files:
Dependencies:
Bugs:
Todo:
Notes:
History: 22 Mar 2010 - mcdurdin - Compiler fixup - tidy up
*/
#include "pch.h"
#include "../include/vkeys.h"
const VKEY_CHAR* VKeyNames[256] = {
// Key Codes
lpuch("K_?00"), // &H0
lpuch("K_LBUTTON"), // &H1
lpuch("K_RBUTTON"), // &H2
lpuch("K_CANCEL"), // &H3
lpuch("K_MBUTTON"), // &H4
lpuch("K_?05"), // &H5
lpuch("K_?06"), // &H6
lpuch("K_?07"), // &H7
lpuch("K_BKSP"), // &H8
lpuch("K_TAB"), // &H9
lpuch("K_?0A"), // &HA
lpuch("K_?0B"), // &HB
lpuch("K_KP5"), // &HC
lpuch("K_ENTER"), // &HD
lpuch("K_?0E"), // &HE
lpuch("K_?0F"), // &HF
lpuch("K_SHIFT"), // &H10
lpuch("K_CONTROL"), // &H11
lpuch("K_ALT"), // &H12
lpuch("K_PAUSE"), // &H13
lpuch("K_CAPS"), // &H14
lpuch("K_KANJI?15"), // &H15
lpuch("K_KANJI?16"), // &H16
lpuch("K_KANJI?17"), // &H17
lpuch("K_KANJI?18"), // &H18
lpuch("K_KANJI?19"), // &H19
lpuch("K_?1A"), // &H1A
lpuch("K_ESC"), // &H1B
lpuch("K_KANJI?1C"), // &H1C
lpuch("K_KANJI?1D"), // &H1D
lpuch("K_KANJI?1E"), // &H1E
lpuch("K_KANJI?1F"), // &H1F
lpuch("K_SPACE"), // &H20
lpuch("K_PGUP"), // &H21
lpuch("K_PGDN"), // &H22
lpuch("K_END"), // &H23
lpuch("K_HOME"), // &H24
lpuch("K_LEFT"), // &H25
lpuch("K_UP"), // &H26
lpuch("K_RIGHT"), // &H27
lpuch("K_DOWN"), // &H28
lpuch("K_SEL"), // &H29
lpuch("K_PRINT"), // &H2A
lpuch("K_EXEC"), // &H2B
lpuch("K_PRTSCN"), // &H2C
lpuch("K_INS"), // &H2D
lpuch("K_DEL"), // &H2E
lpuch("K_HELP"), // &H2F
lpuch("K_0"), // &H30
lpuch("K_1"), // &H31
lpuch("K_2"), // &H32
lpuch("K_3"), // &H33
lpuch("K_4"), // &H34
lpuch("K_5"), // &H35
lpuch("K_6"), // &H36
lpuch("K_7"), // &H37
lpuch("K_8"), // &H38
lpuch("K_9"), // &H39
lpuch("K_?3A"), // &H3A
lpuch("K_?3B"), // &H3B
lpuch("K_?3C"), // &H3C
lpuch("K_?3D"), // &H3D
lpuch("K_?3E"), // &H3E
lpuch("K_?3F"), // &H3F
lpuch("K_?40"), // &H40
lpuch("K_A"), // &H41
lpuch("K_B"), // &H42
lpuch("K_C"), // &H43
lpuch("K_D"), // &H44
lpuch("K_E"), // &H45
lpuch("K_F"), // &H46
lpuch("K_G"), // &H47
lpuch("K_H"), // &H48
lpuch("K_I"), // &H49
lpuch("K_J"), // &H4A
lpuch("K_K"), // &H4B
lpuch("K_L"), // &H4C
lpuch("K_M"), // &H4D
lpuch("K_N"), // &H4E
lpuch("K_O"), // &H4F
lpuch("K_P"), // &H50
lpuch("K_Q"), // &H51
lpuch("K_R"), // &H52
lpuch("K_S"), // &H53
lpuch("K_T"), // &H54
lpuch("K_U"), // &H55
lpuch("K_V"), // &H56
lpuch("K_W"), // &H57
lpuch("K_X"), // &H58
lpuch("K_Y"), // &H59
lpuch("K_Z"), // &H5A
lpuch("K_?5B"), // &H5B
lpuch("K_?5C"), // &H5C
lpuch("K_?5D"), // &H5D
lpuch("K_?5E"), // &H5E
lpuch("K_?5F"), // &H5F
lpuch("K_NP0"), // &H60
lpuch("K_NP1"), // &H61
lpuch("K_NP2"), // &H62
lpuch("K_NP3"), // &H63
lpuch("K_NP4"), // &H64
lpuch("K_NP5"), // &H65
lpuch("K_NP6"), // &H66
lpuch("K_NP7"), // &H67
lpuch("K_NP8"), // &H68
lpuch("K_NP9"), // &H69
lpuch("K_NPSTAR"), // &H6A
lpuch("K_NPPLUS"), // &H6B
lpuch("K_SEPARATOR"), // &H6C
lpuch("K_NPMINUS"), // &H6D
lpuch("K_NPDOT"), // &H6E
lpuch("K_NPSLASH"), // &H6F
lpuch("K_F1"), // &H70
lpuch("K_F2"), // &H71
lpuch("K_F3"), // &H72
lpuch("K_F4"), // &H73
lpuch("K_F5"), // &H74
lpuch("K_F6"), // &H75
lpuch("K_F7"), // &H76
lpuch("K_F8"), // &H77
lpuch("K_F9"), // &H78
lpuch("K_F10"), // &H79
lpuch("K_F11"), // &H7A
lpuch("K_F12"), // &H7B
lpuch("K_F13"), // &H7C
lpuch("K_F14"), // &H7D
lpuch("K_F15"), // &H7E
lpuch("K_F16"), // &H7F
lpuch("K_F17"), // &H80
lpuch("K_F18"), // &H81
lpuch("K_F19"), // &H82
lpuch("K_F20"), // &H83
lpuch("K_F21"), // &H84
lpuch("K_F22"), // &H85
lpuch("K_F23"), // &H86
lpuch("K_F24"), // &H87
lpuch("K_?88"), // &H88
lpuch("K_?89"), // &H89
lpuch("K_?8A"), // &H8A
lpuch("K_?8B"), // &H8B
lpuch("K_?8C"), // &H8C
lpuch("K_?8D"), // &H8D
lpuch("K_?8E"), // &H8E
lpuch("K_?8F"), // &H8F
lpuch("K_NUMLOCK"), // &H90
lpuch("K_SCROLL"), // &H91
lpuch("K_?92"), // &H92
lpuch("K_?93"), // &H93
lpuch("K_?94"), // &H94
lpuch("K_?95"), // &H95
lpuch("K_?96"), // &H96
lpuch("K_?97"), // &H97
lpuch("K_?98"), // &H98
lpuch("K_?99"), // &H99
lpuch("K_?9A"), // &H9A
lpuch("K_?9B"), // &H9B
lpuch("K_?9C"), // &H9C
lpuch("K_?9D"), // &H9D
lpuch("K_?9E"), // &H9E
lpuch("K_?9F"), // &H9F
lpuch("K_?A0"), // &HA0
lpuch("K_?A1"), // &HA1
lpuch("K_?A2"), // &HA2
lpuch("K_?A3"), // &HA3
lpuch("K_?A4"), // &HA4
lpuch("K_?A5"), // &HA5
lpuch("K_?A6"), // &HA6
lpuch("K_?A7"), // &HA7
lpuch("K_?A8"), // &HA8
lpuch("K_?A9"), // &HA9
lpuch("K_?AA"), // &HAA
lpuch("K_?AB"), // &HAB
lpuch("K_?AC"), // &HAC
lpuch("K_?AD"), // &HAD
lpuch("K_?AE"), // &HAE
lpuch("K_?AF"), // &HAF
lpuch("K_?B0"), // &HB0
lpuch("K_?B1"), // &HB1
lpuch("K_?B2"), // &HB2
lpuch("K_?B3"), // &HB3
lpuch("K_?B4"), // &HB4
lpuch("K_?B5"), // &HB5
lpuch("K_?B6"), // &HB6
lpuch("K_?B7"), // &HB7
lpuch("K_?B8"), // &HB8
lpuch("K_?B9"), // &HB9
lpuch("K_COLON"), // &HBA
lpuch("K_EQUAL"), // &HBB
lpuch("K_COMMA"), // &HBC
lpuch("K_HYPHEN"), // &HBD
lpuch("K_PERIOD"), // &HBE
lpuch("K_SLASH"), // &HBF
lpuch("K_BKQUOTE"), // &HC0
lpuch("K_?C1"), // &HC1
lpuch("K_?C2"), // &HC2
lpuch("K_?C3"), // &HC3
lpuch("K_?C4"), // &HC4
lpuch("K_?C5"), // &HC5
lpuch("K_?C6"), // &HC6
lpuch("K_?C7"), // &HC7
lpuch("K_?C8"), // &HC8
lpuch("K_?C9"), // &HC9
lpuch("K_?CA"), // &HCA
lpuch("K_?CB"), // &HCB
lpuch("K_?CC"), // &HCC
lpuch("K_?CD"), // &HCD
lpuch("K_?CE"), // &HCE
lpuch("K_?CF"), // &HCF
lpuch("K_?D0"), // &HD0
lpuch("K_?D1"), // &HD1
lpuch("K_?D2"), // &HD2
lpuch("K_?D3"), // &HD3
lpuch("K_?D4"), // &HD4
lpuch("K_?D5"), // &HD5
lpuch("K_?D6"), // &HD6
lpuch("K_?D7"), // &HD7
lpuch("K_?D8"), // &HD8
lpuch("K_?D9"), // &HD9
lpuch("K_?DA"), // &HDA
lpuch("K_LBRKT"), // &HDB
lpuch("K_BKSLASH"), // &HDC
lpuch("K_RBRKT"), // &HDD
lpuch("K_QUOTE"), // &HDE
lpuch("K_oDF"), // &HDF
lpuch("K_oE0"), // &HE0
lpuch("K_oE1"), // &HE1
lpuch("K_oE2"), // &HE2
lpuch("K_oE3"), // &HE3
lpuch("K_oE4"), // &HE4
lpuch("K_?E5"), // &HE5
lpuch("K_oE6"), // &HE6
lpuch("K_?E7"), // &HE7
lpuch("K_?E8"), // &HE8
lpuch("K_oE9"), // &HE9
lpuch("K_oEA"), // &HEA
lpuch("K_oEB"), // &HEB
lpuch("K_oEC"), // &HEC
lpuch("K_oED"), // &HED
lpuch("K_oEE"), // &HEE
lpuch("K_oEF"), // &HEF
lpuch("K_oF0"), // &HF0
lpuch("K_oF1"), // &HF1
lpuch("K_oF2"), // &HF2
lpuch("K_oF3"), // &HF3
lpuch("K_oF4"), // &HF4
lpuch("K_oF5"), // &HF5
lpuch("K_?F6"), // &HF6
lpuch("K_?F7"), // &HF7
lpuch("K_?F8"), // &HF8
lpuch("K_?F9"), // &HF9
lpuch("K_?FA"), // &HFA
lpuch("K_?FB"), // &HFB
lpuch("K_?FC"), // &HFC
lpuch("K_?FD"), // &HFD
lpuch("K_?FE"), // &HFE
lpuch("K_?FF") // &HFF
};
const VKEY_CHAR* VKeyISO9995Names[256] = {
// Key Codes
lpuch(""), // lpuch("K_?00"), // &H0
lpuch(""), // lpuch("K_LBUTTON"), // &H1
lpuch(""), // lpuch("K_RBUTTON"), // &H2
lpuch(""), // lpuch("K_CANCEL"), // &H3
lpuch(""), // lpuch("K_MBUTTON"), // &H4
lpuch(""), // lpuch("K_?05"), // &H5
lpuch(""), // lpuch("K_?06"), // &H6
lpuch(""), // lpuch("K_?07"), // &H7
lpuch("E14"), // lpuch("K_BKSP"), // &H8
lpuch("D00"), // lpuch("K_TAB"), // &H9
lpuch(""), // lpuch("K_?0A"), // &HA
lpuch(""), // lpuch("K_?0B"), // &HB
lpuch(""), // lpuch("K_KP5"), // &HC
lpuch("C13"), // lpuch("K_ENTER"), // &HD
lpuch(""), // lpuch("K_?0E"), // &HE
lpuch(""), // lpuch("K_?0F"), // &HF
lpuch("B99"), // lpuch("K_SHIFT"), // &H10
lpuch("A99"), // lpuch("K_CONTROL"), // &H11
lpuch("A02"), // lpuch("K_ALT"), // &H12
lpuch(""), // lpuch("K_PAUSE"), // &H13
lpuch("C00"), // lpuch("K_CAPS"), // &H14
lpuch(""), // lpuch("K_KANJI?15"), // &H15
lpuch(""), // lpuch("K_KANJI?16"), // &H16
lpuch(""), // lpuch("K_KANJI?17"), // &H17
lpuch(""), // lpuch("K_KANJI?18"), // &H18
lpuch(""), // lpuch("K_KANJI?19"), // &H19
lpuch(""), // lpuch("K_?1A"), // &H1A
lpuch(""), // lpuch("K_ESC"), // &H1B
lpuch(""), // lpuch("K_KANJI?1C"), // &H1C
lpuch(""), // lpuch("K_KANJI?1D"), // &H1D
lpuch(""), // lpuch("K_KANJI?1E"), // &H1E
lpuch(""), // lpuch("K_KANJI?1F"), // &H1F
lpuch("A03"), // lpuch("K_SPACE"), // &H20
lpuch(""), // lpuch("K_PGUP"), // &H21
lpuch(""), // lpuch("K_PGDN"), // &H22
lpuch(""), // lpuch("K_END"), // &H23
lpuch(""), // lpuch("K_HOME"), // &H24
lpuch(""), // lpuch("K_LEFT"), // &H25
lpuch(""), // lpuch("K_UP"), // &H26
lpuch(""), // lpuch("K_RIGHT"), // &H27
lpuch(""), // lpuch("K_DOWN"), // &H28
lpuch(""), // lpuch("K_SEL"), // &H29
lpuch(""), // lpuch("K_PRINT"), // &H2A
lpuch(""), // lpuch("K_EXEC"), // &H2B
lpuch(""), // lpuch("K_PRTSCN"), // &H2C
lpuch(""), // lpuch("K_INS"), // &H2D
lpuch(""), // lpuch("K_DEL"), // &H2E
lpuch(""), // lpuch("K_HELP"), // &H2F
lpuch("E10"), // lpuch("K_0"), // &H30
lpuch("E01"), // lpuch("K_1"), // &H31
lpuch("E02"), // lpuch("K_2"), // &H32
lpuch("E03"), // lpuch("K_3"), // &H33
lpuch("E04"), // lpuch("K_4"), // &H34
lpuch("E05"), // lpuch("K_5"), // &H35
lpuch("E06"), // lpuch("K_6"), // &H36
lpuch("E07"), // lpuch("K_7"), // &H37
lpuch("E08"), // lpuch("K_8"), // &H38
lpuch("E09"), // lpuch("K_9"), // &H39
lpuch(""), // lpuch("K_?3A"), // &H3A
lpuch(""), // lpuch("K_?3B"), // &H3B
lpuch(""), // lpuch("K_?3C"), // &H3C
lpuch(""), // lpuch("K_?3D"), // &H3D
lpuch(""), // lpuch("K_?3E"), // &H3E
lpuch(""), // lpuch("K_?3F"), // &H3F
lpuch(""), // lpuch("K_?40"), // &H40
lpuch("C01"), // lpuch("K_A"), // &H41
lpuch("B05"), // lpuch("K_B"), // &H42
lpuch("B03"), // lpuch("K_C"), // &H43
lpuch("C03"), // lpuch("K_D"), // &H44
lpuch("D03"), // lpuch("K_E"), // &H45
lpuch("C04"), // lpuch("K_F"), // &H46
lpuch("C05"), // lpuch("K_G"), // &H47
lpuch("C06"), // lpuch("K_H"), // &H48
lpuch("D08"), // lpuch("K_I"), // &H49
lpuch("C07"), // lpuch("K_J"), // &H4A
lpuch("C08"), // lpuch("K_K"), // &H4B
lpuch("C09"), // lpuch("K_L"), // &H4C
lpuch("B07"), // lpuch("K_M"), // &H4D
lpuch("B06"), // lpuch("K_N"), // &H4E
lpuch("D09"), // lpuch("K_O"), // &H4F
lpuch("D10"), // lpuch("K_P"), // &H50
lpuch("D01"), // lpuch("K_Q"), // &H51
lpuch("D04"), // lpuch("K_R"), // &H52
lpuch("C02"), // lpuch("K_S"), // &H53
lpuch("D05"), // lpuch("K_T"), // &H54
lpuch("D07"), // lpuch("K_U"), // &H55
lpuch("B04"), // lpuch("K_V"), // &H56
lpuch("D02"), // lpuch("K_W"), // &H57
lpuch("B02"), // lpuch("K_X"), // &H58
lpuch("D06"), // lpuch("K_Y"), // &H59
lpuch("B01"), // lpuch("K_Z"), // &H5A
lpuch(""), // lpuch("K_?5B"), // &H5B
lpuch(""), // lpuch("K_?5C"), // &H5C
lpuch(""), // lpuch("K_?5D"), // &H5D
lpuch(""), // lpuch("K_?5E"), // &H5E
lpuch(""), // lpuch("K_?5F"), // &H5F
lpuch(""), // lpuch("K_NP0"), // &H60
lpuch(""), // lpuch("K_NP1"), // &H61
lpuch(""), // lpuch("K_NP2"), // &H62
lpuch(""), // lpuch("K_NP3"), // &H63
lpuch(""), // lpuch("K_NP4"), // &H64
lpuch(""), // lpuch("K_NP5"), // &H65
lpuch(""), // lpuch("K_NP6"), // &H66
lpuch(""), // lpuch("K_NP7"), // &H67
lpuch(""), // lpuch("K_NP8"), // &H68
lpuch(""), // lpuch("K_NP9"), // &H69
lpuch(""), // lpuch("K_NPSTAR"), // &H6A
lpuch(""), // lpuch("K_NPPLUS"), // &H6B
lpuch(""), // lpuch("K_SEPARATOR"), // &H6C
lpuch(""), // lpuch("K_NPMINUS"), // &H6D
lpuch(""), // lpuch("K_NPDOT"), // &H6E
lpuch(""), // lpuch("K_NPSLASH"), // &H6F
lpuch(""), // lpuch("K_F1"), // &H70
lpuch(""), // lpuch("K_F2"), // &H71
lpuch(""), // lpuch("K_F3"), // &H72
lpuch(""), // lpuch("K_F4"), // &H73
lpuch(""), // lpuch("K_F5"), // &H74
lpuch(""), // lpuch("K_F6"), // &H75
lpuch(""), // lpuch("K_F7"), // &H76
lpuch(""), // lpuch("K_F8"), // &H77
lpuch(""), // lpuch("K_F9"), // &H78
lpuch(""), // lpuch("K_F10"), // &H79
lpuch(""), // lpuch("K_F11"), // &H7A
lpuch(""), // lpuch("K_F12"), // &H7B
lpuch(""), // lpuch("K_F13"), // &H7C
lpuch(""), // lpuch("K_F14"), // &H7D
lpuch(""), // lpuch("K_F15"), // &H7E
lpuch(""), // lpuch("K_F16"), // &H7F
lpuch(""), // lpuch("K_F17"), // &H80
lpuch(""), // lpuch("K_F18"), // &H81
lpuch(""), // lpuch("K_F19"), // &H82
lpuch(""), // lpuch("K_F20"), // &H83
lpuch(""), // lpuch("K_F21"), // &H84
lpuch(""), // lpuch("K_F22"), // &H85
lpuch(""), // lpuch("K_F23"), // &H86
lpuch(""), // lpuch("K_F24"), // &H87
lpuch(""), // lpuch("K_?88"), // &H88
lpuch(""), // lpuch("K_?89"), // &H89
lpuch(""), // lpuch("K_?8A"), // &H8A
lpuch(""), // lpuch("K_?8B"), // &H8B
lpuch(""), // lpuch("K_?8C"), // &H8C
lpuch(""), // lpuch("K_?8D"), // &H8D
lpuch(""), // lpuch("K_?8E"), // &H8E
lpuch(""), // lpuch("K_?8F"), // &H8F
lpuch(""), // lpuch("K_NUMLOCK"), // &H90
lpuch(""), // lpuch("K_SCROLL"), // &H91
lpuch(""), // lpuch("K_?92"), // &H92
lpuch(""), // lpuch("K_?93"), // &H93
lpuch(""), // lpuch("K_?94"), // &H94
lpuch(""), // lpuch("K_?95"), // &H95
lpuch(""), // lpuch("K_?96"), // &H96
lpuch(""), // lpuch("K_?97"), // &H97
lpuch(""), // lpuch("K_?98"), // &H98
lpuch(""), // lpuch("K_?99"), // &H99
lpuch(""), // lpuch("K_?9A"), // &H9A
lpuch(""), // lpuch("K_?9B"), // &H9B
lpuch(""), // lpuch("K_?9C"), // &H9C
lpuch(""), // lpuch("K_?9D"), // &H9D
lpuch(""), // lpuch("K_?9E"), // &H9E
lpuch(""), // lpuch("K_?9F"), // &H9F
lpuch(""), // lpuch("K_?A0"), // &HA0
lpuch(""), // lpuch("K_?A1"), // &HA1
lpuch(""), // lpuch("K_?A2"), // &HA2
lpuch(""), // lpuch("K_?A3"), // &HA3
lpuch(""), // lpuch("K_?A4"), // &HA4
lpuch(""), // lpuch("K_?A5"), // &HA5
lpuch(""), // lpuch("K_?A6"), // &HA6
lpuch(""), // lpuch("K_?A7"), // &HA7
lpuch(""), // lpuch("K_?A8"), // &HA8
lpuch(""), // lpuch("K_?A9"), // &HA9
lpuch(""), // lpuch("K_?AA"), // &HAA
lpuch(""), // lpuch("K_?AB"), // &HAB
lpuch(""), // lpuch("K_?AC"), // &HAC
lpuch(""), // lpuch("K_?AD"), // &HAD
lpuch(""), // lpuch("K_?AE"), // &HAE
lpuch(""), // lpuch("K_?AF"), // &HAF
lpuch(""), // lpuch("K_?B0"), // &HB0
lpuch(""), // lpuch("K_?B1"), // &HB1
lpuch(""), // lpuch("K_?B2"), // &HB2
lpuch(""), // lpuch("K_?B3"), // &HB3
lpuch(""), // lpuch("K_?B4"), // &HB4
lpuch(""), // lpuch("K_?B5"), // &HB5
lpuch(""), // lpuch("K_?B6"), // &HB6
lpuch(""), // lpuch("K_?B7"), // &HB7
lpuch(""), // lpuch("K_?B8"), // &HB8
lpuch(""), // lpuch("K_?B9"), // &HB9
lpuch("C10"), // lpuch("K_COLON"), // &HBA
lpuch("E12"), // lpuch("K_EQUAL"), // &HBB
lpuch("B08"), // lpuch("K_COMMA"), // &HBC
lpuch("E11"), // lpuch("K_HYPHEN"), // &HBD
lpuch("B09"), // lpuch("K_PERIOD"), // &HBE
lpuch("B10"), // lpuch("K_SLASH"), // &HBF
lpuch("E00"), // lpuch("K_BKQUOTE"), // &HC0
lpuch("B11"), // lpuch("K_?C1"), // &HC1 - brazilian portuguese ABNT2 /? left of right-shift
lpuch(""), // lpuch("K_?C2"), // &HC2
lpuch(""), // lpuch("K_?C3"), // &HC3
lpuch(""), // lpuch("K_?C4"), // &HC4
lpuch(""), // lpuch("K_?C5"), // &HC5
lpuch(""), // lpuch("K_?C6"), // &HC6
lpuch(""), // lpuch("K_?C7"), // &HC7
lpuch(""), // lpuch("K_?C8"), // &HC8
lpuch(""), // lpuch("K_?C9"), // &HC9
lpuch(""), // lpuch("K_?CA"), // &HCA
lpuch(""), // lpuch("K_?CB"), // &HCB
lpuch(""), // lpuch("K_?CC"), // &HCC
lpuch(""), // lpuch("K_?CD"), // &HCD
lpuch(""), // lpuch("K_?CE"), // &HCE
lpuch(""), // lpuch("K_?CF"), // &HCF
lpuch(""), // lpuch("K_?D0"), // &HD0
lpuch(""), // lpuch("K_?D1"), // &HD1
lpuch(""), // lpuch("K_?D2"), // &HD2
lpuch(""), // lpuch("K_?D3"), // &HD3
lpuch(""), // lpuch("K_?D4"), // &HD4
lpuch(""), // lpuch("K_?D5"), // &HD5
lpuch(""), // lpuch("K_?D6"), // &HD6
lpuch(""), // lpuch("K_?D7"), // &HD7
lpuch(""), // lpuch("K_?D8"), // &HD8
lpuch(""), // lpuch("K_?D9"), // &HD9
lpuch(""), // lpuch("K_?DA"), // &HDA
lpuch("D11"), // lpuch("K_LBRKT"), // &HDB
lpuch("D13"), // lpuch("K_BKSLASH"), // &HDC
lpuch("D12"), // lpuch("K_RBRKT"), // &HDD
lpuch("C11"), // lpuch("K_QUOTE"), // &HDE
lpuch(""), // lpuch("K_oDF"), // &HDF
lpuch(""), // lpuch("K_oE0"), // &HE0
lpuch(""), // lpuch("K_oE1"), // &HE1
lpuch("B00"), // lpuch("K_oE2"), // &HE2 // European key right of left-shift
lpuch(""), // lpuch("K_oE3"), // &HE3
lpuch(""), // lpuch("K_oE4"), // &HE4
lpuch(""), // lpuch("K_?E5"), // &HE5
lpuch(""), // lpuch("K_oE6"), // &HE6
lpuch(""), // lpuch("K_?E7"), // &HE7
lpuch(""), // lpuch("K_?E8"), // &HE8
lpuch(""), // lpuch("K_oE9"), // &HE9
lpuch(""), // lpuch("K_oEA"), // &HEA
lpuch(""), // lpuch("K_oEB"), // &HEB
lpuch(""), // lpuch("K_oEC"), // &HEC
lpuch(""), // lpuch("K_oED"), // &HED
lpuch(""), // lpuch("K_oEE"), // &HEE
lpuch(""), // lpuch("K_oEF"), // &HEF
lpuch(""), // lpuch("K_oF0"), // &HF0
lpuch(""), // lpuch("K_oF1"), // &HF1
lpuch(""), // lpuch("K_oF2"), // &HF2
lpuch(""), // lpuch("K_oF3"), // &HF3
lpuch(""), // lpuch("K_oF4"), // &HF4
lpuch(""), // lpuch("K_oF5"), // &HF5
lpuch(""), // lpuch("K_?F6"), // &HF6
lpuch(""), // lpuch("K_?F7"), // &HF7
lpuch(""), // lpuch("K_?F8"), // &HF8
lpuch(""), // lpuch("K_?F9"), // &HF9
lpuch(""), // lpuch("K_?FA"), // &HFA
lpuch(""), // lpuch("K_?FB"), // &HFB
lpuch(""), // lpuch("K_?FC"), // &HFC
lpuch(""), // lpuch("K_?FD"), // &HFD
lpuch(""), // lpuch("K_?FE"), // &HFE
lpuch("") // lpuch("K_?FF") // &HFF
};