gdb/
[deliverable/binutils-gdb.git] / gdb / tui / tui-data.h
CommitLineData
f377b406 1/* TUI data manipulation routines.
55fb0713 2
8acc9f48 3 Copyright (C) 1998-2013 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
1cc6d956 34/* Generic window information. */
2a8854a7
AC
35struct tui_gen_win_info
36{
08ef48c5
MS
37 WINDOW *handle; /* Window handle. */
38 enum tui_win_type type; /* Type of window. */
39 int width; /* Window width. */
40 int height; /* Window height. */
41 struct tui_point origin; /* Origin of window. */
42 void **content; /* Content of window. */
43 int content_size; /* Size of content (# of elements). */
44 int content_in_use; /* Can it be used, or is it already used? */
45 int viewport_height; /* Viewport height. */
46 int last_visible_line; /* Index of last visible line. */
47 int is_visible; /* Whether the window is visible or not. */
48 char *title; /* Window title to display. */
2a8854a7 49};
2a5127c4 50
1cc6d956 51/* Constant definitions. */
08ef48c5
MS
52#define DEFAULT_TAB_LEN 8
53#define NO_SRC_STRING "[ No Source Available ]"
54#define NO_DISASSEM_STRING "[ No Assembly Available ]"
55#define NO_REGS_STRING "[ Register Values Unavailable ]"
56#define NO_DATA_STRING "[ No Data Values Displayed ]"
57#define MAX_CONTENT_COUNT 100
58#define SRC_NAME "SRC"
59#define CMD_NAME "CMD"
60#define DATA_NAME "REGS"
61#define DISASSEM_NAME "ASM"
62#define TUI_NULL_STR ""
63#define DEFAULT_HISTORY_COUNT 25
64#define BOX_WINDOW TRUE
65#define DONT_BOX_WINDOW FALSE
66#define HILITE TRUE
67#define NO_HILITE FALSE
68#define WITH_LOCATOR TRUE
69#define NO_LOCATOR FALSE
70#define EMPTY_SOURCE_PROMPT TRUE
71#define NO_EMPTY_SOURCE_PROMPT FALSE
72#define UNDEFINED_ITEM -1
73#define MIN_WIN_HEIGHT 3
74#define MIN_CMD_WIN_HEIGHT 3
c906108c 75
50265402 76/* Strings to display in the TUI status line. */
08ef48c5
MS
77#define PROC_PREFIX "In: "
78#define LINE_PREFIX "Line: "
79#define PC_PREFIX "PC: "
80#define SINGLE_KEY "(SingleKey)"
50265402 81
1cc6d956
MS
82/* Minimum/Maximum length of some fields displayed in the TUI status
83 line. */
84#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line
85 numbers. */
50265402
SC
86#define MIN_PROC_WIDTH 12
87#define MAX_TARGET_WIDTH 10
88#define MAX_PID_WIDTH 14
c906108c
SS
89
90#define TUI_FLOAT_REGS_NAME "$FREGS"
91#define TUI_FLOAT_REGS_NAME_LOWER "$fregs"
92#define TUI_GENERAL_REGS_NAME "$GREGS"
93#define TUI_GENERAL_REGS_NAME_LOWER "$gregs"
94#define TUI_SPECIAL_REGS_NAME "$SREGS"
95#define TUI_SPECIAL_REGS_NAME_LOWER "$sregs"
96#define TUI_GENERAL_SPECIAL_REGS_NAME "$REGS"
97#define TUI_GENERAL_SPECIAL_REGS_NAME_LOWER "$regs"
98
2a8854a7
AC
99/* Scroll direction enum. */
100enum tui_scroll_direction
101{
102 FORWARD_SCROLL,
103 BACKWARD_SCROLL,
104 LEFT_SCROLL,
105 RIGHT_SCROLL
106};
c906108c
SS
107
108
2a8854a7
AC
109/* General list struct. */
110struct tui_list
111{
96c1eda2 112 struct tui_win_info **list;
2a8854a7
AC
113 int count;
114};
c906108c
SS
115
116
1cc6d956 117/* The kinds of layouts available. */
2a8854a7
AC
118enum tui_layout_type
119{
120 SRC_COMMAND,
121 DISASSEM_COMMAND,
122 SRC_DISASSEM_COMMAND,
123 SRC_DATA_COMMAND,
124 DISASSEM_DATA_COMMAND,
125 UNDEFINED_LAYOUT
126};
c906108c 127
1cc6d956 128/* Basic data types that can be displayed in the data window. */
2a8854a7
AC
129enum tui_data_type
130{
131 TUI_REGISTER,
132 TUI_SCALAR,
133 TUI_COMPLEX,
134 TUI_STRUCT
135};
c906108c 136
1cc6d956 137/* Types of register displays. */
2a8854a7
AC
138enum tui_register_display_type
139{
140 TUI_UNDEFINED_REGS,
141 TUI_GENERAL_REGS,
142 TUI_SFLOAT_REGS,
143 TUI_DFLOAT_REGS,
144 TUI_SPECIAL_REGS,
145 TUI_GENERAL_AND_SPECIAL_REGS
146};
c906108c 147
1cc6d956 148/* Structure describing source line or line address. */
362c05fe 149struct tui_line_or_address
2a8854a7 150{
362c05fe
AS
151 enum { LOA_LINE, LOA_ADDRESS } loa;
152 union
153 {
154 int line_no;
155 CORE_ADDR addr;
156 } u;
2a8854a7 157};
c906108c 158
1cc6d956 159/* Current Layout definition. */
2a8854a7
AC
160struct tui_layout_def
161{
6d012f14 162 enum tui_win_type display_mode;
2a8854a7 163 int split;
6d012f14
AC
164 enum tui_register_display_type regs_display_type;
165 enum tui_register_display_type float_regs_display_type;
2a8854a7 166};
c906108c 167
1cc6d956 168/* Elements in the Source/Disassembly Window. */
2a8854a7
AC
169struct tui_source_element
170{
171 char *line;
362c05fe 172 struct tui_line_or_address line_or_addr;
6d012f14
AC
173 int is_exec_point;
174 int has_break;
2a8854a7 175};
c906108c
SS
176
177
1cc6d956 178/* Elements in the data display window content. */
2a8854a7
AC
179struct tui_data_element
180{
181 const char *name;
08ef48c5
MS
182 int item_no; /* The register number, or data display
183 number. */
2a8854a7 184 enum tui_data_type type;
22940a24 185 void *value;
2a8854a7 186 int highlight;
10f59415 187 char *content;
2a8854a7 188};
c906108c
SS
189
190
1cc6d956 191/* Elements in the command window content. */
2a8854a7
AC
192struct tui_command_element
193{
194 char *line;
195};
c906108c 196
2d42f9a8
JB
197#ifdef PATH_MAX
198# define MAX_LOCATOR_ELEMENT_LEN PATH_MAX
199#else
200# define MAX_LOCATOR_ELEMENT_LEN 1024
201#endif
c906108c 202
1cc6d956 203/* Elements in the locator window content. */
2a8854a7
AC
204struct tui_locator_element
205{
6d012f14
AC
206 char file_name[MAX_LOCATOR_ELEMENT_LEN];
207 char proc_name[MAX_LOCATOR_ELEMENT_LEN];
208 int line_no;
2a8854a7 209 CORE_ADDR addr;
13274fc3
UW
210 /* Architecture associated with code at this location. */
211 struct gdbarch *gdbarch;
2a8854a7 212};
c906108c 213
00b2bad4
SC
214/* Flags to tell what kind of breakpoint is at current line. */
215#define TUI_BP_ENABLED 0x01
216#define TUI_BP_DISABLED 0x02
217#define TUI_BP_HIT 0x04
218#define TUI_BP_CONDITIONAL 0x08
219#define TUI_BP_HARDWARE 0x10
220
221/* Position of breakpoint markers in the exec info string. */
222#define TUI_BP_HIT_POS 0
223#define TUI_BP_BREAK_POS 1
224#define TUI_EXEC_POS 2
225#define TUI_EXECINFO_SIZE 4
226
2a8854a7 227typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
c906108c 228
1cc6d956 229/* An content element in a window. */
2a8854a7
AC
230union tui_which_element
231{
1cc6d956
MS
232 struct tui_source_element source; /* The source elements. */
233 struct tui_gen_win_info data_window; /* Data display elements. */
234 struct tui_data_element data; /* Elements of data_window. */
235 struct tui_command_element command; /* Command elements. */
236 struct tui_locator_element locator; /* Locator elements. */
237 tui_exec_info_content simple_string; /* Simple char based elements. */
2a8854a7
AC
238};
239
240struct tui_win_element
241{
242 int highlight;
6d012f14 243 union tui_which_element which_element;
2a8854a7 244};
c906108c
SS
245
246
1cc6d956 247/* This describes the content of the window. */
2a8854a7 248typedef struct tui_win_element **tui_win_content;
c906108c
SS
249
250
1cc6d956
MS
251/* This struct defines the specific information about a data display
252 window. */
2a8854a7
AC
253struct tui_data_info
254{
1cc6d956 255 tui_win_content data_content; /* Start of data display content. */
6d012f14 256 int data_content_count;
1cc6d956 257 tui_win_content regs_content; /* Start of regs display content. */
6d012f14
AC
258 int regs_content_count;
259 enum tui_register_display_type regs_display_type;
260 int regs_column_count;
1cc6d956 261 int display_regs; /* Should regs be displayed at all? */
10f59415 262 struct reggroup *current_group;
2a8854a7
AC
263};
264
265
266struct tui_source_info
267{
1cc6d956 268 int has_locator; /* Does locator belongs to this window? */
2a8854a7 269 /* Execution information window. */
6d012f14 270 struct tui_gen_win_info *execution_info;
1cc6d956 271 int horizontal_offset; /* Used for horizontal scroll. */
362c05fe 272 struct tui_line_or_address start_line_or_addr;
aa079c93
JK
273
274 /* It is the resolved form as returned by symtab_to_fullname. */
275 char *fullname;
276
13274fc3
UW
277 /* Architecture associated with code at this location. */
278 struct gdbarch *gdbarch;
2a8854a7
AC
279};
280
281
282struct tui_command_info
283{
1cc6d956
MS
284 int cur_line; /* The current line position. */
285 int curch; /* The current cursor position. */
2a8854a7
AC
286 int start_line;
287};
c906108c
SS
288
289
1cc6d956 290/* This defines information about each logical window. */
2a8854a7
AC
291struct tui_win_info
292{
1cc6d956 293 struct tui_gen_win_info generic; /* General window information. */
2a8854a7 294 union
c5aa993b 295 {
6d012f14
AC
296 struct tui_source_info source_info;
297 struct tui_data_info data_display_info;
298 struct tui_command_info command_info;
22940a24 299 void *opaque;
c5aa993b 300 }
2a8854a7 301 detail;
1cc6d956
MS
302 int can_highlight; /* Can this window ever be highlighted? */
303 int is_highlighted; /* Is this window highlighted? */
2a8854a7 304};
c906108c 305
6d012f14
AC
306extern int tui_win_is_source_type (enum tui_win_type win_type);
307extern int tui_win_is_auxillary (enum tui_win_type win_type);
308extern int tui_win_has_locator (struct tui_win_info *win_info);
309extern void tui_set_win_highlight (struct tui_win_info *win_info,
310 int highlight);
c906108c
SS
311
312
1cc6d956 313/* Global Data. */
6d012f14 314extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
c906108c 315
1cc6d956
MS
316#define TUI_SRC_WIN tui_win_list[SRC_WIN]
317#define TUI_DISASM_WIN tui_win_list[DISASSEM_WIN]
318#define TUI_DATA_WIN tui_win_list[DATA_WIN]
319#define TUI_CMD_WIN tui_win_list[CMD_WIN]
c906108c 320
1cc6d956 321/* Data Manipulation Functions. */
dd1abb8c
AC
322extern void tui_initialize_static_data (void);
323extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
22940a24 324extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
dd1abb8c
AC
325extern void tui_init_generic_part (struct tui_gen_win_info *);
326extern void tui_init_win_info (struct tui_win_info *);
2a8854a7 327extern tui_win_content tui_alloc_content (int, enum tui_win_type);
08ef48c5
MS
328extern int tui_add_content_elements (struct tui_gen_win_info *,
329 int);
330extern void tui_init_content_element (struct tui_win_element *,
331 enum tui_win_type);
dd1abb8c
AC
332extern void tui_free_window (struct tui_win_info *);
333extern void tui_free_win_content (struct tui_gen_win_info *);
2a8854a7 334extern void tui_free_data_content (tui_win_content, int);
dd1abb8c
AC
335extern void tui_free_all_source_wins_content (void);
336extern void tui_del_window (struct tui_win_info *);
2a8854a7 337extern void tui_del_data_windows (tui_win_content, int);
dd1abb8c
AC
338extern struct tui_win_info *tui_partial_win_by_name (char *);
339extern char *tui_win_name (struct tui_gen_win_info *);
2a8854a7
AC
340extern enum tui_layout_type tui_current_layout (void);
341extern void tui_set_current_layout_to (enum tui_layout_type);
dd1abb8c
AC
342extern int tui_term_height (void);
343extern void tui_set_term_height_to (int);
344extern int tui_term_width (void);
345extern void tui_set_term_width_to (int);
dd1abb8c
AC
346extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
347extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
348extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
5b6fe301 349extern struct tui_list *tui_source_windows (void);
dd1abb8c
AC
350extern void tui_clear_source_windows (void);
351extern void tui_clear_source_windows_detail (void);
08ef48c5 352extern void tui_clear_win_detail (struct tui_win_info *);
dd1abb8c
AC
353extern void tui_add_to_source_windows (struct tui_win_info *);
354extern int tui_default_tab_len (void);
355extern void tui_set_default_tab_len (int);
356extern struct tui_win_info *tui_win_with_focus (void);
357extern void tui_set_win_with_focus (struct tui_win_info *);
5b6fe301 358extern struct tui_layout_def *tui_layout_def (void);
dd1abb8c
AC
359extern int tui_win_resized (void);
360extern void tui_set_win_resized_to (int);
361
362extern struct tui_win_info *tui_next_win (struct tui_win_info *);
363extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
364
08ef48c5 365extern void tui_add_to_source_windows (struct tui_win_info *);
c7c228ed 366
c906108c 367#endif /* TUI_DATA_H */
This page took 1.975769 seconds and 4 git commands to generate.