Source Code: http://www.divineblood.org/snippets/regtrigger.c
Last Modified: Fri Jan 30, 2004 10:35am
Download without markup
Download as zipfile
#include <regex.h>
char match[3][MAX_INPUT_LENGTH];
case 'a':
i = match[0]; break;
case 'b':
i = match[1]; break;
case 'c':
i = match[2]; break;
void mp_regex_trigger(char *argument, CHAR_DATA *mob, CHAR_DATA *ch)
{
regex_t exprec;
int nmemb = 3, i;
regmatch_t memb[nmemb];
MPROG_LIST *prg;
for (prg = mob->pIndexData->mprogs; prg != NULL; prg = prg->next)
if ( prg->trig_type == TRIG_REGEX)
{
regcomp(&exprec, prg->trig_phrase, REG_EXTENDED|REG_ICASE);
if (!regexec(&exprec, argument, nmemb, memb, 0))
{
for (i = 0; i < nmemb && memb[i+1].rm_so > -1; i++)
{
memcpy(match[i], argument+memb[i+1].rm_so,
memb[i+1].rm_eo-memb[i+1].rm_so);
match[i][memb[i+1].rm_eo-memb[i+1].rm_so] = '\0';
}
program_flow(prg->vnum, prg->code, mob, ch, arg1, arg2);
}
regfree(&exprec);
return;
}
}
#define TRIG_REGEX (Q)
void mp_regex_trigger(char *argument, CHAR_DATA *mob, CHAR_DATA *ch);
{ "regex", TRIG_REGEX, TRUE },
case TRIG_REGEX: return "REGEX";
if (IS_NPC(mob) && HAS_TRIGGER( mob, TRIG_REGEX))
mp_regex_trigger(argument,mob,ch);