GDB (xrefs)
tui-out.c
Go to the documentation of this file.
1 /* Output generating routines for GDB CLI.
2 
3  Copyright (C) 1999-2015 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 "cli-out.h"
26 #include "tui.h"
28  {
30 
31  int line;
33  };
35 
36 /* This is the TUI ui-out implementation functions vector. It is
37  initialized below in _initialize_tui_out, inheriting the CLI
38  version, and overriding a few methods. */
39 
41 
42 /* Output an int field. */
43 
44 static void
45 tui_field_int (struct ui_out *uiout,
46  int fldno, int width,
47  enum ui_align alignment,
48  const char *fldname,
49  int value)
50 {
51  tui_out_data *data = ui_out_data (uiout);
52 
53  if (data->base.suppress_output)
54  return;
55 
56  /* Don't print line number, keep it for later. */
57  if (data->start_of_line == 0 && strcmp (fldname, "line") == 0)
58  {
59  data->start_of_line ++;
60  data->line = value;
61  return;
62  }
63  data->start_of_line ++;
64 
65  (*cli_ui_out_impl.field_int) (uiout, fldno,
66  width, alignment, fldname, value);
67 }
68 
69 /* Other cli_field_* end up here so alignment and field separators are
70  both handled by tui_field_string. */
71 
72 static void
73 tui_field_string (struct ui_out *uiout,
74  int fldno, int width,
75  enum ui_align align,
76  const char *fldname,
77  const char *string)
78 {
79  tui_out_data *data = ui_out_data (uiout);
80 
81  if (data->base.suppress_output)
82  return;
83 
84  if (fldname && data->line > 0 && strcmp (fldname, "fullname") == 0)
85  {
86  data->start_of_line ++;
87  if (data->line > 0)
88  {
89  tui_show_source (string, data->line);
90  }
91  return;
92  }
93 
94  data->start_of_line++;
95 
96  (*cli_ui_out_impl.field_string) (uiout, fldno,
97  width, align,
98  fldname, string);
99 }
100 
101 /* This is the only field function that does not align. */
102 
103 static void
104 tui_field_fmt (struct ui_out *uiout, int fldno,
105  int width, enum ui_align align,
106  const char *fldname,
107  const char *format,
108  va_list args)
109 {
110  tui_out_data *data = ui_out_data (uiout);
111 
112  if (data->base.suppress_output)
113  return;
114 
115  data->start_of_line++;
116 
117  (*cli_ui_out_impl.field_fmt) (uiout, fldno,
118  width, align,
119  fldname, format, args);
120 }
121 
122 static void
123 tui_text (struct ui_out *uiout, const char *string)
124 {
125  tui_out_data *data = ui_out_data (uiout);
126 
127  if (data->base.suppress_output)
128  return;
129  data->start_of_line ++;
130  if (data->line > 0)
131  {
132  if (strchr (string, '\n') != 0)
133  {
134  data->line = -1;
135  data->start_of_line = 0;
136  }
137  return;
138  }
139  if (strchr (string, '\n'))
140  data->start_of_line = 0;
141 
142  (*cli_ui_out_impl.text) (uiout, string);
143 }
144 
145 struct ui_out *
146 tui_out_new (struct ui_file *stream)
147 {
148  int flags = 0;
149 
150  tui_out_data *data = XNEW (tui_out_data);
151 
152  /* Initialize base "class". */
153  cli_out_data_ctor (&data->base, stream);
154 
155  /* Initialize our fields. */
156  data->line = -1;
157  data->start_of_line = 0;
158 
159  return ui_out_new (&tui_ui_out_impl, data, flags);
160 }
161 
162 /* Standard gdb initialization hook. */
163 
164 extern void _initialize_tui_out (void);
165 
166 void
168 {
169  /* Inherit the CLI version. */
171 
172  /* Override a few methods. */
177 }
static void tui_field_string(struct ui_out *uiout, int fldno, int width, enum ui_align align, const char *fldname, const char *string)
Definition: tui-out.c:73
int start_of_line
Definition: tui-out.c:32
void cli_out_data_ctor(cli_out_data *self, struct ui_file *stream)
Definition: cli-out.c:387
Definition: ui-out.c:99
text_ftype * text
Definition: ui-out.h:220
field_fmt_ftype * field_fmt
Definition: ui-out.h:218
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1885
const struct ui_out_impl cli_ui_out_impl
Definition: cli-out.c:362
static struct ui_out_impl tui_ui_out_impl
Definition: tui-out.c:40
void * data
Definition: ui-out.c:104
void _initialize_tui_out(void)
Definition: tui-out.c:167
void tui_show_source(const char *fullname, int line)
Definition: tui.c:628
struct ui_out * ui_out_new(const struct ui_out_impl *impl, void *data, int flags)
Definition: ui-out.c:1096
static void tui_text(struct ui_out *uiout, const char *string)
Definition: tui-out.c:123
field_string_ftype * field_string
Definition: ui-out.h:217
static void tui_field_fmt(struct ui_out *uiout, int fldno, int width, enum ui_align align, const char *fldname, const char *format, va_list args)
Definition: tui-out.c:104
Definition: value.c:172
struct cli_ui_out_data base
Definition: tui-out.c:29
static void tui_field_int(struct ui_out *uiout, int fldno, int width, enum ui_align alignment, const char *fldname, int value)
Definition: tui-out.c:45
ui_align
Definition: ui-out.h:38
int suppress_output
Definition: cli-out.h:37
void * ui_out_data(struct ui_out *uiout)
Definition: ui-out.c:1066
struct ui_out * tui_out_new(struct ui_file *stream)
Definition: tui-out.c:146
field_int_ftype * field_int
Definition: ui-out.h:215