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

📄 refer2.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
# include "refer..c"extern FILE *in;# define NFLD 30# define TLEN 400char one[ANSLEN];int onelen ANSLEN;static char dr [100] "";doref(firline)	char *firline;{char buff[QLEN], dbuff[3*QLEN], answer[ANSLEN], temp[TLEN];char line[LLINE];char *p, **sr, *flds[NFLD], *r;int nf, nr, alph, query 0, chp, digs;/* get query */buff[0] = dbuff[0] = 0;while (input(line))	{	if (prefix(".]", line))		break;	if (control(line[0])) query=1;	strcat (query  ? dbuff: buff, line);	if (strlen(buff)>QLEN)		err("buff too big (%d)", strlen(buff));	assert (strlen(dbuff) <3*QLEN);	}if (strcmp (buff, "$LIST$\n")==0)	{# if D1fprintf(stderr, "dump sorted list\n");# endif	assert ( dbuff[0]==0);	dumpold();	return;	}answer[0] = 0;# ifdef D1	fprintf(stderr, "query is %s\n",buff);# endiffor( p=buff; *p; p++)	{	if (isupper(*p)) *p |= 040;	}alph = digs =0;for(p=buff; *p; p++)	{	if (isalpha(chp = *p)) alph++;	else	if (isdigit(*p)) digs++;	else		{		*p=0;		if ( (alph+digs<3) || common(p-alph))			{			r = p-alph;			while (r < p)				*r++ = ' ';			}		if ( alph==0 && digs >0)			{			r = p-digs;# if D1fprintf(stderr, "number, %d long, text is %s\n",digs,r);# endif			if (digs != 4 || (atoi(r)/100 != 19))				{				while (r<p)					*r++ = ' ';				}			}		*p=' ';		alph = digs = 0;		}	}# ifdef D1	fprintf(stderr, "query translated to %s\n", buff);# endifone[0]=0;if (buff[0]) /* do not search if no query */for( sr= data; sr < search; sr++)	{# ifdef D1	fprintf(stderr, "now searching %s\n", *sr);# endif	temp[0]=0;	corout (buff, temp, "hunt", *sr, TLEN);	assert (strlen(temp)<TLEN);	if (strlen(temp)+strlen(answer)>LLINE)		err("Accumulated answers too large",0);	strcat (answer, temp);	if (strlen(answer)>LLINE)		err("answer too long (%d)", strlen(answer));	if (newline(answer) > 0) break;	}# if D1fprintf(stderr, "answer:\n%s****\n", answer);# endifassert (strlen(one)<ANSLEN);assert (strlen(answer)<ANSLEN);if (buff[0])switch (newline(answer))	{	case 0:		fprintf (stderr, "No such paper %s\n", buff);		return;	default:		fprintf(stderr, "too many hits for '%s'\n", trimnl(buff));		choices(answer);		p = buff;		while (*p != '\n') p++;		*++p=0;	case 1:# ifdef D1	fprintf(stderr, "found one\n");# endif		if (endpush)			if (nr = chkdup(answer))				{				if (bare<2)					putsig (0, flds, nr, firline, line);				return;				}# if D1		fprintf(stderr, "one[0] was %o\n",one[0]);# endif		if (one[0]==0)			corout (answer, one, "deliv", dr, QLEN);# if D1		fprintf(stderr, "one now %o\n",one[0]);# endif		break;	}assert (strlen(buff)<QLEN);assert (strlen(one)<ANSLEN);nf = tabs(flds, one);nf += tabs(flds+nf, dbuff);# if D1fprintf(stderr, "one %.20s dbuff %.20s nf %d\n",one,dbuff, nf);# endifassert (nf < NFLD);refnum++;if (sort) putkey (nf, flds, refnum, keystr);if (bare<2)	putsig (nf, flds, refnum, firline, line);else	flout();# if D1fprintf(stderr, "put signal\n");# endifputref (nf, flds);# if D1fprintf(stderr, "put ref\n");# endif}newline(s)	char *s;{int k 0, c;while (c = *s++)	if (c == '\n')		k++;return(k);}choices( buff )	char *buff;{char ob[LLINE], *p, *r, *q, *t;int nl;for(r=p= buff; *p; p++)	{	if (*p == '\n')		{		*p++ = 0;			{			corout (r, ob, "deliv", dr, LLINE);			nl = 1;			for( q=ob; *q; q++)				{				if (nl && (q[0] == '.' || q[0] == '%') && q[1] == 'T')					{					q += 3;					for (t=q; *t && *t != '\n'; t++);					*t = 0;					fprintf(stderr, "%.70s\n", q);					q=0; break;					}				nl = *q == '\n';				}			if (q)				fprintf(stderr, "??? at %s\n",r);			}		r=p;		}	}}control(c)	{	if (c=='.') return(1);	if (c=='%') return(1);	return(0);	}

⌨️ 快捷键说明

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