Home | History | Annotate | Line # | Download | only in tui
tui-data.h revision 1.1
      1 /* TUI data manipulation routines.
      2 
      3    Copyright (C) 1998-2014 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 /* Generic window information.  */
     35 struct tui_gen_win_info
     36 {
     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.  */
     49 };
     50 
     51 /* Constant definitions.  */
     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
     75 
     76 /* Strings to display in the TUI status line.  */
     77 #define PROC_PREFIX             "In: "
     78 #define LINE_PREFIX             "Line: "
     79 #define PC_PREFIX               "PC: "
     80 #define SINGLE_KEY              "(SingleKey)"
     81 
     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.  */
     86 #define MIN_PROC_WIDTH    12
     87 #define MAX_TARGET_WIDTH  10
     88 #define MAX_PID_WIDTH     14
     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 
     99 /* Scroll direction enum.  */
    100 enum tui_scroll_direction
    101 {
    102   FORWARD_SCROLL,
    103   BACKWARD_SCROLL,
    104   LEFT_SCROLL,
    105   RIGHT_SCROLL
    106 };
    107 
    108 
    109 /* General list struct.  */
    110 struct tui_list
    111 {
    112   struct tui_win_info **list;
    113   int count;
    114 };
    115 
    116 
    117 /* The kinds of layouts available.  */
    118 enum 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 };
    127 
    128 /* Basic data types that can be displayed in the data window.  */
    129 enum tui_data_type
    130 {
    131   TUI_REGISTER,
    132   TUI_SCALAR,
    133   TUI_COMPLEX,
    134   TUI_STRUCT
    135 };
    136 
    137 /* Types of register displays.  */
    138 enum 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 };
    147 
    148 /* Structure describing source line or line address.  */
    149 struct tui_line_or_address
    150 {
    151   enum { LOA_LINE, LOA_ADDRESS } loa;
    152   union
    153     {
    154       int line_no;
    155       CORE_ADDR addr;
    156     } u;
    157 };
    158 
    159 /* Current Layout definition.  */
    160 struct tui_layout_def
    161 {
    162   enum tui_win_type display_mode;
    163   int split;
    164   enum tui_register_display_type regs_display_type;
    165   enum tui_register_display_type float_regs_display_type;
    166 };
    167 
    168 /* Elements in the Source/Disassembly Window.  */
    169 struct tui_source_element
    170 {
    171   char *line;
    172   struct tui_line_or_address line_or_addr;
    173   int is_exec_point;
    174   int has_break;
    175 };
    176 
    177 
    178 /* Elements in the data display window content.  */
    179 struct tui_data_element
    180 {
    181   const char *name;
    182   int item_no;		/* The register number, or data display
    183 			   number.  */
    184   enum tui_data_type type;
    185   void *value;
    186   int highlight;
    187   char *content;
    188 };
    189 
    190 
    191 /* Elements in the command window content.  */
    192 struct tui_command_element
    193 {
    194   char *line;
    195 };
    196 
    197 #ifdef PATH_MAX
    198 # define MAX_LOCATOR_ELEMENT_LEN        PATH_MAX
    199 #else
    200 # define MAX_LOCATOR_ELEMENT_LEN        1024
    201 #endif
    202 
    203 /* Elements in the locator window content.  */
    204 struct tui_locator_element
    205 {
    206   /* Resolved absolute filename as returned by symtab_to_fullname.  */
    207   char full_name[MAX_LOCATOR_ELEMENT_LEN];
    208   char proc_name[MAX_LOCATOR_ELEMENT_LEN];
    209   int line_no;
    210   CORE_ADDR addr;
    211   /* Architecture associated with code at this location.  */
    212   struct gdbarch *gdbarch;
    213 };
    214 
    215 /* Flags to tell what kind of breakpoint is at current line.  */
    216 #define TUI_BP_ENABLED      0x01
    217 #define TUI_BP_DISABLED     0x02
    218 #define TUI_BP_HIT          0x04
    219 #define TUI_BP_CONDITIONAL  0x08
    220 #define TUI_BP_HARDWARE     0x10
    221 
    222 /* Position of breakpoint markers in the exec info string.  */
    223 #define TUI_BP_HIT_POS      0
    224 #define TUI_BP_BREAK_POS    1
    225 #define TUI_EXEC_POS        2
    226 #define TUI_EXECINFO_SIZE   4
    227 
    228 typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
    229 
    230 /* An content element in a window.  */
    231 union tui_which_element
    232 {
    233   struct tui_source_element source;	/* The source elements.  */
    234   struct tui_gen_win_info data_window;	/* Data display elements.  */
    235   struct tui_data_element data;		/* Elements of data_window.  */
    236   struct tui_command_element command;	/* Command elements.  */
    237   struct tui_locator_element locator;	/* Locator elements.  */
    238   tui_exec_info_content simple_string;	/* Simple char based elements.  */
    239 };
    240 
    241 struct tui_win_element
    242 {
    243   int highlight;
    244   union tui_which_element which_element;
    245 };
    246 
    247 
    248 /* This describes the content of the window.  */
    249 typedef struct tui_win_element **tui_win_content;
    250 
    251 
    252 /* This struct defines the specific information about a data display
    253    window.  */
    254 struct tui_data_info
    255 {
    256   tui_win_content data_content;	/* Start of data display content.  */
    257   int data_content_count;
    258   tui_win_content regs_content;	/* Start of regs display content.  */
    259   int regs_content_count;
    260   enum tui_register_display_type regs_display_type;
    261   int regs_column_count;
    262   int display_regs;		/* Should regs be displayed at all?  */
    263   struct reggroup *current_group;
    264 };
    265 
    266 
    267 struct tui_source_info
    268 {
    269   int has_locator;		/* Does locator belongs to this window?  */
    270   /* Execution information window.  */
    271   struct tui_gen_win_info *execution_info;
    272   int horizontal_offset;	/* Used for horizontal scroll.  */
    273   struct tui_line_or_address start_line_or_addr;
    274 
    275   /* It is the resolved form as returned by symtab_to_fullname.  */
    276   char *fullname;
    277 
    278   /* Architecture associated with code at this location.  */
    279   struct gdbarch *gdbarch;
    280 };
    281 
    282 
    283 struct tui_command_info
    284 {
    285   int cur_line;			/* The current line position.  */
    286   int curch;			/* The current cursor position.  */
    287   int start_line;
    288 };
    289 
    290 
    291 /* This defines information about each logical window.  */
    292 struct tui_win_info
    293 {
    294   struct tui_gen_win_info generic;	/* General window information.  */
    295   union
    296   {
    297     struct tui_source_info source_info;
    298     struct tui_data_info data_display_info;
    299     struct tui_command_info command_info;
    300     void *opaque;
    301   }
    302   detail;
    303   int can_highlight;	/* Can this window ever be highlighted?  */
    304   int is_highlighted;	/* Is this window highlighted?  */
    305 };
    306 
    307 extern int tui_win_is_source_type (enum tui_win_type win_type);
    308 extern int tui_win_is_auxillary (enum tui_win_type win_type);
    309 extern int tui_win_has_locator (struct tui_win_info *win_info);
    310 extern void tui_set_win_highlight (struct tui_win_info *win_info,
    311 				   int highlight);
    312 
    313 
    314 /* Global Data.  */
    315 extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
    316 
    317 #define TUI_SRC_WIN     tui_win_list[SRC_WIN]
    318 #define TUI_DISASM_WIN	tui_win_list[DISASSEM_WIN]
    319 #define TUI_DATA_WIN    tui_win_list[DATA_WIN]
    320 #define TUI_CMD_WIN     tui_win_list[CMD_WIN]
    321 
    322 /* Data Manipulation Functions.  */
    323 extern void tui_initialize_static_data (void);
    324 extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
    325 extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
    326 extern void tui_init_generic_part (struct tui_gen_win_info *);
    327 extern void tui_init_win_info (struct tui_win_info *);
    328 extern tui_win_content tui_alloc_content (int, enum tui_win_type);
    329 extern int tui_add_content_elements (struct tui_gen_win_info *,
    330 				     int);
    331 extern void tui_init_content_element (struct tui_win_element *,
    332 				      enum tui_win_type);
    333 extern void tui_free_window (struct tui_win_info *);
    334 extern void tui_free_win_content (struct tui_gen_win_info *);
    335 extern void tui_free_data_content (tui_win_content, int);
    336 extern void tui_free_all_source_wins_content (void);
    337 extern void tui_del_window (struct tui_win_info *);
    338 extern void tui_del_data_windows (tui_win_content, int);
    339 extern struct tui_win_info *tui_partial_win_by_name (char *);
    340 extern char *tui_win_name (struct tui_gen_win_info *);
    341 extern enum tui_layout_type tui_current_layout (void);
    342 extern void tui_set_current_layout_to (enum tui_layout_type);
    343 extern int tui_term_height (void);
    344 extern void tui_set_term_height_to (int);
    345 extern int tui_term_width (void);
    346 extern void tui_set_term_width_to (int);
    347 extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
    348 extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
    349 extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
    350 extern struct tui_list *tui_source_windows (void);
    351 extern void tui_clear_source_windows (void);
    352 extern void tui_clear_source_windows_detail (void);
    353 extern void tui_clear_win_detail (struct tui_win_info *);
    354 extern void tui_add_to_source_windows (struct tui_win_info *);
    355 extern int tui_default_tab_len (void);
    356 extern void tui_set_default_tab_len (int);
    357 extern struct tui_win_info *tui_win_with_focus (void);
    358 extern void tui_set_win_with_focus (struct tui_win_info *);
    359 extern struct tui_layout_def *tui_layout_def (void);
    360 extern int tui_win_resized (void);
    361 extern void tui_set_win_resized_to (int);
    362 
    363 extern struct tui_win_info *tui_next_win (struct tui_win_info *);
    364 extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
    365 
    366 extern void tui_add_to_source_windows (struct tui_win_info *);
    367 
    368 #endif /* TUI_DATA_H */
    369