1130803Smarcel/* TUI data manipulation routines. 2130803Smarcel 3130803Smarcel Copyright 1998, 1999, 2000, 2001, 2002, 2004 Free Software 4130803Smarcel Foundation, Inc. 5130803Smarcel 6130803Smarcel Contributed by Hewlett-Packard Company. 7130803Smarcel 8130803Smarcel This file is part of GDB. 9130803Smarcel 10130803Smarcel This program is free software; you can redistribute it and/or modify 11130803Smarcel it under the terms of the GNU General Public License as published by 12130803Smarcel the Free Software Foundation; either version 2 of the License, or 13130803Smarcel (at your option) any later version. 14130803Smarcel 15130803Smarcel This program is distributed in the hope that it will be useful, 16130803Smarcel but WITHOUT ANY WARRANTY; without even the implied warranty of 17130803Smarcel MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18130803Smarcel GNU General Public License for more details. 19130803Smarcel 20130803Smarcel You should have received a copy of the GNU General Public License 21130803Smarcel along with this program; if not, write to the Free Software 22130803Smarcel Foundation, Inc., 59 Temple Place - Suite 330, 23130803Smarcel Boston, MA 02111-1307, USA. */ 24130803Smarcel 25130803Smarcel#ifndef TUI_DATA_H 26130803Smarcel#define TUI_DATA_H 27130803Smarcel 28130803Smarcel#include "tui/tui.h" /* For enum tui_win_type. */ 29130803Smarcel#include "gdb_curses.h" /* For WINDOW. */ 30130803Smarcel 31130803Smarcel/* This is a point definition. */ 32130803Smarcelstruct tui_point 33130803Smarcel{ 34130803Smarcel int x, y; 35130803Smarcel}; 36130803Smarcel 37130803Smarcel/* Generic window information */ 38130803Smarcelstruct tui_gen_win_info 39130803Smarcel{ 40130803Smarcel WINDOW *handle; /* window handle */ 41130803Smarcel enum tui_win_type type; /* type of window */ 42130803Smarcel int width; /* window width */ 43130803Smarcel int height; /* window height */ 44130803Smarcel struct tui_point origin; /* origin of window */ 45130803Smarcel void **content; /* content of window */ 46130803Smarcel int content_size; /* Size of content (# of elements) */ 47130803Smarcel int content_in_use; /* Can it be used, or is it already used? */ 48130803Smarcel int viewport_height; /* viewport height */ 49130803Smarcel int last_visible_line; /* index of last visible line */ 50130803Smarcel int is_visible; /* whether the window is visible or not */ 51130803Smarcel char *title; /* Window title to display. */ 52130803Smarcel}; 53130803Smarcel 54130803Smarcel/* Constant definitions */ 55130803Smarcel#define DEFAULT_TAB_LEN 8 56130803Smarcel#define NO_SRC_STRING "[ No Source Available ]" 57130803Smarcel#define NO_DISASSEM_STRING "[ No Assembly Available ]" 58130803Smarcel#define NO_REGS_STRING "[ Register Values Unavailable ]" 59130803Smarcel#define NO_DATA_STRING "[ No Data Values Displayed ]" 60130803Smarcel#define MAX_CONTENT_COUNT 100 61130803Smarcel#define SRC_NAME "SRC" 62130803Smarcel#define CMD_NAME "CMD" 63130803Smarcel#define DATA_NAME "REGS" 64130803Smarcel#define DISASSEM_NAME "ASM" 65130803Smarcel#define TUI_NULL_STR "" 66130803Smarcel#define DEFAULT_HISTORY_COUNT 25 67130803Smarcel#define BOX_WINDOW TRUE 68130803Smarcel#define DONT_BOX_WINDOW FALSE 69130803Smarcel#define HILITE TRUE 70130803Smarcel#define NO_HILITE FALSE 71130803Smarcel#define WITH_LOCATOR TRUE 72130803Smarcel#define NO_LOCATOR FALSE 73130803Smarcel#define EMPTY_SOURCE_PROMPT TRUE 74130803Smarcel#define NO_EMPTY_SOURCE_PROMPT FALSE 75130803Smarcel#define UNDEFINED_ITEM -1 76130803Smarcel#define MIN_WIN_HEIGHT 3 77130803Smarcel#define MIN_CMD_WIN_HEIGHT 3 78130803Smarcel 79130803Smarcel/* Strings to display in the TUI status line. */ 80130803Smarcel#define PROC_PREFIX "In: " 81130803Smarcel#define LINE_PREFIX "Line: " 82130803Smarcel#define PC_PREFIX "PC: " 83130803Smarcel#define SINGLE_KEY "(SingleKey)" 84130803Smarcel 85130803Smarcel/* Minimum/Maximum length of some fields displayed in the TUI status line. */ 86130803Smarcel#define MIN_LINE_WIDTH 4 /* Use at least 4 digits for line numbers. */ 87130803Smarcel#define MIN_PROC_WIDTH 12 88130803Smarcel#define MAX_TARGET_WIDTH 10 89130803Smarcel#define MAX_PID_WIDTH 14 90130803Smarcel 91130803Smarcel#define TUI_FLOAT_REGS_NAME "$FREGS" 92130803Smarcel#define TUI_FLOAT_REGS_NAME_LOWER "$fregs" 93130803Smarcel#define TUI_GENERAL_REGS_NAME "$GREGS" 94130803Smarcel#define TUI_GENERAL_REGS_NAME_LOWER "$gregs" 95130803Smarcel#define TUI_SPECIAL_REGS_NAME "$SREGS" 96130803Smarcel#define TUI_SPECIAL_REGS_NAME_LOWER "$sregs" 97130803Smarcel#define TUI_GENERAL_SPECIAL_REGS_NAME "$REGS" 98130803Smarcel#define TUI_GENERAL_SPECIAL_REGS_NAME_LOWER "$regs" 99130803Smarcel 100130803Smarcel/* Scroll direction enum. */ 101130803Smarcelenum tui_scroll_direction 102130803Smarcel{ 103130803Smarcel FORWARD_SCROLL, 104130803Smarcel BACKWARD_SCROLL, 105130803Smarcel LEFT_SCROLL, 106130803Smarcel RIGHT_SCROLL 107130803Smarcel}; 108130803Smarcel 109130803Smarcel 110130803Smarcel/* General list struct. */ 111130803Smarcelstruct tui_list 112130803Smarcel{ 113130803Smarcel void **list; 114130803Smarcel int count; 115130803Smarcel}; 116130803Smarcel 117130803Smarcel 118130803Smarcel/* The kinds of layouts available */ 119130803Smarcelenum tui_layout_type 120130803Smarcel{ 121130803Smarcel SRC_COMMAND, 122130803Smarcel DISASSEM_COMMAND, 123130803Smarcel SRC_DISASSEM_COMMAND, 124130803Smarcel SRC_DATA_COMMAND, 125130803Smarcel DISASSEM_DATA_COMMAND, 126130803Smarcel UNDEFINED_LAYOUT 127130803Smarcel}; 128130803Smarcel 129130803Smarcel/* Basic data types that can be displayed in the data window. */ 130130803Smarcelenum tui_data_type 131130803Smarcel{ 132130803Smarcel TUI_REGISTER, 133130803Smarcel TUI_SCALAR, 134130803Smarcel TUI_COMPLEX, 135130803Smarcel TUI_STRUCT 136130803Smarcel}; 137130803Smarcel 138130803Smarcel/* Types of register displays */ 139130803Smarcelenum tui_register_display_type 140130803Smarcel{ 141130803Smarcel TUI_UNDEFINED_REGS, 142130803Smarcel TUI_GENERAL_REGS, 143130803Smarcel TUI_SFLOAT_REGS, 144130803Smarcel TUI_DFLOAT_REGS, 145130803Smarcel TUI_SPECIAL_REGS, 146130803Smarcel TUI_GENERAL_AND_SPECIAL_REGS 147130803Smarcel}; 148130803Smarcel 149130803Smarcel/* Structure describing source line or line address */ 150130803Smarcelunion tui_line_or_address 151130803Smarcel{ 152130803Smarcel int line_no; 153130803Smarcel CORE_ADDR addr; 154130803Smarcel}; 155130803Smarcel 156130803Smarcel/* Current Layout definition */ 157130803Smarcelstruct tui_layout_def 158130803Smarcel{ 159130803Smarcel enum tui_win_type display_mode; 160130803Smarcel int split; 161130803Smarcel enum tui_register_display_type regs_display_type; 162130803Smarcel enum tui_register_display_type float_regs_display_type; 163130803Smarcel}; 164130803Smarcel 165130803Smarcel/* Elements in the Source/Disassembly Window */ 166130803Smarcelstruct tui_source_element 167130803Smarcel{ 168130803Smarcel char *line; 169130803Smarcel union tui_line_or_address line_or_addr; 170130803Smarcel int is_exec_point; 171130803Smarcel int has_break; 172130803Smarcel}; 173130803Smarcel 174130803Smarcel 175130803Smarcel/* Elements in the data display window content */ 176130803Smarcelstruct tui_data_element 177130803Smarcel{ 178130803Smarcel const char *name; 179130803Smarcel int item_no; /* the register number, or data display number */ 180130803Smarcel enum tui_data_type type; 181130803Smarcel void *value; 182130803Smarcel int highlight; 183130803Smarcel char *content; 184130803Smarcel}; 185130803Smarcel 186130803Smarcel 187130803Smarcel/* Elements in the command window content */ 188130803Smarcelstruct tui_command_element 189130803Smarcel{ 190130803Smarcel char *line; 191130803Smarcel}; 192130803Smarcel 193130803Smarcel 194130803Smarcel#define MAX_LOCATOR_ELEMENT_LEN 100 195130803Smarcel 196130803Smarcel/* Elements in the locator window content */ 197130803Smarcelstruct tui_locator_element 198130803Smarcel{ 199130803Smarcel char file_name[MAX_LOCATOR_ELEMENT_LEN]; 200130803Smarcel char proc_name[MAX_LOCATOR_ELEMENT_LEN]; 201130803Smarcel int line_no; 202130803Smarcel CORE_ADDR addr; 203130803Smarcel}; 204130803Smarcel 205130803Smarcel/* Flags to tell what kind of breakpoint is at current line. */ 206130803Smarcel#define TUI_BP_ENABLED 0x01 207130803Smarcel#define TUI_BP_DISABLED 0x02 208130803Smarcel#define TUI_BP_HIT 0x04 209130803Smarcel#define TUI_BP_CONDITIONAL 0x08 210130803Smarcel#define TUI_BP_HARDWARE 0x10 211130803Smarcel 212130803Smarcel/* Position of breakpoint markers in the exec info string. */ 213130803Smarcel#define TUI_BP_HIT_POS 0 214130803Smarcel#define TUI_BP_BREAK_POS 1 215130803Smarcel#define TUI_EXEC_POS 2 216130803Smarcel#define TUI_EXECINFO_SIZE 4 217130803Smarcel 218130803Smarceltypedef char tui_exec_info_content[TUI_EXECINFO_SIZE]; 219130803Smarcel 220130803Smarcel/* An content element in a window */ 221130803Smarcelunion tui_which_element 222130803Smarcel{ 223130803Smarcel struct tui_source_element source; /* the source elements */ 224130803Smarcel struct tui_gen_win_info data_window; /* data display elements */ 225130803Smarcel struct tui_data_element data; /* elements of data_window */ 226130803Smarcel struct tui_command_element command; /* command elements */ 227130803Smarcel struct tui_locator_element locator; /* locator elements */ 228130803Smarcel tui_exec_info_content simple_string; /* simple char based elements */ 229130803Smarcel}; 230130803Smarcel 231130803Smarcelstruct tui_win_element 232130803Smarcel{ 233130803Smarcel int highlight; 234130803Smarcel union tui_which_element which_element; 235130803Smarcel}; 236130803Smarcel 237130803Smarcel 238130803Smarcel/* This describes the content of the window. */ 239130803Smarceltypedef struct tui_win_element **tui_win_content; 240130803Smarcel 241130803Smarcel 242130803Smarcel/* This struct defines the specific information about a data display window */ 243130803Smarcelstruct tui_data_info 244130803Smarcel{ 245130803Smarcel tui_win_content data_content; /* start of data display content */ 246130803Smarcel int data_content_count; 247130803Smarcel tui_win_content regs_content; /* start of regs display content */ 248130803Smarcel int regs_content_count; 249130803Smarcel enum tui_register_display_type regs_display_type; 250130803Smarcel int regs_column_count; 251130803Smarcel int display_regs; /* Should regs be displayed at all? */ 252130803Smarcel struct reggroup *current_group; 253130803Smarcel}; 254130803Smarcel 255130803Smarcel 256130803Smarcelstruct tui_source_info 257130803Smarcel{ 258130803Smarcel int has_locator; /* Does locator belongs to this window? */ 259130803Smarcel /* Execution information window. */ 260130803Smarcel struct tui_gen_win_info *execution_info; 261130803Smarcel int horizontal_offset; /* used for horizontal scroll */ 262130803Smarcel union tui_line_or_address start_line_or_addr; 263130803Smarcel char* filename; 264130803Smarcel}; 265130803Smarcel 266130803Smarcel 267130803Smarcelstruct tui_command_info 268130803Smarcel{ 269130803Smarcel int cur_line; /* The current line position */ 270130803Smarcel int curch; /* The current cursor position */ 271130803Smarcel int start_line; 272130803Smarcel}; 273130803Smarcel 274130803Smarcel 275130803Smarcel/* This defines information about each logical window */ 276130803Smarcelstruct tui_win_info 277130803Smarcel{ 278130803Smarcel struct tui_gen_win_info generic; /* general window information */ 279130803Smarcel union 280130803Smarcel { 281130803Smarcel struct tui_source_info source_info; 282130803Smarcel struct tui_data_info data_display_info; 283130803Smarcel struct tui_command_info command_info; 284130803Smarcel void *opaque; 285130803Smarcel } 286130803Smarcel detail; 287130803Smarcel int can_highlight; /* Can this window ever be highlighted? */ 288130803Smarcel int is_highlighted; /* Is this window highlighted? */ 289130803Smarcel}; 290130803Smarcel 291130803Smarcelextern int tui_win_is_source_type (enum tui_win_type win_type); 292130803Smarcelextern int tui_win_is_auxillary (enum tui_win_type win_type); 293130803Smarcelextern int tui_win_has_locator (struct tui_win_info *win_info); 294130803Smarcelextern void tui_set_win_highlight (struct tui_win_info *win_info, 295130803Smarcel int highlight); 296130803Smarcel 297130803Smarcel 298130803Smarcel/* Global Data */ 299130803Smarcelextern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]); 300130803Smarcel 301130803Smarcel#define TUI_SRC_WIN tui_win_list[SRC_WIN] 302130803Smarcel#define TUI_DISASM_WIN tui_win_list[DISASSEM_WIN] 303130803Smarcel#define TUI_DATA_WIN tui_win_list[DATA_WIN] 304130803Smarcel#define TUI_CMD_WIN tui_win_list[CMD_WIN] 305130803Smarcel 306130803Smarcel/* Data Manipulation Functions */ 307130803Smarcelextern void tui_initialize_static_data (void); 308130803Smarcelextern struct tui_gen_win_info *tui_alloc_generic_win_info (void); 309130803Smarcelextern struct tui_win_info *tui_alloc_win_info (enum tui_win_type); 310130803Smarcelextern void tui_init_generic_part (struct tui_gen_win_info *); 311130803Smarcelextern void tui_init_win_info (struct tui_win_info *); 312130803Smarcelextern tui_win_content tui_alloc_content (int, enum tui_win_type); 313130803Smarcelextern int tui_add_content_elements (struct tui_gen_win_info *, int); 314130803Smarcelextern void tui_init_content_element (struct tui_win_element *, enum tui_win_type); 315130803Smarcelextern void tui_free_window (struct tui_win_info *); 316130803Smarcelextern void tui_free_win_content (struct tui_gen_win_info *); 317130803Smarcelextern void tui_free_data_content (tui_win_content, int); 318130803Smarcelextern void tui_free_all_source_wins_content (void); 319130803Smarcelextern void tui_del_window (struct tui_win_info *); 320130803Smarcelextern void tui_del_data_windows (tui_win_content, int); 321130803Smarcelextern struct tui_win_info *tui_partial_win_by_name (char *); 322130803Smarcelextern char *tui_win_name (struct tui_gen_win_info *); 323130803Smarcelextern enum tui_layout_type tui_current_layout (void); 324130803Smarcelextern void tui_set_current_layout_to (enum tui_layout_type); 325130803Smarcelextern int tui_term_height (void); 326130803Smarcelextern void tui_set_term_height_to (int); 327130803Smarcelextern int tui_term_width (void); 328130803Smarcelextern void tui_set_term_width_to (int); 329130803Smarcelextern void tui_set_gen_win_origin (struct tui_gen_win_info *, int, int); 330130803Smarcelextern struct tui_gen_win_info *tui_locator_win_info_ptr (void); 331130803Smarcelextern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void); 332130803Smarcelextern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void); 333130803Smarcelextern struct tui_list * tui_source_windows (void); 334130803Smarcelextern void tui_clear_source_windows (void); 335130803Smarcelextern void tui_clear_source_windows_detail (void); 336130803Smarcelextern void tui_clear_win_detail (struct tui_win_info * win_info); 337130803Smarcelextern void tui_add_to_source_windows (struct tui_win_info *); 338130803Smarcelextern int tui_default_tab_len (void); 339130803Smarcelextern void tui_set_default_tab_len (int); 340130803Smarcelextern struct tui_win_info *tui_win_with_focus (void); 341130803Smarcelextern void tui_set_win_with_focus (struct tui_win_info *); 342130803Smarcelextern struct tui_layout_def * tui_layout_def (void); 343130803Smarcelextern int tui_win_resized (void); 344130803Smarcelextern void tui_set_win_resized_to (int); 345130803Smarcel 346130803Smarcelextern struct tui_win_info *tui_next_win (struct tui_win_info *); 347130803Smarcelextern struct tui_win_info *tui_prev_win (struct tui_win_info *); 348130803Smarcel 349130803Smarcelextern void tui_add_to_source_windows (struct tui_win_info * win_info); 350130803Smarcel 351130803Smarcel#endif /* TUI_DATA_H */ 352