diff options
Diffstat (limited to 'usr/src/cmd/tbl/tt.c')
| -rw-r--r-- | usr/src/cmd/tbl/tt.c | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/usr/src/cmd/tbl/tt.c b/usr/src/cmd/tbl/tt.c new file mode 100644 index 0000000000..817f7f6a30 --- /dev/null +++ b/usr/src/cmd/tbl/tt.c @@ -0,0 +1,102 @@ +/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ +/* All Rights Reserved */ + + +/* + * Copyright (c) 1980 Regents of the University of California. + * All rights reserved. The Berkeley software License Agreement + * specifies the terms and conditions for redistribution. + */ + +/* + * Copyright (c) 1983, 1984 1985, 1986, 1987, 1988, Sun Microsystems, Inc. + * All Rights Reserved. + */ + +#ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.1 */ + + /* tt.c: subroutines for drawing horizontal lines */ +# include "t..c" +ctype(il, ic) +{ +if (instead[il]) + return(0); +if (fullbot[il]) + return(0); +il = stynum[il]; +return(style[il][ic]); +} +min(a,b) +{ +return(a<b ? a : b); +} +fspan(i,c) +{ +c++; +return(c<ncol && ctype(i,c)=='s'); +} +lspan(i,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); +} +ctspan(i,c) +{ +int k; +c++; +for(k=1; c<ncol && ctype(i,c)=='s'; k++) + c++; +return(k); +} +tohcol(ic) +{ + if (ic==0) + fprintf(tabout, "\\h'|0'"); + else + fprintf(tabout, "\\h'(|\\n(%du+|\\n(%du)/2u'", ic+CLEFT, ic+CRIGHT-1); +} +allh(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); +for(one=c=0; c<ncol; c++) + { + k = thish(i,c); + if (k==0) return(0); + if (k==1) continue; + one=1; + } +return(one); +} +thish(i,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); +} |
