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