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

📄 htobj.cc

📁 功能较全面的反汇编器:反汇编器ht-2.0.15.tar.gz
💻 CC
📖 第 1 页 / 共 3 页
字号:
void ht_scrollbar::init(Bounds *b, palette *p, bool isv){	ht_view::init(b, VO_RESIZE, 0);	VIEW_DEBUG_NAME("ht_scrollbar");		pstart = 0;	psize = 0;	gpal = p;	isvertical = isv;	if (isvertical) {		growmode = MK_GM(GMH_RIGHT, GMV_FIT);	} else {		growmode = MK_GM(GMH_FIT, GMV_BOTTOM);	}	enable();	// enabled by default}void ht_scrollbar::done(){	ht_view::done();}void ht_scrollbar::enable(){	enable_buffering();	ht_view::enable();	dirtyview();}void ht_scrollbar::disable(){	disable_buffering();	ht_view::disable();	dirtyview();}void ht_scrollbar::draw(){	if (enabled) {		vcp color = getcolorv(gpal, palidx_generic_scrollbar);//          vcp color2 = VCP(VCP_BACKGROUND(color), VCP_FOREGROUND(color));		if (isvertical) {			fill(0, 1, size.w, size.h-2, color, ' ');			int e, s;			e=((size.h-2)*psize)/100;			if (pstart+psize>=100) {				s=size.h-2-e;			} else {				s=((size.h-2)*pstart)/100;			}			if (!e) {				if (s==size.h-2) s--;				e=1;			}			fill(0, s+1, 1, e, color, GC_MEDIUM, CP_GRAPHICAL);			buf->printChar(0, 0, color, GC_ARROW_UP, CP_GRAPHICAL);			buf->printChar(0, size.h-1, color, GC_ARROW_DOWN, CP_GRAPHICAL);		} else {		}	}}void ht_scrollbar::getminbounds(int *width, int *height){	*width = 1;	*height = 1;}ObjectID ht_scrollbar::getObjectID() const{	return ATOM_HT_SCROLLBAR;}void ht_scrollbar::setpos(int ps, int pz){	pstart = ps;	psize = pz;	dirtyview();}/* *	CLASS ht_frame */void ht_frame::init(Bounds *b, const char *desc, uint s, uint n){	ht_view::init(b, VO_RESIZE, desc);	VIEW_DEBUG_NAME("ht_frame");	number = n;	style = s;	framestate = FST_UNFOCUSED;		growmode = MK_GM(GMH_FIT, GMV_FIT);}void ht_frame::done(){	ht_view::done();}void ht_frame::draw(){	int cornerul, cornerur, cornerll, cornerlr;	int lineh, linev;	ht_window *w = (ht_window*)group;	if (framestate != FST_MOVE && framestate != FST_RESIZE) {		setframestate(w->focused ? FST_FOCUSED : FST_UNFOCUSED); 	}	if (style & FS_THICK) {		cornerul = GC_2CORNER3;		cornerur = GC_2CORNER0;		cornerll = GC_2CORNER2;		cornerlr = GC_2CORNER1;		lineh = GC_2HLINE;		linev = GC_2VLINE;	} else {		cornerul = GC_1CORNER3;		cornerur = GC_1CORNER0;		cornerll = GC_1CORNER2;		cornerlr = GC_1CORNER1;		lineh = GC_1HLINE;		linev = GC_1VLINE;	}	vcp c = getcurcol_normal();	/* "/...\" */	buf->printChar(0, 0, c, cornerul, CP_GRAPHICAL);	for (int i=1; i < size.w-1; i++) buf->printChar(i, 0, c, lineh, CP_GRAPHICAL);	buf->printChar(0+size.w-1, 0, c, cornerur, CP_GRAPHICAL);	/* "\.../" */	buf->printChar(0, size.h-1, c, cornerll, CP_GRAPHICAL);	for (int i=1; i < size.w-1; i++) buf->printChar(i, size.h-1, c, lineh, CP_GRAPHICAL);/*	if (style & FS_RESIZE) {		buf->printChar(size.w-1, size.h-1, getcurcol_killer(), GC_1CORNER1, CP_GRAPHICAL);	} else {*/		buf->printChar(size.w-1, size.h-1, c, cornerlr, CP_GRAPHICAL);//     }	/* "|", "|" */	for (int i=1; i < size.h-1; i++) {		buf->printChar(0, i, c, linev, CP_GRAPHICAL);		buf->printChar(size.w-1, i, c, linev, CP_GRAPHICAL);	}	/* "[x]" */	if (style & FS_KILLER) {		buf->print(2, 0, c, "[ ]");		buf->printChar(3, 0, getcurcol_killer(), GC_FILLED_QUAD, CP_GRAPHICAL);	}	/* e.g. "1" */	int ns=0;	if (style & FS_NUMBER) {		int l = number;		do {			l = l/10;			ns++;		} while (l);		buf->printf(size.w-4-ns, 0, c, CP_DEVICE, "%d", number);		ns += 4;	}	/* <title> */	const char *d;	switch (framestate) {	case FST_MOVE:		d = (style & FS_RESIZE) ? "(moving) - hit space to resize" : "(moving)";		break;	case FST_RESIZE:		d = (style & FS_MOVE) ? "(resizing) - hit space to move" : "(resizing)";		break;	default:		d = desc;	}	int ks = (style & FS_KILLER) ? 4 : 0;	ns++;	if (d && (style & FS_TITLE)) {		int l = strlen(d), k = 0;		if (l > size.w-(5+ks+ns)) {			k = l-(size.w-(6+ks+ns+2));			if (size.w > 6+ks+ns+2) {				d += k;			} else {				d = "";			}			buf->printf(2+ks, 0, c, CP_DEVICE, " ...%s ", d);		} else {			buf->printf((size.w-l-2)/2, 0, c, CP_DEVICE, " %s ", d);		}	}}vcp ht_frame::getcurcol_normal(){	switch (framestate) {	case FST_FOCUSED:		return getcolor(palidx_generic_frame_focused);	case FST_UNFOCUSED:		return getcolor(palidx_generic_frame_unfocused);	case FST_MOVE:	case FST_RESIZE:		return getcolor(palidx_generic_frame_move_resize);	}	return 0;}vcp ht_frame::getcurcol_killer(){	return getcolor(palidx_generic_frame_killer);}uint ht_frame::getnumber(){	return number;}uint ht_frame::getstyle(){	return style;}ObjectID ht_frame::getObjectID() const{	return ATOM_HT_FRAME;}void ht_frame::setframestate(uint _framestate){	framestate=_framestate;	dirtyview();}void ht_frame::setnumber(uint _number){	number=_number;	dirtyview();}void ht_frame::setstyle(uint s){	style=s;}void ht_frame::settext(const char *text){	free(desc);	desc = ht_strdup(text);	dirtyview();}/* *	CLASS ht_window */void	ht_window::init(Bounds *b, const char *desc, uint framestyle, uint num){	ht_group::init(b, VO_SELECTABLE | VO_SELBOUND | VO_BROWSABLE, desc);	VIEW_DEBUG_NAME("ht_window");	number=num;	hscrollbar=NULL;	vscrollbar=NULL;	pindicator=NULL;	Bounds c=*b;	c.x=0;	c.y=0;	frame=0;	action_state=WAC_NORMAL;	ht_frame *f=new ht_frame();	f->init(&c, desc, framestyle, number);	setframe(f);}void ht_window::done(){	pindicator=NULL;	hscrollbar=NULL;	vscrollbar=NULL;	ht_group::done();}void ht_window::draw(){	vcp c=getcolor(palidx_generic_body);	clear(c);}void ht_window::getclientarea(Bounds *b){	getbounds(b);	if (frame) {		b->x++;		b->y++;		b->w-=2;		b->h-=2;	}}uint ht_window::getnumber(){	return number;}ht_frame *ht_window::getframe(){	return frame;}void ht_window::handlemsg(htmsg *msg){	switch (msg->msg) {		case msg_keypressed:			if (action_state==WAC_MOVE) {				if (options & VO_MOVE) {					switch (msg->data1.integer) {						case K_Up:							if (size.y>group->size.y) move(0, -1);							break;						case K_Down:							if (size.y<group->size.y+group->size.h-1) move(0, 1);							break;						case K_Left:							if (size.x+size.w>group->size.x+1) move(-1, 0);							break;						case K_Right:							if (size.x<group->size.x+group->size.w-1) move(1, 0);							break;						case K_Control_Up:							if (size.y>group->size.y+5-1) move(0, -5); else								move(0, group->size.y-size.y);							break;						case K_Control_Down:							if (size.y<group->size.y+group->size.h-5) move(0, 5); else								move(0, group->size.y+group->size.h-size.y-1);							break;						case K_Control_Left:							if (size.x+size.w>group->size.x+5) move(-5, 0); else								move(-(size.x+size.w)+group->size.x+1, 0);							break;						case K_Control_Right:							if (size.x<group->size.x+group->size.w-5) move(5, 0); else								move(group->size.x+group->size.w-size.x-1, 0);							break;					}				}			} else if (action_state == WAC_RESIZE) {				if (options & VO_RESIZE) {					int min_width, min_height;					getminbounds(&min_width, &min_height);					switch (msg->data1.integer) {					case K_Up:						if (size.h > min_height) resize(0, -1);						break;					case K_Down:						if (size.h < group->size.h) resize(0, 1);						break;					case K_Left:						if (size.x+size.w > 1 && size.w > min_width) resize(-1, 0);						break;					case K_Right:						if (size.w < group->size.w) resize(1, 0);						break;					}				}			} else {				if ((msg->data1.integer == K_Control_F5) ||				 (msg->data1.integer == K_Control_R)) {					sendmsg(cmd_window_resizemove);				}				break;			}			switch (msg->data1.integer) {				case K_Escape:				case K_Return:					sendmsg(cmd_window_resizemove);					break;				case K_Space:				case K_Control_F5:					sendmsg(cmd_window_switch_resizemove);					break;			}			app->sendmsg(msg_dirtyview, 0);			clearmsg(msg);			return;		case cmd_window_resizemove: {			bool b = (action_state == WAC_NORMAL);			do {				if (!next_action_state()) break;			} while (b == (action_state == WAC_NORMAL));			dirtyview();			clearmsg(msg);			return;		}		case cmd_window_switch_resizemove:			do {				if (!next_action_state()) break;			} while (action_state == WAC_NORMAL);			dirtyview();			clearmsg(msg);			return;	}	ht_group::handlemsg(msg);}void ht_window::insert(ht_view *view){	if (frame) view->move(1, 1);	ht_group::insert(view);}void ht_window::load(ObjectStream &s){	ht_group::load(s);}bool ht_window::next_action_state(){#define wstate_count 3	int ass[wstate_count] = { WAC_NORMAL, WAC_MOVE, WAC_RESIZE };	int fss[wstate_count] = { FST_FOCUSED, FST_MOVE, FST_RESIZE };	for (int i=0; i < wstate_count; i++) {		if (action_state == ass[i]) {			int p = i;			while (++p != i) {				if (p > wstate_count-1) p = 0;				bool allowed = true;				switch (ass[p]) {					case WAC_MOVE: allowed = ((options & VO_MOVE) != 0); break;					case WAC_RESIZE: allowed = ((options & VO_RESIZE) != 0); break;				}				if (allowed) {					action_state = ass[p];					if (frame) frame->setframestate(fss[p]);					return (p != i);				}			}			return false;		}	}	return false;}ObjectID ht_window::getObjectID() const{	return ATOM_HT_WINDOW;}void ht_window::receivefocus(){	htmsg m;	m.msg = msg_contextmenuquery;	m.type = mt_empty;	sendmsg(&m);	if (m.msg == msg_retval) {		ht_menu *q = (ht_menu*)((ht_app*)app)->menu;		ht_context_menu *n = (ht_context_menu*)m.data1.ptr;		if (q) {			if (!q->set_local_menu(n)) {				n->done();				delete n;			}			q->sendmsg(msg_dirtyview);		} else {			n->done();			delete n;		}	}	ht_group::receivefocus();	if (frame) frame->setstyle(frame->getstyle() | FS_THICK);}void ht_window::redraw(){	htmsg m;		if (pindicator) {		char buf[256];		buf[0] = 0;			m.msg = msg_get_pindicator;		m.type = mt_empty;		m.data1.integer = sizeof buf;		m.data2.ptr = buf;		sendmsg(&m);		pindicator->settext(buf);	}	gsi_scrollbar_t p;	if (hscrollbar) {		p.pstart = 0;		p.psize = 200;		m.msg = msg_get_scrollinfo;		m.type = mt_empty;		m.data1.integer = gsi_hscrollbar;		m.data2.ptr = &p;		sendmsg(&m);		if (p.psize >= 100) {			hscrollbar->disable();		} else {			hscrollbar->enable();			hscrollbar->setpos(p.pstart, p.psize);		}	}	if (vscrollbar) {		p.pstart = 0;		p.psize = 200;		m.msg = msg_get_scrollinfo;		m.type = mt_empty;		m.data1.integer = gsi_vscrollbar;		m.data2.ptr = &p;		sendmsg(&m);		if (p.psize >= 100) {			vscrollbar->disable();		} else {			vscrollbar->enable();			vscrollbar->setpos(p.pstart, p.psize);		}	}	ht_group::redraw();}void ht_window::releasefocus(){	ht_menu *q = (ht_menu*)((ht_app*)app)->menu;	if (q) {		q->delete_local_menu();		q->sendmsg(msg_dirtyview);	}	if (frame) frame->setstyle(frame->getstyle() & (~FS_THICK));	ht_group::releasefocus();}void ht_window::setframe(ht_frame *newframe){	if (frame) {		ht_group::remove(frame);		frame->done();		delete frame;		frame = NULL;	}	if (newframe) {		uint style=newframe->getstyle();		if (style & FS_MOVE) options |= VO_MOVE; else options &= ~VO_MOVE;		if (style & FS_RESIZE) options |= VO_RESIZE; else options &= ~VO_RESIZE;		insert(newframe);	} else {		options &= ~VO_MOVE;		options &= ~VO_RESIZE;	}	frame = newframe;}void ht_window::setnumber(uint aNumber){	if (frame) frame->setnumber(aNumber);	number = aNumber;	dirtyview();}void ht_window::sethscrollbar(ht_scrollbar *s){	if (hscrollbar) remove(hscrollbar);	hscrollbar = s;	insert(hscrollbar);	putontop(hscrollbar);}void ht_window::setpindicator(ht_text *p){	if (pindicator) remove(pindicator);	pindicator = p;	insert(pindicator);	putontop(pindicator);}void ht_window::settitle(char *title){	free(desc);	desc = ht_strdup(title);	if (frame) frame->settext(title);}void ht_window::setvscrollbar(ht_scrollbar *s){	if (vscrollbar) remove(vscrollbar);	vscrollbar = s;	insert(vscrollbar);	putontop(vscrollbar);}void	ht_window::store(ObjectStream &s) const{	ht_group::store(s);}/* *	CLASS ht_vbar */void ht_vbar::draw(){	fill(0, 0, 1, size.h, getcolor(palidx_generic_body), GC_1VLINE, CP_GRAPHICAL);}/* *	CLASS ht_hbar */void ht_hbar::draw(){	fill(0, 0, size.w, 1, getcolor(palidx_generic_body), GC_1HLINE, CP_GRAPHICAL);}/***/BUILDER(ATOM_HT_VIEW, ht_view, Object);BUILDER(ATOM_HT_GROUP, ht_group, ht_view);BUILDER(ATOM_HT_XGROUP, ht_xgroup, ht_group);BUILDER(ATOM_HT_WINDOW, ht_window, ht_group);BUILDER(ATOM_HT_SCROLLBAR, ht_scrollbar, ht_view);/* *	INIT */bool init_obj(){	REGISTER(ATOM_HT_VIEW, ht_view);	REGISTER(ATOM_HT_GROUP, ht_group);	REGISTER(ATOM_HT_XGROUP, ht_xgroup);	REGISTER(ATOM_HT_WINDOW, ht_window);	REGISTER(ATOM_HT_SCROLLBAR, ht_scrollbar);	return true;}/* *	DONE */void done_obj(){	UNREGISTER(ATOM_HT_VIEW, ht_view);	UNREGISTER(ATOM_HT_GROUP, ht_group);	UNREGISTER(ATOM_HT_XGROUP, ht_xgroup);	UNREGISTER(ATOM_HT_WINDOW, ht_window);	UNREGISTER(ATOM_HT_FRAME, ht_frame);	UNREGISTER(ATOM_HT_SCROLLBAR, ht_scrollbar);}

⌨️ 快捷键说明

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