Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
}