Automatic date update in version.in
[deliverable/binutils-gdb.git] / gdb / ui-out.h
CommitLineData
8b93c638 1/* Output generating routines for GDB.
bee0189a 2
618f726f 3 Copyright (C) 1999-2016 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
bef721e2
SM
26#include "common/enum-flags.h"
27
8b93c638
JM
28/* The ui_out structure */
29
8b93c638 30struct ui_out;
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
581e13c1 36 or top.c. */
b6dcde57
PA
37extern struct ui_out **current_ui_current_uiout_ptr (void);
38#define current_uiout (*current_ui_current_uiout_ptr ())
8b93c638
JM
39
40/* alignment enum */
41enum ui_align
42 {
43 ui_left = -1,
44 ui_center,
45 ui_right,
46 ui_noalign
47 };
48
49/* flags enum */
bef721e2 50enum ui_out_flag
8b93c638 51 {
bef721e2 52 ui_source_list = (1 << 0),
8b93c638
JM
53 };
54
bef721e2 55DEF_ENUM_FLAGS_TYPE (ui_out_flag, ui_out_flags);
8b93c638 56
581e13c1 57/* Prototypes for ui-out API. */
8b93c638 58
631ec795 59/* A result is a recursive data structure consisting of lists and
581e13c1 60 tuples. */
631ec795
AC
61
62enum ui_out_type
63 {
666547aa 64 ui_out_type_tuple,
631ec795
AC
65 ui_out_type_list
66 };
67
68extern void ui_out_begin (struct ui_out *uiout,
69 enum ui_out_type level_type,
70 const char *id);
71
72extern void ui_out_end (struct ui_out *uiout, enum ui_out_type type);
73
d63f1d40
AC
74/* A table can be considered a special tuple/list combination with the
75 implied structure: ``table = { hdr = { header, ... } , body = [ {
581e13c1
MS
76 field, ... }, ... ] }''. If NR_ROWS is negative then there is at
77 least one row. */
a14ed312 78extern void ui_out_table_header (struct ui_out *uiout, int width,
c5209615
SM
79 enum ui_align align,
80 const std::string &col_name,
81 const std::string &col_hdr);
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
7fb048a2
SM
125extern void ui_out_message (struct ui_out *uiout, const char *format, ...)
126 ATTRIBUTE_PRINTF (2, 3);
8b93c638 127
d2c0eef4 128extern void ui_out_wrap_hint (struct ui_out *uiout, const char *identstring);
8b93c638 129
a14ed312 130extern void ui_out_flush (struct ui_out *uiout);
8b93c638 131
bef721e2 132extern int ui_out_test_flags (struct ui_out *uiout, ui_out_flags mask);
8b93c638 133
170b53b2 134extern int ui_out_query_field (struct ui_out *uiout, int colno,
c5209615
SM
135 int *width, int *alignment,
136 const char **col_name);
170b53b2 137
9dc5e2a9
AC
138/* HACK: Code in GDB is currently checking to see the type of ui_out
139 builder when determining which output to produce. This function is
140 a hack to encapsulate that test. Once GDB manages to separate the
141 CLI/MI from the core of GDB the problem should just go away .... */
142
143extern int ui_out_is_mi_like_p (struct ui_out *uiout);
144
8b93c638
JM
145/* From here on we have things that are only needed by implementation
146 routines and main.c. We should pehaps have a separate file for that,
581e13c1 147 like a ui-out-impl.h file. */
8b93c638
JM
148
149/* User Interface Output Implementation Function Table */
150
581e13c1 151/* Type definition of all implementation functions. */
8b93c638
JM
152
153typedef void (table_begin_ftype) (struct ui_out * uiout,
d63f1d40
AC
154 int nbrofcols, int nr_rows,
155 const char *tblid);
8b93c638
JM
156typedef void (table_body_ftype) (struct ui_out * uiout);
157typedef void (table_end_ftype) (struct ui_out * uiout);
158typedef void (table_header_ftype) (struct ui_out * uiout, int width,
c5209615
SM
159 enum ui_align align,
160 const std::string &col_name,
161 const std::string &col_hdr);
33b2fac6 162
631ec795
AC
163typedef void (ui_out_begin_ftype) (struct ui_out *uiout,
164 enum ui_out_type type,
33b2fac6 165 const char *id);
631ec795 166typedef void (ui_out_end_ftype) (struct ui_out *uiout,
33b2fac6 167 enum ui_out_type type);
8b93c638 168typedef void (field_int_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
169 enum ui_align align,
170 const char *fldname, int value);
8b93c638 171typedef void (field_skip_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
172 enum ui_align align,
173 const char *fldname);
8b93c638 174typedef void (field_string_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
175 enum ui_align align,
176 const char *fldname,
8b93c638
JM
177 const char *string);
178typedef void (field_fmt_ftype) (struct ui_out * uiout, int fldno, int width,
e2e11a41
AC
179 enum ui_align align,
180 const char *fldname,
181 const char *format,
bee0189a 182 va_list args) ATTRIBUTE_FPTR_PRINTF(6,0);
8b93c638 183typedef void (spaces_ftype) (struct ui_out * uiout, int numspaces);
e2e11a41
AC
184typedef void (text_ftype) (struct ui_out * uiout,
185 const char *string);
7fb048a2 186typedef void (message_ftype) (struct ui_out * uiout,
bee0189a 187 const char *format, va_list args)
7fb048a2 188 ATTRIBUTE_FPTR_PRINTF(2,0);
d2c0eef4 189typedef void (wrap_hint_ftype) (struct ui_out * uiout, const char *identstring);
8b93c638 190typedef void (flush_ftype) (struct ui_out * uiout);
0fac0b41
DJ
191typedef int (redirect_ftype) (struct ui_out * uiout,
192 struct ui_file * outstream);
b65a2bd9 193typedef void (data_destroy_ftype) (struct ui_out *uiout);
8b93c638
JM
194
195/* ui-out-impl */
196
8b93c638
JM
197struct ui_out_impl
198 {
199 table_begin_ftype *table_begin;
200 table_body_ftype *table_body;
201 table_end_ftype *table_end;
202 table_header_ftype *table_header;
631ec795
AC
203 ui_out_begin_ftype *begin;
204 ui_out_end_ftype *end;
8b93c638
JM
205 field_int_ftype *field_int;
206 field_skip_ftype *field_skip;
207 field_string_ftype *field_string;
208 field_fmt_ftype *field_fmt;
209 spaces_ftype *spaces;
210 text_ftype *text;
211 message_ftype *message;
212 wrap_hint_ftype *wrap_hint;
213 flush_ftype *flush;
0fac0b41 214 redirect_ftype *redirect;
b65a2bd9 215 data_destroy_ftype *data_destroy;
9dc5e2a9 216 int is_mi_like_p;
8b93c638
JM
217 };
218
0a8fce9a 219extern void *ui_out_data (struct ui_out *uiout);
8b93c638 220
0a8fce9a
PA
221extern void uo_field_string (struct ui_out *uiout, int fldno, int width,
222 enum ui_align align, const char *fldname,
223 const char *string);
8b93c638
JM
224
225/* Create a ui_out object */
226
bef721e2
SM
227extern struct ui_out *ui_out_new (const struct ui_out_impl *impl, void *data,
228 ui_out_flags flags);
8b93c638 229
0fac0b41
DJ
230/* Redirect the ouptut of a ui_out object temporarily. */
231
232extern int ui_out_redirect (struct ui_out *uiout, struct ui_file *outstream);
233
8b93c638 234#endif /* UI_OUT_H */
This page took 1.660594 seconds and 4 git commands to generate.