Diff for /np2/win9x/oemtext.cpp between versions 1.5 and 1.7

version 1.5, 2005/03/20 13:12:49 version 1.7, 2005/05/15 18:26:47
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "oemtext.h"  #include        "oemtext.h"
   #include        "textcnv.h"
   
   
 #if defined(OSLANG_UTF8)  // Use WinAPI version
 UINT oemtext_sjistooem(OEMCHAR *dst, UINT dcnt, const char *src, UINT scnt) {  
   
   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, (WCHAR *)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, (WCHAR *)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;          UINT    leng;
         UINT16  *ucs2;          UINT16  *ucs2;
Line 11  UINT oemtext_sjistooem(OEMCHAR *dst, UIN Line 94  UINT oemtext_sjistooem(OEMCHAR *dst, UIN
   
         (void)scnt;          (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) {          if (leng == 0) {
                 return(0);                  return(0);
         }          }
Line 19  UINT oemtext_sjistooem(OEMCHAR *dst, UIN Line 102  UINT oemtext_sjistooem(OEMCHAR *dst, UIN
         if (ucs2 == NULL) {          if (ucs2 == NULL) {
                 return(0);                  return(0);
         }          }
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, -1, ucs2, leng);          MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, scnt, (WCHAR *)ucs2, leng);
           if (((SINT)scnt) < 0) {
                   leng = (UINT)-1;
           }
         ret = codecnv_ucs2toutf8(dst, dcnt, ucs2, leng);          ret = codecnv_ucs2toutf8(dst, dcnt, ucs2, leng);
         _MFREE(ucs2);          _MFREE(ucs2);
         return(ret);          return(ret);
 }  }
   
 UINT oemtext_oemtosjis(char *dst, UINT dcnt, const OEMCHAR *src, UINT scnt) {  UINT oemtext_utf8tosjis(char *dst, UINT dcnt, const char *src, UINT scnt) {
   
         UINT    leng;          UINT    leng;
         UINT16  *ucs2;          UINT16  *ucs2;
Line 33  UINT oemtext_oemtosjis(char *dst, UINT d Line 119  UINT oemtext_oemtosjis(char *dst, UINT d
   
         (void)scnt;          (void)scnt;
   
         leng = codecnv_utf8toucs2(NULL, 0, src, (UINT)-1);          leng = codecnv_utf8toucs2(NULL, 0, src, scnt);
         if (leng == 0) {          if (leng == 0) {
                 return(0);                  return(0);
         }          }
Line 41  UINT oemtext_oemtosjis(char *dst, UINT d Line 127  UINT oemtext_oemtosjis(char *dst, UINT d
         if (ucs2 == NULL) {          if (ucs2 == NULL) {
                 return(0);                  return(0);
         }          }
         codecnv_utf8toucs2(ucs2, leng, src, (UINT)-1);          codecnv_utf8toucs2(ucs2, leng, src, scnt);
         ret = WideCharToMultiByte(CP_ACP, 0, ucs2, leng, dst, dcnt, NULL, NULL);          if (((SINT)scnt) < 0) {
                   leng = (UINT)-1;
           }
           ret = WideCharToMultiByte(CP_ACP, 0, (WCHAR *)ucs2, leng, dst, dcnt, NULL, NULL);
         _MFREE(ucs2);          _MFREE(ucs2);
         return(ret);          return(ret);
 }  }
 #elif defined(OSLANG_UCS2)  
 UINT oemtext_sjistooem(OEMCHAR *dst, UINT dcnt, const char *src, UINT scnt) {  
   
         return(MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, src, -1, dst, dcnt));  
 }  
   
 UINT oemtext_oemtosjis(char *dst, UINT dcnt, const OEMCHAR *src, UINT scnt) {  // ---- textcnv
   
         return(WideCharToMultiByte(CP_ACP, 0, src, -1, dst, dcnt, NULL, NULL));  UINT textcnv_getinfo(TCINF *inf, const UINT8 *hdr, UINT hdrsize) {
 }  
           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  #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;
           }
   
   #if defined(OSLANG_SJIS)
           switch(textcode) {
                   case TEXTCNV_DEFAULT:
                   case TEXTCNV_SJIS:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           break;
   
                   case TEXTCNV_UTF8:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           info.tooem = (TCTOOEM)oemtext_utf8tosjis;
                           info.fromoem = (TCFROMOEM)oemtext_sjistoutf8;
                           break;
   
                   case TEXTCNV_UCS2:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           info.tooem = (TCTOOEM)oemtext_ucs2tosjis;
                           info.fromoem = (TCFROMOEM)oemtext_sjistoucs2;
                           break;
           }
   #elif defined(OSLANG_EUC)
           switch(textcode) {
                   case TEXTCNV_DEFAULT:
                   case TEXTCNV_EUC:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           break;
           }
   #elif defined(OSLANG_UTF8)
           switch(textcode) {
                   case TEXTCNV_DEFAULT:
                   case TEXTCNV_SJIS:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           info.tooem = (TCTOOEM)oemtext_sjistoutf8;
                           info.fromoem = (TCFROMOEM)oemtext_utf8tosjis;
                           break;
   
                   case TEXTCNV_UTF8:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           break;
   
                   case TEXTCNV_UCS2:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           info.tooem = (TCTOOEM)codecnv_ucs2toutf8;
                           info.fromoem = (TCFROMOEM)codecnv_utf8toucs2;
                           break;
           }
   #elif defined(OSLANG_UCS2)
           switch(textcode) {
                   case TEXTCNV_DEFAULT:
                   case TEXTCNV_SJIS:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           info.tooem = (TCTOOEM)oemtext_sjistoucs2;
                           info.fromoem = (TCFROMOEM)oemtext_ucs2tosjis;
                           break;
   
                   case TEXTCNV_UTF8:
                           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;
           }
   #else   // defined(OSLANG_*)
           switch(textcode) {
                   case TEXTCNV_DEFAULT:
                           info.caps = TEXTCNV_READ | TEXTCNV_WRITE;
                           break;
           }
   #endif  // defined(OSLANG_*)
           if (inf) {
                   *inf = info;
           }
           return(info.caps);
   }
   

Removed from v.1.5  
changed lines
  Added in v.1.7


RetroPC.NET-CVS <cvs@retropc.net>