diff --git a/Terminal/TerminalBase.cs b/Terminal/TerminalBase.cs index 0921853..a484b71 100644 --- a/Terminal/TerminalBase.cs +++ b/Terminal/TerminalBase.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics.Contracts; using System.IO; using System.Linq; using System.Text; @@ -189,6 +190,10 @@ void advanceCursorRow() public void MoveLines(int index, int newIndex, int count) { + Contract.Requires(index >= 0 && index < Size.Row); + Contract.Requires(newIndex >= 0 && newIndex < Size.Row); + Contract.Requires(index + count < Size.Row && newIndex + count < Size.Row); + int addIndex; if (newIndex > index) addIndex = index; @@ -206,16 +211,22 @@ public void MoveLines(int index, int newIndex, int count) public void EraseCharacters(int length, bool advanceCursor = true) { + Contract.Requires(length >= 0 && CursorPos.Col + length < Size.Col); + SetCharacters(new string(' ', length), new TerminalFont() { Hidden = true }, advanceCursor); } public void DeleteCharacters(int length) { + Contract.Requires(length >= 0 && CursorPos.Col + length < Size.Col); + lines[CursorPos.Row].DeleteCharacters(CursorPos.Col, length); } public void SetCharacters(string text, TerminalFont font, bool advanceCursor = true) { + Contract.Requires(text != null); + bool ignoreNextLine = false; int textIndex = 0; while (textIndex < text.Length) diff --git a/Terminal/XtermTerminal.cs b/Terminal/XtermTerminal.cs index 6887cde..f977844 100644 --- a/Terminal/XtermTerminal.cs +++ b/Terminal/XtermTerminal.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.Contracts; using System.IO; using System.Linq; using System.Text; @@ -257,13 +258,10 @@ public TerminalFont DefaultFont void setPrivateMode(XtermDecMode mode, bool value) { - if (Enum.IsDefined(typeof(XtermDecMode), mode)) - { - privateModes[(XtermDecMode) mode] = value; + privateModes[mode] = value; - if (PrivateModeChanged != null) - PrivateModeChanged(this, new PrivateModeChangedEventArgs(mode, value)); - } + if (PrivateModeChanged != null) + PrivateModeChanged(this, new PrivateModeChangedEventArgs(mode, value)); } public event EventHandler TitleChanged; @@ -272,6 +270,8 @@ void setPrivateMode(XtermDecMode mode, bool value) public XtermTerminal(IStreamNotifier streamNotifier) : base(streamNotifier) { + Contract.Requires(streamNotifier != null); + foreach (var key in Enum.GetValues(typeof(XtermDecMode)).Cast()) privateModes.Add(key, false); privateModes[XtermDecMode.BlinkCursor] = true;