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