From e79c5343359cfd075e2fb3d0d7dd7dd87a8ddfdb Mon Sep 17 00:00:00 2001 From: Sabine Date: Wed, 14 Aug 2024 15:33:14 +0200 Subject: [PATCH] feat(mac): mcompile remove u16, kmx_file from mcompile-mac and use from common --- mac/mcompile/bu_phonetic.kmx | Bin 73444 -> 0 bytes mac/mcompile/keymap.h | 3 +- mac/mcompile/kmx_file.h | 388 ----------------------------------- mac/mcompile/mc_kmxfile.cpp | 66 +++--- mac/mcompile/mc_kmxfile.h | 2 +- mac/mcompile/mcompile.cpp | 2 +- mac/mcompile/meson.build | 29 +++ mac/mcompile/sil_sahu.kmx | Bin 1418 -> 0 bytes mac/mcompile/u16.cpp | 388 ----------------------------------- mac/mcompile/u16.h | 83 -------- 10 files changed, 66 insertions(+), 895 deletions(-) delete mode 100755 mac/mcompile/bu_phonetic.kmx delete mode 100644 mac/mcompile/kmx_file.h create mode 100644 mac/mcompile/meson.build delete mode 100755 mac/mcompile/sil_sahu.kmx delete mode 100644 mac/mcompile/u16.cpp delete mode 100644 mac/mcompile/u16.h diff --git a/mac/mcompile/bu_phonetic.kmx b/mac/mcompile/bu_phonetic.kmx deleted file mode 100755 index bf5f8b54a221a6431ae78976d1711c22ac6bc42c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73444 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 BjVij5cR2;D{OOJaG@`C>D~`a<^; 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 bDc9P+-~P+0?d|gWvfb;u_HAFq`+5HlZ@II~ diff --git a/mac/mcompile/keymap.h b/mac/mcompile/keymap.h index ff0bcf1f85..d0cf0c10ab 100644 --- a/mac/mcompile/keymap.h +++ b/mac/mcompile/keymap.h @@ -6,7 +6,8 @@ #include #include #include -#include "u16.h" + +#include "../../common/include/km_u16.h" enum ShiftState { Base = 0, // 0 diff --git a/mac/mcompile/kmx_file.h b/mac/mcompile/kmx_file.h deleted file mode 100644 index b254eb99af..0000000000 --- a/mac/mcompile/kmx_file.h +++ /dev/null @@ -1,388 +0,0 @@ - -#pragma once -#ifndef KMX_FILE_H -#define KMX_FILE_H - -/* - Copyright: Copyright (C) 2003-2018 SIL International. - Authors: mcdurdin -*/ - -#define UNREFERENCED_PARAMETER(P) (P) -#define TRUNCATE ((size_t) - 1) -#ifdef KMN_KBP -// TODO: move this to a common namespace keyman::common::kmx_file or similar in the future -namespace km { -namespace kbp { -namespace kmx { -#endif - -#define KMX_MAX_ALLOWED_FILE_SIZE (128 * 1024 * 1024) // 128MB // - -#define KEYMAN_LAYOUT_DEFAULT 0x000005FE - -#define KEYMANID_NONKEYMAN 0xFFFFFFFF -#define KEYMANID_IGNORE 0xFFFFFFFE -#define KEYMANID_INVALID 0xFFFFFFFD - -// Shift flags for hotkeys (version 1.0) // -#define SHIFTFLAG 0x2000 -#define CTRLFLAG 0x4000 -#define ALTFLAG 0x8000 - -// Miscellaneous flags and defines // - -#define MAXGROUPS 128 - -// File version identifiers // - -#define VERSION_30 0x00000300 -#define VERSION_31 0x00000301 -#define VERSION_32 0x00000302 -#define VERSION_40 0x00000400 -#define VERSION_50 0x00000500 -#define VERSION_501 0x00000501 -#define VERSION_60 0x00000600 -#define VERSION_70 0x00000700 -#define VERSION_80 0x00000800 -#define VERSION_90 0x00000900 -#define VERSION_100 0x00000A00 -#define VERSION_140 0x00000E00 -#define VERSION_150 0x00000F00 - -#define VERSION_160 0x00001000 - -#define VERSION_MIN VERSION_50 -#define VERSION_MAX VERSION_160 - -// -// Backspace types -// - -#define BK_DEFAULT 0 -#define BK_DEADKEY 1 - -// Different begin types -#define BEGIN_ANSI 0 -#define BEGIN_UNICODE 1 -#define BEGIN_NEWCONTEXT 2 -#define BEGIN_POSTKEYSTROKE 3 - -#define TSS_NONE 0 -#define TSS_BITMAP 1 -#define TSS_COPYRIGHT 2 -#define TSS_HOTKEY 3 -#define TSS_LANGUAGE 4 -#define TSS_LAYOUT 5 -#define TSS_MESSAGE 6 -#define TSS_NAME 7 -#define TSS_VERSION 8 -#define TSS_CAPSONONLY 9 -#define TSS_CAPSALWAYSOFF 10 -#define TSS_SHIFTFREESCAPS 11 -#define TSS_LANGUAGENAME 12 - -#define TSS_CALLDEFINITION 13 -#define TSS_CALLDEFINITION_LOADFAILED 14 - -#define TSS_ETHNOLOGUECODE 15 - -#define TSS_DEBUG_LINE 16 - -#define TSS_MNEMONIC 17 - -#define TSS_INCLUDECODES 18 - -#define TSS_OLDCHARPOSMATCHING 19 - -#define TSS_COMPILEDVERSION 20 -#define TSS_KEYMANCOPYRIGHT 21 - -#define TSS_CUSTOMKEYMANEDITION 22 -#define TSS_CUSTOMKEYMANEDITIONNAME 23 - -// Keyman 7.0 system stores // - -#define TSS__KEYMAN_60_MAX 23 - -#define TSS_VISUALKEYBOARD 24 -#define TSS_KMW_RTL 25 -#define TSS_KMW_HELPFILE 26 -#define TSS_KMW_HELPTEXT 27 -#define TSS_KMW_EMBEDJS 28 - -#define TSS_WINDOWSLANGUAGES 29 - -#define TSS__KEYMAN_70_MAX 29 - -// Keyman 8.0 system stores // - -#define TSS_COMPARISON 30 - -#define TSS__KEYMAN_80_MAX 30 - -// Keyman 9.0 system stores // - -#define TSS_PLATFORM 31 -#define TSS_BASELAYOUT 32 -#define TSS_LAYER 33 - -#define TSS_PLATFORM_NOMATCH 0x8001 // Reserved for internal use - after platform statement is run, set to either TSS_PLATFORM_NOMATCH or TSS_PLATFORM_MATCH -#define TSS_PLATFORM_MATCH 0x8002 // Reserved for internal use - as the result will never change for the lifetime of the process. - -#define TSS_VKDICTIONARY 34 // Dictionary of virtual key names for v9 dynamic layouts -#define TSS_LAYOUTFILE 35 // Keyman 9 layer-based JSON OSK -#define TSS_KEYBOARDVERSION 36 // &keyboardversion system store // I4140 -#define TSS_KMW_EMBEDCSS 37 - -#define TSS_TARGETS 38 - -#define TSS__KEYMAN_90_MAX 38 - -// Keyman 14.0 system stores // - -#define TSS_CASEDKEYS 39 - -#define TSS__KEYMAN_140_MAX 39 - -// Keyman 15.0 system stores // - -#define TSS_BEGIN_NEWCONTEXT 40 -#define TSS_BEGIN_POSTKEYSTROKE 41 -#define TSS_NEWLAYER 42 -#define TSS_OLDLAYER 43 - -#define TSS__KEYMAN_150_MAX 43 - -#define TSS__MAX 43 - -// wm_keyman_control_internal message control codes // - -#define KMCI_SELECTKEYBOARD 3 // I3933 -#define KMCI_SELECTKEYBOARD_TSF 4 // I3933 -#define KMCI_GETACTIVEKEYBOARD 5 // I3933 -#define KMCI_SETFOREGROUND 6 // I3933 -#define KMCI_SELECTKEYBOARD_BACKGROUND 7 // I4271 -#define KMCI_SELECTKEYBOARD_BACKGROUND_TSF 8 // I4271 - -#define FILEID_COMPILED 0x5354584B - -#define SZMAX_LANGUAGENAME 80 -#define SZMAX_KEYBOARDNAME 80 -#define SZMAX_COPYRIGHT 256 -#define SZMAX_MESSAGE 1024 - -#define UC_SENTINEL 0xFFFF -#define UC_SENTINEL_EXTENDEDEND 0x10 // was ((CODE_LASTCODE)+1)... what was I thinking? - -#define U_UC_SENTINEL u"\uFFFF" - -/* - VK__MAX defines the highest virtual key code defined in the system = 0xFF. Custom VK codes start at 256 -*/ -#define VK__MAX 255 - -#define CODE_ANY 0x01 -#define CODE_INDEX 0x02 -#define CODE_CONTEXT 0x03 -#define CODE_NUL 0x04 -#define CODE_USE 0x05 -#define CODE_RETURN 0x06 -#define CODE_BEEP 0x07 -#define CODE_DEADKEY 0x08 -// 0x09 = bkspace.-- we don't need to keep this separate though with UC_SENTINEL -#define CODE_EXTENDED 0x0A -//#define CODE_EXTENDEDEND 0x0B deprecated -#define CODE_SWITCH 0x0C -#define CODE_KEY 0x0D -#define CODE_CLEARCONTEXT 0x0E -#define CODE_CALL 0x0F -// UC_SENTINEL_EXTENDEDEND 0x10 -#define CODE_CONTEXTEX 0x11 - -#define CODE_NOTANY 0x12 - -#define CODE_KEYMAN70_LASTCODE 0x12 - -#define CODE_SETOPT 0x13 -#define CODE_IFOPT 0x14 -#define CODE_SAVEOPT 0x15 -#define CODE_RESETOPT 0x16 - -#define CODE_KEYMAN80_LASTCODE 0x16 - -// Keyman 9.0 codes // - -#define CODE_IFSYSTEMSTORE 0x17 -#define CODE_SETSYSTEMSTORE 0x18 - -#define CODE_LASTCODE 0x18 - -#define U_CODE_ANY u"\u0001" -#define U_CODE_INDEX u"\u0002" -#define U_CODE_CONTEXT u"\u0003" -#define U_CODE_NUL u"\u0004" -#define U_CODE_USE u"\u0005" -#define U_CODE_RETURN u"\u0006" -#define U_CODE_BEEP u"\u0007" -#define U_CODE_DEADKEY u"\u0008" -#define U_CODE_EXTENDED u"\u000A" -#define U_CODE_SWITCH u"\u000C" -#define U_CODE_CLEARCONTEXT u"\u000E" -#define U_CODE_CALL u"\u000F" -#define U_CODE_EXTENDEDEND u"\u0010" -#define U_CODE_CONTEXTEX u"\u0011" -#define U_CODE_NOTANY u"\u0012" -#define U_CODE_SETOPT u"\u0013" -#define U_CODE_IFOPT u"\u0014" -#define U_CODE_SAVEOPT u"\u0015" -#define U_CODE_RESETOPT u"\u0016" -#define U_CODE_IFSYSTEMSTORE u"\u0017" -#define U_CODE_SETSYSTEMSTORE u"\u0018" - -#define C_CODE_ANY(store) U_UC_SENTINEL U_CODE_ANY store -#define C_CODE_INDEX(val1, val2) U_UC_SENTINEL U_CODE_INDEX val1 val2 -#define C_CODE_CONTEXT() U_UC_SENTINEL U_CODE_CONTEXT -#define C_CODE_NUL() U_UC_SENTINEL U_CODE_NUL -#define C_CODE_USE(val) U_UC_SENTINEL U_CODE_USE val -#define C_CODE_RETURN() U_UC_SENTINEL U_CODE_RETURN -#define C_CODE_BEEP() U_UC_SENTINEL U_CODE_BEEP -#define C_CODE_DEADKEY(deadkey) U_UC_SENTINEL U_CODE_DEADKEY deadkey -#define C_CODE_EXTENDED(varargs) U_UC_SENTINEL U_CODE_EXTENDED varargs -#define C_CODE_SWITCH(val) U_UC_SENTINEL U_CODE_SWITCH val -#define C_CODE_CLEARCONTEXT() U_UC_SENTINEL U_CODE_CLEARCONTEXT -#define C_CODE_CALL(val) U_UC_SENTINEL U_CODE_CALL val -#define C_CODE_CONTEXTEX(val) U_UC_SENTINEL U_CODE_CONTEXTEX val -#define C_CODE_NOTANY(val) U_UC_SENTINEL U_CODE_NOTANY val -#define C_CODE_SETOPT(val1, val2) U_UC_SENTINEL U_CODE_SETOPT val1 val2 -#define C_CODE_IFOPT(opt, val1, val2) U_UC_SENTINEL U_CODE_IFOPT opt val1 val2 -#define C_CODE_SAVEOPT(opt) U_UC_SENTINEL U_CODE_SAVEOPT opt -#define C_CODE_RESETOPT(opt) U_UC_SENTINEL U_CODE_RESETOPT opt -#define C_CODE_IFSYSTEMSTORE(store, val1, val2) U_UC_SENTINEL U_CODE_IFSYSTEMSTORE store val1 val2 -#define C_CODE_SETSYSTEMSTORE(store, val) U_UC_SENTINEL U_CODE_SETSYSTEMSTORE store val - -#define KF_SHIFTFREESCAPS 0x0001 -#define KF_CAPSONONLY 0x0002 -#define KF_CAPSALWAYSOFF 0x0004 -#define KF_LOGICALLAYOUT 0x0008 -#define KF_AUTOMATICVERSION 0x0010 - -// 16.0: Support for LDML Keyboards in KMXPlus file format -#define KF_KMXPLUS 0x0020 - -#define HK_ALT 0x00010000 -#define HK_CTRL 0x00020000 -#define HK_SHIFT 0x00040000 - -#define LCTRLFLAG 0x0001 // Left Control flag -#define RCTRLFLAG 0x0002 // Right Control flag -#define LALTFLAG 0x0004 // Left Alt flag -#define RALTFLAG 0x0008 // Right Alt flag -#define K_SHIFTFLAG 0x0010 // Either shift flag -#define K_CTRLFLAG 0x0020 // Either ctrl flag -#define K_ALTFLAG 0x0040 // Either alt flag -//#define K_METAFLAG 0x0080 // Either Meta-key flag (tentative). Not usable in keyboard rules; - // Used internally (currently, only by KMW) to ensure Meta-key - // shortcuts safely bypass rules - // Meta key = Command key on macOS, Windows key on Windows -#define CAPITALFLAG 0x0100 // Caps lock on -#define NOTCAPITALFLAG 0x0200 // Caps lock NOT on -#define NUMLOCKFLAG 0x0400 // Num lock on -#define NOTNUMLOCKFLAG 0x0800 // Num lock NOT on -#define SCROLLFLAG 0x1000 // Scroll lock on -#define NOTSCROLLFLAG 0x2000 // Scroll lock NOT on -#define ISVIRTUALKEY 0x4000 // It is a Virtual Key Sequence -#define VIRTUALCHARKEY 0x8000 // Keyman 6.0: Virtual Key Cap Sequence NOT YET - -#define K_MODIFIERFLAG 0x007F -#define K_NOTMODIFIERFLAG 0xFF00 // I4548 - -struct KMX_COMP_STORE { - KMX_DWORD dwSystemID; - KMX_DWORD dpName; - KMX_DWORD dpString; - }; - -struct KMX_COMP_KEY { - KMX_WORD Key; - KMX_WORD _reserved; - KMX_DWORD Line; - KMX_DWORD ShiftFlags; - KMX_DWORD dpOutput; - KMX_DWORD dpContext; - }; - -struct KMX_COMP_GROUP { - KMX_DWORD dpName; - KMX_DWORD dpKeyArray; // [LPKEY] address of first item in key array - KMX_DWORD dpMatch; - KMX_DWORD dpNoMatch; - KMX_DWORD cxKeyArray; // in array entries - KMX_BOOL fUsingKeys; // group(xx) [using keys] <-- specified or not - }; - -struct KMX_COMP_KEYBOARD { - KMX_DWORD dwIdentifier; // 0000 Keyman compiled keyboard id - - KMX_DWORD dwFileVersion; // 0004 Version of the file - Keyman 4.0 is 0x0400 - - KMX_DWORD dwCheckSum; // 0008 As stored in keyboard. DEPRECATED as of 16.0 - KMX_DWORD KeyboardID; // 000C as stored in HKEY_LOCAL_MACHINE//system//currentcontrolset//control//keyboard layouts - KMX_DWORD IsRegistered; // 0010 - KMX_DWORD version; // 0014 keyboard version - - KMX_DWORD cxStoreArray; // 0018 in array entries - KMX_DWORD cxGroupArray; // 001C in array entries - - KMX_DWORD dpStoreArray; // 0020 [LPSTORE] address of first item in store array - KMX_DWORD dpGroupArray; // 0024 [LPGROUP] address of first item in group array - - KMX_DWORD StartGroup[2]; // 0028 index of starting groups [2 of them] - - KMX_DWORD dwFlags; // 0030 Flags for the keyboard file - - KMX_DWORD dwHotKey; // 0034 standard windows hotkey (hiword=shift/ctrl/alt stuff, loword=vkey) - - KMX_DWORD dpBitmapOffset; // 0038 offset of the bitmaps in the file - KMX_DWORD dwBitmapSize; // 003C size in bytes of the bitmaps -}; - -struct KMX_COMP_KEYBOARD_KMXPLUSINFO { - KMX_DWORD dpKMXPlus; // 0040 offset of KMXPlus data, header is first - KMX_DWORD dwKMXPlusSize; // 0044 size in bytes of entire KMXPlus data -}; - -// - //* Only valid if comp_keyboard.dwFlags&KF_KMXPLUS - // -struct KMX_COMP_KEYBOARD_EX { - KMX_COMP_KEYBOARD header; // 0000 see COMP_KEYBOARD - KMX_COMP_KEYBOARD_KMXPLUSINFO kmxplus; // 0040 see COMP_KEYBOARD_EXTRA -}; - -typedef KMX_COMP_KEYBOARD *PKMX_COMP_KEYBOARD; -typedef KMX_COMP_STORE *PKMX_COMP_STORE; -typedef KMX_COMP_KEY *PKMX_COMP_KEY; -typedef KMX_COMP_GROUP *PKMX_COMP_GROUP; - - -extern const int CODE__SIZE[]; -#define CODE__SIZE_MAX 5 - -#define KEYBOARDFILEHEADER_SIZE 64 -#define KEYBOARDFILESTORE_SIZE 12 -#define KEYBOARDFILEGROUP_SIZE 24 -#define KEYBOARDFILEKEY_SIZE 20 - -static_assert(sizeof(KMX_COMP_STORE) == KEYBOARDFILESTORE_SIZE, "COMP_STORE must be KEYBOARDFILESTORE_SIZE bytes"); -static_assert(sizeof(KMX_COMP_KEY) == KEYBOARDFILEKEY_SIZE, "COMP_KEY must be KEYBOARDFILEKEY_SIZE bytes"); -static_assert(sizeof(KMX_COMP_GROUP) == KEYBOARDFILEGROUP_SIZE, "COMP_GROUP must be KEYBOARDFILEGROUP_SIZE bytes"); -static_assert(sizeof(KMX_COMP_KEYBOARD) == KEYBOARDFILEHEADER_SIZE, "COMP_KEYBOARD must be KEYBOARDFILEHEADER_SIZE bytes"); - -#ifdef KMN_KBP -} // namespace kmx -} // namespace kbp -} // namespace km -#endif -#endif //KMX_FILE_H - diff --git a/mac/mcompile/mc_kmxfile.cpp b/mac/mcompile/mc_kmxfile.cpp index 86845f8165..d75f3076de 100644 --- a/mac/mcompile/mc_kmxfile.cpp +++ b/mac/mcompile/mc_kmxfile.cpp @@ -58,18 +58,18 @@ KMX_DWORD KMX_WriteCompiledKeyboardToFile(LPKMX_KEYBOARD fk, FILE* hOutfile, KMX LPKMX_STORE fsp; LPKMX_KEY fkp; - PKMX_COMP_KEYBOARD ck; - PKMX_COMP_GROUP gp; - PKMX_COMP_STORE sp; - PKMX_COMP_KEY kp; + PCOMP_KEYBOARD ck; + PCOMP_GROUP gp; + PCOMP_STORE sp; + PCOMP_KEY kp; PKMX_BYTE buf; KMX_DWORD size, offset; KMX_DWORD i, j; // Calculate how much memory to allocate - size = sizeof(KMX_COMP_KEYBOARD) + - fk->cxGroupArray * sizeof(KMX_COMP_GROUP) + - fk->cxStoreArray * sizeof(KMX_COMP_STORE) + + size = sizeof(COMP_KEYBOARD) + + fk->cxGroupArray * sizeof(COMP_GROUP) + + fk->cxStoreArray * sizeof(COMP_STORE) + //wcslen(fk->szName)*2 + 2 + //wcslen(fk->szCopyright)*2 + 2 + //wcslen(fk->szLanguageName)*2 + 2 + @@ -79,7 +79,7 @@ KMX_DWORD KMX_WriteCompiledKeyboardToFile(LPKMX_KEYBOARD fk, FILE* hOutfile, KMX for (i = 0, fgp = fk->dpGroupArray; i < fk->cxGroupArray; i++, fgp++) { if (fgp->dpName) size += (u16len(fgp->dpName) + 1) * sizeof(KMX_WCHAR); - size += fgp->cxKeyArray * sizeof(KMX_COMP_KEY); + size += fgp->cxKeyArray * sizeof(COMP_KEY); for (j = 0, fkp = fgp->dpKeyArray; j < fgp->cxKeyArray; j++, fkp++) { size += (u16len(fkp->dpOutput) + 1) * sizeof(KMX_WCHAR); size += (u16len(fkp->dpContext) + 1) * sizeof(KMX_WCHAR); @@ -100,7 +100,7 @@ KMX_DWORD KMX_WriteCompiledKeyboardToFile(LPKMX_KEYBOARD fk, FILE* hOutfile, KMX return CERR_CannotAllocateMemory; memset(buf, 0, size); - ck = (PKMX_COMP_KEYBOARD)buf; + ck = (PCOMP_KEYBOARD)buf; ck->dwIdentifier = FILEID_COMPILED; @@ -116,12 +116,12 @@ KMX_DWORD KMX_WriteCompiledKeyboardToFile(LPKMX_KEYBOARD fk, FILE* hOutfile, KMX ck->dwFlags = fk->dwFlags; - offset = sizeof(KMX_COMP_KEYBOARD); + offset = sizeof(COMP_KEYBOARD); ck->dpStoreArray = offset; - sp = (PKMX_COMP_STORE)(buf + offset); + sp = (PCOMP_STORE)(buf + offset); fsp = fk->dpStoreArray; - offset += sizeof(KMX_COMP_STORE) * ck->cxStoreArray; + offset += sizeof(COMP_STORE) * ck->cxStoreArray; for (i = 0; i < ck->cxStoreArray; i++, sp++, fsp++) { sp->dwSystemID = fsp->dwSystemID; sp->dpString = offset; @@ -138,9 +138,9 @@ KMX_DWORD KMX_WriteCompiledKeyboardToFile(LPKMX_KEYBOARD fk, FILE* hOutfile, KMX } ck->dpGroupArray = offset; - gp = (PKMX_COMP_GROUP)(buf + offset); + gp = (PCOMP_GROUP)(buf + offset); - offset += sizeof(KMX_COMP_GROUP) * ck->cxGroupArray; + offset += sizeof(COMP_GROUP) * ck->cxGroupArray; for (i = 0, fgp = fk->dpGroupArray; i < ck->cxGroupArray; i++, gp++, fgp++) { gp->cxKeyArray = fgp->cxKeyArray; @@ -168,8 +168,8 @@ KMX_DWORD KMX_WriteCompiledKeyboardToFile(LPKMX_KEYBOARD fk, FILE* hOutfile, KMX } gp->dpKeyArray = offset; - kp = (PKMX_COMP_KEY)(buf + offset); - offset += gp->cxKeyArray * sizeof(KMX_COMP_KEY); + kp = (PCOMP_KEY)(buf + offset); + offset += gp->cxKeyArray * sizeof(COMP_KEY); for (j = 0, fkp = fgp->dpKeyArray; j < gp->cxKeyArray; j++, kp++, fkp++) { kp->Key = fkp->Key; @@ -265,7 +265,7 @@ PKMX_WCHAR KMX_StringOffset(PKMX_BYTE base, KMX_DWORD offset) { * @return pointer to the keyboard */ LPKMX_KEYBOARD KMX_CopyKeyboard(PKMX_BYTE bufp, PKMX_BYTE base) { - PKMX_COMP_KEYBOARD ckbp = (PKMX_COMP_KEYBOARD)base; + PCOMP_KEYBOARD ckbp = (PCOMP_KEYBOARD)base; // Copy keyboard structure // @@ -291,20 +291,20 @@ LPKMX_KEYBOARD KMX_CopyKeyboard(PKMX_BYTE bufp, PKMX_BYTE base) { kbp->dpGroupArray = (LPKMX_GROUP)bufp; bufp += sizeof(KMX_GROUP) * kbp->cxGroupArray; - PKMX_COMP_STORE csp; + PCOMP_STORE csp; LPKMX_STORE sp; KMX_DWORD i; - for (csp = (PKMX_COMP_STORE)(base + ckbp->dpStoreArray), sp = kbp->dpStoreArray, i = 0; i < kbp->cxStoreArray; i++, sp++, csp++) { + for (csp = (PCOMP_STORE)(base + ckbp->dpStoreArray), sp = kbp->dpStoreArray, i = 0; i < kbp->cxStoreArray; i++, sp++, csp++) { sp->dwSystemID = csp->dwSystemID; sp->dpName = KMX_StringOffset(base, csp->dpName); sp->dpString = KMX_StringOffset(base, csp->dpString); } - PKMX_COMP_GROUP cgp; + PCOMP_GROUP cgp; LPKMX_GROUP gp; - for (cgp = (PKMX_COMP_GROUP)(base + ckbp->dpGroupArray), gp = kbp->dpGroupArray, i = 0; i < kbp->cxGroupArray; i++, gp++, cgp++) { + for (cgp = (PCOMP_GROUP)(base + ckbp->dpGroupArray), gp = kbp->dpGroupArray, i = 0; i < kbp->cxGroupArray; i++, gp++, cgp++) { gp->dpName = KMX_StringOffset(base, cgp->dpName); gp->dpKeyArray = cgp->cxKeyArray > 0 ? (LPKMX_KEY)bufp : NULL; gp->cxKeyArray = cgp->cxKeyArray; @@ -313,11 +313,11 @@ LPKMX_KEYBOARD KMX_CopyKeyboard(PKMX_BYTE bufp, PKMX_BYTE base) { gp->dpNoMatch = KMX_StringOffset(base, cgp->dpNoMatch); gp->fUsingKeys = cgp->fUsingKeys; - PKMX_COMP_KEY ckp; + PCOMP_KEY ckp; LPKMX_KEY kp; KMX_DWORD j; - for (ckp = (PKMX_COMP_KEY)(base + cgp->dpKeyArray), kp = gp->dpKeyArray, j = 0; j < gp->cxKeyArray; j++, kp++, ckp++) { + for (ckp = (PCOMP_KEY)(base + cgp->dpKeyArray), kp = gp->dpKeyArray, j = 0; j < gp->cxKeyArray; j++, kp++, ckp++) { kp->Key = ckp->Key; kp->Line = ckp->Line; kp->ShiftFlags = ckp->ShiftFlags; @@ -343,10 +343,10 @@ LPKMX_KEYBOARD KMX_FixupKeyboard(PKMX_BYTE bufp, PKMX_BYTE base, KMX_DWORD dwFil UNREFERENCED_PARAMETER(dwFileSize); KMX_DWORD i, j; - PKMX_COMP_KEYBOARD ckbp = (PKMX_COMP_KEYBOARD)base; - PKMX_COMP_GROUP cgp; - PKMX_COMP_STORE csp; - PKMX_COMP_KEY ckp; + PCOMP_KEYBOARD ckbp = (PCOMP_KEYBOARD)base; + PCOMP_GROUP cgp; + PCOMP_STORE csp; + PCOMP_KEY ckp; LPKMX_KEYBOARD kbp = (LPKMX_KEYBOARD)bufp; LPKMX_STORE sp; LPKMX_GROUP gp; @@ -355,18 +355,18 @@ LPKMX_KEYBOARD KMX_FixupKeyboard(PKMX_BYTE bufp, PKMX_BYTE base, KMX_DWORD dwFil kbp->dpStoreArray = (LPKMX_STORE)(base + ckbp->dpStoreArray); kbp->dpGroupArray = (LPKMX_GROUP)(base + ckbp->dpGroupArray); - for (sp = kbp->dpStoreArray, csp = (PKMX_COMP_STORE)sp, i = 0; i < kbp->cxStoreArray; i++, sp++, csp++) { + for (sp = kbp->dpStoreArray, csp = (PCOMP_STORE)sp, i = 0; i < kbp->cxStoreArray; i++, sp++, csp++) { sp->dpName = KMX_StringOffset(base, csp->dpName); sp->dpString = KMX_StringOffset(base, csp->dpString); } - for (gp = kbp->dpGroupArray, cgp = (PKMX_COMP_GROUP)gp, i = 0; i < kbp->cxGroupArray; i++, gp++, cgp++) { + for (gp = kbp->dpGroupArray, cgp = (PCOMP_GROUP)gp, i = 0; i < kbp->cxGroupArray; i++, gp++, cgp++) { gp->dpName = KMX_StringOffset(base, cgp->dpName); gp->dpKeyArray = (LPKMX_KEY)(base + cgp->dpKeyArray); if (cgp->dpMatch != NULL)gp->dpMatch = (PKMX_WCHAR)(base + cgp->dpMatch); if (cgp->dpNoMatch != NULL)gp->dpNoMatch = (PKMX_WCHAR)(base + cgp->dpNoMatch); - for (kp = gp->dpKeyArray, ckp = (PKMX_COMP_KEY)kp, j = 0; j < gp->cxKeyArray; j++, kp++, ckp++) { + for (kp = gp->dpKeyArray, ckp = (PCOMP_KEY)kp, j = 0; j < gp->cxKeyArray; j++, kp++, ckp++) { kp->dpOutput = (PKMX_WCHAR)(base + ckp->dpOutput); kp->dpContext = (PKMX_WCHAR)(base + ckp->dpContext); } @@ -497,14 +497,14 @@ KMX_BOOL KMX_LoadKeyboard(KMX_CHAR* fileName, LPKMX_KEYBOARD* lpKeyboard) { */ KMX_BOOL KMX_VerifyKeyboard(PKMX_BYTE filebase, KMX_DWORD file_size) { KMX_DWORD i; - PKMX_COMP_KEYBOARD ckbp = (PKMX_COMP_KEYBOARD)filebase; - PKMX_COMP_STORE csp; + PCOMP_KEYBOARD ckbp = (PCOMP_KEYBOARD)filebase; + PCOMP_STORE csp; // Check file version // if (ckbp->dwFileVersion < VERSION_MIN || ckbp->dwFileVersion > VERSION_MAX) { // Old or new version -- identify the desired program version // - for (csp = (PKMX_COMP_STORE)(filebase + ckbp->dpStoreArray), i = 0; i < ckbp->cxStoreArray; i++, csp++) { + for (csp = (PCOMP_STORE)(filebase + ckbp->dpStoreArray), i = 0; i < ckbp->cxStoreArray; i++, csp++) { if (csp->dwSystemID == TSS_COMPILEDVERSION) { if (csp->dpString == 0) { mac_KMX_LogError(L"errWrongFileVersion:NULL"); diff --git a/mac/mcompile/mc_kmxfile.h b/mac/mcompile/mc_kmxfile.h index 12d9ba4a8c..014a8146bf 100644 --- a/mac/mcompile/mc_kmxfile.h +++ b/mac/mcompile/mc_kmxfile.h @@ -3,7 +3,7 @@ #define MC_KMXFILE_H #include "../../common/include/km_types.h" -#include "kmx_file.h" +#include "../../common/include/kmx_file.h" #include "mcompile.h" #ifndef _KMXFILE_H diff --git a/mac/mcompile/mcompile.cpp b/mac/mcompile/mcompile.cpp index a13d04d7fa..e3ccd0353e 100644 --- a/mac/mcompile/mcompile.cpp +++ b/mac/mcompile/mcompile.cpp @@ -13,7 +13,7 @@ #include #include #include "mcompile.h" -#include "u16.h" +#include "../../common/include/km_u16.h" /** @brief convert mnemonic keyboard layout to positional keyboard layout and translate keyboard */ KMX_BOOL mac_KMX_DoConvert(LPKMX_KEYBOARD kbd, KMX_BOOL bDeadkeyConversion, int argc); diff --git a/mac/mcompile/meson.build b/mac/mcompile/meson.build new file mode 100644 index 0000000000..30e9d2e375 --- /dev/null +++ b/mac/mcompile/meson.build @@ -0,0 +1,29 @@ +project('mcompile', 'c', 'cpp', + license: 'MIT', + meson_version: '>=1.0') + +carbon = dependency('Carbon') + +deps = [carbon] + +# subdir('resources') + +cpp_files = files( + 'keymap.cpp', + 'mcompile.cpp', + 'mc_kmxfile.cpp', + 'mc_import_rules.cpp', + '../../common/cpp/km_u16.cpp', + ) + +comon_include_dir = [ + include_directories('../../common/include') +] + +mcompile = executable( + 'mcompile', + cpp_args: ['-std=c++17'], # this should be defined from resources/standard.meson.build + sources: [cpp_files], + dependencies: deps, + include_directories : comon_include_dir + ) \ No newline at end of file diff --git a/mac/mcompile/sil_sahu.kmx b/mac/mcompile/sil_sahu.kmx deleted file mode 100755 index e5548549a7b9ad70c5cb5f53fa0fd0b5d948a323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1418 zcmai!%}-NN5XDa)eh@VT{6NHnR3)`8XecX5NQ6?T&>{pXh%O4Hq)@RXP>i^6;gXdL z7j8`y_wL;KCm3V=6IdAI%CIoh-`saKBqnl`!^}B%-nlck?~%QipV294EB>J%R>c0W zT7cz)V53QDut@)|o#SEJPWT4)z(w#2d;;XUF{NeQT5@P zRKI#$)<+)oE>TXXQoGD^RnDmMbj@XJ&VQKmr!-G5W6J2Z@~BDIWrAoOWI26aDe8u( zO8?V&ST#YXBXnxhjL~b3>Ur2*=V&*u?cDOtB|~kV4y8@{SyO=+&Y#f3L$}sLzcp@U ziFtddTg1h9-FY28W0X^K?w*pa?+iB*b$7qY+2Y9}E+xFnoLE7tapo3&x7aPRzsa7> z@;I0Yc7wU#L9h_41aE_EBp_U@OEH+aj$j2yMX!G zdvA47cnqYV9j3A3@B~PcUvi4n2fqn2@J_D{z*Arxe%WiI@Ej<@&v|VMJ_}0l^Ip3T zUjSwJ1+SIh6$9M<2idB^>);uAms6xC@aG_=)| mc|#AIGIX)oLLZwbbh0@@FY7*Zvz{A`Kxf?V-e^R08s#_66QKbB diff --git a/mac/mcompile/u16.cpp b/mac/mcompile/u16.cpp deleted file mode 100644 index 2ee561e5a6..0000000000 --- a/mac/mcompile/u16.cpp +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Keyman is copyright (C) 2004 - 2024 SIL International. MIT License. - * - * Functions for u16string - */ - -#include "u16.h" -#include -#include -#include -#include "../../core/src/utfcodec.hpp" - -/** string <- wstring -* @brief Obtain a std::string from a std::wstring -* @param wstr the std::wstring to be converted -* @return a std::string -*/ -std::string string_from_wstring(std::wstring const wstr) { - return convert((const std::wstring)wstr); -} - -/** wstring <- string -* @brief Obtain a std::wstring from a std::string -* @param str the std::string to be converted -* @return a std::wstring -*/ -std::wstring wstring_from_string(std::string const str) { - return convert((const std::string)str); -} - -/** u16String <- string -* @brief Obtain a std::u16tring from a std::string -* @param str the std::string to be converted -* @return a std::u16string -*/ -std::u16string u16string_from_string(std::string const str) { - return convert((const std::string)str); -} - -/** string <- u16string -* @brief Obtain a std::string from a std::u16string -* @param str16 the std::u16string to be converted -* @return a std::string -*/ -std::string string_from_u16string(std::u16string const str16) { - return convert((const std::u16string)str16); -} - -/** wstring <- u16string -* @brief Obtain a std::wstring from a std::u16string -* @param str16 the std::u16string to be converted -* @return a std::wstring -*/ -std::wstring wstring_from_u16string(std::u16string const str16) { - return convert((const std::u16string)str16); -} - -/** u16string <- wstring -* @brief Obtain a std::u16string from a std::wstring -* @param wstr the std::wstring to be converted -* @return a std::u16string -*/ -std::u16string u16string_from_wstring(std::wstring const wstr) { - return convert((const std::wstring)wstr);; -} - -/** UTF16 (=const wchar_t*) -> std::string -> std::u16string -> UTF16 ( = char16_t*) -* @brief Convert pointer to wchar_t to pointer to char16_t and copy sz elements into dst -* @param dst destination -* @param sz nr of characters to be copied -* @param fmt source to convert and copy -* @return void -*/ -void u16sprintf(KMX_WCHAR* dst, const size_t sz, const wchar_t* fmt, ...) { - wchar_t* wbuf = new wchar_t[sz]; - va_list args; - va_start(args, fmt); - vswprintf(wbuf, sz, fmt, args); - va_end(args); - - std::u16string u16str = u16string_from_wstring(wbuf); - u16ncpy(dst, u16str.c_str(), sz); - delete[] wbuf; -} - -/** -* @brief Convert u16string to long integer -* @param str u16string beginning with the representation of an integral number. -* @param endptr Reference to the next character in str -* @param base Numerical base (radix) that determines the valid characters and their interpretation -* @return a long -*/ -long int u16tol(const KMX_WCHAR* str, KMX_WCHAR** endptr, int base) { - auto s = string_from_u16string(str); - char* t; - long int result = strtol(s.c_str(), &t, base); - if (endptr != nullptr) - *endptr = (KMX_WCHAR*)str + (t - s.c_str()); - return result; -} - -/** - * @brief Append n characters from u16string - * @param dst Pointer to the destination array - * @param src u16string to be appended - * @param max Maximum number of characters to be appended. - * @return Pointer to the destination array - */ -const KMX_WCHAR* u16ncat(KMX_WCHAR* dst, const KMX_WCHAR* src, size_t max) { - KMX_WCHAR* o = dst; - dst = (KMX_WCHAR*)u16chr(dst, 0); - // max -= (dst-o); - while (*src && max > 0) { - *dst++ = *src++; - max--; - } - if (max > 0) - *dst = 0; - return o; -} - -/** - * @brief Find last '/' or '\\' in an array of char16_t - * @param name Pointer to the source - * @return Pointer to the last slash/backslash - */ -const KMX_WCHAR* u16rchr_slash(KMX_WCHAR const* name) { - const KMX_WCHAR* cp = NULL; - cp = u16rchr(name, '\\'); - if (cp == NULL) - cp = u16rchr(name, '/'); - return cp; -} - -/** - * @brief Find last '/' or '\\' in an array of char - * @param name Pointer to the source - * @return Pointer to the last slash/backslash - */ -KMX_CHAR* strrchr_slash(KMX_CHAR* name) { - KMX_CHAR* cp = NULL; - cp = strrchr(name, '\\'); - if (cp == NULL) - cp = strrchr(name, '/'); - return cp; -} - -/** - * @brief Locate last occurrence of character in u16string - * @param p Pointer to the source - * @param ch The character to be found - * @return A pointer to the last occurrence of character in u16str - */ -const KMX_WCHAR* u16rchr(const KMX_WCHAR* p, KMX_WCHAR ch) { - const KMX_WCHAR* p_end = p + u16len(p); - - while (p_end > p) { - if (*p_end == ch) - return p_end; - p_end--; - } - return NULL; -} - -/** - * @brief Locate first occurrence of character in u16string - * @param p Pointer to the source - * @param ch The character to be found - * @return A pointer to the first occurrence of character in u16str - */ -const KMX_WCHAR* u16chr(const KMX_WCHAR* p, KMX_WCHAR ch) { - while (*p) { - if (*p == ch) - return p; - p++; - } - return ch == 0 ? p : NULL; -} - -/** -* @brief Copy the u16string pointed by src into the array pointed by dst -* @param dst Pointer to the destination -* @param src Pointer to the source to be copied -* @return Pointer to dst -*/ -const KMX_WCHAR* u16cpy(KMX_WCHAR* dst, const KMX_WCHAR* src) { - KMX_WCHAR* o = dst; - while (*src) { - *dst++ = *src++; - } - *dst = 0; - return o; -} - -/** -* @brief Copy max characters of the u16string pointed by src into the array pointed by dst -* @param dst Pointer to the destination -* @param src Pointer to the source to be copied -* @param max Maximum number of characters to be copied -* @return Pointer to dst -*/ -const KMX_WCHAR* u16ncpy(KMX_WCHAR* dst, const KMX_WCHAR* src, size_t max) { - KMX_WCHAR* o = dst; - while (*src && max > 0) { - *dst++ = *src++; - max--; - } - if (max > 0) { - *dst = 0; - } - return o; -} - -/** -* @brief Return the length of the u16string str -* @param p Pointer to the source -* @return The length of u16string -*/ -size_t u16len(const KMX_WCHAR* p) { - int i = 0; - while (*p) { - p++; - i++; - } - return i; -} - -/** -* @brief Compare two u16strings -* @param p Pointer one u16string -* @param q Pointer another u16string -* @return 0 if strings are eqaual -* ! = 0 if unequal -*/ -int u16cmp(const KMX_WCHAR* p, const KMX_WCHAR* q) { - while (*p && *q) { - if (*p != *q) - return *p - *q; - p++; - q++; - } - return *p - *q; -} - -/** -* @brief Case insensitive comparison of up to count characters in two strings -* @param p Pointer one u16string -* @param q Pointer another u16string -* @param count Maximum number of characters to compare -* @return 0 if strings are equal -* ! = 0 if unequal -*/ -int u16nicmp(const KMX_WCHAR* p, const KMX_WCHAR* q, size_t count) { - while (*p && *q && count) { - if (toupper(*p) != toupper(*q)) - return *p - *q; - p++; - q++; - count--; - } - if (count) - return *p - *q; - return 0; -} - -/** -* @brief Case insensitive comparison of two strings -* @param p Pointer one u16string -* @param q Pointer another u16string -* @return 0 if strings are equal -* ! = 0 if unequal -*/ -int u16icmp(const KMX_WCHAR* p, const KMX_WCHAR* q) { - while (*p && *q) { - if (toupper(*p) != toupper(*q)) - return *p - *q; - p++; - q++; - } - return *p - *q; -} - -/** -* @brief Comparison of up to count characters in two strings -* @param p Pointer one u16string -* @param q Pointer another u16string -* @param count Maximum number of characters to compare -* @return 0 if strings are equal -* ! = 0 if unequal -*/ -int u16ncmp(const KMX_WCHAR* p, const KMX_WCHAR* q, size_t count) { - while (*p && *q && count) { - if (*p != *q) - return *p - *q; - p++; - q++; - count--; - } - if (count) - return *p - *q; - return 0; -} - -/** -* @brief Split u16string into tokens -* @param p Pointer to u16string to parse -* @param ch the delimiter character -* @param ctx the remaining string after the first delimiter -* @return Pointer to the first token in p -*/ -KMX_WCHAR* u16tok(KMX_WCHAR* p, const KMX_WCHAR ch, KMX_WCHAR** ctx) { - if (!p) { - p = *ctx; - if (!p) - return NULL; - } - KMX_WCHAR* q = p; - while (*q && *q != ch) { - q++; - } - if (*q) { - *q = 0; - q++; - while (*q == ch) - q++; - *ctx = q; - } else { - *ctx = NULL; - } - return *p ? p : NULL; -} - -/** -* @brief Split u16string into tokens -* @param p Pointer to u16string to parse -* @param delimiters an array of delimiter characters -* @param ctx the remaining string after the first delimiter -* @return Pointer to the first token in p -*/ -KMX_WCHAR* u16tok(KMX_WCHAR* p, const KMX_WCHAR* delimiters, KMX_WCHAR** ctx) { - if (!p) { - p = *ctx; - if (!p) - return NULL; - } - - KMX_WCHAR* q = p; - while (*q && !u16chr(delimiters, *q)) { - q++; - } - if (*q) { - *q = 0; - q++; - while (*q && u16chr(delimiters, *q)) - q++; - *ctx = q; - } else { - *ctx = NULL; - } - return *p ? p : NULL; -} - -/** -* @brief Convert a u16string to a double -* @param str Pointer to u16string -* @return double value equivalent to the string -*/ -double u16tof(KMX_WCHAR* str) { - double val = 0; - int offsetdot = 0; - char digit; - - PKMX_WCHAR q = (PKMX_WCHAR)u16chr(str, '.'); - size_t pos_dot = (q - str < 0) ? u16len(str) : q - str; - - for (size_t i = 0; i < u16len(str); i++) { - digit = static_cast(towupper(*str)); - - if (i > pos_dot - 1) - offsetdot = 1; - - if (digit != '.') - val = val + ((int(digit)) - 48) * pow(10, (pos_dot - 1 - i + offsetdot)); - - str++; - } - return val; -} diff --git a/mac/mcompile/u16.h b/mac/mcompile/u16.h deleted file mode 100644 index aeafde33c0..0000000000 --- a/mac/mcompile/u16.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef U16_H -#define U16_H -#pragma once - -#include "../../common/include/km_types.h" -#include -#include -#include -#include -#include -#include - - -/** @brief Obtain a std::string from a std::wstring */ -std::string string_from_wstring(std::wstring const wstr); - -/** @brief Obtain a std::wstring from a std::string */ -std::wstring wstring_from_string(std::string const str); - -/** @brief Obtain a std::u16tring from a std::string*/ -std::u16string u16string_from_string(std::string const str); - -/** @brief Obtain a std::string from a std::u16string */ -std::string string_from_u16string(std::u16string const str16); - -/** @brief Obtain a std::wstring from a std::u16string */ -std::wstring wstring_from_u16string(std::u16string const str16); - -/** @brief Obtain a std::u16string from a std::wstring */ -std::u16string u16string_from_wstring(std::wstring const wstr); - -/** @brief Convert pointer to wchar_t to pointer to char16_t and copy sz elements into dst */ -void u16sprintf(KMX_WCHAR* dst, const size_t sz, const wchar_t* fmt, ...); - -/** @brief Convert u16string to long integer */ -long int u16tol(const KMX_WCHAR* str, KMX_WCHAR** endptr, int base); - -/** @brief Append max characters from u16string */ -const KMX_WCHAR* u16ncat(KMX_WCHAR* dst, const KMX_WCHAR* src, size_t max); - -/** @brief find last '/' or '\\' in an array of char16_t */ -const KMX_WCHAR* u16rchr_slash(KMX_WCHAR const* Name); - -/** @brief find last '/' or '\\' in an array of char */ -KMX_CHAR* strrchr_slash(KMX_CHAR* Name); - -/** @brief Locate last occurrence of character in u16string */ -const KMX_WCHAR* u16rchr(const KMX_WCHAR* p, KMX_WCHAR ch); - -/** @brief Locate first occurrence of character in u16string */ -const KMX_WCHAR* u16chr(const KMX_WCHAR* p, KMX_WCHAR ch); - -/** @brief Copy the u16string pointed to by src into the array pointed to by dst */ -const KMX_WCHAR* u16cpy(KMX_WCHAR* dst, const KMX_WCHAR* src); - -/** @brief Copy max characters of the u16string pointed to by src into the array pointed to by dst */ -const KMX_WCHAR* u16ncpy(KMX_WCHAR* dst, const KMX_WCHAR* src, size_t max); - -/** @brief Return the length of the u16string str */ -size_t u16len(const KMX_WCHAR* p); - -/** @brief Compare two u16strings */ -int u16cmp(const KMX_WCHAR* p, const KMX_WCHAR* q); - -/** @brief Case insensitive comparison of up to count characters in two strings */ -int u16nicmp(const KMX_WCHAR* p, const KMX_WCHAR* q, size_t count); - -/** @brief Case insensitive comparison of two strings */ -int u16icmp(const KMX_WCHAR* p, const KMX_WCHAR* q); - -/** @brief Comparison of up to count characters in two strings */ -int u16ncmp(const KMX_WCHAR* p, const KMX_WCHAR* q, size_t count); - -/** @brief Split u16string into tokens */ -KMX_WCHAR* u16tok(KMX_WCHAR* p, const KMX_WCHAR ch, KMX_WCHAR** ctx); - -/** @brief Split u16string into tokens */ -KMX_WCHAR* u16tok(KMX_WCHAR* p, const KMX_WCHAR* delimiters, KMX_WCHAR** ctx); - -/** @brief Convert a u16string to a double */ -double u16tof(KMX_WCHAR* str); - -#endif /* U16_H */