Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/* t7.c: control to write table entries */
2
# include "t.h"
3
# define realsplit ((ct=='a'||ct=='n') && table[ldata][c].rcol)
4
 
5
void
6
runout(void)
7
{
8
	int	i;
9
 
10
	if (boxflg || allflg || dboxflg) 
11
		need();
12
	if (ctrflg) {
13
		Bprint(&tabout, ".nr #I \\n(.i\n");
14
		Bprint(&tabout, ".in +(\\n(.lu-\\n(TWu-\\n(.iu)/2u\n");
15
	}
16
	Bprint(&tabout, ".fc %c %c\n", F1, F2);
17
	Bprint(&tabout, ".nr #T 0-1\n");
18
	deftail();
19
	for (i = 0; i < nlin; i++)
20
		putline(i, i);
21
	if (leftover)
22
		yetmore();
23
	Bprint(&tabout, ".fc\n");
24
	Bprint(&tabout, ".nr T. 1\n");
25
	Bprint(&tabout, ".T# 1\n");
26
	if (ctrflg)
27
		Bprint(&tabout, ".in \\n(#Iu\n");
28
}
29
 
30
 
31
void
32
runtabs(int lform, int ldata)
33
{
34
	int	c, ct, vforml, lf;
35
 
36
	Bprint(&tabout, ".ta ");
37
	for (c = 0; c < ncol; c++) {
38
		vforml = lform;
39
		for (lf = prev(lform); lf >= 0 && vspen(table[lf][c].col); lf = prev(lf))
40
			vforml = lf;
41
		if (fspan(vforml, c))
42
			continue;
43
		switch (ct = ctype(vforml, c)) {
44
		case 'n':
45
		case 'a':
46
			if (table[ldata][c].rcol)
47
				if (lused[c]) /*Zero field width*/
48
					Bprint(&tabout, "\\n(%2su ", reg(c, CMID));
49
		case 'c':
50
		case 'l':
51
		case 'r':
52
			if (realsplit ? rused[c] : (used[c] + lused[c]))
53
				Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
54
			continue;
55
		case 's':
56
			if (lspan(lform, c))
57
				Bprint(&tabout, "\\n(%2su ", reg(c, CRIGHT));
58
			continue;
59
		}
60
	}
61
	Bprint(&tabout, "\n");
62
}
63
 
64
 
65
int
66
ifline(char *s)
67
{
68
	if (!point(s)) 
69
		return(0);
70
	if (s[0] == '\\') 
71
		s++;
72
	if (s[1] ) 
73
		return(0);
74
	if (s[0] == '_') 
75
		return('-');
76
	if (s[0] == '=') 
77
		return('=');
78
	return(0);
79
}
80
 
81
 
82
void
83
need(void)
84
{
85
	int	texlin, horlin, i;
86
 
87
	for (texlin = horlin = i = 0; i < nlin; i++) {
88
		if (fullbot[i] != 0)
89
			horlin++;
90
		else if (instead[i] != 0)
91
			continue;
92
		else
93
			texlin++;
94
	}
95
	Bprint(&tabout, ".ne %dv+%dp\n", texlin, 2 * horlin);
96
}
97
 
98
 
99
void
100
deftail(void)
101
{
102
	int	i, c, lf, lwid;
103
 
104
	for (i = 0; i < MAXHEAD; i++)
105
		if (linestop[i])
106
			Bprint(&tabout, ".nr #%c 0-1\n", linestop[i] + 'a' - 1);
107
	Bprint(&tabout, ".nr #a 0-1\n");
108
	Bprint(&tabout, ".eo\n");
109
	Bprint(&tabout, ".de T#\n");
110
	Bprint(&tabout, ".nr 35 1m\n");
111
	Bprint(&tabout, ".ds #d .d\n");
112
	Bprint(&tabout, ".if \\(ts\\n(.z\\(ts\\(ts .ds #d nl\n");
113
	Bprint(&tabout, ".mk ##\n");
114
	Bprint(&tabout, ".nr ## -1v\n");
115
	Bprint(&tabout, ".ls 1\n");
116
	for (i = 0; i < MAXHEAD; i++)
117
		if (linestop[i])
118
			Bprint(&tabout, ".if \\n(#T>=0 .nr #%c \\n(#T\n",
119
			     linestop[i] + 'a' - 1);
120
	if (boxflg || allflg || dboxflg) /* bottom of table line */
121
		if (fullbot[nlin-1] == 0) {
122
			if (!pr1403)
123
				Bprint(&tabout, ".if \\n(T. .vs \\n(.vu-\\n(.sp\n");
124
			Bprint(&tabout, ".if \\n(T. ");
125
			drawline(nlin, 0, ncol, dboxflg ? '=' : '-', 1, 0);
126
			Bprint(&tabout, "\n.if \\n(T. .vs\n");
127
			/* T. is really an argument to a macro but because of 
128
		   eqn we don't dare pass it as an argument and reference by $1 */
129
		}
130
	for (c = 0; c < ncol; c++) {
131
		if ((lf = left(nlin - 1, c, &lwid)) >= 0) {
132
			Bprint(&tabout, ".if \\n(#%c>=0 .sp -1\n", linestop[lf] + 'a' - 1);
133
			Bprint(&tabout, ".if \\n(#%c>=0 ", linestop[lf] + 'a' - 1);
134
			tohcol(c);
135
			drawvert(lf, nlin - 1, c, lwid);
136
			Bprint(&tabout, "\\h'|\\n(TWu'\n");
137
		}
138
	}
139
	if (boxflg || allflg || dboxflg) /* right hand line */ {
140
		Bprint(&tabout, ".if \\n(#a>=0 .sp -1\n");
141
		Bprint(&tabout, ".if \\n(#a>=0 \\h'|\\n(TWu'");
142
		drawvert (0, nlin - 1, ncol, dboxflg ? 2 : 1);
143
		Bprint(&tabout, "\n");
144
	}
145
	Bprint(&tabout, ".ls\n");
146
	Bprint(&tabout, "..\n");
147
	Bprint(&tabout, ".ec\n");
148
}
149
 
150