2008-02-21 Pedro Alves <pedro@codesorcery.com>
[deliverable/binutils-gdb.git] / gdb / tui / tui-stack.c
index 54e3ab3b118b1a29622bddc24e53e6835a3ed7bf..ccc9b9ffdb2f4e5c4831247d051d0e71e7d1fb77 100644 (file)
@@ -1,7 +1,7 @@
 /* TUI display locator.
 
-   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
-   Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 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., 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 "symtab.h"
@@ -30,7 +28,7 @@
 #include "inferior.h"
 #include "target.h"
 #include "top.h"
-
+#include "gdb_string.h"
 #include "tui/tui.h"
 #include "tui/tui-data.h"
 #include "tui/tui-stack.h"
 #include "tui/tui-winsource.h"
 #include "tui/tui-file.h"
 
-#ifdef HAVE_NCURSES_H       
-#include <ncurses.h>
-#else
-#ifdef HAVE_CURSES_H
-#include <curses.h>
-#endif
-#endif
+#include "gdb_curses.h"
 
 /* Get a printable name for the function at the address.
    The symbol name is demangled if demangling is turned on.
    Returns a pointer to a static area holding the result.  */
-static chartui_get_function_from_frame (struct frame_info *fi);
+static char *tui_get_function_from_frame (struct frame_info *fi);
 
 /* Set the filename portion of the locator.  */
 static void tui_set_locator_filename (const char *filename);
 
 /* Update the locator, with the provided arguments.  */
-static void tui_set_locator_info (const char *filename, const char *procname,
+static void tui_set_locator_info (const char *filename,
+                                 const char *procname,
                                   int lineno, CORE_ADDR addr);
 
 static void tui_update_command (char *, int);
 \f
 
-/* Create the status line to display as much information as we
-   can on this single line: target name, process number, current
-   function, current line, current PC, SingleKey mode.  */
+/* Create the status line to display as much information as we can on
+   this single line: target name, process number, current function,
+   current line, current PC, SingleKey mode.  */
 static char*
-tui_make_status_line (TuiLocatorElement* loc)
+tui_make_status_line (struct tui_locator_element *loc)
 {
-  charstring;
+  char *string;
   char line_buf[50], *pname;
-  charbuf;
+  char *buf;
   int status_size;
   int i, proc_width;
-  const charpid_name;
-  const charpc_buf;
+  const char *pid_name;
+  const char *pc_buf;
   int target_width;
   int pid_width;
   int line_width;
@@ -99,8 +92,8 @@ tui_make_status_line (TuiLocatorElement* loc)
   buf = (char*) alloca (status_size + 1);
 
   /* Translate line number and obtain its size.  */
-  if (loc->lineNo > 0)
-    sprintf (line_buf, "%d", loc->lineNo);
+  if (loc->line_no > 0)
+    sprintf (line_buf, "%d", loc->line_no);
   else
     strcpy (line_buf, "??");
   line_width = strlen (line_buf);
@@ -109,7 +102,7 @@ tui_make_status_line (TuiLocatorElement* loc)
 
   /* Translate PC address.  */
   pc_out = tui_sfileopen (128);
-  print_address_numeric (loc->addr, 1, pc_out);
+  fputs_filtered (paddress (loc->addr), pc_out);
   pc_buf = tui_file_get_strbuf (pc_out);
   pc_width = strlen (pc_buf);
   
@@ -122,7 +115,7 @@ tui_make_status_line (TuiLocatorElement* loc)
                 - (sizeof (PROC_PREFIX) - 1 + 1)
                 - (sizeof (LINE_PREFIX) - 1 + line_width + 1)
                 - (sizeof (PC_PREFIX) - 1 + pc_width + 1)
-                - (tui_current_key_mode == tui_single_key_mode
+                - (tui_current_key_mode == TUI_SINGLE_KEY_MODE
                    ? (sizeof (SINGLE_KEY) - 1 + 1)
                    : 0));
 
@@ -151,13 +144,13 @@ tui_make_status_line (TuiLocatorElement* loc)
         }
     }
 
