Introduce max_height method
[deliverable/binutils-gdb.git] / gdb / tui / tui-data.c
index e5268dbd8b6b1b285471b8062f79c479d3ea9f22..3298eb8248c34c6f8e8a87980f60835a34d6fb90 100644 (file)
@@ -1,7 +1,6 @@
 /* TUI data manipulation routines.
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007
-   Free Software Foundation, Inc.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
 
    Contributed by Hewlett-Packard Company.
 
@@ -9,7 +8,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "symtab.h"
 #include "tui/tui.h"
 #include "tui/tui-data.h"
 #include "tui/tui-wingeneral.h"
-
-#include "gdb_string.h"
 #include "gdb_curses.h"
 
 /****************************
 ** GLOBAL DECLARATIONS
 ****************************/
-struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
+struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
 
 /***************************
 ** Private data
@@ -43,15 +38,11 @@ static enum tui_layout_type current_layout = UNDEFINED_LAYOUT;
 static int term_height, term_width;
 static struct tui_gen_win_info _locator;
 static struct tui_gen_win_info exec_info[2];
-static struct tui_win_info *src_win_list[2];
-static struct tui_list source_windows = {src_win_list, 0};
-static int default_tab_len = DEFAULT_TAB_LEN;
-static struct tui_win_info *win_with_focus = (struct tui_win_info *) NULL;
+static std::vector<tui_source_window_base *> source_windows;
+static struct tui_win_info *win_with_focus = NULL;
 static struct tui_layout_def layout_def = {
   SRC_WIN,                     /* DISPLAY_MODE */
-  FALSE,                       /* SPLIT */
-  TUI_UNDEFINED_REGS,          /* REGS_DISPLAY_TYPE */
-  TUI_SFLOAT_REGS};            /* FLOAT_REGS_DISPLAY_TYPE */
+  FALSE};                      /* SPLIT */
 
 static int win_resized = FALSE;
 
@@ -72,25 +63,12 @@ static void free_content_elements (tui_win_content,
 ** PUBLIC FUNCTIONS
 **********************************/
 
-int
-tui_win_is_source_type (enum tui_win_type win_type)
-{
-  return (win_type == SRC_WIN || win_type == DISASSEM_WIN);
-}
-
 int
 tui_win_is_auxillary (enum tui_win_type win_type)
 {
   return (win_type > MAX_MAJOR_WINDOWS);
 }
 
-int
-tui_win_has_locator (struct tui_win_info *win_info)
-{
-  return (win_info != NULL 
-         && win_info->detail.source_info.has_locator);
-}
-
 void
 tui_set_win_highlight (struct tui_win_info *win_info, 
                       int highlight)
@@ -143,29 +121,13 @@ tui_set_win_with_focus (struct tui_win_info *win_info)
 }
 
 
-/* Answer the length in chars, of tabs.  */
-int
-tui_default_tab_len (void)
-{
-  return default_tab_len;
-}
-
-
-/* Set the length in chars, of tabs.  */
-void
-tui_set_default_tab_len (int len)
-{
-  default_tab_len = len;
-}
-
-
 /* Accessor for the current source window.  Usually there is only one
    source window (either source or disassembly), but both can be
    displayed at the same time.  */
-struct tui_list *
-tui_source_windows (void)
+std::vector<tui_source_window_base *> &
+tui_source_windows ()
 {
-  return &source_windows;
+  return source_windows;
 }
 
 
@@ -173,22 +135,18 @@ tui_source_windows (void)
    window (either source or disassembly), but both can be displayed at
    the same time.  */
 void
-tui_clear_source_windows (void)
+tui_clear_source_windows ()
 {
-  source_windows.list[0] = NULL;
-  source_windows.list[1] = NULL;
-  source_windows.count = 0;
+  source_windows.clear ();
 }
 
 
 /* Clear the pertinant detail in the source windows.  */
 void
