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