#include	"ksysdefs.h"
#include	"ksysvtyp.h"
#include	"ksysprot.h"
#include	"keyproto.h"
/**/
/*EXTERNAL_FUNCS*/
#ifdef	CAN_PROTO
extern int twrkey(char *);
#else
extern int twrkey();
#endif
extern	KENV	kenv;
extern	KBUF	kb;		/* defined in keyio.c */
extern	KARD	*kd;	/* defined in keyio.c */
/**/
static	int		twropts = 0;
/**/
/**/
/**/
/**/
twrset(is)
char	*is;
{
	strcnd(is);
	switch(*is)	{
	case	'm':	if(twropts & DC)		twropts &= ~DC;
					else					twropts |= DC;
	when	'f':	kenv.folder = atoi(is+1);
					if(kenv.folder <= 32)	kenv.folder = 56;
	when	'q':	if(kenv.leisur & DB)	kenv.leisur &= ~DB;
					else					kenv.leisur |= DB;
	when	'c':	if(kenv.leisur & DA)	kenv.leisur &= ~DA;
					else					kenv.leisur |= DA;
	when	'k':	twrkey(is+1);
					break;
	default:
	case	ZERO:
	case	'?':	thint(0);
					twrshow(stdout);
					break;
	}
	return(twropts);
}
twrshow(fp)
FILE	*fp;
{
	if(kenv.leisur & DA)	scr_cl(fp);
	fprintf(fp,"TERMINAL DISPLAY OPTIONS\n");
	if(twropts & DA)	{
		auto	int		nk;
		auto	int		nb = kb.nfld;
		fprintf(fp,"KEYS TO DISPLAY\n");
		for(nk = 0; nk < nb; nk++)	{
			if(kd[nk].flags & DA)
				fprintf(fp,"%s\n",kd[nk].label);
		}
	}
	else	{
		fprintf(fp,"ALL KEYS DISPLAYED\n");
		}
	if(kenv.leisur & DB)	query(fp);
/***WORKING***/
	return(twropts);
}
/*###60 [cc] syntax error at or near type word "char"%%%*/
twrkey(is)		/* turn on flags for printing */
char	*is;
{
	auto	char	*isx = is;
	auto	char	*ksx = is;
	auto	int		nk;
	twropts &= ~DA;
/***cancel any previous flags***/
	for(nk = 0; nk < kb.nfld; nk++)	kd[nk].flags &= ~DA;
/***allow for comma and pipe separated lists***/
	strxty(isx,',',' ');
	strxty(isx,'|',' ');
/***turn on new flags as given in list***/
	while((int)(isx = strtoc(ksx = isx,' ')))	{
	strcnd(ksx);
	if(isnull(ksx))	continue;
	if((nk = badkey(ksx)) < 0)	{
/***turn off key list***/
		twropts &= ~DA;
		terror(FUBAR);
		}
	kd[nk].flags |= DA;
	}
	twropts |= DA;
	return(twropts);
}
twrcd(fp,ty,fw)		/*	write card to a terminal */
FILE	*fp;
int		ty;
int		fw;
{
	auto	int		nk;
	auto	int		nf = kb.nfld;
	auto	int		np = 0;
	if(twropts & DC)	fputs("\n\n\n",fp);
	for(nk = 0; nk < nf; nk++)	{
		if(kd[nk].data)	{
			if((twropts & DA) &&
				!(kd[nk].flags & DA))	continue;
			cdprp(nk,fp,'z',fw);
			np += 1;
		}
	}
	if(np)	fputs("\n",fp);
	fflush(fp);
	return(0);
}
thint(ty)
int		ty;
{
static	char	*hx[] = {
"=TERMINAL DISPLAY OPTIONS",
"T?        hint and options for terminal display",
"Tc        clear before display (toggle)",
"Td        double space (toggle)",
"Tfnn      fold at nn",
"Tm        add top margin",
"Tq        query after display (toggle)",
"Tk list   display only listed keys",
"Tk        delete key list",
"=",
"~",
	}	;
	prhint(hx,sizeof(hx)/sizeof(char **),NULL,ZERO);
	return(ty);
}
