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 3438 by doda, Thu Jun 4 11:52:11 2009 UTC revision 3442 by doda, Sat Jun 6 11:16:25 2009 UTC
# Line 1119  int FAR PASCAL CommBinaryOut(PComVar cv, Line 1119  int FAR PASCAL CommBinaryOut(PComVar cv,
1119          return i;          return i;
1120  }  }
1121    
1122  static void OutputTextUTF8(WORD K, char *TempStr, int *TempLenSrc, PComVar cv)  static int OutputTextUTF8(WORD K, char *TempStr, PComVar cv)
1123  {  {
1124          unsigned int code;          unsigned int code;
1125          int byte;          int outlen;
1126          int TempLen = *TempLenSrc;          int TempLen = 0;
1127    
1128          code = SJIS2UTF8(K, &byte, cv->Locale);          code = SJIS2UTF8(K, &outlen, cv->Locale);
1129          if (byte == 1) {          switch (outlen) {
1130                  TempStr[TempLen++] = code;            case 3:
         }  
         else if (byte == 2) {  
                 TempStr[TempLen++] = (code >> 8) & 0xff;  
                 TempStr[TempLen++] = code & 0xff;  
   
         }  
         else if (byte == 3) {  
1131                  TempStr[TempLen++] = (code >> 16) & 0xff;                  TempStr[TempLen++] = (code >> 16) & 0xff;
1132              case 2:
1133                  TempStr[TempLen++] = (code >> 8) & 0xff;                  TempStr[TempLen++] = (code >> 8) & 0xff;
1134              case 1:
1135                  TempStr[TempLen++] = code & 0xff;                  TempStr[TempLen++] = code & 0xff;
   
1136          }          }
1137    
1138          *TempLenSrc = TempLen;          return TempLen;
1139  }  }
1140    
   
