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

📄 gsi.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
#define	PLOT	006	/* ack */#define BEL    007     /* exit plot mode */#define	ESC	033	/* escape */#define	HFWD	'9'#define	HREV	'8'#define	FREV	'7'#define	SO	016	/* shift out - enter greek */#define	SI	017	/* shift in */#define	UP	013#define	DN	012#define	RT	' '#define	LF	'\b'int	restore();int	svmode, mode[3];main(argc,argv) int argc; char **argv; {	int c, textmode;	extern int fin,fout;	fin = dup(0);	fout = dup(1);	if ((signal(2, 1) & 01) == 0)		signal(2, &restore);	gtty(1, mode);	svmode = mode[2];	mode[2] =& 0777757;	/* turn off cr-lf  */	mode[2] =| 03;	/* turn off delays, tabs */	stty(1, mode);	textmode = 1;	while( (c=getchar()) != '\0' ){		if( c==SO ){			special();			continue;		}		if (c== PLOT) textmode = 1-textmode;		if (c==BEL) textmode = 1;		if( c=='\n' && textmode )			putchar(015);	/* CR */		if( c!=ESC ){			putchar(c);			continue;		}		putchar(PLOT);		c = getchar();		if( c == HREV )			nplot(4,UP);		else if( c == HFWD )			nplot(4,DN);		else if( c == FREV )			nplot(8,UP);		putchar(PLOT);	}	flush();	restore();}restore(){	mode[2] = svmode;	stty(1, mode);	exit();}int	tab[]{	'A',	/* alpha */	'B',	/* beta */	'D',	/* delta */	'W',	/* DELTA */	'S',	/* epsilon */	'N',	/* eta */	'\\',	/* gamma */	'G',	/* GAMMA */	'o',	/* infinity - not in M37 */	'^',	/* integral */	'L',	/* lambda */	'E',	/* LAMBDA */	'M',	/* mu */	'[',	/* nabla (del) */	'_',	/* not */	'@',	/* nu */	'C',	/* omega */	'Z',	/* OMEGA */	']',	/* partial */	'U',	/* phi */	'F',	/* PHI */	'V',	/* psi */	'H',	/* PSI */	'J',	/* pi */	'P',	/* PI */	'K',	/* rho */	'Y',	/* sigma */	'R',	/* SIGMA */	'I',	/* tau */	'T',	/* theta */	'O',	/* THETA */	'X',	/* xi */	'Q',	/* zeta */	0};int	trans[]{	alpha,	beta,	delta,	DELTA,	epsilon,	eta,	gamma,	GAMMA,	infinity,	integral,	lambda,	LAMBDA,	mu,	nabla,	not,	nu,	omega,	OMEGA,	partial,	phi,	PHI,	psi,	PSI,	pi,	PI,	rho,	sigma,	SIGMA,	tau,	theta,	THETA,	xi,	zeta,	0};int alpha[]	{LF,'c',RT,RT,'(',LF,0};int beta[]	{'B',LF,LF,DN,DN,'|',RT,RT,UP,UP,0};int delta[]	{'o',UP,UP,'<',DN,DN,0};int DELTA[]	{LF,LF,'/',-3,DN,'-',-4,RT,'-',-3,UP,'\\',LF,LF,0};int epsilon[]	{'<','-',0};int eta[]	{'n',RT,RT,DN,DN,'|',LF,LF,UP,UP,0};int gamma[]	{')',RT,'/',LF,0};int GAMMA[]	{LF,LF,'|',RT,RT,-3,UP,'-',-3,DN,RT,RT,'`',LF,LF,0};int infinity[]	{LF,LF,'c',-4,RT,'o',LF,LF,0};int integral[]	{'|','\'',RT,RT,'`',-3,LF,-6,DN,'\'',LF,'`',RT,RT,-6,UP,0};int lambda[]	{'\\',-4,DN,LF,'\'',DN,LF,'\'',-5,UP,RT,RT,0};int LAMBDA[]	{LF,LF,'/',-4,RT,'\\',LF,LF,0};int mu[]	{'u',LF,LF,',',RT,RT,0};int nabla[]	{LF,LF,'\\',-3,UP,'-',-4,RT,'-',-3,DN,'/',LF,LF,0};int not[]	{'-',-2,RT,UP,',',DN,-2,LF,0};int nu[]	{LF,'(',-3,RT,'/',LF,LF,0};int omega[]	{LF,'u',-3,RT,'u',LF,LF,0};int OMEGA[]	{'O',DN,DN,LF,'-',RT,RT,'-',LF,UP,UP,0};int partial[]	{'o',RT,DN,'`',LF,UP,'`',LF,UP,'`',RT,DN,0};int phi[]	{'o','/',0};int PHI[]	{'o','[',']',0};int psi[]	{'/','-',DN,DN,RT,RT,'\'',-4,LF,'\'',RT,RT,UP,UP,0};int PSI[]	{'[',']','-',DN,DN,RT,RT,'\'',-4,LF,'`',RT,RT,UP,UP,0};int pi[]	{UP,'-',-3,DN,'"',DN,'"',-3,UP,0};int PI[]	{LF,LF,'[',']',-4,RT,'[',']',LF,LF,-3,UP,'-',-3,DN,0};int rho[]	{'o',LF,LF,DN,DN,'|',UP,UP,RT,RT,0};int sigma[]	{'o',DN,RT,RT,'~',UP,LF,LF,0};int SIGMA[]	{'>',-2,DN,'-',-5,UP,'-',-3,DN,0};int tau[]	{'t',DN,RT,RT,'~',LF,LF,LF,'~',RT,UP,0};int theta[]	{'O','-',0};int THETA[]	{'O','=',0};int xi[]	{'c',RT,DN,',',LF,-3,UP,'c',LF,DN,'`',RT,DN,0};int zeta[]	{'c',RT,DN,',',LF,-3,UP,'<',DN,DN,0};special(){	int c,i,j,t;   loop:	if( (c=getchar()) == SI )		return;	for( i=0; tab[i]!=0; i++)		if( c==tab[i] ){			plot(trans[i]);			goto loop;		}	putchar(c);	goto loop;}plot(s) int *s; {	int i,c;	putchar(PLOT);	for( i=0; (c=s[i])!=0; i++ )		if( c<0 )			nplot(-c,s[++i]);		else			putchar(c);	putchar(PLOT);	putchar(' ');}nplot(n,c) int n,c; {	while(n--)		putchar(c);}

⌨️ 快捷键说明

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