public LineSprite(ConsoleString line, String fontFace, int fontSize, Device device) { _line = line; _fontFace = fontFace; _fontSize = fontSize; Rebuild(device); }
private void ParseInput(String line, ConsoleString.StringType type) { if (_wrappers.Count > 0) { OutputAppend(line + Environment.NewLine, type); lock (_wrappers) { foreach (IWrapper wrapper in _wrappers) { wrapper.SendLine(line, type); } } } else { string command = line.Split(' ')[0]; string args = line.Substring(line.IndexOf(' ') + 1); string[] splitLine = line.Split(new string[] { " ", "\n", "\n\r", Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); switch (command) { case "exit": { AlertListenersFinished(); return; } case "cd": { OutputAppend(line + Environment.NewLine); ChangeDirectory(args); } break; default: { OutputAppend(line + Environment.NewLine); try { Wrapper wrapper = new Wrapper("cmd.exe", "/c " + line, _currentDirectory.FullName); wrapper.AddListener(this); lock (_wrappers) { _wrappers.Add(wrapper); } } catch (Exception e) { OutputAppend(e.Message + Environment.NewLine, ConsoleString.StringType.Err); } } break; } ShowDirectory(); } }
private void OutputAppend(string str, ConsoleString.StringType type) { lock (_availableLines) { str = _currentLine + str; string[] lines = str.Split(new string[] { Environment.NewLine, "\n", "\n\r" }, StringSplitOptions.None); for (int i = 0; i < lines.Length - 1; i++) { if (_hasNextType && type == ConsoleString.StringType.Normal) _availableLines.Add(new ConsoleString(lines[i], _nextType)); else _availableLines.Add(new ConsoleString(lines[i], type)); _hasNextType = false; } _currentLine = lines[lines.Length - 1]; } StartAlertListeners(); }
public void SendLine(string line, ConsoleString.StringType type) { _nextType = type; _hasNextType = true; ParseInput(line, type); }
public ConsoleString[] PeekText() { ConsoleString[] output; lock (_availableLines) { output = new ConsoleString[_availableLines.Count]; _availableLines.CopyTo(output, 0); } return output; }
private void ProcessText() { lock (_currentLines) { if (_currentLines.Count > 0) { ConsoleString[] lines = new ConsoleString[_currentLines.Count]; _currentLines.CopyTo(lines, 0); foreach (ConsoleString line in lines) { if (line.Finalised) { _graphics.AddLine(line); _currentLines.Remove(line); } } } UpdateCurrentLine(); } }
private void OutputAppend(string str, ConsoleString.StringType type) { lock (_availableLines) { str = _currentLine + str; string[] lines = str.Split(new string[] { Environment.NewLine, "\n", "\n\r" }, StringSplitOptions.None); for (int i = 0; i < lines.Length - 1; i++) { if (_hasNextType) { _availableLines.Add(new ConsoleString(lines[i], _nextType)); _hasNextType = false; } else _availableLines.Add(new ConsoleString(lines[i], type)); } _currentLine = lines[lines.Length - 1]; } // If there is already an alerting thread then // don't do anything if (!_alerting) { // The following may not be absolutely necessary but // better safe than sorry :D if (_alertListeners != null) { if (_alertListeners.IsAlive) { // Give thread some time to exit if (!_alertListeners.Join(100)) { _alertListeners.Abort(); _alertListeners.Join(); } } _alertListeners = null; } _alertListeners = new Thread(new ThreadStart(AlertListeners)); _alerting = true; _alertListeners.Start(); } }
public void SendLine(string line, ConsoleString.StringType type) { _nextType = type; _hasNextType = true; _process.StandardInput.WriteLine(line); }
public ConsoleString[] GetText() { lock (_availableLines) { ConsoleString[] output = new ConsoleString[_availableLines.Count]; _availableLines.CopyTo(output, 0); _availableLines.Clear(); return output; } }