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