Blob


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