Introduce enum tui_box
[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
1cc6d956 149/* Basic data types that can be displayed in the data window. */
2a8854a7
AC
150enum tui_data_type
151{
152 TUI_REGISTER,
153 TUI_SCALAR,
154 TUI_COMPLEX,
155 TUI_STRUCT
156};
c906108c 157
52059ffd
TT
158enum tui_line_or_address_kind
159{
160 LOA_LINE,
161 LOA_ADDRESS
162};
163
1cc6d956 164/* Structure describing source line or line address. */
362c05fe 165struct tui_line_or_address
2a8854a7 166{
52059ffd 167 enum tui_line_or_address_kind loa;
362c05fe
AS
168 union
169 {
170 int line_no;
171 CORE_ADDR addr;
172 } u;
2a8854a7 173};
c906108c 174
1cc6d956 175/* Current Layout definition. */
2a8854a7
AC
176struct tui_layout_def
177{
6d012f14 178 enum tui_win_type display_mode;
2a8854a7 179 int split;
2a8854a7 180};
c906108c 181
1cc6d956 182/* Elements in the Source/Disassembly Window. */
2a8854a7
AC
183struct tui_source_element
184{
185 char *line;
362c05fe 186 struct tui_line_or_address line_or_addr;
6d012f14
AC
187 int is_exec_point;
188 int has_break;
2a8854a7 189};
c906108c
SS
190
191
1cc6d956 192/* Elements in the data display window content. */
2a8854a7
AC
193struct tui_data_element
194{
195 const char *name;
08ef48c5
MS
196 int item_no; /* The register number, or data display
197 number. */
2a8854a7 198 enum tui_data_type type;
22940a24 199 void *value;
2a8854a7 200 int highlight;
10f59415 201 char *content;
2a8854a7 202};
c906108c
SS
203
204
1cc6d956 205/* Elements in the command window content. */
2a8854a7
AC
206struct tui_command_element
207{
208 char *line;
209};
c906108c 210
2d42f9a8
JB
211#ifdef PATH_MAX
212# define MAX_LOCATOR_ELEMENT_LEN PATH_MAX
213#else
214# define MAX_LOCATOR_ELEMENT_LEN 1024
215#endif
c906108c 216
1cc6d956 217/* Elements in the locator window content. */
2a8854a7
AC
218struct tui_locator_element
219{
56d397a3
JK
220 /* Resolved absolute filename as returned by symtab_to_fullname. */
221 char full_name[MAX_LOCATOR_ELEMENT_LEN];
6d012f14
AC
222 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
223 int line_no;
2a8854a7 224 CORE_ADDR addr;
13274fc3
UW
225 /* Architecture associated with code at this location. */
226 struct gdbarch *gdbarch;
2a8854a7 227};
c906108c 228
00b2bad4
SC
229/* Flags to tell what kind of breakpoint is at current line. */
230#define TUI_BP_ENABLED 0x01
231#define TUI_BP_DISABLED 0x02
232#define TUI_BP_HIT 0x04
233#define TUI_BP_CONDITIONAL 0x08
234#define TUI_BP_HARDWARE 0x10
235
236/* Position of breakpoint markers in the exec info string. */
237#define TUI_BP_HIT_POS 0
238#define TUI_BP_BREAK_POS 1
239#define TUI_EXEC_POS 2
240#define TUI_EXECINFO_SIZE 4
241
2a8854a7 242typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 243
1cc6d956 244/* An content element in a window. */
2a8854a7
AC
245union tui_which_element
246{
1cc6d956 247 struct tui_source_element source; /* The source elements. */
dc2c33e4 248 struct tui_gen_win_info *data_window; /* Data display elements. */
1cc6d956
MS
249 struct tui_data_element data; /* Elements of data_window. */
250 struct tui_command_element command; /* Command elements. */
251 struct tui_locator_element locator; /* Locator elements. */
252 tui_exec_info_content simple_string; /* Simple char based elements. */
2a8854a7
AC
253};
254
255struct tui_win_element
256{
6d012f14 257 union tui_which_element which_element;
2a8854a7 258};
c906108c 259
1cc6d956 260/* This defines information about each logical window. */
cb2ce893 261struct tui_win_info : public tui_gen_win_info
2a8854a7 262{
33b906ab 263protected:
e7e11af4 264
33b906ab 265 explicit tui_win_info (enum tui_win_type type);
6792b55e
TT
266 DISABLE_COPY_AND_ASSIGN (tui_win_info);
267
13446e05
TT
268 /* Scroll the contents vertically. This is only called via
269 forward_scroll and backward_scroll. */
c3bd716f 270 virtual void do_scroll_vertical (int num_to_scroll) = 0;
13446e05
TT
271
272 /* Scroll the contents horizontally. This is only called via
273 left_scroll and right_scroll. */
c3bd716f 274 virtual void do_scroll_horizontal (int num_to_scroll) = 0;
13446e05 275
33b906ab
TT
276public:
277
f936bca2
TT
278 ~tui_win_info () override
279 {
280 }
33b906ab 281
8761a91b
TT
282 /* Clear the pertinent detail in the window. */
283 virtual void clear_detail () = 0;
284
44f0e208
TT
285 /* Return true if this window has the locator. */
286 virtual bool has_locator () const
287 {
288 return false;
289 }
290
2042b506
TT
291 /* Refresh this window and any associated windows. */
292 virtual void refresh ();
293
1825f487
TT
294 /* Called after all the TUI windows are refreshed, to let this
295 window have a chance to update itself further. */
296 virtual void refresh_all ()
297 {
298 }
299
3f02ce1e
TT
300 /* Called after a TUI window is given a new height; this updates any
301 related auxiliary windows. */
302 virtual void set_new_height (int height)
303 {
304 }
305
8903bd8a
TT
306 /* Compute the maximum height of this window. */
307 virtual int max_height () const;
308
214a5cbe
TT
309 /* Set whether this window is highglighted. */
310 void set_highlight (bool highlight)
311 {
312 is_highlighted = highlight;
313 }
314
13446e05
TT
315 /* Methods to scroll the contents of this window. Note that they
316 are named with "_scroll" coming at the end because the more
317 obvious "scroll_forward" is defined as a macro in term.h. */
318 void forward_scroll (int num_to_scroll);
319 void backward_scroll (int num_to_scroll);
320 void left_scroll (int num_to_scroll);
321 void right_scroll (int num_to_scroll);
322
33b906ab 323 /* Can this window ever be highlighted? */
d6ba6a11 324 bool can_highlight = true;
33b906ab
TT
325
326 /* Is this window highlighted? */
214a5cbe 327 bool is_highlighted = false;
33b906ab
TT
328};
329
5cf82909
TT
330/* The base class for all source-like windows, namely the source and
331 disassembly windows. */
332
333struct tui_source_window_base : public tui_win_info
33b906ab 334{
5cf82909
TT
335protected:
336 explicit tui_source_window_base (enum tui_win_type type);
337 ~tui_source_window_base () override;
338 DISABLE_COPY_AND_ASSIGN (tui_source_window_base);
339
c3bd716f 340 void do_scroll_horizontal (int num_to_scroll) override;
13446e05 341
5cf82909 342public:
8761a91b
TT
343
344 void clear_detail () override;
44f0e208
TT
345
346 /* Return true if this window has the locator. */
e6e41501
TT
347 bool has_locator () const override
348 {
349 return m_has_locator;
350 }
351
56122977 352 void make_visible (bool visible) override;
2042b506 353 void refresh () override;
1825f487 354 void refresh_all () override;
cda37efb 355
ad54d15b
TT
356 /* Refill the source window's source cache and update it. If this
357 is a disassembly window, then just update it. */
358 void refill ();
359
360 /* Set the location of the execution point. */
361 void set_is_exec_point_at (struct tui_line_or_address l);
362
3f02ce1e
TT
363 void set_new_height (int height) override;
364
e6e41501
TT
365 /* Does the locator belong to this window? */
366 bool m_has_locator = false;
367 /* Execution information window. */
368 struct tui_gen_win_info *execution_info = nullptr;
369 /* Used for horizontal scroll. */
370 int horizontal_offset = 0;
371 struct tui_line_or_address start_line_or_addr;
372
373 /* It is the resolved form as returned by symtab_to_fullname. */
374 char *fullname = nullptr;
375
376 /* Architecture associated with code at this location. */
377 struct gdbarch *gdbarch = nullptr;
33b906ab
TT
378};
379
5cf82909
TT
380/* A TUI source window. */
381
382struct tui_source_window : public tui_source_window_base
383{
384 tui_source_window ()
385 : tui_source_window_base (SRC_WIN)
386 {
387 }
388
389 DISABLE_COPY_AND_ASSIGN (tui_source_window);
13446e05 390
152f3f4b
TT
391 const char *name () const override
392 {
393 return SRC_NAME;
394 }
395
13446e05
TT
396protected:
397
c3bd716f 398 void do_scroll_vertical (int num_to_scroll) override;
5cf82909
TT
399};
400
401/* A TUI disassembly window. */
402
403struct tui_disasm_window : public tui_source_window_base
404{
405 tui_disasm_window ()
406 : tui_source_window_base (DISASSEM_WIN)
407 {
408 }
409
410 DISABLE_COPY_AND_ASSIGN (tui_disasm_window);
13446e05 411
152f3f4b
TT
412 const char *name () const override
413 {
414 return DISASSEM_NAME;
415 }
416
13446e05
TT
417protected:
418
c3bd716f 419 void do_scroll_vertical (int num_to_scroll) override;
5cf82909
TT
420};
421
33b906ab
TT
422struct tui_data_window : public tui_win_info
423{
63901aec
TT
424 tui_data_window ()
425 : tui_win_info (DATA_WIN)
426 {
427 }
428
ee1d42d6 429 ~tui_data_window () override;
33b906ab 430 DISABLE_COPY_AND_ASSIGN (tui_data_window);
8761a91b
TT
431
432 void clear_detail () override;
1825f487 433 void refresh_all () override;
13446e05 434
3f02ce1e
TT
435 void set_new_height (int height) override;
436
5b81daba
TT
437 void refresh_window () override;
438
152f3f4b
TT
439 const char *name () const override
440 {
441 return DATA_NAME;
442 }
443
63901aec
TT
444 /* Start of data display content. */
445 tui_win_content data_content = NULL;
446 int data_content_count = 0;
447 /* Start of regs display content. */
448 tui_win_content regs_content = NULL;
449 int regs_content_count = 0;
450 int regs_column_count = 0;
451 /* Should regs be displayed at all? */
452 bool display_regs = false;
453 struct reggroup *current_group = nullptr;
238eb706 454
13446e05
TT
455protected:
456
c3bd716f
TT
457 void do_scroll_vertical (int num_to_scroll) override;
458 void do_scroll_horizontal (int num_to_scroll) override
13446e05
TT
459 {
460 }
33b906ab
TT
461};
462
463struct tui_cmd_window : public tui_win_info
464{
63901aec
TT
465 tui_cmd_window ()
466 : tui_win_info (CMD_WIN)
467 {
d6ba6a11 468 can_highlight = false;
63901aec
TT
469 }
470
33b906ab 471 DISABLE_COPY_AND_ASSIGN (tui_cmd_window);
8761a91b
TT
472
473 void clear_detail () override;
13446e05 474
56122977 475 void make_visible (bool visible) override
cda37efb
TT
476 {
477 }
478
8903bd8a
TT
479 int max_height () const override;
480
5b81daba
TT
481 void refresh_window () override
482 {
483 }
484
152f3f4b
TT
485 const char *name () const override
486 {
487 return CMD_NAME;
488 }
489
63901aec 490 int start_line = 0;
81491aa0 491
13446e05
TT
492protected:
493
c3bd716f 494 void do_scroll_vertical (int num_to_scroll) override
13446e05
TT
495 {
496 }
497
c3bd716f 498 void do_scroll_horizontal (int num_to_scroll) override
13446e05
TT
499 {
500 }
2a8854a7 501};
c906108c 502
6d012f14 503extern int tui_win_is_auxillary (enum tui_win_type win_type);
c906108c
SS
504
505
1cc6d956 506/* Global Data. */
7fa29be9 507extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 508
e6e41501
TT
509#define TUI_SRC_WIN ((tui_source_window_base *) tui_win_list[SRC_WIN])
510#define TUI_DISASM_WIN ((tui_source_window_base *) tui_win_list[DISASSEM_WIN])
238eb706 511#define TUI_DATA_WIN ((tui_data_window *) tui_win_list[DATA_WIN])
81491aa0 512#define TUI_CMD_WIN ((tui_cmd_window *) tui_win_list[CMD_WIN])
c906108c 513
1cc6d956 514/* Data Manipulation Functions. */
dd1abb8c 515extern void tui_initialize_static_data (void);
22940a24 516extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
dd1abb8c 517extern void tui_init_generic_part (struct tui_gen_win_info *);
2a8854a7 518extern tui_win_content tui_alloc_content (int, enum tui_win_type);
08ef48c5
MS
519extern int tui_add_content_elements (struct tui_gen_win_info *,
520 int);
dd1abb8c 521extern void tui_free_win_content (struct tui_gen_win_info *);
2a8854a7 522extern void tui_free_data_content (tui_win_content, int);
dd1abb8c 523extern void tui_free_all_source_wins_content (void);
a121b7c1 524extern struct tui_win_info *tui_partial_win_by_name (const char *);
2a8854a7
AC
525extern enum tui_layout_type tui_current_layout (void);
526extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
527extern int tui_term_height (void);
528extern void tui_set_term_height_to (int);
529extern int tui_term_width (void);
530extern void tui_set_term_width_to (int);
dd1abb8c 531extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
ad54d15b 532extern std::vector<tui_source_window_base *> &tui_source_windows ();
dd1abb8c
AC
533extern void tui_clear_source_windows (void);
534extern void tui_clear_source_windows_detail (void);
ad54d15b 535extern void tui_add_to_source_windows (struct tui_source_window_base *);
dd1abb8c
AC
536extern struct tui_win_info *tui_win_with_focus (void);
537extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 538extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
539extern int tui_win_resized (void);
540extern void tui_set_win_resized_to (int);
541
542extern struct tui_win_info *tui_next_win (struct tui_win_info *);
543extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
544
7806cea7
TT
545extern unsigned int tui_tab_width;
546
1a5c2598 547#endif /* TUI_TUI_DATA_H */
This page took 2.063402 seconds and 4 git commands to generate.