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