]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/tui/tui-data.h
Don't declare tui_init_win_info
[thirdparty/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. */
52 int is_visible; /* Whether the window is visible or not. */
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
2a8854a7
AC
105/* General list struct. */
106struct tui_list
107{
96c1eda2 108 struct tui_win_info **list;
2a8854a7
AC
109 int count;
110};
c906108c
SS
111
112
1cc6d956 113/* The kinds of layouts available. */
2a8854a7
AC
114enum tui_layout_type
115{
116 SRC_COMMAND,
117 DISASSEM_COMMAND,
118 SRC_DISASSEM_COMMAND,
119 SRC_DATA_COMMAND,
120 DISASSEM_DATA_COMMAND,
121 UNDEFINED_LAYOUT
122};
c906108c 123
1cc6d956 124/* Basic data types that can be displayed in the data window. */
2a8854a7
AC
125enum tui_data_type
126{
127 TUI_REGISTER,
128 TUI_SCALAR,
129 TUI_COMPLEX,
130 TUI_STRUCT
131};
c906108c 132
52059ffd
TT
133enum tui_line_or_address_kind
134{
135 LOA_LINE,
136 LOA_ADDRESS
137};
138
1cc6d956 139/* Structure describing source line or line address. */
362c05fe 140struct tui_line_or_address
2a8854a7 141{
52059ffd 142 enum tui_line_or_address_kind loa;
362c05fe
AS
143 union
144 {
145 int line_no;
146 CORE_ADDR addr;
147 } u;
2a8854a7 148};
c906108c 149
1cc6d956 150/* Current Layout definition. */
2a8854a7
AC
151struct tui_layout_def
152{
6d012f14 153 enum tui_win_type display_mode;
2a8854a7 154 int split;
2a8854a7 155};
c906108c 156
1cc6d956 157/* Elements in the Source/Disassembly Window. */
2a8854a7
AC
158struct tui_source_element
159{
160 char *line;
362c05fe 161 struct tui_line_or_address line_or_addr;
6d012f14
AC
162 int is_exec_point;
163 int has_break;
2a8854a7 164};
c906108c
SS
165
166
1cc6d956 167/* Elements in the data display window content. */
2a8854a7
AC
168struct tui_data_element
169{
170 const char *name;
08ef48c5
MS
171 int item_no; /* The register number, or data display
172 number. */
2a8854a7 173 enum tui_data_type type;
22940a24 174 void *value;
2a8854a7 175 int highlight;
10f59415 176 char *content;
2a8854a7 177};
c906108c
SS
178
179
1cc6d956 180/* Elements in the command window content. */
2a8854a7
AC
181struct tui_command_element
182{
183 char *line;
184};
c906108c 185
2d42f9a8
JB
186#ifdef PATH_MAX
187# define MAX_LOCATOR_ELEMENT_LEN PATH_MAX
188#else
189# define MAX_LOCATOR_ELEMENT_LEN 1024
190#endif
c906108c 191
1cc6d956 192/* Elements in the locator window content. */
2a8854a7
AC
193struct tui_locator_element
194{
56d397a3
JK
195 /* Resolved absolute filename as returned by symtab_to_fullname. */
196 char full_name[MAX_LOCATOR_ELEMENT_LEN];
6d012f14
AC
197 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
198 int line_no;
2a8854a7 199 CORE_ADDR addr;
13274fc3
UW
200 /* Architecture associated with code at this location. */
201 struct gdbarch *gdbarch;
2a8854a7 202};
c906108c 203
00b2bad4
SC
204/* Flags to tell what kind of breakpoint is at current line. */
205#define TUI_BP_ENABLED 0x01
206#define TUI_BP_DISABLED 0x02
207#define TUI_BP_HIT 0x04
208#define TUI_BP_CONDITIONAL 0x08
209#define TUI_BP_HARDWARE 0x10
210
211/* Position of breakpoint markers in the exec info string. */
212#define TUI_BP_HIT_POS 0
213#define TUI_BP_BREAK_POS 1
214#define TUI_EXEC_POS 2
215#define TUI_EXECINFO_SIZE 4
216
2a8854a7 217typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 218
1cc6d956 219/* An content element in a window. */
2a8854a7
AC
220union tui_which_element
221{
1cc6d956
MS
222 struct tui_source_element source; /* The source elements. */
223 struct tui_gen_win_info data_window; /* Data display elements. */
224 struct tui_data_element data; /* Elements of data_window. */
225 struct tui_command_element command; /* Command elements. */
226 struct tui_locator_element locator; /* Locator elements. */
227 tui_exec_info_content simple_string; /* Simple char based elements. */
2a8854a7
AC
228};
229
230struct tui_win_element
231{
6d012f14 232 union tui_which_element which_element;
2a8854a7 233};
c906108c 234
1cc6d956
MS
235/* This struct defines the specific information about a data display
236 window. */
2a8854a7
AC
237struct tui_data_info
238{
1cc6d956 239 tui_win_content data_content; /* Start of data display content. */
6d012f14 240 int data_content_count;
1cc6d956 241 tui_win_content regs_content; /* Start of regs display content. */
6d012f14 242 int regs_content_count;
6d012f14 243 int regs_column_count;
1cc6d956 244 int display_regs; /* Should regs be displayed at all? */
10f59415 245 struct reggroup *current_group;
2a8854a7
AC
246};
247
248
249struct tui_source_info
250{
1cc6d956 251 int has_locator; /* Does locator belongs to this window? */
2a8854a7 252 /* Execution information window. */
6d012f14 253 struct tui_gen_win_info *execution_info;
1cc6d956 254 int horizontal_offset; /* Used for horizontal scroll. */
362c05fe 255 struct tui_line_or_address start_line_or_addr;
aa079c93
JK
256
257 /* It is the resolved form as returned by symtab_to_fullname. */
258 char *fullname;
259
13274fc3
UW
260 /* Architecture associated with code at this location. */
261 struct gdbarch *gdbarch;
2a8854a7
AC
262};
263
264
265struct tui_command_info
266{
2a8854a7
AC
267 int start_line;
268};
c906108c
SS
269
270
1cc6d956 271/* This defines information about each logical window. */
2a8854a7
AC
272struct tui_win_info
273{
1cc6d956 274 struct tui_gen_win_info generic; /* General window information. */
2a8854a7 275 union
c5aa993b 276 {
6d012f14
AC
277 struct tui_source_info source_info;
278 struct tui_data_info data_display_info;
279 struct tui_command_info command_info;
c5aa993b 280 }
2a8854a7 281 detail;
1cc6d956
MS
282 int can_highlight; /* Can this window ever be highlighted? */
283 int is_highlighted; /* Is this window highlighted? */
2a8854a7 284};
c906108c 285
6d012f14
AC
286extern int tui_win_is_source_type (enum tui_win_type win_type);
287extern int tui_win_is_auxillary (enum tui_win_type win_type);
288extern int tui_win_has_locator (struct tui_win_info *win_info);
289extern void tui_set_win_highlight (struct tui_win_info *win_info,
290 int highlight);
c906108c
SS
291
292
1cc6d956 293/* Global Data. */
7fa29be9 294extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
c906108c 295
1cc6d956
MS
296#define TUI_SRC_WIN tui_win_list[SRC_WIN]
297#define TUI_DISASM_WIN tui_win_list[DISASSEM_WIN]
298#define TUI_DATA_WIN tui_win_list[DATA_WIN]
299#define TUI_CMD_WIN tui_win_list[CMD_WIN]
c906108c 300
1cc6d956 301/* Data Manipulation Functions. */
dd1abb8c
AC
302extern void tui_initialize_static_data (void);
303extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
22940a24 304extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
dd1abb8c 305extern void tui_init_generic_part (struct tui_gen_win_info *);
2a8854a7 306extern tui_win_content tui_alloc_content (int, enum tui_win_type);
08ef48c5
MS
307extern int tui_add_content_elements (struct tui_gen_win_info *,
308 int);
309extern void tui_init_content_element (struct tui_win_element *,
310 enum tui_win_type);
dd1abb8c
AC
311extern void tui_free_window (struct tui_win_info *);
312extern void tui_free_win_content (struct tui_gen_win_info *);
2a8854a7 313extern void tui_free_data_content (tui_win_content, int);
dd1abb8c
AC
314extern void tui_free_all_source_wins_content (void);
315extern void tui_del_window (struct tui_win_info *);
2a8854a7 316extern void tui_del_data_windows (tui_win_content, int);
a121b7c1 317extern struct tui_win_info *tui_partial_win_by_name (const char *);
f41cbf58 318extern const char *tui_win_name (const struct tui_gen_win_info *);
2a8854a7
AC
319extern enum tui_layout_type tui_current_layout (void);
320extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
321extern int tui_term_height (void);
322extern void tui_set_term_height_to (int);
323extern int tui_term_width (void);
324extern void tui_set_term_width_to (int);
dd1abb8c
AC
325extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
326extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
327extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
5b6fe301 328extern struct tui_list *tui_source_windows (void);
dd1abb8c
AC
329extern void tui_clear_source_windows (void);
330extern void tui_clear_source_windows_detail (void);
08ef48c5 331extern void tui_clear_win_detail (struct tui_win_info *);
dd1abb8c 332extern void tui_add_to_source_windows (struct tui_win_info *);
dd1abb8c
AC
333extern struct tui_win_info *tui_win_with_focus (void);
334extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 335extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
336extern int tui_win_resized (void);
337extern void tui_set_win_resized_to (int);
338
339extern struct tui_win_info *tui_next_win (struct tui_win_info *);
340extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
341
08ef48c5 342extern void tui_add_to_source_windows (struct tui_win_info *);
c7c228ed 343
7806cea7
TT
344extern unsigned int tui_tab_width;
345
1a5c2598 346#endif /* TUI_TUI_DATA_H */