Fix ia64-linux fortran common linking problem.
[deliverable/binutils-gdb.git] / gdb / ui-out.c
index f94cd6025b2b6190dd42057ef3333ae788d379ed..5fe212bcd066bacb277416509128a93774e87107 100644 (file)
@@ -1,5 +1,5 @@
 /* Output generating routines for GDB.
-   Copyright 1999, 2000 Free Software Foundation, Inc.
+   Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
    Contributed by Cygnus Solutions.
    Written by Fernando Nasser for Cygnus.
 
@@ -25,6 +25,7 @@
 #include "expression.h"                /* For language.h */
 #include "language.h"
 #include "ui-out.h"
+#include "gdb_assert.h"
 
 /* Convenience macro for allocting typesafe memory. */
 
@@ -38,10 +39,25 @@ struct ui_out_hdr
     int colno;
     int width;
     int alignment;
+    char *col_name;
     char *colhdr;
     struct ui_out_hdr *next;
   };
 
+/* Maintain a stack so that the info applicable to the inner most list
+   is always available.  Stack/nested level 0 is reserved for the
+   top-level result. */
+
+enum { MAX_UI_OUT_LEVELS = 5 };
+
+struct ui_out_level
+  {
+    /* Count each field; the first element is for non-list fields */
+    int field_count;
+    /* The type of this level. */
+    enum ui_out_type type;
+  };
+
 /* The ui_out structure */
 /* Any change here requires a corresponding one in the initialization
    of the default uiout, which is statically initialized */
@@ -65,11 +81,9 @@ struct ui_out
     /* strinf identifying the table (as specified in the table_begin call) */
     char *table_id;
 
-    /* if on, a list is being generated.  The value is the level of nesting */
-    int list_flag;
-
-    /* we count each field; the first element is for non-list fields */
-    int field_count[5];
+    /* Sub structure tracking the table depth. */
+    int level;
+    struct ui_out_level levels[MAX_UI_OUT_LEVELS];
 
     /* points to the first header (if any) */
     struct ui_out_hdr *headerfirst;
@@ -82,30 +96,78 @@ struct ui_out
 
   };
 
+/* The current (inner most) level. */
+static struct ui_out_level *
+current_level (struct ui_out *uiout)
+{
+  return &uiout->levels[uiout->level];
+}
+
+/* Create a new level, of TYPE.  Return the new level's index. */
+static int
+push_level (struct ui_out *uiout,
+           enum ui_out_type type,
+           const char *id)
+{
+  struct ui_out_level *current;
+  /* We had better not overflow the buffer. */
+  uiout->level++;
+  gdb_assert (uiout->level >= 0 && uiout->level < MAX_UI_OUT_LEVELS);
+  current = current_level (uiout);
+  current->field_count = 0;
+  current->type = type;
+  return uiout->level;
+}
+
+/* Discard the current level, return the discarded level's index.
+   TYPE is the type of the level being discarded. */
+static int
+pop_level (struct ui_out *uiout,
+          enum ui_out_type type)
+{
+  /* We had better not underflow the buffer. */
+  gdb_assert (uiout->level > 0 && uiout->level < MAX_UI_OUT_LEVELS);
+  gdb_assert (current_level (uiout)->type == type);
+  uiout->level--;
+  return uiout->level + 1;
+}
+
+
 /* These are the default implementation functions */
 
 static void default_table_begin (struct ui_out *uiout, int nbrofcols,
-                                char *tblid);
+                                int nr_rows, const char *tblid);
 static void default_table_body (struct ui_out *uiout);
 static void default_table_end (struct ui_out *uiout);
 static void default_table_header (struct ui_out *uiout, int width,
-                                 enum ui_align alig, char *colhdr);
-static void default_list_begin (struct ui_out *uiout, int list_flag,
-                               char *lstid);
-static void default_list_end (struct ui_out *uiout, int list_flag);
+                                 enum ui_align alig, const char *col_name,
+                                 const char *colhdr);
+static void default_begin (struct ui_out *uiout,
+                          enum ui_out_type type,
+                          int level, const char *id);
+static void default_end (struct ui_out *uiout,
+                        enum ui_out_type type,
+                        int level);
 static void default_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 default_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 default_field_string (struct ui_out *uiout, int fldno, int width,
-                                 enum ui_align align, char *fldname,
+                                 enum ui_align align,
+                                 const char *fldname,
                                  const char *string);
 static void default_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 default_spaces (struct ui_out *uiout, int numspaces);
