From 6db050eb2d23035c71971cc88219211bbacca23d Mon Sep 17 00:00:00 2001 From: sje Date: Thu, 23 Nov 2006 03:22:18 +0000 Subject: use ansi font services if unicode unavailable bigfixes to allow pure ansi build git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@56 4f64403b-2f21-0410-a795-97e2b3489a10 --- tipper/str_utils.cpp | 203 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 tipper/str_utils.cpp (limited to 'tipper/str_utils.cpp') diff --git a/tipper/str_utils.cpp b/tipper/str_utils.cpp new file mode 100644 index 0000000..b226bfe --- /dev/null +++ b/tipper/str_utils.cpp @@ -0,0 +1,203 @@ +#include "common.h" +#include "str_utils.h" + +int code_page = CP_ACP; + +void set_codepage() { + if(ServiceExists(MS_LANGPACK_GETCODEPAGE)) + code_page = CallService(MS_LANGPACK_GETCODEPAGE, 0, 0); +} + +bool a2w(const char *as, wchar_t *buff, int bufflen){ + if(as) MultiByteToWideChar(code_page, 0, as, -1, buff, bufflen); + return true; +} + +bool w2a(const wchar_t *ws, char *buff, int bufflen) { + if(ws) WideCharToMultiByte(code_page, 0, ws, -1, buff, bufflen, 0, 0); + return true; +} + +bool u2w(const char *us, wchar_t *buff, int bufflen) { + if(us) MultiByteToWideChar(CP_UTF8, 0, us, -1, buff, bufflen); + return true; +} + +bool w2u(const wchar_t *ws, char *buff, int bufflen) { + if(ws) WideCharToMultiByte(CP_UTF8, 0, ws, -1, buff, bufflen, 0, 0); + return true; +} + +bool a2u(const char *as, char *buff, int bufflen) { + if(!as) return false; + + wchar_t *ws = a2w(as); + if(ws) WideCharToMultiByte(CP_UTF8, 0, ws, -1, buff, bufflen, 0, 0); + free(ws); + return true; +} + +bool u2a(const char *us, char *buff, int bufflen) { + if(!us) return false; + + wchar_t *ws = u2w(us); + if(ws) WideCharToMultiByte(code_page, 0, ws, -1, buff, bufflen, 0, 0); + free(ws); + return true; +} + + +bool t2w(const TCHAR *ts, wchar_t *buff, int bufflen) { +#ifdef _UNICODE + wcsncpy(buff, ts, bufflen); + return true; +#else + return a2w(ts, buff, bufflen); +#endif +} + +bool w2t(const wchar_t *ws, TCHAR *buff, int bufflen) { +#ifdef _UNICODE + wcsncpy(buff, ws, bufflen); + return true; +#else + return w2a(ws, buff, bufflen); +#endif +} + +bool t2a(const TCHAR *ts, char *buff, int bufflen) { +#ifdef _UNICODE + return w2a(ts, buff, bufflen); +#else + strncpy(buff, ts, bufflen); + return true; +#endif +} + +bool a2t(const char *as, TCHAR *buff, int bufflen) { +#ifdef _UNICODE + return a2w(as, buff, bufflen); +#else + strncpy(buff, as, bufflen); + return true; +#endif +} + +bool t2u(const TCHAR *ts, char *buff, int bufflen) { +#ifdef _UNICODE + return w2u(ts, buff, bufflen); +#else + return a2u(ts, buff, bufflen); +#endif +} + +bool u2t(const char *us, TCHAR *buff, int bufflen) { +#ifdef _UNICODE + return u2w(us, buff, bufflen); +#else + return u2a(us, buff, bufflen); +#endif +} + +wchar_t *u2w(const char *us) { + if(us) { + int size = MultiByteToWideChar(CP_UTF8, 0, us, -1, 0, 0); + wchar_t *buff = (wchar_t *)malloc(size * sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0, us, -1, buff, size); + return buff; + } else + return 0; +} + +char *w2u(const wchar_t *ws) { + if(ws) { + int size = WideCharToMultiByte(CP_UTF8, 0, ws, -1, 0, 0, 0, 0); + char *buff = (char *)malloc(size); + WideCharToMultiByte(CP_UTF8, 0, ws, -1, buff, size, 0, 0); + return buff; + } else + return 0; +} + +wchar_t *a2w(const char *as) { + int size = MultiByteToWideChar(code_page, 0, as, -1, 0, 0); + wchar_t *buff = (wchar_t *)malloc(size * sizeof(wchar_t)); + MultiByteToWideChar(code_page, 0, as, -1, buff, size); + return buff; +} + +char *w2a(const wchar_t *ws) { + int size = WideCharToMultiByte(code_page, 0, ws, -1, 0, 0, 0, 0); + char *buff = (char *)malloc(size); + WideCharToMultiByte(code_page, 0, ws, -1, buff, size, 0, 0); + return buff; +} + +char *u2a(const char *utfs) { + wchar_t *ws = u2w(utfs); + char *ret = w2a(ws); + free(ws); + return ret; +} + +char *a2u(const char *as) { + wchar_t *ws = a2w(as); + char *ret = w2u(ws); + free(ws); + return ret; +} + +TCHAR *w2t(const wchar_t *ws) { +#ifdef _UNICODE + return wcsdup(ws); +#else + return w2a(ws); +#endif +} + +wchar_t *t2w(const TCHAR *ts) { +#ifdef _UNICODE + return _tcsdup(ts); +#else + return a2w(ts); +#endif +} + + +char *t2a(const TCHAR *ts) { +#ifdef _UNICODE + return w2a(ts); +#else + return _strdup(ts); +#endif +} + +TCHAR *a2t(const char *as) { +#ifdef _UNICODE + return a2w(as); +#else + return _strdup(as); +#endif +} + +TCHAR *u2t(const char *utfs) { +#ifdef _UNICODE + return u2w(utfs); +#else + wchar_t *ws = u2w(utfs); + char *ret = w2a(ws); + free(ws); + return ret; +#endif +} + +char *t2u(const TCHAR *ts) { +#ifdef _UNICODE + return w2u(ts); +#else + wchar_t *ws = a2w(ts); + char *ret = w2u(ws); + free(ws); + return ret; +#endif +} -- cgit v1.2.3