1 /* TUI data manipulation routines. 2 3 Copyright (C) 1998-2015 Free Software Foundation, Inc. 4 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 11 the Free Software Foundation; either version 3 of the License, or 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 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 21 22 #ifndef TUI_DATA_H 23 #define TUI_DATA_H 24 25 #include "tui/tui.h" /* For enum tui_win_type. */ 26 #include "gdb_curses.h" /* For WINDOW. */ 27 28 /* This is a point definition. */ 29 struct tui_point 30 { 31 int x, y; 32 }; 33 34 struct tui_win_element; 35 36 /* This describes the content of the window. */ 37 typedef struct tui_win_element **tui_win_content; 38 39 /* Generic window information. */ 40 struct tui_gen_win_info 41 { 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. */ 47 tui_win_content content; /* Content of window. */ 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. */ 54 }; 55 56 /* Constant definitions. */ 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 80 81 /* Strings to display in the TUI status line. */ 82 #define PROC_PREFIX "In: " 83 #define LINE_PREFIX "L" 84 #define PC_PREFIX "PC: " 85 #define SINGLE_KEY "(SingleKey)" 86 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. */ 91 #define MIN_PROC_WIDTH 12 92 #define MAX_TARGET_WIDTH 10 93 #define MAX_PID_WIDTH 19 94 95 /* Scroll direction enum. */ 96 enum tui_scroll_direction 97 { 98 FORWARD_SCROLL, 99 BACKWARD_SCROLL, 100 LEFT_SCROLL, 101 RIGHT_SCROLL 102 }; 103 104 105 /* General list struct. */ 106 struct tui_list 107 { 108 struct tui_win_info **list; 109 int count; 110 }; 111 112 113 /* The kinds of layouts available. */ 114 enum 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 }; 123 124 /* Basic data types that can be displayed in the data window. */ 125 enum tui_data_type 126 { 127 TUI_REGISTER, 128 TUI_SCALAR, 129 TUI_COMPLEX, 130 TUI_STRUCT 131 }; 132 133 enum tui_line_or_address_kind 134 { 135 LOA_LINE, 136 LOA_ADDRESS 137 }; 138 139 /* Structure describing source line or line address. */ 140 struct tui_line_or_address 141 { 142 enum tui_line_or_address_kind loa; 143 union 144 { 145 int line_no; 146 CORE_ADDR addr; 147 } u; 148 }; 149 150 /* Current Layout definition. */ 151 struct tui_layout_def 152 { 153 enum tui_win_type display_mode; 154 int split; 155 }; 156 157 /* Elements in the Source/Disassembly Window. */ 158 struct tui_source_element 159 { 160 char *line; 161 struct tui_line_or_address line_or_addr; 162 int is_exec_point; 163 int has_break; 164 }; 165 166 167 /* Elements in the data display window content. */ 168 struct tui_data_element 169 { 170 const char *name; 171 int item_no; /* The register number, or data display 172 number. */ 173 enum tui_data_type type; 174 void *value; 175 int highlight; 176 char *content; 177 }; 178 179 180 /* Elements in the command window content. */ 181 struct tui_command_element 182 { 183 char *line; 184 }; 185 186 #ifdef PATH_MAX 187 # define MAX_LOCATOR_ELEMENT_LEN PATH_MAX 188 #else 189 # define MAX_LOCATOR_ELEMENT_LEN 1024 190 #endif 191 192 /* Elements in the locator window content. */ 193 struct tui_locator_element 194 { 195 /* Resolved absolute filename as returned by symtab_to_fullname. */ 196 char full_name[MAX_LOCATOR_ELEMENT_LEN]; 197 char proc_name[MAX_LOCATOR_ELEMENT_LEN]; 198 int line_no; 199 CORE_ADDR addr; 200 /* Architecture associated with code at this location. */ 201 struct gdbarch *gdbarch; 202 }; 203 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 217 typedef char tui_exec_info_content[TUI_EXECINFO_SIZE]; 218 219 /* An content element in a window. */ 220 union tui_which_element 221 { 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. */ 228 }; 229 230 struct tui_win_element 231 { 232 int highlight; 233 union tui_which_element which_element; 234 }; 235 236 /* This struct defines the specific information about a data display 237 window. */ 238 struct tui_data_info 239 { 240 tui_win_content data_content; /* Start of data display content. */ 241 int data_content_count; 242 tui_win_content regs_content; /* Start of regs display content. */ 243 int regs_content_count; 244 int regs_column_count; 245 int display_regs; /* Should regs be displayed at all? */ 246 struct reggroup *current_group; 247 }; 248 249 250 struct tui_source_info 251 { 252 int has_locator; /* Does locator belongs to this window? */ 253 /* Execution information window. */ 254 struct tui_gen_win_info *execution_info; 255 int horizontal_offset; /* Used for horizontal scroll. */ 256 struct tui_line_or_address start_line_or_addr; 257 258 /* It is the resolved form as returned by symtab_to_fullname. */ 259 char *fullname; 260 261 /* Architecture associated with code at this location. */ 262 struct gdbarch *gdbarch; 263 }; 264 265 266 struct tui_command_info 267 { 268 int cur_line; /* The current line position. */ 269 int curch; /* The current cursor position. */ 270 int start_line; 271 }; 272 273 274 /* This defines information about each logical window. */ 275 struct tui_win_info 276 { 277 struct tui_gen_win_info generic; /* General window information. */ 278 union 279 { 280 struct tui_source_info source_info; 281 struct tui_data_info data_display_info; 282 struct tui_command_info command_info; 283 void *opaque; 284 } 285 detail; 286 int can_highlight; /* Can this window ever be highlighted? */ 287 int is_highlighted; /* Is this window highlighted? */ 288 }; 289 290 extern int tui_win_is_source_type (enum tui_win_type win_type); 291 extern int tui_win_is_auxillary (enum tui_win_type win_type); 292 extern int tui_win_has_locator (struct tui_win_info *win_info); 293 extern void tui_set_win_highlight (struct tui_win_info *win_info, 294 int highlight); 295 296 297 /* Global Data. */ 298 extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]); 299 300 #define TUI_SRC_WIN tui_win_list[SRC_WIN] 301 #define TUI_DISASM_WIN tui_win_list[DISASSEM_WIN] 302 #define TUI_DATA_WIN tui_win_list[DATA_WIN] 303 #define TUI_CMD_WIN tui_win_list[CMD_WIN] 304 305 /* Data Manipulation Functions. */ 306 extern void tui_initialize_static_data (void); 307 extern struct tui_gen_win_info *tui_alloc_generic_win_info (void); 308 extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type); 309 extern void tui_init_generic_part (struct tui_gen_win_info *); 310 extern void tui_init_win_info (struct tui_win_info *); 311 extern tui_win_content tui_alloc_content (int, enum tui_win_type); 312 extern int tui_add_content_elements (struct tui_gen_win_info *, 313 int); 314 extern void tui_init_content_element (struct tui_win_element *, 315 enum tui_win_type); 316 extern void tui_free_window (struct tui_win_info *); 317 extern void tui_free_win_content (struct tui_gen_win_info *); 318 extern void tui_free_data_content (tui_win_content, int); 319 extern void tui_free_all_source_wins_content (void); 320 extern void tui_del_window (struct tui_win_info *); 321 extern void tui_del_data_windows (tui_win_content, int); 322 extern struct tui_win_info *tui_partial_win_by_name (char *); 323 extern const char *tui_win_name (const struct tui_gen_win_info *); 324 extern enum tui_layout_type tui_current_layout (void); 325 extern void tui_set_current_layout_to (enum tui_layout_type); 326 extern int tui_term_height (void); 327 extern void tui_set_term_height_to (int); 328 extern int tui_term_width (void); 329 extern void tui_set_term_width_to (int); 330 extern struct tui_gen_win_info *tui_locator_win_info_ptr (void); 331 extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void); 332 extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void); 333 extern struct tui_list *tui_source_windows (void); 334 extern void tui_clear_source_windows (void); 335 extern void tui_clear_source_windows_detail (void); 336 extern void tui_clear_win_detail (struct tui_win_info *); 337 extern void tui_add_to_source_windows (struct tui_win_info *); 338 extern int tui_default_tab_len (void); 339 extern void tui_set_default_tab_len (int); 340 extern struct tui_win_info *tui_win_with_focus (void); 341 extern void tui_set_win_with_focus (struct tui_win_info *); 342 extern struct tui_layout_def *tui_layout_def (void); 343 extern int tui_win_resized (void); 344 extern void tui_set_win_resized_to (int); 345 346 extern struct tui_win_info *tui_next_win (struct tui_win_info *); 347 extern struct tui_win_info *tui_prev_win (struct tui_win_info *); 348 349 extern void tui_add_to_source_windows (struct tui_win_info *); 350 351 #endif /* TUI_DATA_H */ 352