-static void default_text (struct ui_out *uiout, char *string);
-static void default_message (struct ui_out *uiout, int verbosity, char *format,
+static void default_text (struct ui_out *uiout, const char *string);
+static void default_message (struct ui_out *uiout, int verbosity,
+                            const char *format,
                             va_list args);
 static void default_wrap_hint (struct ui_out *uiout, char *identstring);
 static void default_flush (struct ui_out *uiout);
@@ -118,8 +180,8 @@ struct ui_out_impl default_ui_out_impl =
   default_table_body,
   default_table_end,
   default_table_header,
-  default_list_begin,
-  default_list_end,
+  default_begin,
+  default_end,
   default_field_int,
   default_field_skip,
   default_field_string,
@@ -147,33 +209,42 @@ struct ui_out *uiout = &def_uiout;
 
 /* These are the interfaces to implementation functions */
 
-static void uo_table_begin (struct ui_out *uiout, int nbrofcols, char *tblid);
+static void uo_table_begin (struct ui_out *uiout, int nbrofcols,
+                           int nr_rows, const char *tblid);
 static void uo_table_body (struct ui_out *uiout);
 static void uo_table_end (struct ui_out *uiout);
 static void uo_table_header (struct ui_out *uiout, int width,
-                            enum ui_align align, char *colhdr);
-static void uo_list_begin (struct ui_out *uiout, int list_flag, char *lstid);
-static void uo_list_end (struct ui_out *uiout, int list_flag);
+                            enum ui_align align, const char *col_name,
+                            const char *colhdr);
+static void uo_begin (struct ui_out *uiout,
+                     enum ui_out_type type,
+                     int level, const char *id);
+static void uo_end (struct ui_out *uiout,
+                   enum ui_out_type type,
+                   int level);
 static void uo_field_int (struct ui_out *uiout, int fldno, int width,
-                         enum ui_align align, char *fldname, int value);
+                         enum ui_align align, const char *fldname, int value);
 static void uo_field_skip (struct ui_out *uiout, int fldno, int width,
-                          enum ui_align align, char *fldname);
+                          enum ui_align align, const char *fldname);
 static void uo_field_string (struct ui_out *uiout, int fldno, int width,
-                         enum ui_align align, char *fldname, const char *string);
+                            enum ui_align align, const char *fldname,
+                            const char *string);
 static void uo_field_fmt (struct ui_out *uiout, int fldno, int width,
-                         enum ui_align align, char *fldname,
-                         char *format, va_list args);
+                         enum ui_align align, const char *fldname,
+                         const char *format, va_list args);
 static void uo_spaces (struct ui_out *uiout, int numspaces);
-static void uo_text (struct ui_out *uiout, char *string);
+static void uo_text (struct ui_out *uiout, const char *string);
 static void uo_message (struct ui_out *uiout, int verbosity,
-                       char *format, va_list args);
+                       const char *format, va_list args);
 static void uo_wrap_hint (struct ui_out *uiout, char *identstring);
 static void uo_flush (struct ui_out *uiout);
 
 /* Prototypes for local functions */
 
 extern void _initialize_ui_out (void);
-static void append_header_to_list (struct ui_out *uiout, int width, int alignment, char *colhdr);
+static void append_header_to_list (struct ui_out *uiout, int width,
+                                  int alignment, const char *col_name,
+                                  const char *colhdr);
 static int get_curr_header (struct ui_out *uiout, int *colno, int *width,
                            int *alignment, char **colhdr);
 static void clear_header_list (struct ui_out *uiout);
@@ -187,13 +258,13 @@ static void init_ui_out_state (struct ui_out *uiout);
 /* Mark beginning of a table */
 
 void
-ui_out_table_begin (uiout, nbrofcols, tblid)
-     struct ui_out *uiout;
-     int nbrofcols;
-     char *tblid;
+ui_out_table_begin (struct ui_out *uiout, int nbrofcols,
+                   int nr_rows,
+                   const char *tblid)
 {
   if (uiout->table_flag)
-    internal_error ("gdb/ui_out.c: tables cannot be nested; table_begin found before \
+    internal_error (__FILE__, __LINE__,
+                   "tables cannot be nested; table_begin found before \
 previous table_end.");
 
   uiout->table_flag = 1;
@@ -204,21 +275,23 @@ previous table_end.");
     uiout->table_id = NULL;
   clear_header_list (uiout);
 
-  uo_table_begin (uiout, nbrofcols, uiout->table_id);
+  uo_table_begin (uiout, nbrofcols, nr_rows, uiout->table_id);
 }
 
 void