1141  //  //
1142  // SJISから各種漢字コードへ変換して出力する。  // SJISから各種漢字コードへ変換して出力する。
1143  //  //
# Line 1152  int TextOutJP(PComVar cv, PCHAR B, int C Line 1145  int TextOutJP(PComVar cv, PCHAR B, int C
1145  {  {
1146          int i, TempLen;          int i, TempLen;
1147          WORD K;          WORD K;
1148          char TempStr[11];          char TempStr[12];
1149          int SendCodeNew;          int SendCodeNew;
1150          BYTE d;          BYTE d;
1151          BOOL Full, KanjiFlagNew;          BOOL Full, KanjiFlagNew;
# Line 1163  int TextOutJP(PComVar cv, PCHAR B, int C Line 1156  int TextOutJP(PComVar cv, PCHAR B, int C
1156                  TempLen = 0;                  TempLen = 0;
1157                  d = (BYTE)B[i];                  d = (BYTE)B[i];
1158                  SendCodeNew = cv->SendCode;                  SendCodeNew = cv->SendCode;
1159                    KanjiFlagNew = FALSE;
1160    
1161                  if (cv->SendKanjiFlag) {                  if (cv->SendKanjiFlag) {
                         KanjiFlagNew = FALSE;  
1162                          SendCodeNew = IdKanji;                          SendCodeNew = IdKanji;
1163    
1164                          K = (cv->SendKanjiFirst << 8) + d;                          K = (cv->SendKanjiFirst << 8) + d;
1165    
1166                          // UTF-8への変換を行う。1〜3バイトまでの対応なので注意。                          // UTF-8への変換を行う。1〜3バイトまでの対応なので注意。
1167                          if (cv->KanjiCodeSend == IdUTF8 || cv->Language == IdUtf8) {                          if (cv->KanjiCodeSend == IdUTF8 || cv->Language == IdUtf8) {
1168                                  OutputTextUTF8(K, TempStr, &TempLen, cv);                                  TempLen += OutputTextUTF8(K, TempStr, cv);
1169                            }
1170                          } else {                          else {
1171                                    switch (cv->Language) {
1172                                  if (cv->Language == IdJapanese) {                                    case IdJapanese:
1173                                          if (cv->KanjiCodeSend == IdEUC) {                                          switch (cv->KanjiCodeSend) {
1174                                              case IdEUC:
1175                                                  K = SJIS2EUC(K);                                                  K = SJIS2EUC(K);
1176                                          }                                                  break;
1177                                          else if (cv->KanjiCodeSend != IdSJIS) {                                            case IdJIS:
1178                                                  K = SJIS2JIS(K);                                                  K = SJIS2JIS(K);
1179                                                    if ((cv->SendCode==IdKatakana) &&
1180                                                        (cv->JIS7KatakanaSend==1)) {
1181                                                            TempStr[TempLen++] = SI;
1182                                                    }
1183                                                    break;
1184                                              case IdSJIS:
1185                                                    /* nothing to do */
1186                                                    break;
1187                                          }                                          }
1188                                            break;
1189                                          if ((cv->SendCode==IdKatakana) &&                                    case IdKorean:
1190                                              (cv->KanjiCodeSend==IdJIS) &&                                          break;
                                             (cv->JIS7KatakanaSend==1)) {  
                                                 TempStr[TempLen] = SI;  
                                                 TempLen++;  
                                         }  
1191                                  }                                  }
1192                                    TempStr[TempLen++] = HIBYTE(K);
1193                                  TempStr[TempLen] = HIBYTE(K);                                  TempStr[TempLen++] = LOBYTE(K);
                                 TempStr[TempLen+1] = LOBYTE(K);  
                                 TempLen = TempLen + 2;  
1194                          }                          }
1195                  }                  }
1196                  else if (IsDBCSLeadByteEx(*cv->CodePage, d)) {                  else if (IsDBCSLeadByteEx(*cv->CodePage, d)) {
# Line 1202  int TextOutJP(PComVar cv, PCHAR B, int C Line 1198  int TextOutJP(PComVar cv, PCHAR B, int C
1198                          cv->SendKanjiFirst = d;                          cv->SendKanjiFirst = d;
1199                          SendCodeNew = IdKanji;                          SendCodeNew = IdKanji;
1200    
1201                          if ((cv->SendCode!=IdKanji) &&                          if (cv->Language == IdJapanese) {
1202                              (cv->KanjiCodeSend==IdJIS)) {                                  if ((cv->SendCode!=IdKanji) && (cv->KanjiCodeSend==IdJIS)) {
1203                                  TempStr[0] = 0x1B;                                          TempStr[0] = 0x1B;
1204                                  TempStr[1] = '$';                                          TempStr[1] = '$';
1205                                  if (cv->KanjiIn == IdKanjiInB) {                                          if (cv->KanjiIn == IdKanjiInB) {
1206                                          TempStr[2] = 'B';                                                  TempStr[2] = 'B';
1207                                  }                                          }
1208                                  else {                                          else {
1209                                          TempStr[2] = '@';                                                  TempStr[2] = '@';
1210                                            }
1211                                            TempLen = 3;
1212                                  }                                  }
                                 TempLen = 3;  
                         }  
                         else {  
                                 TempLen = 0;  
1213                          }                          }
1214                  }                  }
1215                  else {                  else {
1216                          KanjiFlagNew = FALSE;                          if (cv->Language == IdJapanese) {
1217                                    if ((cv->SendCode==IdKanji) && (cv->KanjiCodeSend==IdJIS)) {
1218                          if ((cv->SendCode==IdKanji) &&                                          TempStr[0] = 0x1B;
1219                              (cv->KanjiCodeSend==IdJIS)) {                                          TempStr[1] = '(';
1220                                  TempStr[0] = 0x1B;                                          switch (cv->KanjiOut) {
1221                                  TempStr[1] = '(';                                            case IdKanjiOutJ:
                                 switch (cv->KanjiOut) {  
                                         case IdKanjiOutJ:  
1222                                                  TempStr[2] = 'J';                                                  TempStr[2] = 'J';
1223                                                  break;                                                  break;
1224                                          case IdKanjiOutH:                                            case IdKanjiOutH:
1225                                                  TempStr[2] = 'H';                                                  TempStr[2] = 'H';
1226                                                  break;                                                  break;
1227                                          default:                                            default:
1228                                                  TempStr[2] = 'B';                                                  TempStr[2] = 'B';
1229                                            }
1230                                            TempLen = 3;
1231                                  }                                  }
                                 TempLen = 3;  
                         }  
                         else {  
                                 TempLen = 0;  
                         }  
1232    
1233                          if ((0xa0<d) && (d<0xe0)) {                                  if ((0xa0<d) && (d<0xe0)) {
1234                                  SendCodeNew = IdKatakana;                                          SendCodeNew = IdKatakana;
1235                                  if ((cv->SendCode!=IdKatakana) &&                                          if ((cv->SendCode!=IdKatakana) &&
1236                                      (cv->KanjiCodeSend==IdJIS) &&                                              (cv->KanjiCodeSend==IdJIS) &&
1237                                      (cv->JIS7KatakanaSend==1)) {                                              (cv->JIS7KatakanaSend==1)) {
1238                                          TempStr[TempLen] = SO;                                                  TempStr[TempLen++] = SO;
1239                                          TempLen++;                                          }
1240                                  }                                  }
1241                          }                                  else {
1242                          else {                                          SendCodeNew = IdASCII;
1243                                  SendCodeNew = IdASCII;                                          if ((cv->SendCode==IdKatakana) &&
1244                                  if ((cv->SendCode==IdKatakana) &&                                              (cv->KanjiCodeSend==IdJIS) &&
1245                                      (cv->KanjiCodeSend==IdJIS) &&                                              (cv->JIS7KatakanaSend==1)) {
1246                                      (cv->JIS7KatakanaSend==1)) {                                                  TempStr[TempLen++] = SI;
1247                                          TempStr[TempLen] = SI;                                          }
                                         TempLen++;  
1248                                  }                                  }
1249                          }                          }
1250    
1251                          if (d==0x0d) {                          if (d==0x0d) {
1252                                  TempStr[TempLen] = 0x0d;                                  TempStr[TempLen++] = 0x0d;
                                 TempLen++;  
1253                                  if (cv->CRSend==IdCRLF) {                                  if (cv->CRSend==IdCRLF) {
1254                                          TempStr[TempLen] = 0x0a;                                          TempStr[TempLen++] = 0x0a;
                                         TempLen++;  
1255                                  }                                  }
1256                                  else if ((cv->CRSend==IdCR) &&                                  else if ((cv->CRSend==IdCR) &&
1257                                            cv->TelFlag && ! cv->TelBinSend) {                                            cv->TelFlag && ! cv->TelBinSend) {
1258                                          TempStr[TempLen] = 0;                                          TempStr[TempLen++] = 0;
                                         TempLen++;  
1259                                  }                                  }
1260                          }                          }
1261                          else if ((d>=0xa1) && (d<=0xe0)) {                          else if ((d>=0x80) && (cv->KanjiCodeSend==IdUTF8 || cv->Language==IdUtf8)) {
1262                                  /* Katakana */                                  TempLen += OutputTextUTF8((WORD)d, TempStr, cv);
1263                            }
1264                            else if ((d>=0xa1) && (d<=0xe0) && (cv->Language == IdJapanese)) {
1265                                  if (cv->KanjiCodeSend==IdEUC) {                                  if (cv->KanjiCodeSend==IdEUC) {
1266                                          TempStr[TempLen] = (char)0x8E;                                          TempStr[TempLen++] = (char)0x8E;
                                         TempLen++;  
1267                                  }                                  }
1268                                  if ((cv->KanjiCodeSend==IdJIS) &&                                  if ((cv->KanjiCodeSend==IdJIS) &&
1269                                          (cv->JIS7KatakanaSend==1)) {                                          (cv->JIS7KatakanaSend==1)) {
1270                                          TempStr[TempLen] = d & 0x7f;                                          TempStr[TempLen++] = d & 0x7f;
1271                                  }                                  }
1272                                  else {                                  else {
1273                                          TempStr[TempLen] = d;                                          TempStr[TempLen++] = d;
                                 }  
                                 TempLen++;  
   
                                 // 半角カナはUnicodeでは2バイトになる (2004.10.4 yutaka)  
                                 if (cv->KanjiCodeSend==IdUTF8 || cv->Language==IdUtf8) {  
                                         TempLen = 0;  
                                         K = d;  
                                         OutputTextUTF8(K, TempStr, &TempLen, cv);  
1274                                  }                                  }
1275                          }                          }
1276                          else {                          else {
1277                                  TempStr[TempLen] = d;                                  TempStr[TempLen++] = d;
                                 TempLen++;  
1278                                  if (cv->TelFlag && (d==0xff)) {                                  if (cv->TelFlag && (d==0xff)) {
1279                                          TempStr[TempLen] = (char)0xff;                                          TempStr[TempLen++] = (char)0xff;
                                         TempLen++;  
1280                                  }                                  }
1281                          }                          }
1282                  } // if (cv->SendKanjiFlag) else if ... else ... end                  } // if (cv->SendKanjiFlag) else if ... else ... end
# Line 1328  int TextOutJP(PComVar cv, PCHAR B, int C Line 1304  int TextOutJP(PComVar cv, PCHAR B, int C
1304  int FAR PASCAL CommTextOut(PComVar cv, PCHAR B, int C)  int FAR PASCAL CommTextOut(PComVar cv, PCHAR B, int C)
1305  {  {
1306          int i, TempLen;          int i, TempLen;
1307          char TempStr[11];          char TempStr[12];
1308          BYTE d;          BYTE d;
1309          BOOL Full;          BOOL Full;
1310    
# Line 1337  int FAR PASCAL CommTextOut(PComVar cv, P Line 1313  int FAR PASCAL CommTextOut(PComVar cv, P
1313          }          }
1314    
1315          switch (cv->Language) {          switch (cv->Language) {
           case IdJapanese:  
1316            case IdUtf8:            case IdUtf8:
1317              case IdJapanese:
1318            case IdKorean:            case IdKorean:
1319                  return TextOutJP(cv, B, C);                  return TextOutJP(cv, B, C);
1320                  break;                  break;
# Line 1452  int FAR PASCAL TextEchoJP(PComVar cv, PC Line 1428  int FAR PASCAL TextEchoJP(PComVar cv, PC
1428                          K = (cv->EchoKanjiFirst << 8) + d;                          K = (cv->EchoKanjiFirst << 8) + d;
1429                          // UTF-8への変換を行う。1〜3バイトまでの対応なので注意。                          // UTF-8への変換を行う。1〜3バイトまでの対応なので注意。
1430                          if (cv->KanjiCodeSend == IdUTF8 || cv->Language==IdUtf8) {                          if (cv->KanjiCodeSend == IdUTF8 || cv->Language==IdUtf8) {
1431                                  OutputTextUTF8(K, TempStr, &TempLen, cv);                                  TempLen += OutputTextUTF8(K, TempStr, cv);
1432                          }                          }
1433                          else {                          else {
1434                                  if (cv->KanjiCodeEcho == IdEUC) {                                  if (cv->KanjiCodeEcho == IdEUC) {
# Line 1618  int FAR PASCAL TextEchoKR(PComVar cv, PC Line 1594  int FAR PASCAL TextEchoKR(PComVar cv, PC
1594                          K = (cv->EchoKanjiFirst << 8) + d;                          K = (cv->EchoKanjiFirst << 8) + d;
1595                          // UTF-8への変換を行う。1〜3バイトまでの対応なので注意。                          // UTF-8への変換を行う。1〜3バイトまでの対応なので注意。
1596                          if (cv->KanjiCodeSend == IdUTF8) {                          if (cv->KanjiCodeSend == IdUTF8) {
1597                                  OutputTextUTF8(K, TempStr, &TempLen, cv);                                  TempLen += OutputTextUTF8(K, TempStr, cv);
1598                          }                          }
1599                          else {                          else {
1600                                  TempStr[TempLen] = HIBYTE(K);                                  TempStr[TempLen] = HIBYTE(K);

Legend:
Removed from v.3438  
changed lines
  Added in v.3442

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