From 5f1485cae2ee04f9fa7b325fb506e15597ef6400 Mon Sep 17 00:00:00 2001 From: RaiKoHoff Date: Fri, 18 Sep 2020 14:06:45 +0200 Subject: [PATCH] + try: 2nd try to fix Win7 start-up crash --- language/np3_de_de/dialogs_de_de.rc | 2 +- src/DarkMode/DarkMode.cpp | 191 +++++++++++++++------------- src/DarkMode/ListViewUtil.hpp | 6 +- src/Notepad3.c | 14 +- tinyexpr/tinyexpr.c | 13 +- tinyexpr/tinyexpr.h | 2 + 6 files changed, 118 insertions(+), 110 deletions(-) diff --git a/language/np3_de_de/dialogs_de_de.rc b/language/np3_de_de/dialogs_de_de.rc index b8d3b6963..be164fa77 100644 --- a/language/np3_de_de/dialogs_de_de.rc +++ b/language/np3_de_de/dialogs_de_de.rc @@ -516,7 +516,7 @@ FONT 9, "Segoe UI", 0, 0, 0x0 BEGIN LTEXT "&Voranstellen:",IDC_STATIC,7,7,120,8 EDITTEXT 100,7,18,98,14,ES_AUTOHSCROLL - LTEXT "&Anhängen:",IDC_STATIC3,7,37,120,8 + LTEXT "&Anhängen:",IDC_STATIC2,7,37,120,8 EDITTEXT 101,7,48,98,14,ES_AUTOHSCROLL DEFPUSHBUTTON "OK",IDOK,125,7,50,14 PUSHBUTTON "Abbrechen",IDCANCEL,125,24,50,14 diff --git a/src/DarkMode/DarkMode.cpp b/src/DarkMode/DarkMode.cpp index 2852074d4..f3a132caa 100644 --- a/src/DarkMode/DarkMode.cpp +++ b/src/DarkMode/DarkMode.cpp @@ -68,15 +68,14 @@ DWORD const kSystemLibraryLoadFlags = (IsWindows8Point1OrGreater() || #pragma comment(lib, "Uxtheme.lib") #pragma comment(lib, "Dwmapi.lib") -enum IMMERSIVE_HC_CACHE_MODE +enum class IMMERSIVE_HC_CACHE_MODE { IHCM_USE_CACHED_VALUE, IHCM_REFRESH }; -typedef enum IMMERSIVE_HC_CACHE_MODE IMMERSIVE_HC_CACHE_MODE; // Insider 18334 -enum PreferredAppMode +enum class PreferredAppMode { Default, AllowDark, @@ -84,7 +83,6 @@ enum PreferredAppMode ForceLight, Max }; -typedef enum PreferredAppMode PreferredAppMode; enum WINDOWCOMPOSITIONATTRIB { @@ -127,34 +125,36 @@ struct WINDOWCOMPOSITIONATTRIBDATA { }; // ============================================================================ -using fnSetWindowCompositionAttribute = BOOL(WINAPI *)(HWND hWnd, WINDOWCOMPOSITIONATTRIBDATA *); +using fnSetWindowCompositionAttribute = BOOL(WINAPI *)(HWND hWnd, WINDOWCOMPOSITIONATTRIBDATA *); // 1809 17763 -using fnShouldAppsUseDarkMode = bool(WINAPI *)(); // ordinal 132 -using fnAllowDarkModeForWindow = bool(WINAPI *)(HWND hWnd, bool allow); // ordinal 133 -using fnAllowDarkModeForApp = bool(WINAPI *)(bool allow); // ordinal 135, in 1809 -using fnFlushMenuThemes = void(WINAPI *)(); // ordinal 136 -using fnRefreshImmersiveColorPolicyState = void(WINAPI *)(); // ordinal 104 -using fnIsDarkModeAllowedForWindow = bool(WINAPI *)(HWND hWnd); // ordinal 137 -using fnGetIsImmersiveColorUsingHighContrast = bool(WINAPI *)(IMMERSIVE_HC_CACHE_MODE mode); // ordinal 106 -using fnOpenNcThemeData = HTHEME(WINAPI *)(HWND hWnd, LPCWSTR pszClassList); // ordinal 49 +using fnShouldAppsUseDarkMode = bool(WINAPI *)(); // ordinal 132 +using fnAllowDarkModeForWindow = bool(WINAPI *)(HWND hWnd, bool allow); // ordinal 133 +using fnAllowDarkModeForApp = bool(WINAPI *)(bool allow); // ordinal 135, in 1809 +using fnFlushMenuThemes = void(WINAPI *)(); // ordinal 136 +using fnRefreshImmersiveColorPolicyState = void(WINAPI *)(); // ordinal 104 +using fnIsDarkModeAllowedForWindow = bool(WINAPI *)(HWND hWnd); // ordinal 137 +using fnGetIsImmersiveColorUsingHighContrast = bool(WINAPI *)(IMMERSIVE_HC_CACHE_MODE mode); // ordinal 106 +using fnOpenNcThemeData = HTHEME(WINAPI *)(HWND hWnd, LPCWSTR pszClassList); // ordinal 49 // 1903 18362 -using fnShouldSystemUseDarkMode = bool(WINAPI *)(); // ordinal 138 -using fnSetPreferredAppMode = PreferredAppMode(WINAPI *)(PreferredAppMode appMode); // ordinal 135, in 1903 -using fnIsDarkModeAllowedForApp = bool(WINAPI *)(); // ordinal 139 +using fnShouldSystemUseDarkMode = bool(WINAPI *)(); // ordinal 138 +using fnSetPreferredAppMode = PreferredAppMode(WINAPI *)(PreferredAppMode appMode); // ordinal 135, in 1903 +using fnIsDarkModeAllowedForApp = bool(WINAPI *)(); // ordinal 139 -fnSetWindowCompositionAttribute _SetWindowCompositionAttribute = nullptr; -fnShouldAppsUseDarkMode _ShouldAppsUseDarkMode = nullptr; -fnAllowDarkModeForWindow _AllowDarkModeForWindow = nullptr; -fnAllowDarkModeForApp _AllowDarkModeForApp = nullptr; -fnFlushMenuThemes _FlushMenuThemes = nullptr; -fnRefreshImmersiveColorPolicyState _RefreshImmersiveColorPolicyState = nullptr; -fnIsDarkModeAllowedForWindow _IsDarkModeAllowedForWindow = nullptr; -fnIsDarkModeAllowedForApp _IsDarkModeAllowedForApp = nullptr; -fnGetIsImmersiveColorUsingHighContrast _GetIsImmersiveColorUsingHighContrast = nullptr; -fnOpenNcThemeData _OpenNcThemeData = nullptr; +// ---------------------------------------------------------------------------- + +fnSetWindowCompositionAttribute _FnSetWindowCompositionAttribute = nullptr; +fnShouldAppsUseDarkMode _FnShouldAppsUseDarkMode = nullptr; +fnAllowDarkModeForWindow _FnAllowDarkModeForWindow = nullptr; +fnAllowDarkModeForApp _FnAllowDarkModeForApp = nullptr; +fnFlushMenuThemes _FnFlushMenuThemes = nullptr; +fnRefreshImmersiveColorPolicyState _FnRefreshImmersiveColorPolicyState = nullptr; +fnIsDarkModeAllowedForWindow _FnIsDarkModeAllowedForWindow = nullptr; +fnIsDarkModeAllowedForApp _FnIsDarkModeAllowedForApp = nullptr; +fnGetIsImmersiveColorUsingHighContrast _FnGetIsImmersiveColorUsingHighContrast = nullptr; +fnOpenNcThemeData _FnOpenNcThemeData = nullptr; // 1903 18362 -fnShouldSystemUseDarkMode _ShouldSystemUseDarkMode = nullptr; -fnSetPreferredAppMode _SetPreferredAppMode = nullptr; +fnShouldSystemUseDarkMode _FnShouldSystemUseDarkMode = nullptr; +fnSetPreferredAppMode _FnSetPreferredAppMode = nullptr; // ============================================================================ @@ -176,8 +176,8 @@ extern "C" bool CheckDarkModeEnabled() { extern "C" bool ShouldAppsUseDarkMode() { - if (_ShouldAppsUseDarkMode) { - return _ShouldAppsUseDarkMode() && !IsHighContrast(); + if (_FnShouldAppsUseDarkMode) { + return _FnShouldAppsUseDarkMode() && !IsHighContrast(); } return false; } @@ -186,16 +186,19 @@ extern "C" bool ShouldAppsUseDarkMode() { extern "C" bool AllowDarkModeForWindow(HWND hWnd, bool allow) { - return _bDarkModeSupported ? _AllowDarkModeForWindow(hWnd, allow) : false; + if (_FnAllowDarkModeForWindow) { + return _bDarkModeSupported ? _FnAllowDarkModeForWindow(hWnd, allow) : false; + } + return false; } // ============================================================================ extern "C" bool IsHighContrast() { - HIGHCONTRASTW highContrast = { sizeof(highContrast) }; + HIGHCONTRASTW highContrast = { sizeof(HIGHCONTRASTW) }; - return SystemParametersInfoW(SPI_GETHIGHCONTRAST, sizeof(highContrast), &highContrast, FALSE) ? + return SystemParametersInfoW(SPI_GETHIGHCONTRAST, sizeof(HIGHCONTRASTW), &highContrast, FALSE) ? (highContrast.dwFlags & HCF_HIGHCONTRASTON) : false; } // ============================================================================ @@ -203,33 +206,38 @@ extern "C" bool IsHighContrast() extern "C" void RefreshTitleBarThemeColor(HWND hWnd) { - BOOL dark = FALSE; - if (_IsDarkModeAllowedForWindow(hWnd) && - _ShouldAppsUseDarkMode() && - !IsHighContrast()) { - dark = TRUE; - } - DWORD const buildNum = GetWindowsBuildNumber(nullptr, nullptr); - if (buildNum < 18362) { - SetPropW(hWnd, L"UseImmersiveDarkModeColors", reinterpret_cast(static_cast(dark))); - } - else if (_SetWindowCompositionAttribute) { - WINDOWCOMPOSITIONATTRIBDATA data = { WCA_USEDARKMODECOLORS, &dark, sizeof(dark) }; - _SetWindowCompositionAttribute(hWnd, &data); + if (_FnShouldAppsUseDarkMode && + _FnIsDarkModeAllowedForWindow) + { + BOOL dark = FALSE; + if (_FnIsDarkModeAllowedForWindow(hWnd) && + _FnShouldAppsUseDarkMode() && + !IsHighContrast()) { + dark = TRUE; + } + DWORD const buildNum = GetWindowsBuildNumber(nullptr, nullptr); + if (buildNum < 18362) { + SetPropW(hWnd, L"UseImmersiveDarkModeColors", reinterpret_cast(static_cast(dark))); + } else if (_FnSetWindowCompositionAttribute) { + WINDOWCOMPOSITIONATTRIBDATA data = { WCA_USEDARKMODECOLORS, &dark, sizeof(dark) }; + _FnSetWindowCompositionAttribute(hWnd, &data); + } } } // ============================================================================ -extern "C" bool IsColorSchemeChangeMessage(LPARAM lParam) -{ +extern "C" bool IsColorSchemeChangeMessage(LPARAM lParam) { bool is = false; - if (lParam && CompareStringOrdinal(reinterpret_cast(lParam), -1, L"ImmersiveColorSet", -1, TRUE) == CSTR_EQUAL) + if (_FnRefreshImmersiveColorPolicyState && + _FnGetIsImmersiveColorUsingHighContrast) { - _RefreshImmersiveColorPolicyState(); - is = true; + if (lParam && CompareStringOrdinal(reinterpret_cast(lParam), -1, L"ImmersiveColorSet", -1, TRUE) == CSTR_EQUAL) { + _FnRefreshImmersiveColorPolicyState(); + is = true; + } + _FnGetIsImmersiveColorUsingHighContrast(IMMERSIVE_HC_CACHE_MODE::IHCM_REFRESH); } - _GetIsImmersiveColorUsingHighContrast(IHCM_REFRESH); return is; } // ============================================================================ @@ -244,11 +252,11 @@ extern "C" bool IsColorSchemeChangeMessageEx(UINT message, LPARAM lParam) extern "C" void AllowDarkModeForApp(bool allow) { - if (_AllowDarkModeForApp) { - _AllowDarkModeForApp(allow); + if (_FnAllowDarkModeForApp) { + _FnAllowDarkModeForApp(allow); } - else if (_SetPreferredAppMode) { - _SetPreferredAppMode(allow ? AllowDark : Default); + else if (_FnSetPreferredAppMode) { + _FnSetPreferredAppMode(allow ? PreferredAppMode::AllowDark : PreferredAppMode::Default); } } // ============================================================================ @@ -267,12 +275,12 @@ static void _FixDarkScrollBar(bool bDarkMode) hWnd = nullptr; classList = L"Explorer::ScrollBar"; } - return _OpenNcThemeData(hWnd, classList); + return _FnOpenNcThemeData(hWnd, classList); }; if (bDarkMode) addr->u1.Function = reinterpret_cast(static_cast(MyOpenThemeData)); else - addr->u1.Function = reinterpret_cast(_OpenNcThemeData); + addr->u1.Function = reinterpret_cast(_FnOpenNcThemeData); VirtualProtect(addr, sizeof(IMAGE_THUNK_DATA), oldProtect, &oldProtect); } } @@ -287,8 +295,11 @@ constexpr bool CheckBuildNumber(DWORD buildNumber) { buildNumber == 19041); // 2004 } + extern "C" void SetDarkMode(bool bEnableDarkMode) { + // keep reentrant (!) + DWORD major, minor; DWORD const buildNumber = GetWindowsBuildNumber(&major, &minor); if (buildNumber) { @@ -298,64 +309,64 @@ extern "C" void SetDarkMode(bool bEnableDarkMode) HMODULE const hUxtheme = LoadLibraryExW(L"uxtheme.dll", nullptr, kSystemLibraryLoadFlags); if (hUxtheme) { - if (!_OpenNcThemeData) { - _OpenNcThemeData = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(49))); + if (!_FnOpenNcThemeData) { + _FnOpenNcThemeData = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(49))); } - if (!_RefreshImmersiveColorPolicyState) { - _RefreshImmersiveColorPolicyState = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(104))); + if (!_FnRefreshImmersiveColorPolicyState) { + _FnRefreshImmersiveColorPolicyState = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(104))); } - if (!_GetIsImmersiveColorUsingHighContrast) { - _GetIsImmersiveColorUsingHighContrast = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(106))); + if (!_FnGetIsImmersiveColorUsingHighContrast) { + _FnGetIsImmersiveColorUsingHighContrast = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(106))); } - if (!_ShouldAppsUseDarkMode) { - _ShouldAppsUseDarkMode = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(132))); + if (!_FnShouldAppsUseDarkMode) { + _FnShouldAppsUseDarkMode = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(132))); } - if (!_AllowDarkModeForWindow) { - _AllowDarkModeForWindow = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(133))); + if (!_FnAllowDarkModeForWindow) { + _FnAllowDarkModeForWindow = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(133))); } auto const ord135 = GetProcAddress(hUxtheme, MAKEINTRESOURCEA(135)); if (buildNumber < 18334) { - if (!_AllowDarkModeForApp) { - _AllowDarkModeForApp = reinterpret_cast(ord135); + if (!_FnAllowDarkModeForApp) { + _FnAllowDarkModeForApp = reinterpret_cast(ord135); } } else { - if (!_SetPreferredAppMode) { - _SetPreferredAppMode = reinterpret_cast(ord135); + if (!_FnSetPreferredAppMode) { + _FnSetPreferredAppMode = reinterpret_cast(ord135); } } - if (!_FlushMenuThemes) { - _FlushMenuThemes = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(136))); + if (!_FnFlushMenuThemes) { + _FnFlushMenuThemes = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(136))); } - if (!_IsDarkModeAllowedForWindow) { - _IsDarkModeAllowedForWindow = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(137))); + if (!_FnIsDarkModeAllowedForWindow) { + _FnIsDarkModeAllowedForWindow = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(137))); } - if (!_IsDarkModeAllowedForApp) { - _IsDarkModeAllowedForApp = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(139))); + if (!_FnIsDarkModeAllowedForApp) { + _FnIsDarkModeAllowedForApp = reinterpret_cast(GetProcAddress(hUxtheme, MAKEINTRESOURCEA(139))); } - if (!_SetWindowCompositionAttribute) { + if (!_FnSetWindowCompositionAttribute) { HMODULE const hModuleUSR32DLL = GetModuleHandleW(L"user32.dll"); if (hModuleUSR32DLL) { - _SetWindowCompositionAttribute = reinterpret_cast(GetProcAddress(hModuleUSR32DLL, "SetWindowCompositionAttribute")); + _FnSetWindowCompositionAttribute = reinterpret_cast(GetProcAddress(hModuleUSR32DLL, "SetWindowCompositionAttribute")); } } _UserSetDarkMode = bEnableDarkMode; - if (_OpenNcThemeData && - _RefreshImmersiveColorPolicyState && - _ShouldAppsUseDarkMode && - _AllowDarkModeForWindow && - (_AllowDarkModeForApp || _SetPreferredAppMode) && - _FlushMenuThemes && - _IsDarkModeAllowedForWindow) + if (_FnOpenNcThemeData && + _FnRefreshImmersiveColorPolicyState && + _FnShouldAppsUseDarkMode && + _FnAllowDarkModeForWindow && + (_FnAllowDarkModeForApp || _FnSetPreferredAppMode) && + _FnFlushMenuThemes && + _FnIsDarkModeAllowedForWindow) { AllowDarkModeForApp(_UserSetDarkMode); - _RefreshImmersiveColorPolicyState(); - _bDarkModeSupported = _ShouldAppsUseDarkMode() && !IsHighContrast(); // (!) after _RefreshImmersiveColorPolicyState() - _FlushMenuThemes(); + _FnRefreshImmersiveColorPolicyState(); + _bDarkModeSupported = _FnShouldAppsUseDarkMode() && !IsHighContrast(); // (!) after _RefreshImmersiveColorPolicyState() + _FnFlushMenuThemes(); _FixDarkScrollBar(_UserSetDarkMode); } } diff --git a/src/DarkMode/ListViewUtil.hpp b/src/DarkMode/ListViewUtil.hpp index 684a3caf9..a7f7a3fce 100644 --- a/src/DarkMode/ListViewUtil.hpp +++ b/src/DarkMode/ListViewUtil.hpp @@ -2,6 +2,8 @@ #ifdef D_NP3_WIN10_DARK_MODE +#define UINT_NM_CUSTOMDRAW (0xFFFFFFF4) // NM_CUSTOMDRAW = (0U - 12) + struct SubclassInfo { COLORREF headerTextColor; }; @@ -17,7 +19,7 @@ extern "C" void InitListView(HWND hListView) { case WM_NOTIFY: { - if (reinterpret_cast(lParam)->code == NM_CUSTOMDRAW) + if (reinterpret_cast(lParam)->code == UINT_NM_CUSTOMDRAW) { LPNMCUSTOMDRAW nmcd = reinterpret_cast(lParam); switch (nmcd->dwDrawStage) @@ -104,7 +106,7 @@ extern "C" void InitTreeView(HWND hTreeView) { case WM_NOTIFY: { - if (reinterpret_cast(lParam)->code == NM_CUSTOMDRAW) + if (reinterpret_cast(lParam)->code == UINT_NM_CUSTOMDRAW) { LPNMCUSTOMDRAW nmcd = reinterpret_cast(lParam); switch (nmcd->dwDrawStage) diff --git a/src/Notepad3.c b/src/Notepad3.c index 37804bf56..e91492b6f 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -8062,11 +8062,7 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) SciCall_CopyText((DocPos)StringCchLenA(chBuf,80), chBuf); } else if (s_iExprError > 0) { -#ifdef _WIN64 - StringCchPrintfA(chBuf, COUNTOF(chBuf), "^[%ll]", s_iExprError); -#else - StringCchPrintfA(chBuf, COUNTOF(chBuf), "^[%i]", s_iExprError); -#endif + StringCchPrintfA(chBuf, COUNTOF(chBuf), "^[" TE_XINT_FMT "]", s_iExprError); SciCall_CopyText((DocPos)StringCchLenA(chBuf,80), chBuf); } else { @@ -8199,7 +8195,7 @@ void ParseCommandLine() lp1 + CSTRLEN(L"appid="), len - CSTRLEN(L"appid=")); StrTrim(Settings2.AppUserModelID, L" "); if (StrIsEmpty(Settings2.AppUserModelID)) { - StringCchCopy(Settings2.AppUserModelID, COUNTOF(Settings2.AppUserModelID), _W("Rizonesoft." SAPPNAME)); + StringCchCopy(Settings2.AppUserModelID, COUNTOF(Settings2.AppUserModelID), _W("Rizonesoft.") _W(SAPPNAME)); } } else if (StrCmpNI(lp1, L"sysmru=", CSTRLEN(L"sysmru=")) == 0) { @@ -9148,11 +9144,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) StringCchPrintf(tchExpression, COUNTOF(tchExpression), L"%.6G", s_dExpression); } else if (s_iExprError > 0) { -#ifdef _WIN64 - StringCchPrintf(tchExpression, COUNTOF(tchExpression), L"^[%ll]", s_iExprError); -#else - StringCchPrintf(tchExpression, COUNTOF(tchExpression), L"^[%i]", s_iExprError); -#endif + StringCchPrintf(tchExpression, COUNTOF(tchExpression), L"^[" _W(TE_XINT_FMT) L"]", s_iExprError); } if (bForceRedraw || (!s_iExprError || (s_iExErr != s_iExprError))) diff --git a/tinyexpr/tinyexpr.c b/tinyexpr/tinyexpr.c index e5f6381c9..78da5c8cf 100644 --- a/tinyexpr/tinyexpr.c +++ b/tinyexpr/tinyexpr.c @@ -53,7 +53,6 @@ For log = natural log uncomment the next line. */ #define INFINITY (1.0/0.0) #endif - enum { TOK_NULL = TE_CLOSURE7+1, TOK_ERROR, TOK_END, TOK_SEP, TOK_OPEN, TOK_CLOSE, TOK_NUMBER, TOK_VARIABLE, TOK_INFIX @@ -184,17 +183,19 @@ static te_expr *new_expr(const int type, const te_expr *parameters[]) { const int psize = sizeof(void*) * arity; const int size = (sizeof(te_expr) - sizeof(void*)) + psize + (IS_CLOSURE(type) ? sizeof(void*) : 0); te_expr *ret = malloc(size); - memset(ret, 0, size); + if (ret) { + memset(ret, 0, size); #endif - if (arity && parameters) { + if (arity && parameters) { #if defined(TINYEXPR_USE_STATIC_MEMORY) - memcpy(ret->parameters, parameters, sizeof(void*)*TINYEXPR_MAX_PARAMETERS); + memcpy(ret->parameters, parameters, sizeof(void*) * TINYEXPR_MAX_PARAMETERS); #else memcpy(ret->parameters, parameters, psize); #endif + } + ret->type = type; + ret->bound = 0; } - ret->type = type; - ret->bound = 0; return ret; } diff --git a/tinyexpr/tinyexpr.h b/tinyexpr/tinyexpr.h index e97da4ebb..8e74c17d0 100644 --- a/tinyexpr/tinyexpr.h +++ b/tinyexpr/tinyexpr.h @@ -42,8 +42,10 @@ extern "C" { #ifdef _WIN64 typedef __int64 te_xint_t; + #define TE_XINT_FMT "%lli" #else typedef int te_xint_t; + #define TE_XINT_FMT "%i" #endif typedef struct te_expr {