Home | History | Annotate | Line # | Download | only in tui
tui-data.h revision 1.5
      1  1.1  christos /* TUI data manipulation routines.
      2  1.1  christos 
      3  1.3  christos    Copyright (C) 1998-2015 Free Software Foundation, Inc.
      4  1.1  christos 
      5  1.1  christos    Contributed by Hewlett-Packard Company.
      6  1.1  christos 
      7  1.1  christos    This file is part of GDB.
      8  1.1  christos 
      9  1.1  christos    This program is free software; you can redistribute it and/or modify
     10  1.1  christos    it under the terms of the GNU General Public License as published by
     11  1.1  christos    the Free Software Foundation; either version 3 of the License, or
     12  1.1  christos    (at your option) any later version.
     13  1.1  christos 
     14  1.1  christos    This program is distributed in the hope that it will be useful,
     15  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     16  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17  1.1  christos    GNU General Public License for more details.
     18  1.1  christos 
     19  1.1  christos    You should have received a copy of the GNU General Public License
     20  1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     21  1.1  christos 
     22  1.1  christos #ifndef TUI_DATA_H
     23  1.1  christos #define TUI_DATA_H
     24  1.1  christos 
     25  1.1  christos #include "tui/tui.h"	/* For enum tui_win_type.  */
     26  1.1  christos #include "gdb_curses.h"	/* For WINDOW.  */
     27  1.1  christos 
     28  1.1  christos /* This is a point definition.  */
     29  1.1  christos struct tui_point
     30  1.1  christos {
     31  1.1  christos   int x, y;
     32  1.1  christos };
     33  1.1  christos 
     34  1.5  christos struct tui_win_element;
     35  1.5  christos 
     36  1.5  christos /* This describes the content of the window.  */
     37  1.5  christos typedef struct tui_win_element **tui_win_content;
     38  1.5  christos 
     39  1.1  christos /* Generic window information.  */
     40  1.1  christos struct tui_gen_win_info
     41  1.1  christos {
     42  1.1  christos   WINDOW *handle;	    /* Window handle.  */
     43  1.1  christos   enum tui_win_type type;   /* Type of window.  */
     44  1.1  christos   int width;		    /* Window width.  */
     45  1.1  christos   int height;		    /* Window height.  */
     46  1.1  christos   struct tui_point origin;  /* Origin of window.  */
     47  1.5  christos   tui_win_content content;  /* Content of window.  */
     48  1.1  christos   int content_size;	    /* Size of content (# of elements).  */
     49  1.1  christos   int content_in_use;	    /* Can it be used, or is it already used?  */
     50  1.1  christos   int viewport_height;	    /* Viewport height.  */
     51  1.1  christos   int last_visible_line;    /* Index of last visible line.  */
     52  1.1  christos   int is_visible;	    /* Whether the window is visible or not.  */
     53  1.1  christos   char *title;              /* Window title to display.  */
     54  1.1  christos };
     55  1.1  christos 
     56  1.1  christos /* Constant definitions.  */
     57  1.1  christos #define DEFAULT_TAB_LEN         8
     58  1.1  christos #define NO_SRC_STRING           "[ No Source Available ]"
     59  1.1  christos #define NO_DISASSEM_STRING      "[ No Assembly Available ]"
     60  1.1  christos #define NO_REGS_STRING          "[ Register Values Unavailable ]"
     61  1.1  christos #define NO_DATA_STRING          "[ No Data Values Displayed ]"
     62  1.1  christos #define MAX_CONTENT_COUNT       100
     63  1.1  christos #define SRC_NAME                "SRC"
     64  1.1  christos #define CMD_NAME                "CMD"
     65  1.1  christos #define DATA_NAME               "REGS"
     66  1.1  christos #define DISASSEM_NAME           "ASM"
     67  1.1  christos #define TUI_NULL_STR            ""
     68  1.1  christos #define DEFAULT_HISTORY_COUNT	25
     69  1.1  christos #define BOX_WINDOW              TRUE
     70  1.1  christos #define DONT_BOX_WINDOW         FALSE
     71  1.1  christos #define HILITE                  TRUE
     72  1.1  christos #define NO_HILITE               FALSE
     73  1.1  christos #define WITH_LOCATOR            TRUE
     74  1.1  christos #define NO_LOCATOR              FALSE
     75  1.1  christos #define EMPTY_SOURCE_PROMPT     TRUE
     76  1.1  christos #define NO_EMPTY_SOURCE_PROMPT  FALSE
     77  1.1  christos #define UNDEFINED_ITEM          -1
     78  1.1  christos #define MIN_WIN_HEIGHT          3
     79  1.1  christos #define MIN_CMD_WIN_HEIGHT      3
     80  1.1  christos 
     81  1.1  christos /* Strings to display in the TUI status line.  */
     82  1.1  christos #define PROC_PREFIX             "In: "
     83  1.3  christos #define LINE_PREFIX             "L"
     84  1.1  christos #define PC_PREFIX               "PC: "
     85  1.1  christos #define SINGLE_KEY              "(SingleKey)"
     86  1.1  christos 
     87  1.1  christos /* Minimum/Maximum length of some fields displayed in the TUI status
     88  1.1  christos    line.  */
     89  1.1  christos #define MIN_LINE_WIDTH     4	/* Use at least 4 digits for line
     90  1.1  christos 				   numbers.  */
     91  1.1  christos #define MIN_PROC_WIDTH    12
     92  1.1  christos #define MAX_TARGET_WIDTH  10
     93  1.3  christos #define MAX_PID_WIDTH     19
     94  1.1  christos 
     95  1.1  christos /* Scroll direction enum.  */
     96  1.1  christos enum tui_scroll_direction
     97  1.1  christos {
     98  1.1  christos   FORWARD_SCROLL,
     99  1.1  christos   BACKWARD_SCROLL,
    100  1.1  christos   LEFT_SCROLL,
    101  1.1  christos   RIGHT_SCROLL
    102  1.1  christos };
    103  1.1  christos 
    104  1.1  christos 
    105  1.1  christos /* General list struct.  */
    106  1.1  christos struct tui_list
    107  1.1  christos {
    108  1.1  christos   struct tui_win_info **list;
    109  1.1  christos   int count;
    110  1.1  christos };
    111  1.1  christos 
    112  1.1  christos 
    113  1.1  christos /* The kinds of layouts available.  */
    114  1.1  christos enum tui_layout_type
    115  1.1  christos {
    116  1.1  christos   SRC_COMMAND,
    117  1.1  christos   DISASSEM_COMMAND,
    118  1.1  christos   SRC_DISASSEM_COMMAND,
    119  1.1  christos   SRC_DATA_COMMAND,
    120  1.1  christos   DISASSEM_DATA_COMMAND,
    121  1.1  christos   UNDEFINED_LAYOUT
    122  1.1  christos };
    123  1.1  christos 
    124  1.1  christos /* Basic data types that can be displayed in the data window.  */
    125  1.1  christos enum tui_data_type
    126  1.1  christos {
    127  1.1  christos   TUI_REGISTER,
    128  1.1  christos   TUI_SCALAR,
    129  1.1  christos   TUI_COMPLEX,
    130  1.1  christos   TUI_STRUCT
    131  1.1  christos };
    132  1.1  christos 
    133  1.5  christos enum tui_line_or_address_kind
    134  1.1  christos {
    135  1.5  christos   LOA_LINE,
    136  1.5  christos   LOA_ADDRESS
    137  1.1  christos };
    138  1.1  christos 
    139  1.1  christos /* Structure describing source line or line address.  */
    140  1.1  christos struct tui_line_or_address
    141  1.1  christos {
    142  1.5  christos   enum tui_line_or_address_kind loa;
    143  1.1  christos   union
    144  1.1  christos     {
    145  1.1  christos       int line_no;
    146  1.1  christos       CORE_ADDR addr;
    147  1.1  christos     } u;
    148  1.1  christos };
    149  1.1  christos 
    150  1.1  christos /* Current Layout definition.  */
    151  1.1  christos struct tui_layout_def
    152  1.1  christos {
    153  1.1  christos   enum tui_win_type display_mode;
    154  1.1  christos   int split;
    155  1.1  christos };
    156  1.1  christos 
    157  1.1  christos /* Elements in the Source/Disassembly Window.  */
    158  1.1  christos struct tui_source_element
    159  1.1  christos {
    160  1.1  christos   char *line;
    161  1.1  christos   struct tui_line_or_address line_or_addr;
    162  1.1  christos   int is_exec_point;
    163  1.1  christos   int has_break;
    164  1.1  christos };
    165  1.1  christos 
    166  1.1  christos 
    167  1.1  christos /* Elements in the data display window content.  */
    168  1.1  christos struct tui_data_element
    169  1.1  christos {
    170  1.1  christos   const char *name;
    171  1.1  christos   int item_no;		/* The register number, or data display
    172  1.1  christos 			   number.  */
    173  1.1  christos   enum tui_data_type type;
    174  1.1  christos   void *value;
    175  1.1  christos   int highlight;
    176  1.1  christos   char *content;
    177  1.1  christos };
    178  1.1  christos 
    179  1.1  christos 
    180  1.1  christos /* Elements in the command window content.  */
    181  1.1  christos struct tui_command_element
    182  1.1  christos {
    183  1.1  christos   char *line;
    184  1.1  christos };
    185  1.1  christos 
    186  1.1  christos #ifdef PATH_MAX
    187  1.1  christos # define MAX_LOCATOR_ELEMENT_LEN        PATH_MAX
    188  1.1  christos #else
    189  1.1  christos # define MAX_LOCATOR_ELEMENT_LEN        1024
    190  1.1  christos #endif
    191  1.1  christos 
    192  1.1  christos /* Elements in the locator window content.  */
    193  1.1  christos struct tui_locator_element
    194  1.1  christos {
    195  1.1  christos   /* Resolved absolute filename as returned by symtab_to_fullname.  */
    196  1.1  christos   char full_name[MAX_LOCATOR_ELEMENT_LEN];
    197  1.1  christos   char proc_name[MAX_LOCATOR_ELEMENT_LEN];
    198  1.1  christos   int line_no;
    199  1.1  christos   CORE_ADDR addr;
    200  1.1  christos   /* Architecture associated with code at this location.  */
    201  1.1  christos   struct gdbarch *gdbarch;
    202  1.1  christos };
    203  1.1  christos 
    204  1.1  christos /* Flags to tell what kind of breakpoint is at current line.  */
    205  1.1  christos #define TUI_BP_ENABLED      0x01
    206  1.1  christos #define TUI_BP_DISABLED     0x02
    207  1.1  christos #define TUI_BP_HIT          0x04
    208  1.1  christos #define TUI_BP_CONDITIONAL  0x08
    209  1.1  christos #define TUI_BP_HARDWARE     0x10
    210  1.1  christos 
    211  1.1  christos /* Position of breakpoint markers in the exec info string.  */
    212  1.1  christos #define TUI_BP_HIT_POS      0
    213  1.1  christos #define TUI_BP_BREAK_POS    1
    214  1.1  christos #define TUI_EXEC_POS        2
    215  1.1  christos #define TUI_EXECINFO_SIZE   4
    216  1.1  christos 
    217  1.1  christos typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
    218  1.1  christos 
    219  1.1  christos /* An content element in a window.  */
    220  1.1  christos union tui_which_element
    221  1.1  christos {
    222  1.1  christos   struct tui_source_element source;	/* The source elements.  */
    223  1.1  christos   struct tui_gen_win_info data_window;	/* Data display elements.  */
    224  1.1  christos   struct tui_data_element data;		/* Elements of data_window.  */
    225  1.1  christos   struct tui_command_element command;	/* Command elements.  */
    226  1.1  christos   struct tui_locator_element locator;	/* Locator elements.  */
    227  1.1  christos   tui_exec_info_content simple_string;	/* Simple char based elements.  */
    228  1.1  christos };
    229  1.1  christos 
    230  1.1  christos struct tui_win_element
    231  1.1  christos {
    232  1.1  christos   int highlight;
    233  1.1  christos   union tui_which_element which_element;
    234  1.1  christos };
    235  1.1  christos 
    236  1.1  christos /* This struct defines the specific information about a data display
    237  1.1  christos    window.  */
    238  1.1  christos struct tui_data_info
    239  1.1  christos {
    240  1.1  christos   tui_win_content data_content;	/* Start of data display content.  */
    241  1.1  christos   int data_content_count;
    242  1.1  christos   tui_win_content regs_content;	/* Start of regs display content.  */
    243  1.1  christos   int regs_content_count;
    244  1.1  christos   int regs_column_count;
    245  1.1  christos   int display_regs;		/* Should regs be displayed at all?  */
    246  1.1  christos   struct reggroup *current_group;
    247  1.1  christos };
    248  1.1  christos 
    249  1.1  christos 
    250  1.1  christos struct tui_source_info
    251  1.1  christos {
    252  1.1  christos   int has_locator;		/* Does locator belongs to this window?  */
    253  1.1  christos   /* Execution information window.  */
    254  1.1  christos   struct tui_gen_win_info *execution_info;
    255  1.1  christos   int horizontal_offset;	/* Used for horizontal scroll.  */
    256  1.1  christos   struct tui_line_or_address start_line_or_addr;
    257  1.1  christos 
    258  1.1  christos   /* It is the resolved form as returned by symtab_to_fullname.  */
    259  1.1  christos   char *fullname;
    260  1.1  christos 
    261  1.1  christos   /* Architecture associated with code at this location.  */
    262  1.1  christos   struct gdbarch *gdbarch;
    263  1.1  christos };
    264  1.1  christos 
    265  1.1  christos 
    266  1.1  christos struct tui_command_info
    267  1.1  christos {
    268  1.1  christos   int cur_line;			/* The current line position.  */
    269  1.1  christos   int curch;			/* The current cursor position.  */
    270  1.1  christos   int start_line;
    271  1.1  christos };
    272  1.1  christos 
    273  1.1  christos 
    274  1.1  christos /* This defines information about each logical window.  */
    275  1.1  christos struct tui_win_info
    276  1.1  christos {
    277  1.1  christos   struct tui_gen_win_info generic;	/* General window information.  */
    278  1.1  christos   union
    279  1.1  christos   {
    280  1.1  christos     struct tui_source_info source_info;
    281  1.1  christos     struct tui_data_info data_display_info;
    282  1.1  christos     struct tui_command_info command_info;
    283  1.1  christos     void *opaque;
    284  1.1  christos   }
    285  1.1  christos   detail;
    286  1.1  christos   int can_highlight;	/* Can this window ever be highlighted?  */
    287  1.1  christos   int is_highlighted;	/* Is this window highlighted?  */
    288  1.1  christos };
    289  1.1  christos 
    290  1.1  christos extern int tui_win_is_source_type (enum tui_win_type win_type);
    291  1.1  christos extern int tui_win_is_auxillary (enum tui_win_type win_type);
    292  1.1  christos extern int tui_win_has_locator (struct tui_win_info *win_info);
    293  1.1  christos extern void tui_set_win_highlight (struct tui_win_info *win_info,
    294  1.1  christos 				   int highlight);
    295  1.1  christos 
    296  1.1  christos 
    297  1.1  christos /* Global Data.  */
    298  1.1  christos extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
    299  1.1  christos 
    300  1.1  christos #define TUI_SRC_WIN     tui_win_list[SRC_WIN]
    301  1.1  christos #define TUI_DISASM_WIN	tui_win_list[DISASSEM_WIN]
    302  1.1  christos #define TUI_DATA_WIN    tui_win_list[DATA_WIN]
    303  1.1  christos #define TUI_CMD_WIN     tui_win_list[CMD_WIN]
    304  1.1  christos 
    305  1.1  christos /* Data Manipulation Functions.  */
    306  1.1  christos extern void tui_initialize_static_data (void);
    307  1.1  christos extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
    308  1.1  christos extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
    309  1.1  christos extern void tui_init_generic_part (struct tui_gen_win_info *);
    310  1.1  christos extern void tui_init_win_info (struct tui_win_info *);
    311  1.1  christos extern tui_win_content tui_alloc_content (int, enum tui_win_type);
    312  1.1  christos extern int tui_add_content_elements (struct tui_gen_win_info *,
    313  1.1  christos 				     int);
    314  1.1  christos extern void tui_init_content_element (struct tui_win_element *,
    315  1.1  christos 				      enum tui_win_type);
    316  1.1  christos extern void tui_free_window (struct tui_win_info *);
    317  1.1  christos extern void tui_free_win_content (struct tui_gen_win_info *);
    318  1.1  christos extern void tui_free_data_content (tui_win_content, int);
    319  1.1  christos extern void tui_free_all_source_wins_content (void);
    320  1.1  christos extern void tui_del_window (struct tui_win_info *);
    321  1.1  christos extern void tui_del_data_windows (tui_win_content, int);
    322  1.1  christos extern struct tui_win_info *tui_partial_win_by_name (char *);
    323  1.5  christos extern const char *tui_win_name (const struct tui_gen_win_info *);
    324  1.1  christos extern enum tui_layout_type tui_current_layout (void);
    325  1.1  christos extern void tui_set_current_layout_to (enum tui_layout_type);
    326  1.1  christos extern int tui_term_height (void);
    327  1.1  christos extern void tui_set_term_height_to (int);
    328  1.1  christos extern int tui_term_width (void);
    329  1.1  christos extern void tui_set_term_width_to (int);
    330  1.1  christos extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
    331  1.1  christos extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
    332  1.1  christos extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
    333  1.1  christos extern struct tui_list *tui_source_windows (void);
    334  1.1  christos extern void tui_clear_source_windows (void);
    335  1.1  christos extern void tui_clear_source_windows_detail (void);
    336  1.1  christos extern void tui_clear_win_detail (struct tui_win_info *);
    337  1.1  christos extern void tui_add_to_source_windows (struct tui_win_info *);
    338  1.1  christos extern int tui_default_tab_len (void);
    339  1.1  christos extern void tui_set_default_tab_len (int);
    340  1.1  christos extern struct tui_win_info *tui_win_with_focus (void);
    341  1.1  christos extern void tui_set_win_with_focus (struct tui_win_info *);
    342  1.1  christos extern struct tui_layout_def *tui_layout_def (void);
    343  1.1  christos extern int tui_win_resized (void);
    344  1.1  christos extern void tui_set_win_resized_to (int);
    345  1.1  christos 
    346  1.1  christos extern struct tui_win_info *tui_next_win (struct tui_win_info *);
    347  1.1  christos extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
    348  1.1  christos 
    349  1.1  christos extern void tui_add_to_source_windows (struct tui_win_info *);
    350  1.1  christos 
    351  1.1  christos #endif /* TUI_DATA_H */
    352