[Ttssh2-commit] [5429] ・VPR /VPB/HPR/ HPBがスクロールマージンの影響を受けていたのを修正

svnno****@sourc***** svnno****@sourc*****
2013年 11月 23日 (土) 23:01:21 JST


Revision: 5429
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5429
Author:   doda
Date:     2013-11-23 23:01:20 +0900 (Sat, 23 Nov 2013)
Log Message:
-----------
・VPR/VPB/HPR/HPBがスクロールマージンの影響を受けていたのを修正
・CUU/VPBで画面上端を越えてカーソルが移動する場合があった問題を修正
・VPBで関係ないモードが解除される事がある問題を修正
https://sourceforge.jp/ticket/browse.php?group_id=1412&tid=31985

Modified Paths:
--------------
    trunk/teraterm/teraterm/vtterm.c

-------------- next part --------------
Modified: trunk/teraterm/teraterm/vtterm.c
===================================================================
--- trunk/teraterm/teraterm/vtterm.c	2013-11-23 11:41:29 UTC (rev 5428)
+++ trunk/teraterm/teraterm/vtterm.c	2013-11-23 14:01:20 UTC (rev 5429)
@@ -1451,56 +1451,56 @@
     BuffInsertSpace(Count);
   }
 
-  void CSCursorUp()
-  {
-    if (Param[1]<1) Param[1] = 1;
+void CSCursorUp(BOOL AffectMargin)	// CUU / VPB
+{
+	int topMargin, NewY;
 
-    if (CursorY >= CursorTop)
-    {
-      if (CursorY-Param[1] > CursorTop)
-	MoveCursor(CursorX,CursorY-Param[1]);
-      else
-	MoveCursor(CursorX,CursorTop);
-    }
-    else {
-      if (CursorY > 0)
-	MoveCursor(CursorX,CursorY-Param[1]);
-      else
-	MoveCursor(CursorX,0);
-    }
-  }
+	if (Param[1]<1)
+		Param[1] = 1;
 
-  void CSCursorUp1()
-  {
-    MoveCursor(CursorLeftM, CursorY);
-    CSCursorUp();
-  }
+	if (AffectMargin && CursorY >= CursorTop)
+		topMargin = CursorTop;
+	else
+		topMargin = 0;
 
-  void CSCursorDown()
-  {
-    if (Param[1]<1) Param[1] = 1;
+	NewY = CursorY - Param[1];
+	if (NewY < topMargin)
+		NewY = topMargin;
 
-    if (CursorY <= CursorBottom)
-    {
-      if (CursorY+Param[1] < CursorBottom)
-	MoveCursor(CursorX,CursorY+Param[1]);
-      else
-	MoveCursor(CursorX,CursorBottom);
-    }
-    else {
-      if (CursorY < NumOfLines-StatusLine-1)
-	MoveCursor(CursorX,CursorY+Param[1]);
-      else
-	MoveCursor(CursorX,NumOfLines-StatusLine);
-    }
-  }
+	MoveCursor(CursorX, NewY);
+}
 
-  void CSCursorDown1()
-  {
-    MoveCursor(CursorLeftM, CursorY);
-    CSCursorDown();
-  }
+void CSCursorUp1()			// CPL
+{
+	MoveCursor(CursorLeftM, CursorY);
+	CSCursorUp(TRUE);
+}
 
+void CSCursorDown(BOOL AffectMargin)	// CUD / VPR
+{
+	int bottomMargin, NewY;
+
+	if (Param[1]<1)
+		Param[1] = 1;
+
+	if (AffectMargin && CursorY <= CursorBottom)
+		bottomMargin = CursorBottom;
+	else
+		bottomMargin = NumOfLines-StatusLine-1;
+
+	NewY = CursorY + Param[1];
+	if (NewY > bottomMargin)
+		NewY = bottomMargin;
+
+	MoveCursor(CursorX, NewY);
+}
+
+void CSCursorDown1()			// CNL
+{
+	MoveCursor(CursorLeftM, CursorY);
+	CSCursorDown(TRUE);
+}
+
 void CSScreenErase()
 {
 	BuffUpdateScroll();
@@ -1689,39 +1689,40 @@
 	}
 }
 
