def _search_text(self, acting_client, direction, work_state=None): # Start after the current line. line_number = self.get_line_number(acting_client) + direction line_count = self.get_line_count(acting_client) result_lower_case = self.last_search_text.lower() while line_number >= 0 and line_number < line_count and not work_state.is_cancelled(): text = disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_LABEL) text += " "+ disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_INSTRUCTION) text += " "+ disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_OPERANDS) if disassembly.DEBUG_ANNOTATE_DISASSEMBLY: text += " "+ disassembly.get_file_line(self.disassembly_data, line_number, disassembly.LI_ANNOTATIONS) if result_lower_case in text.lower(): break line_number += direction if direction == 1: work_state.set_completeness(line_number / float(line_count)) else: work_state.set_completeness((line_count - line_number) / float(line_count)) work_state.set_description("Line %d" % line_number) else: return ERRMSG_NO_IDENTIFIABLE_DESTINATION # We broke out on a match. if not work_state.is_cancelled(): return line_number
def get_row_for_line_number(self, acting_client, line_idx): return [ disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_OFFSET), disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_BYTES), disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_LABEL), disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_INSTRUCTION), disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_OPERANDS), ]
def export_source_code(self, acting_client): if self.state_id != EditorState.STATE_LOADED: return ERRMSG_TODO_BAD_STATE_FUNCTIONALITY line_count = disassembly.get_file_line_count(self.disassembly_data) # Prompt for save file name. save_file = acting_client.request_code_save_file() if save_file is not None: for i in xrange(line_count): label_text = disassembly.get_file_line(self.disassembly_data, i, disassembly.LI_LABEL) instruction_text = disassembly.get_file_line(self.disassembly_data, i, disassembly.LI_INSTRUCTION) operands_text = disassembly.get_file_line(self.disassembly_data, i, disassembly.LI_OPERANDS) if label_text: save_file.write(label_text) if instruction_text or operands_text: save_file.write("\t") save_file.write(instruction_text) if operands_text: save_file.write("\t") save_file.write(operands_text) save_file.write("\n") save_file.close()
def get_file_line(self, acting_client, row, column): if self.disassembly_data is None: return "" return disassembly.get_file_line(self.disassembly_data, row, column)
def get_source_code_for_line_number(self, acting_client, line_idx): code_string = disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_INSTRUCTION) operands_text = disassembly.get_file_line(self.disassembly_data, line_idx, disassembly.LI_OPERANDS) if len(operands_text): code_string += " "+ operands_text return code_string