xref: /csrg-svn/old/tbl/t3.c (revision 11030)
1*11030Sshannon /*	t3.c	4.1	83/02/12	*/
2*11030Sshannon 
3*11030Sshannon  /* t3.c: interpret commands affecting whole table */
4*11030Sshannon # include "t..c"
5*11030Sshannon struct optstr {char *optnam; int *optadd;} options [] = {
6*11030Sshannon 	"expand", &expflg,
7*11030Sshannon 	"EXPAND", &expflg,
8*11030Sshannon 	"center", &ctrflg,
9*11030Sshannon 	"CENTER", &ctrflg,
10*11030Sshannon 	"box", &boxflg,
11*11030Sshannon 	"BOX", &boxflg,
12*11030Sshannon 	"allbox", &allflg,
13*11030Sshannon 	"ALLBOX", &allflg,
14*11030Sshannon 	"doublebox", &dboxflg,
15*11030Sshannon 	"DOUBLEBOX", &dboxflg,
16*11030Sshannon 	"frame", &boxflg,
17*11030Sshannon 	"FRAME", &boxflg,
18*11030Sshannon 	"doubleframe", &dboxflg,
19*11030Sshannon 	"DOUBLEFRAME", &dboxflg,
20*11030Sshannon 	"tab", &tab,
21*11030Sshannon 	"TAB", &tab,
22*11030Sshannon 	"linesize", &linsize,
23*11030Sshannon 	"LINESIZE", &linsize,
24*11030Sshannon 	"delim", &delim1,
25*11030Sshannon 	"DELIM", &delim1,
26*11030Sshannon 	0,0};
27*11030Sshannon getcomm()
28*11030Sshannon {
29*11030Sshannon char line[200], *cp, nb[25], *t;
30*11030Sshannon struct optstr *lp;
31*11030Sshannon int c, ci, found;
32*11030Sshannon for(lp= options; lp->optnam; lp++)
33*11030Sshannon 	*(lp->optadd) = 0;
34*11030Sshannon texname = texstr[texct=0];
35*11030Sshannon tab = '\t';
36*11030Sshannon printf(".nr %d \\n(.s\n", LSIZE);
37*11030Sshannon gets1(line);
38*11030Sshannon /* see if this is a command line */
39*11030Sshannon if (index(line,';') == NULL)
40*11030Sshannon 	{
41*11030Sshannon 	backrest(line);
42*11030Sshannon 	return;
43*11030Sshannon 	}
44*11030Sshannon for(cp=line; (c = *cp) != ';'; cp++)
45*11030Sshannon 	{
46*11030Sshannon 	if (!letter(c)) continue;
47*11030Sshannon 	found=0;
48*11030Sshannon 	for(lp= options; lp->optadd; lp++)
49*11030Sshannon 		{
50*11030Sshannon 		if (prefix(lp->optnam, cp))
51*11030Sshannon 			{
52*11030Sshannon 			*(lp->optadd) = 1;
53*11030Sshannon 			cp += strlen(lp->optnam);
54*11030Sshannon 			if (letter(*cp))
55*11030Sshannon 				error("Misspelled global option");
56*11030Sshannon 			while (*cp==' ')cp++;
57*11030Sshannon 			t=nb;
58*11030Sshannon 			if ( *cp == '(')
59*11030Sshannon 				while ((ci= *++cp) != ')')
60*11030Sshannon 					*t++ = ci;
61*11030Sshannon 			else cp--;
62*11030Sshannon 			*t++ = 0; *t=0;
63*11030Sshannon 			if (lp->optadd == &tab)
64*11030Sshannon 				{
65*11030Sshannon 				if (nb[0])
66*11030Sshannon 					*(lp->optadd) = nb[0];
67*11030Sshannon 				}
68*11030Sshannon 			if (lp->optadd == &linsize)
69*11030Sshannon 				printf(".nr %d %s\n", LSIZE, nb);
70*11030Sshannon 			if (lp->optadd == &delim1)
71*11030Sshannon 				{
72*11030Sshannon 				delim1 = nb[0];
73*11030Sshannon 				delim2 = nb[1];
74*11030Sshannon 				}
75*11030Sshannon 			found=1;
76*11030Sshannon 			break;
77*11030Sshannon 			}
78*11030Sshannon 		}
79*11030Sshannon 	if (!found)
80*11030Sshannon 		error("Illegal option");
81*11030Sshannon 	}
82*11030Sshannon cp++;
83*11030Sshannon backrest(cp);
84*11030Sshannon return;
85*11030Sshannon }
86*11030Sshannon backrest(cp)
87*11030Sshannon 	char *cp;
88*11030Sshannon {
89*11030Sshannon char *s;
90*11030Sshannon for(s=cp; *s; s++);
91*11030Sshannon un1getc('\n');
92*11030Sshannon while (s>cp)
93*11030Sshannon 	un1getc(*--s);
94*11030Sshannon return;
95*11030Sshannon }
96