gdb/cli-out.c - gdb
Global variables defined
Data types defined
Functions defined
Source code
- #include "defs.h"
- #include "ui-out.h"
- #include "cli-out.h"
- #include "vec.h"
- typedef struct cli_ui_out_data cli_out_data;
- static void cli_text (struct ui_out *uiout, const char *string);
- static void field_separator (void);
- static void out_field_fmt (struct ui_out *uiout, int fldno,
- const char *fldname,
- const char *format,...) ATTRIBUTE_PRINTF (4, 5);
- static void
- cli_uiout_dtor (struct ui_out *ui_out)
- {
- cli_out_data *data = ui_out_data (ui_out);
- VEC_free (ui_filep, data->streams);
- xfree (data);
- }
- static void
- cli_table_begin (struct ui_out *uiout, int nbrofcols,
- int nr_rows,
- const char *tblid)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (nr_rows == 0)
- data->suppress_output = 1;
- else
-
- gdb_assert (data->suppress_output == 0);
- }
- static void
- cli_table_body (struct ui_out *uiout)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
-
- cli_text (uiout, "\n");
- }
- static void
- cli_table_end (struct ui_out *uiout)
- {
- cli_out_data *data = ui_out_data (uiout);
- data->suppress_output = 0;
- }
- static void
- cli_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
- const char *col_name,
- const char *colhdr)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
-
- uo_field_string (uiout, 0, width, alignment, 0, colhdr);
- }
- static void
- cli_begin (struct ui_out *uiout,
- enum ui_out_type type,
- int level,
- const char *id)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
- }
- static void
- cli_end (struct ui_out *uiout,
- enum ui_out_type type,
- int level)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
- }
- static void
- cli_field_int (struct ui_out *uiout, int fldno, int width,
- enum ui_align alignment,
- const char *fldname, int value)
- {
- char buffer[20]; FIXME
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
- xsnprintf (buffer, sizeof (buffer), "%d", value);
-
- uo_field_string (uiout, fldno, width, alignment, fldname, buffer);
- }
- static void
- cli_field_skip (struct ui_out *uiout, int fldno, int width,
- enum ui_align alignment,
- const char *fldname)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
-
- uo_field_string (uiout, fldno, width, alignment, fldname, "");
- }
- static void
- cli_field_string (struct ui_out *uiout,
- int fldno,
- int width,
- enum ui_align align,
- const char *fldname,
- const char *string)
- {
- int before = 0;
- int after = 0;
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
- if ((align != ui_noalign) && string)
- {
- before = width - strlen (string);
- if (before <= 0)
- before = 0;
- else
- {
- if (align == ui_right)
- after = 0;
- else if (align == ui_left)
- {
- after = before;
- before = 0;
- }
- else
-
- {
- after = before / 2;
- before -= after;
- }
- }
- }
- if (before)
- ui_out_spaces (uiout, before);
- if (string)
- out_field_fmt (uiout, fldno, fldname, "%s", string);
- if (after)
- ui_out_spaces (uiout, after);
- if (align != ui_noalign)
- field_separator ();
- }
- static void ATTRIBUTE_PRINTF (6, 0)
- cli_field_fmt (struct ui_out *uiout, int fldno,
- int width, enum ui_align align,
- const char *fldname,
- const char *format,
- va_list args)
- {
- cli_out_data *data = ui_out_data (uiout);
- struct ui_file *stream;
- if (data->suppress_output)
- return;
- stream = VEC_last (ui_filep, data->streams);
- vfprintf_filtered (stream, format, args);
- if (align != ui_noalign)
- field_separator ();
- }
- static void
- cli_spaces (struct ui_out *uiout, int numspaces)
- {
- cli_out_data *data = ui_out_data (uiout);
- struct ui_file *stream;
- if (data->suppress_output)
- return;
- stream = VEC_last (ui_filep, data->streams);
- print_spaces_filtered (numspaces, stream);
- }
- static void
- cli_text (struct ui_out *uiout, const char *string)
- {
- cli_out_data *data = ui_out_data (uiout);
- struct ui_file *stream;
- if (data->suppress_output)
- return;
- stream = VEC_last (ui_filep, data->streams);
- fputs_filtered (string, stream);
- }
- static void ATTRIBUTE_PRINTF (3, 0)
- cli_message (struct ui_out *uiout, int verbosity,
- const char *format, va_list args)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
- if (ui_out_get_verblvl (uiout) >= verbosity)
- {
- struct ui_file *stream = VEC_last (ui_filep, data->streams);
- vfprintf_unfiltered (stream, format, args);
- }
- }
- static void
- cli_wrap_hint (struct ui_out *uiout, char *identstring)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (data->suppress_output)
- return;
- wrap_here (identstring);
- }
- static void
- cli_flush (struct ui_out *uiout)
- {
- cli_out_data *data = ui_out_data (uiout);
- struct ui_file *stream = VEC_last (ui_filep, data->streams);
- gdb_flush (stream);
- }
- static int
- cli_redirect (struct ui_out *uiout, struct ui_file *outstream)
- {
- cli_out_data *data = ui_out_data (uiout);
- if (outstream != NULL)
- VEC_safe_push (ui_filep, data->streams, outstream);
- else
- VEC_pop (ui_filep, data->streams);
- return 0;
- }
- static void
- out_field_fmt (struct ui_out *uiout, int fldno,
- const char *fldname,
- const char *format,...)
- {
- cli_out_data *data = ui_out_data (uiout);
- struct ui_file *stream = VEC_last (ui_filep, data->streams);
- va_list args;
- va_start (args, format);
- vfprintf_filtered (stream, format, args);
- va_end (args);
- }
- static void
- field_separator (void)
- {
- cli_out_data *data = ui_out_data (current_uiout);
- struct ui_file *stream = VEC_last (ui_filep, data->streams);
- fputc_filtered (' ', stream);
- }
- const struct ui_out_impl cli_ui_out_impl =
- {
- cli_table_begin,
- cli_table_body,
- cli_table_end,
- cli_table_header,
- cli_begin,
- cli_end,
- cli_field_int,
- cli_field_skip,
- cli_field_string,
- cli_field_fmt,
- cli_spaces,
- cli_text,
- cli_message,
- cli_wrap_hint,
- cli_flush,
- cli_redirect,
- cli_uiout_dtor,
- 0,
- };
- void
- cli_out_data_ctor (cli_out_data *self, struct ui_file *stream)
- {
- gdb_assert (stream != NULL);
- self->streams = NULL;
- VEC_safe_push (ui_filep, self->streams, stream);
- self->suppress_output = 0;
- }
- struct ui_out *
- cli_out_new (struct ui_file *stream)
- {
- int flags = ui_source_list;
- cli_out_data *data = XNEW (cli_out_data);
- cli_out_data_ctor (data, stream);
- return ui_out_new (&cli_ui_out_impl, data, flags);
- }
- struct ui_file *
- cli_out_set_stream (struct ui_out *uiout, struct ui_file *stream)
- {
- cli_out_data *data = ui_out_data (uiout);
- struct ui_file *old;
- old = VEC_pop (ui_filep, data->streams);
- VEC_quick_push (ui_filep, data->streams, stream);
- return old;
- }