13e12c5d1SDavid du Colombier /* t4.c: read table specification */ 23e12c5d1SDavid du Colombier # include "t.h" 33e12c5d1SDavid du Colombier int oncol; 43e12c5d1SDavid du Colombier 53e12c5d1SDavid du Colombier void 63e12c5d1SDavid du Colombier getspec(void) 73e12c5d1SDavid du Colombier { 83e12c5d1SDavid du Colombier int icol, i; 93e12c5d1SDavid du Colombier 103e12c5d1SDavid du Colombier qcol = findcol() + 1;/* must allow one extra for line at right */ 113e12c5d1SDavid du Colombier garray(qcol); 123e12c5d1SDavid du Colombier sep[-1] = -1; 133e12c5d1SDavid du Colombier for (icol = 0; icol < qcol; icol++) { 143e12c5d1SDavid du Colombier sep[icol] = -1; 153e12c5d1SDavid du Colombier evenup[icol] = 0; 163e12c5d1SDavid du Colombier cll[icol][0] = 0; 173e12c5d1SDavid du Colombier for (i = 0; i < MAXHEAD; i++) { 183e12c5d1SDavid du Colombier csize[icol][i][0] = 0; 193e12c5d1SDavid du Colombier vsize[icol][i][0] = 0; 203e12c5d1SDavid du Colombier font[icol][i][0] = lefline[icol][i] = 0; 213e12c5d1SDavid du Colombier flags[icol][i] = 0; 223e12c5d1SDavid du Colombier style[icol][i] = 'l'; 233e12c5d1SDavid du Colombier } 243e12c5d1SDavid du Colombier } 253e12c5d1SDavid du Colombier for (i = 0; i < MAXHEAD; i++) 263e12c5d1SDavid du Colombier lefline[qcol][i] = 0; /* fixes sample55 looping */ 273e12c5d1SDavid du Colombier nclin = ncol = 0; 283e12c5d1SDavid du Colombier oncol = 0; 293e12c5d1SDavid du Colombier left1flg = rightl = 0; 303e12c5d1SDavid du Colombier readspec(); 31*219b2ee8SDavid du Colombier Bprint(&tabout, ".rm"); 323e12c5d1SDavid du Colombier for (i = 0; i < ncol; i++) 33*219b2ee8SDavid du Colombier Bprint(&tabout, " %2s", reg(i, CRIGHT)); 34*219b2ee8SDavid du Colombier Bprint(&tabout, "\n"); 353e12c5d1SDavid du Colombier } 363e12c5d1SDavid du Colombier 373e12c5d1SDavid du Colombier 383e12c5d1SDavid du Colombier void 393e12c5d1SDavid du Colombier readspec(void) 403e12c5d1SDavid du Colombier { 413e12c5d1SDavid du Colombier int icol, c, sawchar, stopc, i; 423e12c5d1SDavid du Colombier char sn[10], *snp, *temp; 433e12c5d1SDavid du Colombier 443e12c5d1SDavid du Colombier sawchar = icol = 0; 453e12c5d1SDavid du Colombier while (c = get1char()) { 463e12c5d1SDavid du Colombier switch (c) { 473e12c5d1SDavid du Colombier default: 483e12c5d1SDavid du Colombier if (c != tab) 493e12c5d1SDavid du Colombier error("bad table specification character"); 503e12c5d1SDavid du Colombier case ' ': /* note this is also case tab */ 513e12c5d1SDavid du Colombier continue; 523e12c5d1SDavid du Colombier case '\n': 533e12c5d1SDavid du Colombier if (sawchar == 0) 543e12c5d1SDavid du Colombier continue; 553e12c5d1SDavid du Colombier case ',': 563e12c5d1SDavid du Colombier case '.': /* end of table specification */ 573e12c5d1SDavid du Colombier ncol = max(ncol, icol); 583e12c5d1SDavid du Colombier if (lefline[ncol][nclin] > 0) { 593e12c5d1SDavid du Colombier ncol++; 603e12c5d1SDavid du Colombier rightl++; 613e12c5d1SDavid du Colombier }; 623e12c5d1SDavid du Colombier if (sawchar) 633e12c5d1SDavid du Colombier nclin++; 643e12c5d1SDavid du Colombier if (nclin >= MAXHEAD) 653e12c5d1SDavid du Colombier error("too many lines in specification"); 663e12c5d1SDavid du Colombier icol = 0; 673e12c5d1SDavid du Colombier if (ncol == 0 || nclin == 0) 683e12c5d1SDavid du Colombier error("no specification"); 693e12c5d1SDavid du Colombier if (c == '.') { 703e12c5d1SDavid du Colombier while ((c = get1char()) && c != '\n') 713e12c5d1SDavid du Colombier if (c != ' ' && c != '\t') 723e12c5d1SDavid du Colombier error("dot not last character on format line"); 733e12c5d1SDavid du Colombier /* fix up sep - default is 3 except at edge */ 743e12c5d1SDavid du Colombier for (icol = 0; icol < ncol; icol++) 753e12c5d1SDavid du Colombier if (sep[icol] < 0) 763e12c5d1SDavid du Colombier sep[icol] = icol + 1 < ncol ? 3 : 2; 773e12c5d1SDavid du Colombier if (oncol == 0) 783e12c5d1SDavid du Colombier oncol = ncol; 793e12c5d1SDavid du Colombier else if (oncol + 2 < ncol) 803e12c5d1SDavid du Colombier error("tried to widen table in T&, not allowed"); 813e12c5d1SDavid du Colombier return; 823e12c5d1SDavid du Colombier } 833e12c5d1SDavid du Colombier sawchar = 0; 843e12c5d1SDavid du Colombier continue; 853e12c5d1SDavid du Colombier case 'C': 863e12c5d1SDavid du Colombier case 'S': 873e12c5d1SDavid du Colombier case 'R': 883e12c5d1SDavid du Colombier case 'N': 893e12c5d1SDavid du Colombier case 'L': 903e12c5d1SDavid du Colombier case 'A': 913e12c5d1SDavid du Colombier c += ('a' - 'A'); 923e12c5d1SDavid du Colombier case '_': 933e12c5d1SDavid du Colombier if (c == '_') 943e12c5d1SDavid du Colombier c = '-'; 953e12c5d1SDavid du Colombier case '=': 963e12c5d1SDavid du Colombier case '-': 973e12c5d1SDavid du Colombier case '^': 983e12c5d1SDavid du Colombier case 'c': 993e12c5d1SDavid du Colombier case 's': 1003e12c5d1SDavid du Colombier case 'n': 1013e12c5d1SDavid du Colombier case 'r': 1023e12c5d1SDavid du Colombier case 'l': 1033e12c5d1SDavid du Colombier case 'a': 1043e12c5d1SDavid du Colombier style[icol][nclin] = c; 1053e12c5d1SDavid du Colombier if (c == 's' && icol <= 0) 1063e12c5d1SDavid du Colombier error("first column can not be S-type"); 1073e12c5d1SDavid du Colombier if (c == 's' && style[icol-1][nclin] == 'a') { 108*219b2ee8SDavid du Colombier Bprint(&tabout, ".tm warning: can't span a-type cols, changed to l\n"); 1093e12c5d1SDavid du Colombier style[icol-1][nclin] = 'l'; 1103e12c5d1SDavid du Colombier } 1113e12c5d1SDavid du Colombier if (c == 's' && style[icol-1][nclin] == 'n') { 112*219b2ee8SDavid du Colombier Bprint(&tabout, ".tm warning: can't span n-type cols, changed to c\n"); 1133e12c5d1SDavid du Colombier style[icol-1][nclin] = 'c'; 1143e12c5d1SDavid du Colombier } 1153e12c5d1SDavid du Colombier icol++; 1163e12c5d1SDavid du Colombier if (c == '^' && nclin <= 0) 1173e12c5d1SDavid du Colombier error("first row can not contain vertical span"); 1183e12c5d1SDavid du Colombier if (icol > qcol) 1193e12c5d1SDavid du Colombier error("too many columns in table"); 1203e12c5d1SDavid du Colombier sawchar = 1; 1213e12c5d1SDavid du Colombier continue; 1223e12c5d1SDavid du Colombier case 'b': 1233e12c5d1SDavid du Colombier case 'i': 1243e12c5d1SDavid du Colombier c += 'A' - 'a'; 1253e12c5d1SDavid du Colombier case 'B': 1263e12c5d1SDavid du Colombier case 'I': 1273e12c5d1SDavid du Colombier if (icol == 0) 1283e12c5d1SDavid du Colombier continue; 1293e12c5d1SDavid du Colombier snp = font[icol-1][nclin]; 1303e12c5d1SDavid du Colombier snp[0] = (c == 'I' ? '2' : '3'); 1313e12c5d1SDavid du Colombier snp[1] = 0; 1323e12c5d1SDavid du Colombier continue; 1333e12c5d1SDavid du Colombier case 't': 1343e12c5d1SDavid du Colombier case 'T': 1353e12c5d1SDavid du Colombier if (icol > 0) 1363e12c5d1SDavid du Colombier flags[icol-1][nclin] |= CTOP; 1373e12c5d1SDavid du Colombier continue; 1383e12c5d1SDavid du Colombier case 'd': 1393e12c5d1SDavid du Colombier case 'D': 1403e12c5d1SDavid du Colombier if (icol > 0) 1413e12c5d1SDavid du Colombier flags[icol-1][nclin] |= CDOWN; 1423e12c5d1SDavid du Colombier continue; 1433e12c5d1SDavid du Colombier case 'f': 1443e12c5d1SDavid du Colombier case 'F': 1453e12c5d1SDavid du Colombier if (icol == 0) 1463e12c5d1SDavid du Colombier continue; 1473e12c5d1SDavid du Colombier snp = font[icol-1][nclin]; 1483e12c5d1SDavid du Colombier snp[0] = snp[1] = stopc = 0; 1493e12c5d1SDavid du Colombier for (i = 0; i < 2; i++) { 1503e12c5d1SDavid du Colombier c = get1char(); 1513e12c5d1SDavid du Colombier if (i == 0 && c == '(') { 1523e12c5d1SDavid du Colombier stopc = ')'; 1533e12c5d1SDavid du Colombier c = get1char(); 1543e12c5d1SDavid du Colombier } 1553e12c5d1SDavid du Colombier if (c == 0) 1563e12c5d1SDavid du Colombier break; 1573e12c5d1SDavid du Colombier if (c == stopc) { 1583e12c5d1SDavid du Colombier stopc = 0; 1593e12c5d1SDavid du Colombier break; 1603e12c5d1SDavid du Colombier } 1613e12c5d1SDavid du Colombier if (stopc == 0) 1623e12c5d1SDavid du Colombier if (c == ' ' || c == tab ) 1633e12c5d1SDavid du Colombier break; 1643e12c5d1SDavid du Colombier if (c == '\n' || c == '|') { 1653e12c5d1SDavid du Colombier un1getc(c); 1663e12c5d1SDavid du Colombier break; 1673e12c5d1SDavid du Colombier } 1683e12c5d1SDavid du Colombier snp[i] = c; 1693e12c5d1SDavid du Colombier if (c >= '0' && c <= '9') 1703e12c5d1SDavid du Colombier break; 1713e12c5d1SDavid du Colombier } 1723e12c5d1SDavid du Colombier if (stopc) 1733e12c5d1SDavid du Colombier if (get1char() != stopc) 1743e12c5d1SDavid du Colombier error("Nonterminated font name"); 1753e12c5d1SDavid du Colombier continue; 1763e12c5d1SDavid du Colombier case 'P': 1773e12c5d1SDavid du Colombier case 'p': 1783e12c5d1SDavid du Colombier if (icol <= 0) 1793e12c5d1SDavid du Colombier continue; 1803e12c5d1SDavid du Colombier temp = snp = csize[icol-1][nclin]; 1813e12c5d1SDavid du Colombier while (c = get1char()) { 1823e12c5d1SDavid du Colombier if (c == ' ' || c == tab || c == '\n') 1833e12c5d1SDavid du Colombier break; 1843e12c5d1SDavid du Colombier if (c == '-' || c == '+') 1853e12c5d1SDavid du Colombier if (snp > temp) 1863e12c5d1SDavid du Colombier break; 1873e12c5d1SDavid du Colombier else 1883e12c5d1SDavid du Colombier *snp++ = c; 1893e12c5d1SDavid du Colombier else if (digit(c)) 1903e12c5d1SDavid du Colombier *snp++ = c; 1913e12c5d1SDavid du Colombier else 1923e12c5d1SDavid du Colombier break; 1933e12c5d1SDavid du Colombier if (snp - temp > 4) 1943e12c5d1SDavid du Colombier error("point size too large"); 1953e12c5d1SDavid du Colombier } 1963e12c5d1SDavid du Colombier *snp = 0; 1973e12c5d1SDavid du Colombier if (atoi(temp) > 36) 1983e12c5d1SDavid du Colombier error("point size unreasonable"); 1993e12c5d1SDavid du Colombier un1getc (c); 2003e12c5d1SDavid du Colombier continue; 2013e12c5d1SDavid du Colombier case 'V': 2023e12c5d1SDavid du Colombier case 'v': 2033e12c5d1SDavid du Colombier if (icol <= 0) 2043e12c5d1SDavid du Colombier continue; 2053e12c5d1SDavid du Colombier temp = snp = vsize[icol-1][nclin]; 2063e12c5d1SDavid du Colombier while (c = get1char()) { 2073e12c5d1SDavid du Colombier if (c == ' ' || c == tab || c == '\n') 2083e12c5d1SDavid du Colombier break; 2093e12c5d1SDavid du Colombier if (c == '-' || c == '+') 2103e12c5d1SDavid du Colombier if (snp > temp) 2113e12c5d1SDavid du Colombier break; 2123e12c5d1SDavid du Colombier else 2133e12c5d1SDavid du Colombier *snp++ = c; 2143e12c5d1SDavid du Colombier else if (digit(c)) 2153e12c5d1SDavid du Colombier *snp++ = c; 2163e12c5d1SDavid du Colombier else 2173e12c5d1SDavid du Colombier break; 2183e12c5d1SDavid du Colombier if (snp - temp > 4) 2193e12c5d1SDavid du Colombier error("vertical spacing value too large"); 2203e12c5d1SDavid du Colombier } 2213e12c5d1SDavid du Colombier *snp = 0; 2223e12c5d1SDavid du Colombier un1getc(c); 2233e12c5d1SDavid du Colombier continue; 2243e12c5d1SDavid du Colombier case 'w': 2253e12c5d1SDavid du Colombier case 'W': 2263e12c5d1SDavid du Colombier snp = cll [icol-1]; 2273e12c5d1SDavid du Colombier /* Dale Smith didn't like this check - possible to have two text blocks 2283e12c5d1SDavid du Colombier of different widths now .... 2293e12c5d1SDavid du Colombier if (*snp) 2303e12c5d1SDavid du Colombier { 231*219b2ee8SDavid du Colombier Bprint(&tabout, "Ignored second width specification"); 2323e12c5d1SDavid du Colombier continue; 2333e12c5d1SDavid du Colombier } 2343e12c5d1SDavid du Colombier /* end commented out code ... */ 2353e12c5d1SDavid du Colombier stopc = 0; 2363e12c5d1SDavid du Colombier while (c = get1char()) { 2373e12c5d1SDavid du Colombier if (snp == cll[icol-1] && c == '(') { 2383e12c5d1SDavid du Colombier stopc = ')'; 2393e12c5d1SDavid du Colombier continue; 2403e12c5d1SDavid du Colombier } 2413e12c5d1SDavid du Colombier if ( !stopc && (c > '9' || c < '0')) 2423e12c5d1SDavid du Colombier break; 2433e12c5d1SDavid du Colombier if (stopc && c == stopc) 2443e12c5d1SDavid du Colombier break; 2453e12c5d1SDavid du Colombier *snp++ = c; 2463e12c5d1SDavid du Colombier } 2473e12c5d1SDavid du Colombier *snp = 0; 2483e12c5d1SDavid du Colombier if (snp - cll[icol-1] > CLLEN) 2493e12c5d1SDavid du Colombier error ("column width too long"); 2503e12c5d1SDavid du Colombier if (!stopc) 2513e12c5d1SDavid du Colombier un1getc(c); 2523e12c5d1SDavid du Colombier continue; 2533e12c5d1SDavid du Colombier case 'e': 2543e12c5d1SDavid du Colombier case 'E': 2553e12c5d1SDavid du Colombier if (icol < 1) 2563e12c5d1SDavid du Colombier continue; 2573e12c5d1SDavid du Colombier evenup[icol-1] = 1; 2583e12c5d1SDavid du Colombier evenflg = 1; 2593e12c5d1SDavid du Colombier continue; 2603e12c5d1SDavid du Colombier case 'z': 2613e12c5d1SDavid du Colombier case 'Z': /* zero width-ignre width this item */ 2623e12c5d1SDavid du Colombier if (icol < 1) 2633e12c5d1SDavid du Colombier continue; 2643e12c5d1SDavid du Colombier flags[icol-1][nclin] |= ZEROW; 2653e12c5d1SDavid du Colombier continue; 2663e12c5d1SDavid du Colombier case 'u': 2673e12c5d1SDavid du Colombier case 'U': /* half line up */ 2683e12c5d1SDavid du Colombier if (icol < 1) 2693e12c5d1SDavid du Colombier continue; 2703e12c5d1SDavid du Colombier flags[icol-1][nclin] |= HALFUP; 2713e12c5d1SDavid du Colombier continue; 2723e12c5d1SDavid du Colombier case '0': 2733e12c5d1SDavid du Colombier case '1': 2743e12c5d1SDavid du Colombier case '2': 2753e12c5d1SDavid du Colombier case '3': 2763e12c5d1SDavid du Colombier case '4': 2773e12c5d1SDavid du Colombier case '5': 2783e12c5d1SDavid du Colombier case '6': 2793e12c5d1SDavid du Colombier case '7': 2803e12c5d1SDavid du Colombier case '8': 2813e12c5d1SDavid du Colombier case '9': 2823e12c5d1SDavid du Colombier sn[0] = c; 2833e12c5d1SDavid du Colombier snp = sn + 1; 2843e12c5d1SDavid du Colombier while (digit(*snp++ = c = get1char())) 2853e12c5d1SDavid du Colombier ; 2863e12c5d1SDavid du Colombier un1getc(c); 2873e12c5d1SDavid du Colombier sep[icol-1] = max(sep[icol-1], numb(sn)); 2883e12c5d1SDavid du Colombier continue; 2893e12c5d1SDavid du Colombier case '|': 2903e12c5d1SDavid du Colombier lefline[icol][nclin]++; 2913e12c5d1SDavid du Colombier if (icol == 0) 2923e12c5d1SDavid du Colombier left1flg = 1; 2933e12c5d1SDavid du Colombier continue; 2943e12c5d1SDavid du Colombier } 2953e12c5d1SDavid du Colombier } 2963e12c5d1SDavid du Colombier error("EOF reading table specification"); 2973e12c5d1SDavid du Colombier } 2983e12c5d1SDavid du Colombier 2993e12c5d1SDavid du Colombier 3003e12c5d1SDavid du Colombier int 3013e12c5d1SDavid du Colombier findcol(void) 3023e12c5d1SDavid du Colombier { 3033e12c5d1SDavid du Colombier # define FLNLIM 200 3043e12c5d1SDavid du Colombier /* this counts the number of columns and then puts the line back*/ 3053e12c5d1SDavid du Colombier char *s, line[FLNLIM+2], *p; 3063e12c5d1SDavid du Colombier int c, n = 0, inpar = 0; 3073e12c5d1SDavid du Colombier 308*219b2ee8SDavid du Colombier while ((c = get1char()) != 0 && c == ' ') 3093e12c5d1SDavid du Colombier ; 3103e12c5d1SDavid du Colombier if (c != '\n') 3113e12c5d1SDavid du Colombier un1getc(c); 3123e12c5d1SDavid du Colombier for (s = line; *s = c = get1char(); s++) { 3133e12c5d1SDavid du Colombier if (c == ')') 3143e12c5d1SDavid du Colombier inpar = 0; 3153e12c5d1SDavid du Colombier if (inpar) 3163e12c5d1SDavid du Colombier continue; 317*219b2ee8SDavid du Colombier if (c == '\n' || c == 0 || c == '.' || c == ',') 3183e12c5d1SDavid du Colombier break; 3193e12c5d1SDavid du Colombier else if (c == '(') 3203e12c5d1SDavid du Colombier inpar = 1; 3213e12c5d1SDavid du Colombier else if (s >= line + FLNLIM) 3223e12c5d1SDavid du Colombier error("too long spec line"); 3233e12c5d1SDavid du Colombier } 3243e12c5d1SDavid du Colombier for (p = line; p < s; p++) 3253e12c5d1SDavid du Colombier switch (*p) { 3263e12c5d1SDavid du Colombier case 'l': 3273e12c5d1SDavid du Colombier case 'r': 3283e12c5d1SDavid du Colombier case 'c': 3293e12c5d1SDavid du Colombier case 'n': 3303e12c5d1SDavid du Colombier case 'a': 3313e12c5d1SDavid du Colombier case 's': 3323e12c5d1SDavid du Colombier case 'L': 3333e12c5d1SDavid du Colombier case 'R': 3343e12c5d1SDavid du Colombier case 'C': 3353e12c5d1SDavid du Colombier case 'N': 3363e12c5d1SDavid du Colombier case 'A': 3373e12c5d1SDavid du Colombier case 'S': 3383e12c5d1SDavid du Colombier case '-': 3393e12c5d1SDavid du Colombier case '=': 3403e12c5d1SDavid du Colombier case '_': 3413e12c5d1SDavid du Colombier n++; 3423e12c5d1SDavid du Colombier } 3433e12c5d1SDavid du Colombier while (p >= line) 3443e12c5d1SDavid du Colombier un1getc(*p--); 3453e12c5d1SDavid du Colombier return(n); 3463e12c5d1SDavid du Colombier } 3473e12c5d1SDavid du Colombier 3483e12c5d1SDavid du Colombier 3493e12c5d1SDavid du Colombier void 3503e12c5d1SDavid du Colombier garray(int qcol) 3513e12c5d1SDavid du Colombier { 3523e12c5d1SDavid du Colombier style = (int (*)[]) getcore(MAXHEAD * qcol, sizeof(int)); 3533e12c5d1SDavid du Colombier evenup = (int *) getcore(qcol, sizeof(int)); 3543e12c5d1SDavid du Colombier lefline = (int (*)[]) getcore(MAXHEAD * (qcol + 1), sizeof (int)); /*+1 for sample55 loop - others may need it too*/ 3553e12c5d1SDavid du Colombier font = (char (*)[][2]) getcore(MAXHEAD * qcol, 2); 3563e12c5d1SDavid du Colombier csize = (char (*)[MAXHEAD][4]) getcore(MAXHEAD * qcol, 4); 3573e12c5d1SDavid du Colombier vsize = (char (*)[MAXHEAD][4]) getcore(MAXHEAD * qcol, 4); 3583e12c5d1SDavid du Colombier flags = (int (*)[]) getcore(MAXHEAD * qcol, sizeof(int)); 3593e12c5d1SDavid du Colombier cll = (char (*)[])getcore(qcol, CLLEN); 3603e12c5d1SDavid du Colombier sep = (int *) getcore(qcol + 1, sizeof(int)); 3613e12c5d1SDavid du Colombier sep++; /* sep[-1] must be legal */ 3623e12c5d1SDavid du Colombier used = (int *) getcore(qcol + 1, sizeof(int)); 3633e12c5d1SDavid du Colombier lused = (int *) getcore(qcol + 1, sizeof(int)); 3643e12c5d1SDavid du Colombier rused = (int *) getcore(qcol + 1, sizeof(int)); 3653e12c5d1SDavid du Colombier doubled = (int *) getcore(qcol + 1, sizeof(int)); 3663e12c5d1SDavid du Colombier acase = (int *) getcore(qcol + 1, sizeof(int)); 3673e12c5d1SDavid du Colombier topat = (int *) getcore(qcol + 1, sizeof(int)); 3683e12c5d1SDavid du Colombier } 3693e12c5d1SDavid du Colombier 3703e12c5d1SDavid du Colombier 3713e12c5d1SDavid du Colombier char * 3723e12c5d1SDavid du Colombier getcore(int a, int b) 3733e12c5d1SDavid du Colombier { 3743e12c5d1SDavid du Colombier char *x; 3753e12c5d1SDavid du Colombier x = calloc(a, b); 3763e12c5d1SDavid du Colombier if (x == 0) 3773e12c5d1SDavid du Colombier error("Couldn't get memory"); 3783e12c5d1SDavid du Colombier return(x); 3793e12c5d1SDavid du Colombier } 3803e12c5d1SDavid du Colombier 3813e12c5d1SDavid du Colombier 3823e12c5d1SDavid du Colombier void 3833e12c5d1SDavid du Colombier freearr(void) 3843e12c5d1SDavid du Colombier { 3853e12c5d1SDavid du Colombier free(style); 3863e12c5d1SDavid du Colombier free(evenup); 3873e12c5d1SDavid du Colombier free(lefline); 3883e12c5d1SDavid du Colombier free(flags); 3893e12c5d1SDavid du Colombier free(font); 3903e12c5d1SDavid du Colombier free(csize); 3913e12c5d1SDavid du Colombier free(vsize); 3923e12c5d1SDavid du Colombier free(cll); 3933e12c5d1SDavid du Colombier free(--sep); /* netnews says this should be --sep because incremented earlier! */ 3943e12c5d1SDavid du Colombier free(used); 3953e12c5d1SDavid du Colombier free(lused); 3963e12c5d1SDavid du Colombier free(rused); 3973e12c5d1SDavid du Colombier free(doubled); 3983e12c5d1SDavid du Colombier free(acase); 3993e12c5d1SDavid du Colombier free(topat); 4003e12c5d1SDavid du Colombier } 4013e12c5d1SDavid du Colombier 4023e12c5d1SDavid du Colombier 403