]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ui-out.h
This commit was manufactured by cvs2svn to create branch
[thirdparty/binutils-gdb.git] / gdb / ui-out.h
CommitLineData
8b93c638 1/* Output generating routines for GDB.
bee0189a 2
9b254dd1 3 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008
bee0189a
DJ
4 Free Software Foundation, Inc.
5
8b93c638
JM
6 Contributed by Cygnus Solutions.
7 Written by Fernando Nasser for Cygnus.
8
9 This file is part of GDB.
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
a9762ec7 13 the Free Software Foundation; either version 3 of the License, or
8b93c638
JM
14 (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
a9762ec7 22 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8b93c638
JM
23
24#ifndef UI_OUT_H
25#define UI_OUT_H 1
26
27/* The ui_out structure */
28
8b93c638
JM
29struct ui_out;
30struct ui_out_data;
e6e5e94c 31struct ui_file;
8b93c638
JM
32
33/* the current ui_out */
34
35/* FIXME: This should not be a global but something passed down from main.c
36 or top.c */
37extern struct ui_out *uiout;
38
39/* alignment enum */
40enum ui_align
41 {
42 ui_left = -1,
43 ui_center,
44 ui_right,
45 ui_noalign
46 };
47
48/* flags enum */
49enum ui_flags
50 {
51 ui_from_tty = 1,
52 ui_source_list = 2
53 };
54
55
56/* The ui_out stream structure. */
57/* NOTE: cagney/2000-02-01: The ui_stream object can be subsumed by
58 the more generic ui_file object. */
59
60struct ui_stream
61 {
62 struct ui_out *uiout;
63 struct ui_file *stream;
64 };
65
66
67/* Prototypes for ui-out API. */
68
631ec795 69/* A result is a recursive data structure consisting of lists and
666547aa 70 tuples. */
631ec795
AC
71
72enum ui_out_type
73 {
666547aa 74 ui_out_type_tuple,
631ec795
AC
75 ui_out_type_list
76 };
77
78extern void ui_out_begin (struct ui_out *uiout,
79 enum ui_out_type level_type,
80 const char *id);
81
82extern void ui_out_end (struct ui_out *uiout, enum ui_out_type type);
83
127431f9
AC
84extern struct cleanup *ui_out_begin_cleanup_end (struct ui_out *uiout,
85 enum ui_out_type level_type,
86 const char *id);
87
d63f1d40
AC
88/* A table can be considered a special tuple/list combination with the
89 implied structure: ``table = { hdr = { header, ... } , body = [ {
90 field, ... }, ... ] }''. If NR_ROWS is negative then there is at
91 least one row. */
a14ed312 92extern void ui_out_table_header (struct ui_out *uiout, int width,
b25959ec
AC
93 enum ui_align align, const char *col_name,
94 const char *colhdr);
8b93c638 95
a14ed312 96extern void ui_out_table_body (struct ui_out *uiout);
8b93c638 97
3b31d625
EZ
98extern struct cleanup *make_cleanup_ui_out_table_begin_end (struct ui_out *ui_out,
99 int nr_cols,
100 int nr_rows,
101 const char *tblid);
6b28c186 102/* Compatibility wrappers. */
631ec795 103
6b28c186
AC
104extern struct cleanup *make_cleanup_ui_out_list_begin_end (struct ui_out *uiout,
105 const char *id);
666547aa 106
666547aa
AC
107extern struct cleanup *make_cleanup_ui_out_tuple_begin_end (struct ui_out *uiout,
108 const char *id);
e6e0bfab 109
88379baf
AC
110extern void ui_out_field_int (struct ui_out *uiout, const char *fldname,
111 int value);
8b93c638 112
52c6a6ac
JJ
113extern void ui_out_field_fmt_int (struct ui_out *uiout, int width,
114 enum ui_align align, const char *fldname,
115 int value);
116
88379baf 117extern void ui_out_field_core_addr (struct ui_out *uiout, const char *fldname,
a14ed312 118 CORE_ADDR address);
8b93c638 119
88379baf 120extern void ui_out_field_string (struct ui_out * uiout, const char *fldname,
8b93c638
JM
121 const char *string);
122
88379baf 123extern void ui_out_field_stream (struct ui_out *uiout, const char *fldname,
a14ed312 124 struct ui_stream *buf);
8b93c638 125
88379baf 126extern void ui_out_field_fmt (struct ui_out *uiout, const char *fldname,
bee0189a
DJ
127 const char *format, ...)
128 ATTR_FORMAT (printf, 3, 4);
8b93c638 129
88379baf 130extern void ui_out_field_skip (struct ui_out *uiout, const char *fldname);
8b93c638 131
a14ed312 132extern void ui_out_spaces (struct ui_out *uiout, int numspaces);
8b93c638 133
88379baf 134extern void ui_out_text (struct ui_out *uiout, const char *string);
8b93c638 135
a14ed312 136extern void ui_out_message (struct ui_out *uiout, int verbosity,
bee0189a
DJ
137 const char *format, ...)
138 ATTR_FORMAT (printf, 3, 4);
8b93c638 139
a14ed312 140extern struct ui_stream *ui_out_stream_new (struct ui_out *uiout);
8b93c638 141
a14ed312 142extern void ui_out_stream_delete (struct ui_stream *buf);
8b93c638
JM
143
144struct cleanup *make_cleanup_ui_out_stream_delete (struct ui_stream *buf);
145
a14ed312 146extern void ui_out_wrap_hint (struct ui_out *uiout, char *identstring);
8b93c638 147
a14ed312 148extern void ui_out_flush (struct ui_out *uiout);
8b93c638 149
a14ed312 150extern void ui_out_get_field_separator (struct ui_out *uiout);
8b93c638 151
a14ed312 152extern int ui_out_set_flags (struct ui_out *uiout, int mask);
8b93c638 153
a14ed312 154extern int ui_out_clear_flags (struct ui_out *uiout, int mask);
8b93c638 155
a14ed312 156extern int ui_out_get_verblvl (struct ui_out *uiout);
8b93c638
JM
157
158extern int ui_out_test_flags (struct ui_out *uiout, int mask);
159
160#if 0
a14ed312 161extern void ui_out_result_begin (struct ui_out *uiout, char *class);
8b93c638 162
a14ed312 163extern void ui_out_result_end (struct ui_out *uiout);
8b93c638 164
a14ed312 165extern void ui_out_info_begin (struct ui_out *uiout, char *class);
8b93c638 166
a14ed312 167extern void ui_out_info_end (struct ui_out *uiout);
8b93c638 168
a14ed312 169extern void ui_out_notify_begin (struct ui_out *uiout, char *class);
8b93c638 170
a14ed312 171extern void ui_out_notify_end (struct ui_out *uiout);
8b93c638 172
a14ed312 173extern void ui_out_error_begin (struct ui_out *uiout, char *class);
8b93c638 174
a14ed312 175extern void ui_out_error_end (struct ui_out *uiout);
8b93c638
JM
176#endif
177
178#if 0
a14ed312 179extern void gdb_error (struct ui_out *uiout, int severity, char *format, ...);
8b93c638 180
a14ed312 181extern void gdb_query (struct ui_out *uiout, int qflags, char *qprompt);
8b93c638
JM
182#endif
183
9dc5e2a9
AC
184/* HACK: Code in GDB is currently checking to see the type of ui_out
185 builder when determining which output to produce. This function is
186 a hack to encapsulate that test. Once GDB manages to separate the
187 CLI/MI from the core of GDB the problem should just go away .... */
188
189extern int ui_out_is_mi_like_p (struct ui_out *uiout);
190
8b93c638
JM
191/* From here on we have things that are only needed by implementation
192 routines and main.c. We should pehaps have a separate file for that,
193 like a ui-out-impl.h file */
194
195/* User Interface Output Implementation Function Table */
196
197/* Type definition of all implementation functions. */
198
199typedef void (table_begin_ftype) (struct ui_out * uiout,
d63f1d40
AC
200 int nbrofcols, int nr_rows,
201 const char *tblid);
8b93c638
JM
202typedef void (table_body_ftype) (struct ui_out * uiout);
203typedef void (table_end_ftype) (struct ui_out * uiout);
204typedef void (table_header_ftype) (struct ui_out * uiout, int width,
b25959ec 205 enum ui_align align, const char *col_name,
e2e11a41 206 const char *colhdr);
80f49b30
AC
207/* Note: level 0 is the top-level so LEVEL is always greater than
208 zero. */
631ec795
AC
209typedef void (ui_out_begin_ftype) (struct ui_out *uiout,
210 enum ui_out_type type,
211 int level, const char *id);
212typedef void (ui_out_end_ftype) (struct ui_out *uiout,
213 enum ui_out_type type,
214 int level);
8b93c638 215typedef void (field_int_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
216 enum ui_align align,
217 const char *fldname, int value);
8b93c638 218typedef void (field_skip_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
219 enum ui_align align,
220 const char *fldname);
8b93c638 221typedef void (field_string_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
222 enum ui_align align,
223 const char *fldname,
8b93c638
JM
224 const char *string);
225typedef void (field_fmt_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
226 enum ui_align align,
227 const char *fldname,
228 const char *format,
bee0189a 229 va_list args) ATTRIBUTE_FPTR_PRINTF(6,0);
8b93c638 230typedef void (spaces_ftype) (struct ui_out * uiout, int numspaces);
e2e11a41
AC
231typedef void (text_ftype) (struct ui_out * uiout,
232 const char *string);
8b93c638 233typedef void (message_ftype) (struct ui_out * uiout, int verbosity,
bee0189a
DJ
234 const char *format, va_list args)
235 ATTRIBUTE_FPTR_PRINTF(3,0);
8b93c638
JM
236typedef void (wrap_hint_ftype) (struct ui_out * uiout, char *identstring);
237typedef void (flush_ftype) (struct ui_out * uiout);
0fac0b41
DJ
238typedef int (redirect_ftype) (struct ui_out * uiout,
239 struct ui_file * outstream);
8b93c638
JM
240
241/* ui-out-impl */
242
243/* IMPORTANT: If you change this structure, make sure to change the default
244 initialization in ui-out.c */
245
246struct ui_out_impl
247 {
248 table_begin_ftype *table_begin;
249 table_body_ftype *table_body;
250 table_end_ftype *table_end;
251 table_header_ftype *table_header;
631ec795
AC
252 ui_out_begin_ftype *begin;
253 ui_out_end_ftype *end;
8b93c638
JM
254 field_int_ftype *field_int;
255 field_skip_ftype *field_skip;
256 field_string_ftype *field_string;
257 field_fmt_ftype *field_fmt;
258 spaces_ftype *spaces;
259 text_ftype *text;
260 message_ftype *message;
261 wrap_hint_ftype *wrap_hint;
262 flush_ftype *flush;
0fac0b41 263 redirect_ftype *redirect;
9dc5e2a9 264 int is_mi_like_p;
8b93c638
JM
265 };
266
267extern struct ui_out_data *ui_out_data (struct ui_out *uiout);
268
269
270/* Create a ui_out object */
271
272extern struct ui_out *ui_out_new (struct ui_out_impl *impl,
273 struct ui_out_data *data,
274 int flags);
275
0fac0b41
DJ
276/* Redirect the ouptut of a ui_out object temporarily. */
277
278extern int ui_out_redirect (struct ui_out *uiout, struct ui_file *outstream);
279
8b93c638 280#endif /* UI_OUT_H */