-/*
- ** This module contains functions for displaying the locator information in the locator window.
- */
+/* TUI display locator.
+
+ Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation,
+ Inc.
+
+ Contributed by Hewlett-Packard Company.
+
+ This file is part of GDB.
+
+ 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
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ 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. */
+
+/* FIXME: cagney/2002-02-28: The GDB coding standard indicates that
+ "defs.h" should be included first. Unfortunatly some systems
+ (currently Debian GNU/Linux) include the <stdbool.h> via <curses.h>
+ and they clash with "bfd.h"'s definiton of true/false. The correct
+ fix is to remove true/false from "bfd.h", however, until that
+ happens, hack around it by including "config.h" and <curses.h>
+ first. */
+
+#include "config.h"
+#ifdef HAVE_NCURSES_H
+#include <ncurses.h>
+#else
+#ifdef HAVE_CURSES_H
+#include <curses.h>
+#endif
+#endif
#include "defs.h"
#include "symtab.h"
#include "breakpoint.h"
#include "frame.h"
+#include "command.h"
+#include "inferior.h"
+#include "target.h"
+#include "top.h"
#include "tui.h"
#include "tuiData.h"
#include "tuiStack.h"
+#include "tuiGeneralWin.h"
+#include "tuiSource.h"
#include "tuiSourceWin.h"
+#include "tui-file.h"
-/*****************************************
-** STATIC LOCAL FUNCTIONS FORWARD DECLS **
-******************************************/
-
-static char *_getFuncNameFromFrame PARAMS ((struct frame_info *));
-static void _tuiUpdateLocation_command PARAMS ((char *, int));
+/* 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);
+/* 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,
+ int lineno, CORE_ADDR addr);
-/*****************************************
-** PUBLIC FUNCTION **
-******************************************/
+static void tui_update_command (char *, int);
+\f
-/*
- ** tuiClearLocatorDisplay()
- */
-void
-#ifdef __STDC__
-tuiClearLocatorDisplay (void)
-#else
-tuiClearLocatorDisplay ()
-#endif
+/* 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)
{
- TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
- int i;
+ char* string;
+ char line_buf[50], buf[50], *pname;
+ int status_size = termWidth ();
+ int i, proc_width;
+ const char* pid_name;
+ const char* pc_buf;
+ int target_width;
+ int pid_width;
+ int line_width;
+ int pc_width;
+ struct ui_file *pc_out;
+
+ if (ptid_equal (inferior_ptid, null_ptid))
+ pid_name = "No process";
+ else
+ pid_name = target_pid_to_str (inferior_ptid);
+
+ target_width = strlen (target_shortname);
+ if (target_width > MAX_TARGET_WIDTH)
+ target_width = MAX_TARGET_WIDTH;
+
+ pid_width = strlen (pid_name);
+ if (pid_width > MAX_PID_WIDTH)
+ pid_width = MAX_PID_WIDTH;
+
+ string = (char *) xmalloc (status_size + 1);
+
+ /* Translate line number and obtain its size. */
+ if (loc->lineNo > 0)
+ sprintf (line_buf, "%d", loc->lineNo);
+ else
+ strcpy (line_buf, "??");
+ line_width = strlen (line_buf);
+ if (line_width < MIN_LINE_WIDTH)
+ line_width = MIN_LINE_WIDTH;
+
+ /* Translate PC address. */
+ pc_out = tui_sfileopen (128);
+ print_address_numeric (loc->addr, 1, pc_out);
+ pc_buf = tui_file_get_strbuf (pc_out);
+ pc_width = strlen (pc_buf);
+
+ /* First determine the amount of proc name width we have available.
+ The +1 are for a space separator between fields.
+ The -1 are to take into account the \0 counted by sizeof. */
+ proc_width = (status_size
+ - (target_width + 1)
+ - (pid_width + 1)
+ - (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
+ ? (sizeof (SINGLE_KEY) - 1 + 1)
+ : 0));
+
+ /* If there is no room to print the function name, try by removing
+ some fields. */
+ if (proc_width < MIN_PROC_WIDTH)
+ {
+ proc_width += target_width + 1;
+ target_width = 0;
+ if (proc_width < MIN_PROC_WIDTH)
+ {
+ proc_width += pid_width + 1;
+ pid_width = 0;
+ if (proc_width <= MIN_PROC_WIDTH)
+ {
+ proc_width += pc_width + sizeof (PC_PREFIX) - 1 + 1;
+ pc_width = 0;
+ if (proc_width < 0)
+ {
+ proc_width += line_width + sizeof (LINE_PREFIX) - 1 + 1;
+ line_width = 0;
+ if (proc_width < 0)
+ proc_width = 0;
+ }
+ }
+ }
+ }
- if (locator->handle != (WINDOW *) NULL)
+ /* Now convert elements to string form */
+ pname = loc->procName;
+
+ /* 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)
{
- /* No need to werase, since writing a line of
- * blanks which we do below, is equivalent.
- */
- /* werase(locator->handle); */
- wmove (locator->handle, 0, 0);
- wstandout (locator->handle);
- for (i = 0; i < locator->width; i++)
- waddch (locator->handle, ' ');
- wstandend (locator->handle);
- tuiRefreshWin (locator);
- wmove (locator->handle, 0, 0);
- locator->contentInUse = FALSE;
+ sprintf (buf, "%*.*s ",
+ -target_width, target_width, target_shortname);
+ strcat_to_buf (string, status_size, buf);
+ }
+ if (pid_width > 0)
+ {
+ sprintf (buf, "%*.*s ",
+ -pid_width, pid_width, pid_name);
+ strcat_to_buf (string, status_size, buf);
+ }
+
+ /* Show whether we are in SingleKey mode. */
+ if (tui_current_key_mode == tui_single_key_mode)
+ {
+ strcat_to_buf (string, status_size, SINGLE_KEY);
+ strcat_to_buf (string, status_size, " ");
}
- return;
-} /* tuiClearLocatorDisplay */
+ /* procedure/class name */
+ if (proc_width > 0)
+ {
+ if (strlen (pname) > proc_width)
+ sprintf (buf, "%s%*.*s* ", PROC_PREFIX,
+ 1 - proc_width, proc_width - 1, pname);
+ else
+ sprintf (buf, "%s%*.*s ", PROC_PREFIX,
+ -proc_width, proc_width, pname);
+ strcat_to_buf (string, status_size, buf);
+ }
+ if (line_width > 0)
+ {
+ sprintf (buf, "%s%*.*s ", LINE_PREFIX,
+ -line_width, line_width, line_buf);
+ strcat_to_buf (string, status_size, buf);
+ }
+ if (pc_width > 0)
+ {
+ strcat_to_buf (string, status_size, PC_PREFIX);
+ strcat_to_buf (string, status_size, pc_buf);
+ }
+
+
+ for (i = strlen (string); i < status_size; i++)
+ string[i] = ' ';
+ string[status_size] = (char) 0;
+
+ ui_file_delete (pc_out);
+ 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. */
+static char*
+tui_get_function_from_frame (struct frame_info *fi)
+{
+ static char name[256];
+ struct ui_file *stream = tui_sfileopen (256);
+ char *p;
+
+ print_address_symbolic (fi->pc, 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. */
+ if (*p == '<')
+ p++;
+ strncpy (name, p, sizeof (name));
+ p = strchr (name, '(');
+ if (!p)
+ p = strchr (name, '>');
+ if (p)
+ *p = 0;
+ p = strchr (name, '+');
+ if (p)
+ *p = 0;
+ ui_file_delete (stream);
+ return name;
+}
/*
** tuiShowLocatorContent()
*/
void
-#ifdef __STDC__
tuiShowLocatorContent (void)
-#else
-tuiShowLocatorContent ()
-#endif
{
char *string;
TuiGenWinInfoPtr locator;
if (m_genWinPtrNotNull (locator) && locator->handle != (WINDOW *) NULL)
{
- string = displayableWinContentAt (locator, 0);
- if (string != (char *) NULL)
- {
- wmove (locator->handle, 0, 0);
- wstandout (locator->handle);
- waddstr (locator->handle, string);
- wstandend (locator->handle);
- tuiRefreshWin (locator);
- wmove (locator->handle, 0, 0);
- if (string != nullStr ())
- tuiFree (string);
- locator->contentInUse = TRUE;
- }
- }
-
- return;
-} /* tuiShowLocatorContent */
-
-
-/*
- ** tuiSetLocatorInfo().
- ** Function to update the locator, with the provided arguments.
- */
-void
-#ifdef __STDC__
-tuiSetLocatorInfo (
- char *fname,
- char *procname,
- int lineNo,
- Opaque addr,
- TuiLocatorElementPtr element)
-#else
-tuiSetLocatorInfo (fname, procname, lineNo, addr, element)
- char *fname;
- char *procname;
- int lineNo;
- Opaque addr;
- TuiLocatorElementPtr element;
-#endif
-{
-#ifdef COMMENT
- /* first free the old info */
- if (element->fileName)
- tuiFree (element->fileName);
- if (element->procName)
- tuiFree (element->procName);
-
- if (fname == (char *) NULL)
- element->fileName = fname;
- else
- element->fileName = tuiStrDup (fname);
- if (procname == (char *) NULL)
- element->procName = procname;
- else
- element->procName = tuiStrDup (procname);
-#else
- element->fileName[0] = (char) 0;
- element->procName[0] = (char) 0;
- strcat_to_buf (element->fileName, MAX_LOCATOR_ELEMENT_LEN, fname);
- strcat_to_buf (element->procName, MAX_LOCATOR_ELEMENT_LEN, procname);
-#endif
- element->lineNo = lineNo;
- element->addr = (Opaque) addr;
-
- return;
-} /* tuiSetLocatorInfo */
+ TuiWinElementPtr element;
+ element = (TuiWinElementPtr) locator->content[0];
-/*
- ** tuiUpdateLocatorFilename().
- ** Update only the filename portion of the locator.
- */
-void
-#ifdef __STDC__
-tuiUpdateLocatorFilename (
- char *fileName)
-#else
-tuiUpdateLocatorFilename (fileName)
- char *fileName;
-#endif
-{
- TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
-
- if (locator->content[0] == (Opaque) NULL)
- tuiSetLocatorContent ((struct frame_info *) NULL);
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.fileName[0] = (char) 0;
- strcat_to_buf (((TuiWinElementPtr) locator->content[0])->whichElement.locator.fileName,
- MAX_LOCATOR_ELEMENT_LEN,
- fileName);
-
- tuiShowLocatorContent ();
-
- return;
-} /* tuiUpdateLocatorFilename */
-
-
-/*
- ** tui_vUpdateLocatorFilename().
- ** Update only the filename portion of the locator with args in a va_list.
- */
-void
-#ifdef __STDC__
-tui_vUpdateLocatorFilename (
- va_list args)
-#else
-tui_vUpdateLocatorFilename (args)
- va_list args;
-#endif
-{
- char *fileName;
-
- fileName = va_arg (args, char *);
- tuiUpdateLocatorFilename (fileName);
-
- return;
-} /* tui_vUpdateLocatorFilename */
+ string = tui_make_status_line (&element->whichElement.locator);
+ wmove (locator->handle, 0, 0);
+ wstandout (locator->handle);
+ waddstr (locator->handle, string);
+ wclrtoeol (locator->handle);
+ wstandend (locator->handle);
+ tuiRefreshWin (locator);
+ wmove (locator->handle, 0, 0);
+ xfree (string);
+ locator->contentInUse = TRUE;
+ }
+}
-/*
- ** tuiSwitchFilename().
- ** Update the filename portion of the locator. Clear the other info in locator.
- ** (elz)
- */
-void
-#ifdef __STDC__
-tuiSwitchFilename (
- char *fileName)
-#else
-tuiSwitchFilename (fileName)
- char *fileName;
-#endif
+/* Set the filename portion of the locator. */
+static void
+tui_set_locator_filename (const char *filename)
{
TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
+ TuiLocatorElementPtr element;
if (locator->content[0] == (Opaque) NULL)
- tuiSetLocatorContent ((struct frame_info *) NULL);
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.fileName[0] = (char) 0;
-
- tuiSetLocatorInfo (fileName,
- (char *) NULL,
- 0,
- (Opaque) NULL,
- &((TuiWinElementPtr) locator->content[0])->whichElement.locator);
-
- tuiShowLocatorContent ();
-
- return;
-} /* tuiSwitchFilename */
-
-
-/*
- ** tuiGetLocatorFilename().
- ** Get the filename portion of the locator.
- ** (elz)
- */
-void
-#ifdef __STDC__
-tuiGetLocatorFilename (
- TuiGenWinInfoPtr locator,
- char **filename)
-#else
-tuiGetLocatorFilename (locator, filename)
- TuiGenWinInfoPtr locator;
- char **filename;
-#endif
-{
-
- /* the current filename could be non known, in which case the xmalloc would
- allocate no memory, because the length would be 0 */
- if (((TuiWinElementPtr) locator->content[0])->whichElement.locator.fileName)
{
- int name_length =
- strlen (((TuiWinElementPtr) locator->content[0])->whichElement.locator.fileName);
-
- (*filename) = (char *) xmalloc (name_length + 1);
- strcpy ((*filename),
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.fileName);
+ tui_set_locator_info (filename, NULL, 0, 0);
+ return;
}
- return;
-} /* tuiGetLocatorFilename */
-
+ element = &((TuiWinElementPtr) locator->content[0])->whichElement.locator;
+ element->fileName[0] = 0;
+ strcat_to_buf (element->fileName, MAX_LOCATOR_ELEMENT_LEN, filename);
+}
-/*
- ** tuiUpdateLocatorInfoFromFrame().
- ** Function to update the locator, with the information extracted from frameInfo
- */
-void
-#ifdef __STDC__
-tuiUpdateLocatorInfoFromFrame (
- struct frame_info *frameInfo,
- TuiLocatorElementPtr element)
-#else
-tuiUpdateLocatorInfoFromFrame (frameInfo, element)
- struct frame_info *frameInfo;
- TuiLocatorElementPtr element;
-#endif
-{
- struct symtab_and_line symtabAndLine;
-
- /* now get the new info */
- symtabAndLine = find_pc_line (frameInfo->pc,
- (frameInfo->next != (struct frame_info *) NULL &&
- !frameInfo->next->signal_handler_caller &&
- !frame_in_dummy (frameInfo->next)));
- if (symtabAndLine.symtab && symtabAndLine.symtab->filename)
- tuiSetLocatorInfo (symtabAndLine.symtab->filename,
- _getFuncNameFromFrame (frameInfo),
- symtabAndLine.line,
- (Opaque) frameInfo->pc,
- element);
- else
- tuiSetLocatorInfo ((char *) NULL,
- _getFuncNameFromFrame (frameInfo),
- 0,
- (Opaque) frameInfo->pc,
- element);
-
- return;
-} /* tuiUpdateLocatorInfoFromFrame */
-
-
-/*
- ** tuiSetLocatorContent().
- ** Function to set the content of the locator
- */
-void
-#ifdef __STDC__
-tuiSetLocatorContent (
- struct frame_info *frameInfo)
-#else
-tuiSetLocatorContent (frameInfo)
- struct frame_info *frameInfo;
-#endif
+/* Update the locator, with the provided arguments. */
+static void
+tui_set_locator_info (const char *filename, const char *procname, int lineno,
+ CORE_ADDR addr)
{
TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
- TuiWinElementPtr element;
- struct symtab_and_line symtabAndLine;
+ TuiLocatorElementPtr element;
- /* Allocate the element if necessary */
+ /* Allocate the locator content if necessary. */
if (locator->contentSize <= 0)
{
- TuiWinContent contentPtr;
-
- if ((locator->content = (OpaquePtr) allocContent (1, locator->type)) == (OpaquePtr) NULL)
- error ("Unable to Allocate Memory to Display Location.");
+ locator->content = (OpaquePtr) allocContent (1, locator->type);
locator->contentSize = 1;
}
- if (frameInfo != (struct frame_info *) NULL)
- tuiUpdateLocatorInfoFromFrame (frameInfo,
- &((TuiWinElementPtr) locator->content[0])->whichElement.locator);
- else
- tuiSetLocatorInfo ((char *) NULL,
- (char *) NULL,
- 0,
- (Opaque) NULL,
- &((TuiWinElementPtr) locator->content[0])->whichElement.locator);
- return;
-} /* tuiSetLocatorContent */
-
+ 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->addr = addr;
+ tui_set_locator_filename (filename);
+}
-/*
- ** tuiUpdateLocatorDisplay().
- ** Function to update the locator display
- */
+/* Update only the filename portion of the locator. */
void
-#ifdef __STDC__
-tuiUpdateLocatorDisplay (
- struct frame_info *frameInfo)
-#else
-tuiUpdateLocatorDisplay (frameInfo)
- struct frame_info *frameInfo;
-#endif
+tuiUpdateLocatorFilename (const char *filename)
{
- tuiClearLocatorDisplay ();
- tuiSetLocatorContent (frameInfo);
+ tui_set_locator_filename (filename);
tuiShowLocatorContent ();
+}
- return;
-} /* tuiUpdateLocatorDisplay */
-
-
-/*
- ** tuiShowFrameInfo().
- ** Function to print the frame inforrmation for the TUI.
- */
+/* Function to print the frame information for the TUI. */
void
-#ifdef __STDC__
-tuiShowFrameInfo (
- struct frame_info *fi)
-#else
-tuiShowFrameInfo (fi)
- struct frame_info *fi;
-#endif
+tuiShowFrameInfo (struct frame_info *fi)
{
TuiWinInfoPtr winInfo;
register int i;
if (fi)
{
register int startLine, i;
- register struct symtab *s;
CORE_ADDR low;
TuiGenWinInfoPtr locator = locatorWinInfoPtr ();
int sourceAlreadyDisplayed;
-
-
- s = find_pc_symtab (fi->pc);
- sourceAlreadyDisplayed = tuiSourceIsDisplayed (s->filename);
- tuiUpdateLocatorDisplay (fi);
+ struct symtab_and_line sal;
+
+ sal = find_pc_line (fi->pc,
+ (fi->next != (struct frame_info *) NULL &&
+ !fi->next->signal_handler_caller &&
+ !frame_in_dummy (fi->next)));
+
+ sourceAlreadyDisplayed = sal.symtab != 0
+ && tuiSourceIsDisplayed (sal.symtab->filename);
+ tui_set_locator_info (sal.symtab == 0 ? "??" : sal.symtab->filename,
+ tui_get_function_from_frame (fi),
+ sal.line,
+ fi->pc);
+ tuiShowLocatorContent ();
+ startLine = 0;
for (i = 0; i < (sourceWindows ())->count; i++)
{
+ TuiWhichElement *item;
winInfo = (TuiWinInfoPtr) (sourceWindows ())->list[i];
+
+ item = &((TuiWinElementPtr) locator->content[0])->whichElement;
if (winInfo == srcWin)
{
- startLine =
- (((TuiWinElementPtr) locator->content[0])->whichElement.locator.lineNo -
- (winInfo->generic.viewportHeight / 2)) + 1;
+ startLine = (item->locator.lineNo -
+ (winInfo->generic.viewportHeight / 2)) + 1;
if (startLine <= 0)
startLine = 1;
}
if (find_pc_partial_function (fi->pc, (char **) NULL, &low, (CORE_ADDR) NULL) == 0)
error ("No function contains program counter for selected frame.\n");
else
- low = (CORE_ADDR) tuiGetLowDisassemblyAddress ((Opaque) low, (Opaque) fi->pc);
+ low = tuiGetLowDisassemblyAddress (low, fi->pc);
}
if (winInfo == srcWin)
{
- if (!(sourceAlreadyDisplayed && m_tuiLineDisplayedWithinThreshold (
- winInfo,
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.lineNo)))
- tuiUpdateSourceWindow (winInfo, s, (Opaque) startLine, TRUE);
+ TuiLineOrAddress l;
+ l.lineNo = startLine;
+ if (!(sourceAlreadyDisplayed
+ && tuiLineIsDisplayed (item->locator.lineNo, winInfo, TRUE)))
+ tuiUpdateSourceWindow (winInfo, sal.symtab, l, TRUE);
else
- tuiSetIsExecPointAt ((Opaque)
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.lineNo,
- winInfo);
+ {
+ l.lineNo = item->locator.lineNo;
+ tuiSetIsExecPointAt (l, winInfo);
+ }
}
else
{
if (winInfo == disassemWin)
{
- if (!m_tuiLineDisplayedWithinThreshold (winInfo,
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.addr))
- tuiUpdateSourceWindow (winInfo, s, (Opaque) low, TRUE);
+ TuiLineOrAddress a;
+ a.addr = low;
+ if (!tuiAddrIsDisplayed (item->locator.addr, winInfo, TRUE))
+ tuiUpdateSourceWindow (winInfo, sal.symtab, a, TRUE);
else
- tuiSetIsExecPointAt ((Opaque)
- ((TuiWinElementPtr) locator->content[0])->whichElement.locator.addr,
- winInfo);
+ {
+ a.addr = item->locator.addr;
+ tuiSetIsExecPointAt (a, winInfo);
+ }
}
}
tuiUpdateExecInfo (winInfo);
}
else
{
- tuiUpdateLocatorDisplay (fi);
+ tui_set_locator_info (NULL, NULL, 0, (CORE_ADDR) 0);
+ tuiShowLocatorContent ();
for (i = 0; i < (sourceWindows ())->count; i++)
{
winInfo = (TuiWinInfoPtr) (sourceWindows ())->list[i];
tuiUpdateExecInfo (winInfo);
}
}
+}
- return;
-} /* tuiShowFrameInfo */
-
-
-/*
- ** tui_vShowFrameInfo().
- ** Function to print the frame inforrmation for the TUI with args in a va_list.
- */
+/* Function to initialize gdb commands, for tui window stack manipulation. */
void
-#ifdef __STDC__
-tui_vShowFrameInfo (
- va_list args)
-#else
-tui_vShowFrameInfo (args)
- va_list args;
-#endif
+_initialize_tuiStack (void)
{
- struct frame_info *fi;
-
- fi = va_arg (args, struct frame_info *);
- tuiShowFrameInfo (fi);
-
- return;
-} /* tui_vShowFrameInfo */
-
+ add_com ("update", class_tui, tui_update_command,
+ "Update the source window and locator to display the current "
+ "execution point.\n");
+}
-/*
- ** _initialize_tuiStack().
- ** Function to initialize gdb commands, for tui window stack manipulation.
- */
-void
-_initialize_tuiStack ()
-{
- if (tui_version)
- {
- add_com ("update", class_tui, _tuiUpdateLocation_command,
- "Update the source window and locator to display the current execution point.\n");
- }
-
- return;
-} /* _initialize_tuiStack */
-
-
-/*****************************************
-** STATIC LOCAL FUNCTIONS **
-******************************************/
-
-/*
- ** _getFuncNameFromFrame().
- */
-static char *
-#ifdef __STDC__
-_getFuncNameFromFrame (
- struct frame_info *frameInfo)
-#else
-_getFuncNameFromFrame (frameInfo)
- struct frame_info *frameInfo;
-#endif
-{
- char *funcName = (char *) NULL;
-
- find_pc_partial_function (frameInfo->pc,
- &funcName,
- (CORE_ADDR *) NULL,
- (CORE_ADDR *) NULL);
- return funcName;
-} /* _getFuncNameFromFrame */
-
-
-/*
- ** _tuiUpdateLocation_command().
- ** Command to update the display with the current execution point
- */
+/* Command to update the display with the current execution point. */
static void
-#ifdef __STDC__
-_tuiUpdateLocation_command (
- char *arg,
- int fromTTY)
-#else
-_tuiUpdateLocation_command (arg, fromTTY)
- char *arg;
- int fromTTY;
-#endif
+tui_update_command (char *arg, int from_tty)
{
-#ifndef TRY
- extern void frame_command PARAMS ((char *, int));
- frame_command ("0", FALSE);
-#else
- struct frame_info *curFrame;
-
- /* Obtain the current execution point */
- if ((curFrame = get_current_frame ()) != (struct frame_info *) NULL)
- {
- struct frame_info *frame;
- int curLevel = 0;
-
- for (frame = get_prev_frame (curLevel);
- (frame != (struct frame_info *) NULL && (frame != curFrame));
- frame = get_prev_frame (frame))
- curLevel++;
-
- if (curFrame != (struct frame_info *) NULL)
- print_frame_info (frame, curLevel, 0, 1);
- }
-#endif
+ char cmd[sizeof("frame 0")];
- return;
-} /* _tuiUpdateLocation_command */
+ strcpy (cmd, "frame 0");
+ execute_command (cmd, from_tty);
+}