aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/tbl/t3.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/tbl/t3.c')
-rw-r--r--src/cmd/tbl/t3.c104
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;
+}
+
+