xref: /csrg-svn/old/tbl/t3.c (revision 14508)
1*14508Ssam #ifndef lint
2*14508Ssam static char sccsid[] = "@(#)t3.c	4.2 08/11/83";
3*14508Ssam #endif
411030Sshannon 
511030Sshannon  /* t3.c: interpret commands affecting whole table */
611030Sshannon # include "t..c"
711030Sshannon struct optstr {char *optnam; int *optadd;} options [] = {
811030Sshannon 	"expand", &expflg,
911030Sshannon 	"EXPAND", &expflg,
1011030Sshannon 	"center", &ctrflg,
1111030Sshannon 	"CENTER", &ctrflg,
1211030Sshannon 	"box", &boxflg,
1311030Sshannon 	"BOX", &boxflg,
1411030Sshannon 	"allbox", &allflg,
1511030Sshannon 	"ALLBOX", &allflg,
1611030Sshannon 	"doublebox", &dboxflg,
1711030Sshannon 	"DOUBLEBOX", &dboxflg,
1811030Sshannon 	"frame", &boxflg,
1911030Sshannon 	"FRAME", &boxflg,
2011030Sshannon 	"doubleframe", &dboxflg,
2111030Sshannon 	"DOUBLEFRAME", &dboxflg,
2211030Sshannon 	"tab", &tab,
2311030Sshannon 	"TAB", &tab,
2411030Sshannon 	"linesize", &linsize,
2511030Sshannon 	"LINESIZE", &linsize,
2611030Sshannon 	"delim", &delim1,
2711030Sshannon 	"DELIM", &delim1,
2811030Sshannon 	0,0};
2911030Sshannon getcomm()
3011030Sshannon {
3111030Sshannon char line[200], *cp, nb[25], *t;
3211030Sshannon struct optstr *lp;
3311030Sshannon int c, ci, found;
3411030Sshannon for(lp= options; lp->optnam; lp++)
3511030Sshannon 	*(lp->optadd) = 0;
3611030Sshannon texname = texstr[texct=0];
3711030Sshannon tab = '\t';
3811030Sshannon printf(".nr %d \\n(.s\n", LSIZE);
3911030Sshannon gets1(line);
4011030Sshannon /* see if this is a command line */
4111030Sshannon if (index(line,';') == NULL)
4211030Sshannon 	{
4311030Sshannon 	backrest(line);
4411030Sshannon 	return;
4511030Sshannon 	}
4611030Sshannon for(cp=line; (c = *cp) != ';'; cp++)
4711030Sshannon 	{
4811030Sshannon 	if (!letter(c)) continue;
4911030Sshannon 	found=0;
5011030Sshannon 	for(lp= options; lp->optadd; lp++)
5111030Sshannon 		{
5211030Sshannon 		if (prefix(lp->optnam, cp))
5311030Sshannon 			{
5411030Sshannon 			*(lp->optadd) = 1;
5511030Sshannon 			cp += strlen(lp->optnam);
5611030Sshannon 			if (letter(*cp))
5711030Sshannon 				error("Misspelled global option");
5811030Sshannon 			while (*cp==' ')cp++;
5911030Sshannon 			t=nb;
6011030Sshannon 			if ( *cp == '(')
6111030Sshannon 				while ((ci= *++cp) != ')')
6211030Sshannon 					*t++ = ci;
6311030Sshannon 			else cp--;
6411030Sshannon 			*t++ = 0; *t=0;
6511030Sshannon 			if (lp->optadd == &tab)
6611030Sshannon 				{
6711030Sshannon 				if (nb[0])
6811030Sshannon 					*(lp->optadd) = nb[0];
6911030Sshannon 				}
7011030Sshannon 			if (lp->optadd == &linsize)
7111030Sshannon 				printf(".nr %d %s\n", LSIZE, nb);
7211030Sshannon 			if (lp->optadd == &delim1)
7311030Sshannon 				{
7411030Sshannon 				delim1 = nb[0];
7511030Sshannon 				delim2 = nb[1];
7611030Sshannon 				}
7711030Sshannon 			found=1;
7811030Sshannon 			break;
7911030Sshannon 			}
8011030Sshannon 		}
8111030Sshannon 	if (!found)
8211030Sshannon 		error("Illegal option");
8311030Sshannon 	}
8411030Sshannon cp++;
8511030Sshannon backrest(cp);
8611030Sshannon return;
8711030Sshannon }
8811030Sshannon backrest(cp)
8911030Sshannon 	char *cp;
9011030Sshannon {
9111030Sshannon char *s;
9211030Sshannon for(s=cp; *s; s++);
9311030Sshannon un1getc('\n');
9411030Sshannon while (s>cp)
9511030Sshannon 	un1getc(*--s);
9611030Sshannon return;
9711030Sshannon }
98