-  /* Now convert elements to string form */
-  pname = loc->procName;
+  /* Now convert elements to string form */
+  pname = loc->proc_name;
 
-  /* Now create the locator line from the string version
-     of the elements.  We could use sprintf() here but
-     that wouldn't ensure that we don't overrun the size
-     of the allocated buffer.  strcat_to_buf() will.  */
+  /* Now create the locator line from the string version of the
+     elements.  We could use sprintf() here but that wouldn't ensure
+     that we don't overrun the size of the allocated buffer.
+     strcat_to_buf() will.  */
   *string = (char) 0;
 
   if (target_width > 0)
@@ -174,13 +167,13 @@ tui_make_status_line (TuiLocatorElement* loc)
     }
   
   /* Show whether we are in SingleKey mode.  */
-  if (tui_current_key_mode == tui_single_key_mode)
+  if (tui_current_key_mode == TUI_SINGLE_KEY_MODE)
     {
       strcat_to_buf (string, status_size, SINGLE_KEY);
       strcat_to_buf (string, status_size, " ");
     }
 
-  /* procedure/class name */
+  /* Procedure/class name.  */
   if (proc_width > 0)
     {
       if (strlen (pname) > proc_width)
@@ -213,9 +206,9 @@ tui_make_status_line (TuiLocatorElement* loc)
   return string;
 }
 
-/* Get a printable name for the function at the address.
-   The symbol name is demangled if demangling is turned on.
-   Returns a pointer to a static area holding the result.  */
+/* Get a printable name for the function at the address.  The symbol
+   name is demangled if demangling is turned on.  Returns a pointer to
+   a static area holding the result.  */
 static char*
 tui_get_function_from_frame (struct frame_info *fi)
 {
@@ -226,9 +219,9 @@ tui_get_function_from_frame (struct frame_info *fi)
   print_address_symbolic (get_frame_pc (fi), stream, demangle, "");
   p = tui_file_get_strbuf (stream);
 
-  /* Use simple heuristics to isolate the function name.  The symbol can
-     be demangled and we can have function parameters.  Remove them because
-     the status line is too short to display them.  */
+  /* Use simple heuristics to isolate the function name.  The symbol
+     can be demangled and we can have function parameters.  Remove
+     them because the status line is too short to display them.  */
   if (*p == '<')
     p++;
   strncpy (name, p, sizeof (name));
@@ -244,22 +237,21 @@ tui_get_function_from_frame (struct frame_info *fi)
   return name;
 }
 
-/* tuiShowLocatorContent().   */
 void
 tui_show_locator_content (void)
 {
   char *string;
-  TuiGenWinInfoPtr locator;
+  struct tui_gen_win_info *locator;
 
   locator = tui_locator_win_info_ptr ();
 
-  if (m_genWinPtrNotNull (locator) && locator->handle != (WINDOW *) NULL)
+  if (locator != NULL && locator->handle != (WINDOW *) NULL)
     {
-      TuiWinElementPtr element;
+      struct tui_win_element *element;
 
-      element = (TuiWinElementPtr) locator->content[0];
+      element = (struct tui_win_element *) locator->content[0];
 
-      string = tui_make_status_line (&element->whichElement.locator);
+      string = tui_make_status_line (&element->which_element.locator);
       wmove (locator->handle, 0, 0);
       wstandout (locator->handle);
       waddstr (locator->handle, string);
@@ -268,7 +260,7 @@ tui_show_locator_content (void)
       tui_refresh_win (locator);
       wmove (locator->handle, 0, 0);
       xfree (string);
-      locator->contentInUse = TRUE;
+      locator->content_in_use = TRUE;
     }
 }
 
