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