Develop and Download Open Source Software

Browse Subversion Repository

Diff of /trunk/teraterm/teraterm/vtterm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 5320 by doda, Thu Jun 13 05:05:08 2013 UTC revision 5324 by doda, Mon Jun 17 12:14:30 2013 UTC
# Line 69  static BOOL LFMode; Line 69  static BOOL LFMode;
69  static BOOL AutoWrapMode;  static BOOL AutoWrapMode;
70  static BOOL FocusReportMode;  static BOOL FocusReportMode;
71  static BOOL AltScr;  static BOOL AltScr;
72    static BOOL LRMarginMode;
73  BOOL BracketedPaste;  BOOL BracketedPaste;
74    
75  static int VTlevel;  static int VTlevel;
# Line 290  void ResetTerminal() /*reset variables b Line 291  void ResetTerminal() /*reset variables b
291    // Alternate Screen Buffer    // Alternate Screen Buffer
292    AltScr = FALSE;    AltScr = FALSE;
293    
294      // Left/Right Margin Mode
295      LRMarginMode = FALSE;
296    
297    // Bracketed Paste Mode    // Bracketed Paste Mode
298    BracketedPaste = FALSE;    BracketedPaste = FALSE;
299    
# Line 387  void MoveToStatusLine() Line 391  void MoveToStatusLine()
391    
392  void HideStatusLine()  void HideStatusLine()
393  {  {
394    if ((StatusLine>0) &&    if (isCursorOnStatusLine)
       (CursorY==NumOfLines-1))  
395      MoveToMainScreen();      MoveToMainScreen();
396    StatusX = 0;    StatusX = 0;
397    StatusWrap = FALSE;    StatusWrap = FALSE;
# Line 481  void SendDCSstr(char *str, int len) { Line 484  void SendDCSstr(char *str, int len) {
484    
485  void BackSpace()  void BackSpace()
486  {  {
487    if (CursorX == 0)          if (CursorX == CursorLeftM || CursorX == 0) {
488    {                  if (CursorY > 0 && (ts.TermFlag & TF_BACKWRAP)) {
489      if ((CursorY>0) &&                          MoveCursor(CursorRightM, CursorY-1);
490          ((ts.TermFlag & TF_BACKWRAP)!=0))                          if (cv.HLogBuf!=0 && !ts.LogTypePlainText) Log1Byte(BS);
491      {                  }
492        MoveCursor(NumOfColumns-1,CursorY-1);          }
493  //      if (cv.HLogBuf!=0) Log1Byte(BS);          else if (CursorX > 0) {
494  // (2005.2.20 yutaka)                  MoveCursor(CursorX-1, CursorY);
495            if (cv.HLogBuf!=0 && !ts.LogTypePlainText) Log1Byte(BS);                  if (cv.HLogBuf!=0 && !ts.LogTypePlainText) Log1Byte(BS);
496      }          }
   }  
   else if (CursorX > 0)  
   {  
     MoveCursor(CursorX-1,CursorY);  
 //    if (cv.HLogBuf!=0) Log1Byte(BS);  
 // (2005.2.20 yutaka)  
           if (cv.HLogBuf!=0 && !ts.LogTypePlainText) Log1Byte(BS);  
   }  
497  }  }
498    
499  void CarriageReturn(BOOL logFlag)  void CarriageReturn(BOOL logFlag)
# Line 508  void CarriageReturn(BOOL logFlag) Line 503  void CarriageReturn(BOOL logFlag)
503  #endif /* NO_COPYLINE_FIX */  #endif /* NO_COPYLINE_FIX */
504          if (cv.HLogBuf!=0) Log1Byte(CR);          if (cv.HLogBuf!=0) Log1Byte(CR);
505    
506          if (CursorX>0)          if (RelativeOrgMode || CursorX > CursorLeftM)
507                  MoveCursor(0,CursorY);                  MoveCursor(CursorLeftM, CursorY);
508            else if (CursorX < CursorLeftM)
509                    MoveCursor(0, CursorY);
510  }  }
511    
512  void LineFeed(BYTE b, BOOL logFlag)  void LineFeed(BYTE b, BOOL logFlag)
# Line 620  void PutChar(BYTE b) Line 617  void PutChar(BYTE b)
617    
618    BuffPutChar(b, CharAttrTmp, InsertMode);    BuffPutChar(b, CharAttrTmp, InsertMode);
619    
620    if (CursorX < NumOfColumns-1)    if (CursorX == CursorRightM || CursorX >= NumOfColumns-1) {
     MoveRight();  
   else {  
621      UpdateStr();      UpdateStr();
622      Wrap = AutoWrapMode;      Wrap = AutoWrapMode;
623    }    }
624      else {
625        MoveRight();
626      }
627  }  }
628    
629  void PutDecSp(BYTE b)  void PutDecSp(BYTE b)
# Line 666  void PutDecSp(BYTE b) Line 664  void PutDecSp(BYTE b)
664    CharAttrTmp.Attr |= AttrSpecial;    CharAttrTmp.Attr |= AttrSpecial;
665    BuffPutChar(b, CharAttrTmp, InsertMode);    BuffPutChar(b, CharAttrTmp, InsertMode);
666    
667    if (CursorX < NumOfColumns-1)    if (CursorX == CursorRightM || CursorX >= NumOfColumns-1) {
     MoveRight();  
   else {  
668      UpdateStr();      UpdateStr();
669      Wrap = AutoWrapMode;      Wrap = AutoWrapMode;
670    }    }
671      else {
672        MoveRight();
673      }
674  }  }
675    
676  void PutKanji(BYTE b)  void PutKanji(BYTE b)
677  {  {
678      int LineEnd;
679  #ifndef NO_COPYLINE_FIX  #ifndef NO_COPYLINE_FIX
680    TCharAttr CharAttrTmp;    TCharAttr CharAttrTmp;
681    
# Line 699  void PutKanji(BYTE b) Line 699  void PutKanji(BYTE b)
699      return;      return;
700    }    }
701    
702      if (CursorX > CursorRightM)
703        LineEnd = NumOfColumns - 1;
704      else
705        LineEnd = CursorRightM;
706    
707    if (Wrap)    if (Wrap)
708    {    {
709      CarriageReturn(FALSE);      CarriageReturn(FALSE);
# Line 708  void PutKanji(BYTE b) Line 713  void PutKanji(BYTE b)
713        CharAttrTmp.Attr |= AttrLineContinued;        CharAttrTmp.Attr |= AttrLineContinued;
714  #endif /* NO_COPYLINE_FIX */  #endif /* NO_COPYLINE_FIX */
715    }    }
716    else if (CursorX > NumOfColumns-2)    else if (CursorX > LineEnd - 1) {
717      if (AutoWrapMode)      if (AutoWrapMode)
718      {      {
719  #ifndef NO_COPYLINE_FIX  #ifndef NO_COPYLINE_FIX
720        if (ts.EnableContinuedLineCopy)        if (ts.EnableContinuedLineCopy)
721        {        {
722        CharAttrTmp.Attr |= AttrLineContinued;        CharAttrTmp.Attr |= AttrLineContinued;
723        if (CursorX == NumOfColumns-1)        if (CursorX == LineEnd)
724          BuffPutChar(0x20, CharAttr, FALSE);          BuffPutChar(0x20, CharAttr, FALSE);
725        }        }
726  #endif /* NO_COPYLINE_FIX */  #endif /* NO_COPYLINE_FIX */
727        CarriageReturn(FALSE);        CarriageReturn(FALSE);
728        LineFeed(LF,FALSE);        LineFeed(LF,FALSE);
729      }      }
730      else return;      else {
731          return;
732        }
733      }
734    
735    Wrap = FALSE;    Wrap = FALSE;
736    
# Line 744  void PutKanji(BYTE b) Line 752  void PutKanji(BYTE b)
752    BuffPutKanji(Kanji, CharAttr, InsertMode);    BuffPutKanji(Kanji, CharAttr, InsertMode);
753  #endif /* NO_COPYLINE_FIX */  #endif /* NO_COPYLINE_FIX */
754    
755    if (CursorX < NumOfColumns-2)    if (CursorX < LineEnd - 1) {
   {  
756      MoveRight();      MoveRight();
757      MoveRight();      MoveRight();
758    }    }
# Line 1032  void SaveCursor() Line 1039  void SaveCursor()
1039    int i;    int i;
1040    PStatusBuff Buff;    PStatusBuff Buff;
1041    
1042    if ((StatusLine>0) &&    if (isCursorOnStatusLine)
       (CursorY==NumOfLines-1))  
