/* Output generating routines for GDB CLI.
- Copyright (C) 1999-2017 Free Software Foundation, Inc.
+ Copyright (C) 1999-2019 Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
Written by Fernando Nasser for Cygnus.
#include "cli-out.h"
#include "completer.h"
#include "readline/readline.h"
+#include "cli/cli-style.h"
/* These are the CLI output functions */
if (m_suppress_output)
return;
- do_field_string (0, width, alignment, 0, col_hdr.c_str ());
+ do_field_string (0, width, alignment, 0, col_hdr.c_str (),
+ ui_out_style_kind::DEFAULT);
}
/* Mark beginning of a list */
cli_ui_out::do_field_int (int fldno, int width, ui_align alignment,
const char *fldname, int value)
{
- char buffer[20]; /* FIXME: how many chars long a %d can become? */
-
if (m_suppress_output)
return;
- xsnprintf (buffer, sizeof (buffer), "%d", value);
+ std::string str = string_printf ("%d", value);
- do_field_string (fldno, width, alignment, fldname, buffer);
+ do_field_string (fldno, width, alignment, fldname, str.c_str (),
+ ui_out_style_kind::DEFAULT);
}
/* used to omit a field */
if (m_suppress_output)
return;
- do_field_string (fldno, width, alignment, fldname, "");
+ do_field_string (fldno, width, alignment, fldname, "",
+ ui_out_style_kind::DEFAULT);
}
/* other specific cli_field_* end up here so alignment and field
void
cli_ui_out::do_field_string (int fldno, int width, ui_align align,
- const char *fldname, const char *string)
+ const char *fldname, const char *string,
+ ui_out_style_kind style)
{
int before = 0;
int after = 0;
spaces (before);
if (string)
- out_field_fmt (fldno, fldname, "%s", string);
+ {
+ ui_file_style fstyle;
+ switch (style)
+ {
+ case ui_out_style_kind::DEFAULT:
+ /* Nothing. */
+ break;
+ case ui_out_style_kind::FILE:
+ /* Nothing. */
+ fstyle = file_name_style.style ();
+ break;
+ case ui_out_style_kind::FUNCTION:
+ fstyle = function_name_style.style ();
+ break;
+ case ui_out_style_kind::VARIABLE:
+ fstyle = variable_name_style.style ();
+ break;
+ case ui_out_style_kind::ADDRESS:
+ fstyle = address_style.style ();
+ break;
+ default:
+ gdb_assert_not_reached ("missing case");
+ }
+ fputs_styled (string, fstyle, m_streams.back ());
+ }
if (after)
spaces (after);
field_separator ();
}
-/* This is the only field function that does not align. */
+/* Output field containing ARGS using printf formatting in FORMAT. */
void
cli_ui_out::do_field_fmt (int fldno, int width, ui_align align,
if (m_suppress_output)
return;
- vfprintf_filtered (m_streams.back (), format, args);
+ std::string str = string_vprintf (format, args);
- if (align != ui_noalign)
- field_separator ();
+ do_field_string (fldno, width, align, fldname, str.c_str (),
+ ui_out_style_kind::DEFAULT);
}
void
and make it therefore active. OUTSTREAM as NULL will pop the last pushed
output stream; it is an internal error if it does not exist. */
-int
+void
cli_ui_out::do_redirect (ui_file *outstream)
{
if (outstream != NULL)
m_streams.push_back (outstream);
else
m_streams.pop_back ();
-
- return 0;
}
/* local functions */
-/* Like cli_ui_out::do_field_fmt, but takes a variable number of args
- and makes a va_list and does not insert a separator. */
-
-/* VARARGS */
-void
-cli_ui_out::out_field_fmt (int fldno, const char *fldname,
- const char *format, ...)
-{
- va_list args;
-
- va_start (args, format);
- vfprintf_filtered (m_streams.back (), format, args);
-
- va_end (args);
-}
-
void
cli_ui_out::field_separator ()
{