wgetch.c
来自「unix环境下c语言屏幕编程开发」· C语言 代码 · 共 122 行
C
122 行
#include "../inc/screen.h"void (*istat)() ;int wsigflag = 0;static unsigned char wch0 = 0;jmp_buf wbuf;static void escproc( signo )int signo ;{ alarm(0); wsigflag = 1; longjmp(wbuf,1);}unsigned char wgetch(){ int alarm0; unsigned char ch; char chx; struct timeb tx; wsigflag = 0; if(wch0 != 0) { ch = wch0; wch0 = 0; return(ch); } do { chx = getchar(); } while(chx == ERR && errno == EINTR); ch = (unsigned char)chx; if(ch != ESC) return(ch); istat = signal(SIGALRM,escproc); ftime(&tx); if(tx.millitm > 500) alarm0 = alarm(2); else alarm0 = alarm(1); setjmp(wbuf); if(wsigflag != 0) { signal(SIGALRM,istat); alarm(0); return(ESC); } ch = wgetchar(); if(ch != '[') { signal(SIGALRM,istat); alarm(0); wch0 = ch; return(ESC); } ch = wgetchar(); signal(SIGALRM,istat); alarm(0); switch(ch) { case 'A': /* Up */ return(128); break; case 'B': /* Down */ return(129); break; case 'D': /* Left */ return(130); break; case 'C': /* Right */ return(131); break; case 'H': /* Home */ return(132); break; default: return(ESC); }}char wgetchar(){ char chx; do { chx = getchar(); } while(chx == ERR && errno == EINTR); return(chx);}void wprt(fp,str,n)FILE *fp;char *str;int n;{ while(n--) fprintf(fp,"%s",str);}wsleep(num)int num;{ long num0; struct timeb wtp0,wtp1; num0 = (long)num * 1000l; ftime(&wtp0); do{ if(num0 - (wtp1.time - wtp0.time) * 1000l > 1000l) sleep(1); ftime(&wtp1); }while(num0 - (wtp1.time - wtp0.time) * 1000l > 0l);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?