TCHAR *cfgGetStringElem(const config_setting_t * setting, int index, TCHAR *outStr) { const char *value; value = config_setting_get_string_elem(setting, index); return UTF8_Decode(value, outStr, CONFIG_WCHAR_MAXSTRING); }
SystemDialogResult CSystemUtilsWindows::SystemDialog(SystemDialogType type, const std::string& title, const std::string& message) { unsigned int windowsType = 0; std::wstring windowsMessage = UTF8_Decode(message); std::wstring windowsTitle = UTF8_Decode(title); switch (type) { case SDT_INFO: default: windowsType = MB_ICONINFORMATION|MB_OK; break; case SDT_WARNING: windowsType = MB_ICONWARNING|MB_OK; break; case SDT_ERROR: windowsType = MB_ICONERROR|MB_OK; break; case SDT_YES_NO: windowsType = MB_ICONQUESTION|MB_YESNO; break; case SDT_OK_CANCEL: windowsType = MB_ICONWARNING|MB_OKCANCEL; break; } switch (MessageBoxW(NULL, windowsMessage.c_str(), windowsTitle.c_str(), windowsType)) { case IDOK: return SDR_OK; case IDCANCEL: return SDR_CANCEL; case IDYES: return SDR_YES; case IDNO: return SDR_NO; default: break; } return SDR_OK; }
TCHAR *cfgGetString(const config_setting_t *setting, const TCHAR *name, TCHAR *outStr) { char *value; char uName[CONFIG_UTF8_MAXSTRING]; UTF8_Encode(name, uName, CONFIG_UTF8_MAXSTRING); if(!config_setting_lookup_string(setting, uName, &value)) { wcscpy_s(ConfigErrorString, CONFIG_ERROR_MAXSTRING, name); ConfigError = TRUE; return NULL; } if(!outStr) return UTF8_Decode_Dyn(value); return UTF8_Decode(value, outStr, CONFIG_WCHAR_MAXSTRING); }
static char *utf8_to_ansi(struct InstData *data, STRPTR src) { static struct KeyMap *keymap; CONST_STRPTR ptr; STRPTR dst; ULONG octets, strlength; ENTER(); keymap = AskKeyMapDefault(); strlength = 0; ptr = src; do { WCHAR wc; UBYTE c; ptr += (octets = UTF8_Decode(ptr, &wc)); c = ToANSI(wc, keymap); strlength++; /* ToANSI() returns '?' if there is not matching code point in the current keymap */ if (c == '?' && wc != '?') { /* If direct conversion fails try compatibility decomposition (but without recursion) */ CONST_WSTRPTR p = UCS4_Decompose(wc); if (p) { while (p[1]) { strlength++; p++; } } } } while (octets > 0); dst = MyAllocPooled(data->mypool, strlength); if (dst) { STRPTR bufptr = dst; ptr = src; do { WCHAR wc; UBYTE c; ptr += (octets = UTF8_Decode(ptr, &wc)); c = ToANSI(wc, keymap); *bufptr++ = c; if (c == '?' && wc != '?') { CONST_WSTRPTR p = UCS4_Decompose(wc); if (p) { bufptr--; while (*p) { *bufptr++ = ToANSI(*p, keymap); p++; } } } } while (octets > 0); MyFreePooled(data->mypool, src); // Free original buffer } if(dst == NULL) dst = src; RETURN(dst); return dst; }