titroff/ditroff (1.0) enhancements and fixes: part four

req at warwick.UUCP req at warwick.UUCP
Fri Nov 21 08:02:08 AEST 1986


#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	diffc
# This archive created: Thu Nov 20 21:50:05 1986
export PATH; PATH=/bin:$PATH
echo shar: extracting "'diffc'" '(49231 characters)'
if test -f 'diffc'
then
	echo shar: will not over-write existing file "'diffc'"
else
sed 's/^X//' << \SHAR_EOF > 'diffc'
Xdiff -rbc titroff/n5.c /distribution/dwb/text/troff.d/n5.c
X*** titroff/n5.c	Wed Nov 19 21:30:06 1986
X--- /distribution/dwb/text/troff.d/n5.c	Fri Sep  9 18:45:51 1983
X***************
X*** 1,3
X  #include "tdef.h"
X  #include <sgtty.h>
X  extern
X
X--- 1,4 -----
X+ /*      @(#)n5.c	1.1     */
X  #include "tdef.h"
X  #include <sgtty.h>
X  extern
X***************
X*** 46,56
X  	case '3': 
X  	case '5':
X  		admod = (i - '0') / 2;
X- #ifdef REPORTERRS
X- 		break;
X- 	default:
X- 		errmsg(EWARN, ".ad: Unknown adjust mode \"%s\"", tchartos(i));
X- #endif REPORTERRS
X  	}
X  }
X  
X
X--- 47,52 -----
X  	case '3': 
X  	case '5':
X  		admod = (i - '0') / 2;
X  	}
X  }
X  
X***************
X*** 146,154
X  	i = atoi();
X  	noscale = 0;
X  	if (nonumb)
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, ".hy: numeric argument expected assuming 1");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 142,147 -----
X  	i = atoi();
X  	noscale = 0;
X  	if (nonumb)
X  		return;
X  	hyf = max(i, 0);
X  }
X***************
X*** 150,159
X  	{
X  		errmsg(EWARN, ".hy: numeric argument expected assuming 1");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	hyf = max(i, 0);
X  }
X  
X
X--- 143,148 -----
X  	noscale = 0;
X  	if (nonumb)
X  		return;
X  	hyf = max(i, 0);
X  }
X  
X***************
X*** 285,298
X  
X  	skip();
X  	if ((i = vnumb(&pl)) == 0)
X- #ifdef PAPERSIZEREG
X- 	{
X- 		extern int paperlength, paperwidth;
X- 
X- 		pl = paperlength; /* from DESC */
X- 		/* this is swapped with paperwidth if the page gets rotated */
X- 	}
X- #else !PAPERSIZEREG
X  		pl = 11 * INCH; /*11in*/
X  #endif PAPERSIZEREG
X  	else 
X
X--- 274,279 -----
X  
X  	skip();
X  	if ((i = vnumb(&pl)) == 0)
X  		pl = 11 * INCH; /*11in*/
X  	else 
X  		pl = i;
X***************
X*** 294,300
X  	}
X  #else !PAPERSIZEREG
X  		pl = 11 * INCH; /*11in*/
X- #endif PAPERSIZEREG
X  	else 
X  		pl = i;
X  	if (v.nl > pl)
X
X--- 275,280 -----
X  	skip();
X  	if ((i = vnumb(&pl)) == 0)
X  		pl = 11 * INCH; /*11in*/
X  	else 
X  		pl = i;
X  	if (v.nl > pl)
X***************
X*** 310,318
X  	skip();
X  	i = vnumb((int *)0);
X  	if (nonumb)
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, ".wh: usage .wh nnn xx (can't find number nnn)");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 290,295 -----
X  	skip();
X  	i = vnumb((int *)0);
X  	if (nonumb)
X  		return;
X  	skip();
X  	j = getrq();
X***************
X*** 314,323
X  	{
X  		errmsg(EWARN, ".wh: usage .wh nnn xx (can't find number nnn)");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	skip();
X  	j = getrq();
X  	if ((k = findn(i)) != NTRAP) {
X
X--- 291,296 -----
X  	i = vnumb((int *)0);
X  	if (nonumb)
X  		return;
X  	skip();
X  	j = getrq();
X  	if ((k = findn(i)) != NTRAP) {
X***************
X*** 329,337
X  			break;
X  	if (k == NTRAP) {
X  		flusho();
X- #ifdef REPORTERRS
X- 		errmsg(EWARN, "more than %d traps -- too many", NTRAP - 1);
X- #else !REPORTERRS
X  		fprintf(stderr, "troff: cannot plant trap.\n");
X  #endif REPORTERRS
X  		return;
X
X--- 302,307 -----
X  			break;
X  	if (k == NTRAP) {
X  		flusho();
X  		fprintf(stderr, "troff: cannot plant trap.\n");
X  		return;
X  	}
X***************
X*** 333,339
X  		errmsg(EWARN, "more than %d traps -- too many", NTRAP - 1);
X  #else !REPORTERRS
X  		fprintf(stderr, "troff: cannot plant trap.\n");
X- #endif REPORTERRS
X  		return;
X  	}
X  	mlist[k] = j;
X
X--- 303,308 -----
X  	if (k == NTRAP) {
X  		flusho();
X  		fprintf(stderr, "troff: cannot plant trap.\n");
X  		return;
X  	}
X  	mlist[k] = j;
X***************
X*** 348,356
X  	lgf++;
X  	skip();
X  	if (!(j = getrq()))
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, ".ch: need a macro name and a place -- no name given");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 317,322 -----
X  	lgf++;
X  	skip();
X  	if (!(j = getrq()))
X  		return;
X  	else 
X  		for (k = 0; k < NTRAP; k++)
X***************
X*** 352,361
X  	{
X  		errmsg(EWARN, ".ch: need a macro name and a place -- no name given");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	else 
X  		for (k = 0; k < NTRAP; k++)
X  			if (mlist[k] == j)
X
X--- 318,323 -----
X  	skip();
X  	if (!(j = getrq()))
X  		return;
X  	else 
X  		for (k = 0; k < NTRAP; k++)
X  			if (mlist[k] == j)
X***************
X*** 361,369
X  			if (mlist[k] == j)
X  				break;
X  	if (k == NTRAP)
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, ".ch: Can't change unplanted macro \"%s\"", realname(j));
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 323,328 -----
X  			if (mlist[k] == j)
X  				break;
X  	if (k == NTRAP)
X  		return;
X  	skip();
X  	i = vnumb((int *)0);
X***************
X*** 365,374
X  	{
X  		errmsg(EWARN, ".ch: Can't change unplanted macro \"%s\"", realname(j));
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	skip();
X  	i = vnumb((int *)0);
X  	if (nonumb)
X
X--- 324,329 -----
X  				break;
X  	if (k == NTRAP)
X  		return;
X  	skip();
X  	i = vnumb((int *)0);
X  	if (nonumb)
X***************
X*** 401,411
X  		npn = i;
X  		npnflg++;
X  	}
X- #ifdef REPORTERRS
X- 	else {
X- 		errmsg(EWARN, "Call to .pn with non-numeric argument ignored");
X- 	}
X- #endif REPORTERRS
X  }
X  
X  
X
X--- 356,361 -----
X  		npn = i;
X  		npnflg++;
X  	}
X  }
X  
X  
X***************
X*** 434,443
X  int	x;
X  {
X  	register i;
X- #ifdef TCHARTOS
X- 	tchar	tmbuf[NTM];
X- 	extern char *tchartos();
X- #else !TCHARTOS
X  	char	tmbuf[NTM];
X  #endif TCHARTOS
X  
X
X--- 384,389 -----
X  int	x;
X  {
X  	register i;
X  	char	tmbuf[NTM];
X  
X  	lgf++;
X***************
X*** 439,445
X  	extern char *tchartos();
X  #else !TCHARTOS
X  	char	tmbuf[NTM];
X- #endif TCHARTOS
X  
X  	lgf++;
X  	copyf++;
X
X--- 385,390 -----
X  {
X  	register i;
X  	char	tmbuf[NTM];
X  
X  	lgf++;
X  	copyf++;
X***************
X*** 452,463
X  		tmbuf[i++] = '\n';
X  	tmbuf[i] = 0;
X  	flusho();
X- #ifdef TCHARTOS
X- 	for (i = 0; i < NTM -2 && tmbuf[i] && tmbuf[i] != '\n'; i++) {
X- 		fprintf(stderr, tchartos(tmbuf[i]));
X- 	}
X- 	fprintf(stderr, "\n");
X- #else !TCHARTOS
X  	fprintf(stderr, "%s", tmbuf);
X  #endif TCHARTOS
X  	copyf--;
X
X--- 397,402 -----
X  		tmbuf[i++] = '\n';
X  	tmbuf[i] = 0;
X  	flusho();
X  	fprintf(stderr, "%s", tmbuf);
X  	copyf--;
X  }
X***************
X*** 459,465
X  	fprintf(stderr, "\n");
X  #else !TCHARTOS
X  	fprintf(stderr, "%s", tmbuf);
X- #endif TCHARTOS
X  	copyf--;
X  }
X  
X
X--- 398,403 -----
X  	tmbuf[i] = 0;
X  	flusho();
X  	fprintf(stderr, "%s", tmbuf);
X  	copyf--;
X  }
X  
X***************
X*** 539,547
X  	if (skip()) {
X  e0:
X  		if (evi == 0)
X- #ifdef REPORTERRS
X- 		{
X- 			errmsg(EWARN, ".ev at outermost level ignored");
X  			return;
X  		}
X  #else !REPORTERRS
X
X--- 477,482 -----
X  	if (skip()) {
X  e0:
X  		if (evi == 0)
X  			return;
X  		nxev =  evlist[--evi];
X  		goto e1;
X***************
X*** 543,552
X  		{
X  			errmsg(EWARN, ".ev at outermost level ignored");
X  			return;
X- 		}
X- #else !REPORTERRS
X- 			return;
X- #endif REPORTERRS
X  		nxev =  evlist[--evi];
X  		goto e1;
X  	}
X
X--- 478,483 -----
X  e0:
X  		if (evi == 0)
X  			return;
X  		nxev =  evlist[--evi];
X  		goto e1;
X  	}
X***************
X*** 556,582
X  	if (nonumb)
X  		goto e0;
X  	flushi();
X- #ifdef REPORTERRS
X- 	if (nxev >= NEV) {
X- 		flusho();
X- 		errmsg(error? done2 : edone, 040,
X- 				".ev %d: largest number allowed is %d",
X- 						nxev, NEV - 1);
X- 		return;
X- 	} else if (nxev < 0) {
X- 		flusho();
X- 		errmsg(error? done2 : edone, 040,
X- 				".ev %d: number must be in range 0-%d",
X- 						nxev, NEV - 1);
X- 		return;
X- 	} else if (evi >= EVLSZ) {
X- 		flusho();
X- 		errmsg(error? done2 : edone, 040,
X- 				".ev %d: Environments nested deeper than %d levels",
X- 						nxev, EVLSZ - 1);
X- 		return;
X- 	}
X- #else !REPORTERRS
X  	if ((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)) {
X  		flusho();
X  		fprintf(stderr, "troff: cannot do ev.\n");
X
X--- 487,492 -----
X  	if (nonumb)
X  		goto e0;
X  	flushi();
X  	if ((nxev >= NEV) || (nxev < 0) || (evi >= EVLSZ)) {
X  		flusho();
X  		fprintf(stderr, "troff: cannot do ev.\n");
X***************
X*** 586,592
X  			edone(040);
X  		return;
X  	}
X- #endif REPORTERRS
X  	evlist[evi++] = ev;
X  e1:
X  	if (ev == nxev)
X
X--- 496,501 -----
X  			edone(040);
X  		return;
X  	}
X  	evlist[evi++] = ev;
X  e1:
X  	if (ev == nxev)
X***************
X*** 604,612
X  	if (--ifx < 0) {
X  		ifx = 0;
X  		iflist[0] = 0;
X- #ifdef REPORTERRS
X- 		errmsg(EWARN, ".el without matching .if ignored");
X- #endif REPORTERRS
X  	}
X  	caseif(2);
X  }
X
X--- 513,518 -----
X  	if (--ifx < 0) {
X  		ifx = 0;
X  		iflist[0] = 0;
X  	}
X  	caseif(2);
X  }
X***************
X*** 615,625
X  caseie()
X  {
X  	if (ifx >= NIF) {
X- #ifdef REPORTERRS
X- 		ifx = 0;
X- 		errmsg(edone, 040, ".ie: if-else nested deeper than %d pairs",
X- 								    NIF - 1);
X- #else !REPORTERRS
X  		fprintf(stderr, "troff: if-else overflow.\n");
X  #endif REPORTERRS
X  	}
X
X--- 521,526 -----
X  caseie()
X  {
X  	if (ifx >= NIF) {
X  		fprintf(stderr, "troff: if-else overflow.\n");
X  		ifx = 0;
X  		edone(040);
X***************
X*** 621,627
X  								    NIF - 1);
X  #else !REPORTERRS
X  		fprintf(stderr, "troff: if-else overflow.\n");
X! #endif REPORTERRS
X  	}
X  	caseif(1);
X  	ifx++;
X
X--- 522,529 -----
X  {
X  	if (ifx >= NIF) {
X  		fprintf(stderr, "troff: if-else overflow.\n");
X! 		ifx = 0;
X! 		edone(040);
X  	}
X  	caseif(1);
X  	ifx++;
X***************
X*** 641,652
X  		goto i1;
X  	}
X  	true = 0;
X- #ifdef REPORTERRS
X- 	if (skip()) {
X- 		errmsg(EWARN, ".i%c without test ignored",
X- 				(x == 0) ? 'f' : ((x < 2) ? 'e' : 'l') );
X- 	}
X- #else !REPORTERRS
X  	skip();
X  #endif REPORTERRS
X  	if ((cbits(i = getch())) == '!') {
X
X--- 543,548 -----
X  		goto i1;
X  	}
X  	true = 0;
X  	skip();
X  	if ((cbits(i = getch())) == '!') {
X  		notflag = 1;
X***************
X*** 648,654
X  	}
X  #else !REPORTERRS
X  	skip();
X- #endif REPORTERRS
X  	if ((cbits(i = getch())) == '!') {
X  		notflag = 1;
X  	} else {
X
X--- 544,549 -----
X  	}
X  	true = 0;
X  	skip();
X  	if ((cbits(i = getch())) == '!') {
X  		notflag = 1;
X  	} else {
X***************
X*** 655,674
X  		notflag = 0;
X  		ch = i;
X  	}
X- #ifdef REPORTERRS
X- 	/* atoi will moan if we give it something that's not an expression.
X- 	 * I'm not so sure it was a good idea giving atoi error checking!
X- 	 * Let's do a real kludge and have a gloval variable to turn off
X- 	 * error checking!
X- 	 * - req
X- 	 */
X- 	{
X- 		int save_errs = reporterrs;
X- 
X- 		reporterrs &= (~LERR_BADEXPSTART);
X- 		/* don't moan about leading garbage --
X- 		 * just assume there isn't an expression there
X- 		 */
X  		i = atoi();
X  		reporterrs = save_errs;
X  	}
X
X--- 550,555 -----
X  		notflag = 0;
X  		ch = i;
X  	}
X  	i = atoi();
X  	if (!nonumb) {
X  		if (i > 0)
X***************
X*** 670,680
X  		 * just assume there isn't an expression there
X  		 */
X  		i = atoi();
X- 		reporterrs = save_errs;
X- 	}
X- #else !REPORTERRS
X- 	i = atoi();
X- #endif REPORTERRS
X  	if (!nonumb) {
X  		if (i > 0)
X  			true++;
X
X--- 551,556 -----
X  		ch = i;
X  	}
X  	i = atoi();
X  	if (!nonumb) {
X  		if (i > 0)
X  			true++;
X***************
X*** 702,743
X  #endif
X  	case ' ':
X  		break;
X- #ifdef TESTFILES
X- 	case 'r':	/* true if file is readable */
X- 	{
X- 		int c;
X- 		char filename[NS];
X- 
X- 		if (skip()) {
X- errmsg(EWARN, ".i%c r: newline unexpected", x == 0 ? 'f' : 'e');
X- 			break;
X- 		}
X- 		for (i = 0; i < NS - 1; i++) {
X- 			int oldlgf = lgf;
X- 
X- 			/* I'm not sure what the 0176 is, but the others use
X- 			 * it too...
X- 			 * probably EOF.
X- 			 * - req
X- 			 */
X- 			lgf++;
X- 			if ((c = cbits(getch())) <= ' ' || c > 0176 ||
X- 						c == '\n' || nlflg) {
X- 				break;
X- 			} else {
X- 				filename[i] = c;
X- 			}
X- 		}
X- 		filename[i] = '\0';
X- 		if (c == '\n') {
X- 			errmsg(EWARN, ".i%c r \"%s\": newline unexpected", x == 0 ? 'f' : 'e', filename);
X- 		} else {
X- 			ch = c;
X- 		}
X- 		true = (access(filename, 4) >= 0);
X- 	}
X- 	break;
X- #endif TESTFILES
X  	default:
X  		true = cmpstr(i);
X  	}
X
X--- 578,583 -----
X  #endif
X  	case ' ':
X  		break;
X  	default:
X  		true = cmpstr(i);
X  	}
X***************
X*** 810,820
X  	if (ismot(c))
X  		return(0);
X  	delim = cbits(c);
X- #ifdef REPORTERRS
X- 	if (isvmot(delim)) {
X- 		errmsg(EWARN, "String delimiter is a vertical motion!");
X- 	}
X- #endif REPORTERRS
X  	if (dip != d)
X  		wbfl();
X  	if ((offset = begin = alloc()) == (filep)0)
X
X--- 650,655 -----
X  	if (ismot(c))
X  		return(0);
X  	delim = cbits(c);
X  	if (dip != d)
X  		wbfl();
X  	if ((offset = begin = alloc()) == (filep)0)
X***************
X*** 832,842
X  		wbf(i);
X  		cnt++;
X  	}
X- #ifdef REPORTERRS
X- 	if (j != delim) {
X- 		errmsg(EWARN, "Unexpected newline in conditional test");
X- 	}
X- #endif REPORTERRS
X  	wbt((tchar)0);
X  	k = !cnt;
X  	if (nlflg)
X
X--- 667,672 -----
X  		wbf(i);
X  		cnt++;
X  	}
X  	wbt((tchar)0);
X  	k = !cnt;
X  	if (nlflg)
X***************
X*** 853,863
X  	pinchar = inchar;	/* XXX */
X  	while ((j = cbits(i = getch())) != delim && j != '\n') {
X  		if (rbf0(p) != i) {
X- #ifdef REPORTERRS
X- 			if (eat(delim) != delim) {
X- 				errmsg(EWARN, "No closing delim \"%s\" for string test", tchartos(delim));
X- 			}
X- #else !REPORTERRS
X  			eat(delim);
X  #endif REPORTERRS
X  			k = 0;
X
X--- 683,688 -----
X  	pinchar = inchar;	/* XXX */
X  	while ((j = cbits(i = getch())) != delim && j != '\n') {
X  		if (rbf0(p) != i) {
X  			eat(delim);
X  			k = 0;
X  			break;
X***************
X*** 859,865
X  			}
X  #else !REPORTERRS
X  			eat(delim);
X- #endif REPORTERRS
X  			k = 0;
X  			break;
X  		}
X
X--- 684,689 -----
X  	while ((j = cbits(i = getch())) != delim && j != '\n') {
X  		if (rbf0(p) != i) {
X  			eat(delim);
X  			k = 0;
X  			break;
X  		}
X***************
X*** 866,876
X  		p = incoff(p);
X  		k = !(--cnt);
X  	}
X- #ifdef REPORTERRS
X- 	if (j == '\n') {
X- 		errmsg(EWARN, "Newline unexpected after string test");
X- 	}
X- #endif REPORTERRS
X  rtn:
X  	apts = savapts;
X  	apts1 = savapts1;
X
X--- 690,695 -----
X  		p = incoff(p);
X  		k = !(--cnt);
X  	}
X  rtn:
X  	apts = savapts;
X  	apts1 = savapts1;
X***************
X*** 954,963
X  	for (i = 0; ((i < (NTAB - 1)) && !nonumb); i++) {
X  		if (skip())
X  			break;
X- #ifdef ALIGNFIXES
X- 		tabtab[i] = tabtab[max(i-1, 0)] & TMASK;
X- 		tabtab[i] = max(hnumb(&tabtab[i]), 0) & TMASK;
X- #else !ALIGNFIXES
X  		tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TMASK;
X  #endif ALIGNFIXES
X  		if (!nonumb) 
X
X--- 773,778 -----
X  	for (i = 0; ((i < (NTAB - 1)) && !nonumb); i++) {
X  		if (skip())
X  			break;
X  		tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TMASK;
X  		if (!nonumb) 
X  			switch (cbits(ch)) {
X***************
X*** 959,965
X  		tabtab[i] = max(hnumb(&tabtab[i]), 0) & TMASK;
X  #else !ALIGNFIXES
X  		tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TMASK;
X- #endif ALIGNFIXES
X  		if (!nonumb) 
X  			switch (cbits(ch)) {
X  			case 'C':
X
X--- 774,779 -----
X  		if (skip())
X  			break;
X  		tabtab[i] = max(hnumb(&tabtab[max(i-1,0)]), 0) & TMASK;
X  		if (!nonumb) 
X  			switch (cbits(ch)) {
X  			case 'C':
X***************
X*** 968,976
X  			case 'R':
X  				tabtab[i] |= RTAB;
X  				break;
X- #ifdef COMMENT
X- 			/* no error checking here.  Probably not a problem */
X- #endif COMMENT
X  			default: /*includes L*/
X  #ifdef REPORTERRS
X  				if (cbits(ch) != 'L' && cbits(ch) != ' ' &&
X
X--- 782,787 -----
X  			case 'R':
X  				tabtab[i] |= RTAB;
X  				break;
X  			default: /*includes L*/
X  				break;
X  			}
X***************
X*** 972,983
X  			/* no error checking here.  Probably not a problem */
X  #endif COMMENT
X  			default: /*includes L*/
X- #ifdef REPORTERRS
X- 				if (cbits(ch) != 'L' && cbits(ch) != ' ' &&
X- 				    cbits(ch) != '\t' && cbits(ch) != '\n') {
X- 					errmsg(EWARN, ".ta: tab suffix \"%s\" not L, R or C; using L", tchartos(ch));
X- 				}
X- #endif REPORTERRS
X  				break;
X  			}
X  		nonumb = ch = 0;
X
X--- 783,788 -----
X  				tabtab[i] |= RTAB;
X  				break;
X  			default: /*includes L*/
X  				break;
X  			}
X  		nonumb = ch = 0;
X***************
X*** 986,997
X  }
X  
X  
X- #ifdef COMMENT
X- /* note that for .ne to work in an intuitive way, there must be a .br before
X-  * it!!!
X-  * - req
X-  */
X- #endif COMMENT
X  casene()
X  {
X  	register i, j;
X
X--- 791,796 -----
X  }
X  
X  
X  casene()
X  {
X  	register i, j;
X***************
X*** 1010,1035
X  }
X  
X  
X- #ifdef COMMENT
X- /* lines like
X-  * 'trouble in the outer hebrides' was....
X-  * cause so many problems that it'd be nice to be able to spot them.
X-  *
X-  * A better approach to .tr would be to have a read-only string that
X-  * contained the current trtab[].  Then .tr \*(xx would be useful.
X-  * There is no way to turn off all translations, except one-at-a-time.
X-  * The s & f bits (see tdef.h or BWK's titroff paper) are not stored, so
X-  * you can't do useful things like
X-  * .tr *\s+2*
X-  * to make all stars come out bigger, or
X-  * .tr *\f(ma*
X-  * to use the * from font "ma" instead.  Really this would be introducing
X-  * single-character macros, though.  User defined fonts sound a better way
X-  * of doing this to me.
X-  *
X-  * - req
X-  */
X- #endif COMMENT
X  casetr()
X  {
X  	register i, j;
X
X--- 809,814 -----
X  }
X  
X  
X  casetr()
X  {
X  	register i, j;
X***************
X*** 1036,1046
X  	tchar k;
X  
X  	lgf++;
X- #ifdef REPORTERRS
X- 	if (skip()) {
X- 		errmsg(EWARN, ".tr with no arguments ignored");
X- 	}
X- #else !REPORTERRS
X  	skip();
X  #endif REPORTERRS
X  	while ((i = cbits(k=getch())) != '\n') {
X
X--- 815,820 -----
X  	tchar k;
X  
X  	lgf++;
X  	skip();
X  	while ((i = cbits(k=getch())) != '\n') {
X  		if (ismot(k))
X***************
X*** 1042,1048
X  	}
X  #else !REPORTERRS
X  	skip();
X- #endif REPORTERRS
X  	while ((i = cbits(k=getch())) != '\n') {
X  		if (ismot(k))
X  			return;
X
X--- 816,821 -----
X  
X  	lgf++;
X  	skip();
X  	while ((i = cbits(k=getch())) != '\n') {
X  		if (ismot(k))
X  			return;
X***************
X*** 1103,1111
X  }
X  
X  
X- #ifdef COMMENT
X- /* note -- there can only be one active input trap -- req */
X- #endif COMMENT
X  caseit()
X  {
X  	register i;
X
X--- 876,881 -----
X  }
X  
X  
X  caseit()
X  {
X  	register i;
X***************
X*** 1122,1133
X  }
X  
X  
X- #ifdef COMMENT
X- /* BUG: interaction between .nm (line number mode) and .mc (margin character)
X-  * whereby the margin character is indented wrongly on numbered lines!
X-  * - req
X-  */
X- #endif COMMENT
X  casemc()
X  {
X  	register i;
X
X--- 892,897 -----
X  }
X  
X  
X  casemc()
X  {
X  	register i;
X***************
X*** 1139,1165
X  		return;
X  	ic = getch();
X  	icf = 1;
X- #ifdef COMMENT
X- 	/* what should we do with ".mc xxx 4"?
X- 	 * it's an error, or we could allow a margin-string...
X- 	 * Let's be lazy.
X- 	 * -- req
X- 	 */
X- #endif COMMENT
X- #ifdef REPORTERRS
X- 	i = 0;
X- 	if (skip()) {	/* use old ics if nonumb */
X- 		return;
X- 	}
X- 	i = hnumb((int *) 0);
X- 	if (nonumb) {
X- 		errmsg(EWARN, ".mc: 2nd argument should be numeric");
X- 	} else if (i < 0) {
X- 		errmsg(EWARN, ".mc: offset N should be positive");
X- 	} else {
X- 		ics = i;
X- 	}
X- #else !REPORTERRS
X  	skip();
X  	i = max(hnumb((int *)0), 0);
X  	if (!nonumb)
X
X--- 903,908 -----
X  		return;
X  	ic = getch();
X  	icf = 1;
X  	skip();
X  	i = max(hnumb((int *)0), 0);
X  	if (!nonumb)
X***************
X*** 1164,1170
X  	i = max(hnumb((int *)0), 0);
X  	if (!nonumb)
X  		ics = i;
X- #endif REPORTERRS
X  }
X  
X  
X
X--- 907,912 -----
X  	i = max(hnumb((int *)0), 0);
X  	if (!nonumb)
X  		ics = i;
X  }
X  
X  
X***************
X*** 1181,1189
X  		return;
X  	}
X  	if ((i = getrq()) == 0)
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, ".mk: 2nd argument must be a macro-name");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 923,928 -----
X  		return;
X  	}
X  	if ((i = getrq()) == 0)
X  		return;
X  	vlist[findr(i)] = j;
X  }
X***************
X*** 1185,1194
X  	{
X  		errmsg(EWARN, ".mk: 2nd argument must be a macro-name");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	vlist[findr(i)] = j;
X  }
X  
X
X--- 924,929 -----
X  	}
X  	if ((i = getrq()) == 0)
X  		return;
X  	vlist[findr(i)] = j;
X  }
X  
X***************
X*** 1199,1207
X  
X  	skip();
X  	if ((i = vnumb((int *)0)) < 0)
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, ".sv request for negative (%d) space ignored", i);
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 934,939 -----
X  
X  	skip();
X  	if ((i = vnumb((int *)0)) < 0)
X  		return;
X  	if (nonumb)
X  		i = 1;
X***************
X*** 1203,1212
X  	{
X  		errmsg(EWARN, ".sv request for negative (%d) space ignored", i);
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	if (nonumb)
X  		i = 1;
X  	sv += i;
X
X--- 935,940 -----
X  	skip();
X  	if ((i = vnumb((int *)0)) < 0)
X  		return;
X  	if (nonumb)
X  		i = 1;
X  	sv += i;
X***************
X*** 1228,1246
X  }
X  
X  
X- #ifdef COMMENT
X- /* .nm +-N M S I -- line number mode: next line numbered N (+0 to continue)
X-  * Defaults: M = 1, number-text sepapation S = 1, line-number Indent I = 0
X-  * M > 1 prints only linenumbers that are multiples of M.
X-  *
X-  * Creaping featurism really -- it could probably be done with traps.
X-  *
X-  * Doing .af nl i
X-  * really ought to allow non-arabic line-numbers, I suppose.
X-  *
X-  * -req
X-  */
X- #endif COMMENT
X  casenm()
X  {
X  	register i;
X
X--- 956,961 -----
X  }
X  
X  
X  casenm()
X  {
X  	register i;
XOnly in titroff: n6.c
Xdiff -rbc titroff/n7.c /distribution/dwb/text/troff.d/n7.c
X*** titroff/n7.c	Mon Nov  3 14:27:47 1986
X--- /distribution/dwb/text/troff.d/n7.c	Fri Sep  9 18:46:01 1983
X***************
X*** 1,3
X  #include "tdef.h"
X  extern
X  #include "d.h"
X
X--- 1,4 -----
X+ /*	@(#)n7.c	1.3	*/
X  #include "tdef.h"
X  extern
X  #include "d.h"
X***************
X*** 54,62
X  	if (dip == d)
X  		horiz(po);
X  #endif
X- #ifdef COMMENT
X- 	/* put out line numbers */
X- #endif COMMENT
X  	if (lnmod)
X  		donum();
X  	lastl = ne;
X
X--- 55,60 -----
X  	if (dip == d)
X  		horiz(po);
X  #endif
X  	if (lnmod)
X  		donum();
X  	lastl = ne;
X***************
X*** 126,140
X  			nc--;
X  		}
X  	}
X- #ifdef COMMENT
X- 	/* Margin Character is ic [sic].
X- 	 * BUG: if we have numbered this line, there's a horizontal
X- 	 * offset error!
X- 	 * Look at donum().
X- 	 *
X- 	 * req
X- 	 */
X- #endif COMMENT
X  	if (ic) {
X  		if ((k = ll - un - lastl + ics) > 0)
X  			horiz(k);
X
X--- 124,129 -----
X  			nc--;
X  		}
X  	}
X  	if (ic) {
X  		if ((k = ll - un - lastl + ics) > 0)
X  			horiz(k);
X***************
X*** 166,176
X  	extern pchar();
X  
X  	nrbits = nmbits;
X- #ifdef COMMENT
X- 	/* this all fails horribly if digits don't all have the same width!
X- 	 * - req
X- 	 */
X- #endif COMMENT
X  	nw = width('1' | nrbits);
X  	if (nn) {
X  		nn--;
X
X--- 155,160 -----
X  	extern pchar();
X  
X  	nrbits = nmbits;
X  	nw = width('1' | nrbits);
X  	if (nn) {
X  		nn--;
X***************
X*** 190,200
X  	horiz(nw * (ni + i));
X  	nform = 0;
X  	fnumb(v.ln, pchar);
X- #ifdef COMMENT
X- 	/* the next line screws up margin characters.
X- 	 * -req
X- 	 */
X- #endif COMMENT
X  	un += nw * nms;
X  	v.ln++;
X  }
X
X--- 174,179 -----
X  	horiz(nw * (ni + i));
X  	nform = 0;
X  	fnumb(v.ln, pchar);
X  	un += nw * nms;
X  	v.ln++;
X  }
X***************
X*** 204,221
X  {
X  	tchar i;
X  	static int	spcnt;
X- #ifdef BLANKSMACRO
X- 	static int	nlcnt;	/* no. of blank lines seen... */
X- 	/*  The idea is to call a macro set by .bm (default is sp) when
X- 	 * there's a line that starts with whitespace.
X- 	 * eg: 5 blank lines followed by
X- 	 * "   hello"
X- 	 * causes callblank(3, 5) because the 1st line with text on it
X- 	 * has 3 leading spaces & happens after 5 blank lines.
X- 	 *
X- 	 * - req
X- 	 */
X- #endif BLANKSMACRO
X  
X  	nflush++;
X  	if ((dip == d) && (v.nl == -1)) {
X
X--- 183,188 -----
X  {
X  	tchar i;
X  	static int	spcnt;
X  
X  	nflush++;
X  	if ((dip == d) && (v.nl == -1)) {
X***************
X*** 220,228
X  	nflush++;
X  	if ((dip == d) && (v.nl == -1)) {
X  		newline(1); 
X- #ifdef COMMENT
X- 		/* the first line of a new file */
X- #endif COMMENT
X  		return;
X  	}
X  	setnel();
X
X--- 187,192 -----
X  	nflush++;
X  	if ((dip == d) && (v.nl == -1)) {
X  		newline(1); 
X  		return;
X  	}
X  	setnel();
X***************
X*** 244,261
X  		spcnt++;
X  	if (nlflg) {
X  t1:
X- #ifdef BLANKSMACRO
X- 		/* call the .bl macro if lines start with  whitespace */
X- 		nlcnt++;
X- 		nflush = pendt = ch = 0;
X- 		if (spcnt) {
X- 			int x = spcnt, y = nlcnt;
X- 			spcnt = nlcnt = 0;	/* in case bm macro introduces
X- 						* a blank line */
X- 			callblank(x, y);
X- 		}
X- 		spcnt = 0;
X- #else !BLANKSMACRO
X  		nflush = pendt = ch = spcnt = 0;
X  		callsp();
X  #endif BLANKSMACRO
X
X--- 208,213 -----
X  		spcnt++;
X  	if (nlflg) {
X  t1:
X  		nflush = pendt = ch = spcnt = 0;
X  		callsp();
X  		return;
X***************
X*** 258,264
X  #else !BLANKSMACRO
X  		nflush = pendt = ch = spcnt = 0;
X  		callsp();
X- #endif BLANKSMACRO
X  		return;
X  	}
X  #ifdef BLANKSMACRO
X
X--- 210,215 -----
X  t1:
X  		nflush = pendt = ch = spcnt = 0;
X  		callsp();
X  		return;
X  	}
X  	ch = i;
X***************
X*** 261,278
X  #endif BLANKSMACRO
X  		return;
X  	}
X- #ifdef BLANKSMACRO
X- 	else {
X- 		if (nlcnt) {
X- 			int x = spcnt, y = nlcnt;
X- 
X- 			nflush = pendt = ch = 0;
X- 			nlcnt = spcnt = 0; /* in case bm macro introduces
X- 					    * a blank line */
X- 			callblank(x, y);
X- 		}
X- 	}
X- #endif BLANKSMACRO
X  	ch = i;
X  	if (spcnt) {
X  t2:
X
X--- 212,217 -----
X  		callsp();
X  		return;
X  	}
X  	ch = i;
X  	if (spcnt) {
X  t2:
X***************
X*** 403,411
X  	if (linep >= line + lnsize - 1) {
X  		if (!over) {
X  			flusho();
X- #ifdef REPORTERRS
X- 			errmsg(EWARN, "Internal error: Line overflow");
X- #else !REPORTERRS
X  			fprintf(stderr, "troff: Line overflow.\n");
X  #endif REPORTERRS
X  			over++;
X
X--- 342,347 -----
X  	if (linep >= line + lnsize - 1) {
X  		if (!over) {
X  			flusho();
X  			fprintf(stderr, "troff: Line overflow.\n");
X  			over++;
X  			c = LEFTHAND;
X***************
X*** 407,413
X  			errmsg(EWARN, "Internal error: Line overflow");
X  #else !REPORTERRS
X  			fprintf(stderr, "troff: Line overflow.\n");
X- #endif REPORTERRS
X  			over++;
X  			c = LEFTHAND;
X  			w = -1;
X
X--- 343,348 -----
X  		if (!over) {
X  			flusho();
X  			fprintf(stderr, "troff: Line overflow.\n");
X  			over++;
X  			c = LEFTHAND;
X  			w = -1;
X***************
X*** 517,525
X  	} else if ((i = findt(v.nl - nlss)) <= nlss) {
X  		if ((j = findn1(v.nl - nlss + i)) == NTRAP) {
X  			flusho();
X- #ifdef REPORTERRS
X- 			errmsg(done2, -5, "Internal error: Trap botch in __FILE__ at line __LINE__");
X- #else !REPORTERRS
X  			fprintf(stderr, "troff: Trap botch.\n");
X  			done2(-5);
X  #endif REPORTERRS
X
X--- 452,457 -----
X  	} else if ((i = findt(v.nl - nlss)) <= nlss) {
X  		if ((j = findn1(v.nl - nlss + i)) == NTRAP) {
X  			flusho();
X  			fprintf(stderr, "troff: Trap botch.\n");
X  			done2(-5);
X  		}
X***************
X*** 522,528
X  #else !REPORTERRS
X  			fprintf(stderr, "troff: Trap botch.\n");
X  			done2(-5);
X- #endif REPORTERRS
X  		}
X  		trap = control(mlist[j], 0);
X  	}
X
X--- 454,459 -----
X  			flusho();
X  			fprintf(stderr, "troff: Trap botch.\n");
X  			done2(-5);
X  		}
X  		trap = control(mlist[j], 0);
X  	}
X***************
X*** 805,812
X  	if (j != ' ') {
X  		if (j != '\n')
X  			goto g0;
X! 		j = cbits(*(wordp - 1));
X! 		if ((j == '.') ||  (j == '!') ||  (j == '?'))
X  			spflg++;
X  	}
X  	*wordp = 0;
X
X--- 736,747 -----
X  	if (j != ' ') {
X  		if (j != '\n')
X  			goto g0;
X! 		{ tchar *wp = wordp-1;
X! 		while (wp >= word) {
X! 			j = cbits(*wp--);
X! 			if (j=='"' || j=='\'' || j==')' ||j==']')
X! 				continue;
X! 			if (j == '.' || j == '!' || j == ':' || j == '?')
X  				spflg++;
X  			break;
X  		  }
X***************
X*** 808,813
X  		j = cbits(*(wordp - 1));
X  		if ((j == '.') ||  (j == '!') ||  (j == '?'))
X  			spflg++;
X  	}
X  	*wordp = 0;
X  rtn:
X
X--- 743,749 -----
X  				continue;
X  			if (j == '.' || j == '!' || j == ':' || j == '?')
X  				spflg++;
X+ 			break;
X  		  }
X  		}
X  	}
X***************
X*** 809,814
X  		if ((j == '.') ||  (j == '!') ||  (j == '?'))
X  			spflg++;
X  	}
X  	*wordp = 0;
X  rtn:
X  	wdstart = 0;
X
X--- 745,752 -----
X  				spflg++;
X  			break;
X  		  }
X+ 		}
X+ 	}
X  	*wordp = 0;
X  rtn:
X  	wdstart = 0;
X***************
X*** 828,836
X  	if (wordp >= &word[WDSIZE - 1]) {
X  		if (!over) {
X  			flusho();
X- #ifdef REPORTERRS
X- 			errmsg(EWARN, "Word overflow (word longer than %d chars)", WDSIZE - 1);
X- #else !REPORTERRS
X  			fprintf(stderr, "troff: Word overflow.\n");
X  #endif REPORTERRS
X  			over++;
X
X--- 766,771 -----
X  	if (wordp >= &word[WDSIZE - 1]) {
X  		if (!over) {
X  			flusho();
X  			fprintf(stderr, "troff: Word overflow.\n");
X  			over++;
X  			c = LEFTHAND;
X***************
X*** 832,838
X  			errmsg(EWARN, "Word overflow (word longer than %d chars)", WDSIZE - 1);
X  #else !REPORTERRS
X  			fprintf(stderr, "troff: Word overflow.\n");
X- #endif REPORTERRS
X  			over++;
X  			c = LEFTHAND;
X  			w = -1;
X
X--- 767,772 -----
X  		if (!over) {
X  			flusho();
X  			fprintf(stderr, "troff: Word overflow.\n");
X  			over++;
X  			c = LEFTHAND;
X  			w = -1;
Xdiff -rbc titroff/n8.c /distribution/dwb/text/troff.d/n8.c
X*** titroff/n8.c	Tue Nov 11 14:56:59 1986
X--- /distribution/dwb/text/troff.d/n8.c	Fri Sep  9 18:46:03 1983
X***************
X*** 1,3
X  #include	<ctype.h>
X  #include	"tdef.h"
X  #define	HY_BIT	0200	/* stuff in here only works for ascii */
X
X--- 1,4 -----
X+ /*      @(#)n8.c	1.1     */
X  #include	<ctype.h>
X  #include	"tdef.h"
X  #define	HY_BIT	0200	/* stuff in here only works for ascii */
X***************
X*** 122,130
X  	}
X  	return;
X  full:
X- #ifdef REPORTERRS
X- 	errmsg(EWARN, ".hw: exception word list full (%d bytes)", NHEX - 2);
X- #else !REPORTERRS
X  	fprintf(stderr, "troff: exception word list full.\n");
X  #endif REPORTERRS
X  	*nexth = 0;
X
X--- 123,128 -----
X  	}
X  	return;
X  full:
X  	fprintf(stderr, "troff: exception word list full.\n");
X  	*nexth = 0;
X  }
X***************
X*** 126,132
X  	errmsg(EWARN, ".hw: exception word list full (%d bytes)", NHEX - 2);
X  #else !REPORTERRS
X  	fprintf(stderr, "troff: exception word list full.\n");
X- #endif REPORTERRS
X  	*nexth = 0;
X  }
X  
X
X--- 124,129 -----
X  	return;
X  full:
X  	fprintf(stderr, "troff: exception word list full.\n");
X  	*nexth = 0;
X  }
X  
Xdiff -rbc titroff/n9.c /distribution/dwb/text/troff.d/n9.c
X*** titroff/n9.c	Tue Nov 11 15:01:18 1986
X--- /distribution/dwb/text/troff.d/n9.c	Fri Sep  9 18:46:08 1983
X***************
X*** 1,3
X  #include "tdef.h"
X  extern
X  #include "d.h"
X
X--- 1,4 -----
X+ /*      @(#)n9.c	1.1     */
X  #include "tdef.h"
X  extern
X  #include "d.h"
X***************
X*** 34,42
X  	int	w, cnt, delim, rem, temp;
X  
X  	if (ismot(c = getch()))
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, "\\l with unsuitable delimiter (vertical motion) ignored");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 35,40 -----
X  	int	w, cnt, delim, rem, temp;
X  
X  	if (ismot(c = getch()))
X  		return;
X  	delim = cbits(c);
X  	vflag = 0;
X***************
X*** 38,47
X  	{
X  		errmsg(EWARN, "\\l with unsuitable delimiter (vertical motion) ignored");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	delim = cbits(c);
X  	vflag = 0;
X  	dfact = EM;
X
X--- 36,41 -----
X  
X  	if (ismot(c = getch()))
X  		return;
X  	delim = cbits(c);
X  	vflag = 0;
X  	dfact = EM;
X***************
X*** 48,59
X  	length = quant(atoi(), HOR);
X  	dfact = 1;
X  	if (!length) {
X- #ifdef REPORTERRS
X- 		if (eat(delim) != delim) {
X- 			errmsg(EWARN, "\\l%s: zero length & no trailing delim",
X- 						tchartos(delim));
X- 		}
X- #else !REPORTERRS
X  		eat(delim);
X  #endif REPORTERRS
X  		return;
X
X--- 42,47 -----
X  	length = quant(atoi(), HOR);
X  	dfact = 1;
X  	if (!length) {
X  		eat(delim);
X  		return;
X  	}
X***************
X*** 55,61
X  		}
X  #else !REPORTERRS
X  		eat(delim);
X- #endif REPORTERRS
X  		return;
X  	}
X  s0:
X
X--- 43,48 -----
X  	dfact = 1;
X  	if (!length) {
X  		eat(delim);
X  		return;
X  	}
X  s0:
X***************
X*** 66,82
X  		goto s0;
X  	w = width(c);
X  	i = cbuf;
X- #ifdef ZEROLINES
X- 	if (w == 0) {
X- 		/* prevent zero-width char from causing a core dump! */
X- 		w = quant(EM, HOR);
X- #ifdef REPORTERRS
X- 		errmsg(EWARN, "\\l: zero-width character used to draw a line\n");
X- #else !REPORTERRS
X- 		fprintf(stderr,"troff: Warning: zero-width character used to draw a line\n");
X- #endif REPORTERRS
X- 	}
X- #endif ZEROLINES
X  	if (length < 0) {
X  		*i++ = makem(length);
X  		length = -length;
X
X--- 53,58 -----
X  		goto s0;
X  	w = width(c);
X  	i = cbuf;
X  	if (length < 0) {
X  		*i++ = makem(length);
X  		length = -length;
X***************
X*** 99,114
X  	}
X  s1:
X  	*i++ = 0;
X- #ifdef REPORTERRS
X- 	c = getch();
X- 	if (cbits(c) != delim) {
X- 		if (cbits(c) == '\n') {
X- 			errmsg(EWARN, "\\l: newline unexpected");
X- 		} else {
X- 			errmsg(EWARN, "\\l: delimiters different (\"%s\" and \"%s\")", tchartos(delim), tchartos(c));
X- 		}
X- 	}
X- #else !REPORTERRS
X  	eat(delim);
X  #endif REPORTERRS
X  	cp = cbuf;
X
X--- 75,80 -----
X  	}
X  s1:
X  	*i++ = 0;
X  	eat(delim);
X  	cp = cbuf;
X  }
X***************
X*** 110,116
X  	}
X  #else !REPORTERRS
X  	eat(delim);
X- #endif REPORTERRS
X  	cp = cbuf;
X  }
X  
X
X--- 76,81 -----
X  s1:
X  	*i++ = 0;
X  	eat(delim);
X  	cp = cbuf;
X  }
X  
X***************
X*** 133,141
X  	int	delim, w[NOV];
X  
X  	if (ismot(i = getch()))
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, "\\o: vertical motion unsuitable as delimiter");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 98,103 -----
X  	int	delim, w[NOV];
X  
X  	if (ismot(i = getch()))
X  		return;
X  	delim = cbits(i);
X  	for (k = 0; (k < NOV) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X***************
X*** 137,146
X  	{
X  		errmsg(EWARN, "\\o: vertical motion unsuitable as delimiter");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	delim = cbits(i);
X  #ifdef LONGOVFIX
X  	for (k = 0; (k < NOV - 1) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X
X--- 99,104 -----
X  
X  	if (ismot(i = getch()))
X  		return;
X  	delim = cbits(i);
X  	for (k = 0; (k < NOV) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X  		o[k] = i;
X***************
X*** 142,150
X  		return;
X  #endif REPORTERRS
X  	delim = cbits(i);
X- #ifdef LONGOVFIX
X- 	for (k = 0; (k < NOV - 1) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X- #else !LONGOVFIX
X  	for (k = 0; (k < NOV) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X  #endif LONGOVFIX
X  		o[k] = i;
X
X--- 100,105 -----
X  	if (ismot(i = getch()))
X  		return;
X  	delim = cbits(i);
X  	for (k = 0; (k < NOV) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X  		o[k] = i;
X  		w[k] = width(i);
X***************
X*** 146,152
X  	for (k = 0; (k < NOV - 1) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X  #else !LONGOVFIX
X  	for (k = 0; (k < NOV) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X- #endif LONGOVFIX
X  		o[k] = i;
X  		w[k] = width(i);
X  	}
X
X--- 101,106 -----
X  		return;
X  	delim = cbits(i);
X  	for (k = 0; (k < NOV) && ((j = cbits(i = getch())) != delim) &&  (j != '\n'); k++) {
X  		o[k] = i;
X  		w[k] = width(i);
X  	}
X***************
X*** 150,163
X  		o[k] = i;
X  		w[k] = width(i);
X  	}
X- #ifdef REPORTERRS
X- 	if (k >= NOV - 1) {
X- 		errmsg(EWARN, "\\o: overstrike longer than %d characters", NOV);
X- 	} else if (j == '\n') {
X- 		errmsg(EWARN,
X- 			"\\o: no trailing delimiter found to match \"%s\"", tchartos(delim));
X- 	}
X- #endif REPORTERRS
X  	o[k] = w[k] = 0;
X  	if (o[0])
X  		for (j = 1; j; ) {
X
X--- 104,109 -----
X  		o[k] = i;
X  		w[k] = width(i);
X  	}
X  	o[k] = w[k] = 0;
X  	if (o[0])
X  		for (j = 1; j; ) {
X***************
X*** 175,184
X  			}
X  		}
X  	else 
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, "Empty overstrike \"\\o%s%s\" ignored",
X- 					tchartos(delim), tchartos(delim));
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 121,126 -----
X  			}
X  		}
X  	else 
X  		return;
X  	p = cbuf;
X  	for (k = 0; o[k]; k++) {
X***************
X*** 180,189
X  		errmsg(EWARN, "Empty overstrike \"\\o%s%s\" ignored",
X  					tchartos(delim), tchartos(delim));
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	p = cbuf;
X  	for (k = 0; o[k]; k++) {
X  		*p++ = o[k];
X
X--- 122,127 -----
X  		}
X  	else 
X  		return;
X  	p = cbuf;
X  	for (k = 0; o[k]; k++) {
X  		*p++ = o[k];
X***************
X*** 202,210
X  	int	cnt, delim;
X  
X  	if (ismot(i = getch()))
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, "\\b: vertical motion unsuitable as delimiter");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 140,145 -----
X  	int	cnt, delim;
X  
X  	if (ismot(i = getch()))
X  		return;
X  	delim = cbits(i);
X  	j = cbuf + 1;
X***************
X*** 206,215
X  	{
X  		errmsg(EWARN, "\\b: vertical motion unsuitable as delimiter");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	delim = cbits(i);
X  	j = cbuf + 1;
X  	cnt = 0;
X
X--- 141,146 -----
X  
X  	if (ismot(i = getch()))
X  		return;
X  	delim = cbits(i);
X  	j = cbuf + 1;
X  	cnt = 0;
X***************
X*** 224,248
X  		*j++ = dwn;
X  		cnt++;
X  	}
X- #ifdef REPORTERRS
X- 	if (j > (cbuf + NC - 4)) {
X- 		errmsg(EWARN,
X- 			"Bracket (\\b) too long (truncated to %d characte",
X- 			cbuf + NC - 4);
X- 		while (((k = cbits(i = getch())) != delim) && (k != '\n')) {
X- 			/* throw away the rest... */
X- 			;
X- 		}
X- 	} 
X- 	if (k == '\n') {
X- 		errmsg(EWARN, "\\b: No delimiter found to match \"%s\"",
X- 						tchartos(delim));
X- 	} else if (--cnt < 0) {
X- 		errmsg(EWARN, "Empty bracket \"\\b%s%s\" ignored",
X- 				tchartos(delim), tchartos(delim));
X- 		return;
X- 	}
X- #else !REPORTERRS
X  	if (--cnt < 0)
X  		return;
X  #endif REPORTERRS
X
X--- 155,160 -----
X  		*j++ = dwn;
X  		cnt++;
X  	}
X  	if (--cnt < 0)
X  		return;
X  	else if (!cnt) {
X***************
X*** 245,251
X  #else !REPORTERRS
X  	if (--cnt < 0)
X  		return;
X- #endif REPORTERRS
X  	else if (!cnt) {
X  #ifdef ZBRACKFIX
X  		ch = *(j - 2) & ~ZBIT;
X
X--- 157,162 -----
X  	}
X  	if (--cnt < 0)
X  		return;
X  	else if (!cnt) {
X  		ch = *(j - 2);
X  		return;
X***************
X*** 247,269
X  		return;
X  #endif REPORTERRS
X  	else if (!cnt) {
X- #ifdef ZBRACKFIX
X- 		ch = *(j - 2) & ~ZBIT;
X- 		/* turn off the ZBIT (zero width) on single chars, or
X- 		 * there'd be a problem with \b'\zx', whereby the entire
X- 		 * bracket would have no space left for it.  Or maybe that's
X- 		 * how it *should* behave?  A \b with only 1 char seems an
X- 		 * odd thing to want anyway!
X- 		 *
X- 		 * Should we warn the user?  Probably not.  The only time
X- 		 * this is likely to happen involves machine-generated
X- 		 * troff input.
X- 		 *
X- 		 * What about \b'' --- should that be an error?!??
X- 		 *
X- 		 * -- req, after John Buck (trixie!polyof!john), 7/10/86
X- 		 */
X- #else !ZBRACKFIX
X  		ch = *(j - 2);
X  #endif ZBRACKFIX
X  		return;
X
X--- 158,163 -----
X  	if (--cnt < 0)
X  		return;
X  	else if (!cnt) {
X  		ch = *(j - 2);
X  		return;
X  	}
X***************
X*** 265,271
X  		 */
X  #else !ZBRACKFIX
X  		ch = *(j - 2);
X- #endif ZBRACKFIX
X  		return;
X  	}
X  	*j = 0;
X
X--- 159,164 -----
X  		return;
X  	else if (!cnt) {
X  		ch = *(j - 2);
X  		return;
X  	}
X  	*j = 0;
X***************
X*** 287,295
X  	int	cnt, delim, v;
X  
X  	if (ismot(c = getch()))
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, "\\L: unsuitable start delimiter");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 180,185 -----
X  	int	cnt, delim, v;
X  
X  	if (ismot(c = getch()))
X  		return;
X  	delim = cbits(c);
X  	dfact = lss;
X***************
X*** 291,300
X  	{
X  		errmsg(EWARN, "\\L: unsuitable start delimiter");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	delim = cbits(c);
X  	dfact = lss;
X  	vflag++;
X
X--- 181,186 -----
X  
X  	if (ismot(c = getch()))
X  		return;
X  	delim = cbits(c);
X  	dfact = lss;
X  	vflag++;
X***************
X*** 301,311
X  	i = quant(atoi(), VERT);
X  	dfact = 1;
X  	if (!i) {
X- #ifdef REPORTERRS
X- 		if (eat(delim) != delim) {
X- 			errmsg(EWARN, "Vertical line (\\L): no closing delimiter");
X- 		} /* not an error to have a zero-length line */
X- #else !REPORTERRS
X  		eat(delim);
X  #endif REPORTERRS
X  		vflag = 0;
X
X--- 187,192 -----
X  	i = quant(atoi(), VERT);
X  	dfact = 1;
X  	if (!i) {
X  		eat(delim);
X  		vflag = 0;
X  		return;
X***************
X*** 307,313
X  		} /* not an error to have a zero-length line */
X  #else !REPORTERRS
X  		eat(delim);
X- #endif REPORTERRS
X  		vflag = 0;
X  		return;
X  	}
X
X--- 188,193 -----
X  	dfact = 1;
X  	if (!i) {
X  		eat(delim);
X  		vflag = 0;
X  		return;
X  	}
X***************
X*** 314,334
X  	if ((cbits(c = getch())) == delim) {
X  		c = BOXRULE | chbits;	/*default box rule*/
X  	} else 
X- #ifdef REPORTERRS
X- 	{
X- 		int delim2 = cbits(getch());
X- 
X- 		if (delim2 != delim) {
X- 			if (delim2 == '\n') {
X- 				errmsg(EWARN, "\\v: unexpected newline");
X- 			} else {
X- 				errmsg(EWARN,
X- 	"\\v: expected closing delim \"%s\", found \"%s\"",
X- 			tchartos(delim), tchartos(delim2));
X- 			}
X- 		}
X- 	}
X- #else !REPORTERRS
X  		getch();
X  #endif REPORTERRS
X  	c |= ZBIT;
X
X--- 194,199 -----
X  	if ((cbits(c = getch())) == delim) {
X  		c = BOXRULE | chbits;	/*default box rule*/
X  	} else 
X  		getch();
X  	c |= ZBIT;
X  	neg = 0;
X***************
X*** 330,336
X  	}
X  #else !REPORTERRS
X  		getch();
X- #endif REPORTERRS
X  	c |= ZBIT;
X  	neg = 0;
X  	if (i < 0) {
X
X--- 195,200 -----
X  		c = BOXRULE | chbits;	/*default box rule*/
X  	} else 
X  		getch();
X  	c |= ZBIT;
X  	neg = 0;
X  	if (i < 0) {
X***************
X*** 343,354
X  #ifndef NROFF
X  	v = EM;
X  #endif
X- #ifdef REPORTERRS
X- 	if (!v) {
X- 		errmsg(EWARN, "Internal error: !v (__FILE__:__LINE__)");
X- 		v = EM;
X- 	}
X- #endif REPORTERRS
X  	cnt = i / v;
X  	rem = makem(i % v) | neg;
X  	ver = makem(v) | neg;
X
X--- 207,212 -----
X  #ifndef NROFF
X  	v = EM;
X  #endif
X  	cnt = i / v;
X  	rem = makem(i % v) | neg;
X  	ver = makem(v) | neg;
X***************
X*** 374,382
X  
X  setdraw()	/* generate internal cookies for a drawing function */
X  {
X- #ifdef DXLIM
X- 	int i, j, k, dx[DXLIM], dy[DXLIM], delim, type, temp;
X- #else !DXLIM
X  	int i, j, k, dx[100], dy[100], delim, type, temp;
X  #endif DXLIM
X  	tchar c;
X
X--- 232,237 -----
X  
X  setdraw()	/* generate internal cookies for a drawing function */
X  {
X  	int i, j, k, dx[100], dy[100], delim, type, temp;
X  	tchar c;
X  	/* input is \D'f x y x y ... c' (or at least it had better be) */
X***************
X*** 378,384
X  	int i, j, k, dx[DXLIM], dy[DXLIM], delim, type, temp;
X  #else !DXLIM
X  	int i, j, k, dx[100], dy[100], delim, type, temp;
X- #endif DXLIM
X  	tchar c;
X  	/* input is \D'f x y x y ... c' (or at least it had better be) */
X  	/* this does drawing function f with character c and the */
X
X--- 233,238 -----
X  setdraw()	/* generate internal cookies for a drawing function */
X  {
X  	int i, j, k, dx[100], dy[100], delim, type, temp;
X  	tchar c;
X  	/* input is \D'f x y x y ... c' (or at least it had better be) */
X  	/* this does drawing function f with character c and the */
X***************
X*** 389,402
X  	/* e x y:	ellipse of diameters x,y, left side here */
X  	/* a x y r:	arc to x,y with radius r (ccw) */
X  	/* ~ x y ...:	wiggly line */
X- #ifdef GREMLIN
X- 	/* t n:		line thickness n */
X- 	/* s n:		line style mask set to n */
X- 	/* g x y ...:	gremlin [!??!?] don't ask me!  - req */
X- #endif GREMLIN
X- #ifdef ANYBASESTR
X- 	/* b drawingstuff ' text ': use DRAWFCN as baseline for text -- req */
X- #endif ANYBASESTR
X  
X  	if (ismot(c = getch()))
X  #ifdef REPORTERRS
X
X--- 243,248 -----
X  	/* e x y:	ellipse of diameters x,y, left side here */
X  	/* a x y r:	arc to x,y with radius r (ccw) */
X  	/* ~ x y ...:	wiggly line */
X  
X  	if (ismot(c = getch()))
X  		return;
X***************
X*** 399,407
X  #endif ANYBASESTR
X  
X  	if (ismot(c = getch()))
X- #ifdef REPORTERRS
X- 	{
X- 		errmsg(EWARN, "\\D: Unsuitable delimiter for drawing function");
X  		return;
X  	}
X  #else !REPORTERRS
X
X--- 245,250 -----
X  	/* ~ x y ...:	wiggly line */
X  
X  	if (ismot(c = getch()))
X  		return;
X  	delim = cbits(c);
X  	type = cbits(getch());
X***************
X*** 403,412
X  	{
X  		errmsg(EWARN, "\\D: Unsuitable delimiter for drawing function");
X  		return;
X- 	}
X- #else !REPORTERRS
X- 		return;
X- #endif REPORTERRS
X  	delim = cbits(c);
X  	type = cbits(getch());
X  #ifdef REPORTERRS
X
X--- 246,251 -----
X  
X  	if (ismot(c = getch()))
X  		return;
X  	delim = cbits(c);
X  	type = cbits(getch());
X  	for (i = 0; i < 50 ; i++) {
X***************
X*** 409,447
X  #endif REPORTERRS
X  	delim = cbits(c);
X  	type = cbits(getch());
X- #ifdef REPORTERRS
X- 	switch(type) {
X- 
X- 	default:
X- 		errmsg(EWARN, "\\D%c: unknown drawing function \"%c\"",
X- 								type, type);
X- 		break;
X- 
X- 	case DRAWLINE:
X- 	case DRAWCIRCLE:
X- 	case DRAWELLIPSE:
X- 	case DRAWARC:
X- 	case DRAWWIG:
X- #ifdef GREMLIN
X- 	case DRAWGREM:
X- 	case DRAWTHICK:
X- 	case DRAWLSTYLE:
X- #endif GREMLIN
X- #ifdef ANYBASESTR
X- 	case DRAWBASESTR:
X- #endif ANYBASESTR
X- 
X- 	/* do nothing -- only the default action is interesting!
X- 	 * - req
X- 	 */
X- 	break;
X- 
X- 	}
X- #endif REPORTERRS
X- 
X- #ifdef DXLIM
X- 	for (i = 0; i < DXLIM/2 ; i++) {
X- #else !DXLIM
X  	for (i = 0; i < 50 ; i++) {
X  #endif DXLIM
X  #ifdef COMMENT
X
X--- 248,253 -----
X  		return;
X  	delim = cbits(c);
X  	type = cbits(getch());
X  	for (i = 0; i < 50 ; i++) {
X  		c = getch();
X  		if (cbits(c) == delim)
X***************
X*** 443,452
X  	for (i = 0; i < DXLIM/2 ; i++) {
X  #else !DXLIM
X  	for (i = 0; i < 50 ; i++) {
X- #endif DXLIM
X- #ifdef COMMENT
X- 	/* } */  /* (brace is for bracket matching tool!) */
X- #endif COMMENT
X  		c = getch();
X  		if (cbits(c) == delim)
X  			break;
X
X--- 249,254 -----
X  	delim = cbits(c);
X  	type = cbits(getch());
X  	for (i = 0; i < 50 ; i++) {
X  		c = getch();
X  		if (cbits(c) == delim)
X  			break;
X***************
X*** 472,482
X  		else if (dy[i] < -MAXMOT)
X  			dy[i] = -MAXMOT;
X  	}
X- #ifdef REPORTERRS
X- 	if (cbits(c) != delim) {
X- 		errmsg(EWARN, "\\D: more than %d parameters", i - 1);
X- 	}
X- #endif REPORTERRS
X  	dfact = 1;
X  	vflag = 0;
X  #ifndef NROFF
X
X--- 274,279 -----
X  		else if (dy[i] < -MAXMOT)
X  			dy[i] = -MAXMOT;
X  	}
X  	dfact = 1;
X  	vflag = 0;
X  #ifndef NROFF
X***************
X*** 536,544
X  	for (j = 0; ; j++) {
X  		if ((tabtab[j] & TMASK) == 0) {
X  			if (x == savfc)
X- #ifdef REPORTERRS
X- 				errmsg(EWARN, "zero field width");
X- #else !REPORTERRS
X  				fprintf(stderr, "troff: zero field width.\n");
X  #endif REPORTERRS
X  			jj = 0;
X
X--- 333,338 -----
X  	for (j = 0; ; j++) {
X  		if ((tabtab[j] & TMASK) == 0) {
X  			if (x == savfc)
X  				fprintf(stderr, "troff: zero field width.\n");
X  			jj = 0;
X  			goto rtn;
X***************
X*** 540,546
X  				errmsg(EWARN, "zero field width");
X  #else !REPORTERRS
X  				fprintf(stderr, "troff: zero field width.\n");
X- #endif REPORTERRS
X  			jj = 0;
X  			goto rtn;
X  		}
X
X--- 334,339 -----
X  		if ((tabtab[j] & TMASK) == 0) {
X  			if (x == savfc)
X  				fprintf(stderr, "troff: zero field width.\n");
X  			jj = 0;
X  			goto rtn;
X  		}
Xdiff -rbc titroff/ni.c /distribution/dwb/text/troff.d/ni.c
X*** titroff/ni.c	Fri Oct 31 19:13:42 1986
X--- /distribution/dwb/text/troff.d/ni.c	Tue Oct 25 17:24:10 1983
X***************
X*** 1,3
X  #include "tdef.h"
X  
X  /* You may want to change these names */
X
X--- 1,4 -----
X+ /*      @(#)ni.c	1.2     */
X  #include "tdef.h"
X  
X  /* You may want to change these names */
X***************
X*** 3,15
X  /* You may want to change these names */
X  
X  #ifndef NROFF
X! char	termtab[NS] = FONTFILE;	/* rest added in ptinit() */
X! char	fontfile[NS] = FONTFILE;	/* rest added in casefp() */
X! #ifdef DESCHASNAME
X! char	devname[10]	 = "default";	/* default typesetter */
X! #else !DESCHASNAME
X! char	devname[10]	 = "va";	/* default typesetter */
X! #endif DESCHASNAME
X  #endif
X  char	obuf[OBUFSZ];	/* characters collected here for actual typesetter output */
X  char	*obufp = obuf;
X
X--- 4,12 -----
X  /* You may want to change these names */
X  
X  #ifndef NROFF
X! char	termtab[NS] = "/usr/lib/font";	/* rest added in ptinit() */
X! char	fontfile[NS] = "/usr/lib/font";	/* rest added in casefp() */
X! char	devname[12]	 = "aps";	/* default typesetter */
X  #endif
X  char	obuf[OBUFSZ];	/* characters collected here for actual typesetter output */
X  char	*obufp = obuf;
X***************
X*** 29,37
X  	PAIR('s', 'b'),
X  	PAIR('c', '.'),
X  	PAIR('$', '$'),
X- #ifdef WARNLEVELREG
X- 	PAIR('w', 'l'),		/* warning level */
X- #endif WARNLEVELREG
X  };
X  
X  
X
X--- 26,31 -----
X  	PAIR('s', 'b'),
X  	PAIR('c', '.'),
X  	PAIR('$', '$'),
X  };
X  
X  
X***************
X*** 91,105
X  casecc(), casec2(), caseem(), caseaf(), casehw(), casemc(), casepm(),
X  casecu(), casepi(), caserr(), caseuf(), caseie(), caseel(), casepc(),
X  caseht(), casecf(), casesy();
X- #ifdef ROTATEPAGE
X- extern caserp();	/* rotate page -- req */
X- #endif ROTATEPAGE
X- #ifdef FONTFAMILIES
X- extern caseff();	/* font family -- req */
X- #endif FONTFAMILIES
X- #ifdef BLANKSMACRO
X- extern casebm();	/* blanks macro -- req */
X- #endif BLANKSMACRO
X  
X  #ifdef COMMENT
X  /* the comments are because we can't initialise a union in C
X
X--- 85,90 -----
X  casecc(), casec2(), caseem(), caseaf(), casehw(), casemc(), casepm(),
X  casecu(), casepi(), caserr(), caseuf(), caseie(), caseel(), casepc(),
X  caseht(), casecf(), casesy();
X  
X  struct contab {
X  	int	rq;
X***************
X*** 101,111
X  extern casebm();	/* blanks macro -- req */
X  #endif BLANKSMACRO
X  
X- #ifdef COMMENT
X- /* the comments are because we can't initialise a union in C
X-  * - req
X-  */
X- #endif COMMENT
X  struct contab {
X  	int	rq;
X  	/*
X
X--- 86,91 -----
X  casecu(), casepi(), caserr(), caseuf(), caseie(), caseel(), casepc(),
X  caseht(), casecf(), casesy();
X  
X  struct contab {
X  	int	rq;
X  	/*
X***************
X*** 202,217
X  	PAIR('h', 't'), caseht,
X  	PAIR('c', 'f'), casecf,
X  	PAIR('s', 'y'), casesy,
X! 	PAIR('!', 0), casesy,	/* synonym for .sy */
X! #ifdef ROTATEPAGE
X! 	PAIR('r', 'p'), caserp,	/* .rp -- rotate page */
X! #endif ROTATEPAGE
X! #ifdef FONTFAMILIES
X! 	PAIR('f', 'f'), caseff, /*.ff -- font family */
X! #endif FONTFAMILIES
X! #ifdef BLANKSMACRO
X! 	PAIR('b', 'm'), casebm, /* .bl xx -- blanks macro */
X! #endif BLANKSMACRO
X  };
X  
X  
X
X--- 182,188 -----
X  	PAIR('h', 't'), caseht,
X  	PAIR('c', 'f'), casecf,
X  	PAIR('s', 'y'), casesy,
X! /*	PAIR('!', 0), casesy,	/* synonym for .sy */
X  };
X  
X  
X***************
X*** 268,274
X  int	c2	 = '\'';
X  int	ohc	 = OHC;
X  int	tdelim	 = IMP;
X! int	hyf	 = 1;
X  int	hyoff	 = 0;
X  int	un1	 = -1;
X  int	tabc	 = 0;
X
X--- 239,245 -----
X  int	c2	 = '\'';
X  int	ohc	 = OHC;
X  int	tdelim	 = IMP;
X! int	hyf	 = 0;
X  int	hyoff	 = 0;
X  int	un1	 = -1;
X  int	tabc	 = 0;
X***************
X*** 323,325
X  
X  char	blockxxx[EVSPARE]	 = {
X  	0};
X
X--- 294,298 -----
X  
X  char	blockxxx[EVSPARE]	 = {
X  	0};
X+ 
X+ 
SHAR_EOF
if test 49231 -ne "`wc -c < 'diffc'`"
then
	echo shar: error transmitting "'diffc'" '(should have been 49231 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0
-- 
ARPA		req%uu.warwick.ac.uk at ucl-cs.arpa
EARN/BITNET	req%UK.AC.WARWICK.UU at AC.UK
JANET		req at uk.ac.warwick.uu
UUCP		seismo!mcvax!ukc!warwick!req  (req at warwick.UUCP)
PHONE		+44 203 523485
For mail.frplist, use "frplist" instead of "req" in the above lines.
The BITNET path only works from sites that have AC.UK in their tables.  Sorry.



More information about the Comp.sources.unix mailing list