Home | History | Annotate | Line # | Download | only in tui
tui-data.h revision 1.6
      1 /* TUI data manipulation routines.
      2 
      3    Copyright (C) 1998-2016 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 start_line;
    269 };
    270 
    271 
    272 /* This defines information about each logical window.  */
    273 struct tui_win_info
    274 {
    275   struct tui_gen_win_info generic;	/* General window information.  */
    276   union
    277   {
    278     struct tui_source_info source_info;
    279     struct tui_data_info data_display_info;
    280     struct tui_command_info command_info;
    281     void *opaque;
    282   }
    283   detail;
    284   int can_highlight;	/* Can this window ever be highlighted?  */
    285   int is_highlighted;	/* Is this window highlighted?  */
    286 };
    287 
    288 extern int tui_win_is_source_type (enum tui_win_type win_type);
    289 extern int tui_win_is_auxillary (enum tui_win_type win_type);
    290 extern int tui_win_has_locator (struct tui_win_info *win_info);
    291 extern void tui_set_win_highlight (struct tui_win_info *win_info,
    292 				   int highlight);
    293 
    294 
    295 /* Global Data.  */
    296 extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
    297 
    298 #define TUI_SRC_WIN     tui_win_list[SRC_WIN]
    299 #define TUI_DISASM_WIN	tui_win_list[DISASSEM_WIN]
    300 #define TUI_DATA_WIN    tui_win_list[DATA_WIN]
    301 #define TUI_CMD_WIN     tui_win_list[CMD_WIN]
    302 
    303 /* Data Manipulation Functions.  */
    304 extern void tui_initialize_static_data (void);
    305 extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
    306 extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
    307 extern void tui_init_generic_part (struct tui_gen_win_info *);
    308 extern void tui_init_win_info (struct tui_win_info *);
    309 extern tui_win_content tui_alloc_content (int, enum tui_win_type);
    310 extern int tui_add_content_elements (struct tui_gen_win_info *,
    311 				     int);
    312 extern void tui_init_content_element (struct tui_win_element *,
    313 				      enum tui_win_type);
    314 extern void tui_free_window (struct tui_win_info *);
    315 extern void tui_free_win_content (struct tui_gen_win_info *);
    316 extern void tui_free_data_content (tui_win_content, int);
    317 extern void tui_free_all_source_wins_content (void);
    318 extern void tui_del_window (struct tui_win_info *);
    319 extern void tui_del_data_windows (tui_win_content, int);
    320 extern struct tui_win_info *tui_partial_win_by_name (char *);
    321 extern const char *tui_win_name (const struct tui_gen_win_info *);
    322 extern enum tui_layout_type tui_current_layout (void);
    323 extern void tui_set_current_layout_to (enum tui_layout_type);
    324 extern int tui_term_height (void);
    325 extern void tui_set_term_height_to (int);
    326 extern int tui_term_width (void);
    327 extern void tui_set_term_width_to (int);
    328 extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
    329 extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
    330 extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
    331 extern struct tui_list *tui_source_windows (void);
    332 extern void tui_clear_source_windows (void);
    333 extern void tui_clear_source_windows_detail (void);
    334 extern void tui_clear_win_detail (struct tui_win_info *);
    335 extern void tui_add_to_source_windows (struct tui_win_info *);
    336 extern int tui_default_tab_len (void);
    337 extern void tui_set_default_tab_len (int);
    338 extern struct tui_win_info *tui_win_with_focus (void);
    339 extern void tui_set_win_with_focus (struct tui_win_info *);
    340 extern struct tui_layout_def *tui_layout_def (void);
    341 extern int tui_win_resized (void);
    342 extern void tui_set_win_resized_to (int);
    343 
    344 extern struct tui_win_info *tui_next_win (struct tui_win_info *);
    345 extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
    346 
    347 extern void tui_add_to_source_windows (struct tui_win_info *);
    348 
    349 #endif /* TUI_DATA_H */
    350