-ui_out_table_body (uiout)
-     struct ui_out *uiout;
+ui_out_table_body (struct ui_out *uiout)
 {
   if (!uiout->table_flag)
-    internal_error ("gdb/ui_out.c: table_body outside a table is not valid; it must be \
+    internal_error (__FILE__, __LINE__,
+                   "table_body outside a table is not valid; it must be \
 after a table_begin and before a table_end.");
   if (uiout->body_flag)
-    internal_error ("gdb/ui_out.c: extra table_body call not allowed; there must be \
+    internal_error (__FILE__, __LINE__,
+                   "extra table_body call not allowed; there must be \
 only one table_body after a table_begin and before a table_end.");
   if (uiout->headercurr->colno != uiout->table_columns)
-    internal_error ("gdb/ui_out.c: number of headers differ from number of table \
+    internal_error (__FILE__, __LINE__,
+                   "number of headers differ from number of table \
 columns.");
 
   uiout->body_flag = 1;
@@ -228,11 +301,11 @@ columns.");
 }
 
 void
-ui_out_table_end (uiout)
-     struct ui_out *uiout;
+ui_out_table_end (struct ui_out *uiout)
 {
   if (!uiout->table_flag)
-    internal_error ("gdb/ui_out.c: misplaced table_end or missing table_begin.");
+    internal_error (__FILE__, __LINE__,
+                   "misplaced table_end or missing table_begin.");
 
   uiout->body_flag = 0;
   uiout->table_flag = 0;
@@ -240,72 +313,138 @@ ui_out_table_end (uiout)
   uo_table_end (uiout);
 
   if (uiout->table_id)
-    free (uiout->table_id);
+    xfree (uiout->table_id);
   clear_header_list (uiout);
 }
 
 void
-ui_out_table_header (uiout, width, alignment, colhdr)
-     struct ui_out *uiout;
-     int width;
-     enum ui_align alignment;
-     char *colhdr;
+ui_out_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
+                    const char *col_name,
+                    const char *colhdr)
 {
   if (!uiout->table_flag || uiout->body_flag)
-    internal_error ("ui_out: table header must be specified after table_begin \
+    internal_error (__FILE__, __LINE__,
+                   "table header must be specified after table_begin \
 and before table_body.");
 
-  append_header_to_list (uiout, width, alignment, colhdr);
+  append_header_to_list (uiout, width, alignment, col_name, colhdr);
 
-  uo_table_header (uiout, width, alignment, colhdr);
+  uo_table_header (uiout, width, alignment, col_name, colhdr);
 }
 
 void
-ui_out_list_begin (uiout, lstid)
-     struct ui_out *uiout;
-     char *lstid;
+ui_out_begin (struct ui_out *uiout,
+             enum ui_out_type type,
+             const char *id)
 {
+  int new_level;
   if (uiout->table_flag && !uiout->body_flag)
-    internal_error ("ui_out: table header or table_body expected; lists must be \
+    internal_error (__FILE__, __LINE__,
+                   "table header or table_body expected; lists must be \
 specified after table_body.");
-  if (uiout->list_flag >= 4)
-    internal_error ("ui_out: list depth exceeded; only 4 levels of lists can be \
-nested.");
-
-  uiout->list_flag++;
-  uiout->field_count[uiout->list_flag] = 0;
-  if (uiout->table_flag && (uiout->list_flag == 1))
+  new_level = push_level (uiout, type, id);
+  if (uiout->table_flag && (new_level == 1))
     uiout->headercurr = uiout->headerfirst;
+  uo_begin (uiout, type, new_level, id);
+}
 
-  uo_list_begin (uiout, uiout->list_flag, lstid);
+void
+ui_out_list_begin (struct ui_out *uiout,
+                  const char *id)
+{
+  ui_out_begin (uiout, ui_out_type_list, id);
 }
 
 void
-ui_out_list_end (uiout)
-     struct ui_out *uiout;
+ui_out_tuple_begin (struct ui_out *uiout, const char *id)
 {
-  if (!uiout->list_flag)
-    internal_error ("ui_out: misplaced list_end; there is no list to be closed.");
+  ui_out_begin (uiout, ui_out_type_tuple, id);
+}
 
-  uo_list_end (uiout, uiout->list_flag);
+void
+ui_out_end (struct ui_out *uiout,
+           enum ui_out_type type)
+{
+  int old_level = pop_level (uiout, type);
+  uo_end (uiout, type, old_level);
+}
 
-  uiout->list_flag--;
+void
+ui_out_list_end (struct ui_out *uiout)
+{
+  ui_out_end (uiout, ui_out_type_list);
 }
 
 void
