[Ttssh2-commit] [3438] 韓国語モードでのローカルエコーを改善した。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2009年 6月 4日 (木) 20:52:11 JST


Revision: 3438
          http://svn.sourceforge.jp/view?root=ttssh2&view=rev&rev=3438
Author:   doda
Date:     2009-06-04 20:52:11 +0900 (Thu, 04 Jun 2009)

Log Message:
-----------
韓国語モードでのローカルエコーを改善した。

Modified Paths:
--------------
    trunk/teraterm/ttpcmn/ttcmn.c


-------------- next part --------------
Modified: trunk/teraterm/ttpcmn/ttcmn.c
===================================================================
--- trunk/teraterm/ttpcmn/ttcmn.c	2009-06-04 11:16:55 UTC (rev 3437)
+++ trunk/teraterm/ttpcmn/ttcmn.c	2009-06-04 11:52:11 UTC (rev 3438)
@@ -1595,6 +1595,92 @@
 	return i;
 }
 
+int FAR PASCAL TextEchoKR(PComVar cv, PCHAR B, int C)
+{
+	int i, TempLen;
+	WORD K;
+	char TempStr[11];
+	int EchoCodeNew;
+	BYTE d;
+	BOOL Full, KanjiFlagNew;
+
+	Full = FALSE;
+	i = 0;
+	while (! Full && (i < C)) {
+		TempLen = 0;
+		d = (BYTE)B[i];
+		EchoCodeNew = cv->EchoCode;
+
+		if (cv->EchoKanjiFlag) {
+			KanjiFlagNew = FALSE;
+			EchoCodeNew = IdKanji;
+
+			K = (cv->EchoKanjiFirst << 8) + d;
+			// UTF-8‚Ö‚Ì•ÏŠ·‚ðs‚¤B1`3ƒoƒCƒg‚܂ł̑Ήž‚È‚Ì‚Å’ˆÓB
+			if (cv->KanjiCodeSend == IdUTF8) {
+				OutputTextUTF8(K, TempStr, &TempLen, cv);
+			}
+			else {
+				TempStr[TempLen] = HIBYTE(K);
+				TempStr[TempLen+1] = LOBYTE(K);
+				TempLen = TempLen + 2;
+			}
+		}
+		else if (IsDBCSLeadByteEx(*cv->CodePage, d)) {
+			KanjiFlagNew = TRUE;
+			cv->EchoKanjiFirst = d;
+			EchoCodeNew = IdKanji;
+			TempLen = 0;
+		}
+		else {
+			KanjiFlagNew = FALSE;
+			TempLen = 0;
+			EchoCodeNew = IdASCII;
+
+			if (d==0x0d) {
+				TempStr[TempLen] = 0x0d;
+				TempLen++;
+				if (cv->CRSend==IdCRLF) {
+					TempStr[TempLen] = 0x0a;
+					TempLen++;
+				}
+				else if ((cv->CRSend==IdCR) &&
+				          cv->TelFlag && ! cv->TelBinSend) {
+					TempStr[TempLen] = 0;
+					TempLen++;
+				}
+			}
+			else {
+				TempStr[TempLen] = d;
+				TempLen++;
+				if (cv->TelFlag && (d==0xff)) {
+					TempStr[TempLen] = (char)0xff;
+					TempLen++;
+				}
+			}
+		} // if (cv->SendKanjiFlag) else if ... else ... end
+
+		if (TempLen == 0) {
+			i++;
+			cv->EchoCode = EchoCodeNew;
+			cv->EchoKanjiFlag = KanjiFlagNew;
+		}
+		else {
+			Full = InBuffSize-cv->InBuffCount-TempLen < 0;
+			if (! Full) {
+				i++;
+				cv->EchoCode = EchoCodeNew;
+				cv->EchoKanjiFlag = KanjiFlagNew;
+				memcpy(&(cv->InBuff[cv->InBuffCount]),TempStr,TempLen);
+				cv->InBuffCount = cv->InBuffCount + TempLen;
+			}
+		}
+
+	} // end of "while {}"
+
+	return i;
+}
+
 int FAR PASCAL CommTextEcho(PComVar cv, PCHAR B, int C)
 {
 	int i, TempLen;
@@ -1614,6 +1700,9 @@
 	if (cv->Language==IdJapanese || cv->Language == IdUtf8) {
 		return TextEchoJP(cv,B,C);
 	}
+	else if (cv->Language == IdKorean) {
+		return TextEchoKR(cv,B,C);
+	}
 
 	Full = FALSE;
 	i = 0;



Ttssh2-commit メーリングリストの案内
Back to archive index