X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Ftui%2Ftui-stack.c;h=ccc9b9ffdb2f4e5c4831247d051d0e71e7d1fb77;hb=2c0b251b29eeafa90c84a3a938c744bc7ba81aea;hp=54e3ab3b118b1a29622bddc24e53e6835a3ed7bf;hpb=dd1abb8c9ec3fa79e36e4e14033f4309741442c1;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c index 54e3ab3b11..ccc9b9ffdb 100644 --- a/gdb/tui/tui-stack.c +++ b/gdb/tui/tui-stack.c @@ -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 . */ #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" @@ -39,42 +37,37 @@ #include "tui/tui-winsource.h" #include "tui/tui-file.h" -#ifdef HAVE_NCURSES_H -#include -#else -#ifdef HAVE_CURSES_H -#include -#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 char* tui_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); -/* 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) { - char* string; + char *string; char line_buf[50], *pname; - char* buf; + char *buf; int status_size; int i, proc_width; - const char* pid_name; - const char* pc_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. */