-ui_out_field_int (uiout, fldname, value)
-     struct ui_out *uiout;
-     char *fldname;
-     int value;
+ui_out_tuple_end (struct ui_out *uiout)
+{
+  ui_out_end (uiout, ui_out_type_tuple);
+}
+
+struct ui_out_end_cleanup_data
+{
+  struct ui_out *uiout;
+  enum ui_out_type type;
+};
+
+static void
+do_cleanup_end (void *data)
+{
+  struct ui_out_end_cleanup_data *end_cleanup_data = data;
+  ui_out_end (end_cleanup_data->uiout, end_cleanup_data->type);
+  xfree (end_cleanup_data);
+}
+
+static struct cleanup *
+make_cleanup_ui_out_end (struct ui_out *uiout,
+                        enum ui_out_type type)
+{
+  struct ui_out_end_cleanup_data *end_cleanup_data;
+  end_cleanup_data = XMALLOC (struct ui_out_end_cleanup_data);
+  end_cleanup_data->uiout = uiout;
+  end_cleanup_data->type = type;
+  return make_cleanup (do_cleanup_end, end_cleanup_data);
+}
+
+struct cleanup *
+make_cleanup_ui_out_begin_end (struct ui_out *uiout,
+                              enum ui_out_type type,
+                              const char *id)
+{
+  ui_out_begin (uiout, type, id);
+  return make_cleanup_ui_out_end (uiout, type);
+}
+
+struct cleanup *
+make_cleanup_ui_out_tuple_begin_end (struct ui_out *uiout,
+                                    const char *id)
+{
+  ui_out_tuple_begin (uiout, id);
+  return make_cleanup_ui_out_end (uiout, ui_out_type_tuple);
+}
+
+struct cleanup *
+make_cleanup_ui_out_list_begin_end (struct ui_out *uiout,
+                                   const char *id)
+{
+  ui_out_list_begin (uiout, id);
+  return make_cleanup_ui_out_end (uiout, ui_out_type_list);
+}
+
+void
+ui_out_field_int (struct ui_out *uiout,
+                 const char *fldname,
+                 int value)
 {
   int fldno;
   int width;
   int align;
+  struct ui_out_level *current = current_level (uiout);
 
   verify_field_proper_position (uiout);
 
-  uiout->field_count[uiout->list_flag] += 1;
-  fldno = uiout->field_count[uiout->list_flag];
+  current->field_count += 1;
+  fldno = current->field_count;
 
   verify_field_alignment (uiout, fldno, &width, &align);
 
@@ -313,10 +452,9 @@ ui_out_field_int (uiout, fldname, value)
 }
 
 void
-ui_out_field_core_addr (uiout, fldname, address)
-     struct ui_out *uiout;
-     char *fldname;
-     CORE_ADDR address;
+ui_out_field_core_addr (struct ui_out *uiout,
+                       const char *fldname,
+                       CORE_ADDR address)
 {
   char addstr[20];
 
@@ -328,14 +466,13 @@ ui_out_field_core_addr (uiout, fldname, address)
 }
 
 void
