--- np2/codecnv/textcnv.c 2005/03/19 18:54:57 1.1 +++ np2/codecnv/textcnv.c 2005/04/01 15:35:48 1.2 @@ -3,70 +3,91 @@ #include "textcnv.h" -BRESULT textcnv_tooem(UINT code, TCTOOEM *tcto) { +UINT textcnv_getinfo(TCINF *inf, const UINT8 *hdr, UINT hdrsize) { - TCTOOEM fn; + UINT textcode; + TCINF info; + + textcode = TEXTCNV_DEFAULT; + ZeroMemory(&info, sizeof(info)); + if ((hdrsize >= 3) && + (hdr[0] == 0xef) && (hdr[1] == 0xbb) && (hdr[2] == 0xbf)) { + // UTF-8 + textcode = TEXTCNV_UTF8; + info.width = 1; + info.hdrsize = 3; + } + else if ((hdrsize >= 2) && (hdr[0] == 0xff) && (hdr[1] == 0xfe)) { + // UCSLE + textcode = TEXTCNV_UCS2; +#if defined(BYTESEX_BIG) + info.xendian = 1; +#endif + info.width = 2; + info.hdrsize = 2; + } + else if ((hdrsize >= 2) && (hdr[0] == 0xfe) && (hdr[1] == 0xff)) { + // UCS2BE + // UCSLE + textcode = TEXTCNV_UCS2; +#if defined(BYTESEX_LITTLE) + info.xendian = 1; +#endif + info.width = 2; + info.hdrsize = 2; + } + else { + info.width = 1; + } - fn = NULL; #if defined(OSLANG_SJIS) - switch(code) { + switch(textcode) { case TEXTCNV_DEFAULT: case TEXTCNV_SJIS: + info.caps = TEXTCNV_READ | TEXTCNV_WRITE; break; - - default: - return(FAILURE); } #elif defined(OSLANG_EUC) - switch(code) { + switch(textcode) { case TEXTCNV_DEFAULT: case TEXTCNV_EUC: + info.caps = TEXTCNV_READ | TEXTCNV_WRITE; break; - - default: - return(FAILURE); } #elif defined(OSLANG_UTF8) - switch(code) { + switch(textcode) { case TEXTCNV_UTF8: + info.caps = TEXTCNV_READ | TEXTCNV_WRITE; break; case TEXTCNV_UCS2: - fn = (TCTOOEM)codecnv_ucs2toutf8; + info.caps = TEXTCNV_READ | TEXTCNV_WRITE; + info.tooem = (TCTOOEM)codecnv_ucs2toutf8; + info.fromoem = (TCFROMOEM)codecnv_utf8toucs2; break; - - default: - return(FAILURE); } #elif defined(OSLANG_UCS2) - switch(code) { + switch(textcode) { case TEXTCNV_UTF8: - fn = (TCTOOEM)codecnv_utf8toucs2; + info.caps = TEXTCNV_READ | TEXTCNV_WRITE; + info.tooem = (TCTOOEM)codecnv_utf8toucs2; + info.fromoem = (TCFROMOEM)codecnv_ucs2toutf8; break; case TEXTCNV_UCS2: + info.caps = TEXTCNV_READ | TEXTCNV_WRITE; break; - - default: - return(FAILURE); } -#else - switch(code) { +#else // defined(OSLANG_*) + switch(textcode) { case TEXTCNV_DEFAULT: + info.caps = TEXTCNV_READ | TEXTCNV_WRITE; break; - - default: - return(FAILURE); } -#endif - if (tcto) { - *tcto = fn; +#endif // defined(OSLANG_*) + if (inf) { + *inf = info; } - return(SUCCESS); -} - -BRESULT textcnv_fromoem(UINT code, TCFROMOEM *tcfo) { - - return(FAILURE); + return(info.caps); }