1/* Copyright (C) 2016-2020 Free Software Foundation, Inc. 2 3 This file is part of GDB. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18#ifndef TUI_TUI_OUT_H 19#define TUI_TUI_OUT_H 20 21#include "cli-out.h" 22 23/* A ui_out class for the TUI. This is just like the CLI's ui_out, 24 except that it overrides output methods to detect when a source 25 line is being printed and show the source in the TUI's source 26 window instead of printing the line in the console window. */ 27class tui_ui_out : public cli_ui_out 28{ 29public: 30 31 explicit tui_ui_out (ui_file *stream); 32 33protected: 34 35 void do_field_signed (int fldno, int width, ui_align align, const char *fldname, 36 LONGEST value) override; 37 void do_field_string (int fldno, int width, ui_align align, const char *fldname, 38 const char *string, const ui_file_style &style) override; 39 void do_field_fmt (int fldno, int width, ui_align align, const char *fldname, 40 const ui_file_style &style, 41 const char *format, va_list args) override 42 ATTRIBUTE_PRINTF (7, 0); 43 void do_text (const char *string) override; 44 45private: 46 47 /* These fields are used to make print_source_lines show the source 48 in the TUI's source window instead of in the console. 49 M_START_OF_LINE is incremented whenever something is output to 50 the ui_out. If an integer field named "line" is printed on the 51 ui_out, and nothing else has been printed yet (both 52 M_START_OF_LINE and M_LINE are still 0), we assume 53 print_source_lines is starting to print a source line, and thus 54 record the line number in M_LINE. Afterwards, when we see a 55 string field named "fullname" being output, we take the fullname 56 and the recorded line and show the source line in the TUI's 57 source window. tui_ui_out::do_text() suppresses text output 58 until it sees an endline being printed, at which point these 59 variables are reset back to 0. */ 60 int m_line = 0; 61 int m_start_of_line = 0; 62}; 63 64extern tui_ui_out *tui_out_new (struct ui_file *stream); 65 66#endif /* TUI_TUI_OUT_H */ 67