]>
jfr.im git - irc/quakenet/newserv.git/blob - newsearch/ns-modes.c
10 #include "../nick/nick.h"
11 #include "../channel/channel.h"
12 #include "../lib/flags.h"
14 struct modes_localdata
{
20 void *modes_exe(struct searchNode
*thenode
, int type
, void *theinput
);
21 void modes_free(struct searchNode
*thenode
);
23 struct searchNode
*modes_parse(int type
, int argc
, char **argv
) {
24 struct modes_localdata
*localdata
;
25 struct searchNode
*thenode
;
29 parseError
="modes: usage: modes (mode string)";
34 case SEARCHTYPE_CHANNEL
:
43 parseError
="modes: unsupported search type";
47 localdata
=(struct modes_localdata
*)malloc(sizeof(struct modes_localdata
));
50 localdata
->setmodes
=0;
51 localdata
->clearmodes
= ~0;
53 setflags(&(localdata
->setmodes
), 0xFFFF, argv
[0], flaglist
, REJECT_NONE
);
54 setflags(&(localdata
->clearmodes
), 0xFFFF, argv
[0], flaglist
, REJECT_NONE
);
56 localdata
->clearmodes
= ~(localdata
->clearmodes
);
58 thenode
=(struct searchNode
*)malloc(sizeof(struct searchNode
));
60 thenode
->returntype
= RETURNTYPE_BOOL
;
61 thenode
->localdata
= (void *)localdata
;
62 thenode
->exe
= modes_exe
;
63 thenode
->free
= modes_free
;
68 void *modes_exe(struct searchNode
*thenode
, int type
, void *value
) {
69 struct modes_localdata
*localdata
;
74 localdata
= (struct modes_localdata
*)thenode
->localdata
;
76 switch (localdata
->type
) {
77 case SEARCHTYPE_CHANNEL
:
78 cip
=(chanindex
*)value
;
81 flags
=cip
->channel
->flags
;
93 if (~flags
& (localdata
->setmodes
))
94 return falseval(type
);
96 if (flags
& (localdata
->clearmodes
))
97 return falseval(type
);
102 void modes_free(struct searchNode
*thenode
) {
103 free (thenode
->localdata
);