Blob


1 /* tt.c: subroutines for drawing horizontal lines */
2 # include "t.h"
4 int
5 ctype(int il, int ic)
6 {
7 if (instead[il])
8 return(0);
9 if (fullbot[il])
10 return(0);
11 il = stynum[il];
12 return(style[ic][il]);
13 }
16 int
17 min(int a, int b)
18 {
19 return(a < b ? a : b);
20 }
23 int
24 fspan(int i, int c)
25 {
26 c++;
27 return(c < ncol && ctype(i, c) == 's');
28 }
31 int
32 lspan(int i, int c)
33 {
34 int k;
36 if (ctype(i, c) != 's')
37 return(0);
38 c++;
39 if (c < ncol && ctype(i, c) == 's')
40 return(0);
41 for (k = 0; ctype(i, --c) == 's'; k++)
42 ;
43 return(k);
44 }
47 int
48 ctspan(int i, int c)
49 {
50 int k;
51 c++;
52 for (k = 1; c < ncol && ctype(i, c) == 's'; k++)
53 c++;
54 return(k);
55 }
58 void
59 tohcol(int ic)
60 {
61 if (ic == 0)
62 Bprint(&tabout, "\\h'|0'");
63 else
64 Bprint(&tabout, "\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
65 reg(ic - 1, CRIGHT));
66 }
69 int
70 allh(int i)
71 {
72 /* return true if every element in line i is horizontal */
73 /* also at least one must be horizontl */
74 int c, one, k;
76 if (fullbot[i])
77 return(1);
78 if (i >= nlin)
79 return(dboxflg || boxflg);
80 for (one = c = 0; c < ncol; c++) {
81 k = thish(i, c);
82 if (k == 0)
83 return(0);
84 if (k == 1)
85 continue;
86 one = 1;
87 }
88 return(one);
89 }
92 int
93 thish(int i, int c)
94 {
95 int t;
96 char *s;
97 struct colstr *pc;
99 if (c < 0)
100 return(0);
101 if (i < 0)
102 return(0);
103 t = ctype(i, c);
104 if (t == '_' || t == '-')
105 return('-');
106 if (t == '=')
107 return('=');
108 if (t == '^')
109 return(1);
110 if (fullbot[i] )
111 return(fullbot[i]);
112 if (t == 's')
113 return(thish(i, c - 1));
114 if (t == 0)
115 return(1);
116 pc = &table[i][c];
117 s = (t == 'a' ? pc->rcol : pc->col);
118 if (s == 0 || (point(s) && *s == 0))
119 return(1);
120 if (vspen(s))
121 return(1);
122 if (t = barent( s))
123 return(t);
124 return(0);