- destroycommandtree(searchTree);
- destroycommandtree(chanOutputTree);
- destroycommandtree(nickOutputTree);
- destroycommandtree(userOutputTree);
- deregistercontrolcmd("nicksearch", do_nicksearch);
- deregistercontrolcmd("chansearch", do_chansearch);
- deregistercontrolcmd("usersearch", do_usersearch);
+ searchList *sl, *psl;
+ int i,n;
+ Command *cmdlist[100];
+
+ sl = globalterms;
+ while (sl) {
+ psl = sl;
+ sl = sl->next;
+
+ n=getcommandlist(searchCmdTree,cmdlist,100);
+ for(i=0;i<n;i++) {
+ deregistersearchterm( (searchCmd *)cmdlist[i]->handler, psl->name->content, psl->cmd);
+ }
+
+ freesstring(psl->name);
+ free(psl);
+
+ }
+
+ deregistersearchcommand( reg_nicksearch );
+ deregistersearchcommand( reg_chansearch );
+ deregistersearchcommand( reg_usersearch );
+ destroycommandtree( searchCmdTree );
+}
+
+void registerglobalsearchterm(char *term, parseFunc parsefunc) {
+ searchList *sl = malloc(sizeof(searchList));
+ int i,n;
+ Command *cmdlist[100];
+
+ sl->cmd = parsefunc;
+ sl->name = getsstring(term, NSMAX_COMMAND_LEN);
+ sl->next = NULL;
+
+ if ( globalterms != NULL ) {
+ sl->next = globalterms;
+ }
+ globalterms = sl;
+
+ n=getcommandlist(searchCmdTree,cmdlist,100);
+ for(i=0;i<n;i++) {
+ registersearchterm( (searchCmd *)cmdlist[i]->handler,term, parsefunc);
+ }
+}
+
+void deregisterglobalsearchterm(char *term, parseFunc parsefunc) {
+ int i,n;
+ Command *cmdlist[100];
+ searchList *sl, *psl=NULL;
+
+ sl = globalterms;
+ while (sl) {
+ if ( strcmp( sl->name->content, term) == 0 ) {
+ break;
+ }
+ psl = sl;
+ sl = sl->next;
+ }
+
+ if (sl) {
+ if( psl ) {
+ psl->next = sl->next;
+ }
+
+ n=getcommandlist(searchCmdTree,cmdlist,100);
+ for(i=0;i<n;i++) {
+ deregistersearchterm( (searchCmd *)cmdlist[i]->handler, term, parsefunc);
+ }
+ freesstring(sl->name);
+ free(sl);
+ }