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

📄 screen.c

📁 unix环境下c语言屏幕编程开发
💻 C
字号:
/* *	屏幕显示控制例程 * 20040814  */#include "../inc/screen.h"/***************************** *	显  示  属  性	     * *	^^^^^^^^^^^^^^	     * * 0. 正常;     1. 高亮度;   * * 2. 反转;                  * *****************************/void attri(i)int	i;{	int	oldatt;	putchar(ESC); putchar('[');	switch(i)	{		case 0: putchar('0'); break;		case 1: putchar('1'); break;		case 2: putchar('7'); break;       		default: break;	}	putchar('m');}/*	得到当前光标位置	*/void gcp(x,y)int	*x,*y;{	printf("%c[6n",ESC);	scanf("\033[%d;%dR",y,x);}/*  置光标到 y 行 x 列.  */void scp(x,y)int	x,y;{	putchar(ESC); putchar('[');	printf("%d;%dH",y,x);}/******************************** *				* *  在x列y行处显示字符串string	* *				* ********************************/void plot(x,y,string)int	x,y;char	*string;{	scp(x,y);	printf("%s",string);}/******************************** *				* *  在x列y行处显示带颜色的字符串string	* *				* ********************************/void PrtColorStr(x, y, j, k, string)int	x,y,j,k;char	*string;{	scp(x,y);	printf("%c[%d;%dm%s",27,j,k,string);}/* *   清  屏  */void clscr(){	putchar(ESC); putchar('['); putchar('2'); putchar('J');	putchar(ESC); putchar('['); putchar('H');}/******************  *   清除屏幕上   *  *   第 i 到 j 行 *  *  (1<=i,j<=24)  *  ******************/void Clear(i,j)int i,j;{	int i0,j0,k;	if(i > j)	{		i0 = j;		j0 = i;	}	else	{		i0 = i;		j0 = j;	}	k = 0;        HIDE_CURSOR	scp(1,i0);	while ( k++ != j0-i0+1)   	{		putchar(ESC); putchar('['); putchar('2');		putchar('K'); scp(1,i+k);	}        DISP_CURSOR}/****************** *    响铃n秒     * ******************/void beep(n){ 	int i;        for ( i = 0 ; i < n ; i ++ ) putchar(BELL);}/* *  在x列y行处高亮度反衬显示字符串string. */void market(x,y,string,flag)int	x,y;char	*string;int	flag;{	attri(0);	if(flag == TRUE)		attri(1);	attri(2);	plot(x,y,string);	attri(0);}void m_blank(x,y,length,flag)int	x,y,length,flag;{	attri(0);	if(flag == TRUE)		attri(1);	attri(2);	wblank(x,y,length);	attri(0);}/* *	设置屏幕窗口 *  若i=0, 从y1到y2行的窗口滚动 *  若i=1, 取消窗口 */void scrmode(i,y1,y2)int i,y1,y2;{	putchar(ESC); putchar('[');	if (i)		putchar('r');	else		printf("%d;%dr",y1,y2);}/************************************ *   				    * *  		画线		    * * 		^^^^		    * * 若f1=0, 从i行到j行划竖线;        * *         (1<=i<j<=24)             * * 若f1=1, 从i列到j列划横线.        * *         (1<=i<j<=80)             * *				    * ************************************/void line(f1,i,j,n)int f1,i,j,n;{	int x0,x1,k;	if(i < j)	{		x0 = i;		x1 = j;	}	else	{		x0 = j;		x1 = i;	}	k = x0;	if(f1 == 0)	{		while( k <= x1)		{			scp(n,k);                        printf ( "│" ) ;			k++;		}	}	else	{		while(k <= x1)		{		        scp(k,n );                        printf ( "─" ) ;			k += 2 ;		}	}}/***************************** *                           * *         画窗口            * *         ^^^^^^            * *                           * *  窗口由x1,x2列y1,y2行构成.* *  (1<=x1<=x2<=80)          * *  (1<=y1<=y2<=24)          * *                           * *****************************/void window(x1,x2,y1,y2)int x1,x2,y1,y2;{	int a1,a2,b1,b2;	if(x1 == x2 || y1 == y2)		return;	if(x1 < x2)	{		a1 = x1 + 1;		a2 = x2 - 1;	}	else	{		a1 = x1 - 1;		a2 = x2 + 1;	}	if(y1 < y2)	{		b1 = y1 + 1;		b2 = y2 - 1;	}	else	{		b1 = y1 - 1;		b2 = y2 + 1;	}        HIDE_CURSOR 	scp(x1,y1); printf("┌");         line(1,a1+1,a2,y1);	scp(x2,y1); printf("┐");         line(0,b1,b2,x2);         scp(x1,y2);	printf("└"); line(1,a2,a1+1,y2); line(0,b2,b1,x1);	scp(x2,y2); printf("┘"); 	DISP_CURSOR}void window_title (x1,x2,y1,y2,title)int x1,x2,y1,y2;char *title ;{	int a1,a2,b1,b2;	if(x1 == x2 || y1 == y2 || strlen ( title ) >= ( x2 - x1 ) )		return;	if(x1 < x2)	{		a1 = x1 + 1;		a2 = x2 - 1;	}	else	{		a1 = x1 - 1;		a2 = x2 + 1;	}	if(y1 < y2)	{		b1 = y1 + 1;		b2 = y2 - 1;	}	else	{		b1 = y1 - 1;		b2 = y2 + 1;	}	HIDE_CURSOR	scp(x1,y1); printf("┌");         attri ( 1 ) ;        printf ( title ) ;        attri ( 0 ) ;        if ( ( strlen ( title ) % 2 ) == 1 )           line(1,a1+strlen(title),a2,y1);        else           line(1,a1+strlen(title)+1,a2,y1);	scp(x2,y1); printf("┐");         line(0,b1,b2,x2);         scp(x1,y2);	printf("└"); line(1,a2,a1+1,y2); line(0,b2,b1,x1);	scp(x2,y2); printf("┘"); 	DISP_CURSOR} /* *      局部擦除屏幕 */void rubber(x1,x2,y1,y2)int x1,x2,y1,y2; {	int x10,x20,y10,y20;	int diff,i;	char str[81];	if(x1 < 0 || x1 > 80 || x2 < 0 || x2 > 80 ||	 y1 < 0 || y1 > 24 || y2 < 0 || y2 > 24)		return;	if(x1 < x2)	{		x10 = x1;	x20 = x2;	}	else	{		x10 = x2;	x20 = x1;	}	if(y1 < y2)	{		y10 = y1;	y20 = y2;	}	else	{		y10 = y2;	y20 = y1;	}	diff = x20 - x10;	for(i = 0; i <= diff; i++)		str[i] = SP;	str[i] = NUL;	HIDE_CURSOR	while(y10 <= y20)	{		plot(x10,y10,str);		y10 ++;	}	DISP_CURSOR	FFSTD}void splot(x,y,w,v)int	x,y,w,v;{	char	str[10];	scp(x,y);	sprintf(str,"%%%dd",w);	printf(str,v);}void lplot(x,y,w,v)int	x,y,w;long	v;{	char	str[10];	scp(x,y);	sprintf(str,"%%%dld",w);	printf(str,v);}void wblank(x,y,number){	int	i,j;	i = number / 10;	j = number % 10;	scp(x,y);	while(i)	{		printf("          ");		i--;	}	while(j)	{		printf(" ");		j--;	}}void wplot(x,y,str)int	x,y;char	*str;{	wblank(x,y,50);	plot(x,y,str);}void fpt_str(fp,number,str)FILE	*fp;int	number;char	*str;{	while(number--)		fprintf(fp,"%s",str);}

⌨️ 快捷键说明

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