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

📄 htformat.cc

📁 功能较全面的反汇编器:反汇编器ht-2.0.15.tar.gz
💻 CC
📖 第 1 页 / 共 5 页
字号:
				case 2:					k = q.tm_min % 10 + h * 10;					if (k < 60) {						q.tm_min = k;						worked = true;					}					break;				case 3:					k = q.tm_min - q.tm_min % 10 + h;					if (k < 60) {						q.tm_min = k;						worked = true;					}					break;				case 4:					k = q.tm_sec % 10 + h * 10;					if (k < 60) {						q.tm_sec = k;						worked = true;					}					break;				case 5:					k = q.tm_sec - q.tm_sec % 10 + h;					if (k < 60) {						q.tm_sec = k;						worked = true;					}					break;				case 6:					k = (q.tm_mday % 10) + h * 10;					if (k <= 31) {						q.tm_mday = k;						worked = true;					}					break;				case 7:					k = q.tm_mday - q.tm_mday % 10 + h;					if (k <= 31) {						q.tm_mday = k;						worked = true;					}					break;				case 8:					k = (q.tm_mon+1) % 10 + h * 10;					if (k <= 12) {						q.tm_mon = k-1;						worked = true;					}					break;				case 9:					k = q.tm_mon - q.tm_mon % 10 + h;					if (k <= 12) {						q.tm_mon = k-1;						worked = true;					}					break;				case 10:					k = DEC_MASK(q.tm_year, 1000) + h * 1000;					if ((k+1900 >= 1970 ) && (k+1900 < 2106)) {						q.tm_year = k;						worked = true;					}					break;				case 11:					k = DEC_MASK(q.tm_year, 100) + h * 100;					if ((k+1900 >= 1970 ) && (k+1900 < 2106)) {						q.tm_year = k;						worked = true;					}					break;				case 12:					k = DEC_MASK(q.tm_year, 10) + h * 10;					if ((k+1900 >= 1970 ) && (k+1900 < 2106)) {						q.tm_year = k;						worked = true;					}					break;				case 13:					k = DEC_MASK(q.tm_year, 1) + h * 1;					if ((k+1900 >= 1970 ) && (k+1900 < 2106)) {						q.tm_year = k;						worked = true;					}					break;				}				/* FIXME: big bad hack... */				if (sizeof(uint32) == sizeof(time_t))				if (worked) {					/* FIXME: !!! */					uint32 tz;					time_t l = time(NULL);					time_t g = l;					struct tm *gtm = gmtime(&g);					g = mktime(gtm);					tz = (uint32)difftime(g, l);					time_t tt = mktime(&q);					d = tt;					d -= tz;					if (t[1] == HT_TAG_EDIT_TIME_LE) {						buf[0] = d>>0;						buf[1] = d>>8;						buf[2] = d>>16;						buf[3] = d>>24;					} else {						buf[3] = d>>0;						buf[2] = d>>8;						buf[1] = d>>16;						buf[0] = d>>24;					}					pwrite(cursor_tag_offset, &buf, 4);					cursormicroedit_forward();					return true;				}			}		}	}	return false;}int ht_uformat_viewer::edit_input_c2h(byte b){	int h = -1;	if (b >= '0' && b <= '9') {		h = b-'0';	} else if (b >= 'a' && b <= 'f') {		h = b-'a'+10;	} else if (b >= 'A' && b <= 'F') {		h = b-'A'+10;	}	return h;}int ht_uformat_viewer::edit_input_c2d(byte b){	int h = -1;	if (b >= '0' && b <= '9') {		h = b-'0';	}	return h;}void ht_uformat_viewer::edit_input_correctpos(){	uformat_viewer_pos p = top;	/* try finding edited tag by its offset */	char c_line[1024];	int g=cursor.tag_group;	for (int y=0; y < size.h+10; y++) {		if (!p.sub->getline(c_line, sizeof c_line, p.line_id)) break;		int c = tag_count_selectable_tags_in_group(c_line, cursor.tag_group);		for (int i=0; i < c; i++) {			char *t = tag_get_selectable_tag(c_line, i, cursor.tag_group);			if (tag_get_class(t) == tag_class_edit && tag_get_offset(t) == cursor_tag_offset) {				set_cursor(p);				cursorline_dirty();				cursor.tag_idx = i;				cursor.tag_group = g;				update_misc_info();				update_visual_info();				return;			}		}		if (!next_line(&p, 1)) break;	}	/* try finding edited tag by cursor_ypos */	p = top;	next_line(&p, cursor_ypos);	int ci = cursor.tag_idx;	set_cursor(p);	cursorline_dirty();	cursorline_get();	int x = tag_count_selectable_tags(cursor_line);	if (ci >= x) ci = x-1;	cursor.tag_idx = ci;	update_misc_info();	update_visual_info();}bool ht_uformat_viewer::edit_start(){	if (edit() && cursor.sub) {		cursor_tag_micropos=0;		cursorline_dirty();		adjust_cursor_idx();		update_visual_info();		update_misc_info();		dirtyview();		return true;	}	return false;}bool ht_uformat_viewer::edit_update(){	if (edit()) {		file->cntl(FCNTL_MODS_FLUSH);		dirtyview();		return true;	}	return false;}bool ht_uformat_viewer::find_first_tag(uformat_viewer_pos *p, int limit){	char line[1024];	int i=0;	uformat_viewer_pos q = *p;	if (!q.sub) return false;	do {		q.sub->getline(line, sizeof line, q.line_id);		if (tag_get_selectable_tag(line, 0, 0)) {			*p = q;			p->tag_idx = 0;			p->tag_group = 0;			return true;		}	} while ((next_line(&q, 1)) && (i++<limit));	return false;}bool ht_uformat_viewer::find_first_edit_tag_with_offset(uformat_viewer_pos *p, int limit, FileOfs offset){	char line[1024];	int i=0;	uformat_viewer_pos q = *p;	if (!q.sub) return false;	do {		q.sub->getline(line, sizeof line, q.line_id);		int c = tag_count_selectable_tags(line);		char *t = line;		for (int j=0; j<c; j++) {			t = tag_get_selectable_tag(t, 0, -1);			if (tag_get_class(t) == tag_class_edit && tag_get_offset(t) == offset) {				*p = q;				p->tag_idx = j;				p->tag_group = 0;				/* FIXME: what about groups ??? */				return true;			}			t += tag_get_len(t);		}	} while (next_line(&q, 1) && i++ < limit);	return false;}void ht_uformat_viewer::focus_cursor(){// why ?/*	if (cursor_state==cursor_state_invisible) {		center_view(cursor_sub, cursor_id1, cursor_id2);		cursor_state=cursor_state_visible;	}*/	update_visual_info();	if (cursor_visual_xpos-xscroll <= 1) {		if (cursor_visual_xpos>=1) xscroll = cursor_visual_xpos-1; else			xscroll = 0;	} else if (cursor_visual_xpos+cursor_visual_length-xscroll > size.w-1) {		xscroll = cursor_visual_xpos+cursor_visual_length-size.w+1;	}}const char *ht_uformat_viewer::func(uint i, bool execute){	switch (i) {		case 2:			if (caps & VC_EDIT) {				if (edit()) {					if (execute) app->sendmsg(cmd_file_save);//					if (execute) edit_update();					return "save";				} else {					return "~save";				}			}			break;/*		case 3:			if (caps & VC_REPLACE) {				if (edit()) {					if (execute) sendmsg(cmd_file_replace);					return "replace";				} else {					return "~replace";				}			}			break;*/		case 4:			if (caps & VC_EDIT) {				if (edit()) {					if (execute) {						FileOfs start = 0;						FileOfs size = file->getSize();						bool isdirty = false;												file->cntl(FCNTL_MODS_IS_DIRTY, start, size, &isdirty);						char q[1024];						String fn;						if (!file->getFilename(fn).isEmpty()) {							ht_snprintf(q, sizeof q,								"file %y has been modified, apply changes?",								&fn);						} else {							ht_snprintf(q, sizeof q,								"untitled file has been modified, apply changes?");						}						if (isdirty && confirmbox(q) == button_yes) {							file->cntl(FCNTL_MODS_FLUSH);						} else {							file->cntl(FCNTL_MODS_INVD);						}						if (size != file->getSize()) {							htmsg m;							m.msg = msg_filesize_changed;							m.type = mt_broadcast;							sendmsg(&m);						}						baseview->sendmsg(cmd_view_mode_i, file, NULL);					}					return "view";				} else {					if (execute) baseview->sendmsg(cmd_edit_mode_i, file, NULL);					return "edit";				}			}			break;		case 5:			if (caps & VC_GOTO) {				if (execute) sendmsg(cmd_file_goto);				return "goto";			}			break;		case 7:			if (caps & VC_SEARCH) {				if (execute) sendmsg(cmd_file_search);				return "search";			}			break;		case 8:			if (caps & VC_RESIZE) {				if (edit()) {					if (execute) sendmsg(cmd_file_resize);					return "resize";				} else {					return "~resize";				}			}			break;		case 9: {			if (execute) {				FileOfs o;				if (get_current_real_offset(&o)) {					char title[128];					ht_snprintf(title, sizeof title, "view offset %08qx in...", o);					ht_view *v = ((ht_app*)app)->popup_view_list(title);					if (v) {						htmsg m;						m.msg = msg_goto_offset;						m.type = mt_empty;						m.data1.q = o;						v->sendmsg(&m);						if (m.msg == msg_empty) {							vstate_save();							app->focus(v);						} else {							errorbox("offset %08qx is not supported/invalid in '%s'", o, v->desc);						}					}				}			}			return "viewin...";		}	}	return ht_format_viewer::func(i, execute);}vcp ht_uformat_viewer::getcolor_tag(uint pal_index){	return getcolorv(&tagpal, pal_index);}bool ht_uformat_viewer::get_current_offset(FileOfs *offset){	if (cursor_state != cursor_state_disabled && cursor_tag_class == tag_class_edit) {		*offset = cursor_tag_offset;		return true;	}	return false;}bool ht_uformat_viewer::get_current_pos(viewer_pos *pos){	clear_viewer_pos(pos);	pos->u = cursor;	return true;}bool ht_uformat_viewer::get_current_tag(char **tag){	cursorline_get();	char *e = tag_get_selectable_tag(cursor_line, cursor.tag_idx, cursor.tag_group);	if (e) {		*tag = e;		return true;	}	return false;}bool ht_uformat_viewer::get_current_tag_size(uint32 *size){	if (cursor_tag_class == tag_class_edit) {		cursorline_get();		char *e = tag_get_selectable_tag(cursor_line, cursor.tag_idx, cursor.tag_group);		if (e) {			*size = tag_get_size(e);			return true;		}	}	return false;}void ht_uformat_viewer::handlemsg(htmsg *msg){	switch (msg->msg) {		case msg_get_pindicator:			msg->data1.integer = get_pindicator_str((char*)msg->data2.ptr, msg->data1.integer);			clearmsg(msg);			return;		case msg_get_scrollinfo:			switch (msg->data1.integer) {				case gsi_hscrollbar: {					gsi_scrollbar_t *p = (gsi_scrollbar_t*)msg->data2.ptr;					if (!get_hscrollbar_pos(&p->pstart, &p->psize)) {						p->pstart = 0;						p->psize = 100;					}					clearmsg(msg);					return;				}				case gsi_vscrollbar: {					gsi_scrollbar_t *p = (gsi_scrollbar_t*)msg->data2.ptr;					if (!get_vscrollbar_pos(&p->pstart, &p->psize)) {						p->pstart = 0;						p->psize = 100;					}					clearmsg(msg);					return;				}			}			break;		case msg_complete_init:			complete_init();			clearmsg(msg);			return;		case msg_keypressed:			switch (msg->data1.integer) {				case K_Meta_S:					if (cursor_select) {					    select_mode_off();					} else {					    select_mode_on();					}					clearmsg(msg);					dirtyview();					return;				case K_Up:					select_mode_pre();					cursor_up(1);					select_mode_post(0);					clearmsg(msg);					dirtyview();					return;				case K_Down:					select_mode_pre();					cursor_down(1);					select_mode_post(0);					clearmsg(msg);					dirtyview();					return;				case K_PageUp:					select_mode_pre();					cursor_up(size.h);					select_mode_post(0);					clearmsg(msg);					dirtyview();					return;				case K_PageDown:					select_mode_pre();					cursor_down(size.h);					select_mode_post(0);					clearmsg(msg);					dirtyview();					return;				case K_Left:					if (cursor_state!=cursor_state_disabled) {						select_mode_pre();						if (edit()) cursormicro_backward(); else cursor_left();						select_mode_post(0);						focus_cursor();						clearmsg(msg);						dirtyview();						return;					}					break;				case K_Right:					if (cursor_state!=cursor_state_disabled) {						int r;						select_mode_pre();						if (edit()) r=cursormicro_forward(); else r=cursor_right();						select_mode_post(!r);						focus_cursor();						clearmsg(msg);						dirtyview();						return;					}					break;				case K_Return:					switch (cursor_tag_class) {						case tag_class_sel:							ref();							break;						case tag_class_edit:							if (edit()) {								edit_input(msg->data1.integer);							}							break;					}					dirtyview();					clearmsg(msg);					return;				case K_Backspace: {					FileOfs f;					if (edit() && (cursor_tag_class == tag_class_edit)					&& get_current_offset(&f)) {						file->cntl(FCNTL_MODS_CLEAR_DIRTY_RANGE, f, 1);						cursor_left();						focus_cursor();						dirtyview();						clearmsg(msg);					}                         					return;				}				case K_Tab: {					int c=cursor.tag_group;					cursor_tab();					if (cursor.tag_group!=c) {						focus_cursor();						update_visual_info();						dirtyview();						clearmsg(msg);						return;					}					break;				}				case K_Home:					if (cursor_state==cursor_state_visible) {						select_mode_pre();						cursor_home();						select_mode_post(0);						focus_cursor();						clearmsg(msg);						dirtyview();						return;					}					break;				case K_End:					if (cursor_state==cursor_state_visible) {						select_mode_pre();						cursor_end();						select_mode_post(0);						focus_cursor();						clearmsg(msg);						dirtyview();						return;					}					break;				case K_Control_Left:					xscroll-=2;					if (xscroll<0) xscroll=0;					dirtyview();

⌨️ 快捷键说明

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