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

📄 htapp.cc

📁 功能较全面的反汇编器:反汇编器ht-2.0.15.tar.gz
💻 CC
📖 第 1 页 / 共 5 页
字号:
								errorbox_modal("%s: error (%04x) changing attribute", name, errno & 0xffff);							} else {								return SERR_RETRY;							}						}					}				}				break;#endif			}			default:				errorbox_modal("%s: stream error %04x: %s", name, err, strerror(err));		}	} else {		err=err&0xffff;		errorbox_modal("%s: internal stream error %04x", name, err);	}	return SERR_FAIL;}#endif/* *   app_out_of_memory_proc() */void *app_memory_reserve = NULL;int app_out_of_memory_proc(int size){	if (app_memory_reserve) {		free(app_memory_reserve);		app_memory_reserve = 0;		warnbox_modal("the memory is getting low...");		return OUT_OF_MEMORY_RETRY;	} else {		return OUT_OF_MEMORY_FAIL;	}}/* *	CLASS ht_project */ht_project::ht_project(const char *fn)	: AVLTree(true){	filename = ht_strdup(fn);}ht_project::~ht_project(){	free(filename);}const char *ht_project::get_filename(){	return filename;}void ht_project::load(ObjectStream &s){	// FIXME: probably not The Right Thing	String fn;	filename = ht_strdup(s.getDesc(fn).contentChar());	AVLTree::load(s);}ObjectID ht_project::getObjectID() const{	return ATOM_HT_PROJECT;}void ht_project::store(ObjectStream &s) const{	AVLTree::store(s);}/* *	CLASS ht_project_item */ht_project_item::ht_project_item(const char *f, const char *p){	filename = ht_strdup(f);	path = ht_strdup(p);}ht_project_item::~ht_project_item(){	free(filename);	free(path);}const char *ht_project_item::get_filename() const{	return filename;}const char *ht_project_item::get_path() const{	return path;}int ht_project_item::compareTo(const Object *obj) const{	ht_project_item *b = (ht_project_item *)obj;	int c = sys_filename_cmp(get_path(), b->get_path());	return (c == 0) ? sys_filename_cmp(get_filename(), b->get_filename()) : c;}void ht_project_item::load(ObjectStream &s){	GET_STRING(s, path);	GET_STRING(s, filename);}ObjectID ht_project_item::getObjectID() const{	return ATOM_HT_PROJECT_ITEM;}void ht_project_item::store(ObjectStream &s) const{	PUT_STRING(s, path);	PUT_STRING(s, filename);}/* *	CLASS ht_project_list */void	ht_project_listbox::init(Bounds *b, ht_project *p){	project = p;	ht_listbox::init(b);	colwidths[0] = 16;	colwidths[1] = 16;}int  ht_project_listbox::calcCount(){	return project ? project->count() : 0;}void ht_project_listbox::draw(){	if (project) {		ht_listbox::draw();	} else {			vcp fc = focused ? getcolor(palidx_generic_list_focused_unselected) :			getcolor(palidx_generic_list_unfocused_unselected);		clear(fc);		buf->print(0, 0, fc, "<no project>");	}}const char *ht_project_listbox::func(uint i, bool execute){	return NULL;}void *ht_project_listbox::getFirst(){	if (project && project->count()) {		return (void*)1;	} else {		return NULL;	}}void *ht_project_listbox::getLast(){	if (project && project->count()) {		return (void*)(project->count());	} else {		return NULL;	}}void *ht_project_listbox::getNext(void *entry){	unsigned long e=(unsigned long)entry;	if (!e) return NULL;	if (project && (e < project->count())) {		return (void*)(e+1);	} else {		return NULL;	}}void *ht_project_listbox::getPrev(void *entry){	unsigned long e=(unsigned long)entry;	if (e > 1) {		return (void*)(e-1);	} else {		return NULL;	}}const char *ht_project_listbox::getStr(int col, void *entry){	static char mybuf[32];	if (project) switch (col) {		case 0:			ht_snprintf(mybuf, sizeof mybuf, "%s", ((ht_project_item*)(*project)[(long)entry-1])->get_filename());			break;		case 1:			ht_snprintf(mybuf, sizeof mybuf, "%s", ((ht_project_item*)(*project)[(long)entry-1])->get_path());			break;		default:			strcpy(mybuf, "?");	} else {		strcpy(mybuf, "<no project>");	}	return mybuf;}void ht_project_listbox::handlemsg(htmsg *msg){	switch (msg->msg) {		case cmd_project_add_item: {			if (project) {				char fn[FILENAME_MAX];				if (file_chooser("Add project item", fn, sizeof fn)) {					char ffn[HT_NAME_MAX];					char *dir;					if (sys_common_canonicalize(ffn, fn, NULL, sys_is_path_delim) == 0					 && sys_basename(fn, ffn) == 0					 && (dir = sys_dirname(ffn)) ) {						ht_project_item *p = new ht_project_item(fn, dir);						((ht_project*)project)->insert(p);						app->sendmsg(msg_project_changed);						free(dir);					}				}			}			clearmsg(msg);			return;		}		case cmd_project_remove_item: {			int p = pos;			ht_project_item *pi = (ht_project_item*)(*project)[p];			if (calcCount() && confirmbox("Really remove item '%s'?", pi->get_filename()) == button_ok) {				cursorUp(1);				project->delObj(pi);				update();				if (p) cursorDown(1);				dirtyview();				rearrangeColumns();			}			clearmsg(msg);			return;		}		case msg_keypressed: {			switch (msg->data1.integer) {				case K_Return: {					if (calcCount() && selectEntry(e_cursor)) {						clearmsg(msg);						return;					}				}			}			break;		}	}	ht_listbox::handlemsg(msg);}int ht_project_listbox::numColumns(){	return 2;}void *ht_project_listbox::quickfind(const char *s){	void *item = getFirst();	int slen = strlen(s);	while (item && (ht_strncmp(getStr(0, item), s, slen)!=0)) {		item = getNext(item);	}	return item;}char	*ht_project_listbox::quickfindCompletition(const char *s){	void *item = getFirst();	char *res = NULL;	int slen = strlen(s);	while (item) {		if (ht_strncmp(getStr(0, item), s, slen)==0) {			if (!res) {				res = ht_strdup(getStr(0, item));			} else {				int a = ht_strccomm(res, getStr(0, item));				res[a] = 0;			}		}		item = getNext(item);	}	return res;}bool ht_project_listbox::selectEntry(void *entry){	int p = pos;	ht_project_item *i = (ht_project_item *)(*project)[p];	char fn[HT_NAME_MAX];	if (sys_common_canonicalize(fn, i->get_filename(), i->get_path(), sys_is_path_delim)==0) {		((ht_app*)app)->create_window_file(fn, FOM_AUTO, false);	}	return true;}void ht_project_listbox::set_project(ht_project *p){	project = p;	update();}/* *	CLASS ht_project_window */void ht_project_window::init(Bounds *b, const char *desc, uint framestyle, uint number, ht_project **p){	ht_window::init(b, desc, framestyle, number);	project = p;	Bounds c = *b;	c.x = 0;	c.y = 0;	c.w -= 2;	c.h -= 2;	plb = new ht_project_listbox();	plb->init(&c, *p);	insert(plb);	sendmsg(msg_project_changed);}void ht_project_window::done(){	ht_window::done();}void ht_project_window::handlemsg(htmsg *msg){	switch (msg->msg) {		case msg_project_changed: {			const char *t = *project ? (*project)->get_filename() : NULL;			if (t) {				ht_snprintf(wtitle, sizeof wtitle, "project '%s'", t); 			} else {				strcpy(wtitle, "project window");			}			settitle(wtitle);			plb->set_project(*project);			break;		}		case msg_contextmenuquery: {			ht_static_context_menu *projects = new ht_static_context_menu();			projects->init("~Project");			projects->insert_entry("~Add item", "Insert", cmd_project_add_item, K_Insert, 1);			projects->insert_entry("~Remove item", "Delete", cmd_project_remove_item, K_Delete, 1);//			projects->insert_entry("~Edit item", NULL, cmd_project_edit_item, 0, 1);			msg->msg = msg_retval;			msg->data1.ptr = projects;			return;		}	}	ht_window::handlemsg(msg);}/* *	CLASS ht_status */void ht_status::init(Bounds *b){	ht_view::init(b, VO_TRANSPARENT_CHARS | VO_RESIZE, 0);	VIEW_DEBUG_NAME("ht_status");	growmode = MK_GM(GMH_FIT, GMV_TOP);	idle_count = 0;	analy_ani = 0;	clear_len = 0;	format = get_config_string("misc/statusline");		if (!format) {		format = strdup(STATUS_DEFAULT_FORMAT);	}		render();	register_idle_object(this);}void ht_status::done(){	unregister_idle_object(this);	free(format);	ht_view::done();}const char *ht_status::defaultpalette(){	return palkey_generic_menu_default;}void ht_status::draw(){	fill(size.w-clear_len, 0, clear_len, 1, getcolor(palidx_generic_text_focused), ' ');	int len = strlen(workbuf);	clear_len = len;	buf->print(size.w-len, 0, getcolor(palidx_generic_text_focused), workbuf);}void ht_status::handlemsg(htmsg *msg){	switch (msg->msg) {	case msg_config_changed:		free(format);		format = get_config_string("misc/statusline");		break;	}	ht_view::handlemsg(msg);}void ht_status::getminbounds(int *width, int *height){	*width = 1;	*height = 1;}bool ht_status::idle(){	if (idle_count % 100 == 0) {		char *oldstatus = ht_strdup(workbuf);		render();		if (strcmp(oldstatus, workbuf)) {			dirtyview();			redraw();			screen->show();		}		free(oldstatus);				analy_ani++;		analy_ani &= 7;	}	idle_count++;	return false;}void ht_status::render(){	char *f = format;	char *buf = workbuf;	if (f)	while (*f) {		if (*f == STATUS_ESCAPE) {			switch (*(++f)) {			case STATUS_ESCAPE:				*(buf++) = STATUS_ESCAPE;				break;			case STATUS_ANALY_ACTIVE:				if (some_analyser_active) {					const char *analysers[] = {"Analy", "aNaly", "anAly", "anaLy", "analY", "anaLy", "anAly", "aNaly"};					strcpy(buf, analysers[analy_ani]);					buf += 5;				}				break;			case STATUS_ANALY_LINES:				if (some_analyser_active) {					buf += sprintf(buf, "(%d)", num_ops_parsed);				}				break;			case STATUS_TIME: {				time_t Time;				time(&Time);				tm *t = localtime(&Time);				buf += sprintf(buf, "%02d:%02d", t->tm_hour, t->tm_min);				break;			}			case STATUS_DATE: {				time_t Time;				time(&Time);				tm *t = localtime(&Time);				buf += sprintf(buf, "%02d.%02d.%04d", t->tm_mday, t->tm_mon+1, t->tm_year+1900);				break;			}			}		} else {			*(buf++) = *f;		}		f++;	}	*buf = 0;}/* *	CLASS ht_keyline */void ht_keyline::init(Bounds *b){	ht_view::init(b, VO_RESIZE, 0);	VIEW_DEBUG_NAME("ht_keyline");	growmode = MK_GM(GMH_FIT, GMV_BOTTOM);}void ht_keyline::done(){	ht_view::done();}const char *ht_keyline::defaultpalette(){	return palkey_generic_keys_default;}void ht_keyline::draw(){	clear(getcolor(palidx_generic_text_disabled));	int x = 0;	for (int i = 1; i <= 10; i++) {		htmsg msg;		msg.type = mt_empty;		msg.msg = msg_funcquery;		msg.data1.integer = i;		baseview->sendmsg(&msg);		buf->printChar(x, 0, getcolor(palidx_generic_text_shortcut), '0'+i%10);		if (msg.msg == msg_retval) {			char *s = msg.data1.str;			if (s) {				if (s[0]=='~') {					buf->print(x+1, 0, getcolor(palidx_generic_text_disabled), s+1);				} else {					for (int j=0; j<size.w/10-1; j++) {						buf->print(x+j+1, 0, getcolor(palidx_generic_text_focused), " ");					}					buf->print(x+1, 0, getcolor(palidx_generic_text_focused), s);				}			}		}		x += size.w / 10;	}}void ht_keyline::getminbounds(int *width, int *height){	*width = 1;	*height = 1;}/* *	CLASS ht_desktop */void ht_desktop::init(Bounds *b){	ht_view::init(b, VO_OWNBUFFER | VO_RESIZE, 0);	VIEW_DEBUG_NAME("ht_desktop");	growmode = MK_GM(GMV_FIT, GMH_FIT);}const char *ht_desktop::defaultpalette(){	return palkey_generic_desktop_default;}void ht_desktop::draw(){	fill(0, 0, size.w, size.h, getcolor(palidx_generic_body), GC_MEDIUM, CP_GRAPHICAL);}/* *	CLASS ht_log_msg */ ht_log_msg::ht_log_msg(vcp Color, char *Msg){	color = Color;	msg = ht_strdup(Msg);}ht_log_msg::~ht_log_msg(){	free(msg);}/*

⌨️ 快捷键说明

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