52 void write (
const char *buf,
long length_buf)
override;
62 for (
long i = 0; i < length_buf; ++i)
97 std::string str = stream.
release ();
98 if (!str.empty () && str.back () ==
'\n')
99 str.resize (str.size () - 1);
110 int regnum,
bool *changedp)
118 if (changedp != NULL && data->content != new_content)
121 data->content = std::move (new_content);
186 data_item_win.highlight =
false;
206 bool refresh_values_only)
213 this->
set_title (string_printf (
"Register group: %s", group->
name ()));
254 if (!refresh_values_only)
272 int len = data_item_win.content.size ();
281 for (i = 0; i < start_element_no; i++)
321 int element_no = start_element_no;
323 if (start_element_no != 0 && start_line_no != 0)
325 int last_line_no, first_line_on_last_page;
328 first_line_on_last_page = last_line_no - (
height - 2);
329 if (first_line_on_last_page < 0)
330 first_line_on_last_page = 0;
335 if (start_line_no > first_line_on_last_page)
403 int half_width = (
width - 2) / 2;
406 if (strlen (prompt) >= half_width)
409 x_pos = half_width - strlen (prompt);
410 mvwaddstr (
handle.get (), (
height / 2), x_pos, (
char *) prompt);
435 int first_element_no;
436 int first_line = (-1);
448 first_line += num_to_scroll;
469 was_hilighted = data_item_win.highlight;
473 &data_item_win.highlight);
476 if ((data_item_win.highlight || was_hilighted)
477 && data_item_win.y > 0)
496 (void) wstandout (handle);
498 mvwaddnstr (handle,
y,
x,
content.c_str (), field_width - 1);
499 if (
content.size () < field_width)
508 (void) wstandend (handle);
525 auto it = std::find (groups.begin (), groups.end (), current_group);
526 if (it != groups.end ())
528 if (it == groups.end ())
529 return groups.front ();
547 auto it = std::find (groups.rbegin (), groups.rend (), current_group);
548 if (it != groups.rend ())
550 if (it == groups.rend ())
551 return groups.back ();
566 size_t len = strlen (args);
581 if (strncmp (args,
"next", len) == 0)
583 else if (strncmp (args,
"prev", len) == 0)
592 if (strncmp (group->name (), args, len) == 0)
595 error (_(
"ambiguous register group name '%s'"), args);
602 error (_(
"unknown register group '%s'"), args);
608 gdb_printf (_(
"\"tui reg\" must be followed by the name of "
609 "either a register group,\nor one of 'next' "
610 "or 'prev'. Known register groups are:\n"));
631 const char *text,
const char *word)
633 static const char *
const extra[] = {
"next",
"prev", NULL };
649TUI command to control the register window.\n\
650Usage: tui reg NAME\n\
651NAME is the name of the register group to display"), tuicmd);
struct gdbarch * get_current_arch(void)
void write(const char *buf, long length_buf) override
void write(const char *buf, long length_buf) override
tab_expansion_file()=default
struct cmd_list_element * add_cmd(const char *name, enum command_class theclass, const char *doc, struct cmd_list_element **list)
void set_cmd_completer(struct cmd_list_element *cmd, completer_ftype *completer)
void complete_on_enum(completion_tracker &tracker, const char *const *enumlist, const char *text, const char *word)
void reggroup_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
struct gdbarch * get_frame_arch(frame_info_ptr this_frame)
frame_info_ptr get_selected_frame(const char *message)
const char * gdbarch_register_name(struct gdbarch *gdbarch, int regnr)
void gdbarch_print_registers_info(struct gdbarch *gdbarch, struct ui_file *file, frame_info_ptr frame, int regnum, int all)
int gdbarch_register_reggroup_p(struct gdbarch *gdbarch, int regnum, const struct reggroup *reggroup)
static int gdbarch_num_cooked_regs(gdbarch *arch)
const reggroup *const general_reggroup
const std::vector< const reggroup * > & gdbarch_reggroups(struct gdbarch *gdbarch)
const char * name() const
void rerender(WINDOW *handle, int field_width)
void show_register_group(const reggroup *group, frame_info_ptr frame, bool refresh_values_only)
void erase_data_content(const char *prompt)
int last_regs_line_no() const
int line_from_reg_element_no(int element_no) const
void do_scroll_vertical(int num_to_scroll) override
void check_register_values(frame_info_ptr frame)
void show_registers(const reggroup *group)
std::vector< tui_data_item_window > m_regs_content
void delete_data_content_windows()
void display_registers_from(int start_element_no)
int display_registers_from_line(int line_no)
int first_reg_element_no_inline(int line_no) const
const reggroup * m_current_group
int first_data_item_displayed()
const char * name() const override
void display_reg_element_at_line(int start_element_no, int start_line_no)
void check_and_display_highlight_if_needed()
void set_title(std::string &&new_title)
std::unique_ptr< WINDOW, curses_deleter > handle
virtual void refresh_window()
int target_has_registers()
static void tui_get_register(frame_info_ptr frame, struct tui_data_item_window *data, int regnum, bool *changedp)
static void tui_reggroup_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
static const reggroup * tui_reg_prev(const reggroup *current_group, struct gdbarch *gdbarch)
void _initialize_tui_regs()
static void tui_reg_command(const char *args, int from_tty)
static const reggroup * tui_reg_next(const reggroup *current_group, struct gdbarch *gdbarch)
static std::string tui_register_format(frame_info_ptr frame, int regnum)
struct cmd_list_element ** tui_get_cmd_list(void)
void tui_wrefresh(WINDOW *win)
const char * n_spaces(int n)
void gdb_printf(struct ui_file *stream, const char *format,...)