]>
jfr.im git - irc/quakenet/newserv.git/blob - newsearch/ns-channeliter.c
12 void channeliter_free(searchCtx
*ctx
, struct searchNode
*thenode
);
13 void *channeliter_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *theinput
);
15 struct channeliter_localdata
{
17 struct searchVariable
*variable
;
21 struct searchNode
*channeliter_parse(searchCtx
*ctx
, int type
, int argc
, char **argv
) {
23 struct channeliter_localdata
*localdata
;
26 parseError
= "channeliter: usage: channeliter variable";
30 if(type
!= SEARCHTYPE_NICK
) {
31 parseError
= "channeliter: this function is only valid for nick searches.";
35 if(!(localdata
=(struct channeliter_localdata
*)malloc(sizeof(struct channeliter_localdata
)))) {
36 parseError
= "malloc: could not allocate memory for this search.";
40 if(!(localdata
->variable
=var_register(ctx
, type
, argv
[0], RETURNTYPE_STRING
))) {
45 if(!(thenode
=(struct searchNode
*)malloc(sizeof(struct searchNode
)))) {
46 parseError
= "malloc: could not allocate memory for this search.";
51 localdata
->currentchannel
= 0;
52 localdata
->lastnick
= NULL
;
54 thenode
->returntype
= RETURNTYPE_BOOL
;
55 thenode
->localdata
= localdata
;
56 thenode
->exe
= channeliter_exe
;
57 thenode
->free
= channeliter_free
;
62 void channeliter_free(searchCtx
*ctx
, struct searchNode
*thenode
) {
63 free(thenode
->localdata
);
67 void *channeliter_exe(searchCtx
*ctx
, struct searchNode
*thenode
, void *theinput
) {
68 struct channeliter_localdata
*localdata
= thenode
->localdata
;
69 nick
*np
= (nick
*)theinput
;
71 if(np
!= localdata
->lastnick
) {
72 localdata
->lastnick
= np
;
73 localdata
->currentchannel
= 0;
76 if(np
->channels
->cursi
> MAX_CHANS
)
79 if(localdata
->currentchannel
>= np
->channels
->cursi
)
82 var_setstr(localdata
->variable
, ((channel
**)np
->channels
->content
)[localdata
->currentchannel
++]->index
->name
->content
);