/* General functions for the WDB TUI.
- Copyright (C) 1998-2014 Free Software Foundation, Inc.
+ Copyright (C) 1998-2016 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
#include "symtab.h"
#include "source.h"
#include "terminal.h"
+#include "top.h"
#include <ctype.h>
#include <signal.h>
static int
tui_rl_switch_mode (int notused1, int notused2)
{
- volatile struct gdb_exception ex;
/* Don't let exceptions escape. We're in the middle of a readline
callback that isn't prepared for that. */
- TRY_CATCH (ex, RETURN_MASK_ALL)
+ TRY
{
if (tui_active)
{
tui_enable ();
}
}
- if (ex.reason < 0)
+ CATCH (ex, RETURN_MASK_ALL)
{
exception_print (gdb_stderr, ex);
if (!tui_active)
rl_prep_terminal (0);
}
+ END_CATCH
/* Clear the readline in case switching occurred in middle of
something. */
if (tui_active)
{
enum tui_layout_type new_layout;
- enum tui_register_display_type regs_type = TUI_UNDEFINED_REGS;
new_layout = tui_current_layout ();
new_layout = SRC_COMMAND;
break;
}
- tui_set_layout (new_layout, regs_type);
+ tui_set_layout (new_layout);
}
return 0;
}
if (tui_active)
{
enum tui_layout_type new_layout;
- enum tui_register_display_type regs_type = TUI_UNDEFINED_REGS;
new_layout = tui_current_layout ();
new_layout = DISASSEM_COMMAND;
break;
}
- tui_set_layout (new_layout, regs_type);
+ tui_set_layout (new_layout);
}
return 0;
}
tui_rl_startup_hook (void)
{
rl_already_prompted = 1;
- if (tui_current_key_mode != TUI_COMMAND_MODE && immediate_quit == 0)
+ if (tui_current_key_mode != TUI_COMMAND_MODE
+ && !gdb_in_secondary_prompt_p (current_ui))
tui_set_key_mode (TUI_SINGLE_KEY_MODE);
tui_redisplay_readline ();
return 0;
void
tui_enable (void)
{
- struct interp *interp;
-
if (tui_active)
return;
if (!ui_file_isatty (gdb_stdout))
error (_("Cannot enable the TUI when output is not a terminal"));
- s = newterm (NULL, NULL, NULL);
+ s = newterm (NULL, stdout, stdin);
+#ifdef __MINGW32__
+ /* The MinGW port of ncurses requires $TERM to be unset in order
+ to activate the Windows console driver. */
+ if (s == NULL)
+ s = newterm ("unknown", stdout, stdin);
+#endif
if (s == NULL)
{
error (_("Cannot enable the TUI: error opening terminal [TERM=%s]"),
}
w = stdscr;
- /* Check required terminal capabilities. */
+ /* Check required terminal capabilities. The MinGW port of
+ ncurses does have them, but doesn't expose them through "cup". */
+#ifndef __MINGW32__
cap = tigetstr ("cup");
if (cap == NULL || cap == (char *) -1 || *cap == '\0')
{
"terminal doesn't support cursor addressing [TERM=%s]"),
gdb_getenv_term ());
}
+#endif
cbreak ();
noecho ();
def_prog_mode ();
tui_show_frame_info (0);
- tui_set_layout (SRC_COMMAND, TUI_UNDEFINED_REGS);
+ tui_set_layout (SRC_COMMAND);
tui_set_win_focus_to (TUI_SRC_WIN);
keypad (TUI_CMD_WIN->generic.handle, TRUE);
wrefresh (TUI_CMD_WIN->generic.handle);
tui_setup_io (1);
tui_active = 1;
+
+ /* Resize windows before anything might display/refresh a
+ window. */
+ if (tui_win_resized ())
+ {
+ tui_set_win_resized_to (FALSE);
+ tui_resize_all ();
+ }
+
if (deprecated_safe_get_selected_frame ())
- tui_show_frame_info (deprecated_safe_get_selected_frame ());
+ tui_show_frame_info (deprecated_safe_get_selected_frame ());
/* Restore TUI keymap. */
tui_set_key_mode (tui_current_key_mode);
+
+ /* Refresh the screen. */
tui_refresh_all_win ();
/* Update gdb's knowledge of its terminal. */
tui_update_gdb_sizes ();
}
+/* Command wrapper for enabling tui mode. */
+
+static void
+tui_enable_command (char *args, int from_tty)
+{
+ tui_enable ();
+}
+
+/* Command wrapper for leaving tui mode. */
+
+static void
+tui_disable_command (char *args, int from_tty)
+{
+ tui_disable ();
+}
+
void
strcat_to_buf (char *buf, int buflen,
const char *item_to_add)
*height = TUI_CMD_WIN->generic.height;
return 1;
}
+
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_tui;
+
+void
+_initialize_tui (void)
+{
+ struct cmd_list_element **tuicmd;
+
+ tuicmd = tui_get_cmd_list ();
+
+ add_cmd ("enable", class_tui, tui_enable_command,
+ _("Enable TUI display mode."),
+ tuicmd);
+ add_cmd ("disable", class_tui, tui_disable_command,
+ _("Disable TUI display mode."),
+ tuicmd);
+}