Home | History | Annotate | Line # | Download | only in tui
tui-data.h revision 1.8
      1 /* TUI data manipulation routines.
      2 
      3    Copyright (C) 1998-2019 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_TUI_DATA_H
     23 #define TUI_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   union tui_which_element which_element;
    233 };
    234 
    235 /* This struct defines the specific information about a data display
    236    window.  */
    237 struct tui_data_info
    238 {
    239   tui_win_content data_content;	/* Start of data display content.  */
    240   int data_content_count;
    241   tui_win_content regs_content;	/* Start of regs display content.  */
    242   int regs_content_count;
    243   int regs_column_count;
    244   int display_regs;		/* Should regs be displayed at all?  */
    245   struct reggroup *current_group;
    246 };
    247 
    248 
    249 struct tui_source_info
    250 {
    251   int has_locator;		/* Does locator belongs to this window?  */
    252   /* Execution information window.  */
    253   struct tui_gen_win_info *execution_info;
    254   int horizontal_offset;	/* Used for horizontal scroll.  */
    255   struct tui_line_or_address start_line_or_addr;
    256 
    257   /* It is the resolved form as returned by symtab_to_fullname.  */
    258   char *fullname;
    259 
    260   /* Architecture associated with code at this location.  */
    261   struct gdbarch *gdbarch;
    262 };
    263 
    264 
    265 struct tui_command_info
    266 {
    267   int start_line;
    268 };
    269 
    270 
    271 /* This defines information about each logical window.  */
    272 struct tui_win_info
    273 {
    274   struct tui_gen_win_info generic;	/* General window information.  */
    275   union
    276   {
    277     struct tui_source_info source_info;
    278     struct tui_data_info data_display_info;
    279     struct tui_command_info command_info;
    280   }
    281   detail;
    282   int can_highlight;	/* Can this window ever be highlighted?  */
    283   int is_highlighted;	/* Is this window highlighted?  */
    284 };
    285 
    286 extern int tui_win_is_source_type (enum tui_win_type win_type);
    287 extern int tui_win_is_auxillary (enum tui_win_type win_type);
    288 extern int tui_win_has_locator (struct tui_win_info *win_info);
    289 extern void tui_set_win_highlight (struct tui_win_info *win_info,
    290 				   int highlight);
    291 
    292 
    293 /* Global Data.  */
    294 extern struct tui_win_info *tui_win_list[MAX_MAJOR_WINDOWS];
    295 
    296 #define TUI_SRC_WIN     tui_win_list[SRC_WIN]
    297 #define TUI_DISASM_WIN	tui_win_list[DISASSEM_WIN]
    298 #define TUI_DATA_WIN    tui_win_list[DATA_WIN]
    299 #define TUI_CMD_WIN     tui_win_list[CMD_WIN]
    300 
    301 /* Data Manipulation Functions.  */
    302 extern void tui_initialize_static_data (void);
    303 extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
    304 extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
    305 extern void tui_init_generic_part (struct tui_gen_win_info *);
    306 extern void tui_init_win_info (struct tui_win_info *);
    307 extern tui_win_content tui_alloc_content (int, enum tui_win_type);
    308 extern int tui_add_content_elements (struct tui_gen_win_info *,
    309 				     int);
    310 extern void tui_init_content_element (struct tui_win_element *,
    311 				      enum tui_win_type);
    312 extern void tui_free_window (struct tui_win_info *);
    313 extern void tui_free_win_content (struct tui_gen_win_info *);
    314 extern void tui_free_data_content (tui_win_content, int);
    315 extern void tui_free_all_source_wins_content (void);
    316 extern void tui_del_window (struct tui_win_info *);
    317 extern void tui_del_data_windows (tui_win_content, int);
    318 extern struct tui_win_info *tui_partial_win_by_name (const char *);
    319 extern const char *tui_win_name (const struct tui_gen_win_info *);
    320 extern enum tui_layout_type tui_current_layout (void);
    321 extern void tui_set_current_layout_to (enum tui_layout_type);
    322 extern int tui_term_height (void);
    323 extern void tui_set_term_height_to (int);
    324 extern int tui_term_width (void);
    325 extern void tui_set_term_width_to (int);
    326 extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
    327 extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
    328 extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
    329 extern struct tui_list *tui_source_windows (void);
    330 extern void tui_clear_source_windows (void);
    331 extern void tui_clear_source_windows_detail (void);
    332 extern void tui_clear_win_detail (struct tui_win_info *);
    333 extern void tui_add_to_source_windows (struct tui_win_info *);
    334 extern struct tui_win_info *tui_win_with_focus (void);
    335 extern void tui_set_win_with_focus (struct tui_win_info *);
    336 extern struct tui_layout_def *tui_layout_def (void);
    337 extern int tui_win_resized (void);
    338 extern void tui_set_win_resized_to (int);
    339 
    340 extern struct tui_win_info *tui_next_win (struct tui_win_info *);
    341 extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
    342 
    343 extern void tui_add_to_source_windows (struct tui_win_info *);
    344 
    345 extern unsigned int tui_tab_width;
    346 
    347 #endif /* TUI_TUI_DATA_H */
    348