13e12c5d1SDavid du Colombier /* t7.c: control to write table entries */
23e12c5d1SDavid du Colombier # include "t.h"
33e12c5d1SDavid du Colombier # define realsplit ((ct=='a'||ct=='n') && table[ldata][c].rcol)
43e12c5d1SDavid du Colombier
53e12c5d1SDavid du Colombier void
runout(void)63e12c5d1SDavid du Colombier runout(void)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier int i;
93e12c5d1SDavid du Colombier
103e12c5d1SDavid du Colombier if (boxflg || allflg || dboxflg)
113e12c5d1SDavid du Colombier need();
123e12c5d1SDavid du Colombier if (ctrflg) {
13*219b2ee8SDavid du Colombier Bprint(&tabout, ".nr #I \\n(.i\n");
14*219b2ee8SDavid du Colombier Bprint(&tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n");
153e12c5d1SDavid du Colombier }
16*219b2ee8SDavid du Colombier Bprint(&tabout, ".fc %c %c\n", F1, F2);
17*219b2ee8SDavid du Colombier Bprint(&tabout, ".nr #T 0-1\n");
183e12c5d1SDavid du Colombier deftail();
193e12c5d1SDavid du Colombier for (i = 0; i < nlin; i++)
203e12c5d1SDavid du Colombier putline(i, i);
213e12c5d1SDavid du Colombier if (leftover)
223e12c5d1SDavid du Colombier yetmore();
23*219b2ee8SDavid du Colombier Bprint(&tabout, ".fc\n");
24*219b2ee8SDavid du Colombier Bprint(&tabout, ".nr T. 1\n");
25*219b2ee8SDavid du Colombier Bprint(&tabout, ".T# 1\n");
263e12c5d1SDavid du Colombier if (ctrflg)
27*219b2ee8SDavid du Colombier Bprint(&tabout, ".in \\n(#Iu\n");
283e12c5d1SDavid du Colombier }
293e12c5d1SDavid du Colombier
303e12c5d1SDavid du Colombier
313e12c5d1SDavid du Colombier void
runtabs(int lform,int ldata)323e12c5d1SDavid du Colombier runtabs(int lform, int ldata)
333e12c5d1SDavid du Colombier {
343e12c5d1SDavid du Colombier int c, ct, vforml, lf;
353e12c5d1SDavid du Colombier
36*219b2ee8SDavid du Colombier Bprint(&tabout, ".ta ");
373e12c5d1SDavid du Colombier for (c = 0; c < ncol; c++) {
383e12c5d1SDavid du Colombier vforml = lform;
393e12c5d1SDavid du Colombier for (lf = prev(lform); lf >= 0 && vspen(table[lf][c].col); lf = prev(lf))
403e12c5d1SDavid du Colombier vforml = lf;
413e12c5d1SDavid du Colombier if (fspan(vforml, c))
423e12c5d1SDavid du Colombier continue;
433e12c5d1SDavid du Colombier switch (ct = ctype(vforml, c)) {
443e12c5d1SDavid du Colombier case 'n':
453e12c5d1SDavid du Colombier case 'a':
463e12c5d1SDavid du Colombier if (table[ldata][c].rcol)
473e12c5d1SDavid du Colombier if (lused[c]) /*Zero field width*/
48*219b2ee8SDavid du Colombier Bprint(&tabout, "\\n(%2su ", reg(c, CMID));
493e12c5d1SDavid du Colombier case 'c':
503e12c5d1SDavid du Colombier case 'l':
513e12c5d1SDavid du Colombier case 'r':
523e12c5d1SDavid du Colombier if (realsplit ? rused[c] : (used[c] + lused[c]))
53*219b2ee8SDavid du Colombier Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
543e12c5d1SDavid du Colombier continue;
553e12c5d1SDavid du Colombier case 's':
563e12c5d1SDavid du Colombier if (lspan(lform, c))
57*219b2ee8SDavid du Colombier Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
583e12c5d1SDavid du Colombier continue;
593e12c5d1SDavid du Colombier }
603e12c5d1SDavid du Colombier }
61*219b2ee8SDavid du Colombier Bprint(&tabout, "\n");
623e12c5d1SDavid du Colombier }
633e12c5d1SDavid du Colombier
643e12c5d1SDavid du Colombier
653e12c5d1SDavid du Colombier int
ifline(char * s)663e12c5d1SDavid du Colombier ifline(char *s)
673e12c5d1SDavid du Colombier {
683e12c5d1SDavid du Colombier if (!point(s))
693e12c5d1SDavid du Colombier return(0);
703e12c5d1SDavid du Colombier if (s[0] == '\\')
713e12c5d1SDavid du Colombier s++;
723e12c5d1SDavid du Colombier if (s[1] )
733e12c5d1SDavid du Colombier return(0);
743e12c5d1SDavid du Colombier if (s[0] == '_')
753e12c5d1SDavid du Colombier return('-');
763e12c5d1SDavid du Colombier if (s[0] == '=')
773e12c5d1SDavid du Colombier return('=');
783e12c5d1SDavid du Colombier return(0);
793e12c5d1SDavid du Colombier }
803e12c5d1SDavid du Colombier
813e12c5d1SDavid du Colombier
823e12c5d1SDavid du Colombier void
need(void)833e12c5d1SDavid du Colombier need(void)
843e12c5d1SDavid du Colombier {
853e12c5d1SDavid du Colombier int texlin, horlin, i;
863e12c5d1SDavid du Colombier
873e12c5d1SDavid du Colombier for (texlin = horlin = i = 0; i < nlin; i++) {
883e12c5d1SDavid du Colombier if (fullbot[i] != 0)
893e12c5d1SDavid du Colombier horlin++;
903e12c5d1SDavid du Colombier else if (instead[i] != 0)
913e12c5d1SDavid du Colombier continue;
923e12c5d1SDavid du Colombier else
933e12c5d1SDavid du Colombier texlin++;
943e12c5d1SDavid du Colombier }
95*219b2ee8SDavid du Colombier Bprint(&tabout, ".ne %dv+%dp\n", texlin, 2 * horlin);
963e12c5d1SDavid du Colombier }
973e12c5d1SDavid du Colombier
983e12c5d1SDavid du Colombier
993e12c5d1SDavid du Colombier void
deftail(void)1003e12c5d1SDavid du Colombier deftail(void)
1013e12c5d1SDavid du Colombier {
1023e12c5d1SDavid du Colombier int i, c, lf, lwid;
1033e12c5d1SDavid du Colombier
1043e12c5d1SDavid du Colombier for (i = 0; i < MAXHEAD; i++)
1053e12c5d1SDavid du Colombier if (linestop[i])
106*219b2ee8SDavid du Colombier Bprint(&tabout, ".nr #%c 0-1\n", linestop[i] + 'a' - 1);
107*219b2ee8SDavid du Colombier Bprint(&tabout, ".nr #a 0-1\n");
108*219b2ee8SDavid du Colombier Bprint(&tabout, ".eo\n");
109*219b2ee8SDavid du Colombier Bprint(&tabout, ".de T#\n");
110*219b2ee8SDavid du Colombier Bprint(&tabout, ".nr 35 1m\n");
111*219b2ee8SDavid du Colombier Bprint(&tabout, ".ds #d .d\n");
112*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n");
113*219b2ee8SDavid du Colombier Bprint(&tabout, ".mk ##\n");
114*219b2ee8SDavid du Colombier Bprint(&tabout, ".nr ## -1v\n");
115*219b2ee8SDavid du Colombier Bprint(&tabout, ".ls 1\n");
1163e12c5d1SDavid du Colombier for (i = 0; i < MAXHEAD; i++)
1173e12c5d1SDavid du Colombier if (linestop[i])
118*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\n(#T>=0 .nr #%c \\n(#T\n",
1193e12c5d1SDavid du Colombier linestop[i] + 'a' - 1);
1203e12c5d1SDavid du Colombier if (boxflg || allflg || dboxflg) /* bottom of table line */
1213e12c5d1SDavid du Colombier if (fullbot[nlin-1] == 0) {
1223e12c5d1SDavid du Colombier if (!pr1403)
123*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n");
124*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\n(T. ");
1253e12c5d1SDavid du Colombier drawline(nlin, 0, ncol, dboxflg ? '=' : '-', 1, 0);
126*219b2ee8SDavid du Colombier Bprint(&tabout, "\n.if \\n(T. .vs\n");
1273e12c5d1SDavid du Colombier /* T. is really an argument to a macro but because of
1283e12c5d1SDavid du Colombier eqn we don't dare pass it as an argument and reference by $1 */
1293e12c5d1SDavid du Colombier }
1303e12c5d1SDavid du Colombier for (c = 0; c < ncol; c++) {
1313e12c5d1SDavid du Colombier if ((lf = left(nlin - 1, c, &lwid)) >= 0) {
132*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\n(#%c>=0 .sp -1\n", linestop[lf] + 'a' - 1);
133*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\n(#%c>=0 ", linestop[lf] + 'a' - 1);
1343e12c5d1SDavid du Colombier tohcol(c);
1353e12c5d1SDavid du Colombier drawvert(lf, nlin - 1, c, lwid);
136*219b2ee8SDavid du Colombier Bprint(&tabout, "\\h'|\\n(TWu'\n");
1373e12c5d1SDavid du Colombier }
1383e12c5d1SDavid du Colombier }
1393e12c5d1SDavid du Colombier if (boxflg || allflg || dboxflg) /* right hand line */ {
140*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\n(#a>=0 .sp -1\n");
141*219b2ee8SDavid du Colombier Bprint(&tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'");
1423e12c5d1SDavid du Colombier drawvert (0, nlin - 1, ncol, dboxflg ? 2 : 1);
143*219b2ee8SDavid du Colombier Bprint(&tabout, "\n");
1443e12c5d1SDavid du Colombier }
145*219b2ee8SDavid du Colombier Bprint(&tabout, ".ls\n");
146*219b2ee8SDavid du Colombier Bprint(&tabout, "..\n");
147*219b2ee8SDavid du Colombier Bprint(&tabout, ".ec\n");
1483e12c5d1SDavid du Colombier }
1493e12c5d1SDavid du Colombier
1503e12c5d1SDavid du Colombier
151