/* Output generating routines for GDB CLI.
- Copyright 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2000, 2002, 2003, 2005
+ Free Software Foundation, Inc.
Contributed by Cygnus Solutions.
Written by Fernando Nasser for Cygnus.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#include "defs.h"
#include "ui-out.h"
struct ui_out_data
{
struct ui_file *stream;
+ struct ui_file *original_stream;
int suppress_output;
};
typedef struct ui_out_data cli_out_data;
static void cli_field_fmt (struct ui_out *uiout, int fldno,
int width, enum ui_align align,
const char *fldname, const char *format,
- va_list args);
+ va_list args) ATTR_FORMAT (printf, 6, 0);
static void cli_spaces (struct ui_out *uiout, int numspaces);
static void cli_text (struct ui_out *uiout, const char *string);
static void cli_message (struct ui_out *uiout, int verbosity,
- const char *format, va_list args);
+ const char *format, va_list args)
+ ATTR_FORMAT (printf, 3, 0);
static void cli_wrap_hint (struct ui_out *uiout, char *identstring);
static void cli_flush (struct ui_out *uiout);
+static int cli_redirect (struct ui_out *uiout, struct ui_file *outstream);
/* This is the CLI ui-out implementation functions vector */
cli_message,
cli_wrap_hint,
cli_flush,
+ cli_redirect,
0, /* Does not need MI hacks (i.e. needs CLI hacks). */
};
static void out_field_fmt (struct ui_out *uiout, int fldno,
const char *fldname,
- const char *format,...);
+ const char *format,...) ATTR_FORMAT (printf, 4, 5);
/* local variables */
if (nr_rows == 0)
data->suppress_output = 1;
else
- /* Only the table suppresses the output and, fortunatly, a table
- is not a recursive data structure. */
+ /* Only the table suppresses the output and, fortunately, a table
+ is not a recursive data structure. */
gdb_assert (data->suppress_output == 0);
}
field_separator ();
}
-/* This is the only field function that does not align */
+/* This is the only field function that does not align. */
void
cli_field_fmt (struct ui_out *uiout, int fldno,
gdb_flush (data->stream);
}
+int
+cli_redirect (struct ui_out *uiout, struct ui_file *outstream)
+{
+ struct ui_out_data *data = ui_out_data (uiout);
+ if (outstream != NULL)
+ {
+ data->original_stream = data->stream;
+ data->stream = outstream;
+ }
+ else if (data->original_stream != NULL)
+ {
+ data->stream = data->original_stream;
+ data->original_stream = NULL;
+ }
+
+ return 0;
+}
+
/* local functions */
/* Like cli_field_fmt, but takes a variable number of args
- and makes a va_list and does not insert a separator */
+ and makes a va_list and does not insert a separator. */
/* VARARGS */
static void
va_end (args);
}
-/* access to ui_out format private members */
+/* Access to ui_out format private members. */
static void
field_separator (void)
fputc_filtered (' ', data->stream);
}
-/* initalize private members at startup */
+/* Initalize private members at startup. */
struct ui_out *
cli_out_new (struct ui_file *stream)
cli_out_data *data = XMALLOC (cli_out_data);
data->stream = stream;
+ data->original_stream = NULL;
data->suppress_output = 0;
return ui_out_new (&cli_ui_out_impl, data, flags);
}
return old;
}
-/* standard gdb initialization hook */
+/* Standard gdb initialization hook. */
void
_initialize_cli_out (void)
{