/
lib/objects/
lib/rooms/
lib/scripts/
lib/security/
src/banner/
src/util/
/*
*** DaleMUD	ANSI_PARSER.C
***		Parser ansi colors for act();
*/


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>

#include "ansi.h"
#include "protos.h"

extern long SystemFlags;

/*	
    $CMBFG, where M is modier, B is back group color and FG is fore 
    $C0001 would be normal, black back, red fore.
    $C1411 would be bold, blue back, light yellow fore 
*/    

char *ansi_parse(char *code )
{
  static char m[MAX_STRING_LENGTH]; /* increased from 255 to MAX 2-18 msw */
  char b[128],f[128];

if (!code)
    return(""); /* changed this from NULL to "" 2-18 msw */

			/* do modifier */
  	switch(code[0]) {
  	 case '0':sprintf(m,"%s",MOD_NORMAL);
  	 	break;
  	 case '1':sprintf(m,"%s",MOD_BOLD);
  	 	break;
  	 case '2':sprintf(m,"%s",MOD_FAINT);
  	 	break;
			/* not used in ansi that I know of */
  	 case '3':sprintf(m,"%s",MOD_NORMAL);
  	 	break;
  	 case '4':sprintf(m,"%s",MOD_UNDERLINE);
  	 	break;
  	 case '5': sprintf(m,"%s",MOD_BLINK);
  	 	break;

  	 case '6': sprintf(m,"%s",MOD_REVERSE);
  	 	break;

  	 default: sprintf(m,"%s",MOD_NORMAL);
  	 	break;
  	}

	/* do back ground color */
  	switch(code[1]) {
  		case '0': sprintf(b,"%s",BK_BLACK);
  	 		break;
  		case '1': sprintf(b,"%s",BK_RED);
  	 		break;
  		case '2': sprintf(b,"%s",BK_GREEN);
  	 		break;
  		case '3': sprintf(b,"%s",BK_BROWN);
  	 		break;
  		case '4': sprintf(b,"%s",BK_BLUE);
  	 		break;
  		case '5': sprintf(b,"%s",BK_MAGENTA);
  	 		break;
  		case '6': sprintf(b,"%s",BK_CYAN);
  	 		break;
  		case '7': sprintf(b,"%s",BK_LT_GRAY);
  	 		break;
  		default:sprintf(b,"%s",BK_BLACK);
  	 		break;
  	}
  	
	/* do foreground color */
  	switch(code[2]) {     
	 case '0':  	switch(code[3]) {  		/* 00-09 */
	 			case '0': sprintf(f,"%s",FG_BLACK);
  	 				break;
	 			case '1': sprintf(f,"%s",FG_RED);
  	 				break;
	 			case '2': sprintf(f,"%s",FG_GREEN);
  	 				break;
	 			case '3': sprintf(f,"%s",FG_BROWN);
  	 				break;
	 			case '4': sprintf(f,"%s",FG_BLUE);
  	 				break;
	 			case '5': sprintf(f,"%s",FG_MAGENTA);
  	 				break;
	 			case '6': sprintf(f,"%s",FG_CYAN);
  	 				break;
	 			case '7': sprintf(f,"%s",FG_LT_GRAY);
  	 				break;
	 			case '8': sprintf(f,"%s",FG_DK_GRAY);
  	 				break;
	 			case '9': sprintf(f,"%s",FG_LT_RED);
  	 				break;
	 			default: sprintf(f,"%s",FG_DK_GRAY);
  	 				break;
  				} break;

  	 case '1':  	switch(code[3]) {  		/* 10-15 */
  	 			case '0': sprintf(f,"%s",FG_LT_GREEN);
  	 				break;
  	 			case '1': sprintf(f,"%s",FG_YELLOW);
  	 				break;
  	 			case '2': sprintf(f,"%s",FG_LT_BLUE);
  	 				break;
  	 			case '3': sprintf(f,"%s",FG_LT_MAGENTA);
  	 				break;
  	 			case '4': sprintf(f,"%s",FG_LT_CYAN);
  	 				break;
  	 			case '5': sprintf(f,"%s",FG_WHITE);
  	 				break;
  	 			default: sprintf(f,"%s",FG_LT_GREEN);
  	 				break;
  				} break;

	default : sprintf(f,"%s",FG_LT_RED);
  	 	  break;  				
  	}
  	

   strcat(m,b); /* add back ground */
   strcat(m,f); /* add foreground */

 return(m);
}