return CMD_OK;
}
-void newsearch_ctxinit(searchCtx *ctx, searchParseFunc searchfn, replyFunc replyfn, wallFunc wallfn, void *arg, searchCmd *cmd, nick *np) {
+void newsearch_ctxinit(searchCtx *ctx, searchParseFunc searchfn, replyFunc replyfn, wallFunc wallfn, void *arg, searchCmd *cmd, nick *np, void *displayfn, int limit) {
memset(ctx, 0, sizeof(searchCtx));
ctx->reply = replyfn;
ctx->arg = arg;
ctx->searchcmd = cmd;
ctx->sender = np;
+ ctx->limit = limit;
+ ctx->displayfn = displayfn;
}
int do_nicksearch_real(replyFunc reply, wallFunc wall, void *source, int cargc, char **cargv) {
rejoinline(cargv[arg],cargc-arg);
}
- newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_nicksearch, sender);
+ newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_nicksearch, sender, display, limit);
if (!(search = ctx.parser(&ctx, cargv[arg]))) {
reply(sender,"Parse error: %s",parseError);
return CMD_ERROR;
}
- nicksearch_exe(search, &ctx, sender, display, limit);
+ nicksearch_exe(search, &ctx);
(search->free)(&ctx, search);
return do_nicksearch_real(controlreply, controlwallwrapper, source, cargc, cargv);
}
-void nicksearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, NickDisplayFunc display, int limit) {
+void nicksearch_exe(struct searchNode *search, searchCtx *ctx) {
int i, j;
int matches = 0;
unsigned int cmarker;
unsigned int tchans=0,uchans=0;
struct channel **cs;
- nick *np;
+ nick *np, *sender = ctx->sender;
senderNSExtern = sender;
-
+ NickDisplayFunc display = ctx->displayfn;
+ int limit = ctx->limit;
+
/* Get a marker value to mark "seen" channels for unique count */
cmarker=nextchanmarker();
rejoinline(cargv[arg],cargc-arg);
}
- newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_chansearch, sender);
+ newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_chansearch, sender, display, limit);
if (!(search = ctx.parser(&ctx, cargv[arg]))) {
reply(sender,"Parse error: %s",parseError);
return CMD_ERROR;
}
- chansearch_exe(search, &ctx, sender, display, limit);
+ chansearch_exe(search, &ctx);
(search->free)(&ctx, search);
return do_chansearch_real(controlreply, controlwallwrapper, source, cargc, cargv);
}
-void chansearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, ChanDisplayFunc display, int limit) {
+void chansearch_exe(struct searchNode *search, searchCtx *ctx) {
int i;
chanindex *cip;
int matches = 0;
+ nick *sender = ctx->sender;
senderNSExtern = sender;
+ ChanDisplayFunc display = ctx->displayfn;
+ int limit = ctx->limit;
search=coerceNode(ctx, search, RETURNTYPE_BOOL);
rejoinline(cargv[arg],cargc-arg);
}
- newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_usersearch, sender);
+ newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_usersearch, sender, display, limit);
if (!(search = ctx.parser(&ctx, cargv[arg]))) {
reply(sender,"Parse error: %s",parseError);
return CMD_ERROR;
}
- usersearch_exe(search, &ctx, sender, display, limit);
+ usersearch_exe(search, &ctx);
(search->free)(&ctx, search);
return do_usersearch_real(controlreply, controlwallwrapper, source, cargc, cargv);
}
-void usersearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, UserDisplayFunc display, int limit) {
+void usersearch_exe(struct searchNode *search, searchCtx *ctx) {
int i;
authname *aup;
int matches = 0;
+ nick *sender = ctx->sender;
+ int limit = ctx->limit;
+ UserDisplayFunc display = ctx->displayfn;
senderNSExtern = sender;
-
+
search=coerceNode(ctx, search, RETURNTYPE_BOOL);
for (i=0;i<AUTHNAMEHASHSIZE;i++) {
int lastvar;
struct searchCmd *searchcmd;
nick *sender;
+ int limit;
+ void *displayfn;
} searchCtx;
/* Core functions */
void printuser(searchCtx *, nick *, authname *);
void printchannel(searchCtx *, nick *, chanindex *);
-void nicksearch_exe(struct searchNode *search, searchCtx *sctx, nick *sender, NickDisplayFunc display, int limit);
-void chansearch_exe(struct searchNode *search, searchCtx *sctx, nick *sender, ChanDisplayFunc display, int limit);
-void usersearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, UserDisplayFunc display, int limit);
+void nicksearch_exe(struct searchNode *search, searchCtx *sctx);
+void chansearch_exe(struct searchNode *search, searchCtx *sctx);
+void usersearch_exe(struct searchNode *search, searchCtx *ctx);
int do_nicksearch_real(replyFunc reply, wallFunc wall, void *source, int cargc, char **cargv);
int do_chansearch_real(replyFunc reply, wallFunc wall, void *source, int cargc, char **cargv);
searchNode *var_get(searchCtx *ctx, char *arg);
void var_setstr(struct searchVariable *v, char *data);
-void newsearch_ctxinit(searchCtx *ctx, searchParseFunc searchfn, replyFunc replyfn, wallFunc wallfn, void *arg, searchCmd *cmd, nick *sender);
+void newsearch_ctxinit(searchCtx *ctx, searchParseFunc searchfn, replyFunc replyfn, wallFunc wallfn, void *arg, searchCmd *cmd, nick *sender, void *displayfn, int limit);
/* AST functions */
memset(&cache, 0, sizeof(cache));
cache.tree = tree;
- newsearch_ctxinit(&ctx, search_astparse, reply, wall, &cache, reg_nicksearch, sender);
+ newsearch_ctxinit(&ctx, search_astparse, reply, wall, &cache, reg_nicksearch, sender, display, limit);
buf[0] = '\0';
reply(sender, "Parsing: %s", ast_printtree(buf, sizeof(buf), tree, reg_nicksearch));
reply(sender, "Executing...");
if(header)
header(sender, headerarg);
- nicksearch_exe(search, &ctx, sender, display, limit);
+ nicksearch_exe(search, &ctx);
(search->free)(&ctx, search);
searchNode *search;
char buf[1024];
- newsearch_ctxinit(&ctx, search_astparse, reply, wall, &cache, reg_chansearch, sender);
+ newsearch_ctxinit(&ctx, search_astparse, reply, wall, &cache, reg_chansearch, sender, display, limit);
memset(&cache, 0, sizeof(cache));
cache.tree = tree;
reply(sender, "Executing...");
if(header)
header(sender, headerarg);
- chansearch_exe(search, &ctx, sender, display, limit);
+ chansearch_exe(search, &ctx);
(search->free)(&ctx, search);
memset(&cache, 0, sizeof(cache));
cache.tree = tree;
- newsearch_ctxinit(&ctx, search_astparse, reply, wall, &cache, reg_usersearch, sender);
+ newsearch_ctxinit(&ctx, search_astparse, reply, wall, &cache, reg_usersearch, sender, display, limit);
buf[0] = '\0';
reply(sender, "Parsing: %s", ast_printtree(buf, sizeof(buf), tree, reg_usersearch));
reply(sender, "Executing...");
if(header)
header(sender, headerarg);
- usersearch_exe(search, &ctx, sender, display, limit);
+ usersearch_exe(search, &ctx);
(search->free)(&ctx, search);
rejoinline(cargv[arg],cargc-arg);
}
- newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_nodesearch, sender);
+ newsearch_ctxinit(&ctx, search_parse, reply, wall, NULL, reg_nodesearch, sender, display, limit);
if (!(search = ctx.parser(&ctx, cargv[arg]))) {
reply(sender,"Parse error: %s",parseError);
return CMD_ERROR;
}
- pnodesearch_exe(search, &ctx, sender, display, limit, subset);
+ pnodesearch_exe(search, &ctx, subset);
(search->free)(&ctx, search);
return do_pnodesearch_real(controlreply, controlwallwrapper, source, cargc, cargv);
}
-void pnodesearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, NodeDisplayFunc display, int limit, patricia_node_t *subset) {
+void pnodesearch_exe(struct searchNode *search, searchCtx *ctx, patricia_node_t *subset) {
int matches = 0;
patricia_node_t *node;
+ nick *sender = ctx->sender;
+ int limit = ctx->limit;
+ NodeDisplayFunc display = ctx->displayfn;
/* Get a marker value to mark "seen" channels for unique count */
//nmarker=nextnodemarker();
void printnode(searchCtx *, nick *, patricia_node_t *);
-void pnodesearch_exe(struct searchNode *search, searchCtx *ctx, nick *sender, NodeDisplayFunc display, int limit, patricia_node_t *subset);
+void pnodesearch_exe(struct searchNode *search, searchCtx *ctx, patricia_node_t *subset);
int do_pnodesearch_real(replyFunc reply, wallFunc wall, void *source, int cargc, char **cargv);