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