diff options
author | rsc <devnull@localhost> | 2004-05-15 23:24:00 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2004-05-15 23:24:00 +0000 |
commit | 5cedca1b69d020c32466f70843a11767773d7e3b (patch) | |
tree | a15a3d84e92aa262543b0010763a5e6920c9ba24 /src/cmd/tbl/t3.c | |
parent | 76e6aca867e3e48ea04fbcf7284c45369a69829e (diff) | |
download | plan9port-5cedca1b69d020c32466f70843a11767773d7e3b.tar.gz plan9port-5cedca1b69d020c32466f70843a11767773d7e3b.tar.bz2 plan9port-5cedca1b69d020c32466f70843a11767773d7e3b.zip |
Let's try this. It's BUGGERED.
Diffstat (limited to 'src/cmd/tbl/t3.c')
-rw-r--r-- | src/cmd/tbl/t3.c | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/cmd/tbl/t3.c b/src/cmd/tbl/t3.c new file mode 100644 index 00000000..a4dc9f9f --- /dev/null +++ b/src/cmd/tbl/t3.c @@ -0,0 +1,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; +} + + |