/* Scroll the disassembly forward or backward vertically. */ void tui_vertical_disassem_scroll (enum tui_scroll_direction scroll_direction, int num_to_scroll) { if (TUI_DISASM_WIN->generic.content != NULL) { CORE_ADDR pc; tui_win_content content; struct symtab *s; struct tui_line_or_address val; int max_lines, dir; struct symtab_and_line cursal = get_current_source_symtab_and_line (); content = (tui_win_content) TUI_DISASM_WIN->generic.content; if (cursal.symtab == (struct symtab *) NULL) s = find_pc_symtab (get_frame_pc (deprecated_selected_frame)); else s = cursal.symtab; /* account for hilite */ max_lines = TUI_DISASM_WIN->generic.height - 2; pc = content[0]->which_element.source.line_or_addr.u.addr; dir = (scroll_direction == FORWARD_SCROLL) ? max_lines : - max_lines; val.loa = LOA_ADDRESS; val.u.addr = tui_find_disassembly_address (pc, dir); tui_update_source_window_as_is (TUI_DISASM_WIN, s, val, FALSE); } }
/* Scroll the disassembly forward or backward vertically. */ void tui_vertical_disassem_scroll (enum tui_scroll_direction scroll_direction, int num_to_scroll) { if (TUI_DISASM_WIN->generic.content != NULL) { struct gdbarch *gdbarch = TUI_DISASM_WIN->detail.source_info.gdbarch; CORE_ADDR pc; tui_win_content content; struct tui_line_or_address val; int dir; content = (tui_win_content) TUI_DISASM_WIN->generic.content; pc = content[0]->which_element.source.line_or_addr.u.addr; num_to_scroll++; dir = (scroll_direction == FORWARD_SCROLL) ? num_to_scroll : -num_to_scroll; val.loa = LOA_ADDRESS; val.u.addr = tui_find_disassembly_address (gdbarch, pc, dir); tui_update_source_window_as_is (TUI_DISASM_WIN, gdbarch, NULL, val, FALSE); } }
/* Determine what the low address will be to display in the TUI's disassembly window. This may or may not be the same as the low address input. */ CORE_ADDR tui_get_low_disassembly_address (CORE_ADDR low, CORE_ADDR pc) { int pos; /* Determine where to start the disassembly so that the pc is about in the middle of the viewport. */ pos = tui_default_win_viewport_height (DISASSEM_WIN, DISASSEM_COMMAND) / 2; pc = tui_find_disassembly_address (pc, -pos); if (pc < low) pc = low; return pc; }