From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/nu/ns_wc.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Src/nu/ns_wc.h (limited to 'Src/nu/ns_wc.h') diff --git a/Src/nu/ns_wc.h b/Src/nu/ns_wc.h new file mode 100644 index 00000000..5d3fecfd --- /dev/null +++ b/Src/nu/ns_wc.h @@ -0,0 +1,67 @@ +#pragma once +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +__inline int MultiByteToWideCharSZ( + UINT CodePage, // code page + DWORD dwFlags, // character-type options + LPCSTR lpMultiByteStr, // string to map + int cbMultiByte, // number of bytes in string + LPWSTR lpWideCharStr, // wide-character buffer + int cchWideChar // size of buffer +) +{ + int converted=0; + if (cchWideChar == 0) + return MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar); + converted = MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar-1); + if (!converted) + { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + lpWideCharStr[cchWideChar-1]=0; + return cchWideChar; + } + else + return 0; + } + lpWideCharStr[converted]=0; + return converted+1; +} + +__inline int WideCharToMultiByteSZ( + UINT CodePage, // code page + DWORD dwFlags, // performance and mapping flags + LPCWSTR lpWideCharStr, // wide-character string + int cchWideChar, // number of chars in string + LPSTR lpMultiByteStr, // buffer for new string + int cbMultiByte, // size of buffer + LPCSTR lpDefaultChar, // default for unmappable chars + LPBOOL lpUsedDefaultChar // set when default char used +) +{ + int converted=0; + if (cbMultiByte == 0) + return WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar); + converted= WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte-1, lpDefaultChar, lpUsedDefaultChar); + if (!converted) + { + if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) + { + lpMultiByteStr[cbMultiByte-1]=0; + return cbMultiByte; + } + else + return 0; + } + lpMultiByteStr[converted]=0; + return converted+1; +} + +#ifdef __cplusplus +} +#endif \ No newline at end of file -- cgit