| /* t7.c: control to write table entries */ |
| # include "t.h" |
| # define realsplit ((ct=='a'||ct=='n') && table[ldata][c].rcol) |
| |
| void |
| runout(void) |
| { |
| int i; |
| |
| if (boxflg || allflg || dboxflg) |
| need(); |
| if (ctrflg) { |
| Bprint(&tabout, ".nr #I \\n(.i\n"); |
| Bprint(&tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n"); |
| } |
| Bprint(&tabout, ".fc %c %c\n", F1, F2); |
| Bprint(&tabout, ".nr #T 0-1\n"); |
| deftail(); |
| for (i = 0; i < nlin; i++) |
| putline(i, i); |
| if (leftover) |
| yetmore(); |
| Bprint(&tabout, ".fc\n"); |
| Bprint(&tabout, ".nr T. 1\n"); |
| Bprint(&tabout, ".T# 1\n"); |
| if (ctrflg) |
| Bprint(&tabout, ".in \\n(#Iu\n"); |
| } |
| |
| |
| void |
| runtabs(int lform, int ldata) |
| { |
| int c, ct, vforml, lf; |
| |
| Bprint(&tabout, ".ta "); |
| for (c = 0; c < ncol; c++) { |
| vforml = lform; |
| for (lf = prev(lform); lf >= 0 && vspen(table[lf][c].col); lf = prev(lf)) |
| vforml = lf; |
| if (fspan(vforml, c)) |
| continue; |
| switch (ct = ctype(vforml, c)) { |
| case 'n': |
| case 'a': |
| if (table[ldata][c].rcol) |
| if (lused[c]) /*Zero field width*/ |
| Bprint(&tabout, "\\n(%2su ", reg(c, CMID)); |
| case 'c': |
| case 'l': |
| case 'r': |
| if (realsplit ? rused[c] : (used[c] + lused[c])) |
| Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT)); |
| continue; |
| case 's': |
| if (lspan(lform, c)) |
| Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT)); |
| continue; |
| } |
| } |
| Bprint(&tabout, "\n"); |
| } |
| |
| |
| int |
| ifline(char *s) |
| { |
| if (!point(s)) |
| return(0); |
| if (s[0] == '\\') |
| s++; |
| if (s[1] ) |
| return(0); |
| if (s[0] == '_') |
| return('-'); |
| if (s[0] == '=') |
| return('='); |
| return(0); |
| } |
| |
| |
| void |
| need(void) |
| { |
| int texlin, horlin, i; |
| |
| for (texlin = horlin = i = 0; i < nlin; i++) { |
| if (fullbot[i] != 0) |
| horlin++; |
| else if (instead[i] != 0) |
| continue; |
| else |
| texlin++; |
| } |
| Bprint(&tabout, ".ne %dv+%dp\n", texlin, 2 * horlin); |
| } |
| |
| |
| void |
| deftail(void) |
| { |
| int i, c, lf, lwid; |
| |
| for (i = 0; i < MAXHEAD; i++) |
| if (linestop[i]) |
| Bprint(&tabout, ".nr #%c 0-1\n", linestop[i] + 'a' - 1); |
| Bprint(&tabout, ".nr #a 0-1\n"); |
| Bprint(&tabout, ".eo\n"); |
| Bprint(&tabout, ".de T#\n"); |
| Bprint(&tabout, ".nr 35 1m\n"); |
| Bprint(&tabout, ".ds #d .d\n"); |
| Bprint(&tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n"); |
| Bprint(&tabout, ".mk ##\n"); |
| Bprint(&tabout, ".nr ## -1v\n"); |
| Bprint(&tabout, ".ls 1\n"); |
| for (i = 0; i < MAXHEAD; i++) |
| if (linestop[i]) |
| Bprint(&tabout, ".if \\n(#T>=0 .nr #%c \\n(#T\n", |
| linestop[i] + 'a' - 1); |
| if (boxflg || allflg || dboxflg) /* bottom of table line */ |
| if (fullbot[nlin-1] == 0) { |
| if (!pr1403) |
| Bprint(&tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n"); |
| Bprint(&tabout, ".if \\n(T. "); |
| drawline(nlin, 0, ncol, dboxflg ? '=' : '-', 1, 0); |
| Bprint(&tabout, "\n.if \\n(T. .vs\n"); |
| /* T. is really an argument to a macro but because of |
| eqn we don't dare pass it as an argument and reference by $1 */ |
| } |
| for (c = 0; c < ncol; c++) { |
| if ((lf = left(nlin - 1, c, &lwid)) >= 0) { |
| Bprint(&tabout, ".if \\n(#%c>=0 .sp -1\n", linestop[lf] + 'a' - 1); |
| Bprint(&tabout, ".if \\n(#%c>=0 ", linestop[lf] + 'a' - 1); |
| tohcol(c); |
| drawvert(lf, nlin - 1, c, lwid); |
| Bprint(&tabout, "\\h'|\\n(TWu'\n"); |
| } |
| } |
| if (boxflg || allflg || dboxflg) /* right hand line */ { |
| Bprint(&tabout, ".if \\n(#a>=0 .sp -1\n"); |
| Bprint(&tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'"); |
| drawvert (0, nlin - 1, ncol, dboxflg ? 2 : 1); |
| Bprint(&tabout, "\n"); |
| } |
| Bprint(&tabout, ".ls\n"); |
| Bprint(&tabout, "..\n"); |
| Bprint(&tabout, ".ec\n"); |
| } |
| |
| |