xref: /csrg-svn/old/tbl/tv.c (revision 48316)
1*48316Sbostic /*-
2*48316Sbostic  * %sccs.include.proprietary.c%
3*48316Sbostic  */
4*48316Sbostic 
514514Ssam #ifndef lint
6*48316Sbostic static char sccsid[] = "@(#)tv.c	4.4 (Berkeley) 04/18/91";
7*48316Sbostic #endif /* not lint */
811047Sshannon 
911047Sshannon  /* tv.c: draw vertical lines */
1011047Sshannon # include "t..c"
drawvert(start,end,c,lwid)1111047Sshannon drawvert(start,end, c, lwid)
1211047Sshannon {
1311047Sshannon char *exb=0, *ext=0;
1411047Sshannon int tp=0, sl, ln, pos, epb, ept, vm;
1511047Sshannon end++;
1611047Sshannon vm='v';
1711047Sshannon /* note: nr 35 has value of 1m outside of linesize */
1811047Sshannon while (instead[end]) end++;
1911047Sshannon for(ln=0; ln<lwid; ln++)
2011047Sshannon 	{
2111047Sshannon 	epb=ept=0;
2211047Sshannon 	pos = 2*ln-lwid+1;
2311047Sshannon 	if (pos!=tp) fprintf(tabout, "\\h'%dp'", pos-tp);
2411047Sshannon 	tp = pos;
2511047Sshannon 	if (end<nlin)
2611047Sshannon 		{
2711047Sshannon 		if (fullbot[end]|| (!instead[end] && allh(end)))
2811047Sshannon 			epb=2;
2911047Sshannon 		else
3011047Sshannon 		switch (midbar(end,c))
3111047Sshannon 			{
3211047Sshannon 			case '-':
3311047Sshannon 			exb = "1v-.5m"; break;
3411047Sshannon 			case '=':
3511047Sshannon 			exb = "1v-.5m";
3611047Sshannon 			epb = 1; break;
3711047Sshannon 			}
3811047Sshannon 		}
3911047Sshannon 	if (lwid>1)
4011047Sshannon 	switch(interh(end, c))
4111047Sshannon 		{
4211047Sshannon 		case THRU: epb -= 1; break;
4311047Sshannon 		case RIGHT: epb += (ln==0 ? 1 : -1); break;
4411047Sshannon 		case LEFT: epb += (ln==1 ? 1 : -1); break;
4511047Sshannon 		}
4611047Sshannon 	if (lwid==1)
4711047Sshannon 	switch(interh(end,c))
4811047Sshannon 		{
4911047Sshannon 		case THRU: epb -= 1; break;
5011047Sshannon 		case RIGHT: case LEFT: epb += 1; break;
5111047Sshannon 		}
5211047Sshannon 	if (start>0)
5311047Sshannon 		{
5411047Sshannon 		sl = start-1;
5511047Sshannon 		while (sl>=0 && instead[sl]) sl--;
5611047Sshannon 		if (sl>=0 && (fullbot[sl] || allh(sl)))
5711047Sshannon 			ept=0;
5811047Sshannon 		else
5911047Sshannon 		if (sl>=0)
6011047Sshannon 		switch(midbar(sl,c))
6111047Sshannon 			{
6211047Sshannon 			case '-':
6311047Sshannon 			ext = ".5m"; break;
6411047Sshannon 			case '=':
6511047Sshannon 			ext= ".5m"; ept = -1; break;
6611047Sshannon 			default:
6711047Sshannon 				vm = 'm'; break;
6811047Sshannon 			}
6911047Sshannon 		else
7011047Sshannon 			ept = -4;
7111047Sshannon 		}
7211047Sshannon 	else if (start==0 && allh(0))
7311047Sshannon 		{
7411047Sshannon 		ept=0;
7511047Sshannon 		vm = 'm';
7611047Sshannon 		}
7711047Sshannon 	if (lwid>1)
7811047Sshannon 		switch(interh(start,c))
7911047Sshannon 			{
8011047Sshannon 			case THRU: ept += 1; break;
8111047Sshannon 			case LEFT: ept += (ln==0 ? 1 : -1); break;
8211047Sshannon 			case RIGHT: ept += (ln==1 ? 1 : -1); break;
8311047Sshannon 			}
8411047Sshannon 	else if (lwid==1)
8511047Sshannon 		switch(interh(start,c))
8611047Sshannon 			{
8711047Sshannon 			case THRU: ept += 1; break;
8811047Sshannon 			case LEFT: case RIGHT: ept -= 1; break;
8911047Sshannon 			}
9011047Sshannon 	if (exb)
9111047Sshannon 		fprintf(tabout, "\\v'%s'", exb);
9211047Sshannon 	if (epb)
9311047Sshannon 		fprintf(tabout, "\\v'%dp'", epb);
9411047Sshannon 	fprintf(tabout, "\\s\\n(%d",LSIZE);
9511047Sshannon 	if (linsize)
9611047Sshannon 		fprintf(tabout, "\\v'-\\n(%dp/6u'", LSIZE);
9711047Sshannon 	fprintf(tabout, "\\h'-\\n(#~u'"); /* adjustment for T450 nroff boxes */
9811047Sshannon 	fprintf(tabout, "\\L'|\\n(#%cu-%s", linestop[start]+'a'-1, vm=='v'? "1v" : "\\n(35u");
9911047Sshannon 	if (ext)
10011047Sshannon 		fprintf(tabout, "-(%s)",ext);
10111047Sshannon 	if (exb)
10211047Sshannon 		fprintf(tabout, "-(%s)", exb);
10311047Sshannon 	pos = ept-epb;
10411047Sshannon 	if (pos)
10511047Sshannon 		fprintf(tabout, "%s%dp", pos>=0? "+" : "", pos);
10611047Sshannon 	/* the string #d is either "nl" or ".d" depending
10711047Sshannon 	   on diversions; on GCOS not the same */
10811047Sshannon 	fprintf(tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s", linestop[start]+'a'-1,vm=='v' ? "1v" : "\\n(35u");
10911047Sshannon 	if (ext)
11011047Sshannon 		fprintf(tabout, "+%s",ext);
11111047Sshannon 	if (ept)
11211047Sshannon 		fprintf(tabout, "%s%dp", (-ept)>0 ? "+" : "", (-ept));
11311047Sshannon 	fprintf(tabout, "'");
11411047Sshannon 	if (linsize)
11511047Sshannon 		fprintf(tabout, "\\v'\\n(%dp/6u'", LSIZE);
11611047Sshannon 	}
11711047Sshannon }
11811047Sshannon 
11911047Sshannon 
midbar(i,c)12011047Sshannon midbar(i,c)
12111047Sshannon {
12211047Sshannon int k;
12311047Sshannon k = midbcol(i,c);
12411047Sshannon if (k==0 && c>0)
12511047Sshannon 	k = midbcol(i, c-1);
12611047Sshannon return(k);
12711047Sshannon }
midbcol(i,c)12811047Sshannon midbcol(i,c)
12911047Sshannon {
13011047Sshannon int ct;
13111047Sshannon while ( (ct=ctype(i,c)) == 's')
13211047Sshannon 	c--;
13311047Sshannon if (ct=='-' || ct == '=')
13411047Sshannon 	return(ct);
13511047Sshannon if (ct=barent(table[i][c].col))
13611047Sshannon 	return(ct);
13711047Sshannon return(0);
13811047Sshannon }
13911047Sshannon 
barent(s)14011047Sshannon barent(s)
14111047Sshannon 	char *s;
14211047Sshannon {
14311047Sshannon if (s==0) return (1);
14411048Sshannon if (!point(s)) return(1);
14511047Sshannon if (s[0]== '\\') s++;
14611047Sshannon if (s[1]!= 0)
14711047Sshannon 	return(0);
14811047Sshannon switch(s[0])
14911047Sshannon 	{
15011047Sshannon 	case '_':
15111047Sshannon 		return('-');
15211047Sshannon 	case '=':
15311047Sshannon 		return('=');
15411047Sshannon 	}
15511047Sshannon return(0);
15611047Sshannon }
157