/// <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); }