2008-02-21 Pedro Alves <pedro@codesorcery.com>
[deliverable/binutils-gdb.git] / gdb / tui / tui-layout.c
index 29d5869132e6b43ec8111a9c74d4a824f468407f..09fd0c3e89b23add27e64d376f42a722dd1a35f8 100644 (file)
@@ -1,6 +1,6 @@
 /* TUI layout window management.
 
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009
    Free Software Foundation, Inc.
 
    Contributed by Hewlett-Packard Company.
@@ -9,7 +9,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,
@@ -18,9 +18,7 @@
    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 "command.h"
@@ -38,6 +36,7 @@
 #include "tui/tui-win.h"
 #include "tui/tui-winsource.h"
 #include "tui/tui-disasm.h"
+#include "tui/tui-layout.h"
 
 #include "gdb_string.h"
 #include "gdb_curses.h"
 ** Static Local Decls
 ********************************/
 static void show_layout (enum tui_layout_type);
-static void init_gen_win_info (struct tui_gen_win_info *, enum tui_win_type, int, int, int, int);
-static void *init_and_make_win (void *, enum tui_win_type, int, int, int, int, int);
+static void init_gen_win_info (struct tui_gen_win_info *, 
+                              enum tui_win_type, 
+                              int, int, int, int);
+static void *init_and_make_win (void *, enum tui_win_type, 
+                               int, int, int, int, int);
 static void show_source_or_disasm_and_command (enum tui_layout_type);
-static void make_source_or_disasm_window (struct tui_win_info **, enum tui_win_type, int, int);
+static void make_source_or_disasm_window (struct tui_win_info **, 
+                                         enum tui_win_type, 
+                                         int, int);
 static void make_command_window (struct tui_win_info **, int, int);
 static void make_source_window (struct tui_win_info **, int, int);
 static void make_disasm_window (struct tui_win_info **, int, int);
@@ -86,7 +90,8 @@ show_layout (enum tui_layout_type layout)
          source/asm.  */
       tui_free_all_source_wins_content ();
       tui_clear_source_windows ();
