123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /* 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;
- }
|