/*********************************************************************** * This snip contains two functions: * * * * count_color_string will allow you to parse through color codes and * * determine what the actual string length is, minus the color codes. * * * * check_color_string will return true if the end of the string is not * * '{' followed by '\0'. This fixes tweeks who like to "gos test{" * * * * This code is freely given with many thanks to many people, in the * * hopes of starting to return the favor. * * * * Please be kind and return the favor with your own releases. * * * * --Snafu Life. * ***********************************************************************/ /************************************************ * In the beginning there was Diku. Thank You. * * Then there was Merc. Thank You. * * Then there was Rom. Thank You. * * Then there was QuickMud. Thank You. * * There were also Snips. Thank You. * * * * -- Snafu Life. * ************************************************/ /************************************************************* * File Name: merc.h * * * * Place the following in a suitable place. * * I chose to do a search for act_info.c and place it there. * * I then placed both functions at the end of act_info.c * * * *************************************************************/ int count_color_string args( (char *string ) ); bool check_color_string args( (char *string ) ); /************************************************************* File Name: act_info.c Name: count_color_string Purpose: Returns the string length minus color codes. Written By: Snafu Life. *************************************************************/ int count_color_string( char *string ) { int i,count=0; char arg[MSL]; /* I have MSL defined as MAX_STRING_LENGTH * I am, as many others are, LAZY!!! */ /* limit the length of string */ strcpy(arg,string); /* Begin the loop through the string */ for (i=0;i<=MIL;i++) { /* An out as soon as the end of the string * is reached, so we don't parse through * the entire MSL, unnessisarily. */ if (arg[i] == '\0') { break; } /* If string[i] isn't '{', then add to count & continue. * Placed here to save time as most chars won't be '{' */ else if(string[i] != '{' ) { count++; continue; } /* If arg[i] and arg[i+1] is '{', add only one * to the count and skip the second '{' */ if (arg[i] == '{' && arg[i+1] == '{' ) { i++; count++; continue; } /* If arg[i] is '{' and arg[i+1] isn't '{' or '\0' * Don't add to the count but skip the next char. */ else if(arg[i] == '{' && arg[i+1] != '{' && arg[i+1] != '\0') { i += 1; continue; } /* If arg[i] is '{' and arg[i+1] is '\0' * stop the procession and don't count the char. * */ else if(arg[i] == '{' && arg[i+1] != '{' && arg[i+1] == '\0') { break; } /* isn't need, but makes me feel better ;) */ else { count++; continue; } } return count; } /* * NOTE: You might want to add bool check_color_string * * If you pre-color define your gossips,who, etc. By typing { at * the end you "litter"ally bypass the color. * * Example: gos test * Result: {CYou gossip '{Rtest{C'{x * As Shown: You gossip 'test' * * Example: gos test{ * Result: {CYou gossip '{Rtest{{C'{x * As Shown: You gossip 'test{C' * * Bool check_color returns false if '{' is at the end. */ /************************************************************* File Name: act_info.c Name: check_color_string Purpose: Returns true if end of string is '{' Written By: Snafu Life. *************************************************************/ bool check_color_string(char *string ) { int i; /* Sanity check for empty strings */ if(string[0] == '\0') { return FALSE; } /* Start looping through *string */ for(i=0;i