www.pudn.com > 日期、菜单、字符串的C函数.rar > SCRATT.C


/*                         *** 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); 
}