/******************************************************************************

	DbgQRg()

	This function displays details about the q-registers.

*****************************************************************************/

#include "ZPort.h"		/* define portability identifiers */
#include "DefTeco.h"		/* define general identifiers */

extern	VOID	ZDspBf();	/* output a buffer to the terminal */
extern	VOID	ZDspCh();	/* output a character to the terminal */

EXTERN	struct	QReg	QRgstr[];	/* q-registers */


VOID DspTxQ(j)				/* display text of q-registers */
DEFAULT j;
{
	LOCAL	char	*EndStr;
	LOCAL	DEFAULT	k;

	DbgDBf("  ");
	MakDBf(QRgstr[j].Start, 10);
	ZDspBf(DBfBeg, DBfPtr-DBfBeg);
	for (k=1; k<=11-(DBfPtr-DBfBeg); ++k)
		ZDspCh(' ');
	DbgDBf("\t");
	MakDBf(QRgstr[j].End_P1, 10);
	ZDspBf(DBfBeg, DBfPtr-DBfBeg);
	for (k=1; k<=11-(DBfPtr-DBfBeg); ++k)
		ZDspCh(' ');
	DbgDBf("\t");
	for (EndStr = QRgstr[j].Start;
	     (EndStr < QRgstr[j].End_P1) &&
	     ((EndStr-QRgstr[j].Start) < 35);
	     ++EndStr)
		if (*EndStr == '\015')
			break;
	TypBuf(QRgstr[j].Start, EndStr);
	DbgDBf("\015\012");
}


VOID DspNmD(j)				/* display numeric of digit q-regs */
DEFAULT j;
{
	LOCAL	char	*TmpPtr;
	LOCAL	DEFAULT	bindex;
	static	char	buffer[16] = {
	' ','x',' ',' ','n','n','n','n','n','n','n','n','n','n','n','\t'};

	buffer[1] = j + '0';			/* q-register name */
	MakDBf(QRgstr[j].Number, 10);
	bindex = 4;
	TmpPtr = DBfBeg;
	while (TmpPtr < DBfPtr)
		buffer[bindex++] = *TmpPtr++;
	while (bindex < 15)
		buffer[bindex++] = ' ';
	ZDspBf(buffer, 16);
}

VOID DspNmC(j)				/* display numeric of char q-regs */
DEFAULT j;
{
	LOCAL	char	*TmpPtr;
	LOCAL	DEFAULT	bindex;
	static	char	buffer[16] = {
	' ','x',' ',' ','n','n','n','n','n','n','n','n','n','n','n','\t'};

	buffer[1] = j + '\127';			/* q-register name */
	MakDBf(QRgstr[j].Number, 10);
	bindex = 4;
	TmpPtr = DBfBeg;
	while (TmpPtr < DBfPtr)
		buffer[bindex++] = *TmpPtr++;
	while (bindex < 15)
		buffer[bindex++] = ' ';
	ZDspBf(buffer, 16);
}


VOID DbgQRg()					/* display q-registers */
{
	LOCAL	DEFAULT	i;

	DbgDBf("  Numeric part of q-registers:\015\012\012");
	DbgDBf("nam   number   \t");
	DbgDBf("nam   number   \t");
	DbgDBf("nam   number   \t");
	DbgDBf("nam   number   \t");
	DbgDBf("nam   number   \t");
	DbgDBf("\015\12");

	for (i=0; i<=4; ++i)			/* q-registers '0' - '4' */
		DspNmD(i);
	DbgDBf("\015\012");
	for (i=5; i<=9; ++i)			/* q-registers '5' - '9' */
		DspNmD(i);
	DbgDBf("\015\012");
	for (i=10; i<=14; ++i)			/* q-registers 'a' - 'e' */
		DspNmC(i);
	DbgDBf("\015\012");
	for (i=15; i<=19; ++i)			/* q-registers 'f' - 'j' */
		DspNmC(i);
	DbgDBf("\015\012");
	for (i=20; i<=24; ++i)			/* q-registers 'k' - 'o' */
		DspNmC(i);
	DbgDBf("\015\012");
	for (i=25; i<=29; ++i)			/* q-registers 'p' - 't' */
		DspNmC(i);
	DbgDBf("\015\012");
	for (i=30; i<=34; ++i)			/* q-registers 'u' - 'y' */
		DspNmC(i);
	DbgDBf("\015\012");
	DspNmC(35);				/* q-register 'z' */
	DbgDBf("\015\012");
	DbgDBf("\015\012");

	DbgDBf("  Text part of q-registers (not displayed if empty)");
	DbgDBf("\015\012\012");
	DbgDBf("nam Start      \tEnd_P1");
	DbgDBf("\t\t1st text line (truncated at 35 characters)\015\012");
	for (i=0; i<=9; ++i)
		if (QRgstr[i].Start != NULL)		/* if not empty */
			{
			ZDspCh(' ');
			ZDspCh(i+'0');
			DspTxQ(i);
			}
	for (i=10; i<=35; ++i)
		if (QRgstr[i].Start != NULL)		/* if not empty */
			{
			ZDspCh(' ');
			ZDspCh(i+'\127');
			DspTxQ(i);
			}
}
