Blame


1 5cedca1b 2004-05-15 devnull /* t4.c: read table specification */
2 5cedca1b 2004-05-15 devnull # include "t.h"
3 5cedca1b 2004-05-15 devnull int oncol;
4 5cedca1b 2004-05-15 devnull
5 5cedca1b 2004-05-15 devnull void
6 5cedca1b 2004-05-15 devnull getspec(void)
7 5cedca1b 2004-05-15 devnull {
8 5cedca1b 2004-05-15 devnull int icol, i;
9 5cedca1b 2004-05-15 devnull
10 5cedca1b 2004-05-15 devnull qcol = findcol() + 1;/* must allow one extra for line at right */
11 5cedca1b 2004-05-15 devnull garray(qcol);
12 5cedca1b 2004-05-15 devnull sep[-1] = -1;
13 5cedca1b 2004-05-15 devnull for (icol = 0; icol < qcol; icol++) {
14 5cedca1b 2004-05-15 devnull sep[icol] = -1;
15 5cedca1b 2004-05-15 devnull evenup[icol] = 0;
16 5cedca1b 2004-05-15 devnull cll[icol][0] = 0;
17 5cedca1b 2004-05-15 devnull for (i = 0; i < MAXHEAD; i++) {
18 5cedca1b 2004-05-15 devnull csize[icol][i][0] = 0;
19 5cedca1b 2004-05-15 devnull vsize[icol][i][0] = 0;
20 5cedca1b 2004-05-15 devnull font[icol][i][0] = lefline[icol][i] = 0;
21 5cedca1b 2004-05-15 devnull flags[icol][i] = 0;
22 5cedca1b 2004-05-15 devnull style[icol][i] = 'l';
23 5cedca1b 2004-05-15 devnull }
24 5cedca1b 2004-05-15 devnull }
25 5cedca1b 2004-05-15 devnull for (i = 0; i < MAXHEAD; i++)
26 5cedca1b 2004-05-15 devnull lefline[qcol][i] = 0; /* fixes sample55 looping */
27 5cedca1b 2004-05-15 devnull nclin = ncol = 0;
28 5cedca1b 2004-05-15 devnull oncol = 0;
29 5cedca1b 2004-05-15 devnull left1flg = rightl = 0;
30 5cedca1b 2004-05-15 devnull readspec();
31 8a3cbc15 2004-05-17 devnull Bprint(&tabout, ".rm");
32 5cedca1b 2004-05-15 devnull for (i = 0; i < ncol; i++)
33 8a3cbc15 2004-05-17 devnull Bprint(&tabout, " %2s", reg(i, CRIGHT));
34 8a3cbc15 2004-05-17 devnull Bprint(&tabout, "\n");
35 5cedca1b 2004-05-15 devnull }
36 5cedca1b 2004-05-15 devnull
37 5cedca1b 2004-05-15 devnull
38 5cedca1b 2004-05-15 devnull void
39 5cedca1b 2004-05-15 devnull readspec(void)
40 5cedca1b 2004-05-15 devnull {
41 5cedca1b 2004-05-15 devnull int icol, c, sawchar, stopc, i;
42 5cedca1b 2004-05-15 devnull char sn[10], *snp, *temp;
43 5cedca1b 2004-05-15 devnull
44 5cedca1b 2004-05-15 devnull sawchar = icol = 0;
45 8a3cbc15 2004-05-17 devnull while (c = get1char()) {
46 5cedca1b 2004-05-15 devnull switch (c) {
47 5cedca1b 2004-05-15 devnull default:
48 5cedca1b 2004-05-15 devnull if (c != tab) {
49 5cedca1b 2004-05-15 devnull char buf[64];
50 8a3cbc15 2004-05-17 devnull sprint(buf, "bad table specification character %c", c);
51 5cedca1b 2004-05-15 devnull error(buf);
52 5cedca1b 2004-05-15 devnull }
53 5cedca1b 2004-05-15 devnull case ' ': /* note this is also case tab */
54 5cedca1b 2004-05-15 devnull continue;
55 5cedca1b 2004-05-15 devnull case '\n':
56 fa325e9b 2020-01-10 cross if (sawchar == 0)
57 5cedca1b 2004-05-15 devnull continue;
58 5cedca1b 2004-05-15 devnull case ',':
59 5cedca1b 2004-05-15 devnull case '.': /* end of table specification */
60 5cedca1b 2004-05-15 devnull ncol = max(ncol, icol);
61 5cedca1b 2004-05-15 devnull if (lefline[ncol][nclin] > 0) {
62 fa325e9b 2020-01-10 cross ncol++;
63 5cedca1b 2004-05-15 devnull rightl++;
64 5cedca1b 2004-05-15 devnull };
65 5cedca1b 2004-05-15 devnull if (sawchar)
66 5cedca1b 2004-05-15 devnull nclin++;
67 5cedca1b 2004-05-15 devnull if (nclin >= MAXHEAD)
68 5cedca1b 2004-05-15 devnull error("too many lines in specification");
69 5cedca1b 2004-05-15 devnull icol = 0;
70 5cedca1b 2004-05-15 devnull if (ncol == 0 || nclin == 0)
71 5cedca1b 2004-05-15 devnull error("no specification");
72 5cedca1b 2004-05-15 devnull if (c == '.') {
73 5cedca1b 2004-05-15 devnull while ((c = get1char()) && c != '\n')
74 5cedca1b 2004-05-15 devnull if (c != ' ' && c != '\t')
75 5cedca1b 2004-05-15 devnull error("dot not last character on format line");
76 5cedca1b 2004-05-15 devnull /* fix up sep - default is 3 except at edge */
77 5cedca1b 2004-05-15 devnull for (icol = 0; icol < ncol; icol++)
78 5cedca1b 2004-05-15 devnull if (sep[icol] < 0)
79 5cedca1b 2004-05-15 devnull sep[icol] = icol + 1 < ncol ? 3 : 2;
80 5cedca1b 2004-05-15 devnull if (oncol == 0)
81 5cedca1b 2004-05-15 devnull oncol = ncol;
82 5cedca1b 2004-05-15 devnull else if (oncol + 2 < ncol)
83 5cedca1b 2004-05-15 devnull error("tried to widen table in T&, not allowed");
84 5cedca1b 2004-05-15 devnull return;
85 5cedca1b 2004-05-15 devnull }
86 5cedca1b 2004-05-15 devnull sawchar = 0;
87 5cedca1b 2004-05-15 devnull continue;
88 fa325e9b 2020-01-10 cross case 'C':
89 fa325e9b 2020-01-10 cross case 'S':
90 fa325e9b 2020-01-10 cross case 'R':
91 fa325e9b 2020-01-10 cross case 'N':
92 fa325e9b 2020-01-10 cross case 'L':
93 5cedca1b 2004-05-15 devnull case 'A':
94 5cedca1b 2004-05-15 devnull c += ('a' - 'A');
95 fa325e9b 2020-01-10 cross case '_':
96 fa325e9b 2020-01-10 cross if (c == '_')
97 5cedca1b 2004-05-15 devnull c = '-';
98 fa325e9b 2020-01-10 cross case '=':
99 5cedca1b 2004-05-15 devnull case '-':
100 5cedca1b 2004-05-15 devnull case '^':
101 fa325e9b 2020-01-10 cross case 'c':
102 fa325e9b 2020-01-10 cross case 's':
103 fa325e9b 2020-01-10 cross case 'n':
104 fa325e9b 2020-01-10 cross case 'r':
105 fa325e9b 2020-01-10 cross case 'l':
106 5cedca1b 2004-05-15 devnull case 'a':
107 5cedca1b 2004-05-15 devnull style[icol][nclin] = c;
108 5cedca1b 2004-05-15 devnull if (c == 's' && icol <= 0)
109 5cedca1b 2004-05-15 devnull error("first column can not be S-type");
110 5cedca1b 2004-05-15 devnull if (c == 's' && style[icol-1][nclin] == 'a') {
111 8a3cbc15 2004-05-17 devnull Bprint(&tabout, ".tm warning: can't span a-type cols, changed to l\n");
112 5cedca1b 2004-05-15 devnull style[icol-1][nclin] = 'l';
113 5cedca1b 2004-05-15 devnull }
114 5cedca1b 2004-05-15 devnull if (c == 's' && style[icol-1][nclin] == 'n') {
115 8a3cbc15 2004-05-17 devnull Bprint(&tabout, ".tm warning: can't span n-type cols, changed to c\n");
116 5cedca1b 2004-05-15 devnull style[icol-1][nclin] = 'c';
117 5cedca1b 2004-05-15 devnull }
118 5cedca1b 2004-05-15 devnull icol++;
119 5cedca1b 2004-05-15 devnull if (c == '^' && nclin <= 0)
120 5cedca1b 2004-05-15 devnull error("first row can not contain vertical span");
121 5cedca1b 2004-05-15 devnull if (icol > qcol)
122 5cedca1b 2004-05-15 devnull error("too many columns in table");
123 5cedca1b 2004-05-15 devnull sawchar = 1;
124 5cedca1b 2004-05-15 devnull continue;
125 fa325e9b 2020-01-10 cross case 'b':
126 5cedca1b 2004-05-15 devnull case 'i':
127 5cedca1b 2004-05-15 devnull c += 'A' - 'a';
128 fa325e9b 2020-01-10 cross case 'B':
129 5cedca1b 2004-05-15 devnull case 'I':
130 fa325e9b 2020-01-10 cross if (icol == 0)
131 5cedca1b 2004-05-15 devnull continue;
132 5cedca1b 2004-05-15 devnull snp = font[icol-1][nclin];
133 5cedca1b 2004-05-15 devnull snp[0] = (c == 'I' ? '2' : '3');
134 5cedca1b 2004-05-15 devnull snp[1] = 0;
135 5cedca1b 2004-05-15 devnull continue;
136 fa325e9b 2020-01-10 cross case 't':
137 5cedca1b 2004-05-15 devnull case 'T':
138 5cedca1b 2004-05-15 devnull if (icol > 0)
139 5cedca1b 2004-05-15 devnull flags[icol-1][nclin] |= CTOP;
140 5cedca1b 2004-05-15 devnull continue;
141 fa325e9b 2020-01-10 cross case 'd':
142 5cedca1b 2004-05-15 devnull case 'D':
143 5cedca1b 2004-05-15 devnull if (icol > 0)
144 5cedca1b 2004-05-15 devnull flags[icol-1][nclin] |= CDOWN;
145 5cedca1b 2004-05-15 devnull continue;
146 fa325e9b 2020-01-10 cross case 'f':
147 5cedca1b 2004-05-15 devnull case 'F':
148 fa325e9b 2020-01-10 cross if (icol == 0)
149 5cedca1b 2004-05-15 devnull continue;
150 5cedca1b 2004-05-15 devnull snp = font[icol-1][nclin];
151 5cedca1b 2004-05-15 devnull snp[0] = snp[1] = stopc = 0;
152 5cedca1b 2004-05-15 devnull for (i = 0; i < 2; i++) {
153 5cedca1b 2004-05-15 devnull c = get1char();
154 5cedca1b 2004-05-15 devnull if (i == 0 && c == '(') {
155 5cedca1b 2004-05-15 devnull stopc = ')';
156 5cedca1b 2004-05-15 devnull c = get1char();
157 5cedca1b 2004-05-15 devnull }
158 fa325e9b 2020-01-10 cross if (c == 0)
159 5cedca1b 2004-05-15 devnull break;
160 5cedca1b 2004-05-15 devnull if (c == stopc) {
161 fa325e9b 2020-01-10 cross stopc = 0;
162 5cedca1b 2004-05-15 devnull break;
163 5cedca1b 2004-05-15 devnull }
164 fa325e9b 2020-01-10 cross if (stopc == 0)
165 fa325e9b 2020-01-10 cross if (c == ' ' || c == tab )
166 5cedca1b 2004-05-15 devnull break;
167 5cedca1b 2004-05-15 devnull if (c == '\n' || c == '|') {
168 fa325e9b 2020-01-10 cross un1getc(c);
169 5cedca1b 2004-05-15 devnull break;
170 5cedca1b 2004-05-15 devnull }
171 5cedca1b 2004-05-15 devnull snp[i] = c;
172 fa325e9b 2020-01-10 cross if (c >= '0' && c <= '9')
173 5cedca1b 2004-05-15 devnull break;
174 5cedca1b 2004-05-15 devnull }
175 fa325e9b 2020-01-10 cross if (stopc)
176 5cedca1b 2004-05-15 devnull if (get1char() != stopc)
177 5cedca1b 2004-05-15 devnull error("Nonterminated font name");
178 5cedca1b 2004-05-15 devnull continue;
179 fa325e9b 2020-01-10 cross case 'P':
180 5cedca1b 2004-05-15 devnull case 'p':
181 fa325e9b 2020-01-10 cross if (icol <= 0)
182 5cedca1b 2004-05-15 devnull continue;
183 5cedca1b 2004-05-15 devnull temp = snp = csize[icol-1][nclin];
184 8a3cbc15 2004-05-17 devnull while (c = get1char()) {
185 fa325e9b 2020-01-10 cross if (c == ' ' || c == tab || c == '\n')
186 5cedca1b 2004-05-15 devnull break;
187 5cedca1b 2004-05-15 devnull if (c == '-' || c == '+')
188 5cedca1b 2004-05-15 devnull if (snp > temp)
189 5cedca1b 2004-05-15 devnull break;
190 5cedca1b 2004-05-15 devnull else
191 5cedca1b 2004-05-15 devnull *snp++ = c;
192 5cedca1b 2004-05-15 devnull else if (digit(c))
193 5cedca1b 2004-05-15 devnull *snp++ = c;
194 fa325e9b 2020-01-10 cross else
195 5cedca1b 2004-05-15 devnull break;
196 5cedca1b 2004-05-15 devnull if (snp - temp > 4)
197 5cedca1b 2004-05-15 devnull error("point size too large");
198 5cedca1b 2004-05-15 devnull }
199 5cedca1b 2004-05-15 devnull *snp = 0;
200 5cedca1b 2004-05-15 devnull if (atoi(temp) > 36)
201 5cedca1b 2004-05-15 devnull error("point size unreasonable");
202 5cedca1b 2004-05-15 devnull un1getc (c);
203 5cedca1b 2004-05-15 devnull continue;
204 fa325e9b 2020-01-10 cross case 'V':
205 5cedca1b 2004-05-15 devnull case 'v':
206 fa325e9b 2020-01-10 cross if (icol <= 0)
207 5cedca1b 2004-05-15 devnull continue;
208 5cedca1b 2004-05-15 devnull temp = snp = vsize[icol-1][nclin];
209 8a3cbc15 2004-05-17 devnull while (c = get1char()) {
210 fa325e9b 2020-01-10 cross if (c == ' ' || c == tab || c == '\n')
211 5cedca1b 2004-05-15 devnull break;
212 5cedca1b 2004-05-15 devnull if (c == '-' || c == '+')
213 5cedca1b 2004-05-15 devnull if (snp > temp)
214 5cedca1b 2004-05-15 devnull break;
215 5cedca1b 2004-05-15 devnull else
216 5cedca1b 2004-05-15 devnull *snp++ = c;
217 5cedca1b 2004-05-15 devnull else if (digit(c))
218 5cedca1b 2004-05-15 devnull *snp++ = c;
219 fa325e9b 2020-01-10 cross else
220 5cedca1b 2004-05-15 devnull break;
221 5cedca1b 2004-05-15 devnull if (snp - temp > 4)
222 5cedca1b 2004-05-15 devnull error("vertical spacing value too large");
223 5cedca1b 2004-05-15 devnull }
224 5cedca1b 2004-05-15 devnull *snp = 0;
225 5cedca1b 2004-05-15 devnull un1getc(c);
226 5cedca1b 2004-05-15 devnull continue;
227 fa325e9b 2020-01-10 cross case 'w':
228 5cedca1b 2004-05-15 devnull case 'W':
229 5cedca1b 2004-05-15 devnull snp = cll [icol-1];
230 5cedca1b 2004-05-15 devnull /* Dale Smith didn't like this check - possible to have two text blocks
231 5cedca1b 2004-05-15 devnull of different widths now ....
232 5cedca1b 2004-05-15 devnull if (*snp)
233 5cedca1b 2004-05-15 devnull {
234 8a3cbc15 2004-05-17 devnull Bprint(&tabout, "Ignored second width specification");
235 5cedca1b 2004-05-15 devnull continue;
236 5cedca1b 2004-05-15 devnull }
237 5cedca1b 2004-05-15 devnull /* end commented out code ... */
238 5cedca1b 2004-05-15 devnull stopc = 0;
239 8a3cbc15 2004-05-17 devnull while (c = get1char()) {
240 5cedca1b 2004-05-15 devnull if (snp == cll[icol-1] && c == '(') {
241 5cedca1b 2004-05-15 devnull stopc = ')';
242 5cedca1b 2004-05-15 devnull continue;
243 5cedca1b 2004-05-15 devnull }
244 5cedca1b 2004-05-15 devnull if ( !stopc && (c > '9' || c < '0'))
245 5cedca1b 2004-05-15 devnull break;
246 5cedca1b 2004-05-15 devnull if (stopc && c == stopc)
247 5cedca1b 2004-05-15 devnull break;
248 5cedca1b 2004-05-15 devnull *snp++ = c;
249 5cedca1b 2004-05-15 devnull }
250 5cedca1b 2004-05-15 devnull *snp = 0;
251 5cedca1b 2004-05-15 devnull if (snp - cll[icol-1] > CLLEN)
252 5cedca1b 2004-05-15 devnull error ("column width too long");
253 5cedca1b 2004-05-15 devnull if (!stopc)
254 5cedca1b 2004-05-15 devnull un1getc(c);
255 5cedca1b 2004-05-15 devnull continue;
256 fa325e9b 2020-01-10 cross case 'e':
257 5cedca1b 2004-05-15 devnull case 'E':
258 fa325e9b 2020-01-10 cross if (icol < 1)
259 5cedca1b 2004-05-15 devnull continue;
260 5cedca1b 2004-05-15 devnull evenup[icol-1] = 1;
261 5cedca1b 2004-05-15 devnull evenflg = 1;
262 5cedca1b 2004-05-15 devnull continue;
263 fa325e9b 2020-01-10 cross case 'z':
264 5cedca1b 2004-05-15 devnull case 'Z': /* zero width-ignre width this item */
265 fa325e9b 2020-01-10 cross if (icol < 1)
266 5cedca1b 2004-05-15 devnull continue;
267 5cedca1b 2004-05-15 devnull flags[icol-1][nclin] |= ZEROW;
268 5cedca1b 2004-05-15 devnull continue;
269 fa325e9b 2020-01-10 cross case 'u':
270 5cedca1b 2004-05-15 devnull case 'U': /* half line up */
271 fa325e9b 2020-01-10 cross if (icol < 1)
272 5cedca1b 2004-05-15 devnull continue;
273 5cedca1b 2004-05-15 devnull flags[icol-1][nclin] |= HALFUP;
274 5cedca1b 2004-05-15 devnull continue;
275 fa325e9b 2020-01-10 cross case '0':
276 fa325e9b 2020-01-10 cross case '1':
277 fa325e9b 2020-01-10 cross case '2':
278 fa325e9b 2020-01-10 cross case '3':
279 5cedca1b 2004-05-15 devnull case '4':
280 fa325e9b 2020-01-10 cross case '5':
281 fa325e9b 2020-01-10 cross case '6':
282 fa325e9b 2020-01-10 cross case '7':
283 fa325e9b 2020-01-10 cross case '8':
284 5cedca1b 2004-05-15 devnull case '9':
285 5cedca1b 2004-05-15 devnull sn[0] = c;
286 5cedca1b 2004-05-15 devnull snp = sn + 1;
287 5cedca1b 2004-05-15 devnull while (digit(*snp++ = c = get1char()))
288 5cedca1b 2004-05-15 devnull ;
289 5cedca1b 2004-05-15 devnull un1getc(c);
290 5cedca1b 2004-05-15 devnull sep[icol-1] = max(sep[icol-1], numb(sn));
291 5cedca1b 2004-05-15 devnull continue;
292 5cedca1b 2004-05-15 devnull case '|':
293 5cedca1b 2004-05-15 devnull lefline[icol][nclin]++;
294 fa325e9b 2020-01-10 cross if (icol == 0)
295 5cedca1b 2004-05-15 devnull left1flg = 1;
296 5cedca1b 2004-05-15 devnull continue;
297 5cedca1b 2004-05-15 devnull }
298 5cedca1b 2004-05-15 devnull }
299 5cedca1b 2004-05-15 devnull error("EOF reading table specification");
300 5cedca1b 2004-05-15 devnull }
301 5cedca1b 2004-05-15 devnull
302 5cedca1b 2004-05-15 devnull
303 5cedca1b 2004-05-15 devnull int
304 5cedca1b 2004-05-15 devnull findcol(void)
305 5cedca1b 2004-05-15 devnull {
306 5cedca1b 2004-05-15 devnull # define FLNLIM 200
307 5cedca1b 2004-05-15 devnull /* this counts the number of columns and then puts the line back*/
308 5cedca1b 2004-05-15 devnull char *s, line[FLNLIM+2], *p;
309 5cedca1b 2004-05-15 devnull int c, n = 0, inpar = 0;
310 5cedca1b 2004-05-15 devnull
311 5cedca1b 2004-05-15 devnull while ((c = get1char()) != 0 && c == ' ')
312 5cedca1b 2004-05-15 devnull ;
313 5cedca1b 2004-05-15 devnull if (c != '\n')
314 5cedca1b 2004-05-15 devnull un1getc(c);
315 8a3cbc15 2004-05-17 devnull for (s = line; *s = c = get1char(); s++) {
316 fa325e9b 2020-01-10 cross if (c == ')')
317 5cedca1b 2004-05-15 devnull inpar = 0;
318 fa325e9b 2020-01-10 cross if (inpar)
319 5cedca1b 2004-05-15 devnull continue;
320 5cedca1b 2004-05-15 devnull if (c == '\n' || c == 0 || c == '.' || c == ',')
321 5cedca1b 2004-05-15 devnull break;
322 5cedca1b 2004-05-15 devnull else if (c == '(')
323 5cedca1b 2004-05-15 devnull inpar = 1;
324 5cedca1b 2004-05-15 devnull else if (s >= line + FLNLIM)
325 5cedca1b 2004-05-15 devnull error("too long spec line");
326 5cedca1b 2004-05-15 devnull }
327 5cedca1b 2004-05-15 devnull for (p = line; p < s; p++)
328 5cedca1b 2004-05-15 devnull switch (*p) {
329 fa325e9b 2020-01-10 cross case 'l':
330 fa325e9b 2020-01-10 cross case 'r':
331 fa325e9b 2020-01-10 cross case 'c':
332 fa325e9b 2020-01-10 cross case 'n':
333 fa325e9b 2020-01-10 cross case 'a':
334 5cedca1b 2004-05-15 devnull case 's':
335 fa325e9b 2020-01-10 cross case 'L':
336 fa325e9b 2020-01-10 cross case 'R':
337 fa325e9b 2020-01-10 cross case 'C':
338 fa325e9b 2020-01-10 cross case 'N':
339 fa325e9b 2020-01-10 cross case 'A':
340 5cedca1b 2004-05-15 devnull case 'S':
341 fa325e9b 2020-01-10 cross case '-':
342 fa325e9b 2020-01-10 cross case '=':
343 5cedca1b 2004-05-15 devnull case '_':
344 5cedca1b 2004-05-15 devnull n++;
345 5cedca1b 2004-05-15 devnull }
346 5cedca1b 2004-05-15 devnull while (p >= line)
347 5cedca1b 2004-05-15 devnull un1getc(*p--);
348 5cedca1b 2004-05-15 devnull return(n);
349 5cedca1b 2004-05-15 devnull }
350 5cedca1b 2004-05-15 devnull
351 5cedca1b 2004-05-15 devnull
352 5cedca1b 2004-05-15 devnull void
353 5cedca1b 2004-05-15 devnull garray(int qcol)
354 5cedca1b 2004-05-15 devnull {
355 5cedca1b 2004-05-15 devnull style = (int (*)[]) getcore(MAXHEAD * qcol, sizeof(int));
356 5cedca1b 2004-05-15 devnull evenup = (int *) getcore(qcol, sizeof(int));
357 5cedca1b 2004-05-15 devnull lefline = (int (*)[]) getcore(MAXHEAD * (qcol + 1), sizeof (int)); /*+1 for sample55 loop - others may need it too*/
358 5cedca1b 2004-05-15 devnull font = (char (*)[][2]) getcore(MAXHEAD * qcol, 2);
359 5cedca1b 2004-05-15 devnull csize = (char (*)[MAXHEAD][4]) getcore(MAXHEAD * qcol, 4);
360 5cedca1b 2004-05-15 devnull vsize = (char (*)[MAXHEAD][4]) getcore(MAXHEAD * qcol, 4);
361 5cedca1b 2004-05-15 devnull flags = (int (*)[]) getcore(MAXHEAD * qcol, sizeof(int));
362 5cedca1b 2004-05-15 devnull cll = (char (*)[])getcore(qcol, CLLEN);
363 5cedca1b 2004-05-15 devnull sep = (int *) getcore(qcol + 1, sizeof(int));
364 5cedca1b 2004-05-15 devnull sep++; /* sep[-1] must be legal */
365 5cedca1b 2004-05-15 devnull used = (int *) getcore(qcol + 1, sizeof(int));
366 5cedca1b 2004-05-15 devnull lused = (int *) getcore(qcol + 1, sizeof(int));
367 5cedca1b 2004-05-15 devnull rused = (int *) getcore(qcol + 1, sizeof(int));
368 5cedca1b 2004-05-15 devnull doubled = (int *) getcore(qcol + 1, sizeof(int));
369 5cedca1b 2004-05-15 devnull acase = (int *) getcore(qcol + 1, sizeof(int));
370 5cedca1b 2004-05-15 devnull topat = (int *) getcore(qcol + 1, sizeof(int));
371 5cedca1b 2004-05-15 devnull }
372 5cedca1b 2004-05-15 devnull
373 5cedca1b 2004-05-15 devnull
374 8a3cbc15 2004-05-17 devnull char *
375 5cedca1b 2004-05-15 devnull getcore(int a, int b)
376 5cedca1b 2004-05-15 devnull {
377 5cedca1b 2004-05-15 devnull char *x;
378 5cedca1b 2004-05-15 devnull x = calloc(a, b);
379 5cedca1b 2004-05-15 devnull if (x == 0)
380 5cedca1b 2004-05-15 devnull error("Couldn't get memory");
381 5cedca1b 2004-05-15 devnull return(x);
382 5cedca1b 2004-05-15 devnull }
383 5cedca1b 2004-05-15 devnull
384 5cedca1b 2004-05-15 devnull
385 5cedca1b 2004-05-15 devnull void
386 5cedca1b 2004-05-15 devnull freearr(void)
387 5cedca1b 2004-05-15 devnull {
388 5cedca1b 2004-05-15 devnull free(style);
389 5cedca1b 2004-05-15 devnull free(evenup);
390 5cedca1b 2004-05-15 devnull free(lefline);
391 5cedca1b 2004-05-15 devnull free(flags);
392 5cedca1b 2004-05-15 devnull free(font);
393 5cedca1b 2004-05-15 devnull free(csize);
394 5cedca1b 2004-05-15 devnull free(vsize);
395 5cedca1b 2004-05-15 devnull free(cll);
396 5cedca1b 2004-05-15 devnull free(--sep); /* netnews says this should be --sep because incremented earlier! */
397 5cedca1b 2004-05-15 devnull free(used);
398 5cedca1b 2004-05-15 devnull free(lused);
399 5cedca1b 2004-05-15 devnull free(rused);
400 5cedca1b 2004-05-15 devnull free(doubled);
401 5cedca1b 2004-05-15 devnull free(acase);
402 5cedca1b 2004-05-15 devnull free(topat);
403 5cedca1b 2004-05-15 devnull }