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

📄 io.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char sccsid[] = "@(#)io.c	4.4 9/3/83";#endif# include "e.h"#define	MAXLINE	1200	/* maximum input line */char	in[MAXLINE];	/* input buffer */int	eqnexit();int noeqn;main(argc,argv) int argc; char *argv[];{	eqnexit(eqn(argc, argv));}eqnexit(n) {#ifdef gcos	if (n)		fprintf(stderr, "run terminated due to eqn error\n");	exit(0);#endif	exit(n);}eqn(argc,argv) int argc; char *argv[];{	int i, type;	setfile(argc,argv);	init_tbl();	/* install keywords in tables */	while ((type=getline(in)) != EOF) {		eqline = linect;		if (in[0]=='.' && in[1]=='E' && in[2]=='Q') {			for (i=11; i<100; used[i++]=0);			printf("%s",in);			printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");			markline = 0;			init();			yyparse();			if (eqnreg>0) {				printf(".nr %d \\w'\\*(%d'\n", eqnreg, eqnreg);				/* printf(".if \\n(%d>\\n(.l .tm too-long eqn, file %s, between lines %d-%d\n",	*/				/*	eqnreg, svargv[ifile], eqline, linect);	*/				printf(".nr MK %d\n", markline);	/* for -ms macros */				printf(".if %d>\\n(.v .ne %du\n", eqnht, eqnht);				printf(".rn %d 10\n", eqnreg);				if(!noeqn)printf("\\*(10\n");			}			printf(".ps \\n(99\n.ft \\n(98\n");			printf(".EN");			if (lastchar == EOF) {				putchar('\n');				break;			}			if (putchar(lastchar) != '\n')				while (putchar(gtc()) != '\n');		}		else if (type == lefteq)			inline();		else			printf("%s",in);	}	return(0);}getline(s) register char *s; {	register c;	while((*s++=c=gtc())!='\n' && c!=EOF && c!=lefteq)		if (s >= in+MAXLINE) {			error( !FATAL, "input line too long: %.20s\n", in);			in[MAXLINE] = '\0';			break;		}	if (c==lefteq)		s--;	*s++ = '\0';	return(c);}inline() {	int ds;	printf(".nr 99 \\n(.s\n.nr 98 \\n(.f\n");	ds = oalloc();	printf(".rm %d \n", ds);	do{		if (*in)			printf(".as %d \"%s\n", ds, in);		init();		yyparse();		if (eqnreg > 0) {			printf(".as %d \\*(%d\n", ds, eqnreg);			ofree(eqnreg);		}		printf(".ps \\n(99\n.ft \\n(98\n");	} while (getline(in) == lefteq);	if (*in)		printf(".as %d \"%s", ds, in);	printf(".ps \\n(99\n.ft \\n(98\n");	printf("\\*(%d\n", ds);	ofree(ds);}putout(p1) int p1; {	extern int gsize, gfont;	int before, after;	if(dbg)printf(".\tanswer <- S%d, h=%d,b=%d\n",p1, eht[p1], ebase[p1]);	eqnht = eht[p1];	printf(".ds %d \\x'0'", p1);	/* suppposed to leave room for a subscript or superscript */#ifndef NEQN	before = eht[p1] - ebase[p1] - VERT((ps*6*12)/10);#else NEQN	before = eht[p1] - ebase[p1] - VERT(3);	/* 3 = 1.5 lines */#endif NEQN	if (before > 0)		printf("\\x'0-%du'", before);	printf("\\f%c\\s%d\\*(%d%s\\s\\n(99\\f\\n(98",		gfont, gsize, p1, rfont[p1] == ITAL ? "\\|" : "");#ifndef NEQN	after = ebase[p1] - VERT((ps*6*2)/10);#else NEQN	after = ebase[p1] - VERT(1);#endif NEQN	if (after > 0)		printf("\\x'%du'", after);	putchar('\n');	eqnreg = p1;}max(i,j) int i,j; {	return (i>j ? i : j);}oalloc() {	int i;	for (i=11; i<100; i++)		if (used[i]++ == 0) return(i);	error( FATAL, "no eqn strings left", i);	return(0);}ofree(n) int n; {	used[n] = 0;}setps(p) int p; {	printf(".ps %d\n", EFFPS(p));}nrwid(n1, p, n2) int n1, p, n2; {	printf(".nr %d \\w'\\s%d\\*(%d'\n", n1, EFFPS(p), n2);}setfile(argc, argv) int argc; char *argv[]; {	static char *nullstr = "-";	svargc = --argc;	svargv = argv;	while (svargc > 0 && svargv[1][0] == '-') {		switch (svargv[1][1]) {		case 'd': lefteq=svargv[1][2]; righteq=svargv[1][3]; break;		case 's': gsize = atoi(&svargv[1][2]); break;		case 'p': deltaps = atoi(&svargv[1][2]); break;		case 'f': gfont = svargv[1][2]; break;		case 'e': noeqn++; break;		case 0:	goto endargs; 		default: dbg = 1;		}		svargc--;		svargv++;	}  endargs:	ifile = 1;	linect = 1;	if (svargc <= 0) {		curfile = stdin;		svargv[1] = nullstr;	}	else		openinfile();	/* opens up the first input file */}yyerror() {;}init() {	ct = 0;	ps = gsize;	ft = gfont;	setps(ps);	printf(".ft %c\n", ft);}error(fatal, s1, s2) int fatal; char *s1, *s2; {	if (fatal>0)		printf("eqn fatal error: ");	printf(s1,s2);	printf("\nfile %s, between lines %d and %d\n",		 svargv[ifile], eqline, linect);	fprintf(stderr, "eqn: ");	if (fatal>0)		fprintf(stderr, "fatal error: ");	fprintf(stderr, s1, s2);	fprintf(stderr, "\nfile %s, between lines %d and %d\n",		 svargv[ifile], eqline, linect);	if (fatal > 0)		eqnexit(1);}

⌨️ 快捷键说明

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