|  | /* tt.c: subroutines for drawing horizontal lines */ | 
|  | # include "t.h" | 
|  |  | 
|  | int | 
|  | ctype(int il, int ic) | 
|  | { | 
|  | if (instead[il]) | 
|  | return(0); | 
|  | if (fullbot[il]) | 
|  | return(0); | 
|  | il = stynum[il]; | 
|  | return(style[ic][il]); | 
|  | } | 
|  |  | 
|  |  | 
|  | int | 
|  | min(int a, int b) | 
|  | { | 
|  | return(a < b ? a : b); | 
|  | } | 
|  |  | 
|  |  | 
|  | int | 
|  | fspan(int i, int c) | 
|  | { | 
|  | c++; | 
|  | return(c < ncol && ctype(i, c) == 's'); | 
|  | } | 
|  |  | 
|  |  | 
|  | int | 
|  | lspan(int i, int c) | 
|  | { | 
|  | int	k; | 
|  |  | 
|  | if (ctype(i, c) != 's') | 
|  | return(0); | 
|  | c++; | 
|  | if (c < ncol && ctype(i, c) == 's') | 
|  | return(0); | 
|  | for (k = 0; ctype(i, --c) == 's'; k++) | 
|  | ; | 
|  | return(k); | 
|  | } | 
|  |  | 
|  |  | 
|  | int | 
|  | ctspan(int i, int c) | 
|  | { | 
|  | int	k; | 
|  | c++; | 
|  | for (k = 1; c < ncol && ctype(i, c) == 's'; k++) | 
|  | c++; | 
|  | return(k); | 
|  | } | 
|  |  | 
|  |  | 
|  | void | 
|  | tohcol(int ic) | 
|  | { | 
|  | if (ic == 0) | 
|  | Bprint(&tabout, "\\h'|0'"); | 
|  | else | 
|  | Bprint(&tabout, "\\h'(|\\n(%2su+|\\n(%2su)/2u'", reg(ic, CLEFT), | 
|  | reg(ic - 1, CRIGHT)); | 
|  | } | 
|  |  | 
|  |  | 
|  | int | 
|  | allh(int i) | 
|  | { | 
|  | /* return true if every element in line i is horizontal */ | 
|  | /* also at least one must be horizontl */ | 
|  | int	c, one, k; | 
|  |  | 
|  | if (fullbot[i]) | 
|  | return(1); | 
|  | if (i >= nlin) | 
|  | return(dboxflg || boxflg); | 
|  | for (one = c = 0; c < ncol; c++) { | 
|  | k = thish(i, c); | 
|  | if (k == 0) | 
|  | return(0); | 
|  | if (k == 1) | 
|  | continue; | 
|  | one = 1; | 
|  | } | 
|  | return(one); | 
|  | } | 
|  |  | 
|  |  | 
|  | int | 
|  | thish(int i, int c) | 
|  | { | 
|  | int	t; | 
|  | char	*s; | 
|  | struct colstr *pc; | 
|  |  | 
|  | if (c < 0) | 
|  | return(0); | 
|  | if (i < 0) | 
|  | return(0); | 
|  | t = ctype(i, c); | 
|  | if (t == '_' || t == '-') | 
|  | return('-'); | 
|  | if (t == '=') | 
|  | return('='); | 
|  | if (t == '^') | 
|  | return(1); | 
|  | if (fullbot[i] ) | 
|  | return(fullbot[i]); | 
|  | if (t == 's') | 
|  | return(thish(i, c - 1)); | 
|  | if (t == 0) | 
|  | return(1); | 
|  | pc = &table[i][c]; | 
|  | s = (t == 'a' ? pc->rcol : pc->col); | 
|  | if (s == 0 || (point(s) && *s == 0)) | 
|  | return(1); | 
|  | if (vspen(s)) | 
|  | return(1); | 
|  | if (t = barent( s)) | 
|  | return(t); | 
|  | return(0); | 
|  | } | 
|  |  | 
|  |  |