Remove UNDEFINED_ITEM define from TUI
[deliverable/binutils-gdb.git] / gdb / tui / tui-winsource.c
CommitLineData
f377b406 1/* TUI display source/assembly window.
f33c6cbf 2
42a4f53d 3 Copyright (C) 1998-2019 Free Software Foundation, Inc.
f33c6cbf 4
f377b406
SC
5 Contributed by Hewlett-Packard Company.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
f377b406
SC
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
23#include <ctype.h>
24#include "symtab.h"
25#include "frame.h"
26#include "breakpoint.h"
fd0407d6 27#include "value.h"
52575520 28#include "source.h"
13274fc3 29#include "objfiles.h"
a7417d46 30#include "filenames.h"
c906108c 31
d7b2e967
AC
32#include "tui/tui.h"
33#include "tui/tui-data.h"
62f29fda 34#include "tui/tui-io.h"
d7b2e967
AC
35#include "tui/tui-stack.h"
36#include "tui/tui-win.h"
37#include "tui/tui-wingeneral.h"
38#include "tui/tui-winsource.h"
39#include "tui/tui-source.h"
40#include "tui/tui-disasm.h"
6a83354a 41#include "gdb_curses.h"
c906108c 42
1f393769 43/* Function to display the "main" routine. */
c906108c 44void
b4eb2452 45tui_display_main ()
c906108c 46{
b4eb2452 47 if (!tui_source_windows ().empty ())
c906108c 48 {
13274fc3 49 struct gdbarch *gdbarch;
c906108c
SS
50 CORE_ADDR addr;
51
13274fc3 52 tui_get_begin_asm_address (&gdbarch, &addr);
c774cec6 53 if (addr != (CORE_ADDR) 0)
c906108c 54 {
34248c3a 55 struct symtab *s;
c906108c 56
13274fc3 57 tui_update_source_windows_with_addr (gdbarch, addr);
34248c3a
DE
58 s = find_pc_line_symtab (addr);
59 if (s != NULL)
60 tui_update_locator_fullname (symtab_to_fullname (s));
2e17b763 61 else
56d397a3 62 tui_update_locator_fullname ("??");
c906108c
SS
63 }
64 }
2e17b763 65}
c906108c
SS
66
67
68
f80bda8e
AC
69/* Function to display source in the source window. This function
70 initializes the horizontal scroll to 0. */
c906108c 71void
be4da588 72tui_update_source_window (struct tui_source_window_base *win_info,
13274fc3 73 struct gdbarch *gdbarch,
08ef48c5
MS
74 struct symtab *s,
75 struct tui_line_or_address line_or_addr,
76 int noerror)
c906108c 77{
be4da588 78 win_info->horizontal_offset = 0;
13274fc3 79 tui_update_source_window_as_is (win_info, gdbarch, s, line_or_addr, noerror);
c906108c
SS
80
81 return;
f80bda8e 82}
c906108c
SS
83
84
f80bda8e
AC
85/* Function to display source in the source/asm window. This function
86 shows the source as specified by the horizontal offset. */
c906108c 87void
be4da588 88tui_update_source_window_as_is (struct tui_source_window_base *win_info,
13274fc3 89 struct gdbarch *gdbarch,
08ef48c5
MS
90 struct symtab *s,
91 struct tui_line_or_address line_or_addr,
92 int noerror)
c906108c 93{
22940a24 94 enum tui_status ret;
c906108c 95
cb2ce893 96 if (win_info->type == SRC_WIN)
5813316f
TT
97 ret = tui_set_source_content (win_info, s, line_or_addr.u.line_no,
98 noerror);
c906108c 99 else
9d391078 100 ret = tui_set_disassem_content (win_info, gdbarch, line_or_addr.u.addr);
c906108c
SS
101
102 if (ret == TUI_FAILURE)
103 {
caf0bc4e 104 tui_clear_source_content (win_info);
6d012f14 105 tui_clear_exec_info_content (win_info);
c906108c
SS
106 }
107 else
108 {
0807ab7b 109 tui_update_breakpoint_info (win_info, nullptr, false);
6d012f14
AC
110 tui_show_source_content (win_info);
111 tui_update_exec_info (win_info);
cb2ce893 112 if (win_info->type == SRC_WIN)
c906108c 113 {
51abb421
PA
114 symtab_and_line sal;
115
362c05fe 116 sal.line = line_or_addr.u.line_no +
53e7cdba 117 (win_info->content.size () - 2);
52575520 118 sal.symtab = s;
eb822aa6 119 sal.pspace = SYMTAB_PSPACE (s);
51abb421 120 set_current_source_symtab_and_line (sal);
ef5eab5a
MS
121 /* If the focus was in the asm win, put it in the src win if
122 we don't have a split layout. */
e5908723
MS
123 if (tui_win_with_focus () == TUI_DISASM_WIN
124 && tui_current_layout () != SRC_DISASSEM_COMMAND)
5813316f 125 tui_set_win_focus_to (win_info);
c906108c
SS
126 }
127 }
128
129
130 return;
f80bda8e 131}
c906108c
SS
132
133
f80bda8e
AC
134/* Function to ensure that the source and/or disassemly windows
135 reflect the input address. */
c906108c 136void
13274fc3 137tui_update_source_windows_with_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
c906108c 138{
c774cec6 139 if (addr != 0)
c906108c
SS
140 {
141 struct symtab_and_line sal;
362c05fe 142 struct tui_line_or_address l;
a4b99e53 143
dd1abb8c 144 switch (tui_current_layout ())
c906108c
SS
145 {
146 case DISASSEM_COMMAND:
147 case DISASSEM_DATA_COMMAND:
13274fc3 148 tui_show_disassem (gdbarch, addr);
c906108c
SS
149 break;
150 case SRC_DISASSEM_COMMAND:
13274fc3 151 tui_show_disassem_and_update_source (gdbarch, addr);
c906108c
SS
152 break;
153 default:
c774cec6 154 sal = find_pc_line (addr, 0);
362c05fe
AS
155 l.loa = LOA_LINE;
156 l.u.line_no = sal.line;
5813316f 157 tui_show_symtab_source (TUI_SRC_WIN, gdbarch, sal.symtab, l, FALSE);
c906108c
SS
158 break;
159 }
160 }
161 else
162 {
ad54d15b 163 for (struct tui_source_window_base *win_info : tui_source_windows ())
c906108c 164 {
caf0bc4e 165 tui_clear_source_content (win_info);
6d012f14 166 tui_clear_exec_info_content (win_info);
c906108c
SS
167 }
168 }
6ba8e26f 169}
c906108c 170
f80bda8e
AC
171/* Function to ensure that the source and/or disassemly windows
172 reflect the input address. */
c906108c 173void
f80bda8e 174tui_update_source_windows_with_line (struct symtab *s, int line)
c906108c 175{
13274fc3 176 struct gdbarch *gdbarch;
84b1e7c7 177 CORE_ADDR pc;
362c05fe 178 struct tui_line_or_address l;
13274fc3
UW
179
180 if (!s)
181 return;
182
eb822aa6 183 gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s));
13274fc3 184
dd1abb8c 185 switch (tui_current_layout ())
c906108c
SS
186 {
187 case DISASSEM_COMMAND:
188 case DISASSEM_DATA_COMMAND:
84b1e7c7 189 find_line_pc (s, line, &pc);
13274fc3 190 tui_update_source_windows_with_addr (gdbarch, pc);
c906108c
SS
191 break;
192 default:
362c05fe
AS
193 l.loa = LOA_LINE;
194 l.u.line_no = line;
5813316f 195 tui_show_symtab_source (TUI_SRC_WIN, gdbarch, s, l, FALSE);
dd1abb8c 196 if (tui_current_layout () == SRC_DISASSEM_COMMAND)
84b1e7c7
SC
197 {
198 find_line_pc (s, line, &pc);
13274fc3 199 tui_show_disassem (gdbarch, pc);
84b1e7c7 200 }
c906108c
SS
201 break;
202 }
203
204 return;
f80bda8e 205}
c906108c 206
c906108c 207void
caf0bc4e 208tui_clear_source_content (struct tui_source_window_base *win_info)
c906108c 209{
6d012f14 210 if (win_info != NULL)
c906108c 211 {
d02c80cd 212 int i;
c906108c 213
a38da35d 214 win_info->content_in_use = false;
caf0bc4e 215 tui_erase_source_content (win_info);
53e7cdba 216 for (i = 0; i < win_info->content.size (); i++)
c906108c 217 {
53e7cdba 218 struct tui_source_element *element = &win_info->content[i];
1c5313c5 219
0598af48 220 element->break_mode = 0;
53e7cdba 221 element->is_exec_point = false;
c906108c
SS
222 }
223 }
6ba8e26f 224}
c906108c
SS
225
226
c906108c 227void
caf0bc4e 228tui_erase_source_content (struct tui_source_window_base *win_info)
c906108c 229{
6ba8e26f 230 int x_pos;
cb2ce893 231 int half_width = (win_info->width - 2) / 2;
c906108c 232
cb2ce893 233 if (win_info->handle != NULL)
c906108c 234 {
cb2ce893 235 werase (win_info->handle);
6d012f14 236 tui_check_and_display_highlight_if_needed (win_info);
caf0bc4e
TT
237
238 const char *no_src_str;
239
240 if (win_info->type == SRC_WIN)
241 no_src_str = NO_SRC_STRING;
242 else
243 no_src_str = NO_DISASSEM_STRING;
244 if (strlen (no_src_str) >= half_width)
245 x_pos = 1;
246 else
247 x_pos = half_width - strlen (no_src_str);
248 mvwaddstr (win_info->handle,
249 (win_info->height / 2),
250 x_pos,
251 (char *) no_src_str);
252
253 /* elz: Added this function call to set the real contents of
254 the window to what is on the screen, so that later calls
255 to refresh, do display the correct stuff, and not the old
256 image. */
257
258 tui_set_source_content_nil (win_info, no_src_str);
259
5b81daba 260 win_info->refresh_window ();
c906108c 261 }
6ba8e26f 262}
c906108c
SS
263
264
bc712bbf
SC
265/* Redraw the complete line of a source or disassembly window. */
266static void
53e7cdba 267tui_show_source_line (struct tui_source_window_base *win_info, int lineno)
bc712bbf 268{
53e7cdba 269 struct tui_source_element *line;
798e1c30 270 int x;
bc712bbf 271
53e7cdba
TT
272 line = &win_info->content[lineno - 1];
273 if (line->is_exec_point)
cb2ce893 274 tui_set_reverse_mode (win_info->handle, true);
bc712bbf 275
cb2ce893 276 wmove (win_info->handle, lineno, 1);
53e7cdba 277 tui_puts (line->line,
cb2ce893 278 win_info->handle);
53e7cdba 279 if (line->is_exec_point)
cb2ce893 280 tui_set_reverse_mode (win_info->handle, false);
bc712bbf
SC
281
282 /* Clear to end of line but stop before the border. */
cb2ce893
TT
283 x = getcurx (win_info->handle);
284 while (x + 1 < win_info->width)
798e1c30 285 {
cb2ce893
TT
286 waddch (win_info->handle, ' ');
287 x = getcurx (win_info->handle);
798e1c30 288 }
bc712bbf
SC
289}
290
c906108c 291void
7908abbf 292tui_show_source_content (struct tui_source_window_base *win_info)
c906108c 293{
53e7cdba 294 if (!win_info->content.empty ())
c906108c 295 {
bc712bbf
SC
296 int lineno;
297
53e7cdba 298 for (lineno = 1; lineno <= win_info->content.size (); lineno++)
6d012f14 299 tui_show_source_line (win_info, lineno);
c906108c 300 }
bc712bbf 301 else
caf0bc4e 302 tui_erase_source_content (win_info);
bc712bbf 303
6d012f14 304 tui_check_and_display_highlight_if_needed (win_info);
5b81daba 305 win_info->refresh_window ();
a38da35d 306 win_info->content_in_use = true;
bc712bbf 307}
c906108c 308
ad54d15b 309/* See tui-data.h. */
6f11e682
TT
310
311void
ad54d15b 312tui_source_window_base::refill ()
6f11e682
TT
313{
314 symtab *s = nullptr;
315
cb2ce893 316 if (type == SRC_WIN)
6f11e682
TT
317 {
318 symtab_and_line cursal = get_current_source_symtab_and_line ();
319 s = (cursal.symtab == NULL
320 ? find_pc_line_symtab (get_frame_pc (get_selected_frame (NULL)))
321 : cursal.symtab);
322 }
323
ad54d15b 324 tui_update_source_window_as_is (this, gdbarch, s,
53e7cdba 325 content[0].line_or_addr,
6f11e682
TT
326 FALSE);
327}
c906108c 328
f80bda8e 329/* Scroll the source forward or backward horizontally. */
6f11e682 330
c906108c 331void
c3bd716f 332tui_source_window_base::do_scroll_horizontal (int num_to_scroll)
c906108c 333{
53e7cdba 334 if (!content.empty ())
c906108c 335 {
c3bd716f
TT
336 int offset = horizontal_offset + num_to_scroll;
337 if (offset < 0)
338 offset = 0;
e6e41501 339 horizontal_offset = offset;
ad54d15b 340 refill ();
c906108c 341 }
6ba8e26f 342}
c906108c
SS
343
344
0598af48 345/* Set or clear the is_exec_point flag in the line whose line is
1cc6d956
MS
346 line_no. */
347
c906108c 348void
ad54d15b 349tui_source_window_base::set_is_exec_point_at (struct tui_line_or_address l)
c906108c 350{
02c28df0 351 bool changed = false;
c906108c 352 int i;
c906108c
SS
353
354 i = 0;
53e7cdba 355 while (i < content.size ())
c906108c 356 {
02c28df0 357 bool new_state;
362c05fe 358 struct tui_line_or_address content_loa =
53e7cdba 359 content[i].line_or_addr;
362c05fe
AS
360
361 gdb_assert (l.loa == LOA_ADDRESS || l.loa == LOA_LINE);
362 gdb_assert (content_loa.loa == LOA_LINE
363 || content_loa.loa == LOA_ADDRESS);
364 if (content_loa.loa == l.loa
365 && ((l.loa == LOA_LINE && content_loa.u.line_no == l.u.line_no)
f7952c57 366 || (l.loa == LOA_ADDRESS && content_loa.u.addr == l.u.addr)))
02c28df0 367 new_state = true;
c906108c 368 else
02c28df0 369 new_state = false;
53e7cdba 370 if (new_state != content[i].is_exec_point)
00b90ae2 371 {
02c28df0 372 changed = true;
53e7cdba 373 content[i].is_exec_point = new_state;
ad54d15b 374 tui_show_source_line (this, i + 1);
00b90ae2 375 }
c906108c
SS
376 i++;
377 }
00b90ae2 378 if (changed)
ad54d15b 379 refill ();
00b90ae2 380}
c906108c 381
0807ab7b
TT
382/* See tui-winsource.h. */
383
c906108c 384void
0807ab7b 385tui_update_all_breakpoint_info (struct breakpoint *being_deleted)
c906108c 386{
ad54d15b 387 for (tui_source_window_base *win : tui_source_windows ())
c906108c 388 {
0807ab7b 389 if (tui_update_breakpoint_info (win, being_deleted, false))
00b2bad4 390 {
f80bda8e 391 tui_update_exec_info (win);
00b2bad4 392 }
c906108c 393 }
00b2bad4 394}
c906108c
SS
395
396
0807ab7b 397/* Scan the source window and the breakpoints to update the break_mode
1cc6d956
MS
398 information for each line.
399
0807ab7b 400 Returns true if something changed and the execution window must be
1cc6d956
MS
401 refreshed. */
402
0807ab7b
TT
403bool
404tui_update_breakpoint_info (struct tui_source_window_base *win,
405 struct breakpoint *being_deleted,
406 bool current_only)
c906108c
SS
407{
408 int i;
0807ab7b 409 bool need_refresh = false;
c906108c 410
53e7cdba 411 for (i = 0; i < win->content.size (); i++)
00b2bad4
SC
412 {
413 struct breakpoint *bp;
414 extern struct breakpoint *breakpoint_chain;
5b6fe301 415 struct tui_source_element *line;
00b2bad4 416
53e7cdba 417 line = &win->content[i];
6d012f14 418 if (current_only && !line->is_exec_point)
00b2bad4
SC
419 continue;
420
421 /* Scan each breakpoint to see if the current line has something to
422 do with it. Identify enable/disabled breakpoints as well as
423 those that we already hit. */
0598af48 424 tui_bp_flags mode = 0;
00b2bad4 425 for (bp = breakpoint_chain;
cafb3438 426 bp != NULL;
00b2bad4
SC
427 bp = bp->next)
428 {
f8eba3c6
TT
429 struct bp_location *loc;
430
362c05fe
AS
431 gdb_assert (line->line_or_addr.loa == LOA_LINE
432 || line->line_or_addr.loa == LOA_ADDRESS);
f8eba3c6 433
0807ab7b
TT
434 if (bp == being_deleted)
435 continue;
436
f8eba3c6
TT
437 for (loc = bp->loc; loc != NULL; loc = loc->next)
438 {
c2cd8994 439 if (win->location_matches_p (loc, i))
f8eba3c6
TT
440 {
441 if (bp->enable_state == bp_disabled)
442 mode |= TUI_BP_DISABLED;
443 else
444 mode |= TUI_BP_ENABLED;
445 if (bp->hit_count)
446 mode |= TUI_BP_HIT;
447 if (bp->loc->cond)
448 mode |= TUI_BP_CONDITIONAL;
449 if (bp->type == bp_hardware_breakpoint)
450 mode |= TUI_BP_HARDWARE;
451 }
452 }
00b2bad4 453 }
0598af48 454 if (line->break_mode != mode)
00b2bad4 455 {
0598af48
TT
456 line->break_mode = mode;
457 need_refresh = true;
00b2bad4
SC
458 }
459 }
460 return need_refresh;
461}
c906108c 462
489e9d8b
TT
463/* See tui-data.h. */
464
465tui_exec_info_content *
466tui_exec_info_window::maybe_allocate_content (int n_elements)
467{
468 if (m_content == nullptr)
469 m_content = XNEWVEC (tui_exec_info_content, n_elements);
470 return m_content;
471}
472
c906108c 473
6ba8e26f
AC
474/* Function to initialize the content of the execution info window,
475 based upon the input window which is either the source or
476 disassembly window. */
73fbdc65 477void
21c32dca 478tui_set_exec_info_content (struct tui_source_window_base *win_info)
c906108c 479{
21c32dca 480 if (win_info->execution_info != NULL)
c906108c 481 {
489e9d8b
TT
482 tui_exec_info_content *content
483 = win_info->execution_info->maybe_allocate_content (win_info->height);
c906108c 484
0807ab7b 485 tui_update_breakpoint_info (win_info, nullptr, true);
53e7cdba 486 for (int i = 0; i < win_info->content.size (); i++)
33325343 487 {
489e9d8b 488 tui_exec_info_content &element = content[i];
53e7cdba 489 struct tui_source_element *src_element;
0598af48 490 tui_bp_flags mode;
33325343 491
53e7cdba 492 src_element = &win_info->content[i];
33325343 493
489e9d8b
TT
494 memset (element, ' ', sizeof (tui_exec_info_content));
495 element[TUI_EXECINFO_SIZE - 1] = 0;
33325343
TT
496
497 /* Now update the exec info content based upon the state
498 of each line as indicated by the source content. */
0598af48 499 mode = src_element->break_mode;
33325343 500 if (mode & TUI_BP_HIT)
489e9d8b 501 element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'H' : 'B';
33325343 502 else if (mode & (TUI_BP_ENABLED | TUI_BP_DISABLED))
489e9d8b 503 element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'h' : 'b';
33325343
TT
504
505 if (mode & TUI_BP_ENABLED)
489e9d8b 506 element[TUI_BP_BREAK_POS] = '+';
33325343 507 else if (mode & TUI_BP_DISABLED)
489e9d8b 508 element[TUI_BP_BREAK_POS] = '-';
33325343 509
53e7cdba 510 if (src_element->is_exec_point)
489e9d8b 511 element[TUI_EXEC_POS] = '>';
c906108c 512 }
c906108c 513 }
00b2bad4 514}
c906108c
SS
515
516
c906108c 517void
21c32dca 518tui_show_exec_info_content (struct tui_source_window_base *win_info)
c906108c 519{
489e9d8b
TT
520 struct tui_exec_info_window *exec_info = win_info->execution_info;
521 const tui_exec_info_content *content = exec_info->get_content ();
6ba8e26f
AC
522
523 werase (exec_info->handle);
5b81daba 524 exec_info->refresh_window ();
53e7cdba 525 for (int cur_line = 1; cur_line <= win_info->content.size (); cur_line++)
6ba8e26f
AC
526 mvwaddstr (exec_info->handle,
527 cur_line,
c906108c 528 0,
489e9d8b 529 content[cur_line - 1]);
5b81daba 530 exec_info->refresh_window ();
f80bda8e 531}
c906108c
SS
532
533
c906108c 534void
21c32dca 535tui_erase_exec_info_content (struct tui_source_window_base *win_info)
c906108c 536{
21c32dca 537 struct tui_gen_win_info *exec_info = win_info->execution_info;
c906108c 538
6ba8e26f 539 werase (exec_info->handle);
5b81daba 540 exec_info->refresh_window ();
f80bda8e 541}
c906108c 542
c906108c 543void
21c32dca 544tui_clear_exec_info_content (struct tui_source_window_base *win_info)
c906108c 545{
6d012f14 546 tui_erase_exec_info_content (win_info);
f80bda8e 547}
c906108c 548
f80bda8e 549/* Function to update the execution info window. */
c906108c 550void
21c32dca 551tui_update_exec_info (struct tui_source_window_base *win_info)
c906108c 552{
6ba8e26f
AC
553 tui_set_exec_info_content (win_info);
554 tui_show_exec_info_content (win_info);
555}
c906108c 556
29d2c474 557void
53e7cdba 558tui_alloc_source_buffer (struct tui_source_window_base *win_info)
c906108c 559{
d02c80cd 560 int i, line_width, max_lines;
c906108c 561
7bc2c8b8
AA
562 /* The window width/height includes the highlight box. Determine actual
563 content dimensions, including string null-terminators. */
cb2ce893
TT
564 max_lines = win_info->height - 2;
565 line_width = win_info->width - 2 + 1;
7bc2c8b8 566
62f29fda 567 /* Allocate the buffer for the source lines. */
53e7cdba
TT
568 win_info->content.resize (max_lines);
569 for (i = 0; i < max_lines; i++)
c906108c 570 {
53e7cdba
TT
571 if (win_info->content[i].line == nullptr)
572 win_info->content[i].line = (char *) xmalloc (line_width);
c906108c 573 }
6ba8e26f 574}
c906108c
SS
575
576
766062f6 577/* Answer whether a particular line number or address is displayed
f80bda8e 578 in the current source window. */
c906108c 579int
08ef48c5 580tui_line_is_displayed (int line,
53e7cdba 581 struct tui_source_window_base *win_info,
6ba8e26f 582 int check_threshold)
c906108c 583{
6ba8e26f 584 int is_displayed = FALSE;
c906108c
SS
585 int i, threshold;
586
6ba8e26f 587 if (check_threshold)
c906108c
SS
588 threshold = SCROLL_THRESHOLD;
589 else
590 threshold = 0;
591 i = 0;
53e7cdba 592 while (i < win_info->content.size () - threshold
e5908723 593 && !is_displayed)
c906108c 594 {
63ed8182 595 is_displayed
53e7cdba
TT
596 = win_info->content[i].line_or_addr.loa == LOA_LINE
597 && win_info->content[i].line_or_addr.u.line_no == line;
c906108c
SS
598 i++;
599 }
600
6ba8e26f 601 return is_displayed;
f80bda8e 602}
c906108c
SS
603
604
766062f6 605/* Answer whether a particular line number or address is displayed
f80bda8e 606 in the current source window. */
a4b99e53 607int
08ef48c5 608tui_addr_is_displayed (CORE_ADDR addr,
53e7cdba 609 struct tui_source_window_base *win_info,
08ef48c5 610 int check_threshold)
a4b99e53 611{
6ba8e26f 612 int is_displayed = FALSE;
a4b99e53
SC
613 int i, threshold;
614
6ba8e26f 615 if (check_threshold)
a4b99e53
SC
616 threshold = SCROLL_THRESHOLD;
617 else
618 threshold = 0;
619 i = 0;
53e7cdba 620 while (i < win_info->content.size () - threshold
e5908723 621 && !is_displayed)
a4b99e53 622 {
63ed8182 623 is_displayed
53e7cdba
TT
624 = win_info->content[i].line_or_addr.loa == LOA_ADDRESS
625 && win_info->content[i].line_or_addr.u.addr == addr;
a4b99e53
SC
626 i++;
627 }
628
6ba8e26f 629 return is_displayed;
a4b99e53
SC
630}
631
632
c906108c
SS
633/*****************************************
634** STATIC LOCAL FUNCTIONS **
635******************************************/
This page took 2.317355 seconds and 4 git commands to generate.