]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/tbl/t3.c
upas/fs: remove useless loop in rf822()
[plan9front.git] / sys / src / cmd / tbl / t3.c
1 /* t3.c: interpret commands affecting whole table */
2 # include "t.h"
3
4 struct optstr {
5         char    *optnam; 
6         int     *optadd;
7 } 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 };
30
31 void
32 getcomm(void)
33 {
34         char    line[200], *cp, nb[25], *t;
35         struct optstr *lp;
36         int     c, ci, found;
37
38         for (lp = options; lp->optnam; lp++)
39                 *(lp->optadd) = 0;
40         texname = texstr[texct=0];
41         tab = '\t';
42         Bprint(&tabout, ".nr %d \\n(.s\n", LSIZE);
43         gets1(line, sizeof(line));
44         /* see if this is a command line */
45         if (strchr(line, ';') == 0) {
46                 backrest(line);
47                 return;
48         }
49         for (cp = line; (c = *cp) != ';'; cp++) {
50                 if (!letter(c)) 
51                         continue;
52                 found = 0;
53                 for (lp = options; lp->optadd; lp++) {
54                         if (prefix(lp->optnam, cp)) {
55                                 *(lp->optadd) = 1;
56                                 cp += strlen(lp->optnam);
57                                 if (letter(*cp))
58                                         error("Misspelled global option");
59                                 while (*cp == ' ')
60                                         cp++;
61                                 t = nb;
62                                 if ( *cp == '(')
63                                         while ((ci = *++cp) != ')')
64                                                 *t++ = ci;
65                                 else 
66                                         cp--;
67                                 *t++ = 0; 
68                                 *t = 0;
69                                 if (lp->optadd == &tab) {
70                                         if (nb[0])
71                                                 *(lp->optadd) = nb[0];
72                                 }
73                                 if (lp->optadd == &linsize)
74                                         Bprint(&tabout, ".nr %d %s\n", LSIZE, nb);
75                                 if (lp->optadd == &delim1) {
76                                         delim1 = nb[0];
77                                         delim2 = nb[1];
78                                 }
79                                 found = 1;
80                                 break;
81                         }
82                 }
83                 if (!found)
84                         error("Illegal option");
85         }
86         cp++;
87         backrest(cp);
88 }
89
90 void
91 backrest(char *cp)
92 {
93         char    *s;
94
95         for (s = cp; *s; s++)
96                 ;
97         un1getc('\n');
98         while (s > cp)
99                 un1getc(*--s);
100 }