svnno****@sourc*****
svnno****@sourc*****
2009年 6月 15日 (月) 11:39:48 JST
Revision: 3485 http://svn.sourceforge.jp/view?root=ttssh2&view=rev&rev=3485 Author: doda Date: 2009-06-15 11:39:48 +0900 (Mon, 15 Jun 2009) Log Message: ----------- ウィンドウ制御/報告シーケンスおよびカーソル形状制御シーケンスを受け入れるか設定できるようにした。 Modified Paths: -------------- trunk/installer/release/TERATERM.INI trunk/teraterm/common/tttypes.h trunk/teraterm/teraterm/vtterm.c trunk/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: trunk/installer/release/TERATERM.INI =================================================================== --- trunk/installer/release/TERATERM.INI 2009-06-15 00:49:58 UTC (rev 3484) +++ trunk/installer/release/TERATERM.INI 2009-06-15 02:39:48 UTC (rev 3485) @@ -529,8 +529,11 @@ Wait4allMacroCommand=off ; allow the sequences related to window control -WindowCtrlSequence=off +WindowCtrlSequence=on +; allow the sequences related to window report +WindowReportSequence=on + ; [Window] menu WindowMenu=on Modified: trunk/teraterm/common/tttypes.h =================================================================== --- trunk/teraterm/common/tttypes.h 2009-06-15 00:49:58 UTC (rev 3484) +++ trunk/teraterm/common/tttypes.h 2009-06-15 02:39:48 UTC (rev 3485) @@ -201,6 +201,12 @@ #define PF_CONFIRMDISCONN 1 #define PF_BEEPONCONNECT 2 +// Window flags (used in ts.WindowFlag) +#define WF_CURSORCHANGE 1 +#define WF_WINDOWCHANGE 2 +#define WF_WINDOWREPORT 4 +#define WF_TITLEREPORT 8 + // iconf flags (used in ts.VTIcon and ts.TEKIcon) #define IdIconDefault 0 @@ -457,8 +463,7 @@ int PasteDelayPerLine; WORD FontScaling; WORD Meta8Bit; - WORD WindowCtrlSequence; - WORD CursorCtrlSequence; + WORD WindowFlag; }; typedef struct tttset TTTSet, *PTTSet; @@ -900,8 +905,7 @@ * added tttset.PasteDelayPerLine. * added tttset.FontScaling. * added tttset.Meta8Bit. - * added tttset.WindowCtrlSequence. - * added tttset.CursorCtrlSequence. + * added tttset.WindowFlag. * * - At version 4.62, ttset_memfilemap was replaced with ttset_memfilemap_10. * added tttset.DisableMouseTrackingByCtrl. Modified: trunk/teraterm/teraterm/vtterm.c =================================================================== --- trunk/teraterm/teraterm/vtterm.c 2009-06-15 00:49:58 UTC (rev 3484) +++ trunk/teraterm/teraterm/vtterm.c 2009-06-15 02:39:48 UTC (rev 3485) @@ -1496,23 +1496,27 @@ case 4: // IRM InsertMode = TRUE; break; case 12: // SRM - ts.LocalEcho = 0; - if (cv.Ready && cv.TelFlag && (ts.TelEcho>0)) - TelChangeEcho(); - break; + ts.LocalEcho = 0; + if (cv.Ready && cv.TelFlag && (ts.TelEcho>0)) + TelChangeEcho(); + break; case 20: // LF/NL - LFMode = TRUE; - ts.CRSend = IdCRLF; - cv.CRSend = IdCRLF; - break; + LFMode = TRUE; + ts.CRSend = IdCRLF; + cv.CRSend = IdCRLF; + break; case 33: // WYSTCURM - ts.NonblinkingCursor = TRUE; - ChangeCaret(); - break; + if (ts.WindowFlag & WF_CURSORCHANGE) { + ts.NonblinkingCursor = TRUE; + ChangeCaret(); + } + break; case 34: // WYULCURM - ts.CursorShape = IdHCur; - ChangeCaret(); - break; + if (ts.WindowFlag & WF_CURSORCHANGE) { + ts.CursorShape = IdHCur; + ChangeCaret(); + } + break; } } @@ -1544,23 +1548,27 @@ case 4: // IRM InsertMode = FALSE; break; case 12: // SRM - ts.LocalEcho = 1; - if (cv.Ready && cv.TelFlag && (ts.TelEcho>0)) - TelChangeEcho(); - break; + ts.LocalEcho = 1; + if (cv.Ready && cv.TelFlag && (ts.TelEcho>0)) + TelChangeEcho(); + break; case 20: // LF/NL - LFMode = FALSE; - ts.CRSend = IdCR; - cv.CRSend = IdCR; - break; + LFMode = FALSE; + ts.CRSend = IdCR; + cv.CRSend = IdCR; + break; case 33: // WYSTCURM - ts.NonblinkingCursor = FALSE; - ChangeCaret(); - break; + if (ts.WindowFlag & WF_CURSORCHANGE) { + ts.NonblinkingCursor = FALSE; + ChangeCaret(); + } + break; case 34: // WYULCURM - ts.CursorShape = IdBlkCur; - ChangeCaret(); - break; + if (ts.WindowFlag & WF_CURSORCHANGE) { + ts.CursorShape = IdBlkCur; + ChangeCaret(); + } + break; } } @@ -1783,64 +1791,88 @@ switch (Param[1]) { case 1: // De-iconify window - DispShowWindow(WINDOW_RESTORE); + if (ts.WindowFlag & WF_WINDOWCHANGE) + DispShowWindow(WINDOW_RESTORE); break; case 2: // Iconify window - DispShowWindow(WINDOW_MINIMIZE); + if (ts.WindowFlag & WF_WINDOWCHANGE) + DispShowWindow(WINDOW_MINIMIZE); break; case 3: // set window position - if (NParam < 2) Param[2] = 0; - if (NParam < 3) Param[3] = 0; - DispMoveWindow(Param[2], Param[3]); + if (ts.WindowFlag & WF_WINDOWCHANGE) { + if (NParam < 2) Param[2] = 0; + if (NParam < 3) Param[3] = 0; + DispMoveWindow(Param[2], Param[3]); + } break; case 4: // set window size - if (NParam < 2) Param[2] = 0; - if (NParam < 3) Param[3] = 0; - DispResizeWin(Param[3], Param[2]); + if (ts.WindowFlag & WF_WINDOWCHANGE) { + if (NParam < 2) Param[2] = 0; + if (NParam < 3) Param[3] = 0; + DispResizeWin(Param[3], Param[2]); + } break; case 5: // Raise window - DispShowWindow(WINDOW_RAISE); + if (ts.WindowFlag & WF_WINDOWCHANGE) + DispShowWindow(WINDOW_RAISE); break; case 6: // Lower window - DispShowWindow(WINDOW_LOWER); + if (ts.WindowFlag & WF_WINDOWCHANGE) + DispShowWindow(WINDOW_LOWER); break; case 7: // Refresh window - DispShowWindow(WINDOW_REFRESH); + if (ts.WindowFlag & WF_WINDOWCHANGE) + DispShowWindow(WINDOW_REFRESH); break; case 8: /* set terminal size */ - if ((Param[2]<=1) || (NParam<2)) Param[2] = 24; - if ((Param[3]<=1) || (NParam<3)) Param[3] = 80; - ChangeTerminalSize(Param[3],Param[2]); + if (ts.WindowFlag & WF_WINDOWCHANGE) { + if ((Param[2]<=1) || (NParam<2)) Param[2] = 24; + if ((Param[3]<=1) || (NParam<3)) Param[3] = 80; + ChangeTerminalSize(Param[3],Param[2]); + } break; case 9: // Maximize/Restore window - if (NParam < 2 || Param[2] == 0) { - DispShowWindow(WINDOW_RESTORE); + if (ts.WindowFlag & WF_WINDOWCHANGE) { + if (NParam < 2 || Param[2] == 0) { + DispShowWindow(WINDOW_RESTORE); + } + else { + DispShowWindow(WINDOW_MAXIMIZE); + } } - else { - DispShowWindow(WINDOW_MAXIMIZE); - } break; case 11: // Report window state - len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "%dt", CLocale, DispWindowIconified()?2:1); - SendCSIstr(Report, len); + if (ts.WindowFlag & WF_WINDOWREPORT) { + len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "%dt", CLocale, DispWindowIconified()?2:1); + SendCSIstr(Report, len); + } break; case 13: // Report window position - DispGetWindowPos(&x, &y); - len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "3;%d;%dt", CLocale, x, y); - SendCSIstr(Report, len); + if (ts.WindowFlag & WF_WINDOWREPORT) { + DispGetWindowPos(&x, &y); + len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "3;%d;%dt", CLocale, x, y); + SendCSIstr(Report, len); + } break; case 14: /* get window size??? */ - /* this is not actual window size */ - SendCSIstr("4;640;480t", 10); + if (ts.WindowFlag & WF_WINDOWREPORT) { + /* this is not actual window size */ + SendCSIstr("4;640;480t", 10); + } break; case 18: /* get terminal size */ - len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "8;%u;%u;t", CLocale, NumOfLines-StatusLine, NumOfColumns); - SendCSIstr(Report, len); + if (ts.WindowFlag & WF_WINDOWREPORT) { + len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "8;%u;%u;t", CLocale, + NumOfLines-StatusLine, NumOfColumns); + SendCSIstr(Report, len); + } break; case 19: // Report display size (character) - DispGetRootWinSize(&x, &y); - len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "9;%d;%dt", CLocale, y, x); - SendCSIstr(Report, len); + if (ts.WindowFlag & WF_WINDOWREPORT) { + DispGetRootWinSize(&x, &y); + len = _snprintf_s_l(Report, sizeof(Report), _TRUNCATE, "9;%d;%dt", CLocale, y, x); + SendCSIstr(Report, len); + } break; } } @@ -1957,8 +1989,7 @@ CSQExchangeColor(); /* Exchange text/back color */ break; case 6: - if ((StatusLine>0) && - (CursorY==NumOfLines-1)) + if ((StatusLine>0) && (CursorY==NumOfLines-1)) MoveCursor(0,CursorY); else { RelativeOrgMode = TRUE; @@ -1971,7 +2002,12 @@ if (ts.MouseEventTracking) MouseReportMode = IdMouseTrackX10; break; - case 12: ts.NonblinkingCursor = FALSE; ChangeCaret(); break; + case 12: + if (ts.WindowFlag & WF_CURSORCHANGE) { + ts.NonblinkingCursor = FALSE; + ChangeCaret(); + } + break; case 19: PrintEX = TRUE; break; case 25: DispEnableCaret(TRUE); break; // cursor on case 38: @@ -2062,8 +2098,7 @@ CSQExchangeColor(); /* Exchange text/back color */ break; case 6: - if ((StatusLine>0) && - (CursorY==NumOfLines-1)) + if ((StatusLine>0) && (CursorY==NumOfLines-1)) MoveCursor(0,CursorY); else { RelativeOrgMode = FALSE; @@ -2073,7 +2108,12 @@ case 7: AutoWrapMode = FALSE; break; case 8: AutoRepeatMode = FALSE; break; case 9: MouseReportMode = IdMouseTrackNone; break; - case 12: ts.NonblinkingCursor = TRUE; ChangeCaret(); break; + case 12: + if (ts.WindowFlag & WF_CURSORCHANGE) { + ts.NonblinkingCursor = TRUE; + ChangeCaret(); + } + break; case 19: PrintEX = FALSE; break; case 25: DispEnableCaret(FALSE); break; // cursor off case 59: @@ -2202,38 +2242,40 @@ void CSSpace(BYTE b) { switch (b) { case 'q': - if (NParam > 0) { - if (Param[1] < 0) Param[1] = 0; - switch (Param[1]) { - case 0: - case 1: - ts.CursorShape = IdBlkCur; - ts.NonblinkingCursor = FALSE; - break; - case 2: - ts.CursorShape = IdBlkCur; - ts.NonblinkingCursor = TRUE; - break; - case 3: - ts.CursorShape = IdHCur; - ts.NonblinkingCursor = FALSE; - break; - case 4: - ts.CursorShape = IdHCur; - ts.NonblinkingCursor = TRUE; - break; - case 5: - ts.CursorShape = IdVCur; - ts.NonblinkingCursor = FALSE; - break; - case 6: - ts.CursorShape = IdVCur; - ts.NonblinkingCursor = TRUE; - break; - default: - return; + if (ts.WindowFlag & WF_CURSORCHANGE) { + if (NParam > 0) { + if (Param[1] < 0) Param[1] = 0; + switch (Param[1]) { + case 0: + case 1: + ts.CursorShape = IdBlkCur; + ts.NonblinkingCursor = FALSE; + break; + case 2: + ts.CursorShape = IdBlkCur; + ts.NonblinkingCursor = TRUE; + break; + case 3: + ts.CursorShape = IdHCur; + ts.NonblinkingCursor = FALSE; + break; + case 4: + ts.CursorShape = IdHCur; + ts.NonblinkingCursor = TRUE; + break; + case 5: + ts.CursorShape = IdVCur; + ts.NonblinkingCursor = FALSE; + break; + case 6: + ts.CursorShape = IdVCur; + ts.NonblinkingCursor = TRUE; + break; + default: + return; + } + ChangeCaret(); } - ChangeCaret(); } break; } Modified: trunk/teraterm/ttpset/ttset.c =================================================================== --- trunk/teraterm/ttpset/ttset.c 2009-06-15 00:49:58 UTC (rev 3484) +++ trunk/teraterm/ttpset/ttset.c 2009-06-15 02:39:48 UTC (rev 3485) @@ -206,6 +206,7 @@ ts->TermFlag = 0; // Terminal flag ts->ColorFlag = 0; // ANSI/Attribute color flags ts->PortFlag = 0; // Port flags + ts->WindowFlag = 0; // Window flags ts->TelPort = 23; ts->DisableTCPEchoCR = FALSE; @@ -1296,10 +1297,20 @@ ts->Meta8Bit = GetOnOff(Section, "Meta8Bit", FName, FALSE); // Window control sequence - ts->WindowCtrlSequence = GetOnOff(Section, "WindowCtrlSequence", FName, FALSE); + if (GetOnOff(Section, "WindowCtrlSequence", FName, TRUE)) + ts->WindowFlag |= WF_WINDOWCHANGE; // Cursor control sequence - ts->CursorCtrlSequence = GetOnOff(Section, "CursorCtrlSequence", FName, FALSE); + if (GetOnOff(Section, "CursorCtrlSequence", FName, FALSE)) + ts->WindowFlag |= WF_CURSORCHANGE; + + // Window report sequence + if (GetOnOff(Section, "WindowReportSequence", FName, TRUE)) + ts->WindowFlag |= WF_WINDOWREPORT; + + // Window report sequence + if (GetOnOff(Section, "TitleReportSequence", FName, TRUE)) + ts->WindowFlag |= WF_TITLEREPORT; } void FAR PASCAL WriteIniFile(PCHAR FName, PTTSet ts) @@ -2250,10 +2261,20 @@ WriteOnOff(Section, "Meta8Bit", FName, ts->Meta8Bit); // Window control sequence - WriteOnOff(Section, "WindowCtrlSequence", FName, ts->WindowCtrlSequence); + WriteOnOff(Section, "WindowCtrlSequence", FName, + ts->WindowFlag & WF_WINDOWCHANGE); // Cursor control sequence - WriteOnOff(Section, "CursorCtrlSequence", FName, ts->CursorCtrlSequence); + WriteOnOff(Section, "CursorCtrlSequence", FName, + ts->WindowFlag & WF_CURSORCHANGE); + + // Window report sequence + WriteOnOff(Section, "WindowReportSequence", FName, + ts->WindowFlag & WF_WINDOWREPORT); + + // Title report sequence + WriteOnOff(Section, "TitleReportSequence", FName, + ts->WindowFlag & WF_TITLEREPORT); } #define VTEditor "VT editor keypad"