Change inferior thread list to be a thread map
[deliverable/binutils-gdb.git] / gdb / tui / tui-command.c
index bdb96e27eb606d962c63aeef8a0e34b7a5829a44..e4c3a1b749161298a057a9e83339793951222d38 100644 (file)
@@ -1,7 +1,6 @@
 /* Specific command window processing.
 
-   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 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., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
-#include <ctype.h>
 #include "tui/tui.h"
 #include "tui/tui-data.h"
 #include "tui/tui-win.h"
 #include "tui/tui-io.h"
+#include "tui/tui-command.h"
+#include "tui/tui-wingeneral.h"
 
 #include "gdb_curses.h"
 
+/* See tui-command.h.  */
 
-/*****************************************
-** STATIC LOCAL FUNCTIONS FORWARD DECLS    **
-******************************************/
-
-
-
-/*****************************************
-** PUBLIC FUNCTIONS                        **
-******************************************/
+int
+tui_cmd_window::max_height () const
+{
+  return tui_term_height () - 4;
+}
 
-/* Dispatch the correct tui function based upon the control character.   */
-unsigned int
-tui_dispatch_ctrl_char (unsigned int ch)
+void
+tui_cmd_window::resize (int height_, int width_, int origin_x, int origin_y)
 {
-  struct tui_win_info *win_info = tui_win_with_focus ();
-  WINDOW *w = TUI_CMD_WIN->generic.handle;
-
-  /*
-     ** If the command window has the logical focus, or no-one does
-     ** assume it is the command window; in this case, pass the
-     ** character on through and do nothing here.
-   */
-  if (win_info == NULL || win_info == TUI_CMD_WIN)
-    return ch;
+  width = width_;
+  height = height_;
+  if (height > 1)
+    {
+      /* Note this differs from the base class implementation, because
+        this window can't be boxed.  */
+      viewport_height = height - 1;
+    }
+  else
+    viewport_height = 1;
+  x = origin_x;
+  y = origin_y;
+
+  if (handle == nullptr)
+    make_window ();
   else
     {
-      unsigned int c = 0, ch_copy = ch;
-      int i;
-      char *term;
-
-      /* If this is an xterm, page next/prev keys aren't returned
-         ** by keypad as a single char, so we must handle them here.
-         ** Seems like a bug in the curses library?
-       */
-      term = (char *) getenv ("TERM");
-      for (i = 0; (term && term[i]); i++)
-       term[i] = toupper (term[i]);
-      if ((strcmp (term, "XTERM") == 0) && key_is_start_sequence (ch))
-       {
-         unsigned int page_ch = 0;
-         unsigned int tmp_char;
-
-         tmp_char = 0;
-         while (!key_is_end_sequence (tmp_char))
-           {
-             tmp_char = (int) wgetch (w);
-             if (tmp_char == ERR)
-               {
-                 return ch;
-               }
-             if (!tmp_char)
-               break;
-             if (tmp_char == 53)
-               page_ch = KEY_PPAGE;
-             else if (tmp_char == 54)
-               page_ch = KEY_NPAGE;
-             else
-               {
-                 return 0;
-               }
-           }
-         ch_copy = page_ch;
-       }
-
-      switch (ch_copy)
-       {
-       case KEY_NPAGE:
-         tui_scroll_forward (win_info, 0);
-         break;
-       case KEY_PPAGE:
-         tui_scroll_backward (win_info, 0);
-         break;
-       case KEY_DOWN:
-       case KEY_SF:
-         tui_scroll_forward (win_info, 1);
-         break;
-       case KEY_UP:
-       case KEY_SR:
-         tui_scroll_backward (win_info, 1);
-         break;
-       case KEY_RIGHT:
-         tui_scroll_left (win_info, 1);
-         break;
-       case KEY_LEFT:
-         tui_scroll_right (win_info, 1);
-         break;
-       case '\f':
-         tui_refresh_all_win ();
-         break;
-       default:
-         c = ch_copy;
-         break;
-       }
-      return c;
+      /* Another reason we don't call the base class method here is
+        that for the command window in particular, we want to avoid
+        destroying the underlying handle.  We don't currently track
+        the contents of this window, and so have no way to re-render
+        it.  However we can at least move it and keep the old size if
+        wresize isn't available.  */
+#ifdef HAVE_WRESIZE
+      wresize (handle.get (), height, width);
+#endif
+      mvwin (handle.get (), y, x);
+      wmove (handle.get (), 0, 0);
     }
 }
+
+/* See tui-command.h.  */
+
+void
+tui_refresh_cmd_win (void)
+{
+  WINDOW *w = TUI_CMD_WIN->handle.get ();
+
+  wrefresh (w);
+
+  /* FIXME: It's not clear why this is here.
+     It was present in the original tui_puts code and is kept in order to
+     not introduce some subtle breakage.  */
+  fflush (stdout);
+}
This page took 0.030258 seconds and 4 git commands to generate.