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

📄 tool.c

📁 Unix/Linux文本模式下显示和操作菜单的处理程序。
💻 C
字号:
#include "./apmenu.h"/*****	保存屏幕***/SAVESCR *Saverect(w, height, width, y, x)WINDOW 	*w;int 	height;int 	width;int 	y;int 	x;{	int i, j, c, k=0;	int *str;	SAVESCR *Savescr;	if(height>25||width>80)return NULL;	str=(int *)malloc(height*width*sizeof(int));	Savescr=(SAVESCR *)malloc(sizeof(SAVESCR));	if(Savescr==NULL||str==NULL)return NULL;	Savescr->height=height;	Savescr->width=width;	Savescr->p=str;	for(j=y;j<y+height;j++)		for(i=x;i<x+width;i++){			c=mvwinch(w,j,i);			Savescr->p[k]=c;			k++;			}	wrefresh(w);	return Savescr;}/*****	恢复屏幕***/int Putrect(w, y, x, Savescr)WINDOW 	*w;int 	y;int 	x;SAVESCR *Savescr;{	int i,j,k=0;	if(Savescr==NULL)return FALSE;	wsetcolor(w,0,0);	for(j=y;j<y+Savescr->height;j++)		for(i=x;i<x+Savescr->width;i++){			mvwaddch(w,j,i,Savescr->p[k]);			k++;			}	wrefresh(w);	return TRUE;}/*****	释放屏幕内存***/int Free(Savescr)SAVESCR *Savescr;{	int i,j;	i=free(Savescr->p);	j=free(Savescr);	if(i==-1||j==-1)return FALSE;	else return TRUE;}/*****	画框函数***/int Box(w, row, wide, y, x)WINDOW 	*w;int 	row;int 	wide;int 	y;int 	x;{   	int i,y1,x1;  	y1=y+row;x1=x+wide;  	mvwaddstr(w,y,x,"┏");   	mvwaddstr(w,y,x1,"┓");   	mvwaddstr(w,y1,x1,"┛");   	mvwaddstr(w,y1,x,"┗");   	for(i=x+2;i<=x1-2;i+=2){    		mvwaddstr(w,y,i,"━");      		mvwaddstr(w,y1,i,"━");     		}  	for(i=y+1;i<=y1-1;i+=1){    		mvwaddstr(w,i,x,"┃");      		mvwaddstr(w,i,x1,"┃");     		}	wrefresh(w);	return TRUE;}/*****	画线函数*****/int Line( w, height, width, y, x)WINDOW 	*w;int 	height;int 	width;int 	y;int 	x;{	int i,j;	if (height==0)		for (i=x;i<x+width;i++) mvwaddch(w,y,i,'-');	else 		if (width==0)			for (i=y;i<y+height;i++) mvwaddstr(w,i,x,"┃");	wrefresh(w);}/*****	填充正方形函数*****/int Clear( w, height, wide, y, x, color)WINDOW 	*w;int 	height;int 	wide;int 	y;int 	x;int 	color;{	int i,j; 	wsetcolor(w,1,color);	for(i=y;i<=(y+height);i++)for(j=x;j<(x+wide);j++)		mvwaddch(w,i,j,' ');	wrefresh(w);}/*****	获取字符串函数*****/char *Getstr( w, y, x, maxlen,listlen, color, bkcolor)WINDOW 	*w;int 	y;int 	x;int 	maxlen;int 	listlen;int 	color;int 	bkcolor;{ 	int i=0,j=0,ch;	char *str;	str=(char *)malloc(80);	wsetcolor(w,color,bkcolor);	wmove(w,y,x);	wrefresh(w);	while(1){		ch=getch();		if(ch==Key_esc){if(ch=getch()==91){					ch=getch();					if(ch==Key_right){						i++;						wmove(w,y,x+i);						wrefresh(w);						}					if(ch==Key_left){						i--;						wsetcolor(w,bkcolor,bkcolor);						mvwaddch(w,y,x+i,' ');							wmove(w,y,x+i);						wrefresh(w);						wsetcolor(w,color,bkcolor);						}					}				}		else {								if(ch==Key_enter)break;		if(ch!=Key_backspace){			mvwaddch(w,y,x+i,ch);				wrefresh(w);			str[i]=(char)ch;			i++;			}		else {  i--;			wsetcolor(w,bkcolor,bkcolor);			mvwaddch(w,y,x+i,' ');				wmove(w,y,x+i);			wrefresh(w);			wsetcolor(w,color,bkcolor);	        	}		    }	}	str[i]='\0';	return str;}/*****	信息框函数*****/int MessageBox(w, y,x,strs,strt,flags)WINDOW 	*w;int 	y;int 	x;char 	*strs;char 	*strt;int 	flags;{	int height=0,width=0,i=0,j=0,k=0;	int color1=RED,color2=CYAN;	char *p,str1[60],str2[2],OK1[]="<Ok>      Cancle ",CL1[]=" Ok      <Cancle>",ch;	SAVESCR *Scr;	p=strs;	while(p[i]!='\0'){		if(p[i]=='~'){			height++;			j=Min(j+1,60);			width=Max(width,j);			j=0;			i++;		}		else{			i++;			j++;		}	}	if(height==0){		width=j;		width=Min(width,60);	}	else		width=Max(width,j);	height=height+5;	if(width<17)		width=17;	width=width+12;	Scr=(SAVESCR *)Saverect(w,height+2,width+2,y,x); 	j=y;k=x;       	Clear(w,height,width,y+1,x+2,GRAY);			if(strlen(strt)>0){		wsetcolor(w,BLACK,GRAY);		mvwaddstr(w,y,x,"━");       		Clear(w,0,width-2,y,x+2,BLUE);				wsetcolor(w,LT_WHITE,BLUE);		wmove(w,y,x+(width-strlen(strt))/2);		waddstr(w,strt);        		Clear(w,height-1,width,y+1,x,color2);	}	else       		Clear(w,height,width,y,x,color2);	wmove(w,y,x+6);	y=y+2;	p=strs;	i=0;	wsetcolor(w,color1,color2);	str1[0]='\0';	while(*p!='\0'){		if(*p=='~'){			p++;			i=0;			wmove(w,y++,x+6);			waddstr(w,str1);			wrefresh(w);			str1[0]='\0';		}		if(i>59){			while(*p!='~')				p++;			i=0;			p++;			wmove(w,y++,x+6);			waddstr(w,str1);			wrefresh(w);			str1[0]='\0';		}		str2[0]=*p;		str2[1]='\0';		strcat(str1,str2);		i++;		p++;			}		wmove(w,y++,x+6);	waddstr(w,str1);	wrefresh(w);	str1[0]='\0';	if(flags==1){		wmove(w,y+1,x+(width-4)/2);		waddstr(w,"<OK>");		wrefresh(w);		while(getch()!=Key_enter);		Putrect(w,j,k,Scr);		Free(Scr);		return 0;		}	wmove(w,y+1,x+(width-17)/2);	waddstr(w,CL1);	wrefresh(w);	i=2;	while(1){		ch=getch();		switch(ch){			case Key_left:			case Key_right: if(i==1){						i=2;	                                        wmove(w,y+1,x+(width-17)/2);						waddstr(w,CL1);						wrefresh(w);					}else{						i=1;						wmove(w,y+1,x+(width-17)/2);	  					waddstr(w,OK1);						wrefresh(w);					}					break;			case Key_enter: 					Putrect(w,j,k,Scr);					Free(Scr);					break;			}		if(ch==Key_enter)			break;	        }	return(i);}/***	是否支持颜色***/is_terminal(){	if ( strcmp( getenv( "TERM", "ansi" ) == 0 )) 		return(1);	else 	return(0);}/***	Getchar()	***/int f_getch(){	int keynum ;	keynum = getch();	if(keynum==Key_esc){		if( ( keynum=getch())==91){			return(getch());		}	}	return( keynum );}/*****	把 s2 放到 s1 的前面***/f_strcat( s1, s2 )char *s1;char *s2;{	char s[512];	strcpy( s, s2 );	strcat ( s, s1 );	strcpy( s1 , s );}

⌨️ 快捷键说明

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