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