Added missing files to ChangeLog entry.
[deliverable/binutils-gdb.git] / gdb / tui / tui-data.h
CommitLineData
f377b406 1/* TUI data manipulation routines.
55fb0713 2
9b254dd1 3 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2007, 2008
48426bc2 4 Free Software Foundation, Inc.
55fb0713 5
f377b406
SC
6 Contributed by Hewlett-Packard Company.
7
8 This file is part of GDB.
9
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
f377b406
SC
13 (at your option) any later version.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
f377b406 22
c906108c
SS
23#ifndef TUI_DATA_H
24#define TUI_DATA_H
25
6a83354a
AC
26#include "tui/tui.h" /* For enum tui_win_type. */
27#include "gdb_curses.h" /* For WINDOW. */
28
29/* This is a point definition. */
30struct tui_point
31{
32 int x, y;
33};
2a5127c4 34
1cc6d956 35/* Generic window information. */
2a8854a7
AC
36struct tui_gen_win_info
37{
08ef48c5
MS
38 WINDOW *handle; /* Window handle. */
39 enum tui_win_type type; /* Type of window. */
40 int width; /* Window width. */
41 int height; /* Window height. */
42 struct tui_point origin; /* Origin of window. */
43 void **content; /* Content of window. */
44 int content_size; /* Size of content (# of elements). */
45 int content_in_use; /* Can it be used, or is it already used? */
46 int viewport_height; /* Viewport height. */
47 int last_visible_line; /* Index of last visible line. */
48 int is_visible; /* Whether the window is visible or not. */
49 char *title; /* Window title to display. */
2a8854a7 50};
2a5127c4 51
1cc6d956 52/* Constant definitions. */
08ef48c5
MS
53#define DEFAULT_TAB_LEN 8
54#define NO_SRC_STRING "[ No Source Available ]"
55#define NO_DISASSEM_STRING "[ No Assembly Available ]"
56#define NO_REGS_STRING "[ Register Values Unavailable ]"
57#define NO_DATA_STRING "[ No Data Values Displayed ]"
58#define MAX_CONTENT_COUNT 100
59#define SRC_NAME "SRC"
60#define CMD_NAME "CMD"
61#define DATA_NAME "REGS"
62#define DISASSEM_NAME "ASM"
63#define TUI_NULL_STR ""
64#define DEFAULT_HISTORY_COUNT 25
65#define BOX_WINDOW TRUE
66#define DONT_BOX_WINDOW FALSE
67#define HILITE TRUE
68#define NO_HILITE FALSE
69#define WITH_LOCATOR TRUE
70#define NO_LOCATOR FALSE
71#define EMPTY_SOURCE_PROMPT TRUE
72#define NO_EMPTY_SOURCE_PROMPT FALSE
73#define UNDEFINED_ITEM -1
74#define MIN_WIN_HEIGHT 3
75#define MIN_CMD_WIN_HEIGHT 3
c906108c 76
50265402 77/* Strings to display in the TUI status line. */
08ef48c5
MS
78#define PROC_PREFIX "In: "
79#define LINE_PREFIX "Line: "
80#define PC_PREFIX "PC: "
81#define SINGLE_KEY "(SingleKey)"
50265402 82
1cc6d956
MS
83/* Minimum/Maximum length of some fields displayed in the TUI status
84 line. */
85#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line
86 numbers. */
50265402
SC
87#define MIN_PROC_WIDTH 12
88#define MAX_TARGET_WIDTH 10
89#define MAX_PID_WIDTH 14
c906108c
SS
90
91#define TUI_FLOAT_REGS_NAME "$FREGS"
92#define TUI_FLOAT_REGS_NAME_LOWER "$fregs"
93#define TUI_GENERAL_REGS_NAME "$GREGS"
94#define TUI_GENERAL_REGS_NAME_LOWER "$gregs"
95#define TUI_SPECIAL_REGS_NAME "$SREGS"
96#define TUI_SPECIAL_REGS_NAME_LOWER "$sregs"
97#define TUI_GENERAL_SPECIAL_REGS_NAME "$REGS"
98#define TUI_GENERAL_SPECIAL_REGS_NAME_LOWER "$regs"
99
2a8854a7
AC
100/* Scroll direction enum. */
101enum tui_scroll_direction
102{
103 FORWARD_SCROLL,
104 BACKWARD_SCROLL,
105 LEFT_SCROLL,
106 RIGHT_SCROLL
107};
c906108c
SS
108
109
2a8854a7
AC
110/* General list struct. */
111struct tui_list
112{
96c1eda2 113 struct tui_win_info **list;
2a8854a7
AC
114 int count;
115};
c906108c
SS
116
117
1cc6d956 118/* The kinds of layouts available. */
2a8854a7
AC
119enum tui_layout_type
120{
121 SRC_COMMAND,
122 DISASSEM_COMMAND,
123 SRC_DISASSEM_COMMAND,
124 SRC_DATA_COMMAND,
125 DISASSEM_DATA_COMMAND,
126 UNDEFINED_LAYOUT
127};
c906108c 128
1cc6d956 129/* Basic data types that can be displayed in the data window. */
2a8854a7
AC
130enum tui_data_type
131{
132 TUI_REGISTER,
133 TUI_SCALAR,
134 TUI_COMPLEX,
135 TUI_STRUCT
136};
c906108c 137
1cc6d956 138/* Types of register displays. */
2a8854a7
AC
139enum tui_register_display_type
140{
141 TUI_UNDEFINED_REGS,
142 TUI_GENERAL_REGS,
143 TUI_SFLOAT_REGS,
144 TUI_DFLOAT_REGS,
145 TUI_SPECIAL_REGS,
146 TUI_GENERAL_AND_SPECIAL_REGS
147};
c906108c 148
1cc6d956 149/* Structure describing source line or line address. */
362c05fe 150struct tui_line_or_address
2a8854a7 151{
362c05fe
AS
152 enum { LOA_LINE, LOA_ADDRESS } loa;
153 union
154 {
155 int line_no;
156 CORE_ADDR addr;
157 } u;
2a8854a7 158};
c906108c 159
1cc6d956 160/* Current Layout definition. */
2a8854a7
AC
161struct tui_layout_def
162{
6d012f14 163 enum tui_win_type display_mode;
2a8854a7 164 int split;
6d012f14
AC
165 enum tui_register_display_type regs_display_type;
166 enum tui_register_display_type float_regs_display_type;
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{
6d012f14
AC
207 char file_name[MAX_LOCATOR_ELEMENT_LEN];
208 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
209 int line_no;
2a8854a7
AC
210 CORE_ADDR addr;
211};
c906108c 212
00b2bad4
SC
213/* Flags to tell what kind of breakpoint is at current line. */
214#define TUI_BP_ENABLED 0x01
215#define TUI_BP_DISABLED 0x02
216#define TUI_BP_HIT 0x04
217#define TUI_BP_CONDITIONAL 0x08
218#define TUI_BP_HARDWARE 0x10
219
220/* Position of breakpoint markers in the exec info string. */
221#define TUI_BP_HIT_POS 0
222#define TUI_BP_BREAK_POS 1
223#define TUI_EXEC_POS 2
224#define TUI_EXECINFO_SIZE 4
225
2a8854a7 226typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 227
1cc6d956 228/* An content element in a window. */
2a8854a7
AC
229union tui_which_element
230{
1cc6d956
MS
231 struct tui_source_element source; /* The source elements. */
232 struct tui_gen_win_info data_window; /* Data display elements. */
233 struct tui_data_element data; /* Elements of data_window. */
234 struct tui_command_element command; /* Command elements. */
235 struct tui_locator_element locator; /* Locator elements. */
236 tui_exec_info_content simple_string; /* Simple char based elements. */
2a8854a7
AC
237};
238
239struct tui_win_element
240{
241 int highlight;
6d012f14 242 union tui_which_element which_element;
2a8854a7 243};
c906108c
SS
244
245
1cc6d956 246/* This describes the content of the window. */
2a8854a7 247typedef struct tui_win_element **tui_win_content;
c906108c
SS
248
249
1cc6d956
MS
250/* This struct defines the specific information about a data display
251 window. */
2a8854a7
AC
252struct tui_data_info
253{
1cc6d956 254 tui_win_content data_content; /* Start of data display content. */
6d012f14 255 int data_content_count;
1cc6d956 256 tui_win_content regs_content; /* Start of regs display content. */
6d012f14
AC
257 int regs_content_count;
258 enum tui_register_display_type regs_display_type;
259 int regs_column_count;
1cc6d956 260 int display_regs; /* Should regs be displayed at all? */
10f59415 261 struct reggroup *current_group;
2a8854a7
AC
262};
263
264
265struct tui_source_info
266{
1cc6d956 267 int has_locator; /* Does locator belongs to this window? */
2a8854a7 268 /* Execution information window. */
6d012f14 269 struct tui_gen_win_info *execution_info;
1cc6d956 270 int horizontal_offset; /* Used for horizontal scroll. */
362c05fe 271 struct tui_line_or_address start_line_or_addr;
5b6fe301 272 char *filename;
2a8854a7
AC
273};
274
275
276struct tui_command_info
277{
1cc6d956
MS
278 int cur_line; /* The current line position. */
279 int curch; /* The current cursor position. */
2a8854a7
AC
280 int start_line;
281};
c906108c
SS
282
283
1cc6d956 284/* This defines information about each logical window. */
2a8854a7
AC
285struct tui_win_info
286{
1cc6d956 287 struct tui_gen_win_info generic; /* General window information. */
2a8854a7 288 union
c5aa993b 289 {
6d012f14
AC
290 struct tui_source_info source_info;
291 struct tui_data_info data_display_info;
292 struct tui_command_info command_info;
22940a24 293 void *opaque;
c5aa993b 294 }
2a8854a7 295 detail;
1cc6d956
MS
296 int can_highlight; /* Can this window ever be highlighted? */
297 int is_highlighted; /* Is this window highlighted? */
2a8854a7 298};
c906108c 299
6d012f14
AC
300extern int tui_win_is_source_type (enum tui_win_type win_type);
301extern int tui_win_is_auxillary (enum tui_win_type win_type);
302extern int tui_win_has_locator (struct tui_win_info *win_info);
303extern void tui_set_win_highlight (struct tui_win_info *win_info,
304 int highlight);
c906108c
SS
305
306
1cc6d956 307/* Global Data. */
6d012f14 308extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
c906108c 309
1cc6d956
MS
310#define TUI_SRC_WIN tui_win_list[SRC_WIN]
311#define TUI_DISASM_WIN tui_win_list[DISASSEM_WIN]
312#define TUI_DATA_WIN tui_win_list[DATA_WIN]
313#define TUI_CMD_WIN tui_win_list[CMD_WIN]
c906108c 314
1cc6d956 315/* Data Manipulation Functions. */
dd1abb8c
AC
316extern void tui_initialize_static_data (void);
317extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
22940a24 318extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
dd1abb8c
AC
319extern void tui_init_generic_part (struct tui_gen_win_info *);
320extern void tui_init_win_info (struct tui_win_info *);
2a8854a7 321extern tui_win_content tui_alloc_content (int, enum tui_win_type);
08ef48c5
MS
322extern int tui_add_content_elements (struct tui_gen_win_info *,
323 int);
324extern void tui_init_content_element (struct tui_win_element *,
325 enum tui_win_type);
dd1abb8c
AC
326extern void tui_free_window (struct tui_win_info *);
327extern void tui_free_win_content (struct tui_gen_win_info *);
2a8854a7 328extern void tui_free_data_content (tui_win_content, int);
dd1abb8c
AC
329extern void tui_free_all_source_wins_content (void);
330extern void tui_del_window (struct tui_win_info *);
2a8854a7 331extern void tui_del_data_windows (tui_win_content, int);
dd1abb8c
AC
332extern struct tui_win_info *tui_partial_win_by_name (char *);
333extern char *tui_win_name (struct tui_gen_win_info *);
2a8854a7
AC
334extern enum tui_layout_type tui_current_layout (void);
335extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
336extern int tui_term_height (void);
337extern void tui_set_term_height_to (int);
338extern int tui_term_width (void);
339extern void tui_set_term_width_to (int);
08ef48c5
MS
340extern void tui_set_gen_win_origin (struct tui_gen_win_info *,
341 int, int);
dd1abb8c
AC
342extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
343extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
344extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
5b6fe301 345extern struct tui_list *tui_source_windows (void);
dd1abb8c
AC
346extern void tui_clear_source_windows (void);
347extern void tui_clear_source_windows_detail (void);
08ef48c5 348extern void tui_clear_win_detail (struct tui_win_info *);
dd1abb8c
AC
349extern void tui_add_to_source_windows (struct tui_win_info *);
350extern int tui_default_tab_len (void);
351extern void tui_set_default_tab_len (int);
352extern struct tui_win_info *tui_win_with_focus (void);
353extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 354extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
355extern int tui_win_resized (void);
356extern void tui_set_win_resized_to (int);
357
358extern struct tui_win_info *tui_next_win (struct tui_win_info *);
359extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
360
08ef48c5 361extern void tui_add_to_source_windows (struct tui_win_info *);
c7c228ed 362
c906108c 363#endif /* TUI_DATA_H */
This page took 0.820736 seconds and 4 git commands to generate.