X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=gdb%2Ftui%2Ftui.c;h=828e42bccf7a263da40648699f967f1aabcbec60;hb=cad904332d6aabc4e3e37b24526282d70aa88d2d;hp=deb6bb27e50cb4231b4c4712b51ce6e41241bd33;hpb=5ebd54023c160383290f20f492ff871f64b7439a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/tui/tui.c b/gdb/tui/tui.c index deb6bb27e5..828e42bccf 100644 --- a/gdb/tui/tui.c +++ b/gdb/tui/tui.c @@ -1,6 +1,6 @@ /* General functions for the WDB TUI. - Copyright (C) 1998-2019 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Hewlett-Packard Company. @@ -30,6 +30,7 @@ #include "tui/tui-regs.h" #include "tui/tui-stack.h" #include "tui/tui-win.h" +#include "tui/tui-wingeneral.h" #include "tui/tui-winsource.h" #include "tui/tui-source.h" #include "target.h" @@ -44,9 +45,6 @@ #include #include #include -#if 0 -#include -#endif #include #include "gdb_curses.h" @@ -58,8 +56,8 @@ #include "readline/readline.h" /* Tells whether the TUI is active or not. */ -int tui_active = 0; -static int tui_finish_init = 1; +bool tui_active = false; +static bool tui_finish_init = true; enum tui_key_mode tui_current_key_mode = TUI_COMMAND_MODE; @@ -142,8 +140,7 @@ tui_rl_switch_mode (int notused1, int notused2) /* TUI readline command. Change the TUI layout to show a next layout. This function is bound to CTRL-X 2. It is intended to provide - a functionality close to the Emacs split-window command. We - always show two windows (src+asm), (src+regs) or (asm+regs). */ + a functionality close to the Emacs split-window command. */ static int tui_rl_change_windows (int notused1, int notused2) { @@ -151,41 +148,8 @@ tui_rl_change_windows (int notused1, int notused2) tui_rl_switch_mode (0 /* notused */, 0 /* notused */); if (tui_active) - { - enum tui_layout_type new_layout; - - new_layout = tui_current_layout (); + tui_next_layout (); - /* Select a new layout to have a rolling layout behavior with - always two windows (except when undefined). */ - switch (new_layout) - { - case SRC_COMMAND: - new_layout = SRC_DISASSEM_COMMAND; - break; - - case DISASSEM_COMMAND: - new_layout = SRC_DISASSEM_COMMAND; - break; - - case SRC_DATA_COMMAND: - new_layout = SRC_DISASSEM_COMMAND; - break; - - case SRC_DISASSEM_COMMAND: - new_layout = DISASSEM_DATA_COMMAND; - break; - - case DISASSEM_DATA_COMMAND: - new_layout = SRC_DATA_COMMAND; - break; - - default: - new_layout = SRC_COMMAND; - break; - } - tui_set_layout (new_layout); - } return 0; } @@ -198,28 +162,8 @@ tui_rl_delete_other_windows (int notused1, int notused2) tui_rl_switch_mode (0 /* notused */, 0 /* notused */); if (tui_active) - { - enum tui_layout_type new_layout; - - new_layout = tui_current_layout (); + tui_remove_some_windows (); - /* Kill one window. */ - switch (new_layout) - { - case SRC_COMMAND: - case SRC_DATA_COMMAND: - case SRC_DISASSEM_COMMAND: - default: - new_layout = SRC_COMMAND; - break; - - case DISASSEM_COMMAND: - case DISASSEM_DATA_COMMAND: - new_layout = DISASSEM_COMMAND; - break; - } - tui_set_layout (new_layout); - } return 0; } @@ -324,8 +268,14 @@ tui_set_key_mode (enum tui_key_mode mode) /* Initialize readline and configure the keymap for the switching key shortcut. */ void -tui_initialize_readline (void) +tui_ensure_readline_initialized () { + static bool initialized; + + if (initialized) + return; + initialized = true; + int i; Keymap tui_ctlx_keymap; @@ -381,6 +331,9 @@ tui_initialize_readline (void) rl_bind_key_in_map ('q', tui_rl_next_keymap, tui_keymap); rl_bind_key_in_map ('s', tui_rl_next_keymap, emacs_ctlx_keymap); rl_bind_key_in_map ('s', tui_rl_next_keymap, tui_ctlx_keymap); + + /* Initialize readline after the above. */ + rl_initialize (); } /* Return the TERM variable from the environment, or "" @@ -427,7 +380,7 @@ tui_enable (void) /* Don't try to setup curses (and print funny control characters) if we're not outputting to a terminal. */ - if (!ui_file_isatty (gdb_stdout)) + if (!gdb_stderr->isatty ()) error (_("Cannot enable the TUI when output is not a terminal")); s = newterm (NULL, stdout, stdin); @@ -478,11 +431,11 @@ tui_enable (void) def_prog_mode (); tui_show_frame_info (0); - tui_set_layout (SRC_COMMAND); + tui_set_initial_layout (); tui_set_win_focus_to (TUI_SRC_WIN); keypad (TUI_CMD_WIN->handle.get (), TRUE); wrefresh (TUI_CMD_WIN->handle.get ()); - tui_finish_init = 0; + tui_finish_init = false; } else { @@ -492,16 +445,12 @@ tui_enable (void) clearok (stdscr, TRUE); } - /* Install the TUI specific hooks. */ - tui_install_hooks (); - rl_startup_hook = tui_rl_startup_hook; - if (tui_update_variables ()) tui_rehighlight_all (); tui_setup_io (1); - tui_active = 1; + tui_active = true; /* Resize windows before anything might display/refresh a window. */ @@ -513,6 +462,14 @@ tui_enable (void) if (deprecated_safe_get_selected_frame ()) tui_show_frame_info (deprecated_safe_get_selected_frame ()); + else + tui_display_main (); + + /* Install the TUI specific hooks. This must be done after the call to + tui_display_main so that we don't detect the symtab changed event it + can cause. */ + tui_install_hooks (); + rl_startup_hook = tui_rl_startup_hook; /* Restore TUI keymap. */ tui_set_key_mode (tui_current_key_mode); @@ -553,7 +510,7 @@ tui_disable (void) /* Update gdb's knowledge of its terminal. */ gdb_save_tty_state (); - tui_active = 0; + tui_active = false; tui_update_gdb_sizes (); } @@ -573,74 +530,10 @@ tui_disable_command (const char *args, int from_tty) tui_disable (); } -#if 0 -/* Solaris defines CTRL. */ -#ifndef CTRL -#define CTRL(x) (x & ~0140) -#endif - -#define FILEDES 2 -#define CHK(val, dft) (val<=0 ? dft : val) - -static void -tui_reset (void) -{ - struct termio mode; - - /* Reset the teletype mode bits to a sensible state. - Copied tset.c. */ -#if defined (TIOCGETC) - struct tchars tbuf; -#endif /* TIOCGETC */ -#ifdef UCB_NTTY - struct ltchars ltc; - - if (ldisc == NTTYDISC) - { - ioctl (FILEDES, TIOCGLTC, <c); - ltc.t_suspc = CHK (ltc.t_suspc, CTRL ('Z')); - ltc.t_dsuspc = CHK (ltc.t_dsuspc, CTRL ('Y')); - ltc.t_rprntc = CHK (ltc.t_rprntc, CTRL ('R')); - ltc.t_flushc = CHK (ltc.t_flushc, CTRL ('O')); - ltc.t_werasc = CHK (ltc.t_werasc, CTRL ('W')); - ltc.t_lnextc = CHK (ltc.t_lnextc, CTRL ('V')); - ioctl (FILEDES, TIOCSLTC, <c); - } -#endif /* UCB_NTTY */ -#ifdef TIOCGETC - ioctl (FILEDES, TIOCGETC, &tbuf); - tbuf.t_intrc = CHK (tbuf.t_intrc, CTRL ('?')); - tbuf.t_quitc = CHK (tbuf.t_quitc, CTRL ('\\')); - tbuf.t_startc = CHK (tbuf.t_startc, CTRL ('Q')); - tbuf.t_stopc = CHK (tbuf.t_stopc, CTRL ('S')); - tbuf.t_eofc = CHK (tbuf.t_eofc, CTRL ('D')); - /* brkc is left alone. */ - ioctl (FILEDES, TIOCSETC, &tbuf); -#endif /* TIOCGETC */ - mode.sg_flags &= ~(RAW -#ifdef CBREAK - | CBREAK -#endif /* CBREAK */ - | VTDELAY | ALLDELAY); - mode.sg_flags |= XTABS | ECHO | CRMOD | ANYP; -} -#endif - -void -tui_show_source () -{ - struct symtab_and_line cursal = get_current_source_symtab_and_line (); - - /* Make sure that the source window is displayed. */ - tui_add_win_to_layout (SRC_WIN); - - tui_update_source_windows_with_line (cursal.symtab, cursal.line); - tui_update_locator_fullname (cursal.symtab); -} - void tui_show_assembly (struct gdbarch *gdbarch, CORE_ADDR addr) { + tui_suppress_output suppress; tui_add_win_to_layout (DISASSEM_WIN); tui_update_source_windows_with_addr (gdbarch, addr); } @@ -648,7 +541,7 @@ tui_show_assembly (struct gdbarch *gdbarch, CORE_ADDR addr) bool tui_is_window_visible (enum tui_win_type type) { - if (tui_active == 0) + if (!tui_active) return false; if (tui_win_list[type] == 0) @@ -657,31 +550,32 @@ tui_is_window_visible (enum tui_win_type type) return tui_win_list[type]->is_visible (); } -int +bool tui_get_command_dimension (unsigned int *width, unsigned int *height) { if (!tui_active || (TUI_CMD_WIN == NULL)) - { - return 0; - } + return false; *width = TUI_CMD_WIN->width; *height = TUI_CMD_WIN->height; - return 1; + return true; } +void _initialize_tui (); void -_initialize_tui (void) +_initialize_tui () { struct cmd_list_element **tuicmd; tuicmd = tui_get_cmd_list (); add_cmd ("enable", class_tui, tui_enable_command, - _("Enable TUI display mode."), + _("Enable TUI display mode.\n\ +Usage: tui enable"), tuicmd); add_cmd ("disable", class_tui, tui_disable_command, - _("Disable TUI display mode."), + _("Disable TUI display mode.\n\ +Usage: tui disable"), tuicmd); }