52 void write (
const char *buf,
long length_buf)
override;
62 for (
long i = 0; i < length_buf; ++i)
95 scoped_restore save_pagination
97 scoped_restore save_stdout
103 std::string str = stream.
release ();
104 if (!str.empty () && str.back () ==
'\n')
105 str.resize (str.size () - 1);
116 int regnum,
bool *changedp)
124 if (changedp != NULL && data->content != new_content)
127 data->content = std::move (new_content);
192 data_item_win.highlight =
false;
212 bool refresh_values_only)
219 title = string_printf (
"Register group: %s", group->
name ());
260 if (!refresh_values_only)
278 int len = data_item_win.content.size ();
287 for (i = 0; i < start_element_no; i++)
327 int element_no = start_element_no;
329 if (start_element_no != 0 && start_line_no != 0)
331 int last_line_no, first_line_on_last_page;
334 first_line_on_last_page = last_line_no - (
height - 2);
335 if (first_line_on_last_page < 0)
336 first_line_on_last_page = 0;
341 if (start_line_no > first_line_on_last_page)
409 int half_width = (
width - 2) / 2;
412 if (strlen (prompt) >= half_width)
415 x_pos = half_width - strlen (prompt);
416 mvwaddstr (
handle.get (), (
height / 2), x_pos, (
char *) prompt);
441 int first_element_no;
442 int first_line = (-1);
454 first_line += num_to_scroll;
475 was_hilighted = data_item_win.highlight;
479 &data_item_win.highlight);
482 if ((data_item_win.highlight || was_hilighted)
483 && data_item_win.y > 0)
502 (void) wstandout (handle);
504 mvwaddnstr (handle,
y,
x,
content.c_str (), field_width - 1);
505 if (
content.size () < field_width)
514 (void) wstandend (handle);
531 auto it = std::find (groups.begin (), groups.end (), current_group);
532 if (it != groups.end ())
534 if (it == groups.end ())
535 return groups.front ();
553 auto it = std::find (groups.rbegin (), groups.rend (), current_group);
554 if (it != groups.rend ())
556 if (it == groups.rend ())
557 return groups.back ();
572 size_t len = strlen (args);
587 if (strncmp (args,
"next", len) == 0)
589 else if (strncmp (args,
"prev", len) == 0)
598 if (strncmp (group->name (), args, len) == 0)
601 error (_(
"ambiguous register group name '%s'"), args);
608 error (_(
"unknown register group '%s'"), args);
614 gdb_printf (_(
"\"tui reg\" must be followed by the name of "
615 "either a register group,\nor one of 'next' "
616 "or 'prev'. Known register groups are:\n"));
637 const char *text,
const char *word)
639 static const char *
const extra[] = {
"next",
"prev", NULL };
655TUI command to control the register window.\n\
656Usage: tui reg NAME\n\
657NAME 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()
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,...)