root/usr/src/cmd/tbl/t3.c
/*
 * Copyright 1991 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/*        All Rights Reserved   */

/*
 * Copyright (c) 1980 Regents of the University of California.
 * All rights reserved. The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 */

 /* t3.c: interpret commands affecting whole table */
# include "t..c"
#include <string.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    backrest(char *);

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';
printf(".nr %d \\n(.s\n", LSIZE);
gets1(line, sizeof line);
/* see if this is a command line */
if (strchr(line,';') == NULL)
        {
        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(gettext("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)
                                printf(".nr %d %s\n", LSIZE, nb);
                        if (lp->optadd == &delim1)
                                {
                                delim1 = nb[0];
                                delim2 = nb[1];
                                }
                        found=1;
                        break;
                        }
                }
        if (!found)
                error(gettext("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;
}