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

📄 help.bak

📁 Unix/Linux文本模式下显示和操作菜单的处理程序。
💻 BAK
📖 第 1 页 / 共 2 页
字号:
/*****	联机帮助系统	1998/11**	**	说明: 	从HELPFILE读取信息生成联机帮助	**		**	**	***/#include "apmenu.h"#define HELPFILE "./HELP"#define HELPMSG "提示:[End]退出,[Home]菜单,光标移到<<..>>按回车进入该主题"#define MENUHELPMSG "提示:[BackSpace] 退出一层菜单, [回车] 进行选择          "#define Y 3#define X 9#define WIDTH 60#define HEIGHT 18char 	text[500][82];char 	Nxt_Topic[80];int 	NREC;char 	NextTopic[80];int 	tFlags=0; struct 	Help_link {		/*******联机帮助系统主题跳转链表*******/	char topic[82];	int ny;	int nx;	int nrec;	int nline;	int nrow;	struct Help_link *nxtlink;	struct Help_link *prvlink;};struct Help_link *Link_head,*Link_cur;/*****	联机帮助系统循环主体***/int Disp_Help( w, y, x, height, width, topic, bkcolor )	WINDOW *w; int y;int x; int height; int width; char *topic;int bkcolor;{	int TopicColor,result;	char topic_bak[80];	int ny,nx;	int fontcolor=WHITE,fontbkcolor=BLACK;	int ch,nrec=0,nline=0,nrow=0,i;	SAVESCR *scr;	char mesg[256];	extern int Initarry();	extern int Show_arry();	extern int Do_menu();	extern int Show_Mainmenu();	extern int Print_Cur_Topic();	extern int p();	ny=y+2;nx=x+2;	if ( bkcolor != GRAY) bkcolor = GRAY ;		else bkcolor = YELLOW; 	TopicColor = BLUE;		scr = (SAVESCR *) Saverect( w, height, width, y, x );	/*-------------- 进入前分配显示数组 ----------------*/	if( Initarry ( w, width-4 , topic, HELPFILE )==TRUE ){		Add_link( topic, ny, nx, nrec, nline, nrow );	}	else {		Free_link();		return (FALSE);	}	/*-------------------- 主题循环 --------------------------------*/	while( 1 ){			/*------------------- 界面 -----------------------------*/		if ( tFlags == 1 ) 			wstandout(w);		wsetcolor( w, BLACK, GRAY  );		mvwaddstr( w, y, x, "━"); 		wsetcolor( w, WHITE, BLUE  );		for( i=x+2;i<x+width;i++) mvwaddstr( w, y, i, " ");		mvwaddstr( w, y, x+2, topic); 		wsetcolor( w, BLUE, CYAN  );		for( i=x+1;i<x+width;i++) mvwaddstr( w, y+1, i, " ");		for( i=y+1;i<y+height-1;i++)mvwaddstr( w, i, x, "  "); 		for(i=y+1;i<y+height-1;i++)mvwaddstr(w,i,x+width-2,"  ");		for(i=x+1;i<x+width-1;i++)mvwaddstr(w,y+height-2,i, " ");		if ( tFlags == 1 ) 			wstandend(w);		Clear( w, height-5, width-4, y+2, x+2, fontbkcolor );		Show_arry(w, y+2,x+2,height-4, width-4, nrec, 				fontcolor, fontbkcolor ); 		wmove( w, ny, nx);		wrefresh( w );		/*------------------  键盘循环 -----------------------*/	   	while ( 1 ){			ch = (int)getch();			if ( ch == Key_esc && getch()==91) {				ch = getch();				if ( ch == Key_up ){					if ( nline > 0 ){						nline --;						ny=w->_cury-1;						nx=w->_curx;					Show_NxtTopic(w,ny,x+2,ny+1,nrec+nline,						nrec+nline+1,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}					else if (nrec !=0){						nrec --;					  	Show_arry(w,y+2,x+2,height-4,						   width-4, nrec,fontcolor,							fontbkcolor);					Show_NxtTopic(w,ny,x+2,-1,						nrec+nline, nrec+nline+1,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );						}				}				if ( ch == Key_down ) {					if ( nline < (height -5 ) ){						nline ++;						ny=w->_cury+1;						nx=w->_curx;					Show_NxtTopic(w,ny,x+2,ny-1,nrec+nline,						nrec+nline-1,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}					else if ( nrec+height-3 < NREC ){						nrec ++;						Show_arry(w, y+2,x+2,height-4,					 	width-4, nrec, fontcolor,							fontbkcolor ); 					Show_NxtTopic(w,ny,x+2,ny-1,						nrec+nline, nrec+nline-1,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}				}				if ( ch == Key_right ) {					if ( nrow < ( width - 5 ) ){						nrow ++;						ny=w->_cury;						nx=w->_curx+1;					Show_NxtTopic(w,ny,x+2,ny,nrec+nline,						nrec+nline,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}				}				if ( ch == Key_left ) {					if ( nrow >0 ){						nrow --;						ny=w->_cury;						nx=w->_curx-1;					Show_NxtTopic(w,ny,x+2,ny,nrec+nline,						nrec+nline,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}				}				if ( ch == Key_pageup ) {					if ( nrec > height-5 ){						nrec = nrec - height + 5 ;						Show_arry(w, y+2,x+2,height-4,					 	width-4, nrec, fontcolor,							fontbkcolor ); 							Show_NxtTopic(w,ny,x+2,-1,						nrec+nline, nrec+height-5+nline,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}					else {						nrec= 0;						Show_arry(w, y+2,x+2,height-4,					 	width-4, 0, fontcolor,							fontbkcolor ); 					Show_NxtTopic(w,ny,x+2,-1,0+nline,						nrec+nline,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}				}				if ( ch == Key_pagedown ) {					if ( nrec+height-3+height-6 < NREC ){						nrec = nrec + height - 5 ;						Show_arry(w, y+2,x+2,height-4,					 	width-4, nrec, fontcolor,							fontbkcolor ); 					Show_NxtTopic(w,ny,x+2,-1,nrec+nline,						nrec-height+5+nline,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}					else {						nrec=NREC-(height-5);							if( nrec < 0 ) nrec = 0;						Show_arry(w, y+2,x+2,height-4,					 	width-4, nrec, fontcolor,							fontbkcolor ); 					Show_NxtTopic(w,ny,x+2,-1,						nrec+nline, nrec+nline,					     nrow,fontcolor,fontbkcolor);						wmove(w,ny,nx );						wrefresh( w );					}				}				if ( ch==Key_end ) { 					Free_link();					return (FALSE);				}			}			if ( ch == Key_tab ) {				if ( nrow + 9 <= width - 5 ){					nrow = nrow + 9;					ny=w->_cury;					nx=w->_curx+9;					Show_NxtTopic(w,ny,x+2,ny,nrec+nline,							nrec+nline,					     nrow,fontcolor,fontbkcolor);					wmove(w,ny,nx );					wrefresh( w );				}				else {					nrow = width-5 ;					ny=w->_cury;					nx= width-3+x ;					Show_NxtTopic(w,ny,x+2,ny,nrec+nline,							nrec+nline,					     nrow,fontcolor,fontbkcolor);					wmove(w,ny,nx );					wrefresh( w );				}			}			if (ch == Key_backspace ) {				if ( Link_cur!=Link_head ){					/**   删除当前链表   **/					Del_link();					/** 获取当前链表环境 **/					strcpy(topic,Link_cur->topic);						ny=Link_cur->ny;						nx=Link_cur->nx;						nrec=Link_cur->nrec;						nline=Link_cur->nline;						nrow=Link_cur->nrow;						Initarry ( w, width-4 , topic, 						HELPFILE ) ;					break;				}			}			if (ch == Key_enter) {				if ( Nxt_Topic[0]!='\x0') { 					strcpy ( topic_bak, topic );					strcpy ( topic, Nxt_Topic );					if( Initarry ( w, width-4 , topic, 						HELPFILE ) ==TRUE ){						/** 保存当前的环境 **/						Link_cur->ny=ny;							Link_cur->nx=nx;							Link_cur->nrec=nrec;							Link_cur->nline=nline;							Link_cur->nrow=nrow;							/** 设置新的环境  **/						nrec=0;nline=0;nrow=0;						ny=y+2;						nx=x+2;						Add_link( topic, ny, nx, nrec, 							nline, nrow );					}					else strcpy ( topic, topic_bak );					break;				}			}			/*** 	当弹出菜单时的循环	***/			if (ch == Key_home ) {				if( tFlags != 1){					wstandout( w );				  	mvwaddstr( w, Y+HEIGHT-2, X+2, 						MENUHELPMSG ); 					wstandend( w );				}				else {					wsetcolor( w, CYAN, GRAY );				  	mvwaddstr( w, Y+HEIGHT-2, X+2, 						MENUHELPMSG ); 				}				wrefresh(w);				result=Do_menu(stdscr,y+1,x+2,bkcolor,0);				if( tFlags != 1){					wstandout( w );				  	mvwaddstr( w, Y+HEIGHT-2, X+2, 						HELPMSG ); 					wstandend( w );				}				else {					wsetcolor( w, CYAN, GRAY );				  	mvwaddstr( w, Y+HEIGHT-2, X+2, 						HELPMSG ); 				}				wrefresh(w);				if ( result ==13) {					Free_link();					return FALSE;				}				else if(result==11||result==31||result==32) {					/** 设置新的环境  **/					strcpy( topic_bak, topic );					if ( result==11)						strcpy(topic,"主题");					else if ( result==31)						strcpy(topic,"帮助");					else if ( result==32)						strcpy(topic,"关于");					if( Initarry ( w, width-4 ,topic, 						HELPFILE ) ==TRUE ){						/** 保存当前的环境 **/						Link_cur->ny=ny;							Link_cur->nx=nx;							Link_cur->nrec=nrec;							Link_cur->nline=nline;							Link_cur->nrow=nrow;							nrec=0;nline=0;nrow=0;						ny=y+2;						nx=x+2;						Add_link( topic, ny, nx, nrec, 							nline, nrow );					}									else strcpy( topic, topic_bak );					break;				}				else if(result==12) {					if ( Link_cur==Link_head ){						Message(stdscr,Y+HEIGHT-2,X+2,							"没有可进入的上个主题",							"提示:",1);						wmove( w, ny,nx );						wrefresh(w);					}					else {						/**   删除当前链表   **/						Del_link();						/** 获取当前链表环境 **/						strcpy(topic,Link_cur->topic);							ny=Link_cur->ny;							nx=Link_cur->nx;							nrec=Link_cur->nrec;							nline=Link_cur->nline;							nrow=Link_cur->nrow;							Initarry ( w, width-4 , topic, 							HELPFILE ) ;					break;					}				}				else if(result==21) {					sprintf(mesg,"打印当前主题,共%d行",							NREC);					if(Message(stdscr,Y+HEIGHT-2,X+2,mesg,						"确认",0) == TRUE ) {						Print_Cur_Topic(); 					}					wmove( w, ny,nx );

⌨️ 快捷键说明

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