GDB (API)
/home/stan/gdb/src/gdb/tui/tui-data.h
Go to the documentation of this file.
00001 /* TUI data manipulation routines.
00002 
00003    Copyright (C) 1998-2013 Free Software Foundation, Inc.
00004 
00005    Contributed by Hewlett-Packard Company.
00006 
00007    This file is part of GDB.
00008 
00009    This program is free software; you can redistribute it and/or modify
00010    it under the terms of the GNU General Public License as published by
00011    the Free Software Foundation; either version 3 of the License, or
00012    (at your option) any later version.
00013 
00014    This program is distributed in the hope that it will be useful,
00015    but WITHOUT ANY WARRANTY; without even the implied warranty of
00016    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017    GNU General Public License for more details.
00018 
00019    You should have received a copy of the GNU General Public License
00020    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00021 
00022 #ifndef TUI_DATA_H
00023 #define TUI_DATA_H
00024 
00025 #include "tui/tui.h"    /* For enum tui_win_type.  */
00026 #include "gdb_curses.h" /* For WINDOW.  */
00027 
00028 /* This is a point definition.  */
00029 struct tui_point
00030 {
00031   int x, y;
00032 };
00033 
00034 /* Generic window information.  */
00035 struct tui_gen_win_info
00036 {
00037   WINDOW *handle;           /* Window handle.  */
00038   enum tui_win_type type;   /* Type of window.  */
00039   int width;                /* Window width.  */
00040   int height;               /* Window height.  */
00041   struct tui_point origin;  /* Origin of window.  */
00042   void **content;           /* Content of window.  */
00043   int content_size;         /* Size of content (# of elements).  */
00044   int content_in_use;       /* Can it be used, or is it already used?  */
00045   int viewport_height;      /* Viewport height.  */
00046   int last_visible_line;    /* Index of last visible line.  */
00047   int is_visible;           /* Whether the window is visible or not.  */
00048   char *title;              /* Window title to display.  */
00049 };
00050 
00051 /* Constant definitions.  */
00052 #define DEFAULT_TAB_LEN         8
00053 #define NO_SRC_STRING           "[ No Source Available ]"
00054 #define NO_DISASSEM_STRING      "[ No Assembly Available ]"
00055 #define NO_REGS_STRING          "[ Register Values Unavailable ]"
00056 #define NO_DATA_STRING          "[ No Data Values Displayed ]"
00057 #define MAX_CONTENT_COUNT       100
00058 #define SRC_NAME                "SRC"
00059 #define CMD_NAME                "CMD"
00060 #define DATA_NAME               "REGS"
00061 #define DISASSEM_NAME           "ASM"
00062 #define TUI_NULL_STR            ""
00063 #define DEFAULT_HISTORY_COUNT   25
00064 #define BOX_WINDOW              TRUE
00065 #define DONT_BOX_WINDOW         FALSE
00066 #define HILITE                  TRUE
00067 #define NO_HILITE               FALSE
00068 #define WITH_LOCATOR            TRUE
00069 #define NO_LOCATOR              FALSE
00070 #define EMPTY_SOURCE_PROMPT     TRUE
00071 #define NO_EMPTY_SOURCE_PROMPT  FALSE
00072 #define UNDEFINED_ITEM          -1
00073 #define MIN_WIN_HEIGHT          3
00074 #define MIN_CMD_WIN_HEIGHT      3
00075 
00076 /* Strings to display in the TUI status line.  */
00077 #define PROC_PREFIX             "In: "
00078 #define LINE_PREFIX             "Line: "
00079 #define PC_PREFIX               "PC: "
00080 #define SINGLE_KEY              "(SingleKey)"
00081 
00082 /* Minimum/Maximum length of some fields displayed in the TUI status
00083    line.  */
00084 #define MIN_LINE_WIDTH     4    /* Use at least 4 digits for line
00085                                    numbers.  */
00086 #define MIN_PROC_WIDTH    12
00087 #define MAX_TARGET_WIDTH  10
00088 #define MAX_PID_WIDTH     14
00089 
00090 #define TUI_FLOAT_REGS_NAME                  "$FREGS"
00091 #define TUI_FLOAT_REGS_NAME_LOWER            "$fregs"
00092 #define TUI_GENERAL_REGS_NAME                "$GREGS"
00093 #define TUI_GENERAL_REGS_NAME_LOWER          "$gregs"
00094 #define TUI_SPECIAL_REGS_NAME                "$SREGS"
00095 #define TUI_SPECIAL_REGS_NAME_LOWER          "$sregs"
00096 #define TUI_GENERAL_SPECIAL_REGS_NAME        "$REGS"
00097 #define TUI_GENERAL_SPECIAL_REGS_NAME_LOWER  "$regs"
00098 
00099 /* Scroll direction enum.  */
00100 enum tui_scroll_direction
00101 {
00102   FORWARD_SCROLL,
00103   BACKWARD_SCROLL,
00104   LEFT_SCROLL,
00105   RIGHT_SCROLL
00106 };
00107 
00108 
00109 /* General list struct.  */
00110 struct tui_list
00111 {
00112   struct tui_win_info **list;
00113   int count;
00114 };
00115 
00116 
00117 /* The kinds of layouts available.  */
00118 enum tui_layout_type
00119 {
00120   SRC_COMMAND,
00121   DISASSEM_COMMAND,
00122   SRC_DISASSEM_COMMAND,
00123   SRC_DATA_COMMAND,
00124   DISASSEM_DATA_COMMAND,
00125   UNDEFINED_LAYOUT
00126 };
00127 
00128 /* Basic data types that can be displayed in the data window.  */
00129 enum tui_data_type
00130 {
00131   TUI_REGISTER,
00132   TUI_SCALAR,
00133   TUI_COMPLEX,
00134   TUI_STRUCT
00135 };
00136 
00137 /* Types of register displays.  */
00138 enum tui_register_display_type
00139 {
00140   TUI_UNDEFINED_REGS,
00141   TUI_GENERAL_REGS,
00142   TUI_SFLOAT_REGS,
00143   TUI_DFLOAT_REGS,
00144   TUI_SPECIAL_REGS,
00145   TUI_GENERAL_AND_SPECIAL_REGS
00146 };
00147 
00148 /* Structure describing source line or line address.  */
00149 struct tui_line_or_address
00150 {
00151   enum { LOA_LINE, LOA_ADDRESS } loa;
00152   union
00153     {
00154       int line_no;
00155       CORE_ADDR addr;
00156     } u;
00157 };
00158 
00159 /* Current Layout definition.  */
00160 struct tui_layout_def
00161 {
00162   enum tui_win_type display_mode;
00163   int split;
00164   enum tui_register_display_type regs_display_type;
00165   enum tui_register_display_type float_regs_display_type;
00166 };
00167 
00168 /* Elements in the Source/Disassembly Window.  */
00169 struct tui_source_element
00170 {
00171   char *line;
00172   struct tui_line_or_address line_or_addr;
00173   int is_exec_point;
00174   int has_break;
00175 };
00176 
00177 
00178 /* Elements in the data display window content.  */
00179 struct tui_data_element
00180 {
00181   const char *name;
00182   int item_no;          /* The register number, or data display
00183                            number.  */
00184   enum tui_data_type type;
00185   void *value;
00186   int highlight;
00187   char *content;
00188 };
00189 
00190 
00191 /* Elements in the command window content.  */
00192 struct tui_command_element
00193 {
00194   char *line;
00195 };
00196 
00197 #ifdef PATH_MAX
00198 # define MAX_LOCATOR_ELEMENT_LEN        PATH_MAX
00199 #else
00200 # define MAX_LOCATOR_ELEMENT_LEN        1024
00201 #endif
00202 
00203 /* Elements in the locator window content.  */
00204 struct tui_locator_element
00205 {
00206   /* Resolved absolute filename as returned by symtab_to_fullname.  */
00207   char full_name[MAX_LOCATOR_ELEMENT_LEN];
00208   char proc_name[MAX_LOCATOR_ELEMENT_LEN];
00209   int line_no;
00210   CORE_ADDR addr;
00211   /* Architecture associated with code at this location.  */
00212   struct gdbarch *gdbarch;
00213 };
00214 
00215 /* Flags to tell what kind of breakpoint is at current line.  */
00216 #define TUI_BP_ENABLED      0x01
00217 #define TUI_BP_DISABLED     0x02
00218 #define TUI_BP_HIT          0x04
00219 #define TUI_BP_CONDITIONAL  0x08
00220 #define TUI_BP_HARDWARE     0x10
00221 
00222 /* Position of breakpoint markers in the exec info string.  */
00223 #define TUI_BP_HIT_POS      0
00224 #define TUI_BP_BREAK_POS    1
00225 #define TUI_EXEC_POS        2
00226 #define TUI_EXECINFO_SIZE   4
00227 
00228 typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
00229 
00230 /* An content element in a window.  */
00231 union tui_which_element
00232 {
00233   struct tui_source_element source;     /* The source elements.  */
00234   struct tui_gen_win_info data_window;  /* Data display elements.  */
00235   struct tui_data_element data;         /* Elements of data_window.  */
00236   struct tui_command_element command;   /* Command elements.  */
00237   struct tui_locator_element locator;   /* Locator elements.  */
00238   tui_exec_info_content simple_string;  /* Simple char based elements.  */
00239 };
00240 
00241 struct tui_win_element
00242 {
00243   int highlight;
00244   union tui_which_element which_element;
00245 };
00246 
00247 
00248 /* This describes the content of the window.  */
00249 typedef struct tui_win_element **tui_win_content;
00250 
00251 
00252 /* This struct defines the specific information about a data display
00253    window.  */
00254 struct tui_data_info
00255 {
00256   tui_win_content data_content; /* Start of data display content.  */
00257   int data_content_count;
00258   tui_win_content regs_content; /* Start of regs display content.  */
00259   int regs_content_count;
00260   enum tui_register_display_type regs_display_type;
00261   int regs_column_count;
00262   int display_regs;             /* Should regs be displayed at all?  */
00263   struct reggroup *current_group;
00264 };
00265 
00266 
00267 struct tui_source_info
00268 {
00269   int has_locator;              /* Does locator belongs to this window?  */
00270   /* Execution information window.  */
00271   struct tui_gen_win_info *execution_info;
00272   int horizontal_offset;        /* Used for horizontal scroll.  */
00273   struct tui_line_or_address start_line_or_addr;
00274 
00275   /* It is the resolved form as returned by symtab_to_fullname.  */
00276   char *fullname;
00277 
00278   /* Architecture associated with code at this location.  */
00279   struct gdbarch *gdbarch;
00280 };
00281 
00282 
00283 struct tui_command_info
00284 {
00285   int cur_line;                 /* The current line position.  */
00286   int curch;                    /* The current cursor position.  */
00287   int start_line;
00288 };
00289 
00290 
00291 /* This defines information about each logical window.  */
00292 struct tui_win_info
00293 {
00294   struct tui_gen_win_info generic;      /* General window information.  */
00295   union
00296   {
00297     struct tui_source_info source_info;
00298     struct tui_data_info data_display_info;
00299     struct tui_command_info command_info;
00300     void *opaque;
00301   }
00302   detail;
00303   int can_highlight;    /* Can this window ever be highlighted?  */
00304   int is_highlighted;   /* Is this window highlighted?  */
00305 };
00306 
00307 extern int tui_win_is_source_type (enum tui_win_type win_type);
00308 extern int tui_win_is_auxillary (enum tui_win_type win_type);
00309 extern int tui_win_has_locator (struct tui_win_info *win_info);
00310 extern void tui_set_win_highlight (struct tui_win_info *win_info,
00311                                    int highlight);
00312 
00313 
00314 /* Global Data.  */
00315 extern struct tui_win_info *(tui_win_list[MAX_MAJOR_WINDOWS]);
00316 
00317 #define TUI_SRC_WIN     tui_win_list[SRC_WIN]
00318 #define TUI_DISASM_WIN  tui_win_list[DISASSEM_WIN]
00319 #define TUI_DATA_WIN    tui_win_list[DATA_WIN]
00320 #define TUI_CMD_WIN     tui_win_list[CMD_WIN]
00321 
00322 /* Data Manipulation Functions.  */
00323 extern void tui_initialize_static_data (void);
00324 extern struct tui_gen_win_info *tui_alloc_generic_win_info (void);
00325 extern struct tui_win_info *tui_alloc_win_info (enum tui_win_type);
00326 extern void tui_init_generic_part (struct tui_gen_win_info *);
00327 extern void tui_init_win_info (struct tui_win_info *);
00328 extern tui_win_content tui_alloc_content (int, enum tui_win_type);
00329 extern int tui_add_content_elements (struct tui_gen_win_info *, 
00330                                      int);
00331 extern void tui_init_content_element (struct tui_win_element *, 
00332                                       enum tui_win_type);
00333 extern void tui_free_window (struct tui_win_info *);
00334 extern void tui_free_win_content (struct tui_gen_win_info *);
00335 extern void tui_free_data_content (tui_win_content, int);
00336 extern void tui_free_all_source_wins_content (void);
00337 extern void tui_del_window (struct tui_win_info *);
00338 extern void tui_del_data_windows (tui_win_content, int);
00339 extern struct tui_win_info *tui_partial_win_by_name (char *);
00340 extern char *tui_win_name (struct tui_gen_win_info *);
00341 extern enum tui_layout_type tui_current_layout (void);
00342 extern void tui_set_current_layout_to (enum tui_layout_type);
00343 extern int tui_term_height (void);
00344 extern void tui_set_term_height_to (int);
00345 extern int tui_term_width (void);
00346 extern void tui_set_term_width_to (int);
00347 extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
00348 extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
00349 extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
00350 extern struct tui_list *tui_source_windows (void);
00351 extern void tui_clear_source_windows (void);
00352 extern void tui_clear_source_windows_detail (void);
00353 extern void tui_clear_win_detail (struct tui_win_info *);
00354 extern void tui_add_to_source_windows (struct tui_win_info *);
00355 extern int tui_default_tab_len (void);
00356 extern void tui_set_default_tab_len (int);
00357 extern struct tui_win_info *tui_win_with_focus (void);
00358 extern void tui_set_win_with_focus (struct tui_win_info *);
00359 extern struct tui_layout_def *tui_layout_def (void);
00360 extern int tui_win_resized (void);
00361 extern void tui_set_win_resized_to (int);
00362 
00363 extern struct tui_win_info *tui_next_win (struct tui_win_info *);
00364 extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
00365 
00366 extern void tui_add_to_source_windows (struct tui_win_info *);
00367 
00368 #endif /* TUI_DATA_H */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines