125071Sjaap #ifndef lint
2*25091Sjaap static char sccsid[] = "@(#)options.c 1.2 (CWI) 85/10/02";
325071Sjaap #endif lint
425071Sjaap
525071Sjaap /*
625071Sjaap * Threat the option part of the table
725071Sjaap */
825071Sjaap
925071Sjaap #include "defs.h"
1025071Sjaap #include "ext.h"
1125071Sjaap
1225071Sjaap struct optstr {
1325071Sjaap char *optnam;
1425071Sjaap int *optadd;
1525071Sjaap }options[] = {
1625071Sjaap "expand", &expflg,
1725071Sjaap "EXPAND", &expflg,
1825071Sjaap "center", &ctrflg,
1925071Sjaap "CENTER", &ctrflg,
20*25091Sjaap "centre", &ctrflg, /* proper English added by jaap */
21*25091Sjaap "CENTRE", &ctrflg, /* proper English added by jaap */
2225071Sjaap "box", &boxflg,
2325071Sjaap "BOX", &boxflg,
2425071Sjaap "allbox", &allflg,
2525071Sjaap "ALLBOX", &allflg,
2625071Sjaap "doublebox", &dboxflg,
2725071Sjaap "DOUBLEBOX", &dboxflg,
2825071Sjaap "frame", &boxflg,
2925071Sjaap "FRAME", &boxflg,
3025071Sjaap "doubleframe", &dboxflg,
3125071Sjaap "DOUBLEFRAME", &dboxflg,
3225071Sjaap "tab", &tab,
3325071Sjaap "TAB", &tab,
3425071Sjaap "linesize", &linsize,
3525071Sjaap "LINESIZ", &linsize,
3625071Sjaap "delim", &delim1,
3725071Sjaap "DELIM", &delim1,
3825071Sjaap 0, 0
3925071Sjaap };
4025071Sjaap
4125071Sjaap #define NBSIZ 25
4225071Sjaap
getcomm()4325071Sjaap getcomm(){
4425071Sjaap char line[BUFSIZ], *cp, nb[NBSIZ], *t;
4525071Sjaap register struct optstr *lp;
4625071Sjaap register int c, ci;
4725071Sjaap int found;
4825071Sjaap
4925071Sjaap for(lp = options; lp -> optnam; lp++)
5025071Sjaap
5125071Sjaap *(lp -> optadd) = 0;
5225071Sjaap texname = texstr[texct = 0];
5325071Sjaap tab = '\t';
5425071Sjaap printf(".nr %d \\n(.s\n", LSIZE);
5525071Sjaap gets1(line);
5625071Sjaap /*
5725071Sjaap * see if this is a command line
5825071Sjaap */
5925071Sjaap if(index(line, ';') == NULL){
6025071Sjaap backrest(line);
6125071Sjaap return;
6225071Sjaap }
6325071Sjaap for(cp = line; (c = *cp) != ';'; cp++){
6425071Sjaap if(!isalpha(c))
6525071Sjaap continue;
6625071Sjaap found = 0;
6725071Sjaap for(lp = options; lp -> optadd; lp++){
6825071Sjaap if(prefix(lp -> optnam, cp)){
6925071Sjaap *(lp -> optadd) = 1;
7025071Sjaap cp += strlen(lp -> optnam);
7125071Sjaap if(isalpha(*cp))
7225071Sjaap error("Misspelled global option");
7325071Sjaap while(*cp == ' ')
7425071Sjaap cp++;
7525071Sjaap t = nb;
7625071Sjaap if(*cp == '(')
7725071Sjaap while((ci = *++cp) != ')'){
7825071Sjaap *t++ = ci;
7925071Sjaap if(t >= &nb[NBSIZ-3])
8025071Sjaap error("buffer overflow");
8125071Sjaap }
8225071Sjaap else
8325071Sjaap cp--;
8425071Sjaap *t++ = 0;
8525071Sjaap *t = 0;
8625071Sjaap if(lp -> optadd == &tab){
8725071Sjaap if(nb[0])
8825071Sjaap *(lp -> optadd) = nb[0];
8925071Sjaap }
9025071Sjaap if(lp -> optadd == &linsize)
9125071Sjaap printf(".nr %d %s\n", LSIZE, nb);
9225071Sjaap if(lp -> optadd == &delim1){
9325071Sjaap delim1 = nb[0];
9425071Sjaap delim2 = nb[1];
9525071Sjaap }
9625071Sjaap found = 1;
9725071Sjaap break;
9825071Sjaap }
9925071Sjaap }
10025071Sjaap if(!found)
10125071Sjaap error("Illegal option");
10225071Sjaap }
10325071Sjaap cp++;
10425071Sjaap backrest(cp);
10525071Sjaap return;
10625071Sjaap }
107