/* TUI display source window.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007
- Free Software Foundation, Inc.
+ Copyright (C) 1998-2013 Free Software Foundation, Inc.
Contributed by Hewlett-Packard Company.
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., 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 <ctype.h>
#include "breakpoint.h"
#include "source.h"
#include "symtab.h"
+#include "objfiles.h"
+#include "filenames.h"
#include "tui/tui.h"
#include "tui/tui-data.h"
/* Function to display source in the source window. */
enum tui_status
-tui_set_source_content (struct symtab *s, int line_no, int noerror)
+tui_set_source_content (struct symtab *s,
+ int line_no,
+ int noerror)
{
enum tui_status ret = TUI_FAILURE;
- if (s != (struct symtab *) NULL && s->filename != (char *) NULL)
+ if (s != (struct symtab *) NULL)
{
FILE *stream;
int i, desc, c, line_width, nlines;
if (!noerror)
{
char *name = alloca (strlen (s->filename) + 100);
+
sprintf (name, "%s:%d", s->filename, line_no);
print_sys_errmsg (name, errno);
}
else
{
int offset, cur_line_no, cur_line, cur_len, threshold;
- struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
- struct tui_source_info *src = &TUI_SRC_WIN->detail.source_info;
+ struct tui_gen_win_info *locator
+ = tui_locator_win_info_ptr ();
+ struct tui_source_info *src
+ = &TUI_SRC_WIN->detail.source_info;
if (TUI_SRC_WIN->generic.title)
xfree (TUI_SRC_WIN->generic.title);
stream = fdopen (desc, FOPEN_RT);
clearerr (stream);
cur_line = 0;
+ src->gdbarch = get_objfile_arch (s->objfile);
src->start_line_or_addr.loa = LOA_LINE;
cur_line_no = src->start_line_or_addr.u.line_no = line_no;
if (offset > 0)
(threshold + 1) * sizeof (char));
while (cur_line < nlines)
{
- struct tui_win_element *element = (struct tui_win_element *)
- TUI_SRC_WIN->generic.content[cur_line];
+ struct tui_win_element *element
+ = (struct tui_win_element *)
+ TUI_SRC_WIN->generic.content[cur_line];
/* Get the first character in the line. */
c = fgetc (stream);
/* Init the line with the line number. */
sprintf (src_line, "%-6d", cur_line_no);
cur_len = strlen (src_line);
- i = cur_len -
- ((cur_len / tui_default_tab_len ()) * tui_default_tab_len ());
+ i = cur_len - ((cur_len / tui_default_tab_len ())
+ * tui_default_tab_len ());
while (i < tui_default_tab_len ())
{
src_line[cur_len] = ' ';
element->which_element.source.line_or_addr.u.line_no =
cur_line_no;
element->which_element.source.is_exec_point =
- (strcmp (((struct tui_win_element *)
- locator->content[0])->which_element.locator.file_name,
- s->filename) == 0
+ (filename_cmp (((struct tui_win_element *)
+ locator->content[0])->which_element.locator.file_name,
+ s->filename) == 0
&& cur_line_no == ((struct tui_win_element *)
- locator->content[0])->which_element.locator.line_no);
+ locator->content[0])->which_element.locator.line_no);
if (c != EOF)
{
i = strlen (src_line) - 1;
do
{
- if ((c != '\n') &&
- (c != '\r') && (++i < threshold))
+ if ((c != '\n') && (c != '\r')
+ && (++i < threshold))
{
if (c < 040 && c != '\t')
{
overwrite our buffer. */
if (c == '\t')
{
- int j, max_tab_len = tui_default_tab_len ();
+ int j, max_tab_len
+ = tui_default_tab_len ();
- for (j = i - (
- (i / max_tab_len) * max_tab_len);
- ((j < max_tab_len) &&
- i < threshold);
+ for (j = i - ((i / max_tab_len)
+ * max_tab_len);
+ j < max_tab_len
+ && i < threshold;
i++, j++)
src_line[i] = ' ';
i--;
while (c != EOF && c != '\n' && c != '\r')
c = fgetc (stream);
/* Handle non-'\n' end-of-line. */
- if (c == '\r' &&
- (c = fgetc (stream)) != '\n' && c != EOF)
+ if (c == '\r'
+ && (c = fgetc (stream)) != '\n'
+ && c != EOF)
{
ungetc (c, stream);
c = '\r';
}
}
- while (c != EOF && c != '\n' && c != '\r' &&
- i < threshold && (c = fgetc (stream)));
+ while (c != EOF && c != '\n' && c != '\r'
+ && i < threshold
+ && (c = fgetc (stream)));
}
/* Now copy the line taking the offset into
account. */
if (strlen (src_line) > offset)
- strcpy (((struct tui_win_element *) TUI_SRC_WIN->generic.content[
- cur_line])->which_element.source.line,
+ strcpy (((struct tui_win_element *)
+ TUI_SRC_WIN->generic.content[cur_line])->which_element.source.line,
&src_line[offset]);
else
((struct tui_win_element *)
source files cannot be accessed. */
void
-tui_set_source_content_nil (struct tui_win_info *win_info, char *warning_string)
+tui_set_source_content_nil (struct tui_win_info *win_info,
+ char *warning_string)
{
int line_width;
int n_lines;
struct tui_win_element *element =
(struct tui_win_element *) win_info->generic.content[curr_line];
+
element->which_element.source.line_or_addr.loa = LOA_LINE;
element->which_element.source.line_or_addr.u.line_no = 0;
element->which_element.source.is_exec_point = FALSE;
/* Function to display source in the source window. This function
initializes the horizontal scroll to 0. */
void
-tui_show_symtab_source (struct symtab *s, struct tui_line_or_address line, int noerror)
+tui_show_symtab_source (struct gdbarch *gdbarch, struct symtab *s,
+ struct tui_line_or_address line,
+ int noerror)
{
TUI_SRC_WIN->detail.source_info.horizontal_offset = 0;
- tui_update_source_window_as_is (TUI_SRC_WIN, s, line, noerror);
+ tui_update_source_window_as_is (TUI_SRC_WIN, gdbarch, s, line, noerror);
}
int
tui_source_is_displayed (char *fname)
{
- return (TUI_SRC_WIN->generic.content_in_use &&
- (strcmp (((struct tui_win_element *) (tui_locator_win_info_ptr ())->
- content[0])->which_element.locator.file_name, fname) == 0));
+ return (TUI_SRC_WIN != NULL
+ && TUI_SRC_WIN->generic.content_in_use
+ && (filename_cmp (((struct tui_win_element *)
+ (tui_locator_win_info_ptr ())->
+ content[0])->which_element.locator.file_name,
+ fname) == 0));
}
if (l.u.line_no > s->nlines)
/* line = s->nlines - win_info->generic.content_size + 1; */
/* elz: fix for dts 23398. */
- l.u.line_no = content[0]->which_element.source.line_or_addr.u.line_no;
+ l.u.line_no
+ = content[0]->which_element.source.line_or_addr.u.line_no;
}
else
{