Use bool for is_exec_point
[deliverable/binutils-gdb.git] / gdb / tui / tui-data.h
CommitLineData
f377b406 1/* TUI data manipulation routines.
55fb0713 2
42a4f53d 3 Copyright (C) 1998-2019 Free Software Foundation, Inc.
55fb0713 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/>. */
f377b406 21
1a5c2598
TT
22#ifndef TUI_TUI_DATA_H
23#define TUI_TUI_DATA_H
c906108c 24
6a83354a
AC
25#include "tui/tui.h" /* For enum tui_win_type. */
26#include "gdb_curses.h" /* For WINDOW. */
27
28/* This is a point definition. */
29struct tui_point
30{
31 int x, y;
32};
2a5127c4 33
63ed8182
PP
34struct tui_win_element;
35
36/* This describes the content of the window. */
37typedef struct tui_win_element **tui_win_content;
38
1cc6d956 39/* Generic window information. */
2a8854a7
AC
40struct tui_gen_win_info
41{
ab313b35
TT
42 explicit tui_gen_win_info (enum tui_win_type t)
43 : type (t)
44 {
45 }
46
f936bca2 47 virtual ~tui_gen_win_info ();
ab313b35 48
5b81daba
TT
49 /* Call to refresh this window. */
50 virtual void refresh_window ();
51
48a3bd16
TT
52 /* Make this window visible or invisible. */
53 virtual void make_visible (bool visible);
54
152f3f4b
TT
55 /* Return the name of this type of window. */
56 virtual const char *name () const
57 {
58 return "";
59 }
60
d6ba6a11
TT
61 /* Reset this window. WIN_TYPE must match the existing type of this
62 window (it is only passed for self-test purposes). The other
63 parameters are used to set the window's size and position. */
64 void reset (enum tui_win_type win_type,
65 int height, int width,
66 int origin_x, int origin_y);
67
ab313b35
TT
68 /* Window handle. */
69 WINDOW *handle = nullptr;
70 /* Type of window. */
71 enum tui_win_type type;
72 /* Window width. */
73 int width = 0;
74 /* Window height. */
75 int height = 0;
76 /* Origin of window. */
77 struct tui_point origin = {0, 0};
78 /* Content of window. */
79 tui_win_content content = nullptr;
80 /* Size of content (# of elements). */
81 int content_size = 0;
82 /* Can it be used, or is it already used? */
83 int content_in_use = FALSE;
84 /* Viewport height. */
85 int viewport_height = 0;
86 /* Index of last visible line. */
87 int last_visible_line = 0;
88 /* Whether the window is visible or not. */
89 bool is_visible = false;
90 /* Window title to display. */
91 char *title = nullptr;
2a8854a7 92};
2a5127c4 93
17374de4
TT
94/* Whether or not a window should be drawn with a box. */
95enum tui_box
96{
97 DONT_BOX_WINDOW = 0,
98 BOX_WINDOW
99};
100
1cc6d956 101/* Constant definitions. */
08ef48c5
MS
102#define DEFAULT_TAB_LEN 8
103#define NO_SRC_STRING "[ No Source Available ]"
104#define NO_DISASSEM_STRING "[ No Assembly Available ]"
105#define NO_REGS_STRING "[ Register Values Unavailable ]"
106#define NO_DATA_STRING "[ No Data Values Displayed ]"
107#define MAX_CONTENT_COUNT 100
6dce28e4
AB
108#define SRC_NAME "src"
109#define CMD_NAME "cmd"
110#define DATA_NAME "regs"
111#define DISASSEM_NAME "asm"
08ef48c5
MS
112#define TUI_NULL_STR ""
113#define DEFAULT_HISTORY_COUNT 25
08ef48c5
MS
114#define HILITE TRUE
115#define NO_HILITE FALSE
116#define WITH_LOCATOR TRUE
117#define NO_LOCATOR FALSE
118#define EMPTY_SOURCE_PROMPT TRUE
119#define NO_EMPTY_SOURCE_PROMPT FALSE
120#define UNDEFINED_ITEM -1
121#define MIN_WIN_HEIGHT 3
122#define MIN_CMD_WIN_HEIGHT 3
c906108c 123
50265402 124/* Strings to display in the TUI status line. */
08ef48c5 125#define PROC_PREFIX "In: "
9f2850ba 126#define LINE_PREFIX "L"
08ef48c5
MS
127#define PC_PREFIX "PC: "
128#define SINGLE_KEY "(SingleKey)"
50265402 129
1cc6d956
MS
130/* Minimum/Maximum length of some fields displayed in the TUI status
131 line. */
132#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line
133 numbers. */
50265402
SC
134#define MIN_PROC_WIDTH 12
135#define MAX_TARGET_WIDTH 10
9f2850ba 136#define MAX_PID_WIDTH 19
c906108c 137
1cc6d956 138/* The kinds of layouts available. */
2a8854a7
AC
139enum tui_layout_type
140{
141 SRC_COMMAND,
142 DISASSEM_COMMAND,
143 SRC_DISASSEM_COMMAND,
144 SRC_DATA_COMMAND,
145 DISASSEM_DATA_COMMAND,
146 UNDEFINED_LAYOUT
147};
c906108c 148
52059ffd
TT
149enum tui_line_or_address_kind
150{
151 LOA_LINE,
152 LOA_ADDRESS
153};
154
1cc6d956 155/* Structure describing source line or line address. */
362c05fe 156struct tui_line_or_address
2a8854a7 157{
52059ffd 158 enum tui_line_or_address_kind loa;
362c05fe
AS
159 union
160 {
161 int line_no;
162 CORE_ADDR addr;
163 } u;
2a8854a7 164};
c906108c 165
1cc6d956 166/* Current Layout definition. */
2a8854a7
AC
167struct tui_layout_def
168{
6d012f14 169 enum tui_win_type display_mode;
2a8854a7 170};
c906108c 171
1cc6d956 172/* Elements in the Source/Disassembly Window. */
2a8854a7
AC
173struct tui_source_element
174{
175 char *line;
362c05fe 176 struct tui_line_or_address line_or_addr;
02c28df0 177 bool is_exec_point;
6d012f14 178 int has_break;
2a8854a7 179};
c906108c
SS
180
181
2d42f9a8
JB
182#ifdef PATH_MAX
183# define MAX_LOCATOR_ELEMENT_LEN PATH_MAX
184#else
185# define MAX_LOCATOR_ELEMENT_LEN 1024
186#endif
c906108c 187
00b2bad4
SC
188/* Flags to tell what kind of breakpoint is at current line. */
189#define TUI_BP_ENABLED 0x01
190#define TUI_BP_DISABLED 0x02
191#define TUI_BP_HIT 0x04
192#define TUI_BP_CONDITIONAL 0x08
193#define TUI_BP_HARDWARE 0x10
194
195/* Position of breakpoint markers in the exec info string. */
196#define TUI_BP_HIT_POS 0
197#define TUI_BP_BREAK_POS 1
198#define TUI_EXEC_POS 2
199#define TUI_EXECINFO_SIZE 4
200
2a8854a7 201typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 202
1cc6d956 203/* An content element in a window. */
2a8854a7
AC
204union tui_which_element
205{
1cc6d956 206 struct tui_source_element source; /* The source elements. */
2a8854a7
AC
207};
208
209struct tui_win_element
210{
6d012f14 211 union tui_which_element which_element;
2a8854a7 212};
c906108c 213
489e9d8b
TT
214/* Execution info window class. */
215
216struct tui_exec_info_window : public tui_gen_win_info
217{
218 tui_exec_info_window ()
219 : tui_gen_win_info (EXEC_INFO_WIN)
220 {
221 }
222
223 ~tui_exec_info_window () override
224 {
225 xfree (m_content);
226 }
227
228 /* Get or allocate contents. */
229 tui_exec_info_content *maybe_allocate_content (int n_elements);
230
231 /* Return the contents. */
232 const tui_exec_info_content *get_content () const
233 {
234 return m_content;
235 }
236
237private:
238
239 tui_exec_info_content *m_content = nullptr;
240};
241
3add462f
TT
242/* Locator window class. */
243
244struct tui_locator_window : public tui_gen_win_info
245{
246 tui_locator_window ()
247 : tui_gen_win_info (LOCATOR_WIN)
248 {
249 full_name[0] = 0;
250 proc_name[0] = 0;
251 }
252
253 char full_name[MAX_LOCATOR_ELEMENT_LEN];
254 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
255 int line_no = 0;
256 CORE_ADDR addr = 0;
257 /* Architecture associated with code at this location. */
258 struct gdbarch *gdbarch = nullptr;
259};
260
41bcff7f
TT
261/* A data item window. */
262
263struct tui_data_item_window : public tui_gen_win_info
264{
265 tui_data_item_window ()
266 : tui_gen_win_info (DATA_ITEM_WIN)
267 {
268 }
269
270 ~tui_data_item_window () override;
271
272 const char *name = nullptr;
273 /* The register number, or data display number. */
274 int item_no = UNDEFINED_ITEM;
41bcff7f
TT
275 void *value = nullptr;
276 bool highlight = false;
277 char *content = nullptr;
278};
279
1cc6d956 280/* This defines information about each logical window. */
cb2ce893 281struct tui_win_info : public tui_gen_win_info
2a8854a7 282{
33b906ab 283protected:
e7e11af4 284
33b906ab 285 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
286 DISABLE_COPY_AND_ASSIGN (tui_win_info);
287
13446e05
TT
288 /* Scroll the contents vertically. This is only called via
289 forward_scroll and backward_scroll. */
c3bd716f 290 virtual void do_scroll_vertical (int num_to_scroll) = 0;
13446e05
TT
291
292 /* Scroll the contents horizontally. This is only called via
293 left_scroll and right_scroll. */
c3bd716f 294 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
13446e05 295
5fcee43a
TT
296 /* Called after make_visible_with_new_height sets the new height.
297 Should update the window. */
298 virtual void do_make_visible_with_new_height () = 0;
299
33b906ab
TT
300public:
301
f936bca2
TT
302 ~tui_win_info () override
303 {
304 }
33b906ab 305
8761a91b
TT
306 /* Clear the pertinent detail in the window. */
307 virtual void clear_detail () = 0;
308
44f0e208
TT
309 /* Return true if this window has the locator. */
310 virtual bool has_locator () const
311 {
312 return false;
313 }
314
2042b506
TT
315 /* Refresh this window and any associated windows. */
316 virtual void refresh ();
317
1825f487
TT
318 /* Called after all the TUI windows are refreshed, to let this
319 window have a chance to update itself further. */
320 virtual void refresh_all ()
321 {
322 }
323
3f02ce1e
TT
324 /* Called after a TUI window is given a new height; this updates any
325 related auxiliary windows. */
326 virtual void set_new_height (int height)
327 {
328 }
329
8903bd8a
TT
330 /* Compute the maximum height of this window. */
331 virtual int max_height () const;
332
d83f1fe6
TT
333 /* Called after the tab width has been changed. */
334 virtual void update_tab_width ()
335 {
336 }
337
5fcee43a
TT
338 /* Make the window visible after the height has been changed. */
339 void make_visible_with_new_height ();
340
214a5cbe
TT
341 /* Set whether this window is highglighted. */
342 void set_highlight (bool highlight)
343 {
344 is_highlighted = highlight;
345 }
346
13446e05
TT
347 /* Methods to scroll the contents of this window. Note that they
348 are named with "_scroll" coming at the end because the more
349 obvious "scroll_forward" is defined as a macro in term.h. */
350 void forward_scroll (int num_to_scroll);
351 void backward_scroll (int num_to_scroll);
352 void left_scroll (int num_to_scroll);
353 void right_scroll (int num_to_scroll);
354
33b906ab 355 /* Can this window ever be highlighted? */
d6ba6a11 356 bool can_highlight = true;
33b906ab
TT
357
358 /* Is this window highlighted? */
214a5cbe 359 bool is_highlighted = false;
33b906ab
TT
360};
361
5cf82909
TT
362/* The base class for all source-like windows, namely the source and
363 disassembly windows. */
364
365struct tui_source_window_base : public tui_win_info
33b906ab 366{
5cf82909
TT
367protected:
368 explicit tui_source_window_base (enum tui_win_type type);
369 ~tui_source_window_base () override;
370 DISABLE_COPY_AND_ASSIGN (tui_source_window_base);
371
c3bd716f 372 void do_scroll_horizontal (int num_to_scroll) override;
5fcee43a 373 void do_make_visible_with_new_height () override;
13446e05 374
5cf82909 375public:
8761a91b
TT
376
377 void clear_detail () override;
44f0e208
TT
378
379 /* Return true if this window has the locator. */
e6e41501
TT
380 bool has_locator () const override
381 {
382 return m_has_locator;
383 }
384
56122977 385 void make_visible (bool visible) override;
2042b506 386 void refresh () override;
1825f487 387 void refresh_all () override;
cda37efb 388
ad54d15b
TT
389 /* Refill the source window's source cache and update it. If this
390 is a disassembly window, then just update it. */
391 void refill ();
392
393 /* Set the location of the execution point. */
394 void set_is_exec_point_at (struct tui_line_or_address l);
395
3f02ce1e
TT
396 void set_new_height (int height) override;
397
d83f1fe6
TT
398 void update_tab_width () override;
399
e6e41501
TT
400 /* Does the locator belong to this window? */
401 bool m_has_locator = false;
402 /* Execution information window. */
489e9d8b 403 struct tui_exec_info_window *execution_info = nullptr;
e6e41501
TT
404 /* Used for horizontal scroll. */
405 int horizontal_offset = 0;
406 struct tui_line_or_address start_line_or_addr;
407
408 /* It is the resolved form as returned by symtab_to_fullname. */
409 char *fullname = nullptr;
410
411 /* Architecture associated with code at this location. */
412 struct gdbarch *gdbarch = nullptr;
33b906ab
TT
413};
414
5cf82909
TT
415/* A TUI source window. */
416
417struct tui_source_window : public tui_source_window_base
418{
419 tui_source_window ()
420 : tui_source_window_base (SRC_WIN)
421 {
422 }
423
424 DISABLE_COPY_AND_ASSIGN (tui_source_window);
13446e05 425
152f3f4b
TT
426 const char *name () const override
427 {
428 return SRC_NAME;
429 }
430
13446e05
TT
431protected:
432
c3bd716f 433 void do_scroll_vertical (int num_to_scroll) override;
5cf82909
TT
434};
435
436/* A TUI disassembly window. */
437
438struct tui_disasm_window : public tui_source_window_base
439{
440 tui_disasm_window ()
441 : tui_source_window_base (DISASSEM_WIN)
442 {
443 }
444
445 DISABLE_COPY_AND_ASSIGN (tui_disasm_window);
13446e05 446
152f3f4b
TT
447 const char *name () const override
448 {
449 return DISASSEM_NAME;
450 }
451
13446e05
TT
452protected:
453
c3bd716f 454 void do_scroll_vertical (int num_to_scroll) override;
5cf82909
TT
455};
456
33b906ab
TT
457struct tui_data_window : public tui_win_info
458{
63901aec
TT
459 tui_data_window ()
460 : tui_win_info (DATA_WIN)
461 {
462 }
463
ee1d42d6 464 ~tui_data_window () override;
33b906ab 465 DISABLE_COPY_AND_ASSIGN (tui_data_window);
8761a91b
TT
466
467 void clear_detail () override;
1825f487 468 void refresh_all () override;
13446e05 469
3f02ce1e
TT
470 void set_new_height (int height) override;
471
5b81daba
TT
472 void refresh_window () override;
473
152f3f4b
TT
474 const char *name () const override
475 {
476 return DATA_NAME;
477 }
478
21e1c91e
TT
479 /* Windows that are used to display registers. */
480 std::vector<std::unique_ptr<tui_data_item_window>> regs_content;
63901aec
TT
481 int regs_column_count = 0;
482 /* Should regs be displayed at all? */
483 bool display_regs = false;
484 struct reggroup *current_group = nullptr;
238eb706 485
13446e05
TT
486protected:
487
c3bd716f
TT
488 void do_scroll_vertical (int num_to_scroll) override;
489 void do_scroll_horizontal (int num_to_scroll) override
13446e05
TT
490 {
491 }
5fcee43a 492 void do_make_visible_with_new_height () override;
eaf9738b
TT
493
494 /* Return the index of the first element displayed. If none are
495 displayed, then return -1. */
496 int first_data_item_displayed ();
33b906ab
TT
497};
498
499struct tui_cmd_window : public tui_win_info
500{
63901aec
TT
501 tui_cmd_window ()
502 : tui_win_info (CMD_WIN)
503 {
d6ba6a11 504 can_highlight = false;
63901aec
TT
505 }
506
33b906ab 507 DISABLE_COPY_AND_ASSIGN (tui_cmd_window);
8761a91b
TT
508
509 void clear_detail () override;
13446e05 510
56122977 511 void make_visible (bool visible) override
cda37efb
TT
512 {
513 }
514
8903bd8a
TT
515 int max_height () const override;
516
5b81daba
TT
517 void refresh_window () override
518 {
519 }
520
152f3f4b
TT
521 const char *name () const override
522 {
523 return CMD_NAME;
524 }
525
63901aec 526 int start_line = 0;
81491aa0 527
13446e05
TT
528protected:
529
c3bd716f 530 void do_scroll_vertical (int num_to_scroll) override
13446e05
TT
531 {
532 }
533
c3bd716f 534 void do_scroll_horizontal (int num_to_scroll) override
13446e05
TT
535 {
536 }
5fcee43a
TT
537
538 void do_make_visible_with_new_height () override;
2a8854a7 539};
c906108c 540
6658b1bf 541extern int tui_win_is_auxiliary (enum tui_win_type win_type);
c906108c
SS
542
543
1cc6d956 544/* Global Data. */
7fa29be9 545extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 546
e6e41501
TT
547#define TUI_SRC_WIN ((tui_source_window_base *) tui_win_list[SRC_WIN])
548#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 549#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 550#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 551
1cc6d956 552/* Data Manipulation Functions. */
dd1abb8c 553extern void tui_initialize_static_data (void);
2a8854a7 554extern tui_win_content tui_alloc_content (int, enum tui_win_type);
dd1abb8c 555extern void tui_free_win_content (struct tui_gen_win_info *);
dd1abb8c 556extern void tui_free_all_source_wins_content (void);
a121b7c1 557extern struct tui_win_info *tui_partial_win_by_name (const char *);
2a8854a7
AC
558extern enum tui_layout_type tui_current_layout (void);
559extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
560extern int tui_term_height (void);
561extern void tui_set_term_height_to (int);
562extern int tui_term_width (void);
563extern void tui_set_term_width_to (int);
3add462f 564extern struct tui_locator_window *tui_locator_win_info_ptr (void);
ad54d15b 565extern std::vector<tui_source_window_base *> &tui_source_windows ();
dd1abb8c
AC
566extern void tui_clear_source_windows (void);
567extern void tui_clear_source_windows_detail (void);
ad54d15b 568extern void tui_add_to_source_windows (struct tui_source_window_base *);
dd1abb8c
AC
569extern struct tui_win_info *tui_win_with_focus (void);
570extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 571extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
572extern int tui_win_resized (void);
573extern void tui_set_win_resized_to (int);
574
575extern struct tui_win_info *tui_next_win (struct tui_win_info *);
576extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
577
7806cea7
TT
578extern unsigned int tui_tab_width;
579
1a5c2598 580#endif /* TUI_TUI_DATA_H */
This page took 2.093212 seconds and 4 git commands to generate.