X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcli-out.c;h=bd079f250bb8eccdbcff469443ee94fd21475b07;hb=29673b2905f938f0bedfc8035e3ab51f8483c112;hp=c7abdbeffcac11814632163311a48478df99d29b;hpb=1d1358b6679fee0ea559723c6c9b06c900e7c330;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/cli-out.c b/gdb/cli-out.c index c7abdbeffc..bd079f250b 100644 --- a/gdb/cli-out.c +++ b/gdb/cli-out.c @@ -1,5 +1,7 @@ /* Output generating routines for GDB CLI. - Copyright 1999-2000 Free Software Foundation, Inc. + + Copyright 1999, 2000, 2002 Free Software Foundation, Inc. + Contributed by Cygnus Solutions. Written by Fernando Nasser for Cygnus. @@ -24,41 +26,41 @@ #include "ui-out.h" #include "cli-out.h" #include "gdb_string.h" - -/* Convenience macro for allocting typesafe memory. */ - -#ifndef XMALLOC -#define XMALLOC(TYPE) (TYPE*) xmalloc (sizeof (TYPE)) -#endif +#include "gdb_assert.h" struct ui_out_data { struct ui_file *stream; + int suppress_output; }; /* These are the CLI output functions */ -static void cli_table_begin (struct ui_out *uiout, int nbrofcols, char *tblid); +static void cli_table_begin (struct ui_out *uiout, int nbrofcols, + int nr_rows, const char *tblid); static void cli_table_body (struct ui_out *uiout); static void cli_table_end (struct ui_out *uiout); static void cli_table_header (struct ui_out *uiout, int width, - enum ui_align alig, char *colhdr); -static void cli_list_begin (struct ui_out *uiout, int list_flag, char *lstid); -static void cli_list_end (struct ui_out *uiout, int list_flag); + enum ui_align alig, const char *col_name, + const char *colhdr); +static void cli_begin (struct ui_out *uiout, enum ui_out_type type, + int level, const char *lstid); +static void cli_end (struct ui_out *uiout, enum ui_out_type type, int level); static void cli_field_int (struct ui_out *uiout, int fldno, int width, - enum ui_align alig, char *fldname, int value); + enum ui_align alig, const char *fldname, int value); static void cli_field_skip (struct ui_out *uiout, int fldno, int width, - enum ui_align alig, char *fldname); + enum ui_align alig, const char *fldname); static void cli_field_string (struct ui_out *uiout, int fldno, int width, - enum ui_align alig, char *fldname, + enum ui_align alig, const char *fldname, const char *string); static void cli_field_fmt (struct ui_out *uiout, int fldno, int width, enum ui_align align, - char *fldname, char *format, va_list args); + const char *fldname, const char *format, + va_list args); static void cli_spaces (struct ui_out *uiout, int numspaces); -static void cli_text (struct ui_out *uiout, char *string); -static void cli_message (struct ui_out *uiout, int verbosity, char *format, - va_list args); +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); static void cli_wrap_hint (struct ui_out *uiout, char *identstring); static void cli_flush (struct ui_out *uiout); @@ -73,8 +75,8 @@ static struct ui_out_impl cli_ui_out_impl = cli_table_body, cli_table_end, cli_table_header, - cli_list_begin, - cli_list_end, + cli_begin, + cli_end, cli_field_int, cli_field_skip, cli_field_string, @@ -83,17 +85,19 @@ static struct ui_out_impl cli_ui_out_impl = cli_text, cli_message, cli_wrap_hint, - cli_flush + cli_flush, + 0, /* Does not need MI hacks (i.e. needs CLI hacks). */ }; /* Prototypes for local functions */ -extern void _initialize_cli_out PARAMS ((void)); +extern void _initialize_cli_out (void); static void field_separator (void); -static void out_field_fmt (struct ui_out *uiout, int fldno, char *fldname, - char *format,...); +static void out_field_fmt (struct ui_out *uiout, int fldno, + const char *fldname, + const char *format,...); /* local variables */ @@ -102,19 +106,27 @@ static void out_field_fmt (struct ui_out *uiout, int fldno, char *fldname, /* Mark beginning of a table */ void -cli_table_begin (uiout, nbrofcols, tblid) - struct ui_out *uiout; - int nbrofcols; - char *tblid; +cli_table_begin (struct ui_out *uiout, int nbrofcols, + int nr_rows, + const char *tblid) { + struct ui_out_data *data = ui_out_data (uiout); + 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. */ + gdb_assert (data->suppress_output == 0); } /* Mark beginning of a table body */ void -cli_table_body (uiout) - struct ui_out *uiout; +cli_table_body (struct ui_out *uiout) { + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; /* first, close the table header line */ cli_text (uiout, "\n"); } @@ -122,55 +134,62 @@ cli_table_body (uiout) /* Mark end of a table */ void -cli_table_end (uiout) - struct ui_out *uiout; +cli_table_end (struct ui_out *uiout) { + struct ui_out_data *data = ui_out_data (uiout); + data->suppress_output = 0; } /* Specify table header */ void -cli_table_header (uiout, width, alignment, colhdr) - struct ui_out *uiout; - int width; - enum ui_align alignment; - char *colhdr; +cli_table_header (struct ui_out *uiout, int width, enum ui_align alignment, + const char *col_name, + const char *colhdr) { + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; cli_field_string (uiout, 0, width, alignment, 0, colhdr); } /* Mark beginning of a list */ void -cli_list_begin (uiout, list_flag, lstid) - struct ui_out *uiout; - int list_flag; - char *lstid; +cli_begin (struct ui_out *uiout, + enum ui_out_type type, + int level, + const char *id) { + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; } /* Mark end of a list */ void -cli_list_end (uiout, list_flag) - struct ui_out *uiout; - int list_flag; +cli_end (struct ui_out *uiout, + enum ui_out_type type, + int level) { + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; } /* output an int field */ void -cli_field_int (uiout, fldno, width, alignment, fldname, value) - struct ui_out *uiout; - int fldno; - int width; - enum ui_align alignment; - char *fldname; - int value; +cli_field_int (struct ui_out *uiout, int fldno, int width, + enum ui_align alignment, + const char *fldname, int value) { char buffer[20]; /* FIXME: how many chars long a %d can become? */ + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; sprintf (buffer, "%d", value); cli_field_string (uiout, fldno, width, alignment, fldname, buffer); } @@ -178,13 +197,13 @@ cli_field_int (uiout, fldno, width, alignment, fldname, value) /* used to ommit a field */ void -cli_field_skip (uiout, fldno, width, alignment, fldname) - struct ui_out *uiout; - int fldno; - int width; - enum ui_align alignment; - char *fldname; +cli_field_skip (struct ui_out *uiout, int fldno, int width, + enum ui_align alignment, + const char *fldname) { + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; cli_field_string (uiout, fldno, width, alignment, fldname, ""); } @@ -196,12 +215,16 @@ cli_field_string (struct ui_out *uiout, int fldno, int width, enum ui_align align, - char *fldname, + const char *fldname, const char *string) { int before = 0; int after = 0; + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; + if ((align != ui_noalign) && string) { before = width - strlen (string); @@ -241,9 +264,14 @@ cli_field_string (struct ui_out *uiout, void cli_field_fmt (struct ui_out *uiout, int fldno, int width, enum ui_align align, - char *fldname, char *format, va_list args) + const char *fldname, + const char *format, + va_list args) { struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; + vfprintf_filtered (data->stream, format, args); if (align != ui_noalign) @@ -251,42 +279,45 @@ cli_field_fmt (struct ui_out *uiout, int fldno, } void -cli_spaces (uiout, numspaces) - struct ui_out *uiout; - int numspaces; +cli_spaces (struct ui_out *uiout, int numspaces) { struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; print_spaces_filtered (numspaces, data->stream); } void -cli_text (uiout, string) - struct ui_out *uiout; - char *string; +cli_text (struct ui_out *uiout, const char *string) { struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; fputs_filtered (string, data->stream); } void -cli_message (struct ui_out *uiout, int verbosity, char *format, va_list args) +cli_message (struct ui_out *uiout, int verbosity, + const char *format, va_list args) { struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; if (ui_out_get_verblvl (uiout) >= verbosity) vfprintf_unfiltered (data->stream, format, args); } void -cli_wrap_hint (uiout, identstring) - struct ui_out *uiout; - char *identstring; +cli_wrap_hint (struct ui_out *uiout, char *identstring) { + struct ui_out_data *data = ui_out_data (uiout); + if (data->suppress_output) + return; wrap_here (identstring); } void -cli_flush (uiout) - struct ui_out *uiout; +cli_flush (struct ui_out *uiout) { struct ui_out_data *data = ui_out_data (uiout); gdb_flush (data->stream); @@ -299,8 +330,9 @@ cli_flush (uiout) /* VARARGS */ static void -out_field_fmt (struct ui_out *uiout, int fldno, char *fldname, - char *format,...) +out_field_fmt (struct ui_out *uiout, int fldno, + const char *fldname, + const char *format,...) { struct ui_out_data *data = ui_out_data (uiout); va_list args; @@ -314,7 +346,7 @@ out_field_fmt (struct ui_out *uiout, int fldno, char *fldname, /* access to ui_out format private members */ static void -field_separator () +field_separator (void) { struct ui_out_data *data = ui_out_data (uiout); fputc_filtered (' ', data->stream); @@ -329,12 +361,13 @@ cli_out_new (struct ui_file *stream) struct ui_out_data *data = XMALLOC (struct ui_out_data); data->stream = stream; + data->suppress_output = 0; return ui_out_new (&cli_ui_out_impl, data, flags); } /* standard gdb initialization hook */ void -_initialize_cli_out () +_initialize_cli_out (void) { /* nothing needs to be done */ }