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

📄 pub_screen.c

📁 自已结累的Unix下C语言开发函数库
💻 C
字号:
/* *ANSI驱动程序的一些屏幕操作函数 *zyq - shilyu - cff 09014 *functionnum  018 */ #include "./../inc/pub.h"#if !defined( DEBUG )#define DEBUG#endif/* 001 * 清屏 */void clscr( ) {	printf( "%c[2J", ESC ) ;	}/* 上面的等价于void clscr(){	putchar(ESC); putchar('['); putchar('2'); putchar('J');	putchar(ESC); putchar('['); putchar('H');}*//*	002 *得到当前光标位置	 */void gcp(x,y)int	*x,*y;{	printf("%c[6n",ESC);	scanf("\033[%d;%dR",y,x);}/* 003   *置光标到 x 列 y行   */void scp(x,y)int	x,y;{	putchar(ESC); putchar('[');	printf("%d;%dH",y,x);}/* 004 * 在x列y行处显示字符串string */void plot(x,y,string)int	x,y;char	*string;{	scp(x,y);	printf("%s",string);}/* 005 * 在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",ESC,j,k,string);}/* 006 * 清除屏幕上   * 第 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}/* 007 * 响铃n秒      */void beep(n){ 	int i;        for ( i = 0 ; i < n ; i ++ ) putchar(BELL);}/* 008 *	显  示  属  性	     * 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');}/* 009 * 在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);}/* 010 * 在x列y行处显示number个空格 */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--;	}}/* 011 * 在x列y行处高亮度反衬显示number个空格 */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);}/* 012 *	设置屏幕窗口 *  若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); /*滚动*/}/* 013 *  		画线		     * 若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 ;		}	}}/***************************** *          014              * *         画窗口            * *         ^^^^^^            * *                           * *  窗口由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	}/* 015  * */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}/* 016 * 局部擦除屏幕 */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}/* 017 * 在x列y行 将整型数v 以w个长度输出  */void splot(x,y,w,v)int	x,y,w,v;{	char	str[10];	scp(x,y);	sprintf(str,"%%%dd",w);	printf(str,v);}/* 018 * 在x列y行 将长整型数v 以w个长度输出  */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);}

⌨️ 快捷键说明

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