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