-      if (layout == SRC_DATA_COMMAND || layout == DISASSEM_DATA_COMMAND)
+      if (layout == SRC_DATA_COMMAND 
+         || layout == DISASSEM_DATA_COMMAND)
        {
          show_data (layout);
          tui_refresh_all (tui_win_list);
@@ -132,33 +137,37 @@ tui_set_layout (enum tui_layout_type layout_type,
 {
   enum tui_status status = TUI_SUCCESS;
 
-  if (layout_type != UNDEFINED_LAYOUT || regs_display_type != TUI_UNDEFINED_REGS)
+  if (layout_type != UNDEFINED_LAYOUT 
+      || regs_display_type != TUI_UNDEFINED_REGS)
     {
-      enum tui_layout_type cur_layout = tui_current_layout (), new_layout = UNDEFINED_LAYOUT;
+      enum tui_layout_type cur_layout = tui_current_layout (),
+       new_layout = UNDEFINED_LAYOUT;
       int regs_populate = FALSE;
       CORE_ADDR addr = extract_display_start_addr ();
       struct tui_win_info *win_with_focus = tui_win_with_focus ();
       struct tui_layout_def *layout_def = tui_layout_def ();
 
 
-      if (layout_type == UNDEFINED_LAYOUT &&
-         regs_display_type != TUI_UNDEFINED_REGS)
+      if (layout_type == UNDEFINED_LAYOUT
+         && regs_display_type != TUI_UNDEFINED_REGS)
        {
          if (cur_layout == SRC_DISASSEM_COMMAND)
            new_layout = DISASSEM_DATA_COMMAND;
-         else if (cur_layout == SRC_COMMAND || cur_layout == SRC_DATA_COMMAND)
+         else if (cur_layout == SRC_COMMAND 
+                  || cur_layout == SRC_DATA_COMMAND)
            new_layout = SRC_DATA_COMMAND;
-         else if (cur_layout == DISASSEM_COMMAND ||
-                  cur_layout == DISASSEM_DATA_COMMAND)
+         else if (cur_layout == DISASSEM_COMMAND 
+                  || cur_layout == DISASSEM_DATA_COMMAND)
            new_layout = DISASSEM_DATA_COMMAND;
        }
       else
        new_layout = layout_type;
 
-      regs_populate = (new_layout == SRC_DATA_COMMAND ||
-                     new_layout == DISASSEM_DATA_COMMAND ||
-                     regs_display_type != TUI_UNDEFINED_REGS);
-      if (new_layout != cur_layout || regs_display_type != TUI_UNDEFINED_REGS)
+      regs_populate = (new_layout == SRC_DATA_COMMAND 
+                      || new_layout == DISASSEM_DATA_COMMAND 
+                      || regs_display_type != TUI_UNDEFINED_REGS);
+      if (new_layout != cur_layout
+         || regs_display_type != TUI_UNDEFINED_REGS)
        {
          if (new_layout != cur_layout)
            {
@@ -236,9 +245,9 @@ tui_set_layout (enum tui_layout_type layout_type,
              /*
               * Now update the window content.
               */
-             if (!regs_populate &&
-                 (new_layout == SRC_DATA_COMMAND ||
-                  new_layout == DISASSEM_DATA_COMMAND))
+             if (!regs_populate 
+                 && (new_layout == SRC_DATA_COMMAND 
+                     || new_layout == DISASSEM_DATA_COMMAND))
                tui_display_all_data ();
 
              tui_update_source_windows_with_addr (addr);
@@ -266,9 +275,9 @@ tui_add_win_to_layout (enum tui_win_type type)
   switch (type)
     {
     case SRC_WIN:
-      if (cur_layout != SRC_COMMAND &&
-         cur_layout != SRC_DISASSEM_COMMAND &&
-         cur_layout != SRC_DATA_COMMAND)
+      if (cur_layout != SRC_COMMAND
+         && cur_layout != SRC_DISASSEM_COMMAND
+         && cur_layout != SRC_DATA_COMMAND)
        {
          tui_clear_source_windows_detail ();
          if (cur_layout == DISASSEM_DATA_COMMAND)
@@ -278,9 +287,9 @@ tui_add_win_to_layout (enum tui_win_type type)
        }
       break;
     case DISASSEM_WIN:
-      if (cur_layout != DISASSEM_COMMAND &&
-         cur_layout != SRC_DISASSEM_COMMAND &&
-         cur_layout != DISASSEM_DATA_COMMAND)
+      if (cur_layout != DISASSEM_COMMAND
+         && cur_layout != SRC_DISASSEM_COMMAND
+         && cur_layout != DISASSEM_DATA_COMMAND)
        {
          tui_clear_source_windows_detail ();
          if (cur_layout == SRC_DATA_COMMAND)
@@ -290,8 +299,8 @@ tui_add_win_to_layout (enum tui_win_type type)
        }
       break;
     case DATA_WIN:
-      if (cur_layout != SRC_DATA_COMMAND &&
-         cur_layout != DISASSEM_DATA_COMMAND)
+      if (cur_layout != SRC_DATA_COMMAND
+         && cur_layout != DISASSEM_DATA_COMMAND)
        {
          if (cur_layout == DISASSEM_COMMAND)
            show_layout (DISASSEM_DATA_COMMAND);
@@ -309,7 +318,8 @@ tui_add_win_to_layout (enum tui_win_type type)
    answer what the height of a window would be based upon its type and
    the layout.  */
 int
-tui_default_win_height (enum tui_win_type type, enum tui_layout_type layout)
+tui_default_win_height (enum tui_win_type type, 
+                       enum tui_layout_type layout)
 {
   int h;
 
@@ -366,6 +376,10 @@ tui_default_win_viewport_height (enum tui_win_type type,
 
 /* Function to initialize gdb commands, for tui window layout
    manipulation.  */
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_tui_layout;
+
 void
 _initialize_tui_layout (void)
 {
@@ -418,7 +432,8 @@ tui_set_layout_for_display_command (const char *layout_name)
        buf_ptr[i] = toupper (buf_ptr[i]);
 
       /* First check for ambiguous input.  */
-      if (strlen (buf_ptr) <= 1 && (*buf_ptr == 'S' || *buf_ptr == '$'))
+      if (strlen (buf_ptr) <= 1 
+         && (*buf_ptr == 'S' || *buf_ptr == '$'))
        {
          warning (_("Ambiguous command input."));
          status = TUI_FAILURE;
@@ -431,13 +446,14 @@ tui_set_layout_for_display_command (const char *layout_name)
            new_layout = DISASSEM_COMMAND;
          else if (subset_compare (buf_ptr, "SPLIT"))
            new_layout = SRC_DISASSEM_COMMAND;
-         else if (subset_compare (buf_ptr, "REGS") ||
-                  subset_compare (buf_ptr, TUI_GENERAL_SPECIAL_REGS_NAME) ||
-                  subset_compare (buf_ptr, TUI_GENERAL_REGS_NAME) ||
-                  subset_compare (buf_ptr, TUI_FLOAT_REGS_NAME) ||
-                  subset_compare (buf_ptr, TUI_SPECIAL_REGS_NAME))
+         else if (subset_compare (buf_ptr, "REGS") 
+                  || subset_compare (buf_ptr, TUI_GENERAL_SPECIAL_REGS_NAME)
+                  || subset_compare (buf_ptr, TUI_GENERAL_REGS_NAME)
+                  || subset_compare (buf_ptr, TUI_FLOAT_REGS_NAME)
+                  || subset_compare (buf_ptr, TUI_SPECIAL_REGS_NAME))
            {
-             if (cur_layout == SRC_COMMAND || cur_layout == SRC_DATA_COMMAND)
+             if (cur_layout == SRC_COMMAND 
+                 || cur_layout == SRC_DATA_COMMAND)
                new_layout = SRC_DATA_COMMAND;
              else
                new_layout = DISASSEM_DATA_COMMAND;
@@ -449,10 +465,8 @@ tui_set_layout_for_display_command (const char *layout_name)
                 up this code.  - edie epstein  */
              if (subset_compare (buf_ptr, TUI_FLOAT_REGS_NAME))
                {
-                 if (TUI_DATA_WIN->detail.data_display_info.regs_display_type !=
-                     TUI_SFLOAT_REGS &&
-                     TUI_DATA_WIN->detail.data_display_info.regs_display_type !=
-                     TUI_DFLOAT_REGS)
+                 if (TUI_DATA_WIN->detail.data_display_info.regs_display_type != TUI_SFLOAT_REGS
+                     && TUI_DATA_WIN->detail.data_display_info.regs_display_type != TUI_DFLOAT_REGS)
                    dpy_type = TUI_SFLOAT_REGS;
                  else
                    dpy_type =
@@ -634,7 +648,8 @@ prev_layout (void)
 
 
 static void
-make_command_window (struct tui_win_info **win_info_ptr, int height, int origin_y)
+make_command_window (struct tui_win_info **win_info_ptr, 
+                    int height, int origin_y)
 {
   *win_info_ptr = init_and_make_win (*win_info_ptr,
                                     CMD_WIN,
@@ -651,7 +666,8 @@ make_command_window (struct tui_win_info **win_info_ptr, int height, int origin_
 /* make_source_window().
  */
 static void
-make_source_window (struct tui_win_info **win_info_ptr, int height, int origin_y)
+make_source_window (struct tui_win_info **win_info_ptr, 
+                   int height, int origin_y)
 {
   make_source_or_disasm_window (win_info_ptr, SRC_WIN, height, origin_y);
 
@@ -662,7 +678,8 @@ make_source_window (struct tui_win_info **win_info_ptr, int height, int origin_y
 /* make_disasm_window().
  */
 static void
-make_disasm_window (struct tui_win_info **win_info_ptr, int height, int origin_y)
+make_disasm_window (struct tui_win_info **win_info_ptr, 
+                   int height, int origin_y)
 {
   make_source_or_disasm_window (win_info_ptr, DISASSEM_WIN, height, origin_y);
 
@@ -671,7 +688,8 @@ make_disasm_window (struct tui_win_info **win_info_ptr, int height, int origin_y
 
 
 static void
-make_data_window (struct tui_win_info **win_info_ptr, int height, int origin_y)
+make_data_window (struct tui_win_info **win_info_ptr, 
+                 int height, int origin_y)
 {
   *win_info_ptr = init_and_make_win (*win_info_ptr,
                                     DATA_WIN,
@@ -721,18 +739,18 @@ show_source_disasm_command (void)
       else
        {
          init_gen_win_info (&TUI_SRC_WIN->generic,
-                          TUI_SRC_WIN->generic.type,
-                          src_height,
-                          TUI_SRC_WIN->generic.width,
-                          TUI_SRC_WIN->detail.source_info.execution_info->width,
-                          0);
+                            TUI_SRC_WIN->generic.type,
+                            src_height,
+                            TUI_SRC_WIN->generic.width,
+                            TUI_SRC_WIN->detail.source_info.execution_info->width,
+                            0);
          TUI_SRC_WIN->can_highlight = TRUE;
          init_gen_win_info (TUI_SRC_WIN->detail.source_info.execution_info,
-                          EXEC_INFO_WIN,
-                          src_height,
-                          3,
-                          0,
-                          0);
+                            EXEC_INFO_WIN,
+                            src_height,
+                            3,
+                            0,
+                            0);
          tui_make_visible (&TUI_SRC_WIN->generic);
          tui_make_visible (TUI_SRC_WIN->detail.source_info.execution_info);
          TUI_SRC_WIN->detail.source_info.has_locator = FALSE;;
@@ -756,25 +774,24 @@ show_source_disasm_command (void)
          else
            {
              init_gen_win_info (locator,
-                              LOCATOR_WIN,
-                              2 /* 1 */ ,
-                              tui_term_width (),
-                              0,
-                              (src_height + asm_height) - 1);
+                                LOCATOR_WIN,
+                                2 /* 1 */ ,
+                                tui_term_width (),
+                                0,
+                                (src_height + asm_height) - 1);
              TUI_DISASM_WIN->detail.source_info.has_locator = TRUE;
-             init_gen_win_info (
-                               &TUI_DISASM_WIN->generic,
-                               TUI_DISASM_WIN->generic.type,
-                               asm_height,
-                               TUI_DISASM_WIN->generic.width,
-                       TUI_DISASM_WIN->detail.source_info.execution_info->width,
-                               src_height - 1);
+             init_gen_win_info (&TUI_DISASM_WIN->generic,
+                                TUI_DISASM_WIN->generic.type,
+                                asm_height,
+                                TUI_DISASM_WIN->generic.width,
+                                TUI_DISASM_WIN->detail.source_info.execution_info->width,
+                                src_height - 1);
              init_gen_win_info (TUI_DISASM_WIN->detail.source_info.execution_info,
-                              EXEC_INFO_WIN,
-                              asm_height,
-                              3,
-                              0,
-                              src_height - 1);
+                                EXEC_INFO_WIN,
+                                asm_height,
+                                3,
+                                0,
+                                src_height - 1);
              TUI_DISASM_WIN->can_highlight = TRUE;
              tui_make_visible (&TUI_DISASM_WIN->generic);
              tui_make_visible (TUI_DISASM_WIN->detail.source_info.execution_info);
@@ -789,16 +806,16 @@ show_source_disasm_command (void)
 
              if (TUI_CMD_WIN == NULL)
                make_command_window (&TUI_CMD_WIN,
-                                   cmd_height,
-                                   tui_term_height () - cmd_height);
+                                    cmd_height,
+                                    tui_term_height () - cmd_height);
              else
                {
                  init_gen_win_info (&TUI_CMD_WIN->generic,
-                                  TUI_CMD_WIN->generic.type,
-                                  TUI_CMD_WIN->generic.height,
-                                  TUI_CMD_WIN->generic.width,
-                                  0,
-                                  TUI_CMD_WIN->generic.origin.y);
+                                    TUI_CMD_WIN->generic.type,
+                                    TUI_CMD_WIN->generic.height,
+                                    TUI_CMD_WIN->generic.width,
+                                    0,
+                                    TUI_CMD_WIN->generic.origin.y);
                  TUI_CMD_WIN->can_highlight = FALSE;
                  tui_make_visible (&TUI_CMD_WIN->generic);
                }
@@ -849,25 +866,25 @@ show_data (enum tui_layout_type new_layout)
   else
     {
       init_gen_win_info (&tui_win_list[win_type]->generic,
-                      tui_win_list[win_type]->generic.type,
-                      src_height,
-                      tui_win_list[win_type]->generic.width,
-                  tui_win_list[win_type]->detail.source_info.execution_info->width,
-                      data_height - 1);
+                        tui_win_list[win_type]->generic.type,
+                        src_height,
+                        tui_win_list[win_type]->generic.width,
+                        tui_win_list[win_type]->detail.source_info.execution_info->width,
+                        data_height - 1);
       init_gen_win_info (tui_win_list[win_type]->detail.source_info.execution_info,
-                      EXEC_INFO_WIN,
-                      src_height,
-                      3,
-                      0,
-                      data_height - 1);
+                        EXEC_INFO_WIN,
+                        src_height,
+                        3,
+                        0,
+                        data_height - 1);
       tui_make_visible (&tui_win_list[win_type]->generic);
       tui_make_visible (tui_win_list[win_type]->detail.source_info.execution_info);
       init_gen_win_info (locator,
-                      LOCATOR_WIN,
-                      2 /* 1 */ ,
-                      tui_term_width (),
-                      0,
-                      total_height - 1);
+                        LOCATOR_WIN,
+                        2 /* 1 */ ,
+                        tui_term_width (),
+                        0,
+                        total_height - 1);
     }
   tui_win_list[win_type]->detail.source_info.has_locator = TRUE;
   tui_make_visible (locator);
@@ -879,8 +896,10 @@ show_data (enum tui_layout_type new_layout)
 /* init_gen_win_info().
  */
 static void
-init_gen_win_info (struct tui_gen_win_info *win_info, enum tui_win_type type,
-                 int height, int width, int origin_x, int origin_y)
+init_gen_win_info (struct tui_gen_win_info *win_info, 
+                  enum tui_win_type type,
+                  int height, int width, 
+                  int origin_x, int origin_y)
 {
   int h = height;
 
@@ -904,8 +923,10 @@ init_gen_win_info (struct tui_gen_win_info *win_info, enum tui_win_type type,
 /* init_and_make_win().
  */
 static void *
-init_and_make_win (void *opaque_win_info, enum tui_win_type win_type,
-                  int height, int width, int origin_x, int origin_y,
+init_and_make_win (void *opaque_win_info, 
+                  enum tui_win_type win_type,
+                  int height, int width, 
+                  int origin_x, int origin_y,
                   int box_it)
 {
   struct tui_gen_win_info *generic;
@@ -939,8 +960,9 @@ init_and_make_win (void *opaque_win_info, enum tui_win_type win_type,
 
 
 static void
-make_source_or_disasm_window (struct tui_win_info **win_info_ptr, enum tui_win_type type,
-                             int height, int origin_y)
+make_source_or_disasm_window (struct tui_win_info **win_info_ptr, 
+                             enum tui_win_type type,
+                             int height, int origin_y)
 {
   struct tui_gen_win_info *execution_info = (struct tui_gen_win_info *) NULL;
 
@@ -986,7 +1008,6 @@ show_source_or_disasm_and_command (enum tui_layout_type layout_type)
        cmd_height = tui_term_height () / 3;
       src_height = tui_term_height () - cmd_height;
 
-
       if (layout_type == SRC_COMMAND)
        win_info_ptr = &TUI_SRC_WIN;
       else
@@ -1009,25 +1030,24 @@ show_source_or_disasm_and_command (enum tui_layout_type layout_type)
       else
        {
          init_gen_win_info (locator,
-                          LOCATOR_WIN,
-                          2 /* 1 */ ,
-                          tui_term_width (),
-                          0,
-                          src_height - 1);
+                            LOCATOR_WIN,
+                            2 /* 1 */ ,
+                            tui_term_width (),
+                            0,
+                            src_height - 1);
          (*win_info_ptr)->detail.source_info.has_locator = TRUE;
-         init_gen_win_info (
-                           &(*win_info_ptr)->generic,
-                           (*win_info_ptr)->generic.type,
-                           src_height - 1,
-                           (*win_info_ptr)->generic.width,
-                     (*win_info_ptr)->detail.source_info.execution_info->width,
-                           0);
+         init_gen_win_info (&(*win_info_ptr)->generic,
+                            (*win_info_ptr)->generic.type,
+                            src_height - 1,
+                            (*win_info_ptr)->generic.width,
+                            (*win_info_ptr)->detail.source_info.execution_info->width,
+                            0);
          init_gen_win_info ((*win_info_ptr)->detail.source_info.execution_info,
-                          EXEC_INFO_WIN,
-                          src_height - 1,
-                          3,
-                          0,
-                          0);
+                            EXEC_INFO_WIN,
+                            src_height - 1,
+                            3,
+                            0,
+                            0);
          (*win_info_ptr)->can_highlight = TRUE;
          tui_make_visible (&(*win_info_ptr)->generic);
          tui_make_visible ((*win_info_ptr)->detail.source_info.execution_info);
@@ -1047,11 +1067,11 @@ show_source_or_disasm_and_command (enum tui_layout_type layout_type)
          else
            {
              init_gen_win_info (&TUI_CMD_WIN->generic,
-                              TUI_CMD_WIN->generic.type,
-                              TUI_CMD_WIN->generic.height,
-                              TUI_CMD_WIN->generic.width,
-                              TUI_CMD_WIN->generic.origin.x,
-                              TUI_CMD_WIN->generic.origin.y);
+                                TUI_CMD_WIN->generic.type,
+                                TUI_CMD_WIN->generic.height,
+                                TUI_CMD_WIN->generic.width,
+                                TUI_CMD_WIN->generic.origin.x,
+                                TUI_CMD_WIN->generic.origin.y);
              TUI_CMD_WIN->can_highlight = FALSE;
              tui_make_visible (&TUI_CMD_WIN->generic);
            }
This page took 0.033547 seconds and 4 git commands to generate.