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 2476 by maya, Mon Apr 14 17:35:50 2008 UTC revision 2556 by yutakapon, Sun Jul 6 06:50:40 2008 UTC
# Line 1268  int TextOutJP(PComVar cv, PCHAR B, int C Line 1268  int TextOutJP(PComVar cv, PCHAR B, int C
1268          return i;          return i;
1269  }  }
1270    
1271    int TextOutKR(PComVar cv, PCHAR B, int C) //HKS
1272    {
1273            int i, TempLen;
1274            WORD K;
1275            char TempStr[11];
1276            int SendCodeNew;
1277            BYTE d;
1278            BOOL Full, KanjiFlagNew;
1279    
1280            Full = FALSE;
1281            i = 0;
1282            while (! Full && (i < C))
1283            {
1284                    TempLen = 0;
1285                    d = (BYTE)B[i];
1286                    SendCodeNew = cv->SendCode;
1287    
1288                    if (cv->SendKanjiFlag)
1289                    {
1290                            KanjiFlagNew = FALSE;
1291                            SendCodeNew = IdKanji;
1292    
1293                            K = (cv->SendKanjiFirst << 8) + d;
1294    
1295                            // UTF-8への変換を行う。1?3バイトまでの対応なので注意。
1296                            if (cv->KanjiCodeSend == IdUTF8) {
1297                                    OutputTextUTF8(K, TempStr, &TempLen, cv);
1298    
1299                            } else {
1300    
1301                                    if (cv->KanjiCodeSend == IdEUC) K = K;
1302                                    else if (cv->KanjiCodeSend != IdSJIS) K = K;
1303    
1304                                    if ((cv->SendCode==IdKatakana) &&
1305                                            (cv->KanjiCodeSend==IdJIS) &&
1306                                            (cv->JIS7KatakanaSend==1))
1307                                    {
1308                                            TempStr[TempLen] = SI;
1309                                            TempLen++;
1310                                    }
1311    
1312                                    TempStr[TempLen] = HIBYTE(K);
1313                                    TempStr[TempLen+1] = LOBYTE(K);
1314                                    TempLen = TempLen + 2;
1315                            }
1316                    }
1317                    else if (IsDBCSLeadByteEx(*cv->CodePage, d))
1318                    {
1319                            KanjiFlagNew = TRUE;
1320                            cv->SendKanjiFirst = d;
1321                            SendCodeNew = IdKanji;
1322    
1323                            if ((cv->SendCode!=IdKanji) &&
1324                                    (cv->KanjiCodeSend==IdJIS))
1325                            {
1326                                    TempStr[0] = 0x1B;
1327                                    TempStr[1] = '$';
1328                                    if (cv->KanjiIn == IdKanjiInB)
1329                                            TempStr[2] = 'B';
1330                                    else
1331                                            TempStr[2] = '@';
1332                                    TempLen = 3;
1333                            }
1334                            else TempLen = 0;
1335                    }
1336                    else {
1337                            KanjiFlagNew = FALSE;
1338    
1339                            if ((cv->SendCode==IdKanji) &&
1340                                    (cv->KanjiCodeSend==IdJIS))
1341                            {
1342                                    TempStr[0] = 0x1B;
1343                                    TempStr[1] = '(';
1344                                    switch (cv->KanjiOut) {
1345                                    case IdKanjiOutJ: TempStr[2] = 'J'; break;
1346                                    case IdKanjiOutH: TempStr[2] = 'H'; break;
1347                                    default:
1348                                            TempStr[2] = 'B';
1349                                    }
1350                                    TempLen = 3;
1351                            }
1352                            else TempLen = 0;
1353    
1354                            if ((0xa0<d) && (d<0xe0))
1355                            {
1356                                    SendCodeNew = IdKatakana;
1357                                    if ((cv->SendCode!=IdKatakana) &&
1358                                            (cv->KanjiCodeSend==IdJIS) &&
1359                                            (cv->JIS7KatakanaSend==1))
1360                                    {
1361                                            TempStr[TempLen] = SO;
1362                                            TempLen++;
1363                                    }
1364                            }
1365                            else {
1366                                    SendCodeNew = IdASCII;
1367                                    if ((cv->SendCode==IdKatakana) &&
1368                                            (cv->KanjiCodeSend==IdJIS) &&
1369                                            (cv->JIS7KatakanaSend==1))
1370                                    {
1371                                            TempStr[TempLen] = SI;
1372                                            TempLen++;
1373                                    }
1374                            }
1375    
1376                            if (d==0x0d)
1377                            {
1378                                    TempStr[TempLen] = 0x0d;
1379                                    TempLen++;
1380                                    if (cv->CRSend==IdCRLF)
1381                                    {
1382                                            TempStr[TempLen] = 0x0a;
1383                                            TempLen++;
1384                                    }
1385                                    else if ((cv->CRSend==IdCR) &&
1386                                            cv->TelFlag && ! cv->TelBinSend)
1387                                    {
1388                                            TempStr[TempLen] = 0;
1389                                            TempLen++;
1390                                    }
1391                            }
1392                            else if ((d>=0xa1) && (d<=0xe0))
1393                            {
1394                                    /* Katakana */
1395                                    if (cv->KanjiCodeSend==IdEUC)
1396                                    {
1397                                            TempStr[TempLen] = (char)0x8E;
1398                                            TempLen++;
1399                                    }
1400                                    if ((cv->KanjiCodeSend==IdJIS) &&
1401                                            (cv->JIS7KatakanaSend==1))
1402                                            TempStr[TempLen] = d & 0x7f;
1403                                    else
1404                                            TempStr[TempLen] = d;
1405                                    TempLen++;
1406    
1407                                    // 半角カナはUnicodeでは2バイトになる (2004.10.4 yutaka)
1408                                    if (cv->KanjiCodeSend==IdUTF8) {
1409                                            TempLen = 0;
1410                                            K = d;
1411                                            OutputTextUTF8(K, TempStr, &TempLen, cv);
1412                                    }
1413                            }
1414                            else {
1415                                    TempStr[TempLen] = d;
1416                                    TempLen++;
1417                                    if (cv->TelFlag && (d==0xff))
1418                                    {
1419                                            TempStr[TempLen] = (char)0xff;
1420                                            TempLen++;
1421                                    }
1422                            }
1423                    } // if (cv->SendKanjiFlag) else if ... else ... end
1424    
1425                    if (TempLen == 0)
1426                    {
1427                            i++;
1428                            cv->SendCode = SendCodeNew;
1429                            cv->SendKanjiFlag = KanjiFlagNew;
1430                    }
1431                    else {
1432                            Full = OutBuffSize-cv->OutBuffCount-TempLen < 0;
1433                            if (! Full)
1434                            {
1435                                    i++;
1436                                    cv->SendCode = SendCodeNew;
1437                                    cv->SendKanjiFlag = KanjiFlagNew;
1438                                    CommRawOut(cv,TempStr,TempLen);
1439                            }
1440                    }
1441    
1442            } // end of "while {}"
1443    
1444            return i;
1445    }
1446    
1447  int FAR PASCAL CommTextOut(PComVar cv, PCHAR B, int C)  int FAR PASCAL CommTextOut(PComVar cv, PCHAR B, int C)
1448  {  {
1449          int i, TempLen;          int i, TempLen;
# Line 1280  int FAR PASCAL CommTextOut(PComVar cv, P Line 1456  int FAR PASCAL CommTextOut(PComVar cv, P
1456    
1457          if (cv->Language==IdJapanese)          if (cv->Language==IdJapanese)
1458                  return TextOutJP(cv,B,C);                  return TextOutJP(cv,B,C);
1459        if (cv->Language==IdKorean)         // HKS
1460           return TextOutKR(cv,B,C);
1461    
1462    
1463          Full = FALSE;          Full = FALSE;
1464          i = 0;          i = 0;

Legend:
Removed from v.2476  
changed lines
  Added in v.2556

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