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

📄 what2.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
# include "stdio.h"# include "ctype.h"#	define NS 5	struct sf {		char *text;		int olap;		} sents[NS];	struct sf *sp;	char stext[NS][500];describe (file, argc, argv, rf)	char *file, *argv[];	FILE *rf;{	int ns 0;	char linbuf[512], *line, *p;	int i, wrflg 0, wrote 0, ln 0;	FILE *fi;fi = fopen(file, "r");if (fi==NULL) return;for(i=1; i<argc; i++)	lcase(argv[i]);while (gsent(linbuf, 512, fi))	{	wrote=0;	for(line=linbuf; *line==' '; line++);	if (line[0]==0) continue;	for(p=line; *p; p++)		if (*p=='\t') *p= ' ';	if (wrflg && line[0]=='.' && isupper(line[1]))		wrflg=0;	if (wrflg)		{		output(line, ln, rf);		wrote=1;		}	if (prefix(".TL", line))		wrflg=1;	if (prefix(".AU", line))		wrflg = ln = 1;	if (prefix(".DA", line) || prefix(".ND", line))		output(line+4, 1, rf);	if (line[0]=='.')		continue;	if (wrote) continue;	ns=update(ns, line, count(line,argc,argv));	}fclose(fi);for(sp=sents; sp<sents+ns; sp++)	output(sp->text, 0, rf);}int state 0;int oldc '\n';gsent(buf, bsize, fi)	char *buf;	FILE *fi;{	char *s;	int c, leng 0;/* state	0: looking for '.' 	1: looking for nl or space aftter '.'	2: looking for nl after line with dot.	*/s=buf;if (state==2)	*s++='.';while ( (c = getc(fi)) > 0 )	{	switch(state)		{		case 0: /* normal */			if (c=='.' && oldc == '\n')				{				*s=0;				state=2;				oldc='\n';				return(1);				}			*s++ = (c=='\n'? ' ': c);			if (s>=buf+bsize)				{				*--s = 0;				return(1);				}			if (c=='.' || c == '?' || c=='!')				if (leng>1)					state=1;			leng = (isalpha(c) ? leng+1 : 0);			break;		case 1: /* found ., want nl or space */			if (c==' ' || c == '\n')				{				*s=0;				state=0;				oldc=c;				return(1);				}			*s++ = (c=='\n' ? ' ' : c);			state=0;			leng = 0;			break;		case 2: /* found trof line, want nl */			if (c == '\n')				{				*s=0;				state=0;				oldc='\n';				return(1);				}			*s++ = c;			break;		}	oldc=c;	}*s=0;return(0);}prefix( p, s)	char *p, *s;{int c;while ( (c= *p++) == *s++)	if (c==0)		return(1);return(c==0);}output (s, ln, rf)	char *s;	FILE *rf;{	char *t;	int more 1;	t=s;	while (more)		{		while (t<s+72 && *t)			t++;		if (*t)			{			while (*t != ' ' && t>(s+25))				t--;			*t=0;			more=1;			}		else			more=0;		printf("%s%s\n",ln++ ? "     " : "   ", s);		if (rf!=NULL)			fprintf(rf, "%s\n", s);		s= ++t;		}}count(isent, nw, wds)	char *wds[], *isent;{int saw[50], ct;char sb[512], *s sb;int i, c;for(i=1; i<nw; i++)	saw[i]=0;while (c = *isent++)	{	*s++ = isupper(c) ? tolower(c) : c;	}*s=0;s=sb;while (*s++)	{	if (s[-1]!=' ') continue;	for(i=1; i<nw; i++)		{		if (saw[i])continue;		if (prefix(wds[i], s))			saw[i]=1;		}	}ct=0;for(i=1; i<nw; i++)	if (saw[i])		ct++;return(ct);}lcase(s)	char *s;{	register int c;for(; c= *s; s++)	{	if (isupper(c))		*s= tolower(c);	}}update( ns, line, kov)	char *line;{/* see if sentence array should be updated */int lval 100; char *ob;struct sf *sp, *least NULL;if (kov<=0) return (ns) ; /* no*/if (ns<NS)	{	sp=sents+ns;	strcpy (sp->text = stext[ns], line);	sp->olap = kov;	return(ns+1);	}for(sp=sents+ns-1; sp>=sents; sp--)	{	if (sp->olap < lval)		{		least = sp;		lval = sp->olap;		}	}if (kov <= lval) return(ns);ob = least->text;while (++least < sents+NS)	{	(least-1)->text = least->text;	(least-1)->olap = least->olap;	}sp = sents+NS-1;strcpy (sp->text=ob, line);sp->olap = kov;return(NS);}

⌨️ 快捷键说明

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