-tui_clear_source_windows_detail (void)
+tui_clear_source_windows_detail ()
 {
-  int i;
-
-  for (i = 0; i < (tui_source_windows ())->count; i++)
-    tui_clear_win_detail ((tui_source_windows ())->list[i]);
+  for (tui_source_window_base *win : tui_source_windows ())
+    win->clear_detail ();
 }
 
 
@@ -196,49 +154,43 @@ tui_clear_source_windows_detail (void)
    one source window (either source or disassembly), but both can be
    displayed at the same time.  */
 void
-tui_add_to_source_windows (struct tui_win_info *win_info)
+tui_add_to_source_windows (struct tui_source_window_base *win_info)
 {
-  if (source_windows.count < 2)
-    source_windows.list[source_windows.count++] = (void *) win_info;
+  if (source_windows.size () < 2)
+    source_windows.push_back (win_info);
 }
 
+/* See tui-data.h.  */
 
-/* Clear the pertinant detail in the windows.  */
 void
-tui_clear_win_detail (struct tui_win_info *win_info)
+tui_source_window_base::clear_detail ()
 {
-  if (win_info != NULL)
-    {
-      switch (win_info->generic.type)
-       {
-       case SRC_WIN:
-       case DISASSEM_WIN:
-         win_info->detail.source_info.start_line_or_addr.loa = LOA_ADDRESS;
-         win_info->detail.source_info.start_line_or_addr.u.addr = 0;
-         win_info->detail.source_info.horizontal_offset = 0;
-         break;
-       case CMD_WIN:
-         win_info->detail.command_info.cur_line =
-           win_info->detail.command_info.curch = 0;
-         break;
-       case DATA_WIN:
-         win_info->detail.data_display_info.data_content =
-           (tui_win_content) NULL;
-         win_info->detail.data_display_info.data_content_count = 0;
-         win_info->detail.data_display_info.regs_content =
-           (tui_win_content) NULL;
-         win_info->detail.data_display_info.regs_content_count = 0;
-         win_info->detail.data_display_info.regs_display_type =
-           TUI_UNDEFINED_REGS;
-         win_info->detail.data_display_info.regs_column_count = 1;
-         win_info->detail.data_display_info.display_regs = FALSE;
-         break;
-       default:
-         break;
-       }
-    }
+  gdbarch = NULL;
+  start_line_or_addr.loa = LOA_ADDRESS;
+  start_line_or_addr.u.addr = 0;
+  horizontal_offset = 0;
 }
 
+/* See tui-data.h.  */
+
+void
+tui_cmd_window::clear_detail ()
+{
+  wmove (generic.handle, 0, 0);
+}
+
+/* See tui-data.h.  */
+
+void
+tui_data_window::clear_detail ()
+{
+  data_content = NULL;
+  data_content_count = 0;
+  regs_content = NULL;
+  regs_content_count = 0;
+  regs_column_count = 1;
+  display_regs = false;
+}
 
 /* Accessor for the source execution info ptr.  */
 struct tui_gen_win_info *
@@ -313,16 +265,6 @@ tui_set_current_layout_to (enum tui_layout_type new_layout)
 }
 
 
-/* Set the origin of the window.  */
-void
-set_gen_win_origin (struct tui_gen_win_info *win_info, 
-                   int x, int y)
-{
-  win_info->origin.x = x;
-  win_info->origin.y = y;
-}
-
-
 /*****************************
 ** OTHER PUBLIC FUNCTIONS
 *****************************/
