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

📄 refer5.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
# include "refer..c"# define SAME 0# define NFLAB 2000# define NLABC 100static char sig[NLABC];static char bflab[NFLAB];static char *labtab[NLABC];static char *lbp bflab;static char labc[NLABC];static char stbuff[50];static int  prevsig;putsig (nf, flds, nref, nstline, endline)	char *flds[], *nstline, *endline;{/* choose signal style */char t[100], t1[100], t2[100], format[10], *sd;int another 0;int addon;char *stline;static FILE *fhide 0;if (labels)	{	if (nf==0) /* old */		sprintf(t, "%s%c", labtab[nref], labc[nref]);	else		{		*t=0;		if (keywant)			sprintf(t, "%s", fpar(nf, flds, t1, keywant, 1, 0));		if (t[0]==0)			{			sprintf(format, nmlen>0 ? "%%.%ds%%s" : "%%s%%s", nmlen);			/* format is %s%s for default labels or %.3s%s eg if wanted */			sd = fpar(nf, flds, t2, 'D', 1, 0);			if (dtlen>0)				{				char *sdb;				for(sdb=sd; *sd; sd++);				sd = sd-dtlen;				if (sd<sdb) sd=sdb;				}			sprintf(t, format, fpar(nf, flds, t1, 'A', 1, 0), sd);			}		if (keywant)			{			addon=0;			for(sd=t; *sd; sd++);			if (*--sd == '-')				{				addon=1;				*sd=0;				}			}		if (!keywant || addon)			addch( t, keylet(t, nref));		}	}else 	{	if (sort)		sprintf(t, "%c%d%c", FLAG, nref, FLAG);	else		sprintf(t, "%d", nref);	}another = prefix (".[", sd=lookat());if (another && (strcmp(".[\n", sd) != SAME))	fprintf(stderr, "File %s, line %d- punctuation ignored from: %s", Ifile, Iline, sd);strcat (sig, t);# if D1fprintf(stderr, "sig is now %s leng %d\n",sig,strlen(sig));# endiftrimnl(nstline);trimnl(endline);stline=stbuff;if (prevsig==0)	{	strcpy (stline, nstline);	prevsig=1;	}if (stline[2] || endline[2])	{	stline += 2;	endline += 2;	}else	{	stline  = "\\*([.";	endline = "\\*(.]";	}if (bare==0)	{	if (another==0)		{		sprintf(t1, "%s%s\%s\n", stline, sig, endline);		append(t1);		flout();		sig[0]=0;		prevsig=0;		if (fo == fhide)			{			int ch;			fclose(fhide); fhide= fopen(hidenam, "r");			fo= ftemp;			while ((ch = getc(fhide)) != EOF)				putc(ch, fo);			fclose(fhide);			unlink(hidenam);			}		}	else		{		strcat (sig, ",\\|");		/* hide if need be */		if (fo == ftemp)			{			sprintf(hidenam, "/tmp/rj%dc", getpid());# if D1fprintf(stderr, "hiding in %s\n", hidenam);# endif			fhide= fopen(hidenam, "w");			if (fhide==NULL) err("Can't get scratch file %s", hidenam);			fo = fhide;			}		}	}if (bare<2)	if (nf>0) fprintf(fo,".ds [F %s%c",t,sep);if (bare>0)	flout();# if D1fprintf(stderr, "sig is now %s\n",sig);# endif}fpar (nf, flds, out, c, seq, prepend)	char *flds[], *out;{char *p, *s;int i, fnd 0;for(i=0; i<nf; i++)	if (flds[i][1]==c && ++fnd >= seq)		{		if (c=='T' || c == 'J') /* for titles use first word otherwise last */			{			p=flds[i]+3;			if (prefix("A ", p)) p +=2;			if (prefix("An ", p)) p +=3;			if (prefix("The ", p)) p+= 4;			mycpy2(out, p, 20);			return(out);			}		for(s=p= flds[i]+2; *p; p++);		while (p>s && *p != ' ') p--;		/* special wart for authors */		if (c=='A' && (p[-1] == ',' || p[1] =='('))			{			p--;			while (p>s && *p != ' ') p--;			mycpy (out, p+1);			}		else			strcpy (out, p+1);		if (c=='A' && prepend)			initadd(out, flds[i]+2, p);		return(out);		}return(0);}putkey(nf, flds, nref, keystr)	char *flds[], *keystr;{char t1[50], *sf;int ctype, i, count;fprintf(fo, ".\\\"");if (nf <= 0)	fprintf(fo, "%s%c%c", labtab[nref], labc[nref], sep);else	{	while (ctype= *keystr++)		{		count = atoi(keystr);		if (*keystr=='+') count=999;		if (count<=0) count=1;		for(i=1; i<=count; i++)			{			sf= fpar(nf, flds, t1, ctype, i, 1);			if (sf==0)				break;			sf = artskp(sf);			fprintf(fo, "%s%c", sf, '-');			}		}	fprintf(fo, "%c%d%c%c", FLAG, nref, FLAG, sep);	}}keylet(t, nref)	char *t;{int i;int x 'a'-1;for(i=1; i<nref;i++)	{	if (strcmp(labtab[i], t) == 0)		x = labc[i];	}strcpy(labtab[nref]=lbp, t);while (*lbp++);if (lbp-bflab >NFLAB)	err("bflab overflow (%d)", NFLAB);if (nref >NLABC)	err ("nref in labc overflow (%d)", NLABC);# ifdef D1fprintf(stderr, "lbp up to %d of 2000\n", lbp-bflab);# endifreturn (labc[nref] = x+1);}mycpy(s,t)	char *s, *t;{while (*t && *t != ',' && *t != ' ')	*s++ = *t++;*s=0;}mycpy2 (s, t, n)	char *s, *t;{int c;while (n-- && (c= *t++)>0)	{	if (c==' ')c= '-';	*s++ = c;	}*s=0;}initadd(to, from, stop)	char *to, *from, *stop;{	int c, nalph 1;while (*to) to++;while (from<stop)	{	c = *from++;	if (!isalpha(c))		{		if (nalph)			*to++ = '.';		nalph=0;		continue;		}	if (nalph++ ==0)		*to++ = c;	}*to=0;}static char *articles[] {"the ", "an ", "a ", 0};artskp(s)	char *s;{/* skips over initial "a ", "an ", or "the " in s */	char **p, *r1, *r2;for(p=articles; *p; p++)	{	r2 = s;	for (r1= *p; ((*r1 ^ *r2) & ~040 ) == 0; r1++)		r2++;	if (*r1==0 && *r2 != 0)		return(r2);	}return(s);}

⌨️ 快捷键说明

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