--- np2/wince/oemtext.cpp 2004/06/21 02:01:33 1.1 +++ np2/wince/oemtext.cpp 2005/04/01 15:35:50 1.3 @@ -1,7 +1,91 @@ #include "compiler.h" +#include "oemtext.h" -#if defined(OSLANG_UTF8) -UINT oemtext_sjis2oem(char *dst, UINT dcnt, const char *src, UINT scnt) { + +// Use WinAPI version + + +UINT oemtext_sjistoucs2(UINT16 *dst, UINT dcnt, const char *src, UINT scnt) { + + int srccnt; + int dstcnt; + int r; + + if (((SINT)scnt) > 0) { + srccnt = scnt; + } + else { + srccnt = -1; + } + if (((SINT)dcnt) > 0) { + dstcnt = dcnt; + if (srccnt < 0) { + dstcnt = dstcnt - 1; + if (dstcnt == 0) { + if (dst) { + dst[0] = '\0'; + } + return(1); + } + } + } + else { + dstcnt = 0; + } + r = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, srccnt, dst, dstcnt); + if ((r == 0) && (dstcnt != 0)) { + r = dstcnt; + if (srccnt < 0) { + if (dst) { + dst[r] = '\0'; + } + r++; + } + } + return(r); +} + +UINT oemtext_ucs2tosjis(char *dst, UINT dcnt, const UINT16 *src, UINT scnt) { + + int srccnt; + int dstcnt; + int r; + + if (((SINT)scnt) > 0) { + srccnt = scnt; + } + else { + srccnt = -1; + } + if (((SINT)dcnt) > 0) { + dstcnt = dcnt; + if (srccnt < 0) { + dstcnt = dstcnt - 1; + if (dstcnt == 0) { + if (dst) { + dst[0] = '\0'; + } + return(1); + } + } + } + else { + dstcnt = 0; + } + r = WideCharToMultiByte(CP_ACP, 0, src, srccnt, dst, dstcnt, NULL, NULL); + if ((r == 0) && (dstcnt != 0)) { + r = dstcnt; + if (srccnt < 0) { + if (dst) { + dst[r] = '\0'; + } + r++; + } + } + return(r); +} + +UINT oemtext_sjistoutf8(char *dst, UINT dcnt, const char *src, UINT scnt) { UINT leng; UINT16 *ucs2; @@ -9,7 +93,7 @@ UINT oemtext_sjis2oem(char *dst, UINT dc (void)scnt; - leng = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, -1, NULL, 0); + leng = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, scnt, NULL, 0); if (leng == 0) { return(0); } @@ -17,13 +101,16 @@ UINT oemtext_sjis2oem(char *dst, UINT dc if (ucs2 == NULL) { return(0); } - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, -1, ucs2, leng); - ret = ucscnv_ucs2toutf8(dst, dcnt, ucs2, leng); + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, scnt, ucs2, leng); + if (((SINT)scnt) < 0) { + leng = (UINT)-1; + } + ret = codecnv_ucs2toutf8(dst, dcnt, ucs2, leng); _MFREE(ucs2); return(ret); } -UINT oemtext_oem2sjis(char *dst, UINT dcnt, const char *src, UINT scnt) { +UINT oemtext_utf8tosjis(char *dst, UINT dcnt, const char *src, UINT scnt) { UINT leng; UINT16 *ucs2; @@ -31,7 +118,7 @@ UINT oemtext_oem2sjis(char *dst, UINT dc (void)scnt; - leng = ucscnv_utf8toucs2(NULL, 0, src, (UINT)-1); + leng = codecnv_utf8toucs2(NULL, 0, src, scnt); if (leng == 0) { return(0); } @@ -39,11 +126,12 @@ UINT oemtext_oem2sjis(char *dst, UINT dc if (ucs2 == NULL) { return(0); } - ucscnv_utf8toucs2(ucs2, leng, src, (UINT)-1); + codecnv_utf8toucs2(ucs2, leng, src, scnt); + if (((SINT)scnt) < 0) { + leng = (UINT)-1; + } ret = WideCharToMultiByte(CP_ACP, 0, ucs2, leng, dst, dcnt, NULL, NULL); _MFREE(ucs2); return(ret); - } -#endif