void IRC::hook_irc_command(char* cmd_name, int (*function_ptr)(char*, irc_reply_data*, void*)) { if (!hooks) { hooks=new irc_command_hook; hooks->function=0; hooks->irc_command=0; hooks->next=0; insert_irc_command_hook(hooks, cmd_name, function_ptr); } else { insert_irc_command_hook(hooks, cmd_name, function_ptr); } }
void IRC::insert_irc_command_hook(irc_command_hook* hook, char* cmd_name, int (*function_ptr)(char *, char*, irc_reply_data*, void*, void*), void *pd) { if (hook->function) { if (!hook->next) { hook->next=new irc_command_hook; hook->next->function=0; hook->next->irc_command=0; hook->next->next=0; hook->next->private_data = pd; } insert_irc_command_hook(hook->next, cmd_name, function_ptr, pd); } else { hook->function=function_ptr; if (cmd_name == NULL) { hook->irc_command = NULL; } else { hook->irc_command=new char[strlen(cmd_name)+1]; strcpy(hook->irc_command, cmd_name); } } }
void IRC::insert_irc_command_hook(irc_command_hook* hook, char* cmd_name, int (*function_ptr)(char*, irc_reply_data*, void*)) { if (hook->function) { if (!hook->next) { hook->next=new irc_command_hook; hook->next->function=0; hook->next->irc_command=0; hook->next->next=0; } insert_irc_command_hook(hook->next, cmd_name, function_ptr); } else { hook->function=function_ptr; hook->irc_command=new char[strlen(cmd_name)+1]; strcpy(hook->irc_command, cmd_name); } }