13e12c5d1SDavid du Colombier /* tt.c: subroutines for drawing horizontal lines */
23e12c5d1SDavid du Colombier # include "t.h"
33e12c5d1SDavid du Colombier
43e12c5d1SDavid du Colombier int
ctype(int il,int ic)53e12c5d1SDavid du Colombier ctype(int il, int ic)
63e12c5d1SDavid du Colombier {
73e12c5d1SDavid du Colombier if (instead[il])
83e12c5d1SDavid du Colombier return(0);
93e12c5d1SDavid du Colombier if (fullbot[il])
103e12c5d1SDavid du Colombier return(0);
113e12c5d1SDavid du Colombier il = stynum[il];
123e12c5d1SDavid du Colombier return(style[ic][il]);
133e12c5d1SDavid du Colombier }
143e12c5d1SDavid du Colombier
153e12c5d1SDavid du Colombier
163e12c5d1SDavid du Colombier int
min(int a,int b)173e12c5d1SDavid du Colombier min(int a, int b)
183e12c5d1SDavid du Colombier {
193e12c5d1SDavid du Colombier return(a < b ? a : b);
203e12c5d1SDavid du Colombier }
213e12c5d1SDavid du Colombier
223e12c5d1SDavid du Colombier
233e12c5d1SDavid du Colombier int
fspan(int i,int c)243e12c5d1SDavid du Colombier fspan(int i, int c)
253e12c5d1SDavid du Colombier {
263e12c5d1SDavid du Colombier c++;
273e12c5d1SDavid du Colombier return(c < ncol && ctype(i, c) == 's');
283e12c5d1SDavid du Colombier }
293e12c5d1SDavid du Colombier
303e12c5d1SDavid du Colombier
313e12c5d1SDavid du Colombier int
lspan(int i,int c)323e12c5d1SDavid du Colombier lspan(int i, int c)
333e12c5d1SDavid du Colombier {
343e12c5d1SDavid du Colombier int k;
353e12c5d1SDavid du Colombier
363e12c5d1SDavid du Colombier if (ctype(i, c) != 's')
373e12c5d1SDavid du Colombier return(0);
383e12c5d1SDavid du Colombier c++;
393e12c5d1SDavid du Colombier if (c < ncol && ctype(i, c) == 's')
403e12c5d1SDavid du Colombier return(0);
413e12c5d1SDavid du Colombier for (k = 0; ctype(i, --c) == 's'; k++)
423e12c5d1SDavid du Colombier ;
433e12c5d1SDavid du Colombier return(k);
443e12c5d1SDavid du Colombier }
453e12c5d1SDavid du Colombier
463e12c5d1SDavid du Colombier
473e12c5d1SDavid du Colombier int
ctspan(int i,int c)483e12c5d1SDavid du Colombier ctspan(int i, int c)
493e12c5d1SDavid du Colombier {
503e12c5d1SDavid du Colombier int k;
513e12c5d1SDavid du Colombier c++;
523e12c5d1SDavid du Colombier for (k = 1; c < ncol && ctype(i, c) == 's'; k++)
533e12c5d1SDavid du Colombier c++;
543e12c5d1SDavid du Colombier return(k);
553e12c5d1SDavid du Colombier }
563e12c5d1SDavid du Colombier
573e12c5d1SDavid du Colombier
583e12c5d1SDavid du Colombier void
tohcol(int ic)593e12c5d1SDavid du Colombier tohcol(int ic)
603e12c5d1SDavid du Colombier {
613e12c5d1SDavid du Colombier if (ic == 0)
62*219b2ee8SDavid du Colombier Bprint(&tabout, "\\h'|0'");
633e12c5d1SDavid du Colombier else
64*219b2ee8SDavid du Colombier Bprint(&tabout, "\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT),
653e12c5d1SDavid du Colombier reg(ic - 1, CRIGHT));
663e12c5d1SDavid du Colombier }
673e12c5d1SDavid du Colombier
683e12c5d1SDavid du Colombier
693e12c5d1SDavid du Colombier int
allh(int i)703e12c5d1SDavid du Colombier allh(int i)
713e12c5d1SDavid du Colombier {
723e12c5d1SDavid du Colombier /* return true if every element in line i is horizontal */
733e12c5d1SDavid du Colombier /* also at least one must be horizontl */
743e12c5d1SDavid du Colombier int c, one, k;
753e12c5d1SDavid du Colombier
763e12c5d1SDavid du Colombier if (fullbot[i])
773e12c5d1SDavid du Colombier return(1);
783e12c5d1SDavid du Colombier if (i >= nlin)
793e12c5d1SDavid du Colombier return(dboxflg || boxflg);
803e12c5d1SDavid du Colombier for (one = c = 0; c < ncol; c++) {
813e12c5d1SDavid du Colombier k = thish(i, c);
823e12c5d1SDavid du Colombier if (k == 0)
833e12c5d1SDavid du Colombier return(0);
843e12c5d1SDavid du Colombier if (k == 1)
853e12c5d1SDavid du Colombier continue;
863e12c5d1SDavid du Colombier one = 1;
873e12c5d1SDavid du Colombier }
883e12c5d1SDavid du Colombier return(one);
893e12c5d1SDavid du Colombier }
903e12c5d1SDavid du Colombier
913e12c5d1SDavid du Colombier
923e12c5d1SDavid du Colombier int
thish(int i,int c)933e12c5d1SDavid du Colombier thish(int i, int c)
943e12c5d1SDavid du Colombier {
953e12c5d1SDavid du Colombier int t;
963e12c5d1SDavid du Colombier char *s;
973e12c5d1SDavid du Colombier struct colstr *pc;
983e12c5d1SDavid du Colombier
993e12c5d1SDavid du Colombier if (c < 0)
1003e12c5d1SDavid du Colombier return(0);
1013e12c5d1SDavid du Colombier if (i < 0)
1023e12c5d1SDavid du Colombier return(0);
1033e12c5d1SDavid du Colombier t = ctype(i, c);
1043e12c5d1SDavid du Colombier if (t == '_' || t == '-')
1053e12c5d1SDavid du Colombier return('-');
1063e12c5d1SDavid du Colombier if (t == '=')
1073e12c5d1SDavid du Colombier return('=');
1083e12c5d1SDavid du Colombier if (t == '^')
1093e12c5d1SDavid du Colombier return(1);
1103e12c5d1SDavid du Colombier if (fullbot[i] )
1113e12c5d1SDavid du Colombier return(fullbot[i]);
1123e12c5d1SDavid du Colombier if (t == 's')
1133e12c5d1SDavid du Colombier return(thish(i, c - 1));
1143e12c5d1SDavid du Colombier if (t == 0)
1153e12c5d1SDavid du Colombier return(1);
1163e12c5d1SDavid du Colombier pc = &table[i][c];
1173e12c5d1SDavid du Colombier s = (t == 'a' ? pc->rcol : pc->col);
1183e12c5d1SDavid du Colombier if (s == 0 || (point(s) && *s == 0))
1193e12c5d1SDavid du Colombier return(1);
1203e12c5d1SDavid du Colombier if (vspen(s))
1213e12c5d1SDavid du Colombier return(1);
1223e12c5d1SDavid du Colombier if (t = barent( s))
1233e12c5d1SDavid du Colombier return(t);
1243e12c5d1SDavid du Colombier return(0);
1253e12c5d1SDavid du Colombier }
1263e12c5d1SDavid du Colombier
1273e12c5d1SDavid du Colombier
128