-ui_out_field_stream (uiout, fldname, buf)
-     struct ui_out *uiout;
-     char *fldname;
-     struct ui_stream *buf;
+ui_out_field_stream (struct ui_out *uiout,
+                    const char *fldname,
+                    struct ui_stream *buf)
 {
   long length;
   char *buffer = ui_file_xstrdup (buf->stream, &length);
-  struct cleanup *old_cleanup = make_cleanup (free, buffer);
+  struct cleanup *old_cleanup = make_cleanup (xfree, buffer);
   if (length > 0)
     ui_out_field_string (uiout, fldname, buffer);
   else
@@ -347,18 +484,18 @@ ui_out_field_stream (uiout, fldname, buf)
 /* used to ommit a field */
 
 void
-ui_out_field_skip (uiout, fldname)
-     struct ui_out *uiout;
-     char *fldname;
+ui_out_field_skip (struct ui_out *uiout,
+                  const char *fldname)
 {
   int fldno;
   int width;
   int align;
+  struct ui_out_level *current = current_level (uiout);
 
   verify_field_proper_position (uiout);
 
-  uiout->field_count[uiout->list_flag] += 1;
-  fldno = uiout->field_count[uiout->list_flag];
+  current->field_count += 1;
+  fldno = current->field_count;
 
   verify_field_alignment (uiout, fldno, &width, &align);
 
@@ -367,17 +504,18 @@ ui_out_field_skip (uiout, fldname)
 
 void
 ui_out_field_string (struct ui_out *uiout,
-                    char *fldname,
+                    const char *fldname,
                     const char *string)
 {
   int fldno;
   int width;
   int align;
+  struct ui_out_level *current = current_level (uiout);
 
   verify_field_proper_position (uiout);
 
-  uiout->field_count[uiout->list_flag] += 1;
-  fldno = uiout->field_count[uiout->list_flag];
+  current->field_count += 1;
+  fldno = current->field_count;
 
   verify_field_alignment (uiout, fldno, &width, &align);
 
@@ -386,17 +524,20 @@ ui_out_field_string (struct ui_out *uiout,
 
 /* VARARGS */
 void
-ui_out_field_fmt (struct ui_out *uiout, char *fldname, char *format,...)
+ui_out_field_fmt (struct ui_out *uiout,
+                 const char *fldname,
+                 const char *format, ...)
 {
   va_list args;
   int fldno;
   int width;
   int align;
+  struct ui_out_level *current = current_level (uiout);
 
   verify_field_proper_position (uiout);
 
-  uiout->field_count[uiout->list_flag] += 1;
-  fldno = uiout->field_count[uiout->list_flag];
+  current->field_count += 1;
+  fldno = current->field_count;
 
   /* will not align, but has to call anyway */
   verify_field_alignment (uiout, fldno, &width, &align);
@@ -409,23 +550,21 @@ ui_out_field_fmt (struct ui_out *uiout, char *fldname, char *format,...)
 }
 
 void
-ui_out_spaces (uiout, numspaces)
-     struct ui_out *uiout;
-     int numspaces;
+ui_out_spaces (struct ui_out *uiout, int numspaces)
 {
   uo_spaces (uiout, numspaces);
 }
 
 void
-ui_out_text (uiout, string)
-     struct ui_out *uiout;
-     char *string;
+ui_out_text (struct ui_out *uiout,
+            const char *string)
 {
   uo_text (uiout, string);
 }
 
 void
-ui_out_message (struct ui_out *uiout, int verbosity, char *format,...)
+ui_out_message (struct ui_out *uiout, int verbosity,
+               const char *format,...)
 {
   va_list args;
 
@@ -437,8 +576,7 @@ ui_out_message (struct ui_out *uiout, int verbosity, char *format,...)
 }
 
 struct ui_stream *
-ui_out_stream_new (uiout)
-     struct ui_out *uiout;
+ui_out_stream_new (struct ui_out *uiout)
 {
   struct ui_stream *tempbuf;
 
@@ -449,11 +587,10 @@ ui_out_stream_new (uiout)
 }
 
 void
-ui_out_stream_delete (buf)
-     struct ui_stream *buf;
+ui_out_stream_delete (struct ui_stream *buf)
 {
   ui_file_delete (buf->stream);
-  free (buf);
+  xfree (buf);
 }
 
 static void
@@ -470,25 +607,20 @@ make_cleanup_ui_out_stream_delete (struct ui_stream *buf)
 
 
 void
-ui_out_wrap_hint (uiout, identstring)
-     struct ui_out *uiout;
-     char *identstring;
+ui_out_wrap_hint (struct ui_out *uiout, char *identstring)
 {
   uo_wrap_hint (uiout, identstring);
 }
 
 void
-ui_out_flush (uiout)
-     struct ui_out *uiout;
+ui_out_flush (struct ui_out *uiout)
 {
   uo_flush (uiout);
 }
 
 /* set the flags specified by the mask given */
 int
-ui_out_set_flags (uiout, mask)
-     struct ui_out *uiout;
-     int mask;
+ui_out_set_flags (struct ui_out *uiout, int mask)
 {
   int oldflags = uiout->flags;
 
@@ -499,9 +631,7 @@ ui_out_set_flags (uiout, mask)
 
 /* clear the flags specified by the mask given */
 int
-ui_out_clear_flags (uiout, mask)
-     struct ui_out *uiout;
-     int mask;
+ui_out_clear_flags (struct ui_out *uiout, int mask)
 {
   int oldflags = uiout->flags;
 
@@ -512,9 +642,7 @@ ui_out_clear_flags (uiout, mask)
 
 /* test the flags against the mask given */
 int
-ui_out_test_flags (uiout, mask)
-     struct ui_out *uiout;
-     int mask;
+ui_out_test_flags (struct ui_out *uiout, int mask)
 {
   return (uiout->flags & mask);
 }
@@ -523,8 +651,7 @@ ui_out_test_flags (uiout, mask)
    'set verbositylevel' command */
 
 int
-ui_out_get_verblvl (uiout)
-     struct ui_out *uiout;
+ui_out_get_verblvl (struct ui_out *uiout)
 {
   /* FIXME: not implemented yet */
   return 0;
@@ -532,54 +659,42 @@ ui_out_get_verblvl (uiout)
 
 #if 0
 void
-ui_out_result_begin (uiout, class)
-     struct ui_out *uiout;
-     char *class;
+ui_out_result_begin (struct ui_out *uiout, char *class)
 {
 }
 
 void
-ui_out_result_end (uiout)
-     struct ui_out *uiout;
+ui_out_result_end (struct ui_out *uiout)
 {
 }
 
 void
-ui_out_info_begin (uiout, class)
-     struct ui_out *uiout;
-     char *class;
+ui_out_info_begin (struct ui_out *uiout, char *class)
 {
 }
 
 void
-ui_out_info_end (uiout)
-     struct ui_out *uiout;
+ui_out_info_end (struct ui_out *uiout)
 {
 }
 
 void
-ui_out_notify_begin (uiout, class)
-     struct ui_out *uiout;
-     char *class;
+ui_out_notify_begin (struct ui_out *uiout, char *class)
 {
 }
 
 void
-ui_out_notify_end (uiout)
-     struct ui_out *uiout;
+ui_out_notify_end (struct ui_out *uiout)
 {
 }
 
 void
-ui_out_error_begin (uiout, class)
-     struct ui_out *uiout;
-     char *class;
+ui_out_error_begin (struct ui_out *uiout, char *class)
 {
 }
 
 void
-ui_out_error_end (uiout)
-     struct ui_out *uiout;
+ui_out_error_end (struct ui_out *uiout)
 {
 }
 #endif
@@ -592,10 +707,7 @@ gdb_error (ui_out * uiout, int severity, char *format,...)
 }
 
 void
-gdb_query (uiout, qflags, qprompt)
-     struct ui_out *uiout;
-     int flags;
-     char *qprompt;
+gdb_query (struct ui_out *uiout, int qflags, char *qprompt)
 {
 }
 #endif
@@ -603,67 +715,54 @@ gdb_query (uiout, qflags, qprompt)
 /* default gdb-out hook functions */
 
 static void
-default_table_begin (uiout, nbrofcols, tblid)
-     struct ui_out *uiout;
-     int nbrofcols;
-     char *tblid;
+default_table_begin (struct ui_out *uiout, int nbrofcols,
+                    int nr_rows,
+                    const char *tblid)
 {
 }
 
 static void
-default_table_body (uiout)
-     struct ui_out *uiout;
+default_table_body (struct ui_out *uiout)
 {
 }
 
 static void
-default_table_end (uiout)
-     struct ui_out *uiout;
+default_table_end (struct ui_out *uiout)
 {
 }
 
 static void
-default_table_header (uiout, width, alignment, colhdr)
-     struct ui_out *uiout;
-     int width;
-     enum ui_align alignment;
-     char *colhdr;
+default_table_header (struct ui_out *uiout, int width, enum ui_align alignment,
+                     const char *col_name,
+                     const char *colhdr)
 {
 }
 
 static void
-default_list_begin (uiout, list_flag, lstid)
-     struct ui_out *uiout;
-     int list_flag;
-     char *lstid;
+default_begin (struct ui_out *uiout,
+              enum ui_out_type type,
+              int level,
+              const char *id)
 {
 }
 
 static void
-default_list_end (uiout, list_flag)
-     struct ui_out *uiout;
-     int list_flag;
+default_end (struct ui_out *uiout,
+            enum ui_out_type type,
+            int level)
 {
 }
 
 static void
-default_field_int (uiout, fldno, width, align, fldname, value)
-     struct ui_out *uiout;
-     int fldno;
-     int width;
-     enum ui_align align;
-     char *fldname;
-     int value;
+default_field_int (struct ui_out *uiout, int fldno, int width,
+                  enum ui_align align,
+                  const char *fldname, int value)
 {
 }
 
 static void
-default_field_skip (uiout, fldno, width, align, fldname)
-     struct ui_out *uiout;
-     int fldno;
-     int width;
-     enum ui_align align;
-     char *fldname;
+default_field_skip (struct ui_out *uiout, int fldno, int width,
+                   enum ui_align align, const char *fldname)
 {
 }
 
@@ -672,67 +771,57 @@ default_field_string (struct ui_out *uiout,
                      int fldno,
                      int width,
                      enum ui_align align,
-                     char *fldname,
+                     const char *fldname,
                      const char *string)
 {
 }
 
 static void
-default_field_fmt (uiout, fldno, width, align, fldname, format, args)
-     struct ui_out *uiout;
-     int fldno;
-     int width;
-     enum ui_align align;
-     char *fldname;
-     char *format;
-     va_list args;
+default_field_fmt (struct ui_out *uiout, int fldno, int width,
+                  enum ui_align align,
+                  const char *fldname,
+                  const char *format,
+                  va_list args)
 {
 }
 
 static void
-default_spaces (uiout, numspaces)
-     struct ui_out *uiout;
-     int numspaces;
+default_spaces (struct ui_out *uiout, int numspaces)
 {
 }
 
 static void
-default_text (uiout, string)
-     struct ui_out *uiout;
-     char *string;
+default_text (struct ui_out *uiout, const char *string)
 {
 }
 
 static void
-default_message (uiout, verbosity, format, args)
-     struct ui_out *uiout;
-     int verbosity;
-     char *format;
-     va_list args;
+default_message (struct ui_out *uiout, int verbosity,
+                const char *format,
+                va_list args)
 {
 }
 
 static void
-default_wrap_hint (uiout, identstring)
-     struct ui_out *uiout;
-     char *identstring;
+default_wrap_hint (struct ui_out *uiout, char *identstring)
 {
 }
 
 static void
-default_flush (uiout)
-     struct ui_out *uiout;
+default_flush (struct ui_out *uiout)
 {
 }
 
 /* Interface to the implementation functions */
 
 void
-uo_table_begin (struct ui_out *uiout, int nbrofcols, char *tblid)
+uo_table_begin (struct ui_out *uiout, int nbrofcols,
+               int nr_rows,
+               const char *tblid)
 {
   if (!uiout->impl->table_begin)
     return;
-  uiout->impl->table_begin (uiout, nbrofcols, tblid);
+  uiout->impl->table_begin (uiout, nbrofcols, nr_rows, tblid);
 }
 
 void
@@ -752,31 +841,40 @@ uo_table_end (struct ui_out *uiout)
 }
 
 void
-uo_table_header (struct ui_out *uiout, int width, enum ui_align align, char *colhdr)
+uo_table_header (struct ui_out *uiout, int width, enum ui_align align,
+                const char *col_name,
+                const char *colhdr)
 {
   if (!uiout->impl->table_header)
     return;
-  uiout->impl->table_header (uiout, width, align, colhdr);
+  uiout->impl->table_header (uiout, width, align, col_name, colhdr);
 }
 
 void
-uo_list_begin (struct ui_out *uiout, int list_flag, char *lstid)
+uo_begin (struct ui_out *uiout,
+         enum ui_out_type type,
+         int level,
+         const char *id)
 {
-  if (!uiout->impl->list_begin)
+  if (uiout->impl->begin == NULL)
     return;
-  uiout->impl->list_begin (uiout, list_flag, lstid);
+  uiout->impl->begin (uiout, type, level, id);
 }
 
 void
-uo_list_end (struct ui_out *uiout, int list_flag)
+uo_end (struct ui_out *uiout,
+       enum ui_out_type type,
+       int level)
 {
-  if (!uiout->impl->list_end)
+  if (uiout->impl->end == NULL)
     return;
-  uiout->impl->list_end (uiout, list_flag);
+  uiout->impl->end (uiout, type, level);
 }
 
 void
-uo_field_int (struct ui_out *uiout, int fldno, int width, enum ui_align align, char *fldname, int value)
+uo_field_int (struct ui_out *uiout, int fldno, int width, enum ui_align align,
+             const char *fldname,
+             int value)
 {
   if (!uiout->impl->field_int)
     return;
@@ -784,7 +882,8 @@ uo_field_int (struct ui_out *uiout, int fldno, int width, enum ui_align align, c
 }
 
 void
-uo_field_skip (struct ui_out *uiout, int fldno, int width, enum ui_align align, char *fldname)
+uo_field_skip (struct ui_out *uiout, int fldno, int width, enum ui_align align,
+              const char *fldname)
 {
   if (!uiout->impl->field_skip)
     return;
@@ -793,7 +892,9 @@ uo_field_skip (struct ui_out *uiout, int fldno, int width, enum ui_align align,
 
 void
 uo_field_string (struct ui_out *uiout, int fldno, int width,
-                enum ui_align align, char *fldname, const char *string)
+                enum ui_align align,
+                const char *fldname,
+                const char *string)
 {
   if (!uiout->impl->field_string)
     return;
@@ -801,7 +902,10 @@ uo_field_string (struct ui_out *uiout, int fldno, int width,
 }
 
 void
-uo_field_fmt (struct ui_out *uiout, int fldno, int width, enum ui_align align, char *fldname, char *format, va_list args)
+uo_field_fmt (struct ui_out *uiout, int fldno, int width, enum ui_align align,
+             const char *fldname,
+             const char *format,
+             va_list args)
 {
   if (!uiout->impl->field_fmt)
     return;
@@ -817,7 +921,8 @@ uo_spaces (struct ui_out *uiout, int numspaces)
 }
 
 void
-uo_text (struct ui_out *uiout, char *string)
+uo_text (struct ui_out *uiout,
+        const char *string)
 {
   if (!uiout->impl->text)
     return;
@@ -825,7 +930,9 @@ uo_text (struct ui_out *uiout, char *string)
 }
 
 void
-uo_message (struct ui_out *uiout, int verbosity, char *format, va_list args)
+uo_message (struct ui_out *uiout, int verbosity,
+           const char *format,
+           va_list args)
 {
   if (!uiout->impl->message)
     return;
@@ -853,16 +960,15 @@ uo_flush (struct ui_out *uiout)
 /* list of column headers manipulation routines */
 
 static void
-clear_header_list (uiout)
-     struct ui_out *uiout;
+clear_header_list (struct ui_out *uiout)
 {
   while (uiout->headerfirst != NULL)
     {
       uiout->headercurr = uiout->headerfirst;
       uiout->headerfirst = uiout->headerfirst->next;
       if (uiout->headercurr->colhdr != NULL)
-       free (uiout->headercurr->colhdr);
-      free (uiout->headercurr);
+       xfree (uiout->headercurr->colhdr);
+      xfree (uiout->headercurr);
     }
   uiout->headerlast = NULL;
   uiout->headercurr = NULL;
@@ -872,7 +978,8 @@ static void
 append_header_to_list (struct ui_out *uiout,
                       int width,
                       int alignment,
-                      char *colhdr)
+                      const char *col_name,
+                      const char *colhdr)
 {
   struct ui_out_hdr *temphdr;
 
@@ -881,10 +988,13 @@ append_header_to_list (struct ui_out *uiout,
   temphdr->alignment = alignment;
   /* we have to copy the column title as the original may be an automatic */
   if (colhdr != NULL)
-    {
-      temphdr->colhdr = xmalloc (strlen (colhdr) + 1);
-      strcpy (temphdr->colhdr, colhdr);
-    }
+    temphdr->colhdr = xstrdup (colhdr);
+  else
+    temphdr->colhdr = NULL;
+  if (col_name != NULL)
+    temphdr->col_name = xstrdup (colhdr);
+  else
+    temphdr->col_name = xstrdup (colhdr);
   temphdr->next = NULL;
   if (uiout->headerfirst == NULL)
     {
@@ -929,10 +1039,12 @@ verify_field_proper_position (struct ui_out *uiout)
   if (uiout->table_flag)
     {
       if (!uiout->body_flag)
-       internal_error ("ui_out: table_body missing; table fields must be \
+       internal_error (__FILE__, __LINE__,
+                       "table_body missing; table fields must be \
 specified after table_body and inside a list.");
-      if (!uiout->list_flag)
-       internal_error ("ui_out: list_begin missing; table fields must be \
+      if (uiout->level == 0)
+       internal_error (__FILE__, __LINE__,
+                       "list_begin missing; table fields must be \
 specified after table_body and inside a list.");
     }
 }
@@ -952,7 +1064,8 @@ verify_field_alignment (struct ui_out *uiout,
       && get_curr_header (uiout, &colno, width, align, &text))
     {
       if (fldno != colno)
-       internal_error ("gdb/ui-out.c: ui-out internal error in handling headers.");
+       internal_error (__FILE__, __LINE__,
+                       "ui-out internal error in handling headers.");
     }
   else
     {
@@ -964,8 +1077,7 @@ verify_field_alignment (struct ui_out *uiout,
 /* access to ui_out format private members */
 
 void
-ui_out_get_field_separator (uiout)
-     struct ui_out *uiout;
+ui_out_get_field_separator (struct ui_out *uiout)
 {
 }
 
@@ -990,8 +1102,8 @@ ui_out_new (struct ui_out_impl *impl,
   uiout->flags = flags;
   uiout->table_flag = 0;
   uiout->body_flag = 0;
-  uiout->list_flag = 0;
-  uiout->field_count[0] = 0;
+  uiout->level = 0;
+  memset (uiout->levels, 0, sizeof (uiout->levels));
   uiout->headerfirst = NULL;
   uiout->headerlast = NULL;
   uiout->headercurr = NULL;
@@ -1001,7 +1113,7 @@ ui_out_new (struct ui_out_impl *impl,
 /* standard gdb initialization hook */
 
 void
-_initialize_ui_out ()
+_initialize_ui_out (void)
 {
   /* nothing needs to be done */
 }
This page took 0.036673 seconds and 4 git commands to generate.