Blob


1 /* t9.c: write lines for tables over 200 lines */
2 # include "t.h"
3 static int useln;
5 void
6 yetmore(void)
7 {
8 for (useln = 0; useln < MAXLIN && table[useln] == 0; useln++)
9 ;
10 if (useln >= MAXLIN)
11 error("Wierd. No data in table.");
12 table[0] = table[useln];
13 for (useln = nlin - 1; useln >= 0 && (fullbot[useln] || instead[useln]); useln--)
14 ;
15 if (useln < 0)
16 error("Wierd. No real lines in table.");
17 domore(leftover);
18 while (gets1(cstore = cspace, MAXCHS) && domore(cstore))
19 ;
20 last = cstore;
21 return;
22 }
25 int
26 domore(char *dataln)
27 {
28 int icol, ch;
30 if (prefix(".TE", dataln))
31 return(0);
32 if (dataln[0] == '.' && !isdigit((uchar)dataln[1])) {
33 Bprint(&tabout, "%s\n", dataln);
34 return(1);
35 }
36 fullbot[0] = 0;
37 instead[0] = (char *)0;
38 if (dataln[1] == 0)
39 switch (dataln[0]) {
40 case '_':
41 fullbot[0] = '-';
42 putline(useln, 0);
43 return(1);
44 case '=':
45 fullbot[0] = '=';
46 putline(useln, 0);
47 return(1);
48 }
49 for (icol = 0; icol < ncol; icol++) {
50 table[0][icol].col = dataln;
51 table[0][icol].rcol = 0;
52 for (; (ch = *dataln) != '\0' && ch != tab; dataln++)
53 ;
54 *dataln++ = '\0';
55 switch (ctype(useln, icol)) {
56 case 'n':
57 table[0][icol].rcol = maknew(table[0][icol].col);
58 break;
59 case 'a':
60 table[0][icol].rcol = table[0][icol].col;
61 table[0][icol].col = "";
62 break;
63 }
64 while (ctype(useln, icol + 1) == 's') /* spanning */
65 table[0][++icol].col = "";
66 if (ch == '\0')
67 break;
68 }
69 while (++icol < ncol)
70 table[0][icol].col = "";
71 putline(useln, 0);
72 exstore = exspace; /* reuse space for numerical items */
73 return(1);
74 }