Make type-safe the 'content' field of struct tui_gen_win_info
[deliverable/binutils-gdb.git] / gdb / tui / tui-data.h
CommitLineData
f377b406 1/* TUI data manipulation routines.
55fb0713 2
32d0add0 3 Copyright (C) 1998-2015 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
c906108c
SS
22#ifndef TUI_DATA_H
23#define TUI_DATA_H
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
63#define SRC_NAME "SRC"
64#define CMD_NAME "CMD"
65#define DATA_NAME "REGS"
66#define DISASSEM_NAME "ASM"
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
SS
94
95#define TUI_FLOAT_REGS_NAME "$FREGS"
96#define TUI_FLOAT_REGS_NAME_LOWER "$fregs"
97#define TUI_GENERAL_REGS_NAME "$GREGS"
98#define TUI_GENERAL_REGS_NAME_LOWER "$gregs"
99#define TUI_SPECIAL_REGS_NAME "$SREGS"
100#define TUI_SPECIAL_REGS_NAME_LOWER "$sregs"
101#define TUI_GENERAL_SPECIAL_REGS_NAME "$REGS"
102#define TUI_GENERAL_SPECIAL_REGS_NAME_LOWER "$regs"
103
2a8854a7
AC
104/* Scroll direction enum. */
105enum tui_scroll_direction
106{
107 FORWARD_SCROLL,
108 BACKWARD_SCROLL,
109 LEFT_SCROLL,
110 RIGHT_SCROLL
111};
c906108c
SS
112
113
2a8854a7
AC
114/* General list struct. */
115struct tui_list
116{
96c1eda2 117 struct tui_win_info **list;
2a8854a7
AC
118 int count;
119};
c906108c
SS
120
121
1cc6d956 122/* The kinds of layouts available. */
2a8854a7
AC
123enum tui_layout_type
124{
125 SRC_COMMAND,
126 DISASSEM_COMMAND,
127 SRC_DISASSEM_COMMAND,
128 SRC_DATA_COMMAND,
129 DISASSEM_DATA_COMMAND,
130 UNDEFINED_LAYOUT
131};
c906108c 132
1cc6d956 133/* Basic data types that can be displayed in the data window. */
2a8854a7
AC
134enum tui_data_type
135{
136 TUI_REGISTER,
137 TUI_SCALAR,
138 TUI_COMPLEX,
139 TUI_STRUCT
140};
c906108c 141
1cc6d956 142/* Types of register displays. */
2a8854a7
AC
143enum tui_register_display_type
144{
145 TUI_UNDEFINED_REGS,
146 TUI_GENERAL_REGS,
147 TUI_SFLOAT_REGS,
148 TUI_DFLOAT_REGS,
149 TUI_SPECIAL_REGS,
150 TUI_GENERAL_AND_SPECIAL_REGS
151};
c906108c 152
52059ffd
TT
153enum tui_line_or_address_kind
154{
155 LOA_LINE,
156 LOA_ADDRESS
157};
158
1cc6d956 159/* Structure describing source line or line address. */
362c05fe 160struct tui_line_or_address
2a8854a7 161{
52059ffd 162 enum tui_line_or_address_kind loa;
362c05fe
AS
163 union
164 {
165 int line_no;
166 CORE_ADDR addr;
167 } u;
2a8854a7 168};
c906108c 169
1cc6d956 170/* Current Layout definition. */
2a8854a7
AC
171struct tui_layout_def
172{
6d012f14 173 enum tui_win_type display_mode;
2a8854a7 174 int split;
6d012f14
AC
175 enum tui_register_display_type regs_display_type;
176 enum tui_register_display_type float_regs_display_type;
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
MS
244 struct tui_source_element source; /* The source elements. */
245 struct tui_gen_win_info data_window; /* Data display elements. */
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{
254 int highlight;
6d012f14 255 union tui_which_element which_element;
2a8854a7 256};
c906108c 257
1cc6d956
MS
258/* This struct defines the specific information about a data display
259 window. */
2a8854a7
AC
260struct tui_data_info
261{
1cc6d956 262 tui_win_content data_content; /* Start of data display content. */
6d012f14 263 int data_content_count;
1cc6d956 264 tui_win_content regs_content; /* Start of regs display content. */
6d012f14
AC
265 int regs_content_count;
266 enum tui_register_display_type regs_display_type;
267 int regs_column_count;
1cc6d956 268 int display_regs; /* Should regs be displayed at all? */
10f59415 269 struct reggroup *current_group;
2a8854a7
AC
270};
271
272
273struct tui_source_info
274{
1cc6d956 275 int has_locator; /* Does locator belongs to this window? */
2a8854a7 276 /* Execution information window. */
6d012f14 277 struct tui_gen_win_info *execution_info;
1cc6d956 278 int horizontal_offset; /* Used for horizontal scroll. */
362c05fe 279 struct tui_line_or_address start_line_or_addr;
aa079c93
JK
280
281 /* It is the resolved form as returned by symtab_to_fullname. */
282 char *fullname;
283
13274fc3
UW
284 /* Architecture associated with code at this location. */
285 struct gdbarch *gdbarch;
2a8854a7
AC
286};
287
288
289struct tui_command_info
290{
1cc6d956
MS
291 int cur_line; /* The current line position. */
292 int curch; /* The current cursor position. */
2a8854a7
AC
293 int start_line;
294};
c906108c
SS
295
296
1cc6d956 297/* This defines information about each logical window. */
2a8854a7
AC
298struct tui_win_info
299{
1cc6d956 300 struct tui_gen_win_info generic; /* General window information. */
2a8854a7 301 union
c5aa993b 302 {
6d012f14
AC
303 struct tui_source_info source_info;
304 struct tui_data_info data_display_info;
305 struct tui_command_info command_info;
22940a24 306 void *opaque;
c5aa993b 307 }
2a8854a7 308 detail;
1cc6d956
MS
309 int can_highlight; /* Can this window ever be highlighted? */
310 int is_highlighted; /* Is this window highlighted? */
2a8854a7 311};
c906108c 312
6d012f14
AC
313extern int tui_win_is_source_type (enum tui_win_type win_type);
314extern int tui_win_is_auxillary (enum tui_win_type win_type);
315extern int tui_win_has_locator (struct tui_win_info *win_info);
316extern void tui_set_win_highlight (struct tui_win_info *win_info,
317 int highlight);
c906108c
SS
318
319
1cc6d956 320/* Global Data. */
6d012f14 321extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
c906108c 322
1cc6d956
MS
323#define TUI_SRC_WIN tui_win_list[SRC_WIN]
324#define TUI_DISASM_WIN tui_win_list[DISASSEM_WIN]
325#define TUI_DATA_WIN tui_win_list[DATA_WIN]
326#define TUI_CMD_WIN tui_win_list[CMD_WIN]
c906108c 327
1cc6d956 328/* Data Manipulation Functions. */
dd1abb8c
AC
329extern void tui_initialize_static_data (void);
330extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
22940a24 331extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
dd1abb8c
AC
332extern void tui_init_generic_part (struct tui_gen_win_info *);
333extern void tui_init_win_info (struct tui_win_info *);
2a8854a7 334extern tui_win_content tui_alloc_content (int, enum tui_win_type);
08ef48c5
MS
335extern int tui_add_content_elements (struct tui_gen_win_info *,
336 int);
337extern void tui_init_content_element (struct tui_win_element *,
338 enum tui_win_type);
dd1abb8c
AC
339extern void tui_free_window (struct tui_win_info *);
340extern void tui_free_win_content (struct tui_gen_win_info *);
2a8854a7 341extern void tui_free_data_content (tui_win_content, int);
dd1abb8c
AC
342extern void tui_free_all_source_wins_content (void);
343extern void tui_del_window (struct tui_win_info *);
2a8854a7 344extern void tui_del_data_windows (tui_win_content, int);
dd1abb8c
AC
345extern struct tui_win_info *tui_partial_win_by_name (char *);
346extern char *tui_win_name (struct tui_gen_win_info *);
2a8854a7
AC
347extern enum tui_layout_type tui_current_layout (void);
348extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
349extern int tui_term_height (void);
350extern void tui_set_term_height_to (int);
351extern int tui_term_width (void);
352extern void tui_set_term_width_to (int);
dd1abb8c
AC
353extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
354extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
355extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
5b6fe301 356extern struct tui_list *tui_source_windows (void);
dd1abb8c
AC
357extern void tui_clear_source_windows (void);
358extern void tui_clear_source_windows_detail (void);
08ef48c5 359extern void tui_clear_win_detail (struct tui_win_info *);
dd1abb8c
AC
360extern void tui_add_to_source_windows (struct tui_win_info *);
361extern int tui_default_tab_len (void);
362extern void tui_set_default_tab_len (int);
363extern struct tui_win_info *tui_win_with_focus (void);
364extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 365extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
366extern int tui_win_resized (void);
367extern void tui_set_win_resized_to (int);
368
369extern struct tui_win_info *tui_next_win (struct tui_win_info *);
370extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
371
08ef48c5 372extern void tui_add_to_source_windows (struct tui_win_info *);
c7c228ed 373
c906108c 374#endif /* TUI_DATA_H */
This page took 2.011043 seconds and 4 git commands to generate.