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