1 /*
2 * Copyright 1991 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
7 /* All Rights Reserved */
8
9 /*
10 * Copyright (c) 1980 Regents of the University of California.
11 * All rights reserved. The Berkeley software License Agreement
12 * specifies the terms and conditions for redistribution.
13 */
14
15 /* t3.c: interpret commands affecting whole table */
16 # include "t..c"
17 #include <string.h>
18
19 struct optstr {char *optnam; int *optadd;} options [] = {
20 "expand", &expflg,
21 "EXPAND", &expflg,
22 "center", &ctrflg,
23 "CENTER", &ctrflg,
24 "box", &boxflg,
25 "BOX", &boxflg,
26 "allbox", &allflg,
27 "ALLBOX", &allflg,
28 "doublebox", &dboxflg,
29 "DOUBLEBOX", &dboxflg,
30 "frame", &boxflg,
31 "FRAME", &boxflg,
32 "doubleframe", &dboxflg,
33 "DOUBLEFRAME", &dboxflg,
34 "tab", &tab,
35 "TAB", &tab,
36 "linesize", &linsize,
37 "LINESIZE", &linsize,
38 "delim", &delim1,
39 "DELIM", &delim1,
40 0,0};
41
42 void backrest(char *);
43
44 void
getcomm(void)45 getcomm(void)
46 {
47 char line[200], *cp, nb[25], *t;
48 struct optstr *lp;
49 int c, ci, found;
50 for(lp= options; lp->optnam; lp++)
51 *(lp->optadd) = 0;
52 texname = texstr[texct=0];
53 tab = '\t';
54 printf(".nr %d \\n(.s\n", LSIZE);
55 gets1(line, sizeof line);
56 /* see if this is a command line */
57 if (strchr(line,';') == NULL)
58 {
59 backrest(line);
60 return;
61 }
62 for(cp=line; (c = *cp) != ';'; cp++)
63 {
64 if (!letter(c)) continue;
65 found=0;
66 for(lp= options; lp->optadd; lp++)
67 {
68 if (prefix(lp->optnam, cp))
69 {
70 *(lp->optadd) = 1;
71 cp += strlen(lp->optnam);
72 if (letter(*cp))
73 error(gettext("Misspelled global option"));
74 while (*cp==' ')cp++;
75 t=nb;
76 if ( *cp == '(')
77 while ((ci= *++cp) != ')')
78 *t++ = ci;
79 else cp--;
80 *t++ = 0; *t=0;
81 if (lp->optadd == &tab)
82 {
83 if (nb[0])
84 *(lp->optadd) = nb[0];
85 }
86 if (lp->optadd == &linsize)
87 printf(".nr %d %s\n", LSIZE, nb);
88 if (lp->optadd == &delim1)
89 {
90 delim1 = nb[0];
91 delim2 = nb[1];
92 }
93 found=1;
94 break;
95 }
96 }
97 if (!found)
98 error(gettext("Illegal option"));
99 }
100 cp++;
101 backrest(cp);
102 return;
103 }
104
105 void
backrest(char * cp)106 backrest(char *cp)
107 {
108 char *s;
109 for(s=cp; *s; s++);
110 un1getc('\n');
111 while (s>cp)
112 un1getc(*--s);
113 return;
114 }
115