xref: /csrg-svn/old/tbl/tt.c (revision 48316)
1*48316Sbostic /*-
2*48316Sbostic  * %sccs.include.proprietary.c%
3*48316Sbostic  */
4*48316Sbostic 
514514Ssam #ifndef lint
6*48316Sbostic static char sccsid[] = "@(#)tt.c	4.3 (Berkeley) 04/18/91";
7*48316Sbostic #endif /* not lint */
811045Sshannon 
911045Sshannon  /* tt.c: subroutines for drawing horizontal lines */
1011045Sshannon # include "t..c"
ctype(il,ic)1111045Sshannon ctype(il, ic)
1211045Sshannon {
1311045Sshannon if (instead[il])
1411045Sshannon 	return(0);
1511045Sshannon if (fullbot[il])
1611045Sshannon 	return(0);
1711045Sshannon il = stynum[il];
1811045Sshannon return(style[il][ic]);
1911045Sshannon }
min(a,b)2011045Sshannon min(a,b)
2111045Sshannon {
2211045Sshannon return(a<b ? a : b);
2311045Sshannon }
fspan(i,c)2411045Sshannon fspan(i,c)
2511045Sshannon {
2611045Sshannon c++;
2711045Sshannon return(c<ncol && ctype(i,c)=='s');
2811045Sshannon }
lspan(i,c)2911045Sshannon lspan(i,c)
3011045Sshannon {
3111045Sshannon int k;
3211045Sshannon if (ctype(i,c) != 's') return(0);
3311045Sshannon c++;
3411045Sshannon if (c < ncol && ctype(i,c)== 's')
3511045Sshannon 	return(0);
3611045Sshannon for(k=0; ctype(i,--c) == 's'; k++);
3711045Sshannon return(k);
3811045Sshannon }
ctspan(i,c)3911045Sshannon ctspan(i,c)
4011045Sshannon {
4111045Sshannon int k;
4211045Sshannon c++;
4311045Sshannon for(k=1; c<ncol && ctype(i,c)=='s'; k++)
4411045Sshannon 	c++;
4511045Sshannon return(k);
4611045Sshannon }
tohcol(ic)4711045Sshannon tohcol(ic)
4811045Sshannon {
4911045Sshannon 			if (ic==0)
5011045Sshannon 				fprintf(tabout, "\\h'|0'");
5111045Sshannon 			else
5211045Sshannon 				fprintf(tabout, "\\h'(|\\n(%du+|\\n(%du)/2u'", ic+CLEFT, ic+CRIGHT-1);
5311045Sshannon }
allh(i)5411045Sshannon allh(i)
5511045Sshannon {
5611045Sshannon /* return true if every element in line i is horizontal */
5711045Sshannon /* also at least one must be horizontl */
5811045Sshannon int c, one, k;
5911045Sshannon if (fullbot[i]) return(1);
6011045Sshannon for(one=c=0; c<ncol; c++)
6111045Sshannon 	{
6211045Sshannon 	k = thish(i,c);
6311045Sshannon 	if (k==0) return(0);
6411045Sshannon 	if (k==1) continue;
6511045Sshannon 	one=1;
6611045Sshannon 	}
6711045Sshannon return(one);
6811045Sshannon }
thish(i,c)6911045Sshannon thish(i,c)
7011045Sshannon {
7111045Sshannon 	int t;
7211045Sshannon 	char *s;
7311045Sshannon 	struct colstr *pc;
7411045Sshannon 	if (c<0)return(0);
7511045Sshannon 	if (i<0) return(0);
7611045Sshannon 	t = ctype(i,c);
7711045Sshannon 	if (t=='_' || t == '-')
7811045Sshannon 		return('-');
7911045Sshannon 	if (t=='=')return('=');
8011045Sshannon 	if (t=='^') return(1);
8111045Sshannon 	if (fullbot[i] )
8211045Sshannon 		return(fullbot[i]);
8311045Sshannon 	if (t=='s') return(thish(i,c-1));
8411045Sshannon 	if (t==0) return(1);
8511045Sshannon 	pc = &table[i][c];
8611045Sshannon 	s = (t=='a' ? pc->rcol : pc->col);
8711045Sshannon 	if (s==0 || (point(s) && *s==0))
8811045Sshannon 		return(1);
8911045Sshannon 	if (vspen(s)) return(1);
9011045Sshannon 	if (t=barent( s))
9111045Sshannon 		return(t);
9211045Sshannon 	return(0);
9311045Sshannon }
94