#include <string.h>
#include <assert.h>
#include <sys/types.h>
#ifdef DMALLOC
#include <dmalloc.h>
#endif
#include "channel.h"
#include "tcltk.h"
#include "messages.h"
void tchan::setmode(char mode, int modetype) {
if((mode>='a')&&(mode<='z')) modes[mode-97]=modetype;
if((mode>='A')&&(mode<='Z')) modes[mode-65+26]=modetype;
}
int tchan::getmode(char mode) {
if((mode>='a')&&(mode<='z')) return modes[mode-97];
if((mode>='A')&&(mode<='Z')) return modes[mode-65+26];
return 0;
}
void tchan::clearmodes(void) {
for(int n=0;n<52;n++) {
modes[n]=0;
}
keyword[0]=0;
limit=0;
}
int tchan::clearnicklist() {
nicklist.clear();
TT_EvalF(TT_ARGS,"%s.nicks delete 0 end",pathname);
return 0;
}
int tchan::addnicks(char *nicks) {
tnick *nickp;
char *position;
position=strtok(nicks," ");
while(position) {
if(!(nickp=new tnick(position))) {
fprintf(stderr,M_OUT_OF_MEMORY);
exit(1);
}
nicklist.insert_ascending(*nickp);
delete nickp;
position=strtok(NULL," ");
}
return 0;
}
void tchan::deop(char *nickname) {
tnick nick(nickname);
tnick *nickp;
int n;
assert(nickp=nicklist.find(nick));
if(nickp->oped == 0) return;
tnick newnick(*nickp);
newnick.setoped(0);
n=nicklist.deleteitem(nick);
TT_EvalF(TT_ARGS,"%s.nicks delete %d",pathname,n);
n=nicklist.insert_ascending(newnick);
TT_EvalF(TT_ARGS,"%s.nicks insert %d %q",pathname,n,newnick.getentry());
}
void tchan::op(char *nickname) {
tnick nick(nickname);
tnick *nickp;
int n;
assert(nickp=nicklist.find(nick));
if(nickp->oped == 1) return;
tnick newnick(*nickp);
newnick.setoped(1);
n=nicklist.deleteitem(nick);
TT_EvalF(TT_ARGS,"%s.nicks delete %d",pathname,n);
n=nicklist.insert_ascending(newnick);
TT_EvalF(TT_ARGS,"%s.nicks insert %d %q",pathname,n,newnick.getentry());
}
void tchan::devoice(char *nickname) {
tnick nick(nickname);
tnick *nickp;
int n;
assert(nickp=nicklist.find(nick));
if(nickp->voiced == 0) return;
tnick newnick(*nickp);
newnick.setvoiced(0);
n=nicklist.deleteitem(nick);
TT_EvalF(TT_ARGS,"%s.nicks delete %d",pathname,n);
n=nicklist.insert_ascending(newnick);
TT_EvalF(TT_ARGS,"%s.nicks insert %d %q",pathname,n,newnick.getentry());
}
void tchan::voice(char *nickname) {
tnick nick(nickname);
tnick *nickp;
int n;
assert(nickp=nicklist.find(nick));
if(nickp->voiced == 1) return;
tnick newnick(*nickp);
newnick.setvoiced(1);
n=nicklist.deleteitem(nick);
TT_EvalF(TT_ARGS,"%s.nicks delete %d",pathname,n);
n=nicklist.insert_ascending(newnick);
TT_EvalF(TT_ARGS,"%s.nicks insert %d %q",pathname,n,newnick.getentry());
}
int tchan::addnick(char *nickname) {
tnick nick(nickname);
int n;
n=nicklist.insert_ascending(nick);
TT_EvalF(TT_ARGS,"%s.nicks insert %d %q",pathname,n,nickname);
return 0;
}
int tchan::changenick(char *nickname, char *newnickname) {
tnick nick(nickname);
tnick *nickp;
int n;
nickp=nicklist.find(nick);
tnick newnick(*nickp);
newnick.changenick(newnickname);
n=nicklist.deleteitem(nick);
TT_EvalF(TT_ARGS,"%s.nicks delete %d",pathname,n);
n=nicklist.insert_ascending(newnick);
TT_EvalF(TT_ARGS,"%s.nicks insert %d %q",pathname,n,newnick.getentry());
return 0;
}
int tchan::delnick(char *nickname) {
int n;
tnick nick(nickname);
n=nicklist.deleteitem(nick);
TT_EvalF(TT_ARGS,"%s.nicks delete %d",pathname,n);
return 0;
}
int tchan::updatenicklist() {
tnick *nickp;
TT_EvalF(TT_ARGS,"%s.nicks delete 0 end",pathname);
nicklist.init_trav();
while((nickp=nicklist.trav())) {
TT_EvalF(TT_ARGS,"%s.nicks insert end %q",pathname,nickp->getentry());
}
return 0;
}
int tchan::operator==(tchan &chan) {
return((strcasecmp(name,chan.name)==0)||(strcasecmp(pathname,chan.pathname)==0));
}
int tchan::operator>=(tchan &chan) {
return(strcasecmp(name,chan.name)>=0);
}
tchan::tchan(const char *something) {
int n;
ison=0;
numops=0;
numvoice=0;
numother=0;
limit=0;
topic=0;
keyword[0]=0;
for(n=0;n<52;n++) {
modes[n]=0;
}
strcpy(name,something);
}
tchan::tchan() {
int n;
ison=0;
numops=0;
numvoice=0;
numother=0;
limit=0;
keyword[0]=0;
topic=0;
for(n=0;n<52;n++) {
modes[n]=0;
}
}
tchan::~tchan() {
if(topic) free(topic);
}
syntax highlighted by Code2HTML, v. 0.9.1