1043      Buff = &SBuff2; // for status line      Buff = &SBuff2; // for status line
1044    else if (AltScr)    else if (AltScr)
1045      Buff = &SBuff3; // for alternate screen      Buff = &SBuff3; // for alternate screen
# Line 1057  void  RestoreCursor() Line 1063  void  RestoreCursor()
1063    PStatusBuff Buff;    PStatusBuff Buff;
1064    UpdateStr();    UpdateStr();
1065    
1066    if ((StatusLine>0) &&    if (isCursorOnStatusLine)
       (CursorY==NumOfLines-1))  
1067      Buff = &SBuff2; // for status line      Buff = &SBuff2; // for status line
1068    else if (AltScr)    else if (AltScr)
1069      Buff = &SBuff3; // for alternate screen      Buff = &SBuff3; // for alternate screen
# Line 1153  void ESCSharp(BYTE b) Line 1158  void ESCSharp(BYTE b)
1158        BuffFillWithE();        BuffFillWithE();
1159        CursorTop = 0;        CursorTop = 0;
1160        CursorBottom = NumOfLines-1-StatusLine;        CursorBottom = NumOfLines-1-StatusLine;
1161          CursorLeftM = 0;
1162          CursorRightM = NumOfColumns - 1;
1163        MoveCursor(0,0);        MoveCursor(0,0);
1164        ParseMode = ModeFirst;        ParseMode = ModeFirst;
1165        break;        break;
# Line 1465  void EscapeSequence(BYTE b) Line 1472  void EscapeSequence(BYTE b)
1472    
1473    void CSCursorUp1()    void CSCursorUp1()
1474    {    {
1475      MoveCursor(0,CursorY);      MoveCursor(CursorLeftM, CursorY);
1476      CSCursorUp();      CSCursorUp();
1477    }    }
1478    
# Line 1490  void EscapeSequence(BYTE b) Line 1497  void EscapeSequence(BYTE b)
1497    
1498    void CSCursorDown1()    void CSCursorDown1()
1499    {    {
1500      MoveCursor(0,CursorY);      MoveCursor(CursorLeftM, CursorY);
1501      CSCursorDown();      CSCursorDown();
1502    }    }
1503    
# Line 1636  void CSQSelScreenErase() Line 1643  void CSQSelScreenErase()
1643      BuffEraseChars(Param[1]);      BuffEraseChars(Param[1]);
1644    }    }
1645    
1646    void CSScrollUP()    void CSScrollUp()
1647    {    {
1648      if (Param[1]<1) Param[1] = 1;      if (Param[1]<1) Param[1] = 1;
1649      BuffUpdateScroll();      BuffUpdateScroll();
# Line 1662  void CSQSelScreenErase() Line 1669  void CSQSelScreenErase()
1669      CursorBackwardTab(Param[1]);      CursorBackwardTab(Param[1]);
1670    }    }
1671    
1672    void CSMoveToColumnN()  void CSMoveToColumnN()          // CHA / HPA
1673    {  {
1674      if (Param[1]<1) Param[1] = 1;          if (Param[1]<1)
1675      Param[1]--;                  Param[1] = 1;
1676      if (Param[1] > NumOfColumns-1) Param[1] = NumOfColumns-1;          else if (Param[1] > NumOfColumns-1)
1677      MoveCursor(Param[1],CursorY);                  Param[1] = NumOfColumns-1;
   }  
1678    
1679    void CSCursorRight()          Param[1]--;
   {  
     if (Param[1]<1) Param[1] = 1;  
     if (CursorX + Param[1] > NumOfColumns-1)  
       MoveCursor(NumOfColumns-1,CursorY);  
     else  
       MoveCursor(CursorX+Param[1],CursorY);  
   }  
1680    
1681    void CSCursorLeft()          if (RelativeOrgMode) {
1682    {                  if (CursorLeftM + Param[1] > CursorRightM )
1683      if (Param[1]<1) Param[1] = 1;                          MoveCursor(CursorRightM, CursorY);
1684      if (CursorX-Param[1] < 0)                  else
1685        MoveCursor(0,CursorY);                          MoveCursor(CursorLeftM + Param[1], CursorY);
1686      else          }
1687        MoveCursor(CursorX-Param[1],CursorY);          else {
1688    }                  MoveCursor(Param[1], CursorY);
1689            }
1690    }
1691    
1692    void CSCursorRight()            // CUF / HPR
1693    {
1694            int NewX;
1695    
1696            if (Param[1] < 1)
1697                    Param[1] = 1;
1698            else if (Param[1] > NumOfColumns - 1)
1699                    Param[1] = NumOfColumns - 1;
1700    
1701            NewX = CursorX + Param[1];
1702    
1703            if (CursorX <= CursorRightM && NewX > CursorRightM)
1704                    NewX = CursorRightM;
1705            else if (NewX > NumOfColumns-1)
1706                    NewX = NumOfColumns-1;
1707    
1708            MoveCursor(NewX, CursorY);
1709    }
1710    
1711    void CSCursorLeft()             // CUB / HPB
1712    {
1713            int NewX;
1714    
1715            if (Param[1] < 1)
1716                    Param[1] = 1;
1717    
1718            if (CursorX < Param[1])
1719                    NewX = 0;
1720            else
1721                    NewX = CursorX - Param[1];
1722    
1723            if (CursorX >= CursorLeftM && NewX < CursorLeftM)
1724                    NewX = CursorLeftM;
1725    
1726            MoveCursor(NewX, CursorY);
1727    }
1728    
1729    void CSMoveToLineN()    void CSMoveToLineN()
1730    {    {
# Line 1706  void CSQSelScreenErase() Line 1744  void CSQSelScreenErase()
1744      }      }
1745    }    }
1746    
1747    void CSMoveToXY()  void CSMoveToXY()               // CUP / HVP
1748    {  {
1749      int NewX, NewY;          int NewX, NewY;
1750    
1751      if (Param[1]<1) Param[1] = 1;          if (Param[1] < 1)
1752      if ((NParam < 2) || (Param[2]<1)) Param[2] = 1;                  Param[1] = 1;
1753      NewX = Param[2] - 1;          else if (Param[1] > NumOfLines-StatusLine)
1754      if (NewX > NumOfColumns-1) NewX = NumOfColumns-1;                  Param[1] = NumOfLines-StatusLine;
1755    
1756      if ((StatusLine>0) && (CursorY==NumOfLines-1))          if ((NParam < 2) || (Param[2]<1))
1757        NewY = CursorY;                  Param[2] = 1;
1758      else if (RelativeOrgMode)          else if (Param[2] > NumOfColumns)
1759      {                  Param[2] = NumOfColumns;
1760        NewY = CursorTop + Param[1] - 1;  
1761        if (NewY > CursorBottom) NewY = CursorBottom;          NewY = Param[1] - 1;
1762      }          NewX = Param[2] - 1;
1763      else {  
1764        NewY = Param[1] - 1;          if (isCursorOnStatusLine)
1765        if (NewY > NumOfLines-1-StatusLine)                  NewY = CursorY;
1766          NewY = NumOfLines-1-StatusLine;          else if (RelativeOrgMode) {
1767      }                  NewX += CursorLeftM;
1768      MoveCursor(NewX,NewY);                  if (NewX > CursorRightM)
1769    }                          NewX = CursorRightM;
1770    
1771                    NewY += CursorTop;
1772                    if (NewY > CursorBottom)
1773                            NewY = CursorBottom;
1774            }
1775            else {
1776                    NewY = Param[1] - 1;
1777                    if (NewY > NumOfLines-1-StatusLine)
1778                            NewY = NumOfLines-1-StatusLine;
1779            }
1780    
1781            MoveCursor(NewX, NewY);
1782    }
1783    
1784    void CSDeleteTabStop()    void CSDeleteTabStop()
1785    {    {
# Line 1836  void CSQSelScreenErase() Line 1887  void CSQSelScreenErase()
1887          break;          break;
1888        case 6:        case 6:
1889          /* Cursor Position Report */          /* Cursor Position Report */
1890          Y = CursorY+1;          if (isCursorOnStatusLine)
         if ((StatusLine>0) &&  
             (Y==NumOfLines))  
1891            Y = 1;            Y = 1;
1892            else
1893              Y = CursorY+1;
1894          len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "%u;%uR", CLocale, Y, CursorX+1);          len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "%u;%uR", CLocale, Y, CursorX+1);
1895          SendCSIstr(Report, len);          SendCSIstr(Report, len);
1896          break;          break;
# Line 2135  void CSSetAttr()               // SGR Line 2186  void CSSetAttr()               // SGR
2186    
2187    void CSSetScrollRegion()    void CSSetScrollRegion()
2188    {    {
2189      if ((StatusLine>0) &&      if (isCursorOnStatusLine) {
         (CursorY==NumOfLines-1))  
     {  
2190        MoveCursor(0,CursorY);        MoveCursor(0,CursorY);
2191        return;        return;
2192      }      }
# Line 2157  void CSSetAttr()               // SGR Line 2206  void CSSetAttr()               // SGR
2206                      else MoveCursor(0,0);                      else MoveCursor(0,0);
2207    }    }
2208    
2209    void CSSetLRScrollRegion()
2210    {
2211    //      if (isCursorOnStatusLine) {
2212    //              MoveCursor(0,CursorY);
2213    //              return;
2214    //      }
2215    
2216            if (Param[1] < 1)
2217                    Param[1] =1;
2218            else if (Param[1] > NumOfColumns)
2219                    Param[1] = NumOfColumns;
2220    
2221            if (NParam < 2 || Param[2] < 1 || Param[2] > NumOfColumns)
2222                    Param[2] = NumOfColumns;
2223    
2224            if (Param[1] >= Param[2])
2225                    return;
2226    
2227            Param[1]--;
2228            Param[2]--;
2229    
2230            CursorLeftM = Param[1];
2231            CursorRightM = Param[2];
2232    
2233            if (RelativeOrgMode)
2234                    MoveCursor(CursorLeftM, CursorTop);
2235            else
2236                    MoveCursor(0, 0);
2237    }
2238    
2239    void CSSunSequence() /* Sun terminal private sequences */    void CSSunSequence() /* Sun terminal private sequences */
2240    {    {
2241      int x, y, len;      int x, y, len;
# Line 2509  void CSSetAttr()               // SGR Line 2588  void CSSetAttr()               // SGR
2588                CSQExchangeColor(); /* Exchange text/back color */                CSQExchangeColor(); /* Exchange text/back color */
2589              break;              break;
2590            case 6: // DECOM            case 6: // DECOM
2591              if ((StatusLine>0) && (CursorY==NumOfLines-1))              if (isCursorOnStatusLine)
2592                MoveCursor(0,CursorY);                MoveCursor(0,CursorY);
2593              else {              else {
2594                RelativeOrgMode = TRUE;                RelativeOrgMode = TRUE;
# Line 2557  void CSSetAttr()               // SGR Line 2636  void CSSetAttr()               // SGR
2636              break;              break;
2637            case 66: AppliKeyMode = TRUE; break;          // DECNKM            case 66: AppliKeyMode = TRUE; break;          // DECNKM
2638            case 67: ts.BSKey = IdBS; break;              // DECBKM            case 67: ts.BSKey = IdBS; break;              // DECBKM
2639              case 69: LRMarginMode = TRUE; break;          // DECLRMM (DECVSSM)
2640            case 1000: // Mouse Tracking            case 1000: // Mouse Tracking
2641              if (ts.MouseEventTracking)              if (ts.MouseEventTracking)
2642                MouseReportMode = IdMouseTrackVT200;                MouseReportMode = IdMouseTrackVT200;
# Line 2671  void CSSetAttr()               // SGR Line 2751  void CSSetAttr()               // SGR
2751                CSQExchangeColor(); /* Exchange text/back color */                CSQExchangeColor(); /* Exchange text/back color */
2752              break;              break;
2753            case 6: // DECOM            case 6: // DECOM
2754              if ((StatusLine>0) && (CursorY==NumOfLines-1))              if (isCursorOnStatusLine)
2755                MoveCursor(0,CursorY);                MoveCursor(0,CursorY);
2756              else {              else {
2757                RelativeOrgMode = FALSE;                RelativeOrgMode = FALSE;
# Line 2712  void CSSetAttr()               // SGR Line 2792  void CSSetAttr()               // SGR
2792              break;              break;
2793            case 66: AppliKeyMode = FALSE; break;         // DECNKM            case 66: AppliKeyMode = FALSE; break;         // DECNKM
2794            case 67: ts.BSKey = IdDEL; break;             // DECBKM            case 67: ts.BSKey = IdDEL; break;             // DECBKM
2795              case 69: // DECLRMM (DECVSSM)
2796                LRMarginMode = FALSE;
2797                CursorLeftM = 0;
2798                CursorRightM = NumOfColumns - 1;
2799                break;
2800            case 1000: // Mouse Tracking            case 1000: // Mouse Tracking
2801            case 1001: // Hilite Mouse Tracking            case 1001: // Hilite Mouse Tracking
2802            case 1002: // Button-Event Mouse Tracking            case 1002: // Button-Event Mouse Tracking
# Line 2796  void CSSetAttr()               // SGR Line 2881  void CSSetAttr()               // SGR
2881      AppliCursorMode = FALSE;      AppliCursorMode = FALSE;
2882      AppliEscapeMode = FALSE;      AppliEscapeMode = FALSE;
2883      AcceptWheelToCursor = ts.TranslateWheelToCursor;      AcceptWheelToCursor = ts.TranslateWheelToCursor;
2884      if ((StatusLine>0) &&      if (isCursorOnStatusLine)
         (CursorY == NumOfLines-1))  
2885        MoveToMainScreen();        MoveToMainScreen();
2886      CursorTop = 0;      CursorTop = 0;
2887      CursorBottom = NumOfLines-1-StatusLine;      CursorBottom = NumOfLines-1-StatusLine;
2888        CursorLeftM = 0;
2889        CursorRightM = NumOfColumns - 1;
2890      ResetCharSet();      ResetCharSet();
2891    
2892      /* Attribute */      /* Attribute */
# Line 3486  void ParseCS(BYTE b) /* b is the final c Line 3572  void ParseCS(BYTE b) /* b is the final c
3572                            case 'P': CSDeleteCharacter(); break;   // DCH                            case 'P': CSDeleteCharacter(); break;   // DCH
3573  //                        case 'Q': break;                        // SEE  -- Not support  //                        case 'Q': break;                        // SEE  -- Not support
3574  //                        case 'R': break;                        // CPR  -- Report only, ignore.  //                        case 'R': break;                        // CPR  -- Report only, ignore.
3575                            case 'S': CSScrollUP(); break;          // SU                            case 'S': CSScrollUp(); break;          // SU
3576                            case 'T': CSScrollDown(); break;        // SD                            case 'T': CSScrollDown(); break;        // SD
3577  //                        case 'U': break;                        // NP   -- Not support  //                        case 'U': break;                        // NP   -- Not support
3578  //                        case 'V': break;                        // PP   -- Not support  //                        case 'V': break;                        // PP   -- Not support
# Line 3517  void ParseCS(BYTE b) /* b is the final c Line 3603  void ParseCS(BYTE b) /* b is the final c
3603    
3604                          // Private Sequence                          // Private Sequence
3605                            case 'r': CSSetScrollRegion(); break;   // DECSTBM                            case 'r': CSSetScrollRegion(); break;   // DECSTBM
3606                            case 's': SaveCursor(); break;          // SCP (Save cursor (ANSI.SYS/SCO?))                            case 's':
3607                                if (LRMarginMode)
3608                                  CSSetLRScrollRegion();              // DECSLRM
3609                                else
3610                                  SaveCursor();                       // SCP (Save cursor (ANSI.SYS/SCO?))
3611                                break;
3612                            case 't': CSSunSequence(); break;       // DECSLPP / Window manipulation(dtterm?)                            case 't': CSSunSequence(); break;       // DECSLPP / Window manipulation(dtterm?)
3613                            case 'u': RestoreCursor(); break;       // RCP (Restore cursor (ANSI.SYS/SCO))                            case 'u': RestoreCursor(); break;       // RCP (Restore cursor (ANSI.SYS/SCO))
3614                          }                          }

Legend:
Removed from v.5320  
changed lines
  Added in v.5324

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