@@ -333,8 +275,8 @@ set_gen_win_origin (struct tui_gen_win_info *win_info,
 struct tui_win_info *
 tui_next_win (struct tui_win_info *cur_win)
 {
-  enum tui_win_type type = cur_win->generic.type;
-  struct tui_win_info *next_win = (struct tui_win_info *) NULL;
+  int type = cur_win->generic.type;
+  struct tui_win_info *next_win = NULL;
 
   if (cur_win->generic.type == CMD_WIN)
     type = SRC_WIN;
@@ -363,8 +305,8 @@ tui_next_win (struct tui_win_info *cur_win)
 struct tui_win_info *
 tui_prev_win (struct tui_win_info *cur_win)
 {
-  enum tui_win_type type = cur_win->generic.type;
-  struct tui_win_info *prev = (struct tui_win_info *) NULL;
+  int type = cur_win->generic.type;
+  struct tui_win_info *prev = NULL;
 
   if (cur_win->generic.type == SRC_WIN)
     type = CMD_WIN;
@@ -372,7 +314,8 @@ tui_prev_win (struct tui_win_info *cur_win)
     type = cur_win->generic.type - 1;
   while (type != cur_win->generic.type && (prev == NULL))
     {
-      if (tui_win_list[type]->generic.is_visible)
+      if (tui_win_list[type]
+         && tui_win_list[type]->generic.is_visible)
        prev = tui_win_list[type];
       else
        {
@@ -389,11 +332,11 @@ tui_prev_win (struct tui_win_info *cur_win)
 
 /* Answer the window represented by name.  */
 struct tui_win_info *
-tui_partial_win_by_name (char *name)
+tui_partial_win_by_name (const char *name)
 {
-  struct tui_win_info *win_info = (struct tui_win_info *) NULL;
+  struct tui_win_info *win_info = NULL;
 
-  if (name != (char *) NULL)
+  if (name != NULL)
     {
       int i = 0;
 
@@ -401,9 +344,11 @@ tui_partial_win_by_name (char *name)
        {
           if (tui_win_list[i] != 0)
             {
-              char *cur_name = tui_win_name (&tui_win_list[i]->generic);
+              const char *cur_name =
+               tui_win_name (&tui_win_list[i]->generic);
+
               if (strlen (name) <= strlen (cur_name)
-                 && strncmp (name, cur_name, strlen (name)) == 0)
+                 && startswith (cur_name, name))
                 win_info = tui_win_list[i];
             }
          i++;
@@ -415,10 +360,10 @@ tui_partial_win_by_name (char *name)
 
 
 /* Answer the name of the window.  */
-char *
-tui_win_name (struct tui_gen_win_info *win_info)
+const char *
+tui_win_name (const struct tui_gen_win_info *win_info)
 {
-  char *name = (char *) NULL;
+  const char *name = NULL;
 
   switch (win_info->type)
     {
@@ -455,10 +400,9 @@ tui_initialize_static_data (void)
 struct tui_gen_win_info *
 tui_alloc_generic_win_info (void)
 {
-  struct tui_gen_win_info *win;
+  struct tui_gen_win_info *win = XNEW (struct tui_gen_win_info);
 
-  if ((win = XMALLOC (struct tui_gen_win_info)) != NULL)
-    tui_init_generic_part (win);
+  tui_init_generic_part (win);
 
   return win;
 }
@@ -474,26 +418,25 @@ tui_init_generic_part (struct tui_gen_win_info *win)
     win->viewport_height =
     win->content_size =
     win->last_visible_line = 0;
-  win->handle = (WINDOW *) NULL;
+  win->handle = NULL;
   win->content = NULL;
-  win->content_in_use =
-    win->is_visible = FALSE;
+  win->content_in_use = FALSE;
+  win->is_visible = false;
   win->title = 0;
 }
 
 
 /* init_content_element().
  */
-void
+static void
 init_content_element (struct tui_win_element *element, 
                      enum tui_win_type type)
 {
-  element->highlight = FALSE;
   switch (type)
     {
     case SRC_WIN:
     case DISASSEM_WIN:
-      element->which_element.source.line = (char *) NULL;
+      element->which_element.source.line = NULL;
       element->which_element.source.line_or_addr.loa = LOA_LINE;
       element->which_element.source.line_or_addr.u.line_no = 0;
       element->which_element.source.is_exec_point = FALSE;
@@ -502,24 +445,23 @@ init_content_element (struct tui_win_element *element,
     case DATA_WIN:
       tui_init_generic_part (&element->which_element.data_window);
       element->which_element.data_window.type = DATA_ITEM_WIN;
-      ((struct tui_gen_win_info *) & element->which_element.data_window)->content =
-       (void **) tui_alloc_content (1, DATA_ITEM_WIN);
-      ((struct tui_gen_win_info *)
-       & element->which_element.data_window)->content_size = 1;
+      element->which_element.data_window.content =
+       tui_alloc_content (1, DATA_ITEM_WIN);
+      element->which_element.data_window.content_size = 1;
       break;
     case CMD_WIN:
-      element->which_element.command.line = (char *) NULL;
+      element->which_element.command.line = NULL;
       break;
     case DATA_ITEM_WIN:
-      element->which_element.data.name = (char *) NULL;
+      element->which_element.data.name = NULL;
       element->which_element.data.type = TUI_REGISTER;
       element->which_element.data.item_no = UNDEFINED_ITEM;
       element->which_element.data.value = NULL;
       element->which_element.data.highlight = FALSE;
-      element->which_element.data.content = (char*) NULL;
+      element->which_element.data.content = NULL;
       break;
     case LOCATOR_WIN:
-      element->which_element.locator.file_name[0] =
+      element->which_element.locator.full_name[0] =
        element->which_element.locator.proc_name[0] = (char) 0;
       element->which_element.locator.line_no = 0;
       element->which_element.locator.addr = 0;
@@ -533,58 +475,39 @@ init_content_element (struct tui_win_element *element,
     }
 }
 
-void
-init_win_info (struct tui_win_info *win_info)
+tui_win_info::tui_win_info (enum tui_win_type type)
 {
-  tui_init_generic_part (&win_info->generic);
-  win_info->can_highlight =
-    win_info->is_highlighted = FALSE;
-  switch (win_info->generic.type)
-    {
-    case SRC_WIN:
-    case DISASSEM_WIN:
-      win_info->detail.source_info.execution_info = (struct tui_gen_win_info *) NULL;
-      win_info->detail.source_info.has_locator = FALSE;
-      win_info->detail.source_info.horizontal_offset = 0;
-      win_info->detail.source_info.start_line_or_addr.loa = LOA_ADDRESS;
-      win_info->detail.source_info.start_line_or_addr.u.addr = 0;
-      win_info->detail.source_info.filename = 0;
-      break;
-    case DATA_WIN:
-      win_info->detail.data_display_info.data_content = (tui_win_content) NULL;
-      win_info->detail.data_display_info.data_content_count = 0;
-      win_info->detail.data_display_info.regs_content = (tui_win_content) NULL;
-      win_info->detail.data_display_info.regs_content_count = 0;
-      win_info->detail.data_display_info.regs_display_type =
-       TUI_UNDEFINED_REGS;
-      win_info->detail.data_display_info.regs_column_count = 1;
-      win_info->detail.data_display_info.display_regs = FALSE;
-      win_info->detail.data_display_info.current_group = 0;
-      break;
-    case CMD_WIN:
-      win_info->detail.command_info.cur_line = 0;
-      win_info->detail.command_info.curch = 0;
-      break;
-    default:
-      win_info->detail.opaque = NULL;
-      break;
-    }
+  generic.type = type;
+  tui_init_generic_part (&generic);
 }
 
+tui_source_window_base::tui_source_window_base (enum tui_win_type type)
+  : tui_win_info (type)
+{
+  gdb_assert (type == SRC_WIN || type == DISASSEM_WIN);
+  start_line_or_addr.loa = LOA_ADDRESS;
+  start_line_or_addr.u.addr = 0;
+}
 
 struct tui_win_info *
 tui_alloc_win_info (enum tui_win_type type)
 {
-  struct tui_win_info *win_info;
-
-  win_info = XMALLOC (struct tui_win_info);
-  if (win_info != NULL)
+  switch (type)
     {
-      win_info->generic.type = type;
-      init_win_info (win_info);
+    case SRC_WIN:
+      return new tui_source_window ();
+
+    case DISASSEM_WIN:
+      return new tui_disasm_window ();
+
+    case DATA_WIN:
+      return new tui_data_window ();
+
+    case CMD_WIN:
+      return new tui_cmd_window ();
     }
 
-  return win_info;
+  gdb_assert_not_reached (_("Unhandled window type"));
 }
 
 
@@ -593,36 +516,25 @@ tui_win_content
 tui_alloc_content (int num_elements, enum tui_win_type type)
 {
   tui_win_content content;
-  char *element_block_ptr;
+  struct tui_win_element *element_block_ptr;
   int i;
 
-  content = xmalloc (sizeof (struct tui_win_element *) *num_elements);
-  if (content != NULL)
+  content = XNEWVEC (struct tui_win_element *, num_elements);
+
+  /*
+   * All windows, except the data window, can allocate the
+   * elements in a chunk.  The data window cannot because items
+   * can be added/removed from the data display by the user at any
+   * time.
+   */
+  if (type != DATA_WIN)
     {
-      /*
-       * All windows, except the data window, can allocate the
-       * elements in a chunk.  The data window cannot because items
-       * can be added/removed from the data display by the user at any
-       * time.
-       */
-      if (type != DATA_WIN)
+      element_block_ptr = XNEWVEC (struct tui_win_element, num_elements);
+      for (i = 0; i < num_elements; i++)
        {
-         element_block_ptr =
-           xmalloc (sizeof (struct tui_win_element) * num_elements);
-         if (element_block_ptr != NULL)
-           {
-             for (i = 0; i < num_elements; i++)
-               {
-                 content[i] = (struct tui_win_element *) element_block_ptr;
-                 init_content_element (content[i], type);
-                 element_block_ptr += sizeof (struct tui_win_element);
-               }
-           }
-         else
-           {
-             xfree (content);
-             content = (tui_win_content) NULL;
-           }
+         content[i] = element_block_ptr;
+         init_content_element (content[i], type);
+         element_block_ptr++;
        }
     }
 
@@ -644,7 +556,7 @@ tui_add_content_elements (struct tui_gen_win_info *win_info,
 
   if (win_info->content == NULL)
     {
-      win_info->content = (void **) tui_alloc_content (num_elements, win_info->type);
+      win_info->content = tui_alloc_content (num_elements, win_info->type);
       index_start = 0;
     }
   else
@@ -653,153 +565,65 @@ tui_add_content_elements (struct tui_gen_win_info *win_info,
     {
       for (i = index_start; (i < num_elements + index_start); i++)
        {
-         if ((element_ptr = XMALLOC (struct tui_win_element)) != NULL)
-           {
-             win_info->content[i] = (void *) element_ptr;
-             init_content_element (element_ptr, win_info->type);
-             win_info->content_size++;
-           }
-         else  /* Things must be really hosed now!  We ran out of
-                  memory!?  */
-           return (-1);
+         element_ptr = XNEW (struct tui_win_element);
+         win_info->content[i] = element_ptr;
+         init_content_element (element_ptr, win_info->type);
+         win_info->content_size++;
        }
     }
 
   return index_start;
 }
 
-
-/* Delete all curses windows associated with win_info, leaving
-   everything else intact.  */
-void
-tui_del_window (struct tui_win_info *win_info)
+tui_source_window_base::~tui_source_window_base ()
 {
-  struct tui_gen_win_info *generic_win;
-
-  switch (win_info->generic.type)
-    {
-    case SRC_WIN:
-    case DISASSEM_WIN:
-      generic_win = tui_locator_win_info_ptr ();
-      if (generic_win != (struct tui_gen_win_info *) NULL)
-       {
-         tui_delete_win (generic_win->handle);
-         generic_win->handle = (WINDOW *) NULL;
-         generic_win->is_visible = FALSE;
-       }
-      if (win_info->detail.source_info.filename)
-        {
-          xfree (win_info->detail.source_info.filename);
-          win_info->detail.source_info.filename = 0;
-        }
-      generic_win = win_info->detail.source_info.execution_info;
-      if (generic_win != (struct tui_gen_win_info *) NULL)
-       {
-         tui_delete_win (generic_win->handle);
-         generic_win->handle = (WINDOW *) NULL;
-         generic_win->is_visible = FALSE;
-       }
-      break;
-    case DATA_WIN:
-      if (win_info->generic.content != NULL)
-       {
-         tui_del_data_windows (win_info->detail.data_display_info.regs_content,
-                               win_info->detail.data_display_info.regs_content_count);
-         tui_del_data_windows (win_info->detail.data_display_info.data_content,
-                               win_info->detail.data_display_info.data_content_count);
-       }
-      break;
-    default:
-      break;
-    }
-  if (win_info->generic.handle != (WINDOW *) NULL)
+  xfree (fullname);
+  struct tui_gen_win_info *generic_win = execution_info;
+  if (generic_win != NULL)
     {
-      tui_delete_win (win_info->generic.handle);
-      win_info->generic.handle = (WINDOW *) NULL;
-      win_info->generic.is_visible = FALSE;
+      tui_delete_win (generic_win->handle);
+      generic_win->handle = NULL;
+      tui_free_win_content (generic_win);
     }
-}
-
+}  
 
-void
-tui_free_window (struct tui_win_info *win_info)
+tui_data_window::~tui_data_window ()
 {
-  struct tui_gen_win_info *generic_win;
-
-  switch (win_info->generic.type)
+  if (generic.content != NULL)
     {
-    case SRC_WIN:
-    case DISASSEM_WIN:
-      generic_win = tui_locator_win_info_ptr ();
-      if (generic_win != (struct tui_gen_win_info *) NULL)
-       {
-         tui_delete_win (generic_win->handle);
-         generic_win->handle = (WINDOW *) NULL;
-       }
-      tui_free_win_content (generic_win);
-      if (win_info->detail.source_info.filename)
-        {
-          xfree (win_info->detail.source_info.filename);
-          win_info->detail.source_info.filename = 0;
-        }
-      generic_win = win_info->detail.source_info.execution_info;
-      if (generic_win != (struct tui_gen_win_info *) NULL)
-       {
-         tui_delete_win (generic_win->handle);
-         generic_win->handle = (WINDOW *) NULL;
-         tui_free_win_content (generic_win);
-       }
-      break;
-    case DATA_WIN:
-      if (win_info->generic.content != NULL)
-       {
-         tui_free_data_content (win_info->detail.data_display_info.regs_content,
-                                win_info->detail.data_display_info.regs_content_count);
-         win_info->detail.data_display_info.regs_content =
-           (tui_win_content) NULL;
-         win_info->detail.data_display_info.regs_content_count = 0;
-         tui_free_data_content (win_info->detail.data_display_info.data_content,
-                                win_info->detail.data_display_info.data_content_count);
-         win_info->detail.data_display_info.data_content =
-           (tui_win_content) NULL;
-         win_info->detail.data_display_info.data_content_count = 0;
-         win_info->detail.data_display_info.regs_display_type =
-           TUI_UNDEFINED_REGS;
-         win_info->detail.data_display_info.regs_column_count = 1;
-         win_info->detail.data_display_info.display_regs = FALSE;
-         win_info->generic.content = NULL;
-         win_info->generic.content_size = 0;
-       }
-      break;
-    default:
-      break;
+      tui_free_data_content (regs_content, regs_content_count);
+      regs_content = NULL;
+      regs_content_count = 0;
+      tui_free_data_content (data_content, data_content_count);
+      data_content = NULL;
+      data_content_count = 0;
+      regs_column_count = 1;
+      display_regs = false;
+      generic.content = NULL;
+      generic.content_size = 0;
     }
-  if (win_info->generic.handle != (WINDOW *) NULL)
+}  
+
+tui_win_info::~tui_win_info ()
+{
+  if (generic.handle != NULL)
     {
-      tui_delete_win (win_info->generic.handle);
-      win_info->generic.handle = (WINDOW *) NULL;
-      tui_free_win_content (&win_info->generic);
+      tui_delete_win (generic.handle);
+      generic.handle = NULL;
+      tui_free_win_content (&generic);
     }
-  if (win_info->generic.title)
-    xfree (win_info->generic.title);
-  xfree (win_info);
+  if (generic.title)
+    xfree (generic.title);
 }
 
 
 void
-tui_free_all_source_wins_content (void)
+tui_free_all_source_wins_content ()
 {
-  int i;
-
-  for (i = 0; i < (tui_source_windows ())->count; i++)
+  for (tui_source_window_base *win_info : tui_source_windows ())
     {
-      struct tui_win_info *win_info = (tui_source_windows ())->list[i];
-
-      if (win_info != NULL)
-       {
-         tui_free_win_content (&(win_info->generic));
-         tui_free_win_content (win_info->detail.source_info.execution_info);
-       }
+      tui_free_win_content (&(win_info->generic));
+      tui_free_win_content (win_info->execution_info);
     }
 }
 
@@ -809,7 +633,7 @@ tui_free_win_content (struct tui_gen_win_info *win_info)
 {
   if (win_info->content != NULL)
     {
-      free_content ((tui_win_content) win_info->content,
+      free_content (win_info->content,
                   win_info->content_size,
                   win_info->type);
       win_info->content = NULL;
@@ -818,29 +642,6 @@ tui_free_win_content (struct tui_gen_win_info *win_info)
 }
 
 
-void
-tui_del_data_windows (tui_win_content content, 
-                     int content_size)
-{
-  int i;
-
-  /* Remember that data window content elements are of type struct
-     tui_gen_win_info *, each of which whose single element is a data
-     element.  */
-  for (i = 0; i < content_size; i++)
-    {
-      struct tui_gen_win_info *generic_win = &content[i]->which_element.data_window;
-
-      if (generic_win != (struct tui_gen_win_info *) NULL)
-       {
-         tui_delete_win (generic_win->handle);
-         generic_win->handle = (WINDOW *) NULL;
-         generic_win->is_visible = FALSE;
-       }
-    }
-}
-
-
 void
 tui_free_data_content (tui_win_content content, 
                       int content_size)
@@ -852,12 +653,13 @@ tui_free_data_content (tui_win_content content,
      element.  */
   for (i = 0; i < content_size; i++)
     {
-      struct tui_gen_win_info *generic_win = &content[i]->which_element.data_window;
+      struct tui_gen_win_info *generic_win
+       = &content[i]->which_element.data_window;
 
-      if (generic_win != (struct tui_gen_win_info *) NULL)
+      if (generic_win != NULL)
        {
          tui_delete_win (generic_win->handle);
-         generic_win->handle = (WINDOW *) NULL;
+         generic_win->handle = NULL;
          tui_free_win_content (generic_win);
        }
     }
@@ -877,7 +679,7 @@ free_content (tui_win_content content,
              int content_size, 
              enum tui_win_type win_type)
 {
-  if (content != (tui_win_content) NULL)
+  if (content != NULL)
     {
       free_content_elements (content, content_size, win_type);
       xfree (content);
@@ -892,11 +694,11 @@ free_content_elements (tui_win_content content,
                       int content_size, 
                       enum tui_win_type type)
 {
-  if (content != (tui_win_content) NULL)
+  if (content != NULL)
     {
       int i;
 
-      if (type == SRC_WIN || type == DISASSEM_WIN)
+      if (type == DISASSEM_WIN)
        {
          /* Free whole source block.  */
          xfree (content[0]->which_element.source.line);
@@ -908,10 +710,13 @@ free_content_elements (tui_win_content content,
              struct tui_win_element *element;
 
              element = content[i];
-             if (element != (struct tui_win_element *) NULL)
+             if (element != NULL)
                {
                  switch (type)
                    {
+                   case SRC_WIN:
+                     xfree (element->which_element.source.line);
+                     break;
                    case DATA_WIN:
                      xfree (element);
                      break;
This page took 0.036039 seconds and 4 git commands to generate.