@@ -277,39 +269,41 @@ tui_show_locator_content (void)
 static void
 tui_set_locator_filename (const char *filename)
 {
-  TuiGenWinInfoPtr locator = tui_locator_win_info_ptr ();
-  TuiLocatorElementPtr element;
+  struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
+  struct tui_locator_element *element;
 
-  if (locator->content[0] == (Opaque) NULL)
+  if (locator->content[0] == NULL)
     {
       tui_set_locator_info (filename, NULL, 0, 0);
       return;
     }
 
-  element = &((TuiWinElementPtr) locator->content[0])->whichElement.locator;
-  element->fileName[0] = 0;
-  strcat_to_buf (element->fileName, MAX_LOCATOR_ELEMENT_LEN, filename);
+  element = &((struct tui_win_element *) locator->content[0])->which_element.locator;
+  element->file_name[0] = 0;
+  strcat_to_buf (element->file_name, MAX_LOCATOR_ELEMENT_LEN, filename);
 }
 
 /* Update the locator, with the provided arguments.  */
 static void
-tui_set_locator_info (const char *filename, const char *procname, int lineno,
+tui_set_locator_info (const char *filename, 
+                     const char *procname, 
+                     int lineno,
                       CORE_ADDR addr)
 {
-  TuiGenWinInfoPtr locator = tui_locator_win_info_ptr ();
-  TuiLocatorElementPtr element;
+  struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
+  struct tui_locator_element *element;
 
   /* Allocate the locator content if necessary.  */
-  if (locator->contentSize <= 0)
+  if (locator->content_size <= 0)
     {
-      locator->content = (OpaquePtr) tui_alloc_content (1, locator->type);
-      locator->contentSize = 1;
+      locator->content = (void **) tui_alloc_content (1, locator->type);
+      locator->content_size = 1;
     }
 
-  element = &((TuiWinElementPtr) locator->content[0])->whichElement.locator;
-  element->procName[0] = (char) 0;
-  strcat_to_buf (element->procName, MAX_LOCATOR_ELEMENT_LEN, procname);
-  element->lineNo = lineno;
+  element = &((struct tui_win_element *) locator->content[0])->which_element.locator;
+  element->proc_name[0] = (char) 0;
+  strcat_to_buf (element->proc_name, MAX_LOCATOR_ELEMENT_LEN, procname);
+  element->line_no = lineno;
   element->addr = addr;
   tui_set_locator_filename (filename);
 }
@@ -326,78 +320,80 @@ tui_update_locator_filename (const char *filename)
 void
 tui_show_frame_info (struct frame_info *fi)
 {
-  TuiWinInfoPtr winInfo;
-  register int i;
+  struct tui_win_info *win_info;
+  int i;
 
   if (fi)
     {
-      register int startLine, i;
+      int start_line, i;
       CORE_ADDR low;
-      TuiGenWinInfoPtr locator = tui_locator_win_info_ptr ();
-      int sourceAlreadyDisplayed;
+      struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
+      int source_already_displayed;
       struct symtab_and_line sal;
 
       find_frame_sal (fi, &sal);
 
-      sourceAlreadyDisplayed = sal.symtab != 0
+      source_already_displayed = sal.symtab != 0
         && tui_source_is_displayed (sal.symtab->filename);
       tui_set_locator_info (sal.symtab == 0 ? "??" : sal.symtab->filename,
                             tui_get_function_from_frame (fi),
                             sal.line,
                             get_frame_pc (fi));
       tui_show_locator_content ();
-      startLine = 0;
+      start_line = 0;
       for (i = 0; i < (tui_source_windows ())->count; i++)
        {
-         TuiWhichElement *item;
-         winInfo = (TuiWinInfoPtr) (tui_source_windows ())->list[i];
+         union tui_which_element *item;
+         win_info = (tui_source_windows ())->list[i];
 
-         item = &((TuiWinElementPtr) locator->content[0])->whichElement;
-         if (winInfo == srcWin)
+         item = &((struct tui_win_element *) locator->content[0])->which_element;
+         if (win_info == TUI_SRC_WIN)
            {
-             startLine = (item->locator.lineNo -
-                          (winInfo->generic.viewportHeight / 2)) + 1;
-             if (startLine <= 0)
-               startLine = 1;
+             start_line = (item->locator.line_no -
+                          (win_info->generic.viewport_height / 2)) + 1;
+             if (start_line <= 0)
+               start_line = 1;
            }
          else
            {
              if (find_pc_partial_function (get_frame_pc (fi), (char **) NULL,
-                                           &low, (CORE_ADDR) NULL) == 0)
-               error ("No function contains program counter for selected frame.\n");
+                                           &low, (CORE_ADDR) 0) == 0)
+               error (_("No function contains program counter for selected frame."));
              else
-               low = tuiGetLowDisassemblyAddress (low, get_frame_pc (fi));
+               low = tui_get_low_disassembly_address (low, get_frame_pc (fi));
            }
 
-         if (winInfo == srcWin)
+         if (win_info == TUI_SRC_WIN)
            {
-             TuiLineOrAddress l;
-             l.lineNo = startLine;
-             if (!(sourceAlreadyDisplayed
-                   && tui_line_is_displayed (item->locator.lineNo, winInfo, TRUE)))
-               tui_update_source_window (winInfo, sal.symtab, l, TRUE);
+             struct tui_line_or_address l;
+             l.loa = LOA_LINE;
+             l.u.line_no = start_line;
+             if (!(source_already_displayed
+                   && tui_line_is_displayed (item->locator.line_no, win_info, TRUE)))
+               tui_update_source_window (win_info, sal.symtab, l, TRUE);
              else
                {
-                 l.lineNo = item->locator.lineNo;
-                 tui_set_is_exec_point_at (l, winInfo);
+                 l.u.line_no = item->locator.line_no;
+                 tui_set_is_exec_point_at (l, win_info);
                }
            }
          else
            {
-             if (winInfo == disassemWin)
+             if (win_info == TUI_DISASM_WIN)
                {
-                 TuiLineOrAddress a;
-                 a.addr = low;
-                 if (!tui_addr_is_displayed (item->locator.addr, winInfo, TRUE))
-                   tui_update_source_window (winInfo, sal.symtab, a, TRUE);
+                 struct tui_line_or_address a;
+                 a.loa = LOA_ADDRESS;
+                 a.u.addr = low;
+                 if (!tui_addr_is_displayed (item->locator.addr, win_info, TRUE))
+                   tui_update_source_window (win_info, sal.symtab, a, TRUE);
                  else
                    {
-                     a.addr = item->locator.addr;
-                     tui_set_is_exec_point_at (a, winInfo);
+                     a.u.addr = item->locator.addr;
+                     tui_set_is_exec_point_at (a, win_info);
                    }
                }
            }
-         tui_update_exec_info (winInfo);
+         tui_update_exec_info (win_info);
        }
     }
   else
@@ -406,20 +402,24 @@ tui_show_frame_info (struct frame_info *fi)
       tui_show_locator_content ();
       for (i = 0; i < (tui_source_windows ())->count; i++)
        {
-         winInfo = (TuiWinInfoPtr) (tui_source_windows ())->list[i];
-         tui_clear_source_content (winInfo, EMPTY_SOURCE_PROMPT);
-         tui_update_exec_info (winInfo);
+         win_info = (tui_source_windows ())->list[i];
+         tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
+         tui_update_exec_info (win_info);
        }
     }
 }
 
-/* Function to initialize gdb commands, for tui window stack manipulation.  */
+/* Function to initialize gdb commands, for tui window stack
+   manipulation.  */
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_tui_stack;
+
 void
-_initialize_tuiStack (void)
+_initialize_tui_stack (void)
 {
-  add_com ("update", class_tui, tui_update_command,
-           "Update the source window and locator to display the current "
-           "execution point.\n");
+  add_com ("update", class_tui, tui_update_command, _("\
+Update the source window and locator to display the current execution point.\n"));
 }
 
 /* Command to update the display with the current execution point.  */
This page took 0.031472 seconds and 4 git commands to generate.