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 std::vector<tui_win_info *> source_windows;
static struct tui_win_info *win_with_focus = NULL;
static struct tui_layout_def layout_def = {
SRC_WIN, /* DISPLAY_MODE */
** 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)
/* 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_win_info *> &
+tui_source_windows ()
{
- return &source_windows;
+ return source_windows;
}
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_win_info *win : tui_source_windows ())
+ win->clear_detail ();
}
void
tui_add_to_source_windows (struct tui_win_info *win_info)
{
- if (source_windows.count < 2)
- source_windows.list[source_windows.count++] = 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.gdbarch = NULL;
- 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:
- wmove (win_info->generic.handle, 0, 0);
- break;
- case DATA_WIN:
- win_info->detail.data_display_info.data_content = NULL;
- win_info->detail.data_display_info.data_content_count = 0;
- win_info->detail.data_display_info.regs_content = NULL;
- win_info->detail.data_display_info.regs_content_count = 0;
- 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 *
}
}
-static 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 = NULL;
- win_info->detail.source_info.has_locator = FALSE;
- win_info->detail.source_info.horizontal_offset = 0;
- win_info->detail.source_info.gdbarch = NULL;
- 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.fullname = NULL;
- break;
- case DATA_WIN:
- win_info->detail.data_display_info.data_content = NULL;
- win_info->detail.data_display_info.data_content_count = 0;
- win_info->detail.data_display_info.regs_content = NULL;
- win_info->detail.data_display_info.regs_content_count = 0;
- 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:
- 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 = XNEW (struct tui_win_info);
+ switch (type)
+ {
+ case SRC_WIN:
+ return new tui_source_window ();
- win_info->generic.type = type;
- init_win_info (win_info);
+ case DISASSEM_WIN:
+ return new tui_disasm_window ();
- return win_info;
+ case DATA_WIN:
+ return new tui_data_window ();
+
+ case CMD_WIN:
+ return new tui_cmd_window ();
+ }
+
+ gdb_assert_not_reached (_("Unhandled window type"));
}
return index_start;
}
-void
-tui_free_window (struct tui_win_info *win_info)
+tui_source_window_base::~tui_source_window_base ()
{
- struct tui_gen_win_info *generic_win;
+ xfree (fullname);
+ struct tui_gen_win_info *generic_win = execution_info;
+ if (generic_win != NULL)
+ {
+ tui_delete_win (generic_win->handle);
+ generic_win->handle = NULL;
+ tui_free_win_content (generic_win);
+ }
+}
- switch (win_info->generic.type)
+tui_data_window::~tui_data_window ()
+{
+ if (generic.content != NULL)
{
- case SRC_WIN:
- case DISASSEM_WIN:
- if (win_info->detail.source_info.fullname)
- {
- xfree (win_info->detail.source_info.fullname);
- win_info->detail.source_info.fullname = NULL;
- }
- generic_win = win_info->detail.source_info.execution_info;
- if (generic_win != NULL)
- {
- tui_delete_win (generic_win->handle);
- generic_win->handle = 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 = 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 = NULL;
- win_info->detail.data_display_info.data_content_count = 0;
- 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 != NULL)
+}
+
+tui_win_info::~tui_win_info ()
+{
+ if (generic.handle != NULL)
{
- tui_delete_win (win_info->generic.handle);
- win_info->generic.handle = 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_win_info *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_source_window_base *base = (tui_source_window_base *) win_info;
+ tui_free_win_content (base->execution_info);
}
}