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