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