[Ttssh2-commit] [4246] VT-Level の概念を導入。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2010年 12月 21日 (火) 20:59:56 JST


Revision: 4246
          http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4246
Author:   doda
Date:     2010-12-21 20:59:56 +0900 (Tue, 21 Dec 2010)

Log Message:
-----------
VT-Level の概念を導入。
・VT-Lvelev 1 では 8bit 送信モードが無効になるようにした。
・端末 ID でのレベルより VT-Level が上にならないようにした。

Modified Paths:
--------------
    trunk/teraterm/teraterm/vtterm.c
    trunk/teraterm/teraterm/vtterm.h
    trunk/teraterm/teraterm/vtwin.cpp


-------------- next part --------------
Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c	2010-12-21 08:11:15 UTC (rev 4245)
+++ trunk/teraterm/teraterm/vtterm.c	2010-12-21 11:59:56 UTC (rev 4246)
@@ -27,7 +27,7 @@
 #include "vtterm.h"
 
 #define MAPSIZE(x) (sizeof(x)/sizeof((x)[0]))
-#define Accept8BitCtrl ((ts.TerminalID>=IdVT220J) && (ts.TermFlag & TF_ACCEPT8BITCTRL))
+#define Accept8BitCtrl ((VTlevel >= 2) && (ts.TermFlag & TF_ACCEPT8BITCTRL))
 
   /* Parsing modes */
 #define ModeFirst 0
@@ -65,6 +65,8 @@
 static BOOL AltScr;
 BOOL BracketedPaste;
 
+static int VTlevel;
+
 // save/restore cursor
 typedef struct {
   int CursorX, CursorY;
@@ -208,11 +210,12 @@
   RelativeOrgMode = FALSE;
   ts.ColorFlag &= ~CF_REVERSEVIDEO;
   AutoRepeatMode = TRUE;
-  Send8BitMode = ts.Send8BitCtrl;
   FocusReportMode = FALSE;
   MouseReportMode = IdMouseTrackNone;
   DecLocatorFlag = 0;
 
+  ChangeTerminalID();
+
   LastX = 0;
   LastY = 0;
   ButtonStat = 0;
@@ -814,7 +817,7 @@
       if ((ts.TermFlag & TF_ACCEPT8BITCTRL)==0)
 	return; /* ignore C1 char */
       /* C1 chars are interpreted as C0 chars in VT100 mode */
-      if (ts.TerminalID<IdVT220J)
+      if (VTlevel < 2)
 	b = b & 0x7F;
     }
   }
@@ -1064,8 +1067,14 @@
 void ESCSpace(BYTE b)
 {
   switch (b) {
-    case 'F': Send8BitMode = FALSE; break;	// S7C1T
-    case 'G': Send8BitMode = TRUE; break;	// S8C1T
+    case 'F':	// S7C1T
+      Send8BitMode = FALSE;
+      break;
+    case 'G':	// S8C1T
+      if (VTlevel >= 2) {
+	Send8BitMode = TRUE;
+      }
+      break;
   }
 }
 
@@ -2511,8 +2520,6 @@
     CursorBottom = NumOfLines-1-StatusLine;
     ResetCharSet();
 
-    Send8BitMode = ts.Send8BitCtrl;
-
     /* Attribute */
     CharAttr = DefCharAttr;
     Special = FALSE;
@@ -2539,21 +2546,23 @@
 	/* Select terminal mode (software reset) */
 	SoftReset();
 	if (NParam > 0) {
-	  switch (Param[1]) {
-	    case 61: // VT-Level 1 (VT100)
-	      Send8BitMode = FALSE; break;
-	    case 62: // VT-Level 2 (VT200)
-	    case 63: // VT-Level 3 (VT300)
-	    case 64: // VT-Level 4 (VT400)
-	    case 65: // VT-Level 5 (VT500)
-	      if (NParam > 1 && Param[2] == 1)
-		Send8BitMode = FALSE;
-	      else
-		Send8BitMode = TRUE;
-	      break;
+	  ChangeTerminalID();
+	  if (Param[1] >= 61 && Param[1] <= 65) {
+	    if (VTlevel > Param[1] - 60) {
+	      VTlevel = Param[1] - 60;
+	    }
 	  }
+	  else {
+	    VTlevel = 1;
+	  }
+
+	  if (VTlevel < 2 || (NParam > 1 && Param[2] == 1))
+	    Send8BitMode = FALSE;
+	  else
+	    Send8BitMode = TRUE;
 	}
 	break;
+
       case 'q': // DECSCA
 	if (Param[1] < 0) 
 	  Param[1] = 0;
@@ -2930,26 +2939,12 @@
 	case '"':
 		switch (StrBuff[1]) {
 		case 'p': // DECSCL
-			switch (ts.TerminalID) {
-			case IdVT220J:
-			case IdVT282:
-				len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r62;%d\"p", CLocale, Send8BitMode?0:1);
-				break;
-			case IdVT320:
-			case IdVT382:
-				len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r63;%d\"p", CLocale, Send8BitMode?0:1);
-				break;
-			case IdVT420:
-				len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r64;%d\"p", CLocale, Send8BitMode?0:1);
-				break;
-			case IdVT520:
-			case IdVT525:
-				len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r65;%d\"p", CLocale, Send8BitMode?0:1);
-				break;
-			default:
-				len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r61;1\"p", CLocale);
-				break;
+			if (VTlevel > 1 && Send8BitMode) {
+				len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r6%d;0\"p", CLocale, VTlevel);
 			}
+			else {
+				len = _snprintf_s_l(RepStr, sizeof(RepStr), _TRUNCATE, "0$r6%d;1\"p", CLocale, VTlevel);
+			}
 			break;
 
 		case 'q': // DECSCA
@@ -4346,3 +4341,32 @@
 BOOL BracketedPasteMode() {
 	return BracketedPaste;
 }
+
+void ChangeTerminalID() {
+  switch (ts.TerminalID) {
+  case IdVT220J:
+  case IdVT282:
+    VTlevel = 2;
+    break;
+  case IdVT320:
+  case IdVT382:
+    VTlevel = 3;
+    break;
+  case IdVT420:
+    VTlevel = 4;
+    break;
+  case IdVT520:
+  case IdVT525:
+    VTlevel = 5;
+    break;
+  default:
+    VTlevel = 1;
+  }
+
+  if (VTlevel == 1) {
+    Send8BitMode = FALSE;
+  }
+  else {
+    Send8BitMode = ts.Send8BitCtrl;
+  }
+}

Modified: trunk/teraterm/teraterm/vtterm.h
===================================================================
--- trunk/teraterm/teraterm/vtterm.h	2010-12-21 08:11:15 UTC (rev 4245)
+++ trunk/teraterm/teraterm/vtterm.h	2010-12-21 11:59:56 UTC (rev 4246)
@@ -19,6 +19,7 @@
 BOOL MouseReport(int Event, int Button, int Xpos, int Ypos);
 BOOL BracketedPasteMode();
 void EndTerm();
+void ChangeTerminalID();
 
 #ifdef __cplusplus
 }

Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2010-12-21 08:11:15 UTC (rev 4245)
+++ trunk/teraterm/teraterm/vtwin.cpp	2010-12-21 11:59:56 UTC (rev 4246)
@@ -1535,6 +1535,8 @@
 	          (ts.TerminalHeight!=WinHeight-StatusLine))) {
 		BuffChangeWinSize(ts.TerminalWidth,ts.TerminalHeight+StatusLine);
 	}
+
+	ChangeTerminalID();
 }
 
 void CVTWindow::Startup()



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