/* tg.c: process included text blocks */
# include "t.h"

int
gettext(char *sp, int ilin, int icol, char *fn, char *sz)
{
					/* get a section of text */
	char	line[4096];
	int	oname;
	char	*vs;

	if (texname == 0) 
		error("Too many text block diversions");
	if (textflg == 0) {
		Bprint(&tabout, ".nr %d \\n(.lu\n", SL); /* remember old line length */
		textflg = 1;
	}
	Bprint(&tabout, ".eo\n");
	Bprint(&tabout, ".am %s\n", reg(icol, CRIGHT));
	Bprint(&tabout, ".br\n");
	Bprint(&tabout, ".di %c+\n", texname);
	rstofill();
	if (fn && *fn) 
		Bprint(&tabout, ".nr %d \\n(.f\n.ft %s\n", S1, fn);
	Bprint(&tabout, ".ft \\n(.f\n"); /* protect font */
	vs = vsize[icol][stynum[ilin]];
	if ((sz && *sz) || (vs && *vs)) {
		Bprint(&tabout, ".nr %d \\n(.v\n", S9);
		if (vs == 0 || *vs == 0) 
			vs = "\\n(.s+2";
		if (sz && *sz)
			Bprint(&tabout, ".ps %s\n", sz);
		Bprint(&tabout, ".vs %s\n", vs);
		Bprint(&tabout, ".if \\n(%du>\\n(.vu .sp \\n(%du-\\n(.vu\n", S9, S9);
	}
	if (cll[icol][0])
		Bprint(&tabout, ".ll %sn\n", cll[icol]);
	else
		Bprint(&tabout, ".ll \\n(%du*%du/%du\n", SL, ctspan(ilin, icol), ncol + 1);
	Bprint(&tabout, ".if \\n(.l<\\n(%2s .ll \\n(%2su\n", reg(icol, CRIGHT),
	     reg(icol, CRIGHT));
	if (ctype(ilin, icol) == 'a')
		Bprint(&tabout, ".ll -2n\n");
	Bprint(&tabout, ".in 0\n");
	while (gets1(line, sizeof(line))) {
		if (line[0] == 'T' && line[1] == '}' && line[2] == tab) 
			break;
		if (match("T}", line)) 
			break;
		Bprint(&tabout, "%s\n", line);
	}
	if (fn && *fn) 
		Bprint(&tabout, ".ft \\n(%d\n", S1);
	if (sz && *sz) 
		Bprint(&tabout, ".br\n.ps\n.vs\n");
	Bprint(&tabout, ".br\n");
	Bprint(&tabout, ".di\n");
	Bprint(&tabout, ".nr %c| \\n(dn\n", texname);
	Bprint(&tabout, ".nr %c- \\n(dl\n", texname);
	Bprint(&tabout, "..\n");
	Bprint(&tabout, ".ec \\\n");
	/* copy remainder of line */
	if (line[2])
		tcopy (sp, line + 3);
	else
		*sp = 0;
	oname = texname;
	texname = texstr[++texct];
	return(oname);
}


void
untext(void)
{
	rstofill();
	Bprint(&tabout, ".nf\n");
	Bprint(&tabout, ".ll \\n(%du\n", SL);
}


