Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/ttpcmn/ttcmn.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 7412 by zmatsuo, Mon Jan 28 13:33:57 2019 UTC revision 7462 by zmatsuo, Sat Mar 9 17:32:42 2019 UTC
# Line 1582  int WINAPI CommBinaryBuffOut(PComVar cv, Line 1582  int WINAPI CommBinaryBuffOut(PComVar cv,
1582          return i;          return i;
1583  }  }
1584    
1585    // 内部コード(CodePage)をUTF-32(UTF-16LE)へ変換する
1586    static unsigned int SJIS2UTF32(WORD KCode, int CodePage)
1587    {
1588            unsigned int c;
1589    
1590            // 内部コード(CodePage)からUTF-16LEへ変換する
1591            if (CodePage == 932) {
1592                    c = CP932ToUTF32(KCode);
1593            } else {
1594                    unsigned char buf[3];
1595                    wchar_t wchar;
1596                    int ret;
1597                    int len = 0;
1598                    if (KCode < 0x100) {
1599                            buf[0] = KCode & 0xff;
1600                            len = 1;
1601                    } else {
1602                            buf[0] = KCode >> 8;
1603                            buf[1] = KCode & 0xff;
1604                            len = 2;
1605                    }
1606                    ret = MultiByteToWideChar(CodePage, MB_ERR_INVALID_CHARS, buf, len, &wchar, 1);
1607                    if (ret <= 0) {
1608                            c = 0;
1609                    } else {
1610                            c = (unsigned int)wchar;
1611                    }
1612            }
1613            if (c <= 0) {
1614                    // 変換失敗
1615                    c = 0xfffd; // U+FFFD: Replacement Character
1616            }
1617    
1618            return c;
1619    }
1620    
1621    // 内部コード(CodePage)をUTF-8へ出力する
1622  static int OutputTextUTF8(WORD K, char *TempStr, PComVar cv)  static int OutputTextUTF8(WORD K, char *TempStr, PComVar cv)
1623  {  {
1624            int CodePage = *cv->CodePage;
1625          unsigned int code;          unsigned int code;
1626          int outlen;          int outlen;
         int TempLen = 0;  
   
         code = SJIS2UTF8(K, &outlen, *cv->CodePage);  
         switch (outlen) {  
           case 4:  
                 TempStr[TempLen++] = (code >> 24) & 0xff;  
           case 3:  
                 TempStr[TempLen++] = (code >> 16) & 0xff;  
           case 2:  
                 TempStr[TempLen++] = (code >> 8) & 0xff;  
           case 1:  
                 TempStr[TempLen++] = code & 0xff;  
         }  
1627    
1628          return TempLen;          code = SJIS2UTF32(K, CodePage);
1629            outlen = UTF32ToUTF8(code, TempStr, 4);
1630            return outlen;
1631  }  }
1632    
1633  //  //

Legend:
Removed from v.7412  
changed lines
  Added in v.7462

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26