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

📄 tool1.c

📁 Unix/Linux文本模式下显示和操作菜单的处理程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "./apmenu.h"static int CXH;				/*****TREELIST的显示次序*****//*****	新生成一个树形控件*****/TREE_CONTROL *init_treecontrol( win, y, x, h, w, fn_color, bk_color,sefn_color,sebk_color)WINDOW *win;int 	y;int 	x;int 	h;int 	w;int	bk_color; int	fn_color;int	sebk_color;int	sefn_color;{	TREE_CONTROL *tree = (TREE_CONTROL *)malloc(sizeof(TREE_CONTROL));	tree->win = win; 	tree->y = y; 	tree->x = x; 	tree->w = w; 	tree->h = h; 	tree->bk_color=bk_color; 	tree->fn_color=fn_color;	tree->sebk_color=sebk_color;	tree->sefn_color=sefn_color;	tree->i = 0; 	tree->col = 1; 	tree->scr_col = 1; 	tree->num = 0; 	tree->startitem = (TREE_ITEM *)NULL ;	tree->curitem = (TREE_ITEM *)NULL ;	tree->list = (TREE_LIST *)NULL; 	tree->moveproc = NULL;	return( tree );}/*****	ADD ITEM TO 树形控件***/TREE_ITEM *tree_add_item( tree, curlink , text, link, levelflag )TREE_CONTROL *tree;TREE_ITEM *curlink;char 	*text;void 	*link;int 	levelflag;   				/*** levelflag=1:新层 ****/{	int	len;	TREE_ITEM *clink = NULL;	TREE_ITEM *ln = NULL;	if ( curlink == NULL && tree->startitem != NULL ) {		printf( "Init the TREE have error: there are more than one NULL point appear ! \n" ) ;		return;	}	clink = (TREE_ITEM *) malloc(sizeof(TREE_ITEM));	len = strlen(text)>TREE_TEXT_LEN?TREE_TEXT_LEN:strlen(text);	strmove( clink->text , text, len);		clink->link = link;	clink->nextlink = (TREE_ITEM *)NULL;	clink->nextlevellink = (TREE_ITEM *)NULL;	tree->curitem = clink;	if ( curlink == ( TREE_ITEM *) NULL ) {		/**** 链 首 *****/		tree->startitem = clink;		clink->level = 1; 		clink->openflag = 1;		clink->prelevellink = (TREE_ITEM *)NULL;		clink->prelink = NULL;	}	else {		if ( levelflag == 1 ){		  	/*****下一层*****/			clink->level = curlink->level+1;						if( curlink->nextlevellink != NULL ){				/*** 该层已包括子层 ******/				ln = curlink->nextlevellink ; 				while( ln->nextlink != NULL ) 					ln = ln->nextlink;				ln->nextlink = clink;				ln->nextlink->prelevellink = curlink;				ln->nextlink->prelink = ln;			}			else {				curlink->nextlevellink = clink;				clink->prelevellink = curlink;				clink->prelink = NULL;			}			clink->openflag = 1;		}		else {			clink->level = curlink->level;			curlink->nextlink = clink;			clink->prelink = curlink;			clink->prelevellink = curlink->prelevellink;			if ( clink->level == 1 )	/**第一层打开标志**/				clink->openflag = 1;			else 				clink->openflag = 1;		}	}	tree->num ++;	return( clink );}/*****	外部接口: 树形控件的运行***/do_tree( tree )TREE_CONTROL *tree;{	int ch, col, scr_col, flag = 0;	int bz ;	show_treecontrol ( tree, tree->col, tree->scr_col );	while(1) {		col = tree->col ;		scr_col = tree->scr_col;		bz = 0;		ch = f_getch();		if (ch== Key_end){			show_treecontrol(tree,col,0 );  			flag = 1;		}		if ( tree->keydownproc!=NULL )  {			if ((*tree->keydownproc)(tree,ch)==0) bz = 1 ;		}		if ( bz == 0 ){		   switch (ch) {			case Key_enter:				if ( tree->enterproc!=NULL ) 					(*tree->enterproc)(tree);				break;			case Key_up:				if ( scr_col == 1 ) { 				   if ( col > 1 ) 					show_treecontrol(tree,col-1,scr_col );  				}				else 						show_treecontrol(tree,col,scr_col-1 );  				if ( tree->moveproc!=NULL ) 					(*tree->moveproc)(tree);				break;			case Key_pageup:				if( col > tree->h  ) {					col = col - tree->h ;					show_treecontrol(tree,col,scr_col );  				}				else if (col > 1 ) { 					col = 1;					show_treecontrol(tree,col,scr_col );  				}				else if ( col == 1 ) {					scr_col = 1;					show_treecontrol(tree,col,scr_col );  				}				if ( tree->moveproc!=NULL ) 					(*tree->moveproc)(tree);				break;			case Key_pagedown:				if( col <= tree->n - tree->h ){ 					if( col> tree->n - 2* tree->h &&						col<= tree->n - tree->h) 						col = tree->n - tree->h + 1 ;					else 						col = col + tree->h ;					show_treecontrol(tree,col,scr_col );  				}							else 					show_treecontrol(tree,col,					    tree->h>tree->n?tree->n:tree->h );  				if ( tree->moveproc!=NULL ) 					(*tree->moveproc)(tree);				break;			case Key_down:				if ( scr_col == tree->h ) {				   if ( ( col+scr_col )<= tree->n ) 					show_treecontrol(tree,col+1,scr_col );  				}				else { 					   if ( ( col+scr_col )<= tree->n ) 					show_treecontrol(tree,col,scr_col+1 );  				}				if ( tree->moveproc!=NULL ) 					(*tree->moveproc)(tree);				break;			case Key_left:				unexpand_tree( tree );				if ( tree->moveproc!=NULL ) 					(*tree->moveproc)(tree);				break;			case Key_right:				expand_tree( tree );				if ( tree->moveproc!=NULL ) 					(*tree->moveproc)(tree);				break;			case Key_end:				show_treecontrol(tree,col,0 );  				flag = 1;		    }		}		if ( flag == 1 ) break;	}}/***	在屏幕上显示树形控件***/show_tree( tree ) TREE_CONTROL *tree;{	show_treecontrol( tree, tree->col, 0 );}/***	在屏幕上显示树形控件****	nscroll: 从第几行开始显示	**	nselect: 选中行*/show_treecontrol( tree, nscroll,nselect )TREE_CONTROL *tree;int nscroll;		int nselect;	{	int i, j, k,l,len, level;	char tail[256],s[512],text[TREE_TEXT_LEN+1];	TREE_LIST *list;	TREE_ITEM *item;	wsetcolor( tree->win, tree->fn_color, tree->bk_color ); 	list = tree->list;	j = 0;			/**** j 是可显示的第几条 ****/	l = 0;			/**** l 是在屏幕上可显示的第几条 ****/	for ( i = 0; i < tree->num; i ++ ) {		if ( list[i].visible == 1 ) {			j ++;			if ( j >=nscroll && ( l < tree->h ) ) {					/********** 绘ITEM *************/				l ++;				level = list[i].level;				strcpy( text, list[i].item->text );				*tail = '\0';				item = list[i].item; 				for ( k = 1; k <= level-1 ; k++)  {					/***** 生成TEXT前的线条 *****/					if ( k < level -1 ) {					   if ( item == (TREE_ITEM *)NULL)						f_strcat( tail, "    " ); 					   else {							   	item=item->prelevellink;					   	if(item->nextlink==							(TREE_ITEM *)NULL)							f_strcat(tail,"    " ); 					   	else 										f_strcat( tail,"│  "); 					   }					}					else if ( k == level -1 ) { 					    if ( tree->list[i].item->nextlink ==							(TREE_ITEM *) NULL )						strcat( tail, "└" );					    else 						strcat( tail, "├" );					    if (tree->list[i].item->nextlevellink == (TREE_ITEM *) NULL )						strcat( tail, "--" );   					    else 							strcat( tail, "*>" );					}				}				if ( (level-1)*4 > tree->w )				    	strmove( s, tail,tree->w );				else 					strcpy( s, tail ); 				mvwaddstr(tree->win,tree->y+l-1,tree->x, s );				len = strlen(text); 				if (( len + (level-1) *4 ) > tree->w )				   if( tree->w >= (level-1)*4 )				    strmove( s, tree->list[i].item->text,					tree->w - (level-1)*4 );				   else 					*s = '\0';				else					strcpy( s,text ); 				if ( nselect == l ) {   					/***选中行*****/						wsetcolor( tree->win, tree->sefn_color, 						tree->sebk_color ); 					mvwaddstr(tree->win,tree->y+l-1,						tree->x+(level-1)*4 , s );					wsetcolor( tree->win, tree->fn_color, 						tree->bk_color ); 				}				else					mvwaddstr(tree->win,tree->y+l-1,						tree->x+(level-1)*4 , s );				*s = '\0';								for (k = (level-1)*2+len; k < tree->w;k++) 					strcat( s, " " ); 				mvwaddstr(tree->win,tree->y+l-1,						tree->x+(level-1)*4+len , s );			}		}		/*		if ( l >= tree->h ) break;  		*/	}	if ( l < tree->h ) {		*s = '\0';		for ( k = 1; k<= tree->w ;k++ )			strcat( s, " " );		for( k = l+1 ; k<=tree->h ; k ++ ) 			mvwaddstr(tree->win,tree->y+k-1,tree->x, s );

⌨️ 快捷键说明

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