latest version of ArchBlackmann Modified: trunk/irc/ArchBlackmann/ArchBlackmann.cpp Modified: trunk/irc/ArchBlackmann/IRCClient.cpp Modified: trunk/irc/ArchBlackmann/IRCClient.h Added: trunk/irc/ArchBlackmann/curse.txt Added: trunk/irc/ArchBlackmann/cursecop.txt Modified: trunk/irc/ArchBlackmann/dev.txt Added: trunk/irc/ArchBlackmann/func.txt Added: trunk/irc/ArchBlackmann/grovel.txt Added: trunk/irc/ArchBlackmann/irql.txt Added: trunk/irc/ArchBlackmann/nogrovel.txt Added: trunk/irc/ArchBlackmann/status.txt Modified: trunk/irc/ArchBlackmann/tech.txt Added: trunk/irc/ArchBlackmann/type.txt _____
Modified: trunk/irc/ArchBlackmann/ArchBlackmann.cpp --- trunk/irc/ArchBlackmann/ArchBlackmann.cpp 2005-04-20 17:57:26 UTC (rev 14716) +++ trunk/irc/ArchBlackmann/ArchBlackmann.cpp 2005-04-20 18:16:32 UTC (rev 14717) @@ -9,59 +9,118 @@
#include "File.h" #include "ssprintf.h" +#include "trim.h"
#include "IRCClient.h"
using std::string; using std::vector;
-const char* ArchBlackmann = "ArchBlackmann"; +#if defined(_DEBUG) && 0 +const char* BOTNAME = "RoyBot"; +const char* CHANNEL = "#RoyBotTest"; +#else +const char* BOTNAME = "ArchBlackmann"; +const char* CHANNEL = "#ReactOS"; +#endif
-vector<string> tech, module, dev, stru, period; +//vector<string> tech, module, dev, stru, period, status, type, func, irql, curse, cursecop;
-void ImportList ( vector<string>& list, const char* filename ) +class List { - File f ( filename, "r" ); +public: + string name; + bool macro; + std::vectorstd::string list; + string tag; + int last; + List() { last = -1; } + List ( const char* _name, bool _macro ) : name(_name), macro(_macro) + { + tag = ssprintf("%%%s%%",_name); + last = -1; + } +}; + +vector<List> lists; +vector<string> ops; + +void ImportList ( const char* listname, bool macro ) +{ + lists.push_back ( List ( listname, macro ) ); + List& list = lists.back(); + File f ( ssprintf("%s.txt",listname).c_str(), "r" ); string line; while ( f.next_line ( line, true ) ) - list.push_back ( line ); + list.list.push_back ( line ); }
-const char* ListRand ( const vector<string>& list ) +const char* ListRand ( List& list ) { - return list[rand()%list.size()].c_str(); + vector<string>& l = list.list; + if ( !l.size() ) + { + static string nothing; + nothing = ssprintf ( "<list '%s' empty>", list.name.c_str() ); + return nothing.c_str(); + } + else if ( l.size() == 1 ) + return l[0].c_str(); + int sel = list.last; + while ( sel == list.last ) + sel = rand()%l.size(); + list.last = sel; + return l[sel].c_str(); }
-string TechReply() +const char* ListRand ( int i ) { - string t = ListRand(tech); + return ListRand ( lists[i] ); +} + +int GetListIndex ( const char* listname ) +{ + for ( int i = 0; i < lists.size(); i++ ) + { + if ( !stricmp ( lists[i].name.c_str(), listname ) ) + return i; + } + return -1; +} + +List& GetList ( const char* listname ) +{ + return lists[GetListIndex(listname)]; +} + +const char* ListRand ( const char* list ) +{ + int i = GetListIndex ( list ); + if ( i < 0 ) + return NULL; + return ListRand(i); +} + +string TaggedReply ( const char* listname ) +{ + string t = ListRand(listname); string out; const char* p = t.c_str(); while ( *p ) { if ( *p == '%' ) { - if ( !strnicmp ( p, "%dev%", 5 ) ) + bool found = false; + for ( int i = 0; i < lists.size() && !found; i++ ) { - out += ListRand(dev); - p += 5; + if ( lists[i].macro && !strnicmp ( p, lists[i].tag.c_str(), lists[i].tag.size() ) ) + { + out += ListRand(i); + p += lists[i].tag.size(); + found = true; + } } - else if ( !strnicmp ( p, "%period%", 8 ) ) - { - out += ListRand(period); - p += 8; - } - else if ( !strnicmp ( p, "%module%", 8 ) ) - { - out += ListRand(module); - p += 8; - } - else if ( !strnicmp ( p, "%stru%", 6 ) ) - { - out += ListRand(stru); - p += 6; - } - else + if ( !found ) out += *p++; } const char* p2 = strchr ( p, '%' ); @@ -76,6 +135,28 @@ return out; }
+string gobble ( string& s, const char* delim ) +{ + const char* p = s.c_str(); + p += strspn ( p, delim ); + const char* p2 = strpbrk ( p, delim ); + if ( !p2 ) p2 = p + strlen(p); + string out ( p, p2-p ); + p2 += strspn ( p2, delim ); + s = string ( p2 ); + return out; +} + +bool isop ( const string& who ) +{ + for ( int i = 0; i < ops.size(); i++ ) + { + if ( ops[i] == who ) + return true; + } + return false; +} + // do custom stuff with the IRCClient from your subclass via the provided callbacks... class MyIRCClient : public IRCClient { @@ -92,8 +173,34 @@ } bool OnJoin ( const string& user, const string& channel ) { + printf ( "user '%s' joined channel '%s'\n", user.c_str(), channel.c_str() ); return true; } + bool OnPart ( const std::string& user, const std::string& channel ) + { + for ( int i = 0; i < ops.size(); i++ ) + { + if ( ops[i] == user ) + { + printf ( "remove '%s' to ops list\n", user.c_str() ); + ops.erase ( &ops[i] ); + } + } + return true; + } + bool OnNick ( const std::string& oldNick, const std::string& newNick ) + { + for ( int i = 0; i < ops.size(); i++ ) + { + if ( ops[i] == oldNick ) + { + printf ( "op '%s' changed nick to '%s'\n", oldNick.c_str(), newNick.c_str() ); + ops[i] = newNick; + return true; + } + } + return true; + } bool OnEndChannelUsers ( const string& channel ) { return true; @@ -102,20 +209,169 @@ { printf ( "<%s> %s\n", from.c_str(), text.c_str() ); flog.printf ( "<%s> %s\n", from.c_str(), text.c_str() ); - return PrivMsg ( from, "hey, your tongue doesn't belong there!" ); + if ( strnicmp ( text.c_str(), "!say ", 5 ) || !isop(from) ) + return PrivMsg ( from, "hey, your tongue doesn't belong there!" ); + string say = trim(&text[5]); + if ( !strnicmp ( say.c_str(), "/me ", 4 ) ) + return Action ( CHANNEL, trim(&say[4]) ); + else + return PrivMsg ( CHANNEL, trim(say) ); } bool OnChannelMsg ( const string& channel, const string& from, const string& text ) { printf ( "%s <%s> %s\n", channel.c_str(), from.c_str(), text.c_str() ); flog.printf ( "%s <%s> %s\n", channel.c_str(), from.c_str(), text.c_str() ); - string text2(text); + bool found_name = false; + string text2 ( text ); strlwr ( &text2[0] ); - if ( !strnicmp ( text2.c_str(), ArchBlackmann, strlen(ArchBlackmann) ) ) + + if ( !strnicmp ( text.c_str(), BOTNAME, strlen(BOTNAME) ) ) + found_name = true; + else if ( !strnicmp ( text.c_str(), "arch ", 5 ) ) + found_name = true; + + if ( found_name ) { - string reply = ssprintf("%s: %s", from.c_str(), TechReply().c_str()); - flog.printf ( "TECH-REPLY: %s\n", reply.c_str() ); - return PrivMsg ( channel, reply ); + string s ( text ); + gobble ( s, " \t" ); // remove bot name + found_name = true; + if ( s[0] == '!' ) + { + bool from_op = isop(from); + string cmd = gobble ( s, " \t" ); + if ( !from_op ) + { + if ( cmd == "!grovel" ) + { + string out = ssprintf(TaggedReply("nogrovel").c_str(),from.c_str()); + if ( !strnicmp ( out.c_str(), "/me ", 4 ) ) + return Action ( channel, &out[4] ); + else + return PrivMsg ( channel, out ); + } + return PrivMsg ( channel, ssprintf("%s: I don't take commands from non-ops",from.c_str()) ); + } + if ( cmd == "!add" ) + { + string listname = gobble ( s, " \t" ); + int i = GetListIndex ( listname.c_str() ); + if ( i == -1 ) + return PrivMsg ( channel, ssprintf("%s: I don't have a list named '%s'",from.c_str(),listname.c_str()) ); + List& list = lists[i]; + if ( s[0] == '"' || s[0] == ''' ) + { + char delim = s[0]; + const char* p = &s[1]; + const char* p2 = strchr ( p, delim ); + if ( !p2 ) + return PrivMsg ( channel, ssprintf("%s: Couldn't add, unmatched quotes",from.c_str()) ); + s = string ( p, p2-p ); + } + for ( i = 0; i < list.list.size(); i++ ) + { + if ( list.list[i] == s ) + return PrivMsg ( channel, ssprintf("%s: entry already exists in list '%s'",from.c_str(),listname.c_str()) ); + } + if ( !stricmp ( listname.c_str(), "curse" ) ) + strlwr ( &s[0] ); + list.list.push_back ( s ); + { + File f ( ssprintf("%s.txt",list.name.c_str()), "w" ); + for ( i = 0; i < list.list.size(); i++ ) + f.printf ( "%s\n", list.list[i].c_str() ); + } + return PrivMsg ( channel, ssprintf("%s: entry added to list '%s'",from.c_str(),listname.c_str()) ); + } + else if ( cmd == "!remove" ) + { + string listname = gobble ( s, " \t" ); + int i = GetListIndex ( listname.c_str() ); + if ( i == -1 ) + return PrivMsg ( channel, ssprintf("%s: I don't have a list named '%s'",from.c_str(),listname.c_str()) ); + List& list = lists[i]; + if ( s[0] == '"' || s[0] == ''' ) + { + char delim = s[0]; + const char* p = &s[1]; + const char* p2 = strchr ( p, delim ); + if ( !p2 ) + return PrivMsg ( channel, ssprintf("%s: Couldn't add, unmatched quotes",from.c_str()) ); + s = string ( p, p2-p ); + } + for ( i = 0; i < list.list.size(); i++ ) + { + if ( list.list[i] == s ) + { + list.list.erase ( &list.list[i] ); + { + File f ( ssprintf("%s.txt",list.name.c_str()), "w" ); + for ( i = 0; i < list.list.size(); i++ ) + f.printf ( "%s\n", list.list[i].c_str() ); + } + return PrivMsg ( channel, ssprintf("%s: entry removed from list '%s'",from.c_str(),listname.c_str()) ); + } + } + return PrivMsg ( channel, ssprintf("%s: entry doesn't exist in list '%s'",from.c_str(),listname.c_str()) ); + } + else if ( cmd == "!grovel" ) + { + string out = ssprintf(TaggedReply("grovel").c_str(),from.c_str()); + if ( !strnicmp ( out.c_str(), "/me ", 4 ) ) + return Action ( channel, &out[4] ); + else + return PrivMsg ( channel, out ); + } + else if ( cmd == "!kiss" ) + { + if ( s.size() ) + return Action ( channel, ssprintf("kisses %s",s.c_str()) ); + else + return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); + } + else if ( cmd == "!hug" ) + { + if ( s.size() ) + return Action ( channel, ssprintf("hugs %s",s.c_str()) ); + else + return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); + } + else if ( cmd == "!give" ) + { + string who = gobble(s," \t"); + if ( who.size() && s.size() ) + return Action ( channel, ssprintf("gives %s a %s",who.c_str(),s.c_str()) ); + else + return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); + } + else + { + return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) ); + } + } } + + bool found_curse = false; + static vector<string>& curse = GetList("curse").list; + text2 = ssprintf(" %s ",text2.c_str()); + for ( int i = 0; i < curse.size() && !found_curse; i++ ) + { + if ( strstr ( text2.c_str(), curse[i].c_str() ) ) + found_curse = true; + } + if ( found_curse ) + { + static List& cursecop = GetList("cursecop"); + return PrivMsg ( channel, ssprintf("%s: %s", from.c_str(), ListRand(cursecop)) ); + } + else if ( found_name ) + { + string out = ssprintf("%s: %s", from.c_str(), TaggedReply("tech").c_str()); + flog.printf ( "TECH-REPLY: %s\n", out.c_str() ); + if ( !strnicmp ( out.c_str(), "/me ", 4 ) ) + return Action ( channel, &out[4] ); + else + return PrivMsg ( channel, out ); + } return true; } bool OnChannelMode ( const string& channel, const string& mode ) @@ -123,9 +379,45 @@ //printf ( "OnChannelMode(%s,%s)\n", channel.c_str(), mode.c_str() ); return true; } - bool OnUserModeInChannel ( const string& src, const string& channel, const string& user, const string& mode ) + bool OnUserModeInChannel ( const string& src, const string& channel, const string& mode, const string& target ) { - //printf ( "OnUserModeInChannel(%s,%s%s,%s)\n", src.c_str(), channel.c_str(), user.c_str(), mode.c_str() ); + printf ( "OnUserModeInChannel(%s,%s,%s,%s)\n", src.c_str(), channel.c_str(), mode.c_str(), target.c_str() ); + const char* p = mode.c_str(); + if ( !p ) + return true; + while ( *p ) + { + switch ( *p++ ) + { + case '+': + while ( *p != 0 && *p != ' ' ) + { + if ( *p == 'o' ) + { + printf ( "adding '%s' to ops list\n", target.c_str() ); + ops.push_back ( target ); + } + break; + } + break; + case '-': + while ( *p != 0 && *p != ' ' ) + { + if ( *p == 'o' ) + { + for ( int i = 0; i < ops.size(); i++ ) + { + if ( ops[i] == target ) + { + printf ( "remove '%s' to ops list\n", target.c_str() ); + ops.erase ( &ops[i] ); + } + } + break; + } + } + } + } return true; } bool OnMode ( const string& user, const string& mode ) @@ -135,14 +427,16 @@ } bool OnChannelUsers ( const string& channel, const vector<string>& users ) { - printf ( "[%s has %i users]: ", channel.c_str(), users.size() ); + //printf ( "[%s has %i users]: ", channel.c_str(), users.size() ); for ( int i = 0; i < users.size(); i++ ) { - if ( i ) + if ( users[i][0] == '@' ) + ops.push_back ( &users[i][1] ); + /*if ( i ) printf ( ", " ); - printf ( "%s", users[i].c_str() ); + printf ( "%s", users[i].c_str() );*/ } - printf ( "\n" ); + //printf ( "\n" ); return true; } }; @@ -150,32 +444,50 @@ int main ( int argc, char** argv ) { srand ( time(NULL) ); - ImportList ( tech, "tech.txt" ); - ImportList ( stru, "stru.txt" ); - ImportList ( dev, "dev.txt" ); - ImportList ( period, "period.txt" ); - ImportList ( module, "module.txt" );
+ ImportList ( "dev", true ); + ImportList ( "func", true ); + ImportList ( "dev", true ); + ImportList ( "func", true ); + ImportList ( "irql", true ); + ImportList ( "module", true ); + ImportList ( "period", true ); + ImportList ( "status", true ); + ImportList ( "stru", true ); + ImportList ( "type", true ); + + ImportList ( "tech", false ); + ImportList ( "curse", false ); + ImportList ( "cursecop", false ); + ImportList ( "grovel", false ); + ImportList ( "nogrovel", false ); + +#ifdef _DEBUG printf ( "initializing IRCClient debugging\n" ); IRCClient::SetDebug ( true ); +#endif//_DEBUG printf ( "calling suStartup()\n" ); suStartup(); printf ( "creating IRCClient object\n" ); MyIRCClient irc; printf ( "connecting to freenode\n" ); - if ( !irc.Connect ( "212.204.214.114" ) ) // irc.freenode.net + + //const char* server = "212.204.214.114"; + const char* server = "irc.freenode.net"; + + if ( !irc.Connect ( server ) ) // irc.freenode.net { printf ( "couldn't connect to server\n" ); return -1; } printf ( "sending user command\n" ); - if ( !irc.User ( "ArchBlackmann", "", "irc.freenode.net", "Arch Blackmann" ) ) + if ( !irc.User ( BOTNAME, "", "irc.freenode.net", BOTNAME ) ) { printf ( "USER command failed\n" ); return -1; } printf ( "sending nick\n" ); - if ( !irc.Nick ( "ArchBlackmann" ) ) + if ( !irc.Nick ( BOTNAME ) ) { printf ( "NICK command failed\n" ); return -1; @@ -186,8 +498,8 @@ printf ( "MODE command failed\n" ); return -1; } - printf ( "joining #ReactOS\n" ); - if ( !irc.Join ( "#ReactOS" ) ) + printf ( "joining channel\n" ); + if ( !irc.Join ( CHANNEL ) ) { printf ( "JOIN command failed\n" ); return -1; _____
Modified: trunk/irc/ArchBlackmann/IRCClient.cpp --- trunk/irc/ArchBlackmann/IRCClient.cpp 2005-04-20 17:57:26 UTC (rev 14716) +++ trunk/irc/ArchBlackmann/IRCClient.cpp 2005-04-20 18:16:32 UTC (rev 14717) @@ -81,10 +81,16 @@
bool IRCClient::PrivMsg ( const string& to, const string& text ) { - return Send ( "PRIVMSG " + to + " :" + text + "\n" ); + return Send ( "PRIVMSG " + to + " :" + text + '\n' ); }
bool +IRCClient::Action ( const string& to, const string& text ) +{ + return Send ( "PRIVMSG " + to + " :" + (char)1 + "ACTION " + text + (char)1 + '\n' ); +} + +bool IRCClient::Part ( const string& channel, const string& text ) { return Send ( "PART " + channel + " :" + text + "\n" ); @@ -226,10 +232,41 @@ printf ( "!!!:OnRecv failure 5 (PRIVMSG w/o target): %s", buf.c_str() ); continue; } - if ( tgt[0] == '#' ) - OnChannelMsg ( tgt, src, text ); + if ( *p == 1 ) + { + p++; + p2 = strchr ( p, ' ' ); + if ( !p2 ) p2 = p + strlen(p); + cmd = string ( p, p2-p ); + strlwr ( &cmd[0] ); + p = p2 + 1; + p2 = strchr ( p, 1 ); + if ( !p2 ) + { + printf ( "!!!:OnRecv failure 6 (no terminating \x01 for initial \x01 found: %s", buf.c_str() ); + continue; + } + text = string ( p, p2-p ); + if ( cmd == "action" ) + { + if ( tgt[0] == '#' ) + OnChannelAction ( tgt, src, text ); + else + OnPrivAction ( src, text ); + } + else + { + printf ( "!!!:OnRecv failure 7 (unrecognized \x01 command '%s': %s", cmd.c_str(), buf.c_str() ); + continue; + } + } else - OnPrivMsg ( src, text ); + { + if ( tgt[0] == '#' ) + OnChannelMsg ( tgt, src, text ); + else + OnPrivMsg ( src, text ); + } } else if ( cmd == "mode" ) { @@ -237,22 +274,22 @@ //printf ( "[MODE] src='%s' cmd='%s' tgt='%s' text='%s'", src.c_str(), cmd.c_str(), tgt.c_str(), text.c_str() ); //OnMode ( // self mode change: - // [MODE] src=Relic3_14 cmd=mode tgt=Relic3_14 text=+i + // [MODE] src=Nick cmd=mode tgt=Nick text=+i // channel mode change: - // [MODE] src=Royce3 cmd=mode tgt=#Royce3 text=+o Relic3_14 + // [MODE] src=Nick cmd=mode tgt=#Channel text=+o Nick if ( tgt[0] == '#' ) { p = text.c_str(); p2 = strchr ( p, ' ' ); - if ( !p2 ) - OnChannelMode ( tgt, text ); - else + if ( p2 && *p2 ) { - string user ( p, p2-p ); + string mode ( p, p2-p ); p = p2 + 1; p += strspn ( p, " " ); - OnUserModeInChannel ( src, tgt, user, p ); + OnUserModeInChannel ( src, tgt, mode, trim(p) ); } + else + OnChannelMode ( tgt, text ); } else OnMode ( tgt, text ); @@ -261,6 +298,14 @@ { OnJoin ( src, text ); } + else if ( cmd == "part" ) + { + OnPart ( src, text ); + } + else if ( cmd == "nick" ) + { + OnNick ( src, text ); + } else if ( isdigit(cmd[0]) ) { int i = atoi(cmd.c_str()); @@ -307,7 +352,13 @@ } else { - if ( _debug ) printf ( "unrecognized ':' response: %s", buf.c_str() ); + if ( strstr ( buf.c_str(), "ACTION" ) ) + { + printf ( "ACTION: " ); + for ( int i = 0; i < buf.size(); i++ ) + printf ( "%c(%xh)", buf[i], (unsigned)(unsigned char)buf[i] ); + } + else if ( _debug ) printf ( "unrecognized ':' response: %s", buf.c_str() ); } } else _____
Modified: trunk/irc/ArchBlackmann/IRCClient.h --- trunk/irc/ArchBlackmann/IRCClient.h 2005-04-20 17:57:26 UTC (rev 14716) +++ trunk/irc/ArchBlackmann/IRCClient.h 2005-04-20 18:16:32 UTC (rev 14717) @@ -48,6 +48,9 @@
// send message to someone or some channel bool PrivMsg ( const std::string& to, const std::string& text );
+ // send /me to someone or some channel + bool Action ( const std::string& to, const std::string& text ); + // leave a channel bool Part ( const std::string& channel, const std::string& text );
@@ -59,32 +62,45 @@ // OnConnected: you just successfully logged into irc server virtual bool OnConnected() = 0;
- // OnJoin: you just successfully joined this channel - virtual bool OnJoin ( const std::string& user, const std::string& channel ) = 0; + virtual bool OnNick ( const std::string& oldNick, const std::string& newNick ) { return true; }
+ // OnJoin: someone just successfully joined a channel you are in ( also sent when you successfully join a channel ) + virtual bool OnJoin ( const std::string& user, const std::string& channel ) { return true; } + + // OnPart: someone just left a channel you are in + virtual bool OnPart ( const std::string& user, const std::string& channel ) { return true; } + // OnPrivMsg: you just received a private message from a user - virtual bool OnPrivMsg ( const std::string& from, const std::string& text ) = 0; + virtual bool OnPrivMsg ( const std::string& from, const std::string& text ) { return true; }
+ virtual bool OnPrivAction ( const std::string& from, const std::string& text ) { return true; } + // OnChannelMsg: you just received a chat line in a channel virtual bool OnChannelMsg ( const std::string& channel, const std::string& from, - const std::string& text ) = 0; + const std::string& text ) { return true; }
+ // OnChannelAction: you just received a "/me" line in a channel + virtual bool OnChannelAction ( const std::string& channel, const std::string& from, + const std::string& text ) { return true; } + // OnChannelMode: notification of a change of a channel's mode - virtual bool OnChannelMode ( const std::string& channel, const std::string& mode ) = 0; + virtual bool OnChannelMode ( const std::string& channel, const std::string& mode ) + { return true; }
// OnUserModeInChannel: notification of a mode change of a user with respect to a channel. // f.ex.: this will be called when someone is oped in a channel. virtual bool OnUserModeInChannel ( const std::string& src, const std::string& channel, - const std::string& user, const std::string& mode ) = 0; + const std::string& mode, const std::string& target ) { return true; }
// OnMode: you will receive this when you change your own mode, at least... - virtual bool OnMode ( const std::string& user, const std::string& mode ) = 0; + virtual bool OnMode ( const std::string& user, const std::string& mode ) { return true; }
// notification of what users are in a channel ( you may get multiple of these... ) - virtual bool OnChannelUsers ( const std::string& channel, const std::vectorstd::string& users ) = 0; + virtual bool OnChannelUsers ( const std::string& channel, const std::vectorstd::string& users ) + { return true; }
// notification that you have received the entire list of users for a channel - virtual bool OnEndChannelUsers ( const std::string& channel ) = 0; + virtual bool OnEndChannelUsers ( const std::string& channel ) { return true; }
// OnPing - default implementation replies to PING with a valid PONG. required on some systems to // log in. Most systems require a response in order to stay connected, used to verify a client hasn't _____
Added: trunk/irc/ArchBlackmann/curse.txt --- trunk/irc/ArchBlackmann/curse.txt 2005-04-20 17:57:26 UTC (rev 14716) +++ trunk/irc/ArchBlackmann/curse.txt 2005-04-20 18:16:32 UTC (rev 14717) @@ -0,0 +1,26 @@
+shit +fuck +pussy + ass + ass- +-ass +dumbass +jackass +fatass +asshole +smartass +cunt +fucker +bitch +dick +penile +stfu +omfg +lmao + ass. +-ass. +semprini +goat.cx +ekush +akshor +poop Property changes on: trunk/irc/ArchBlackmann/curse.txt ___________________________________________________________________ Name: svn:eol-style + native _____
Added: trunk/irc/ArchBlackmann/cursecop.txt --- trunk/irc/ArchBlackmann/cursecop.txt 2005-04-20 17:57:26 UTC (rev 14716) +++ trunk/irc/ArchBlackmann/cursecop.txt 2005-04-20 18:16:32 UTC (rev 14717) @@ -0,0 +1,10 @@
+You should have your mouth washed out with soap! +This is a clean channel... please watch your language +Please try to keep it clean +Hey, there's children present ( I'm not even a year old yet! ) +Could you find a less-offensive way to express yourself, please? +Such language :( +Those aren't nice words to use +Oh, my poor innocent ears :( +Help! My mind is being corrupted! +filthy mouths are not appreciated here Property changes on: trunk/irc/ArchBlackmann/cursecop.txt ___________________________________________________________________ Name: svn:eol-style + native _____
Modified: trunk/irc/ArchBlackmann/dev.txt --- trunk/irc/ArchBlackmann/dev.txt 2005-04-20 17:57:26 UTC (rev 14716) +++ trunk/irc/ArchBlackmann/dev.txt 2005-04-20 18:16:32 UTC (rev 14717) @@ -11,4 +11,5 @@
blight_ jimtabor mtempel -Gge \ No newline at end of file +Gge +Alex_Ionescu _____
Added: trunk/irc/ArchBlackmann/func.txt --- trunk/irc/ArchBlackmann/func.txt 2005-04-20 17:57:26 UTC (rev 14716) +++ trunk/irc/ArchBlackmann/func.txt 2005-04-20 18:16:32 UTC (rev 14717) @@ -0,0 +1,581 @@
+BOOLEAN +CcCanIWrite +CcCopyRead +CcCopyWrite +CcDeferWrite +CcFastCopyRead +CcFastCopyWrite +CcFlushCache +CcGetDirtyPages +CcGetFileObjectFromBcb +CcGetFileObjectFromSectionPtrs +CcGetFlushedValidData +CcGetLsnForFileObject +CcInitializeCacheMap +CcIsThereDirtyData +CcMapData +CcMdlRead +CcMdlReadComplete +CcMdlWriteAbort +CcMdlWriteComplete +CcPinMappedData +CcPinRead +CcPrepareMdlWrite +CcPreparePinWrite +CcPurgeCacheSection +CcRemapBcb +CcRepinBcb +CcScheduleReadAhead +CcSetAdditionalCacheAttributes +CcSetBcbOwnerPointer +CcSetDirtyPageThreshold +CcSetDirtyPinnedData +CcSetFileSizes +CcSetLogHandleForFile +CcSetReadAheadGranularity +CcUninitializeCacheMap +CcUnpinData +CcUnpinDataForThread +CcUnpinRepinnedBcb +CcWaitForCurrentLazyWriterActivity +CcZeroData +DbgLoadImageSymbols +DbgQueryDebugFilterState +DbgSetDebugFilterState +EVENT_TYPE +ExAcquireResourceExclusive +ExAcquireResourceExclusiveLite +ExAcquireResourceSharedLite +ExAcquireSharedStarveExclusive +ExAcquireSharedWaitForExclusive +ExAllocateFromZone +ExAllocatePool +ExAllocatePoolWithQuota +ExAllocatePoolWithQuotaTag +ExAllocatePoolWithTag +ExConvertExclusiveToSharedLite +ExCreateCallback +ExDeleteNPagedLookasideList +ExDeletePagedLookasideList +ExDeleteResource +ExDeleteResourceLite +ExDisableResourceBoostLite +ExEnumHandleTable +ExExtendZone +ExFreePool +ExGetCurrentProcessorCounts +ExGetCurrentProcessorCpuUsage +ExGetExclusiveWaiterCount +ExGetPreviousMode +ExGetSharedWaiterCount +ExInitializeNPagedLookasideList +ExInitializePagedLookasideList +ExInitializeResource +ExInitializeResourceLite +ExInitializeZone +ExInterlockedAddLargeInteger +ExInterlockedAddUlong +ExInterlockedDecrementLong +ExInterlockedExchangeUlong +ExInterlockedExtendZone +ExInterlockedIncrementLong +ExInterlockedInsertHeadList +ExInterlockedInsertTailList +ExInterlockedPopEntryList +ExInterlockedPushEntryList +ExInterlockedRemoveHeadList +ExIsProcessorFeaturePresent +ExIsResourceAcquiredExclusiveLite +ExIsResourceAcquiredSharedLite +ExLocalTimeToSystemTime +ExNotifyCallback +ExPostSystemEvent +ExQueryPoolBlockSize +ExQueueWorkItem +ExRaiseAccessViolation +ExRaiseDatatypeMisalignment +ExRaiseException +ExRaiseHardError +ExRaiseStatus +ExRegisterCallback +ExReinitializeResourceLite +ExReleaseResource +ExReleaseResourceForThread +ExReleaseResourceForThreadLite +ExRosDumpPagedPoolByTag +ExRosQueryPoolTag +ExSetResourceOwnerPointer +ExSetTimerResolution +ExSystemExceptionFilter +ExSystemTimeToLocalTime +ExTryToAcquireResourceExclusiveLite +ExUnregisterCallback +ExUuidCreate +ExVerifySuite +FsRtlAcquireFileExclusive +FsRtlAddMcbEntry +FsRtlAddToTunnelCache +FsRtlAllocateFileLock +FsRtlAllocatePool +FsRtlAllocatePoolWithQuota +FsRtlAllocatePoolWithQuotaTag +FsRtlAllocatePoolWithTag +FsRtlAllocateResource +FsRtlAreNamesEqual +FsRtlBalanceReads +FsRtlCheckLockForReadAccess +FsRtlCheckLockForWriteAccess +FsRtlCopyRead +FsRtlCopyWrite +FsRtlFastCheckLockForRead +FsRtlFastCheckLockForWrite +FsRtlFastUnlockAll +FsRtlFastUnlockAllByKey +FsRtlFastUnlockSingle +FsRtlFindInTunnelCache +FsRtlFreeFileLock +FsRtlGetFileSize +FsRtlGetNextFileLock +FsRtlGetNextMcbEntry +FsRtlIncrementCcFastReadNoWait +FsRtlIncrementCcFastReadNotPossible +FsRtlIncrementCcFastReadResourceMiss +FsRtlIncrementCcFastReadWait +FsRtlInitializeFileLock +FsRtlInitializeMcb +FsRtlInitializeTunnelCache +FsRtlInsertPerFileObjectContext +FsRtlInsertPerStreamContext +FsRtlIsDbcsInExpression +FsRtlIsFatDbcsLegal +FsRtlIsHpfsDbcsLegal +FsRtlIsNameInExpression +FsRtlLookupLastLargeMcbEntryAndIndex +FsRtlLookupLastMcbEntry +FsRtlLookupMcbEntry +FsRtlLookupPerFileObjectContext +FsRtlLookupPerStreamContextInternal +FsRtlMdlRead +FsRtlMdlReadComplete +FsRtlMdlReadCompleteDev +FsRtlMdlReadDev +FsRtlMdlWriteComplete +FsRtlMdlWriteCompleteDev +FsRtlNotifyChangeDirectory +FsRtlNotifyCleanup +FsRtlNotifyFilterChangeDirectory +FsRtlNotifyFilterReportChange +FsRtlNotifyFullChangeDirectory +FsRtlNotifyFullReportChange +FsRtlNotifyReportChange +FsRtlNotifyUninitializeSync +FsRtlNumberOfRunsInMcb +FsRtlPostPagingFileStackOverflow +FsRtlPostStackOverflow +FsRtlPrepareMdlWrite +FsRtlPrepareMdlWriteDev +FsRtlPrivateLock +FsRtlProcessFileLock +FsRtlRegisterFileSystemFilterCallbacks +FsRtlReleaseFile +FsRtlRemoveMcbEntry +FsRtlRemovePerFileObjectContext +FsRtlRemovePerStreamContext +FsRtlResetLargeMcb +FsRtlSyncVolumes +FsRtlTeardownPerStreamContexts +FsRtlTruncateMcb +FsRtlUninitializeFileLock +FsRtlUninitializeMcb +HalAdjustResourceList +HalAllocateCommonBuffer +HalAssignSlotResources +HalCalibratePerformanceCounter +HalFlushCommonBuffer +HalFreeCommonBuffer +HalGetAdapter +HalGetBusData +HalGetBusDataByOffset +HalGetDmaAlignmentRequirement +HalMakeBeep +HalQueryDisplayParameters +HalQueryRealTimeClock +HalReadDmaCounter [truncated at 1000 lines; 2154 more skipped]