1 #ifndef lint
2 static char sccsid[] = "@(#)options.c	1.2 (CWI) 85/10/02";
3 #endif lint
4 
5 /*
6  * Threat the option part of the table
7  */
8 
9 #include "defs.h"
10 #include "ext.h"
11 
12 struct optstr {
13 	char   *optnam;
14 	int    *optadd;
15 }options[] = {
16 	"expand",	&expflg,
17 	"EXPAND",	&expflg,
18 	"center",	&ctrflg,
19 	"CENTER",	&ctrflg,
20 	"centre",	&ctrflg,	/* proper English added by jaap */
21 	"CENTRE",	&ctrflg,	/* proper English added by jaap */
22 	"box",		&boxflg,
23 	"BOX",		&boxflg,
24 	"allbox",	&allflg,
25 	"ALLBOX",	&allflg,
26 	"doublebox",	&dboxflg,
27 	"DOUBLEBOX",	&dboxflg,
28 	"frame",	&boxflg,
29 	"FRAME",	&boxflg,
30 	"doubleframe",	&dboxflg,
31 	"DOUBLEFRAME",	&dboxflg,
32 	"tab",		&tab,
33 	"TAB",		&tab,
34 	"linesize",	&linsize,
35 	"LINESIZ",	&linsize,
36 	"delim",	&delim1,
37 	"DELIM",	&delim1,
38 	0,		0
39 };
40 
41 #define NBSIZ 25
42 
43 getcomm(){
44 	char line[BUFSIZ], *cp, nb[NBSIZ], *t;
45 	register struct optstr *lp;
46 	register int c, ci;
47 	int found;
48 
49 	for(lp = options; lp -> optnam; lp++)
50 
51 		*(lp -> optadd) = 0;
52 	texname = texstr[texct = 0];
53 	tab = '\t';
54 	printf(".nr %d \\n(.s\n", LSIZE);
55 	gets1(line);
56 	/*
57 	 * see if this is a command line
58 	 */
59 	if(index(line, ';') == NULL){
60 		backrest(line);
61 		return;
62 	}
63 	for(cp = line; (c = *cp) != ';'; cp++){
64 		if(!isalpha(c))
65 			continue;
66 		found = 0;
67 		for(lp = options; lp -> optadd; lp++){
68 			if(prefix(lp -> optnam, cp)){
69 				*(lp -> optadd) = 1;
70 				cp += strlen(lp -> optnam);
71 				if(isalpha(*cp))
72 					error("Misspelled global option");
73 				while(*cp == ' ')
74 					cp++;
75 				t = nb;
76 				if(*cp == '(')
77 					while((ci = *++cp) != ')'){
78 						*t++ = ci;
79 						if(t >= &nb[NBSIZ-3])
80 							error("buffer overflow");
81 				}
82 				else
83 					cp--;
84 				*t++ = 0;
85 				*t = 0;
86 				if(lp -> optadd == &tab){
87 					if(nb[0])
88 						*(lp -> optadd) = nb[0];
89 				}
90 				if(lp -> optadd == &linsize)
91 					printf(".nr %d %s\n", LSIZE, nb);
92 				if(lp -> optadd == &delim1){
93 					delim1 = nb[0];
94 					delim2 = nb[1];
95 				}
96 				found = 1;
97 				break;
98 			}
99 		}
100 		if(!found)
101 			error("Illegal option");
102 	}
103 	cp++;
104 	backrest(cp);
105 	return;
106 }
107