⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htformat.cc

📁 功能较全面的反汇编器:反汇编器ht-2.0.15.tar.gz
💻 CC
📖 第 1 页 / 共 5 页
字号:
					clearmsg(msg);					return;				case K_Control_Right:					xscroll+=2;					dirtyview();					clearmsg(msg);					return;				case K_Control_PageUp: {					top.sub = first_sub;					if (top.sub) {						vstate_save();						select_mode_pre();						top.sub->first_line_id(&top.line_id);						uformat_viewer_pos p = top;						p.tag_group = cursor.tag_group;						if (find_first_tag(&p, size.h)) {							set_cursor(p);						} else {							cursor_ypos = 0x7fffffff;							update_misc_info();							update_visual_info();							check_cursor_visibility();						}						select_mode_post(0);					}					clearmsg(msg);					dirtyview();					return;				}				case K_Control_PageDown: {					top.sub = last_sub;					if (top.sub) {						vstate_save();						select_mode_pre();						top.sub->last_line_id(&top.line_id);						uformat_viewer_pos p = top;						p.tag_group = cursor.tag_group;						if (find_first_tag(&p, 1)) {							set_cursor(p);						} else {							cursor_ypos = 0x7fffffff;							update_misc_info();							update_visual_info();							check_cursor_visibility();						}												cursor_up(size.h);						cursor_down(size.h);												select_mode_post(0);					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_Up: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class == tag_class_edit)						s = cursor_tag_offset;					else						s = (sel_end > sel_start) ? sel_end : -1ULL;					e = get_current_tag_size(&ts) ? s+ts : -1ULL;					cursor_up(1);					if (s != -1ULL) {						if (cursor_tag_class == tag_class_edit) {							pselect_add(s, cursor_tag_offset);						} else if (cursor_tag_class == tag_class_sel 						       && e != -1ULL) {							pselect_add(s, e);						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_Down: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class == tag_class_edit)						s = cursor_tag_offset;					else						s = (sel_end > sel_start) ? sel_end : -1ULL;					e = get_current_tag_size(&ts) ? s+ts : -1ULL;					cursor_down(1);					if (s != -1ULL) {						if (cursor_tag_class == tag_class_edit) {							pselect_add(s, cursor_tag_offset);						} else if (cursor_tag_class == tag_class_sel						        && e != -1ULL) {							pselect_add(s, e);						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_Left: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class==tag_class_edit)						s = cursor_tag_offset;					else						s = sel_end > sel_start ? sel_end : -1ULL;					e = get_current_tag_size(&ts) ? s+ts : -1ULL;					int r;					if (edit()) r = cursormicro_backward(); else r = cursor_left();					if (s != -1ULL && r) {						if (cursor_tag_class == tag_class_edit) {							pselect_add(s, cursor_tag_offset);						} else if (cursor_tag_class == tag_class_sel && e != -1ULL) {							pselect_add(s, e);						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_Right: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class == tag_class_edit)						s = cursor_tag_offset;					else						s = (sel_end > sel_start) ? sel_end : -1ULL;					e=get_current_tag_size(&ts) ? s+ts : -1ULL;					int r;					if (edit()) r = cursormicro_forward(); else r = cursor_right();					if (s != -1ULL) {						if (r) {							if (cursor_tag_class == tag_class_edit) {								pselect_add(s, cursor_tag_offset);							} else if (cursor_tag_class == tag_class_sel && e != -1ULL) {								pselect_add(s, e);							}						} else {							if (cursor_tag_class == tag_class_edit && sel_end != e) {								pselect_add(s, e);							}						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_PageUp: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class == tag_class_edit)						s = cursor_tag_offset;					else						s = (sel_end > sel_start) ? sel_end : -1ULL;					e = get_current_tag_size(&ts) ? s+ts : -1ULL;					cursor_up(size.h);					if (s != -1ULL) {						if (cursor_tag_class == tag_class_edit) {							pselect_add(s, cursor_tag_offset);						} else if (cursor_tag_class == tag_class_sel && e != -1ULL) {							pselect_add(s, e);						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_PageDown: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class==tag_class_edit)						s=cursor_tag_offset;					else						s=(sel_end>sel_start) ? sel_end : -1ULL;					e=get_current_tag_size(&ts) ? s+ts : -1ULL;					cursor_down(size.h);					if (s != -1ULL) {						if (cursor_tag_class==tag_class_edit) {							pselect_add(s, cursor_tag_offset);						} else if (cursor_tag_class == tag_class_sel && e != -1ULL) {							pselect_add(s, e);						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_Home: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class==tag_class_edit)						s=cursor_tag_offset;					else						s=(sel_end>sel_start) ? sel_end : -1ULL;					e=get_current_tag_size(&ts) ? s+ts : -1ULL;					int r=cursor_home();					if (s != -1ULL && r) {						if (cursor_tag_class == tag_class_edit) {							pselect_add(cursor_tag_offset, s);						} else if (cursor_tag_class == tag_class_sel && e != -1ULL) {							pselect_add(e, s);						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Shift_End: {					focus_cursor();					FileOfs s, e;					uint32 ts;					if (cursor_tag_class==tag_class_edit)						s=cursor_tag_offset;					else						s=(sel_end>sel_start) ? sel_end : -1ULL;					e=get_current_tag_size(&ts) ? s+ts : -1ULL;					int r=cursor_end();					if (s != -1ULL && r){						if (cursor_tag_class == tag_class_edit) {							pselect_add(s, cursor_tag_offset);						} else if (cursor_tag_class == tag_class_sel && e != -1ULL) {							pselect_add(s, e);						}					}					clearmsg(msg);					dirtyview();					return;				}				case K_Control_F:					if (caps & VC_SEARCH) {						sendmsg(cmd_file_search);						dirtyview();						clearmsg(msg);						return;					}					break;				case K_Control_L:				case K_Shift_F7:					if (caps & VC_SEARCH) {						if (!continue_search()) {							if (last_search_request) {								infobox("no further matches");							} else {								infobox("you must 'search' first!");							}						}						dirtyview();						clearmsg(msg);						return;					}					break;				case K_Meta_C:				case K_Control_Insert:					sendmsg(cmd_edit_copy);					dirtyview();					clearmsg(msg);					return;				case K_Meta_V:				case K_Shift_Insert:					sendmsg(cmd_edit_paste);					dirtyview();					clearmsg(msg);					return;				case K_Escape:					if (caps & VC_EDIT) {						baseview->sendmsg(cmd_view_mode_i, file, NULL);						return;					}											break;				default: {					if (((uint32)msg->data1.integer<=255) && (edit())) {						if (cursor_tag_class==tag_class_edit) {							focus_cursor();							if (edit_input(msg->data1.integer)) {								dirtyview();								clearmsg(msg);								return;							}						}					}				}			}			break;		case cmd_edit_copy:			if (sel_end > sel_start) {				char dsc[1024];				String fn;				ht_snprintf(dsc, sizeof dsc, "%y::%s", &file->getFilename(fn), desc);				clipboard_copy(dsc, file, sel_start, sel_end-sel_start);			}			clearmsg(msg);			return;		case cmd_edit_paste:			FileOfs ofs;			if (get_current_offset(&ofs)) {				baseview->sendmsg(cmd_edit_mode_i, file, NULL);				if (file->getAccessMode() & IOAM_WRITE) {					FileOfs s = clipboard_paste(file, ofs);					if (s) {						pselect_set(ofs, ofs+s);						sendmsg(cmd_edit_mode_i);					}				}			}			dirtyview();			clearmsg(msg);			return;		case cmd_edit_mode:			edit_start();			dirtyview();			return;		case cmd_view_mode:			edit_end();			dirtyview();			return;		case cmd_file_goto: {			char addrstr[1024];			addrstr[0] = 0;			while (address_input("goto", addrstr, sizeof addrstr, HISTATOM_GOTO) != button_cancel) {				if (addrstr[0]) {					viewer_pos pos;					globalerror[0] = 0;					if (string_to_pos(addrstr, &pos) && goto_pos(pos, this)) {						focus_cursor();						break;					}					if (globalerror[0]) {						infobox("error: %s\nin '%s'", globalerror, addrstr);					} else {						infobox("invalid address: '%s'", addrstr);					}				}			}			clearmsg(msg);			dirtyview();			return;		}		case cmd_file_search: {			viewer_pos start_pos, end_pos;			get_current_pos(&start_pos);			clear_viewer_pos(&end_pos);			end_pos.u.sub = last_sub;			end_pos.u.tag_idx = -1;			last_sub->last_line_id(&end_pos.u.line_id);			ht_search_request *request = search_dialog(this, search_caps, &start_pos, &end_pos);			ht_search_result *result = NULL;			if (request) {				switch (request->search_class) {					case SC_PHYSICAL: {						try {							FileOfs start, end;							if (pos_to_offset(start_pos, &start)) {								if (!pos_to_offset(end_pos, &end)) {									end = FileOfs(-1);								}								result = psearch(request, start, end);							}						} catch (const Exception &e) {							errorbox("error: %y", &e);						}						break;					}					case SC_VISUAL: {						try {							result = vsearch(request, start_pos, end_pos);						} catch (const Exception &e) {							errorbox("error: %y", &e);						}						break;					}				}				delete request;				if (result) {					// FIXME: !!!!!!!!					if (!show_search_result(result)) infobox("couldn't display result (internal error)");					delete result;				} else infobox("not found");			}			clearmsg(msg);			dirtyview();			return;		}		case cmd_file_replace: {			sendmsg(cmd_edit_mode_i);			if (edit()) {				bool cancel;				FileOfs s = get_file()->getSize();				uint repls = replace_dialog(this, search_caps, &cancel);				if (repls) {					if (s != get_file()->getSize()) {						sendmsg(msg_filesize_changed);					}					infobox("%d replacement(s) made", repls);				}			}			clearmsg(msg);			dirtyview();			return;		}		case msg_filesize_changed: {			htmsg m;			m.msg = msg_filesize_changed;			m.type = mt_broadcast;			sendsubmsg(&m);			break;		}		case cmd_file_save: {			if (edit()) edit_update();			clearmsg(msg);			return;		}		case cmd_file_resize: {			FileOfs o = 0;			if (get_current_offset(&o)) {				uint32 s;				if (get_current_tag_size(&s)) {					o += s;				}			}			if (!o) o = clipboard_getsize();			FileOfs s = file->getSize();			char buf[32];			ht_snprintf(buf, sizeof buf, "%qd", o);			if (inputbox("resize", "new file size", buf, sizeof buf, 0)==button_ok) {				eval_scalar r;				if (eval(&r, buf, NULL, NULL, NULL)) {					eval_int i;					scalar_context_int(&r, &i);					scalar_destroy(&r);					o = i.value;					if (o < s) {						/* truncate */						htmsg m;						m.msg = cmd_file_truncate;						m.type = mt_broadcast;						m.data1.ptr = file;						m.data2.q = o;						baseview->sendmsg(&m);						m.msg = msg_filesize_changed;						m.type = mt_broadcast;						sendsubmsg(&m);						sendmsg(&m);					} else if (o>s) {						/* extend */						htmsg m;									m.msg = cmd_file_extend;						m.type = mt_broadcast;						m.data1.ptr = file;						m.data2.q = o;						baseview->sendmsg(&m);						m.msg = msg_filesize_changed;						m.type = mt_broadcast;						sendsubmsg(&m);						sendmsg(&m);					}				} else {					const char *errmsg="?";					int errpos=0;					get_eval_error(&errmsg, &errpos);					errorbox("eval error: %s at %d\n in '%s'", errmsg, errpos, buf);				}				update_misc_info();			}			clearmsg(msg);			dirtyview();			return;		}		case cmd_file_blockop: {			if (sel_end>sel_start) {				blockop_dialog(this, sel_start, sel_end);			} else {				FileOfs o = 0;				get_current_offset(&o);				blockop_dialog(this, o, file->getSize());			}			clearmsg(msg);			dirtyview();			return;		}	}	ht_format_viewer::handlemsg(msg);}void ht_uformat_viewer::insertsub(ht_sub *sub){	if (last_sub) last_sub->next = sub;	sub->uformat_viewer = this;	sub->prev = last_sub;	last_sub = sub;	if (!first_sub) first_sub = sub;}bool ht_uformat_viewer::goto_offset(FileOfs offset, bool save_vstate){	uformat_viewer_pos p;	p.sub = first_sub;	p.tag_group = cursor.tag_group;	while (p.sub) {		if (p.sub->convert_ofs_to_id(offset, &p.line_id)) {			if (save_vstate) vstate_save();			switch (cursor_state) {			case cursor_state_visible: {				select_mode_pre();				/* FIXME: magic 42 */				if (!find_first_edit_tag_with_offset(&p, 42, offset)					&& !find_first_tag(&p, size.h)) break;				bool r = set_cursor(p);				select_mode_post(false);				return r;			}			case cursor_state_invisible:				select_mode_pre();				p.tag_group = -1;				p.tag_idx = -1;				bool r = set_cursor(p);				select_mode_post(false);				return r;			}			break;		}		p.sub = p.sub->next;	}	return false;}bool ht_uformat_viewer::goto_pos(viewer_pos pos, bool save_vstate){	if (save_vstate) vstate_save();	select_mode_pre();	set_cursor(pos.u);	select_mode_post(false);	return true;}bool ht_uformat_viewer::next_logical_pos(viewer_pos pos, viewer_pos *npos){	if (next_line(&pos.u, 1) == 1) {		*npos = pos;		return true;	}	return false;}bool ht_uformat_viewer::next_logical_offset(FileOfs ofs, FileOfs *nofs){	*nofs = ofs + 1;	return true;}int ht_uformat_viewer::next_line(uformat_viewer_pos *p, int n){	int n0 = n;	while (n) {		if (n -= p->sub->next_line_id(&p->line_id, n)) {			if (!p->sub->next) return n0 - n;			p->sub = p->sub->next;			p->sub->first_line_id(&p->line_id);			p->tag_idx = -1;			n--;		}	}	ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -