📄 screen.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 + -