1 /* 2 * Copyright 1991 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 7 /* All Rights Reserved */ 8 9 /* 10 * Copyright (c) 1980 Regents of the University of California. 11 * All rights reserved. The Berkeley software License Agreement 12 * specifies the terms and conditions for redistribution. 13 */ 14 15 #pragma ident "%Z%%M% %I% %E% SMI" 16 17 /* t3.c: interpret commands affecting whole table */ 18 # include "t..c" 19 #include <string.h> 20 21 struct optstr {char *optnam; int *optadd;} options [] = { 22 "expand", &expflg, 23 "EXPAND", &expflg, 24 "center", &ctrflg, 25 "CENTER", &ctrflg, 26 "box", &boxflg, 27 "BOX", &boxflg, 28 "allbox", &allflg, 29 "ALLBOX", &allflg, 30 "doublebox", &dboxflg, 31 "DOUBLEBOX", &dboxflg, 32 "frame", &boxflg, 33 "FRAME", &boxflg, 34 "doubleframe", &dboxflg, 35 "DOUBLEFRAME", &dboxflg, 36 "tab", &tab, 37 "TAB", &tab, 38 "linesize", &linsize, 39 "LINESIZE", &linsize, 40 "delim", &delim1, 41 "DELIM", &delim1, 42 0,0}; 43 44 void backrest(char *); 45 46 void 47 getcomm(void) 48 { 49 char line[200], *cp, nb[25], *t; 50 struct optstr *lp; 51 int c, ci, found; 52 for(lp= options; lp->optnam; lp++) 53 *(lp->optadd) = 0; 54 texname = texstr[texct=0]; 55 tab = '\t'; 56 printf(".nr %d \\n(.s\n", LSIZE); 57 gets1(line, sizeof line); 58 /* see if this is a command line */ 59 if (strchr(line,';') == NULL) 60 { 61 backrest(line); 62 return; 63 } 64 for(cp=line; (c = *cp) != ';'; cp++) 65 { 66 if (!letter(c)) continue; 67 found=0; 68 for(lp= options; lp->optadd; lp++) 69 { 70 if (prefix(lp->optnam, cp)) 71 { 72 *(lp->optadd) = 1; 73 cp += strlen(lp->optnam); 74 if (letter(*cp)) 75 error(gettext("Misspelled global option")); 76 while (*cp==' ')cp++; 77 t=nb; 78 if ( *cp == '(') 79 while ((ci= *++cp) != ')') 80 *t++ = ci; 81 else cp--; 82 *t++ = 0; *t=0; 83 if (lp->optadd == &tab) 84 { 85 if (nb[0]) 86 *(lp->optadd) = nb[0]; 87 } 88 if (lp->optadd == &linsize) 89 printf(".nr %d %s\n", LSIZE, nb); 90 if (lp->optadd == &delim1) 91 { 92 delim1 = nb[0]; 93 delim2 = nb[1]; 94 } 95 found=1; 96 break; 97 } 98 } 99 if (!found) 100 error(gettext("Illegal option")); 101 } 102 cp++; 103 backrest(cp); 104 return; 105 } 106 107 void 108 backrest(char *cp) 109 { 110 char *s; 111 for(s=cp; *s; s++); 112 un1getc('\n'); 113 while (s>cp) 114 un1getc(*--s); 115 return; 116 } 117