Code: Select all
// [RH]
// SexMessage: Replace parts of strings with gender-specific pronouns
//
// The following expansions are performed:
// %g -> he/she/it
// %h -> him/her/it
// %p -> his/her/its
// %o -> other (victim)
// %k -> killer
//
void SexMessage (const char *from, char *to, int gender, const char *victim, const char *killer)
{
static const char *genderstuff[3][3] =
{
{ "he", "him", "his" },
{ "she", "her", "her" },
{ "it", "it", "its" }
};
static const int gendershift[3][3] =
{
{ 2, 3, 3 },
{ 3, 3, 3 },
{ 2, 2, 3 }
};
const char *subst = NULL;
do
{
if (*from != '%')
{
*to++ = *from;
}
else
{
int gendermsg = -1;
switch (from[1])
{
case 'g': gendermsg = 0; break;
case 'h': gendermsg = 1; break;
case 'p': gendermsg = 2; break;
case 'o': subst = victim; break;
case 'k': subst = killer; break;
}
if (subst != NULL)
{
size_t len = strlen (subst);
memcpy (to, subst, len);
to += len;
from++;
subst = NULL;
}
else if (gendermsg < 0)
{
*to++ = '%';
}
else
{
strcpy (to, genderstuff[gender][gendermsg]);
to += gendershift[gender][gendermsg];
from++;
}
}
} while (*from++);
}