/*                         *** scratt.c ***                          */
/*                                                                   */
/* IBM - PC microsoft "C" under PC-DOS                               */
/*                                                                   */
/* Function to turn on and off in a toggle switch manner various     */
/* screen attributes such as BOLD, blink, reverse video, etc.        */
/* Returns a 0 if successful or a -1 if not.                         */
/*                                                                   */
/* Written by L. Cuthbertson, April 1984.                            */
/*                                                                   */
/*********************************************************************/
/*                                                                   */

#define NULL	'\000'
#define POUND	'#'

int scratt(iatt)
int iatt;
{
	extern char SGR[];
	char catt[3],command[20];
	static int switches[9] = {0,0,0,0,0,0,0,0,0};
	int i,j,inpos,outpos;
	int savpos,gotone;

	/* error check */
	if (iatt<0 || iatt>8)
		return(-1);

	/* toggle selected switch */
	if (iatt == 0) {
		for(i=0;i<9;i++) {
			switches[i] = 0;
		}
	} else {
		switches[iatt] = !(switches[iatt]);
	}

	/* initialize screen controls */
	scrinit();

	/* turn all attributes off ***********************************/
	catt[0] = '0';		/* turn all attributes off */
	catt[1] = NULL;

	/* build control sequence */
	inpos = 0;	/* position in control line */
	outpos = 0;	/* position in command line */

	while (SGR[inpos] != POUND)
		command[outpos++] = SGR[inpos++];

	for (i=0;catt[i] != NULL;i++)
		command[outpos++] = catt[i];

	inpos++;
	while(SGR[inpos] != NULL)
		command[outpos++] = SGR[inpos++];

	command[outpos] = NULL;

	/* write command to screen */
	writes(command);

	/* turn selected attibutes on ********************************/
	if (iatt != 0) {
		gotone = 0;

		/* loop through switches */
		for(j=1;j<9;j++) {
			if (switches[j] != 0) {

				/* got an attribute */
				gotone++;
				inpos = 0;
				outpos = 0;
				sprintf(catt,"%d",j);

				while (SGR[inpos] != POUND)
					command[outpos++] = SGR[inpos++];

				for (i=0;catt[i] != NULL;i++)
					command[outpos++] = catt[i];

				inpos++;
				while(SGR[inpos] != NULL)
					command[outpos++] = SGR[inpos++];

				command[outpos] = NULL;
				writes(command);
			}
		}
	}

	return(0);
}
