summaryrefslogtreecommitdiff
path: root/ychat-0.7.5/src/mods/commands
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2013-04-06 13:14:41 +0200
committerPaul Buetow <paul@buetow.org>2013-04-06 13:14:41 +0200
commit9cd3ccffd5372dfde3af478e3f832f18db4be3f1 (patch)
tree631c295a4a4a16b57502b847626763a279bf6df7 /ychat-0.7.5/src/mods/commands
parent13aaf70af703748fe096e0664c305cd202637ad2 (diff)
tagging tags
Diffstat (limited to 'ychat-0.7.5/src/mods/commands')
-rw-r--r--ychat-0.7.5/src/mods/commands/CVS/Entries32
-rw-r--r--ychat-0.7.5/src/mods/commands/CVS/Repository1
-rw-r--r--ychat-0.7.5/src/mods/commands/CVS/Root1
-rw-r--r--ychat-0.7.5/src/mods/commands/Makefile48
-rwxr-xr-xychat-0.7.5/src/mods/commands/Makefile.in18
-rw-r--r--ychat-0.7.5/src/mods/commands/yc_about.cpp59
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_all.cpp48
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_away.cpp70
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_col.cpp85
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_compopt.cpp22
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_exec.cpp66
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_fake.cpp29
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_getroom.cpp53
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_getrusage.cpp56
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_help.cpp51
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_invisible.cpp30
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_j.cpp105
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_ko.cpp72
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_m.cpp43
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_md5.cpp54
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_me.cpp44
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_morph.cpp53
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_msg.cpp68
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_q.cpp29
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_reload.cpp24
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_ren.cpp74
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_s.cpp47
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_set.cpp101
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_template.cpp24
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_time.cpp21
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_topic.cpp78
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_uptime.cpp21
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_users.cpp27
-rwxr-xr-xychat-0.7.5/src/mods/commands/yc_version.cpp22
34 files changed, 1576 insertions, 0 deletions
diff --git a/ychat-0.7.5/src/mods/commands/CVS/Entries b/ychat-0.7.5/src/mods/commands/CVS/Entries
new file mode 100644
index 0000000..f719ced
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/CVS/Entries
@@ -0,0 +1,32 @@
+/Makefile/1.26/Mon Feb 14 20:09:50 2005//
+/Makefile.in/1.7/Thu Jul 8 14:39:03 2004//
+/yc_about.cpp/1.1/Thu Dec 30 18:36:03 2004//
+/yc_all.cpp/1.1/Thu Dec 30 19:14:52 2004//
+/yc_away.cpp/1.8/Thu Nov 18 13:41:47 2004//
+/yc_col.cpp/1.8/Thu Nov 18 13:41:47 2004//
+/yc_compopt.cpp/1.3/Thu Nov 18 13:41:47 2004//
+/yc_exec.cpp/1.9/Thu Nov 18 13:41:47 2004//
+/yc_fake.cpp/1.11/Thu Nov 18 13:41:47 2004//
+/yc_getroom.cpp/1.6/Thu Nov 18 13:41:47 2004//
+/yc_getrusage.cpp/1.8/Thu Nov 18 13:41:47 2004//
+/yc_help.cpp/1.4/Thu Nov 18 13:41:47 2004//
+/yc_invisible.cpp/1.9/Thu Nov 18 13:41:47 2004//
+/yc_j.cpp/1.9/Thu Nov 18 13:41:47 2004//
+/yc_ko.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_m.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_md5.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_me.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_morph.cpp/1.3/Thu Nov 18 13:41:47 2004//
+/yc_msg.cpp/1.9/Thu Dec 30 17:44:05 2004//
+/yc_q.cpp/1.8/Thu Nov 18 13:41:47 2004//
+/yc_reload.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_ren.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_s.cpp/1.8/Thu Nov 18 13:41:47 2004//
+/yc_set.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_template.cpp/1.7/Thu Nov 18 13:41:47 2004//
+/yc_time.cpp/1.6/Thu Nov 18 13:41:47 2004//
+/yc_topic.cpp/1.10/Mon Feb 14 17:33:09 2005//
+/yc_uptime.cpp/1.6/Thu Nov 18 13:41:47 2004//
+/yc_users.cpp/1.1/Mon Feb 14 20:09:50 2005//
+/yc_version.cpp/1.9/Thu Nov 18 13:41:47 2004//
+D
diff --git a/ychat-0.7.5/src/mods/commands/CVS/Repository b/ychat-0.7.5/src/mods/commands/CVS/Repository
new file mode 100644
index 0000000..567651e
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/CVS/Repository
@@ -0,0 +1 @@
+ychat/src/mods/commands
diff --git a/ychat-0.7.5/src/mods/commands/CVS/Root b/ychat-0.7.5/src/mods/commands/CVS/Root
new file mode 100644
index 0000000..745de68
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@buetow.org:/usr/home/cvs/cvsroot
diff --git a/ychat-0.7.5/src/mods/commands/Makefile b/ychat-0.7.5/src/mods/commands/Makefile
new file mode 100644
index 0000000..6aec38d
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/Makefile
@@ -0,0 +1,48 @@
+SRCS=yc_about.cpp yc_all.cpp yc_away.cpp yc_col.cpp yc_compopt.cpp yc_exec.cpp yc_fake.cpp yc_getroom.cpp yc_getrusage.cpp yc_help.cpp yc_invisible.cpp yc_j.cpp yc_ko.cpp yc_m.cpp yc_md5.cpp yc_me.cpp yc_morph.cpp yc_msg.cpp yc_q.cpp yc_reload.cpp yc_ren.cpp yc_s.cpp yc_set.cpp yc_template.cpp yc_time.cpp yc_topic.cpp yc_uptime.cpp yc_users.cpp yc_version.cpp
+MODS=$(addprefix ../../../mods/commands/, $(SRCS:.cpp=.so))
+CC=g++
+INCLUDES=`cat ../../includes.add`
+CFLAGS=`cat ../cflags.add`
+all: mods
+$(MODS):
+ @echo -n "Compiling command module `basename $@` "
+ @if ! test -d `dirname $@`; then mkdir -p `dirname $@`; fi
+ @$(CC) $(CFLAGS) $(INCLUDES) -shared -s -o $@ `echo $(notdir $@) | sed s/.so/.cpp/`
+ @du -hc $@ | tail -n 1 | sed s/total// | sed "s/ //g"
+infotext:
+ @echo Compiling command modules
+mods: infotext $(MODS)
+ @echo "Num of command modules: "
+ @ls ../../../mods/commands/*.so | wc -l
+clean:
+ @echo Cleaning command modules
+ @if test -d ../../../mods/commands; then rm -Rf ../../../mods/commands; fi
+../../../mods/commands/yc_about.so: yc_about.cpp
+../../../mods/commands/yc_all.so: yc_all.cpp
+../../../mods/commands/yc_away.so: yc_away.cpp
+../../../mods/commands/yc_col.so: yc_col.cpp
+../../../mods/commands/yc_compopt.so: yc_compopt.cpp
+../../../mods/commands/yc_exec.so: yc_exec.cpp
+../../../mods/commands/yc_fake.so: yc_fake.cpp
+../../../mods/commands/yc_getroom.so: yc_getroom.cpp
+../../../mods/commands/yc_getrusage.so: yc_getrusage.cpp
+../../../mods/commands/yc_help.so: yc_help.cpp
+../../../mods/commands/yc_invisible.so: yc_invisible.cpp
+../../../mods/commands/yc_j.so: yc_j.cpp
+../../../mods/commands/yc_ko.so: yc_ko.cpp
+../../../mods/commands/yc_m.so: yc_m.cpp
+../../../mods/commands/yc_md5.so: yc_md5.cpp
+../../../mods/commands/yc_me.so: yc_me.cpp
+../../../mods/commands/yc_morph.so: yc_morph.cpp
+../../../mods/commands/yc_msg.so: yc_msg.cpp
+../../../mods/commands/yc_q.so: yc_q.cpp
+../../../mods/commands/yc_reload.so: yc_reload.cpp
+../../../mods/commands/yc_ren.so: yc_ren.cpp
+../../../mods/commands/yc_s.so: yc_s.cpp
+../../../mods/commands/yc_set.so: yc_set.cpp
+../../../mods/commands/yc_template.so: yc_template.cpp
+../../../mods/commands/yc_time.so: yc_time.cpp
+../../../mods/commands/yc_topic.so: yc_topic.cpp
+../../../mods/commands/yc_uptime.so: yc_uptime.cpp
+../../../mods/commands/yc_users.so: yc_users.cpp
+../../../mods/commands/yc_version.so: yc_version.cpp
diff --git a/ychat-0.7.5/src/mods/commands/Makefile.in b/ychat-0.7.5/src/mods/commands/Makefile.in
new file mode 100755
index 0000000..ce8c00f
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/Makefile.in
@@ -0,0 +1,18 @@
+MODS=$(addprefix ../../../mods/commands/, $(SRCS:.cpp=.so))
+CC=COMPILER
+INCLUDES=`cat ../../includes.add`
+CFLAGS=`cat ../cflags.add`
+all: mods
+$(MODS):
+ @echo -n "Compiling command module `basename $@` "
+ @if ! test -d `dirname $@`; then mkdir -p `dirname $@`; fi
+ @$(CC) $(CFLAGS) $(INCLUDES) -shared -s -o $@ `echo $(notdir $@) | sed s/.so/.cpp/`
+ @du -hc $@ | tail -n 1 | sed s/total// | sed "s/ //g"
+infotext:
+ @echo Compiling command modules
+mods: infotext $(MODS)
+ @echo "Num of command modules: "
+ @ls ../../../mods/commands/*.so | wc -l
+clean:
+ @echo Cleaning command modules
+ @if test -d ../../../mods/commands; then rm -Rf ../../../mods/commands; fi
diff --git a/ychat-0.7.5/src/mods/commands/yc_about.cpp b/ychat-0.7.5/src/mods/commands/yc_about.cpp
new file mode 100644
index 0000000..086e126
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_about.cpp
@@ -0,0 +1,59 @@
+#include "../../incl.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ string s_searched_user( *iter );
+ bool b_found;
+ user* p_searched_user = p_chat->get_user( s_searched_user, b_found );
+
+ if ( b_found )
+ {
+ string s_msg = "<b>" + p_searched_user->get_colored_name() + "</b>"
+ + p_conf->get_elem("chat.msgs.userhasstatus") + "<b>"
+ + tool::int2string(p_searched_user->get_status())
+ + "</b>, "
+ + p_conf->get_elem("chat.msgs.userinroom") + "<b>"
+ + p_searched_user->get_room()->get_name()
+ + "</b><br>\n"
+ + p_conf->get_elem("chat.msgs.lastactivity") + "<b>"
+ + tool::int2string((int)( p_searched_user->get_last_activity()))
+ + "</b><br>\n";
+ p_user->msg_post( &s_msg );
+ }
+
+ else
+ {
+ string s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\"><b>"
+ + s_searched_user + "</b> "
+ + p_conf->get_elem("chat.msgs.err.notavailable")
+ + "</font><br>\n";
+ p_user->msg_post( &s_msg );
+
+ }
+ }
+
+ return 0;
+ }
+
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_all.cpp b/ychat-0.7.5/src/mods/commands/yc_all.cpp
new file mode 100755
index 0000000..c4c9cdf
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_all.cpp
@@ -0,0 +1,48 @@
+#include <iostream>
+#include "../../chat/chat.h"
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params= (vector<string>*) c->elem[2]; // param array
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+
+ string s_tmp = "";
+ string s_msg = "";
+
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ s_tmp.append( *iter + " " );
+
+ s_msg = p_timr->get_time() + " <b><font color=\"#"
+ + p_conf->get_elem("chat.html.sysmsgcolor")
+ + "\"> "
+ + p_conf->get_elem("chat.msgs.system");
+
+ p_chat->string_replacer(&s_tmp);
+ s_msg.append( s_tmp + "</font></b><br>\n" );
+ p_chat->msg_post( &s_msg );
+ return 0;
+ }
+
+ s_msg = p_conf->colored_error_msg("chat.msgs.err.wrongcommandusage");
+ p_user->msg_post(s_msg);
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_away.cpp b/ychat-0.7.5/src/mods/commands/yc_away.cpp
new file mode 100755
index 0000000..af4a4a5
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_away.cpp
@@ -0,0 +1,70 @@
+#include "../../incl.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user* p_user = (user*) c->elem[1]; // the corresponding user
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+
+ string s_msg;
+ string s_away;
+ string s_col;
+
+ vector<string>::iterator iter;
+
+ string s_time = p_timr->get_time();
+
+ s_away.append( s_time ).append( " " );
+
+ s_msg = s_time
+ + " "
+ + p_user->get_colored_bold_name()
+ + " "
+ + p_conf->get_elem("chat.msgs.setmodeaway")
+ + "<font color=" + p_user->get_col2() + ">";
+
+ if ( params->size() > 0 )
+ {
+ s_msg.append(": ");
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ {
+ s_msg.append( " " + *iter );
+ s_away.append( *iter + " " );
+ }
+ }
+
+ else
+ {
+ s_msg.append(".");
+ }
+
+ s_msg.append( "</font><br>\n" );
+
+ room* p_room = p_user->get_room();
+
+ // Remove ' from away message:
+ auto unsigned int pos;
+
+ do {
+ pos = s_away.find_first_of( "'" );
+ if ( pos == string::npos )
+ break;
+ s_away.replace( pos, 1, "\"" );
+ } while (true);
+
+ p_user->set_away( true, s_away );
+ p_room->reload_onlineframe();
+ p_room->msg_post ( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_col.cpp b/ychat-0.7.5/src/mods/commands/yc_col.cpp
new file mode 100755
index 0000000..4449278
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_col.cpp
@@ -0,0 +1,85 @@
+#include <iostream>
+#include "../../wrap.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+#include "../../tool/tool.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+
+ user *p_user = (user*)c->elem[1]; // the corresponding user
+ vector<string> *params= (vector<string>*) c->elem[2]; // param array
+
+ string s_color;
+ string s_color2;
+
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ if ( params->empty() )
+ {
+ s_color = p_conf->get_elem( "chat.html.user.color1" );
+ s_color2 = p_conf->get_elem( "chat.html.user.color2" );
+ }
+
+ else
+ {
+ s_color = (string) params->front();
+ params->erase( params->begin() );
+ if ( ! params->empty() )
+ s_color2 = (string) params->front();
+ else
+ s_color2 = p_conf->get_elem( "chat.html.user.color1" );
+ }
+
+ s_color = tool::to_lower( s_color );
+ s_color2 = tool::to_lower( s_color2 );
+
+ if( valid_color(s_color) != 1 )
+ {
+ string *answerstring=new string(s_color + " is not a valid color.<br>\n");
+ p_user->msg_post( answerstring );
+ }
+ else if( valid_color(s_color2) != 1 )
+ {
+ string *answerstring=new string( s_color2 + " is not a valid color.<br>\n");
+ p_user->msg_post( answerstring );
+ }
+ else
+ {
+ string *answerstring=new string(p_timr->get_time() + " " + p_user->get_colored_bold_name()+ " changes color to <font color=\"#"
+ + s_color + "\">" + s_color + "</font> <font color=\"#"
+ + s_color2 + "\">" + s_color2 + "</font><br>\n");
+ p_user->get_room()->msg_post( answerstring );
+ p_user->set_col1(s_color);
+ p_user->set_col2(s_color2);
+ }
+
+ return 0;
+ }
+ int valid_color( string s_color ){
+
+ if(s_color.size()!=6) return 0;
+ string valid="abcdef0123456789";
+ for(int i=0;i<s_color.size();i++)
+ {
+ string s_char=s_color.substr(i,1);
+ if(valid.find(s_char)==string::npos)
+ return 0;
+ }
+
+ return 1;
+ }
+
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_compopt.cpp b/ychat-0.7.5/src/mods/commands/yc_compopt.cpp
new file mode 100755
index 0000000..ad6ae99
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_compopt.cpp
@@ -0,0 +1,22 @@
+#include <iostream>
+#include "../../msgs.h"
+#include "../../chat/user.h"
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+ user *p_user = (user*)c->elem[1]; // the corresponding user
+ p_user->msg_post( tool::ychat_version() + " " + UNAME + "<br>\n" + COMPOPT + "<br>\n");
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_exec.cpp b/ychat-0.7.5/src/mods/commands/yc_exec.cpp
new file mode 100755
index 0000000..f912c20
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_exec.cpp
@@ -0,0 +1,66 @@
+#include "../../incl.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+#include <unistd.h>
+#include <sys/wait.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <fcntl.h>
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user* p_user = (user*) c->elem[1]; // the corresponding user
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+
+ string s_command;
+ string s_msg = p_timr->get_time();
+ string s_output;
+
+ vector<string>::iterator iter;
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ s_command.append( " " + *iter );
+
+ s_command.append(" 2>error.log");
+
+ s_msg.append( " " + s_command + "<br>\n" );
+
+ p_user->msg_post( &s_msg );
+
+ FILE *file;
+ char buffer[READBUF];
+
+ if( (file=popen(s_command.c_str(), "r")) == NULL )
+ {
+ s_output = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + p_conf->get_elem("chat.msgs.err.execcommand")
+ + "</font><br>\n";
+ p_user->msg_post( &s_output );
+ }
+
+ else
+ {
+ s_output.append("<hr>\n");
+ while(true)
+ {
+ if(fgets(buffer, READBUF, file) == NULL)
+ break;
+
+ s_output.append( string(buffer) + "<br>\n" );
+ }
+
+ p_user->msg_post( &s_output );
+ pclose(file);
+ }
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_fake.cpp b/ychat-0.7.5/src/mods/commands/yc_fake.cpp
new file mode 100755
index 0000000..c708841
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_fake.cpp
@@ -0,0 +1,29 @@
+#include "../../incl.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user* p_user = (user*) c->elem[1]; // the corresponding user
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ bool b_fake = p_user->get_fake();
+
+ string s_msg = (b_fake == 1
+ ? p_conf->get_elem("chat.msgs.unsetmodefake") + "<br>\n"
+ : p_conf->get_elem("chat.msgs.setmodefake") + "<br>\n");
+
+
+ p_user->set_fake( !b_fake );
+ p_user->get_room()->reload_onlineframe();
+ p_user->msg_post ( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_getroom.cpp b/ychat-0.7.5/src/mods/commands/yc_getroom.cpp
new file mode 100755
index 0000000..87e2d25
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_getroom.cpp
@@ -0,0 +1,53 @@
+#include "../../incl.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ string s_searched_user( *iter );
+ bool b_found;
+ user* p_searched_user = p_chat->get_user( s_searched_user, b_found );
+
+ if ( b_found )
+ {
+ string s_msg = "<b>" + p_searched_user->get_colored_name() + "</b>"
+ + p_conf->get_elem("chat.msgs.userinroom") + "<b>"
+ + p_searched_user->get_room()->get_name()
+ + "</b><br>\n";
+ p_user->msg_post( &s_msg );
+ }
+
+ else
+ {
+ string s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\"><b>"
+ + s_searched_user + "</b> "
+ + p_conf->get_elem("chat.msgs.err.notavailable")
+ + "</font><br>\n";
+ p_user->msg_post( &s_msg );
+
+ }
+ }
+
+ return 0;
+ }
+
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_getrusage.cpp b/ychat-0.7.5/src/mods/commands/yc_getrusage.cpp
new file mode 100755
index 0000000..83dcbb9
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_getrusage.cpp
@@ -0,0 +1,56 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <iostream>
+#include "../../chat/user.h"
+
+#ifndef RUSAGE_SELF
+#define RUSAGE_SELF 0
+#endif
+#ifndef RUSAGE_CHILDREN
+#define RUSAGE_CHILDREN -1
+#endif
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ rusage* p_rusage = new rusage;
+ getrusage( RUSAGE_SELF, p_rusage );
+ char c_msg[1024];
+
+ /* see man getrusage */
+
+ sprintf(c_msg, "getrusage:<br>\nmaxrss: %D (max resident set size)<br>\nixrss: %D (integral shared text memory size)<br>\nidrss: %D (integral unshared data size)<br>\nisrss %D (integral unshared stack size)<br>\nminflt: %D (page reclaims)<br>\nmajflt: %D (page faults)<br>\nnswap: %D (swaps)<br>\ninblock: %D (block input operations)<br>\noublock: %D (block output operations)<br>\nmsgsnd: %D (messages sent)<br>\nmsgrcv: %D (messages received)<br>\nnsignals: %D (signals received)<br>\nnvcsw: %D (voluntary context switches)<br>\nnivcsw: %D (involuntary context switches)<br>\n",
+ p_rusage->ru_maxrss,
+ p_rusage->ru_ixrss,
+ p_rusage->ru_idrss,
+ p_rusage->ru_isrss,
+ p_rusage->ru_minflt,
+ p_rusage->ru_majflt,
+ p_rusage->ru_nswap,
+ p_rusage->ru_inblock,
+ p_rusage->ru_oublock,
+ p_rusage->ru_msgsnd,
+ p_rusage->ru_msgrcv,
+ p_rusage->ru_nsignals,
+ p_rusage->ru_nvcsw,
+ p_rusage->ru_nivcsw
+ );
+
+ p_user->msg_post( new string( c_msg ) );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_help.cpp b/ychat-0.7.5/src/mods/commands/yc_help.cpp
new file mode 100755
index 0000000..41899c3
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_help.cpp
@@ -0,0 +1,51 @@
+#include "../../incl.h"
+#include "../../chat/user.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ string s_msg = "";
+
+ if (params->size() >= 1)
+ {
+ vector<string>::iterator iter = params->begin();
+
+ string s_help = p_conf->get_elem("chat.msgs.help." + *iter);
+
+ if ( s_help != "" ) {
+ s_msg.append("<b>" + *iter + ":</b> " + s_help + "<br>\n");
+ p_user->msg_post( &s_msg );
+ return 0;
+ }
+
+ s_msg.append(*iter + " " + p_conf->get_elem("chat.msgs.err.notavailable"));
+ }
+
+ else
+ {
+ s_msg.append(p_conf->get_elem("chat.msgs.err.wrongcommandusage"));
+ }
+
+ s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\"> "
+ + s_msg
+ + "</font><br>\n";
+
+ p_user->msg_post( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_invisible.cpp b/ychat-0.7.5/src/mods/commands/yc_invisible.cpp
new file mode 100755
index 0000000..b78d934
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_invisible.cpp
@@ -0,0 +1,30 @@
+#include "../../incl.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user* p_user = (user*) c->elem[1]; // the corresponding user
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ bool b_invisible = p_user->get_invisible();
+
+ string s_msg = b_invisible
+ ? p_conf->get_elem("chat.msgs.setmodeinvisible")
+ + "<br>\n"
+ : p_conf->get_elem("chat.msgs.unsetmodeinvisible")
+ + "<br>\n";
+
+ p_user->set_invisible( !b_invisible );
+ p_user->get_room()->reload_onlineframe();
+ p_user->msg_post ( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_j.cpp b/ychat-0.7.5/src/mods/commands/yc_j.cpp
new file mode 100755
index 0000000..903e49b
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_j.cpp
@@ -0,0 +1,105 @@
+#include "../../chat/user.h"
+#include "../../chat/room.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string> *) c->elem[2]; // param array
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ gcol* p_gcol = (gcol*) ((dynamic_wrap*)c->elem[3])->GCOL;
+
+ if ( ! params->empty() )
+ {
+ vector<string> ::iterator iter;
+
+ string s_room;
+
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ {
+ s_room.append( *iter );
+ if ( iter+1 != params->end() )
+ s_room.append(" ");
+ }
+
+ int i_max_room_len = tool::string2int( p_conf->get_elem("chat.maxlength.roomname") );
+ if ( i_max_room_len < s_room.length() )
+ s_room = s_room.substr(0, i_max_room_len );
+
+ if ( tool::to_lower(s_room) == p_user->get_room()->get_lowercase_name() )
+ {
+ string s_msg = "<font color=\"" + p_conf->get_elem("chat.html.errorcolor") + "\">"
+ + p_conf->get_elem("chat.msgs.err.alreadyinroom") + "<b>"
+ + p_user->get_room()->get_name() + "</b></font><br>\n";
+ p_user->msg_post( &s_msg );
+ }
+
+ else
+ {
+ string s_user = p_timr->get_time() + " " + p_user->get_colored_bold_name();
+ string s_msg = s_user + p_conf->get_elem( "chat.msgs.userleavesroom" ) + "<b>";
+ string s_msg2 = s_user + p_conf->get_elem( "chat.msgs.userentersroom" ) + "<b>";
+
+ bool b_flag;
+ room* p_room = p_chat->get_room( s_room , b_flag );
+
+ // if room does not exist add room to list!
+ if ( p_room == NULL )
+ {
+ p_room = p_gcol->get_room_from_garbage_or_new( s_room );
+
+ s_msg.append( s_room + "</b><br>\n" );
+ s_msg2.append( s_room + "</b><br>\n" );
+
+ room* p_room_old = p_user->get_room();
+
+ string s_name_lowercase = p_user->get_lowercase_name();
+ p_user->get_room()->del_elem( s_name_lowercase );
+
+ p_gcol->lock_mutex();
+ if ( p_room_old != NULL )
+ p_room_old->msg_post( &s_msg );
+ p_gcol->unlock_mutex();
+
+ p_room->add_user( p_user );
+ p_chat->add_elem( p_room );
+ p_room->msg_post( &s_msg2 );
+ }
+
+ else // p_room != NULL
+ {
+ s_msg.append( p_room->get_name() + "</b><br>\n" );
+ s_msg2.append( p_room->get_name() + "</b><br>\n" );
+
+ room* p_room_old = p_user->get_room();
+
+ string s_name_lowercase = p_user->get_lowercase_name();
+ p_user->get_room()->del_elem( s_name_lowercase );
+
+ p_gcol->lock_mutex();
+ if ( p_room_old != NULL )
+ p_room_old->msg_post( &s_msg );
+ p_gcol->unlock_mutex();
+
+ p_room->add_user( p_user );
+ p_room->msg_post( &s_msg2 );
+ }
+ }
+ }
+
+ return 0;
+ }
+
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_ko.cpp b/ychat-0.7.5/src/mods/commands/yc_ko.cpp
new file mode 100755
index 0000000..ac32ac7
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_ko.cpp
@@ -0,0 +1,72 @@
+#include "../../incl.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ string s_searched_user( *iter );
+ bool b_found;
+ user* p_searched_user = p_chat->get_user( s_searched_user, b_found );
+
+ if ( b_found )
+ {
+
+ string s_msg = p_timr->get_time() + " "
+ + p_user->get_colored_bold_name()
+ + p_conf->get_elem( "chat.msgs.userkicksout1" )
+ + p_searched_user->get_colored_bold_name()
+ + p_conf->get_elem( "chat.msgs.userkicksout2" )
+ + p_searched_user->get_room()->get_bold_name()
+ + "<br>\n";
+
+ room* p_room1 = p_user->get_room();
+ room* p_room2 = p_searched_user->get_room();
+
+ p_room1->msg_post( &s_msg );
+
+ if ( p_room1->get_lowercase_name() !=
+ p_room2->get_lowercase_name() )
+ p_room2->msg_post( &s_msg );
+
+ string s_kick = "<script confuage=JavaScript>top.location.href='/"
+ + p_conf->get_elem("httpd.startsite")
+ + "';</script>";
+
+ p_searched_user->msg_post( &s_kick );
+ p_searched_user->set_online(false);
+ }
+
+ else
+ {
+ string s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\"><b>"
+ + s_searched_user + "</b> "
+ + p_conf->get_elem("chat.msgs.err.notavailable")
+ + "</font><br>\n";
+ p_user->msg_post( &s_msg );
+ }
+ }
+
+ return 0;
+ }
+
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_m.cpp b/ychat-0.7.5/src/mods/commands/yc_m.cpp
new file mode 100755
index 0000000..a93cc3b
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_m.cpp
@@ -0,0 +1,43 @@
+#include <iostream>
+#include "../../chat/user.h"
+#include "../../chat/room.h"
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params= (vector<string>*) c->elem[2]; // param array
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ string s_msg = "";
+
+ if ( p_conf->get_elem("chat.printalwaystime") == "true" )
+ s_msg = p_timr->get_time() + " ";
+
+ s_msg.append( "<i>" + p_user->get_colored_name()
+ + " <font color=\"#" + p_user->get_col2()
+ + "\">" );
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ s_msg.append( *iter + " " );
+ }
+
+ s_msg.append( "</font></i><br>\n" );
+ p_user->get_room()->msg_post( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_md5.cpp b/ychat-0.7.5/src/mods/commands/yc_md5.cpp
new file mode 100755
index 0000000..d79d952
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_md5.cpp
@@ -0,0 +1,54 @@
+#include "../../incl.h"
+#include "../../chat/user.h"
+#include "../../contrib/crypt/md5.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ if (params->size() >= 2)
+ {
+ vector<string>::iterator iter;
+ string s_string = "";
+ string s_salt = "";
+
+ for (iter = params->begin(); iter+1 != params->end(); ++iter)
+ {
+ s_string.append(*iter);
+ }
+
+ s_salt = *iter;
+
+ string s_msg = "Crypt: <b>" + s_string + "</b>, Salt: <b>"
+ + s_salt + "</b> = <b>" +
+ + md5::MD5Crypt(s_string.c_str(), s_salt.c_str())
+ + "</b><br>\n";
+ p_user->msg_post( &s_msg );
+ }
+
+ else
+ {
+ string s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\"> "
+ + p_conf->get_elem("ERR_WRONG_COMMAND_USAGE")
+ + "</font><br>\n";
+ p_user->msg_post( &s_msg );
+
+ }
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_me.cpp b/ychat-0.7.5/src/mods/commands/yc_me.cpp
new file mode 100755
index 0000000..66d54da
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_me.cpp
@@ -0,0 +1,44 @@
+#include <iostream>
+#include "../../chat/user.h"
+#include "../../chat/room.h"
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params= (vector<string>*) c->elem[2]; // param array
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ string s_msg = "";
+
+ if ( p_conf->get_elem("chat.printalwaystime") == "true" )
+ s_msg = p_timr->get_time() + " ";
+
+ s_msg.append( "<i><font color=\"#" +p_user->get_col1() + "\">"
+ + p_user->get_name() + " ");
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ s_msg.append( *iter + " " );
+ }
+
+ s_msg.append( "</font></i><br>\n" );
+ p_user->get_room()->msg_post( &s_msg );
+
+ return 0;
+
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_morph.cpp b/ychat-0.7.5/src/mods/commands/yc_morph.cpp
new file mode 100755
index 0000000..cf1f448
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_morph.cpp
@@ -0,0 +1,53 @@
+#include "../../chat/user.h"
+#include "../../chat/room.h"
+#include "../../tool/tool.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c = (container*) v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *p_params = (vector<string>*) c->elem[2]; // param array
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+
+ if ( p_params->empty() )
+ {
+ string s_msg = p_conf->colored_error_msg("chat.msgs.err.wrongcommandusage");
+ p_user->msg_post(s_msg);
+ }
+
+ else
+ {
+ string s_morphed_name = p_params->at(0);
+
+ if ( tool::to_lower(s_morphed_name) != p_user->get_lowercase_name() )
+ {
+ string s_msg = p_conf->colored_error_msg("chat.msgs.err.morphnick");
+ p_user->msg_post(s_msg);
+ }
+
+ else
+ {
+ string s_msg = p_timr->get_time() + " " + p_user->get_colored_bold_name() + p_conf->get_elem( "chat.msgs.usermorphs" ) + "<font color=\"#" + p_user->get_col1() + "\"><b>" + s_morphed_name + "</b></font><br>\n";
+
+ room* p_room = p_user->get_room();
+ p_room->msg_post( &s_msg );
+ p_user->set_name( s_morphed_name );
+ p_room->reload_onlineframe();
+ }
+ }
+
+ return 0;
+ }
+
+}
+
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_msg.cpp b/ychat-0.7.5/src/mods/commands/yc_msg.cpp
new file mode 100755
index 0000000..33beee4
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_msg.cpp
@@ -0,0 +1,68 @@
+#include "../../chat/user.h"
+#include "../../chat/room.h"
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ string s_whisper_user( *iter );
+ bool b_found;
+ user* p_whisper_user = p_chat->get_user( s_whisper_user, b_found );
+
+ if ( b_found )
+ {
+ string s_time = "";
+ if ( p_conf->get_elem("chat.printalwaystime") == "true" )
+ s_time = p_timr->get_time() + " ";
+
+ string s_msg = s_time + "<i> " + p_conf->get_elem("chat.msgs.whisperto") + " " + p_whisper_user->get_colored_name() + ": <font color=\"#" + p_user->get_col2() + "\">";
+
+ string s_whisper_msg = s_time + "<i>" + p_user->get_colored_name() + " " + p_conf->get_elem("chat.msgs.whisper") + ": <font color=\"#" + p_user->get_col2() + "\">";
+
+ string s_tmp = "";
+ for ( iter++; iter != params->end(); iter++ )
+ s_tmp.append( *iter + " " );
+
+ p_chat->string_replacer(&s_tmp);
+
+ s_msg .append( s_tmp + "</font></i><br>\n" );
+ s_whisper_msg.append( s_tmp + "</font></i><br>\n" );
+
+ p_user ->msg_post( &s_msg );
+ p_whisper_user->msg_post( &s_whisper_msg );
+ }
+
+ else
+ {
+ string s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\"><b>"
+ + s_whisper_user + "</b> "
+ + p_conf->get_elem("chat.msgs.err.notavailable")
+ + "</font><br>\n";
+
+ p_user->msg_post( &s_msg );
+ }
+ }
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_q.cpp b/ychat-0.7.5/src/mods/commands/yc_q.cpp
new file mode 100755
index 0000000..4c9584d
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_q.cpp
@@ -0,0 +1,29 @@
+#include <iostream>
+#include "../../chat/user.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container* c = (container*) v_arg;
+ user* p_user = (user*)c->elem[1];
+
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ string s_quit = "<script confuage=JavaScript>top.location.href='/"
+ + p_conf->get_elem("httpd.startsite")
+ + "';</script>";
+
+ p_user->msg_post( &s_quit );
+ p_user->set_online(false);
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_reload.cpp b/ychat-0.7.5/src/mods/commands/yc_reload.cpp
new file mode 100755
index 0000000..8b9cd0a
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_reload.cpp
@@ -0,0 +1,24 @@
+#include "../../incl.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user* p_user = (user*) c->elem[1]; // the corresponding user
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+
+ string s_msg = p_conf->get_elem("chat.msgs.reloadonlineframe")
+ + "<br>\n";
+
+ p_user->get_room()->reload_onlineframe();
+ p_user->msg_post ( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_ren.cpp b/ychat-0.7.5/src/mods/commands/yc_ren.cpp
new file mode 100755
index 0000000..9735d8e
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_ren.cpp
@@ -0,0 +1,74 @@
+#include "../../chat/user.h"
+#include "../../chat/room.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c = (container*) v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter;
+
+ string s_room;
+
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ {
+ s_room.append( *iter );
+ if ( iter+1 != params->end() )
+ s_room.append(" ");
+ }
+
+ int i_max_room_len = tool::string2int( p_conf->get_elem("chat.maxlength.roomname") );
+ if ( i_max_room_len < s_room.length() )
+ s_room = s_room.substr(0, i_max_room_len );
+
+ bool b_found;
+ string s_room_lower = tool::to_lower(s_room);
+ room* p_room = p_user->get_room();
+
+ if ( s_room_lower != p_room->get_lowercase_name() &&
+ NULL != p_chat->get_room( s_room_lower , b_found ) )
+ {
+ string s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\">"
+ + p_conf->get_elem("chat.msgs.err.roomexists")
+ + "</font><br>\n";
+
+ p_user->msg_post( &s_msg );
+ }
+
+ else
+ {
+ string s_msg = p_timr->get_time() + " "
+ + p_user->get_colored_bold_name()
+ + p_conf->get_elem( "chat.msgs.userrenamesroom" )
+ + "<b>" + s_room + "</b><br>\n";
+
+ p_chat->del_elem( p_room->get_lowercase_name() );
+ p_room->set_name( s_room );
+ p_chat->add_elem( p_room );
+ p_room->msg_post( &s_msg );
+ p_room->reload_onlineframe();
+ }
+ }
+
+ return 0;
+ }
+
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_s.cpp b/ychat-0.7.5/src/mods/commands/yc_s.cpp
new file mode 100755
index 0000000..30a6892
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_s.cpp
@@ -0,0 +1,47 @@
+#include "../../chat/user.h"
+#include "../../chat/room.h"
+
+using namespace std;
+
+extern "C" {
+ string to_upper( string &s_msg )
+ {
+ char* c_msg = (char*) s_msg.c_str();
+
+ for ( int i = 0; i < strlen( c_msg ); i++ )
+ c_msg[i] = toupper( c_msg[i] );
+
+ return string( c_msg );
+ };
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ vector<string> *params= (vector<string>*) c->elem[2]; // param array
+
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+
+ string s_time = "";
+ if ( p_conf->get_elem("chat.printalwaystime") == "true" )
+ s_time = p_timr->get_time() + " ";
+
+ string s_msg = s_time + "<i>" + p_user->get_colored_name() + " " + p_conf->get_elem("chat.msgs.scream") + " <font color=\"#" + p_user->get_col2() + "\"><b>";
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter = params->begin();
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ s_msg.append( to_upper(*iter) + " " );
+ }
+
+ s_msg.append( "</b></font></i><br>\n" );
+ p_user->get_room()->msg_post( &s_msg );
+
+ return 0;
+
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_set.cpp b/ychat-0.7.5/src/mods/commands/yc_set.cpp
new file mode 100755
index 0000000..a18b5e9
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_set.cpp
@@ -0,0 +1,101 @@
+#include "../../incl.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user* p_user = (user*) c->elem[1];
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+
+ bool b_invalid_syntax = 0;
+
+ if ( params->size() >= 3 )
+ {
+ string s_msg;
+ string s_command_name = params->at(0);
+ string s_option = params->at(1);
+ string s_newval = params->at(2);
+
+ if ( s_option == "status" )
+ {
+ const char* c_newval = s_newval.c_str();
+ if ( isdigit( c_newval[0] ) )
+ {
+ int i_newval = c_newval[0] - '0';
+
+ s_msg = p_timr->get_time()
+ + " "
+ + p_user->get_colored_bold_name()
+ + " "
+ + p_conf->get_elem("chat.msgs.setcommandstatus")
+ + " ("
+ + s_command_name + "," + s_newval + ","
+ + tool::int2string( p_chat->get_command_disabled(s_command_name))
+ + ")<br>\n";
+
+ p_user->get_room()->msg_post(&s_msg);
+ p_chat->set_command_status( s_command_name, i_newval );
+ }
+ }
+ else if ( s_option == "disable" )
+ {
+ const char* c_newval = s_newval.c_str();
+ if ( isdigit( c_newval[0] ) )
+ {
+ int i_newval = c_newval[0] - '0';
+
+ if ( i_newval != 0 )
+ i_newval = 1;
+
+ s_newval = tool::int2string(i_newval);
+
+ s_msg = p_timr->get_time()
+ + " "
+ + p_user->get_colored_bold_name()
+ + " "
+ + p_conf->get_elem("chat.msgs.setcommandstatus")
+ + " ("
+ + s_command_name + ","
+ + tool::int2string( p_chat->get_command_status(s_command_name))
+ + "," + s_newval + ")<br>\n";
+
+ p_user->get_room()->msg_post(&s_msg);
+ p_chat->set_command_disabled( s_command_name, (bool)i_newval );
+ }
+ }
+
+ else
+ {
+ b_invalid_syntax = 1;
+ }
+
+ }
+
+ else
+ {
+ b_invalid_syntax = 1;
+ }
+
+ if ( b_invalid_syntax )
+ {
+ string s_msg = "<font color=\"#"
+ + p_conf->get_elem("chat.html.errorcolor")
+ + "\">"
+ + p_conf->get_elem("chat.msgs.err.wrongcommandusage")
+ + "</font><br>\n";
+ p_user->msg_post( &s_msg );
+ }
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_template.cpp b/ychat-0.7.5/src/mods/commands/yc_template.cpp
new file mode 100755
index 0000000..e0aa009
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_template.cpp
@@ -0,0 +1,24 @@
+#include <iostream>
+#include "../../chat/user.h"
+
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*)c->elem[1]; // the corresponding user
+ vector<string> *params=(vector<string>*)c->elem[2]; // param array
+
+ string *quitstring=new string("Text to send<br>");
+ p_user->msg_post( quitstring );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_time.cpp b/ychat-0.7.5/src/mods/commands/yc_time.cpp
new file mode 100755
index 0000000..c22e542
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_time.cpp
@@ -0,0 +1,21 @@
+#include "../../incl.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+
+ string s_msg = p_conf->get_elem("chat.msgs.servertime") + p_timr->get_time() + "<br>\n";
+
+ p_user->msg_post( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_topic.cpp b/ychat-0.7.5/src/mods/commands/yc_topic.cpp
new file mode 100755
index 0000000..5541dc4
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_topic.cpp
@@ -0,0 +1,78 @@
+#include "../../tool/tool.h"
+#include "../../incl.h"
+#include "../../chat/room.h"
+#include "../../chat/user.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user* p_user = (user*) c->elem[1]; // the corresponding user
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ vector<string> *params = (vector<string>*) c->elem[2]; // param array
+
+ string s_msg;
+ string s_topic;
+ string s_col;
+
+ room* p_room = p_user->get_room();
+
+ if ( ! params->empty() )
+ {
+ vector<string>::iterator iter;
+
+ s_col = "<font color=\"" + p_user->get_col1() + "\">";
+
+ s_msg = p_timr->get_time()
+ + " "
+ + p_user->get_colored_bold_name()
+ + " "
+ + p_conf->get_elem("chat.msgs.topic")
+ + s_col;
+
+ for ( iter = params->begin(); iter != params->end(); iter++ )
+ {
+ s_msg.append( " " + *iter );
+ s_topic.append( *iter + " " );
+ }
+ s_msg.append( "</font>" );
+
+ int i_topic_length = tool::string2int(p_conf->get_elem("chat.maxlength.topic"));
+ if ( s_topic.length() > i_topic_length )
+ {
+ s_topic = s_topic.substr(0, i_topic_length );
+ s_topic.append(" ... ");
+
+ string s_private_msg = "<font color=#" + p_conf->get_elem("chat.html.errorcolor")
+ + ">" + p_conf->get_elem( "chat.msgs.topiccut" ) + "</font><br>";
+
+ p_user->msg_post ( &s_private_msg );
+ }
+
+ s_topic = "( " + s_topic + ")";
+ p_room->set_topic( s_topic, p_user->get_col1() );
+ }
+
+ else
+ {
+ s_msg = p_timr->get_time()
+ + " "
+ + p_user->get_colored_bold_name()
+ + " "
+ + p_conf->get_elem("chat.msgs.topicdelete");
+
+ p_room->set_topic( "" );
+ }
+
+ s_msg.append( "<script confuage='JavaScript'>parent.online.location.reload();</script><br>\n" );
+
+ p_room->msg_post ( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_uptime.cpp b/ychat-0.7.5/src/mods/commands/yc_uptime.cpp
new file mode 100755
index 0000000..5fe0929
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_uptime.cpp
@@ -0,0 +1,21 @@
+#include "../../incl.h"
+
+using namespace std;
+
+extern "C" {
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+
+ user *p_user = (user*) c->elem[1]; // the corresponding user
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ timr* p_timr = (timr*) ((dynamic_wrap*)c->elem[3])->TIMR;
+
+ string s_msg = p_conf->get_elem("chat.msgs.uptime") + p_timr->get_uptime() + "<br>\n";
+
+ p_user->msg_post( &s_msg );
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_users.cpp b/ychat-0.7.5/src/mods/commands/yc_users.cpp
new file mode 100755
index 0000000..74253b7
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_users.cpp
@@ -0,0 +1,27 @@
+#include "../../chat/chat.h"
+#include "../../chat/user.h"
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+ chat* p_chat = (chat*) ((dynamic_wrap*)c->elem[3])->CHAT;
+ conf* p_conf = (conf*) ((dynamic_wrap*)c->elem[3])->CONF;
+ user *p_user = (user*)c->elem[1];
+
+ string s_list;
+ p_chat->get_user_list(s_list);
+ p_user->msg_post( p_conf->get_elem("chat.msgs.userlist") +
+ "<br><table>" + s_list + "</table>\n");
+
+ return 0;
+ }
+}
+
diff --git a/ychat-0.7.5/src/mods/commands/yc_version.cpp b/ychat-0.7.5/src/mods/commands/yc_version.cpp
new file mode 100755
index 0000000..d64fabd
--- /dev/null
+++ b/ychat-0.7.5/src/mods/commands/yc_version.cpp
@@ -0,0 +1,22 @@
+#include <iostream>
+#include "../../msgs.h"
+#include "../../chat/user.h"
+/*
+ gcc -shared -o yc_name.so yc_name.cpp
+*/
+
+using namespace std;
+
+extern "C" {
+ int valid_color( string );
+
+ int extern_function(void *v_arg)
+ {
+ container *c=(container *)v_arg;
+ user *p_user = (user*)c->elem[1]; // the corresponding user
+ p_user->msg_post( tool::ychat_version() + "<br>\n");
+
+ return 0;
+ }
+}
+