diff options
Diffstat (limited to 'src/cmd/tbl/t9.c')
-rw-r--r-- | src/cmd/tbl/t9.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/cmd/tbl/t9.c b/src/cmd/tbl/t9.c new file mode 100644 index 00000000..bf1978a9 --- /dev/null +++ b/src/cmd/tbl/t9.c @@ -0,0 +1,76 @@ +/* t9.c: write lines for tables over 200 lines */ +# include "t.h" +static useln; + +void +yetmore(void) +{ + for (useln = 0; useln < MAXLIN && table[useln] == 0; useln++) + ; + if (useln >= MAXLIN) + error("Wierd. No data in table."); + table[0] = table[useln]; + for (useln = nlin - 1; useln >= 0 && (fullbot[useln] || instead[useln]); useln--) + ; + if (useln < 0) + error("Wierd. No real lines in table."); + domore(leftover); + while (gets1(cstore = cspace, MAXCHS) && domore(cstore)) + ; + last = cstore; + return; +} + + +int +domore(char *dataln) +{ + int icol, ch; + + if (prefix(".TE", dataln)) + return(0); + if (dataln[0] == '.' && !isdigit(dataln[1])) { + Bprint(&tabout, "%s\n", dataln); + return(1); + } + fullbot[0] = 0; + instead[0] = (char *)0; + if (dataln[1] == 0) + switch (dataln[0]) { + case '_': + fullbot[0] = '-'; + putline(useln, 0); + return(1); + case '=': + fullbot[0] = '='; + putline(useln, 0); + return(1); + } + for (icol = 0; icol < ncol; icol++) { + table[0][icol].col = dataln; + table[0][icol].rcol = 0; + for (; (ch = *dataln) != '\0' && ch != tab; dataln++) + ; + *dataln++ = '\0'; + switch (ctype(useln, icol)) { + case 'n': + table[0][icol].rcol = maknew(table[0][icol].col); + break; + case 'a': + table[0][icol].rcol = table[0][icol].col; + table[0][icol].col = ""; + break; + } + while (ctype(useln, icol + 1) == 's') /* spanning */ + table[0][++icol].col = ""; + if (ch == '\0') + break; + } + while (++icol < ncol) + table[0][icol].col = ""; + putline(useln, 0); + exstore = exspace; /* reuse space for numerical items */ + return(1); +} + + |