-void CSCursorRight()		// CUF / HPR
+void CSCursorRight(BOOL AffectMargin)	// CUF / HPR
 {
-	int NewX;
+	int NewX, rightMargin;
 
 	if (Param[1] < 1)
 		Param[1] = 1;
-	else if (Param[1] > NumOfColumns - 1)
-		Param[1] = NumOfColumns - 1;
 
+	if (AffectMargin && CursorX <= CursorRightM)
+		rightMargin = CursorRightM;
+	else
+		rightMargin = NumOfColumns-1;
+
 	NewX = CursorX + Param[1];
+	if (NewX > rightMargin)
+		NewX = rightMargin;
 
-	if (CursorX <= CursorRightM && NewX > CursorRightM)
-		NewX = CursorRightM;
-	else if (NewX > NumOfColumns-1)
-		NewX = NumOfColumns-1;
-
 	MoveCursor(NewX, CursorY);
 }
 
-void CSCursorLeft()		// CUB / HPB
+void CSCursorLeft(BOOL AffectMargin)	// CUB / HPB
 {
-	int NewX;
+	int NewX, leftMargin;
 
 	if (Param[1] < 1)
 		Param[1] = 1;
 
-	if (CursorX < Param[1])
-		NewX = 0;
+	if (AffectMargin && CursorX >= CursorLeftM)
+		leftMargin = CursorLeftM;
 	else
-		NewX = CursorX - Param[1];
+		leftMargin = 0;
 
-	if (CursorX >= CursorLeftM && NewX < CursorLeftM)
-		NewX = CursorLeftM;
+	NewX = CursorX  - Param[1];
+	if (NewX < leftMargin)
+		NewX = leftMargin;
 
 	MoveCursor(NewX, CursorY);
 }
@@ -3562,10 +3563,10 @@
 			switch (b) {
 			// ISO/IEC 6429 / ECMA-48 Sequence
 			  case '@': CSInsertCharacter(); break;   // ICH
-			  case 'A': CSCursorUp(); break;          // CUU
-			  case 'B': CSCursorDown(); break;        // CUD
-			  case 'C': CSCursorRight(); break;       // CUF
-			  case 'D': CSCursorLeft(); break;        // CUB
+			  case 'A': CSCursorUp(TRUE); break;      // CUU
+			  case 'B': CSCursorDown(TRUE); break;    // CUD
+			  case 'C': CSCursorRight(TRUE); break;   // CUF
+			  case 'D': CSCursorLeft(TRUE); break;    // CUB
 			  case 'E': CSCursorDown1(); break;       // CNL
 			  case 'F': CSCursorUp1(); break;         // CPL
 			  case 'G': CSMoveToColumnN(); break;     // CHA
@@ -3593,17 +3594,17 @@
 //			  case ']': break;                        // SDS  -- Not support
 //			  case '^': break;                        // SIMD -- Not support
 			  case '`': CSMoveToColumnN(); break;     // HPA
-			  case 'a': CSCursorRight(); break;       // HPR
+			  case 'a': CSCursorRight(FALSE); break;  // HPR
 //			  case 'b': break;                        // REP  -- Not support
 			  case 'c': AnswerTerminalType(); break;  // DA
 			  case 'd': CSMoveToLineN(); break;       // VPA
-			  case 'e': CSCursorDown(); break;        // VPR
+			  case 'e': CSCursorDown(FALSE); break;   // VPR
 			  case 'f': CSMoveToXY(); break;          // HVP
 			  case 'g': CSDeleteTabStop(); break;     // TBC
 			  case 'h': CS_h_Mode(); break;           // SM
 			  case 'i': CS_i_Mode(); break;           // MC
-			  case 'j': CSCursorLeft(); break;        // HPB
-			  case 'k': CSCursorUp();                 // VPB
+			  case 'j': CSCursorLeft(FALSE); break;   // HPB
+			  case 'k': CSCursorUp(FALSE); break;     // VPB
 			  case 'l': CS_l_Mode(); break;           // RM
 			  case 'm': CSSetAttr(); break;           // SGR
 			  case 'n': CS_n_Mode(); break;           // DSR



Ttssh2-commit メーリングリストの案内