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

📄 sample.c

📁 Unix/Linux文本模式下显示和操作菜单的处理程序。
💻 C
字号:
/*****	**	***/#include "sample.h"#define M_EXIT 			18#define M_HELP 			71#define M_CONNECT_WINDOW 	61main( argc, argv)int 	argc;char 	*argv[];{	int i;	int y,x,width,height;	SAVESCR *scr;	TREE_CONTROL *tree;	WINDOW *w;	int Max_item;	int ret,retflag=0;	char s[100];	int Select_tree_move ( );	int Select_tree_keydown ( );	MENU_ITEM menu_bar[]={       		1, "0",  "连接[C] ~发送[S] ~接收[R] ~协议[P] ~设置[O] ~窗口[W] ~帮助[H]",        "csrpowh",      	 	2, "1",  "节点刷新[W] ~连接刷新[B] ~连接节点[C] ~节点信息[M] ~增加节点[A] ~删除节点[D] ~打印[P] ~退出[E] ",      "wbcmadpe",       		2, "2",  "录入[W] ~开始发送[S]" ,	     "ws",       		2, "3",  "录入[W] ~开始接收[R]" ,             "wr",       		2, "4",  "TCP/IP[T]-> ~SPX/IPX[S] ~SNA[I] ~NETBIOS[N]" , "tsin",       		3, "41", "TCP ~UDP ~ICMP ~ARP ~RARP " , "",       		2, "5",  "连接[C] ~无连接[N]" , "cn",       		2, "6",  "连接窗口[C] ~发送窗口[S] ~接收窗口[R] ~协议窗口[P] ~状态窗口[Z] ~出错窗口[E] " , "csrpze",       		2, "7",  "帮助[H] ~主题[T] ~关于[A] " , "hta",       	};	initscr();	noecho();	w = newwin(23,79,0,0);	wclear(w);		wrefresh(w);	wsetcolor( w, WHITE, M_BC );	for (i=MIN_X;i<MAX_X;i++) 		mvwaddstr( w, MIN_Y, i , " " ); 	wsetcolor( w, BLACK, WHITE );	for (i=MIN_X;i<MAX_X;i++) 		mvwaddstr( w, MAX_Y-1, i , " " ); 	mvwaddstr( w, MAX_Y-1, MIN_X , "END 键弹出菜单 " ); 	mvwaddstr( w, MAX_Y-1, MAX_X - 33 , "网络管理系统 NETCON V1.0, 1998/11"); 	tree = (TREE_CONTROL *)init_treecontrol ( w, MIN_Y+2,MIN_X+2,MAX_Y-1-3,MAX_X/2,WHITE, BLACK, RED, CYAN );	tree_add_item( tree, (TREE_ITEM *)NULL,"TCP 网络","",1);	Init_host( tree ) ;	trigger_tree_move( tree, Select_tree_move ) ;	generate_treelist( tree );	if ( tree->num != tree->i ) 		printf( "初始化出错: num =%d, but i =%d",tree->num,tree->i);	show_tree( tree );		Max_item= sizeof(menu_bar)/sizeof(struct menu_item_code);	while(1){		ret = Do_menu(w, menu_bar, NULL, Max_item, 0, 0, 0, 0) ; 		switch(ret){			case M_CONNECT_WINDOW: 				do_tree( tree );				break;			case M_EXIT: 				retflag = 1;				break;			case M_HELP: 				Disp_Help( w, NULL , HELP_Y, HELP_X, HELP_H, HELP_W, 					"使用指南", 0 );				break;		}		if ( retflag == 1 ) break;	}		clear();	refresh();	endwin(w);}Init_host(tree) TREE_CONTROL *tree;{	char s[1024], ipaddr[20], hostname[256], domain[256];	char *p;	FILE *fp;	ST_IPLINK *clink = NULL;	TREE_ITEM *item;	if ( (fp=fopen("/etc/hosts", "r" )) == NULL ) {		printf( "file /etc/hosts not found!" );		return(-1);	}	while ( !feof(fp) ) { 		fgets( s, 256, fp );		for(p=s;(*p==Key_tab||*p==Key_space)&&(*p);p++);		if ( *p == '#' ) continue;		for(*ipaddr='\0';*p!=Key_space&&*p!=Key_tab&&*p!=Key_nxtrow&&			(*p);p++) {			sprintf( ipaddr, "%s%c", ipaddr, p[0] ) ;		}		for(;(*p==Key_tab||*p==Key_space)&&(*p);p++);		for(*hostname='\0';*p!=Key_space&&*p!=Key_tab&&*p!=Key_nxtrow&&			(*p);p++) {			sprintf( hostname, "%s%c", hostname, p[0] ) ;		}		for(;(*p==Key_tab||*p==Key_space)&&(*p);p++);		for(*domain='\0';*p!=Key_space&&*p!=Key_tab&&*p!=Key_nxtrow&&			(*p);p++) {			sprintf( domain, "%s%c", domain, p[0] ) ;		}		if ( *ipaddr != '\0' ) {			if ( !(item =(TREE_ITEM *)Find_tree_str ( tree , domain ))) {  				if ( *domain != '\0' ) {					tree_add_item( tree, tree->startitem,						domain,NULL,1);					item = tree->curitem;				}				else {					item = tree->startitem;				}			}			clink = (ST_IPLINK *) malloc(sizeof(ST_IPLINK));			strcpy( clink->ipaddr, ipaddr ) ;			strcpy( clink->hostname, hostname ) ;			strcpy( clink->domain, domain ) ;			clink->connect_bz = FALSE ;			tree_add_item( tree, item, hostname,clink,1);		}	}	fclose( fp );}/* **	Move the item of tree **	Show the ipaddr in the help bar***/Select_tree_move ( tree )TREE_CONTROL *tree;{	ST_IPLINK *link = ((ST_IPLINK *)((TREE_ITEM *)Getcuritem(tree))->link);	if ( link ) 		Show_help( tree->win, link->ipaddr ); 	else 	Show_help( tree->win, ((TREE_ITEM *)Getcuritem(tree))->text); }Select_tree_keydown ( tree, ch )TREE_CONTROL *tree;int ch;{	char s[10];	sprintf( s, "%d", ch ) ;	Show_help( tree->win, s ); 	return 0 ;}Show_help( WINDOW *win, char *s ){	int i ;	wsetcolor( win, BLACK, WHITE );	for (i=MIN_X;i<40;i++) mvwaddstr( win, MAX_Y-1, i , " " ); 	mvwaddstr( win, MAX_Y-1, MIN_X , s ) ; 	wrefresh(win);}

⌨️ 快捷键说明

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