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

📄 curlib.c

📁 用C语言实现的字符型的菜单界面
💻 C
📖 第 1 页 / 共 5 页
字号:
	savetty();#endif}/*----------------------------------------------------------------------------* * FUNCTION: 恢复一块屏幕区域.  * Argument: *           file_flag - 0.不从文件恢复 1.从文件恢复. * Return  :  *           TRUE - 成功. * 说    明: *           同 save_window() 成对使用. *----------------------------------------------------------------------------*/restore_vs(int file_flag){#if 1	int  i,j;	char fname[81],tname[30];	chtype *ptr;	FILE *fp;	if( file_flag )	{		strcpy(tname,ttyname(0));		strcce(tname,'/','_');		sprintf(fname,".screen.%d%s",getuid(),&tname[strlen(tname)-3]);		if( (fp=fopen(fname,"r")) == NULL )	 		return FALSE;		fscanf(fp,"%02d%02d%02d%02d\n",&vs.sy,&vs.sx,&vs.row,&vs.col);		ptr = (chtype *)vs.buf;		for(i=vs.sy;i<vs.sy+vs.row;i++)		{			for(j=vs.sx;j<vs.sx+vs.col;j++)			{				fscanf(fp,"%d ",ptr);				ptr++;			}		}		fclose(fp);	}	ptr = (chtype *)vs.buf;	for(i=vs.sy;i<vs.sy+vs.row;i++)	{		for(j=vs.sx;j<vs.sx+vs.col;j++)		{			mvwaddch(stdscr,i,j,*ptr++);		}	}	wrefresh(stdscr);	return TRUE;#else	resetty();#endif}/*----------------------------------------------------------------------------* * Function: 画一个box. * Argument: *           uchar sy - 指定box的开始行坐标. *           uchar sx - 指定box的开始列坐标. *           uchar row - 指定box的行数. *           uchar col - 指定box的列数. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/draw_box(uchar sy,uchar sx,uchar row,uchar col){	tdraw_box(sy,sx,row,col,screen.text,screen.board,screen.wstyle);}/*----------------------------------------------------------------------------* * Function: 画一个box. * Argument: *           uchar sy - 指定box的开始行坐标. *           uchar sx - 指定box的开始列坐标. *           uchar row - 指定box的行数. *           uchar col - 指定box的列数. *           chtype tattr - 文本的前景色和背景色. *           chtype battr - 边框的前景色和背景色. *           chtype flag  - WINDOW_SHADE: 阴影 WINDOW_ENGLISH: 英文制表符. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/tdraw_box(uchar sy,uchar sx,uchar row,uchar col,chtype tattr,chtype battr,chtype style){	register uchar i,j;	if( style & WINDOW_NO_BOARD )	{		cls(sy,sx,row,col,tattr);		return TRUE;	}	if( style & WINDOW_SHADE )	/* There is box with shade */	{		if( style & WINDOW_ENGLISH )		{			wattron(stdscr,battr);			mvwaddch(stdscr,sy,sx,0xda); /*┌ This is english table symbol */			for(i=1;i<col-2;i++)			{				mvwaddch(stdscr,sy,sx+i,0xc4); /* ─ */				mvwaddch(stdscr,sy+row-2,sx+i,0xc4); /* ─ */			}			mvwaddch(stdscr,sy,sx+col-2,0xbf); /*  ┐ */			for(i=1;i<row-2;i++)			{				mvwaddch(stdscr,sy+i,sx,0xb3); /* │ */				mvwaddch(stdscr,sy+i,sx+col-2,0xb3); /* │*/			}			mvwaddch(stdscr,sy+row-2,sx,0xc0); /* └ */			mvwaddch(stdscr,sy+row-2,sx+col-2,0xd9); /* ┘*/			wattroff(stdscr,battr);			/* draw shadom */			wattron(stdscr,screen.shade);			for(i=1;i<row-1;i++)				mvwaddch(stdscr,sy+i,sx+col-1,' ');			for(i=1;i<col;i++)				mvwaddch(stdscr,sy+row-1,sx+i,' ');			wattroff(stdscr,screen.shade);			/* clear test area */			cls(sy+1,sx+1,row-3,col-3,tattr);		}		else		{			wattron(stdscr,battr);			mvwaddstr(stdscr,sy,sx,"┌"); /* This is chinese table symbol */			for(i=2;i<col-4;i+=2)			{				mvwaddstr(stdscr,sy,sx+i,"─");				mvwaddstr(stdscr,sy+row-2,sx+i,"─");			}			mvwaddstr(stdscr,sy,sx+col-4,"┐");			for(i=1;i<row-2;i++)			{				mvwaddstr(stdscr,sy+i,sx,"│");				mvwaddstr(stdscr,sy+i,sx+col-4,"│");			}			mvwaddstr(stdscr,sy+row-2,sx,"└");			mvwaddstr(stdscr,sy+row-2,sx+col-4,"┘");			wattroff(stdscr,battr);			/* Draw shadom */			wattron(stdscr,screen.shade);			for(i=1;i<row-1;i++)				mvwaddstr(stdscr,sy+i,sx+col-2,"  ");			for(i=2;i<col;i++)				mvwaddch(stdscr,sy+row-1,sx+i,' ');			wattroff(stdscr,screen.shade);			/* Clear text area */			cls(sy+1,sx+2,row-3,col-6,tattr);		}	}	else	{		if( style & WINDOW_ENGLISH )		{			wattron(stdscr,battr);			mvwaddch(stdscr,sy,sx,0xda); /*┌ This is english table symbol */			for(i=1;i<col-1;i++)			{				mvwaddch(stdscr,sy,sx+i,0xc4);				mvwaddch(stdscr,sy+row-1,sx+i,0xc4);			}			mvwaddch(stdscr,sy,sx+col-1,0xbf);			for(i=1;i<row-1;i++)			{				mvwaddch(stdscr,sy+i,sx,0xb3);				mvwaddch(stdscr,sy+i,sx+col-1,0xb3);			}			mvwaddch(stdscr,sy+row-1,sx,0xc0);			mvwaddch(stdscr,sy+row-1,sx+col-1,0xd9);			wattroff(stdscr,battr);			/* clear test area */			cls(sy+1,sx+1,row-2,col-2,tattr);		}		else		{			wattron(stdscr,battr);			mvwaddstr(stdscr,sy,sx,"┌"); /* This is chinese table symbol */			for(i=2;i<col-2;i+=2)			{				mvwaddstr(stdscr,sy,sx+i,"─");				mvwaddstr(stdscr,sy+row-1,sx+i,"─");			}			mvwaddstr(stdscr,sy,sx+col-2,"┐");			for(i=1;i<row-1;i++)			{				mvwaddstr(stdscr,sy+i,sx,"│");				mvwaddstr(stdscr,sy+i,sx+col-2,"│");			}			mvwaddstr(stdscr,sy+row-1,sx,"└");			mvwaddstr(stdscr,sy+row-1,sx+col-2,"┘");			wattroff(stdscr,battr);			cls(sy+1,sx+2,row-2,col-4,tattr);		}	}	touchwin(stdscr);	wrefresh(stdscr);	return TRUE;}/*----------------------------------------------------------------------------* * Function: 在指定窗口画一个box. * Argument: *           WINDOW *win - 指定的窗口. *           chtype tattr - 文本的前景色和背景色. *           chtype battr - 边框的前景色和背景色. *           chtype flag  - WINDOW_SHADE: 阴影 WINDOW_ENGLISH: 英文制表符. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/wdraw_box(WINDOW *win,chtype tattr,chtype battr,chtype flag){	short i,j,f,b;	WINDOW *boxwin;	if( flag & WINDOW_SHADE )	/* There is box with shade */	{		if( flag & WINDOW_ENGLISH )		{#if 0			wattron(win,battr);			mvwaddch(win,0,0,0xa9); /*┌ This is english table symbol */			for(i=1;i<win->_maxx-2;i++)			{				mvwaddch(win,0,i,0xc4);				mvwaddch(win,win->_maxy-2,i,0xc4);			}			mvwaddch(win,0,win->_maxx-2,0xaa);			for(i=1;i<win->_maxy-2;i++)			{				mvwaddch(win,i,0,0xb3);				mvwaddch(win,i,win->_maxx-4,0xb3);			}			mvwaddch(win,win->_maxy-2,0,0xc0);			mvwaddch(win,win->_maxy-2,win->_maxx-2,0xd9);			wattroff(win,battr);			wattron(win,screen.shade);			for(i=1;i<win->_maxy-1;i++)				mvwaddch(win,i,win->_maxx-1,' ');			for(i=1;i<win->_maxx-1;i++)				mvwaddch(win,win->_maxy-1,i,' ');			wattroff(win,screen.shade);			wattron(win,tattr);			for(i=1;i<win->_maxy-2;i++)				for(j=1;j<win->_maxx-2;j++)					mvwaddch(win,i,j,' ');			wattroff(win,tattr);#else			if( (boxwin=subwin(win,win->_maxy-1,win->_maxx-1,win->_begy,win->_begx)) == NULL )			{				return(FALSE);			}			wattron(boxwin,battr);			box(boxwin,0,0);			wattroff(boxwin,battr);			touchwin(boxwin);			wrefresh(boxwin);			/* draw shade */			wattron(win,screen.shade);			for(i=1;i<win->_maxy-1;i++)				mvwaddch(win,i,win->_maxx-1,' ');			for(i=1;i<win->_maxx-1;i++)				mvwaddch(win,win->_maxy-1,i,' ');			wattroff(win,screen.shade);			/* clear screen */			wattron(win,tattr);			for(i=1;i<win->_maxy-2;i++)				for(j=1;j<win->_maxx-2;j++)					mvwaddch(win,i,j,' ');			wattroff(win,tattr);#endif		}		else		{			wattron(win,battr);			mvwaddstr(win,0,0,"┌"); /* This is chinese table symbol */			for(i=2;i<win->_maxx-4;i+=2)			{				mvwaddstr(win,0,i,"─");				mvwaddstr(win,win->_maxy-2,i,"─");			}			mvwaddstr(win,0,win->_maxx-4,"┐");			for(i=1;i<win->_maxy-2;i++)			{				mvwaddstr(win,i,0,"│");				mvwaddstr(win,i,win->_maxx-4,"│");			}			mvwaddstr(win,win->_maxy-2,0,"└");			mvwaddstr(win,win->_maxy-2,win->_maxx-4,"┘");			wattroff(win,battr);			/* Add shade */			wattron(win,screen.shade);			for(i=1;i<win->_maxy-1;i++)				mvwaddstr(win,i,win->_maxx-2,"  ");			for(i=2;i<win->_maxx;i++)				mvwaddch(win,win->_maxy-1,i,' ');			wattroff(win,screen.shade);			wattron(win,tattr);			for(i=1;i<win->_maxy-2;i++)				for(j=2;j<win->_maxx-4;j++)					mvwaddch(win,i,j,' ');			wattroff(win,tattr);		}	}	else	{		if( flag & WINDOW_ENGLISH )		{			wattron(win,battr);			box(win,0,0);			wattroff(win,battr);			wattron(win,tattr);			for(i=1;i<win->_maxy-1;i++)				for(j=1;j<win->_maxx-1;j++)					mvwaddch(win,i,j,' ');			wattroff(win,tattr);		}		else		{			wattron(win,battr);			mvwaddstr(win,0,0,"┌"); /* This is chinese table symbol */			for(i=2;i<win->_maxx-2;i+=2)			{				mvwaddstr(win,0,i,"─");				mvwaddstr(win,win->_maxy-1,i,"─");			}			mvwaddstr(win,0,win->_maxx-2,"┐");			for(i=1;i<win->_maxy-1;i++)			{				mvwaddstr(win,i,0,"│");				mvwaddstr(win,i,win->_maxx-2,"│");			}			mvwaddstr(win,win->_maxy-1,0,"└");			mvwaddstr(win,win->_maxy-1,win->_maxx-2,"┘");			wattroff(win,battr);			wattron(win,tattr);			for(i=1;i<win->_maxy-1;i++)				for(j=2;j<win->_maxx-2;j++)					mvwaddch(win,i,j,' ');			wattroff(win,tattr);		}	}	touchwin(win);	wrefresh(win);	return TRUE;}/*----------------------------------------------------------------------------* * Function: 用某种颜色清除屏幕. * Argument: *           short sy - 开始行. *           short sx - 开始列. *           short row - 列. *           short col - 行. *           chtype attr  - 颜色. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/cls(int sy,int sx,int row,int col,chtype attr){	register uchar i,j;	wattron(stdscr,attr);	for(i=sy;i<sy+row;i++)	{		for(j=sx;j<sx+col;j++)		{			mvwaddch(stdscr,i,j,' ');		}	}	wattroff(stdscr,attr);	touchwin(stdscr);	wrefresh(stdscr);	return TRUE;}/*----------------------------------------------------------------------------* * Function: 用某种颜色清除窗口. * Argument: *           WINDOW *win - 窗口. *           chtype attr  - 颜色. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/wcls(WINDOW *win,chtype attr){	register char i,j;	short f,b;	wattron(win,attr);	for(i=0;i<win->_maxy;i++)	{		for(j=0;j<win->_maxx;j++)		{			mvwaddch(win,i,j,' ');		}	}	wattroff(win,attr);	touchwin(win);	wrefresh(win);		return TRUE;}/*----------------------------------------------------------------------------* * Function: 用某种颜色清除屏幕的一行. * Argument: *           short sy - 开始行. *           short sx - 开始列. *           short len - 长度. *           chtype attr  - 颜色. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/cls_line(int sy,int sx,int len,chtype attr){	return(wcls_line(stdscr,sy,sx,len,attr));}/*----------------------------------------------------------------------------* * Function: 用某种颜色清除窗口的一行. * Argument: *           WINDOW *win - 窗口. *           short sy - 开始行. *           short sx - 开始列. *           short len - 长度. *           chtype attr  - 颜色. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/wcls_line(WINDOW *win,int sy,int sx,int len,chtype attr){	register char i;	if( need_check_flag )	{		if( debug_yx(sy,sx,"wcls_line()") == FALSE ||			 debug_yx(sy,sx+len-1,"wcls_line()") == FALSE ||			 debug_rowcol(0,len,"wcls_line()") == FALSE )				return(FALSE);	}	wattron(win,attr);	for(i=0;i<len;i++)	{		mvwaddch(win,sy,sx+i,' ');	}	wattroff(win,attr);	touchwin(win);	wrefresh(win);		return TRUE;}/*----------------------------------------------------------------------------* * Function: 在屏幕中央显示一个系统消息窗口. * Argument: *           char *msg - 消息文本. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/disp_sysbox(char *msg){	uchar i,len,sx,sy,lines;	len = 20;	lines = get_item_num(msg,'\n');	if( lines == 0 ) lines = 1;	sy = (screen_endy - lines) / 2 - 1;	if( sy < 0 ) sy = 0;	if( lines == 0 )	{		if( strlen(msg) > len )			len = strlen(msg);	}	else	{		for(i=0;i<lines;i++)		{			if( strlen(get_item(msg,'\n',i)) > len )				len = strlen(get_item(msg,'\n',i));		}	}	if( (len % 2) != 0 )		len+=7;	else		len+=8;	if( len > 79 ) len = 79;	sx=(80-len)/2;	if( screen.wstyle & WINDOW_CHINESE )		disp_box(sy,sx,msg,"◆系统警告◆",MSG_AK);	else		disp_box(sy,sx,msg,"<Warning>",MSG_AK);}/*----------------------------------------------------------------------------* * Function: 显示一个消息窗口. * Argument: *           short sy - 消息框的开始行. *           short sx - 消息框的开始列. *           char *msg - 消息文本. *           char *title - 标题文本. *           chtype flag  - MSG_OK, MSG_OC, MSG_YN, MSG_YNC, MSG_RC, MSG_ARI. * Return  :  *           TRUE. *----------------------------------------------------------------------------*/print_sysbox(format,va_alist)char *format;va_dcl{	va_list arg;	char strbuf[DATA_LENGTH];	va_start(arg);	vsprintf(strbuf,format,arg);

⌨️ 快捷键说明

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