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