/// <summary>
        /// Writes a character to the terminal emulator possible
        /// interpreting escape commands
        /// </summary>
        /// <param name="c">Character to be written</param>
        public void Write(char c)
        {
            if (_enableEscapeSquence)
            {
                switch (_currentEscapedState)
                {
                case EscapedState.AwaitingFirstNumber:
                    if (Char.IsDigit(c))
                    {
                        num1.Append(c);
                    }
                    else if (c == ';')
                    {
                        _currentEscapedState = EscapedState.AwaitingSecondNumber;
                    }
                    else
                    {
                        ExecuteEscape(c);
                        _currentEscapedState = EscapedState.EscapeCompleted;
                    }
                    break;

                case EscapedState.AwaitingSecondNumber:
                    if (Char.IsDigit(c))
                    {
                        num2.Append(c);
                    }
                    else
                    {
                        ExecuteEscape(c);
                        _currentEscapedState = EscapedState.EscapeCompleted;
                    }
                    break;

                case EscapedState.EscapeBegun:
                    if (c == '[')
                    {
                        _currentEscapedState = EscapedState.AwaitingFirstNumber;
                    }
                    else
                    {
                        _currentEscapedState = EscapedState.EscapeCompleted;
                    }
                    break;

                case EscapedState.EscapeCompleted:
                    if (c == '\x1b')
                    {
                        this._currentEscapedState = EscapedState.EscapeBegun;
                        num1.Length = 0;
                        num2.Length = 0;
                    }
                    else
                    {
                        PutChar(c);
                    }
                    break;

                default:
                    PutChar(c);
                    break;
                }
            }
            else
            {
                PutChar(c);
            }
        }
        /// <summary>
        /// Writes a character to the terminal emulator possible 
        /// interpreting escape commands
        /// </summary>
        /// <param name="c">Character to be written</param>
        public void Write(char c)
        {
            if (_enableEscapeSquence)
            {
                switch (_currentEscapedState)
                {
                    case EscapedState.AwaitingFirstNumber:
                        if (Char.IsDigit(c))
                            num1.Append(c);
                        else if (c == ';')
                        {
                            _currentEscapedState = EscapedState.AwaitingSecondNumber;
                        }
                        else
                        {
                            ExecuteEscape(c);
                            _currentEscapedState = EscapedState.EscapeCompleted;
                        }
                        break;
                    case EscapedState.AwaitingSecondNumber:
                        if (Char.IsDigit(c))
                            num2.Append(c);
                        else
                        {
                            ExecuteEscape(c);
                            _currentEscapedState = EscapedState.EscapeCompleted;
                        }
                        break;
                    case EscapedState.EscapeBegun:
                        if(c=='[')
                            _currentEscapedState=EscapedState.AwaitingFirstNumber;
                        else
                            _currentEscapedState=EscapedState.EscapeCompleted;
                        break;
                    case EscapedState.EscapeCompleted:
                        if (c == '\x1b')
                        {
                            this._currentEscapedState = EscapedState.EscapeBegun;
                            num1.Length = 0;
                            num2.Length = 0;
                        }
                        else
                            PutChar(c);
                        break;
                    default:
                        PutChar(c);
                        break;
                }

            }
            else
                PutChar(c);
        }