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