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