1 /* Output generating routines for GDB CLI. 2 3 Copyright (C) 1999-2019 Free Software Foundation, Inc. 4 5 Contributed by Cygnus Solutions. 6 Written by Fernando Nasser for Cygnus. 7 8 This file is part of GDB. 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License as published by 12 the Free Software Foundation; either version 3 of the License, or 13 (at your option) any later version. 14 15 This program is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 GNU General Public License for more details. 19 20 You should have received a copy of the GNU General Public License 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 22 23 #include "defs.h" 24 #include "ui-out.h" 25 #include "tui-out.h" 26 #include "tui.h" 27 28 /* Output an int field. */ 29 30 void 31 tui_ui_out::do_field_int (int fldno, int width, ui_align alignment, 32 const char *fldname, int value) 33 { 34 if (suppress_output ()) 35 return; 36 37 /* Don't print line number, keep it for later. */ 38 if (m_start_of_line == 0 && strcmp (fldname, "line") == 0) 39 { 40 m_start_of_line++; 41 m_line = value; 42 return; 43 } 44 m_start_of_line++; 45 46 cli_ui_out::do_field_int (fldno, width, alignment, fldname, value); 47 } 48 49 /* Other cli_field_* end up here so alignment and field separators are 50 both handled by tui_field_string. */ 51 52 void 53 tui_ui_out::do_field_string (int fldno, int width, ui_align align, 54 const char *fldname, const char *string, 55 ui_out_style_kind style) 56 { 57 if (suppress_output ()) 58 return; 59 60 if (fldname && m_line > 0 && strcmp (fldname, "fullname") == 0) 61 { 62 m_start_of_line++; 63 if (m_line > 0) 64 { 65 tui_show_source (string, m_line); 66 } 67 return; 68 } 69 70 m_start_of_line++; 71 72 cli_ui_out::do_field_string (fldno, width, align, fldname, string, style); 73 } 74 75 void 76 tui_ui_out::do_field_fmt (int fldno, int width, ui_align align, 77 const char *fldname, const char *format, 78 va_list args) 79 { 80 if (suppress_output ()) 81 return; 82 83 m_start_of_line++; 84 85 cli_ui_out::do_field_fmt (fldno, width, align, fldname, format, args); 86 } 87 88 void 89 tui_ui_out::do_text (const char *string) 90 { 91 if (suppress_output ()) 92 return; 93 94 m_start_of_line++; 95 if (m_line > 0) 96 { 97 if (strchr (string, '\n') != 0) 98 { 99 m_line = -1; 100 m_start_of_line = 0; 101 } 102 return; 103 } 104 if (strchr (string, '\n')) 105 m_start_of_line = 0; 106 107 cli_ui_out::do_text (string); 108 } 109 110 tui_ui_out::tui_ui_out (ui_file *stream) 111 : cli_ui_out (stream, 0), 112 m_line (-1), 113 m_start_of_line (0) 114 { 115 } 116 117 tui_ui_out * 118 tui_out_new (struct ui_file *stream) 119 { 120 return new tui_ui_out (stream); 121 } 122