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