void tui_refresh_all (struct tui_win_info * * list) { enum tui_win_type type; struct tui_gen_win_info * locator = tui_locator_win_info_ptr (); for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++) { if (list[type] && list[type]->generic.is_visible) { if (type == SRC_WIN || type == DISASSEM_WIN) { touchwin (list[type]->detail.source_info.execution_info->handle); tui_refresh_win (list[type]->detail.source_info.execution_info); } touchwin (list[type]->generic.handle); tui_refresh_win (&list[type]->generic); } } if (locator->is_visible) { touchwin (locator->handle); tui_refresh_win (locator); } }
void tui_show_locator_content (void) { char *string; struct tui_gen_win_info *locator; locator = tui_locator_win_info_ptr (); if (locator != NULL && locator->handle != (WINDOW *) NULL) { struct tui_win_element *element; element = locator->content[0]; string = tui_make_status_line (&element->which_element.locator); wmove (locator->handle, 0, 0); /* We ignore the return value from wstandout and wstandend, casting them to void in order to avoid a compiler warning. The warning itself was introduced by a patch to ncurses 5.7 dated 2009-08-29, changing these macro to expand to code that causes the compiler to generate an unused-value warning. */ (void) wstandout (locator->handle); waddstr (locator->handle, string); wclrtoeol (locator->handle); (void) wstandend (locator->handle); tui_refresh_win (locator); wmove (locator->handle, 0, 0); xfree (string); locator->content_in_use = TRUE; } }
/* Display a register in a window. If hilite is TRUE, then the value will be displayed in reverse video. */ static void tui_display_register (struct tui_data_element *data, struct tui_gen_win_info *win_info) { if (win_info->handle != (WINDOW *) NULL) { int i; if (data->highlight) /* We ignore the return value, casting it to void in order to avoid a compiler warning. The warning itself was introduced by a patch to ncurses 5.7 dated 2009-08-29, changing this macro to expand to code that causes the compiler to generate an unused-value warning. */ (void) wstandout (win_info->handle); wmove (win_info->handle, 0, 0); for (i = 1; i < win_info->width; i++) waddch (win_info->handle, ' '); wmove (win_info->handle, 0, 0); if (data->content) waddstr (win_info->handle, data->content); if (data->highlight) /* We ignore the return value, casting it to void in order to avoid a compiler warning. The warning itself was introduced by a patch to ncurses 5.7 dated 2009-08-29, changing this macro to expand to code that causes the compiler to generate an unused-value warning. */ (void) wstandend (win_info->handle); tui_refresh_win (win_info); } }
void tui_set_is_exec_point_at (struct tui_line_or_address l, struct tui_win_info *win_info) { int changed = 0; int i; tui_win_content content = (tui_win_content) win_info->generic.content; i = 0; while (i < win_info->generic.content_size) { int new_state; struct tui_line_or_address content_loa = content[i]->which_element.source.line_or_addr; gdb_assert (l.loa == LOA_ADDRESS || l.loa == LOA_LINE); gdb_assert (content_loa.loa == LOA_LINE || content_loa.loa == LOA_ADDRESS); if (content_loa.loa == l.loa && ((l.loa == LOA_LINE && content_loa.u.line_no == l.u.line_no) || (content_loa.u.addr == l.u.addr))) new_state = TRUE; else new_state = FALSE; if (new_state != content[i]->which_element.source.is_exec_point) { changed++; content[i]->which_element.source.is_exec_point = new_state; tui_show_source_line (win_info, i + 1); } i++; } if (changed) tui_refresh_win (&win_info->generic); }
void tui_show_locator_content (void) { char *string; struct tui_gen_win_info *locator; locator = tui_locator_win_info_ptr (); if (locator != NULL && locator->handle != (WINDOW *) NULL) { struct tui_win_element *element; element = (struct tui_win_element *) locator->content[0]; string = tui_make_status_line (&element->which_element.locator); wmove (locator->handle, 0, 0); wstandout (locator->handle); waddstr (locator->handle, string); wclrtoeol (locator->handle); wstandend (locator->handle); tui_refresh_win (locator); wmove (locator->handle, 0, 0); xfree (string); locator->content_in_use = TRUE; } }
void tui_show_exec_info_content (struct tui_win_info *win_info) { struct tui_gen_win_info *exec_info = win_info->detail.source_info.execution_info; int cur_line; werase (exec_info->handle); tui_refresh_win (exec_info); for (cur_line = 1; (cur_line <= exec_info->content_size); cur_line++) mvwaddstr (exec_info->handle, cur_line, 0, exec_info->content[cur_line - 1]->which_element.simple_string); tui_refresh_win (exec_info); exec_info->content_in_use = TRUE; }
void tui_erase_exec_info_content (struct tui_win_info * win_info) { struct tui_gen_win_info * exec_info = win_info->detail.source_info.execution_info; werase (exec_info->handle); tui_refresh_win (exec_info); }
void tui_show_source_content (struct tui_win_info *win_info) { if (win_info->generic.content_size > 0) { int lineno; for (lineno = 1; lineno <= win_info->generic.content_size; lineno++) tui_show_source_line (win_info, lineno); } else tui_erase_source_content (win_info, TRUE); tui_check_and_display_highlight_if_needed (win_info); tui_refresh_win (&win_info->generic); win_info->generic.content_in_use = TRUE; }
void tui_erase_source_content (struct tui_win_info *win_info, int display_prompt) { int x_pos; int half_width = (win_info->generic.width - 2) / 2; if (win_info->generic.handle != (WINDOW *) NULL) { werase (win_info->generic.handle); tui_check_and_display_highlight_if_needed (win_info); if (display_prompt == EMPTY_SOURCE_PROMPT) { char *no_src_str; if (win_info->generic.type == SRC_WIN) no_src_str = NO_SRC_STRING; else no_src_str = NO_DISASSEM_STRING; if (strlen (no_src_str) >= half_width) x_pos = 1; else x_pos = half_width - strlen (no_src_str); mvwaddstr (win_info->generic.handle, (win_info->generic.height / 2), x_pos, no_src_str); /* elz: Added this function call to set the real contents of the window to what is on the screen, so that later calls to refresh, do display the correct stuff, and not the old image. */ tui_set_source_content_nil (win_info, no_src_str); } tui_refresh_win (&win_info->generic); } }
/* Display a register in a window. If hilite is TRUE, then the value will be displayed in reverse video */ static void tui_display_register (struct tui_data_element *data, struct tui_gen_win_info *win_info) { if (win_info->handle != (WINDOW *) NULL) { int i; if (data->highlight) wstandout (win_info->handle); wmove (win_info->handle, 0, 0); for (i = 1; i < win_info->width; i++) waddch (win_info->handle, ' '); wmove (win_info->handle, 0, 0); if (data->content) waddstr (win_info->handle, data->content); if (data->highlight) wstandend (win_info->handle); tui_refresh_win (win_info); } }
/* Show the Source/Disassem/Command layout. */ static void show_source_disasm_command (void) { if (tui_current_layout () != SRC_DISASSEM_COMMAND) { int cmd_height, src_height, asm_height; if (TUI_CMD_WIN != NULL) cmd_height = TUI_CMD_WIN->generic.height; else cmd_height = tui_term_height () / 3; src_height = (tui_term_height () - cmd_height) / 2; asm_height = tui_term_height () - (src_height + cmd_height); if (TUI_SRC_WIN == NULL) make_source_window (&TUI_SRC_WIN, src_height, 0); else { init_gen_win_info (&TUI_SRC_WIN->generic, TUI_SRC_WIN->generic.type, src_height, TUI_SRC_WIN->generic.width, TUI_SRC_WIN->detail.source_info.execution_info->width, 0); TUI_SRC_WIN->can_highlight = TRUE; init_gen_win_info (TUI_SRC_WIN->detail.source_info.execution_info, EXEC_INFO_WIN, src_height, 3, 0, 0); tui_make_visible (&TUI_SRC_WIN->generic); tui_make_visible (TUI_SRC_WIN->detail.source_info.execution_info); TUI_SRC_WIN->detail.source_info.has_locator = FALSE;; } if (TUI_SRC_WIN != NULL) { struct tui_gen_win_info *locator = tui_locator_win_info_ptr (); tui_show_source_content (TUI_SRC_WIN); if (TUI_DISASM_WIN == NULL) { make_disasm_window (&TUI_DISASM_WIN, asm_height, src_height - 1); locator = init_and_make_win (locator, LOCATOR_WIN, 2 /* 1 */ , tui_term_width (), 0, (src_height + asm_height) - 1, DONT_BOX_WINDOW); } else { init_gen_win_info (locator, LOCATOR_WIN, 2 /* 1 */ , tui_term_width (), 0, (src_height + asm_height) - 1); TUI_DISASM_WIN->detail.source_info.has_locator = TRUE; init_gen_win_info (&TUI_DISASM_WIN->generic, TUI_DISASM_WIN->generic.type, asm_height, TUI_DISASM_WIN->generic.width, TUI_DISASM_WIN->detail.source_info.execution_info->width, src_height - 1); init_gen_win_info (TUI_DISASM_WIN->detail.source_info.execution_info, EXEC_INFO_WIN, asm_height, 3, 0, src_height - 1); TUI_DISASM_WIN->can_highlight = TRUE; tui_make_visible (&TUI_DISASM_WIN->generic); tui_make_visible (TUI_DISASM_WIN->detail.source_info.execution_info); } if (TUI_DISASM_WIN != NULL) { TUI_SRC_WIN->detail.source_info.has_locator = FALSE; TUI_DISASM_WIN->detail.source_info.has_locator = TRUE; tui_make_visible (locator); tui_show_locator_content (); tui_show_source_content (TUI_DISASM_WIN); if (TUI_CMD_WIN == NULL) make_command_window (&TUI_CMD_WIN, cmd_height, tui_term_height () - cmd_height); else { init_gen_win_info (&TUI_CMD_WIN->generic, TUI_CMD_WIN->generic.type, TUI_CMD_WIN->generic.height, TUI_CMD_WIN->generic.width, 0, TUI_CMD_WIN->generic.origin.y); TUI_CMD_WIN->can_highlight = FALSE; tui_make_visible (&TUI_CMD_WIN->generic); } if (TUI_CMD_WIN != NULL) tui_refresh_win (&TUI_CMD_WIN->generic); } } tui_set_current_layout_to (SRC_DISASSEM_COMMAND); } }
/* Show the Source/Command or the Disassem layout. */ static void show_source_or_disasm_and_command (enum tui_layout_type layout_type) { if (tui_current_layout () != layout_type) { struct tui_win_info **win_info_ptr; int src_height, cmd_height; struct tui_gen_win_info *locator = tui_locator_win_info_ptr (); if (TUI_CMD_WIN != NULL) cmd_height = TUI_CMD_WIN->generic.height; else cmd_height = tui_term_height () / 3; src_height = tui_term_height () - cmd_height; if (layout_type == SRC_COMMAND) win_info_ptr = &TUI_SRC_WIN; else win_info_ptr = &TUI_DISASM_WIN; if ((*win_info_ptr) == NULL) { if (layout_type == SRC_COMMAND) make_source_window (win_info_ptr, src_height - 1, 0); else make_disasm_window (win_info_ptr, src_height - 1, 0); locator = init_and_make_win (locator, LOCATOR_WIN, 2 /* 1 */ , tui_term_width (), 0, src_height - 1, DONT_BOX_WINDOW); } else { init_gen_win_info (locator, LOCATOR_WIN, 2 /* 1 */ , tui_term_width (), 0, src_height - 1); (*win_info_ptr)->detail.source_info.has_locator = TRUE; init_gen_win_info (&(*win_info_ptr)->generic, (*win_info_ptr)->generic.type, src_height - 1, (*win_info_ptr)->generic.width, (*win_info_ptr)->detail.source_info.execution_info->width, 0); init_gen_win_info ((*win_info_ptr)->detail.source_info.execution_info, EXEC_INFO_WIN, src_height - 1, 3, 0, 0); (*win_info_ptr)->can_highlight = TRUE; tui_make_visible (&(*win_info_ptr)->generic); tui_make_visible ((*win_info_ptr)->detail.source_info.execution_info); } if ((*win_info_ptr) != NULL) { (*win_info_ptr)->detail.source_info.has_locator = TRUE; tui_make_visible (locator); tui_show_locator_content (); tui_show_source_content (*win_info_ptr); if (TUI_CMD_WIN == NULL) { make_command_window (&TUI_CMD_WIN, cmd_height, src_height); tui_refresh_win (&TUI_CMD_WIN->generic); } else { init_gen_win_info (&TUI_CMD_WIN->generic, TUI_CMD_WIN->generic.type, TUI_CMD_WIN->generic.height, TUI_CMD_WIN->generic.width, TUI_CMD_WIN->generic.origin.x, TUI_CMD_WIN->generic.origin.y); TUI_CMD_WIN->can_highlight = FALSE; tui_make_visible (&TUI_CMD_WIN->generic); } } tui_set_current_layout_to (layout_type); } }