BotInterp::BotInterp(Bot *b, String fn)
: bot(b), counter(0)
{
- logPort = scm_open_file(Utils::string2SCM(fn),
- Utils::string2SCM("a"));
+ logPort = scm_open_file(Utils::str2scm (fn),
+ Utils::str2scm ("a"));
scm_gc_protect_object(logPort);
}
scm_flush(logPort);
}
+namespace
+{
+ bool hptr_lt (const Hook* h, const Hook* h1)
+ // Hook Pointer less than
+ // Used to sort the Hooks list
+ { return *h < *h1; }
+}
+
bool
-BotInterp::AddHook(int hooktype, SCM regex, SCM function, int pri, bool fall) {
+BotInterp::AddHook(int hooktype, SCM regex, SCM function, int pri, bool fall,
+ String name) {
if (scm_string_p(regex) == SCM_BOOL_F)
return false;
- String rx = Utils::scm2String(regex).toUpper();
+ String rx = Utils::to_upper (Utils::scm2str (regex));
SCM r = scm_make_regexp(regex,
scm_listify (gh_lookup("regexp/icase"),
SCM_UNDEFINED));
// First, we check if an hook doesn't exist yet
std::list<Hook *>::iterator it = hooksMap[hooktype].begin();
std::list<Hook *>::iterator it2 = hooksMap[hooktype].end();
+
for ( ; it != it2; ++it)
// It exists, we replace it.
- if ((*it)->regex_str == rx) {
+ if ((*it)->regex_str == rx && (*it)->name == name) {
scm_gc_unprotect_object((*it)->function);
scm_gc_unprotect_object (r);
(*it)->function = function;
(*it)->priority = pri;
(*it)->fallthru = fall;
- hooksMap[hooktype].sort ();
+ hooksMap[hooktype].sort (hptr_lt);
return true;
}
// It does not exist, we create it
hooksMap[hooktype].push_back (new Hook(hooktype, rx, r,
- function, pri, fall));
- hooksMap[hooktype].sort ();
+ function, pri, fall, name));
+ hooksMap[hooktype].sort (hptr_lt);
return true;
}
wrapper_data wd;
wd.args = args;
for ( ; it != it2; ++it) {
- if (scm_regexp_exec((*it)->regex, Utils::string2SCM(match),
+ if (scm_regexp_exec((*it)->regex, Utils::str2scm (match),
SCM_UNDEFINED, SCM_UNDEFINED) != SCM_BOOL_F)
{
wd.func = (*it)->function;
std::list<Timer *>::iterator it = timersList.begin();
std::list<Timer *>::iterator it2 = timersList.end();
std::list<Timer *>::iterator it3;
- Timer *t;
+
struct wrapper_data wd;
wd.args = scm_listify (SCM_UNDEFINED);