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