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


