/* SDB - table output routine */

#include "bdscio.h"
#include "dbqdefs.h"

#define BINSRT(chr) buffer[bndx++] = chr

db_thead(fp,slptr)
	FILE *fp; struct sel *slptr;
{
	struct sattr *saptr;
	int twidth,fwidth,i;
	char *aname;

	dbv_lnct = dbv_pgln;
	dbv_page++;

	twidth = 0;
	for (saptr = slptr->sl_attrs; saptr != NULL; saptr = saptr->sa_next)
		twidth += saptr->sa_attr->at_size + 2;

	if (dbv_pgln < 1000) fprintf(fp,"[ Page: %d ]\n",dbv_page);
	bstart();
	BINSRT('\n');	/* Blank line for spacing */
	for (saptr = slptr->sl_attrs; saptr != NULL; saptr = saptr->sa_next) {
		fwidth = saptr->sa_attr->at_size;
		if ((aname = saptr->sa_name) == NULL)
			aname = saptr->sa_aname;

		/* Uppercase with _ changed to spaces */

		for (i = 0; i < fwidth; i++)
			if (*aname != 0)
				BINSRT(toheading(*aname++));
			else
				BINSRT(' ');
		BINSRT(' ');
		BINSRT(' ');
	}
	bprint(fp);

	bstart();
	for (i = 0; i < twidth; i++)
		BINSRT('=');
	bprint(fp);
}

int toheading(ch)
char ch;
{
	if (ch == '_')
		return (' ');
	else
		return (toupper(ch));
}

db_tfoot(fp,slptr)
	FILE *fp; struct sel *slptr;
{
	struct sattr *saptr;
	int twidth,i;
	char tempst[22]; char *tptr;

	twidth = 0;
	for (saptr = slptr->sl_attrs; saptr != NULL; saptr = saptr->sa_next)
		twidth += saptr->sa_attr->at_size + 2;

	bstart();
	for (i = 0; i < twidth; i++)
		BINSRT('=');
	bprint(fp);

/* Now print totals */
	bstart();
	for (saptr = slptr->sl_attrs; saptr != NULL; saptr = saptr->sa_next) {
		if (saptr->sa_total != NULL) {
/*			flform(saptr->sa_total,saptr->sa_attr->at_size,-1); */

		      ltoas(&tempst,saptr->sa_total,saptr->sa_attr->at_scale);
			tptr = &tempst;
			i = saptr->sa_attr->at_size - strlen(tptr);
			if (i > 0) while (i--) BINSRT(' ');
			while (*tptr)
				BINSRT(*tptr++);
			BINSRT(' ');
			BINSRT(' ');
		}
		else {
			i = saptr->sa_attr->at_size + 2;
			while (i--) BINSRT(' ');
		}
	}
	bprint(fp);

}

db_tentry(fp,slptr)
	FILE *fp; struct sel *slptr;
{
	struct sattr *saptr;
	int fwidth,i;
	char *temptr,tempfl[4];

	if (dbv_lnct == 0) {
		fputs("\n\n",fp);
		db_thead(fp,slptr);
	}

	dbv_lnct--;

	bstart();
	for (saptr = slptr->sl_attrs; saptr != NULL; saptr = saptr->sa_next) {
		fwidth = saptr->sa_attr->at_size;
		temptr = &buffer[bndx];
		for (i = 0; i < fwidth; i++)
			if (saptr->sa_aptr[i] != 0) {
				BINSRT(saptr->sa_aptr[i]);
				}
			else {
				BINSRT(' ');
			}

		BINSRT(' ');
		BINSRT(' ');
		buffer[bndx] = EOS;

		if (saptr->sa_total != NULL) {
			atols(tempfl,temptr,saptr->sa_attr->at_scale);
			ladd(saptr->sa_total,saptr->sa_total,tempfl);
		}
	}
	bprint(fp);
}

bstart()
{
	bndx = 0;
}
/* replaced by macro
binsert(ch)
	int ch;
{
	if (ch)
	    if (bndx < TABLEMAX)
		buffer[bndx++] = ch;
}
*/
bprint(fp)
	FILE *fp;
{
	buffer[bndx] = EOS;
	fprintf(fp,"%s\n",buffer);
}

/* Long field print routine

lform(longint,width,scale)
char longint[];
int width, scale;
{
	char wbuf[20];
	char *wptr;
	int i,j;

	wptr = wbuf;

	ltoas(wbuf,longint,scale);
	i = width - strlen(wbuf);
	if (i > 0)
	   while (i--)
		binsert(' ');
	while (*wptr)
		binsert(*wptr--);

}
*/
le);
	i = width - strlen(wbuf);
	if (i > 0)
	   while (i--)
		bins