Add gnulib gettext module for config.rpath
[clinton/bobotpp.git] / ChangeLog
index f7153db..689ef72 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2008-11-11  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Parser.C: GCC 4.x compilation fixes
+
+       * source/ShitList.C: GCC 4.x compilation fixes
+
+       * source/String.C: GCC 4.x compilation fixes
+
+       * source/UserCommands.C: GCC 4.x compilation fixes
+
+       * source/Channel.C: GCC 4.x compilation fixes
+
+2007-11-08  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * configure.ac (LDFLAGS): Append GUILE_LDFLAGS to fix non-standard
+       location builds
+       (CXXFLAGS): Append GUILE_CFLAGS to fix non-standard location
+       builds
+
+       * guile.m4: Import guile.m4 (included in source tree since it
+       doesn't change often and this will allow building on machines
+       lacking a guile installation)
+
+       * acinclude.m4: Fix underquoted AC_CPP macros
+       Include guile.m4 rather than copying here
+
+2007-10-05  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Main.C (real_main): scm_eval_string debug initialization
+       instead of setting the flags directly as they are no longer public
+       in Guile 1.9.x
+
+2006-06-28  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * Release: 2.2.2
+
+       * scripts/bobot-utils.scm (bot:load): Fixed loop logic so that
+       directories other than the first entry in the load path are
+       actually searched
+
+       * scripts/uname: redelim -> rdelim
+
+       * AUTHORS: Added Stelz to the Help by section
+
+       * source/Bot.C (readConfig): If a logfile starting in / is found
+       the logdir should be set to all but the last part of the filename,
+       and the logfile set to the last part to avoid breaking script
+       logging
+
+       * scripts/bobot-utils.scm (bot:match-not-channel): Removed space
+       in regex so it works on freenode again
+
+       * scripts/bobot-utils.scm (bot:sent-to-me?): Rewritten to call
+       bot:match-to-me when called and not when defined
+
+       * source/Bot.C (Bot): Added argument to Interp::Startup2
+
+       * source/Interp.C (Startup2): Made to take a Bot as argument to avoid
+       a segfault
+
+       * source/Bot.C (Bot): Create BotInterp before running
+       Interp::Startup2 ()
+
+       * Release: 2.2.1
+
+       * source/Bot.C (set_log_dir): Create directory if it doesn't exist
+       (readConfig): Catch case of a line consisting of whitespace and
+       don't print an error message
+
+2006-02-03  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (Startup): Removed loading of bobot-utils.scm
+       (Startup2): Load bobot-utils.scm here
+
+       * source/Interp.H: Added Startup2 method
+
+       * source/Bot.C (Bot): Call Interp::Startup2
+
+       * source/Main.C (main): Moved Interp::Startup call to after the
+       Bot is created 
+       (main): Moved Interp::Startup back
+
+2005-09-12  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (High Level Message Functions): Removed
+       duplicate bot:say entry
+       (Channel Control): Converted section to new format, and documented
+       more commands
+
+2005-08-07  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Bot Control Commands): Convert to @deffn and
+       documented commands
+       (Built-In Commands): Clarified when the channel argument must be
+       provided
+
+2005-07-21  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo: Removed all multitables and replaced them with
+       lists
+
+2005-07-07  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Shit Levels): Added section
+       (Scheme User Levels): Removed Section
+       (Adding New Commands): Updated ref to Scheme User Levels to refer
+       to the User Levels section, and changed a @code{} into a @{var}
+       (Sending Messages): Rewrote section
+       (High Level Message Functions): Merged bot:say and bot:msg
+       sections
+       (bot.users): Expanded section
+       (bot.shit): Added section
+       (bot.conf): Document initfile option
+       (bot.shit): More detail
+       (bot.users): More detail
+       (bot.init): Added section
+       (bot.conf): Documented autoexecfile option
+       (bot.autoexec): Added section
+       (Using the Bot): Added some intro text
+       (Concepts): New section, all of the level sections are now
+       subsections of this
+       Merged small doc patch from dsmith
+       (Channel Control): Added Section
+       (User List Commands): Added Section
+       (Spylist): Added Section
+       (Message Commands): Added Section
+       (Miscellaneous Commands): Added Section
+       (Shit List Commands): Added Section
+       (Channel Info): Added Section
+       (Built-In Commands): Completely Reorganized section
+
+       * source/Interp.C (interp_init_helper): Added bot:shit/none
+       /no-ban, /no-kick, and /no-deop constants to Scheme
+
+       * scripts/bobot-utils.scm (bot:sent-to-me?): Redefined as a
+       closure (this should create the regexp once instead of each time
+       the function is called)
+
+       * examples/bot.autoexec: Updated sample bot.autoexec
+
+       * examples/bot.users: Updated sample bot.users
+
+       * examples/bot.conf: Updated sample config
+
+2005-07-06  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Sent Message Hooks): Documented hooks/send/who
+       and hooks/send/whois
+
+       * source/ServerQueue.C (sendWho): Call hooks/send/who
+       (sendWhois): Call hooks/send/whois
+
+       * source/Interp.C (interp_init_helper): Added hooks/send/who and
+       hooks/send/whois constants to Scheme
+
+       * source/BotInterp.H: Added SEND_WHO and SEND_WHOIS hook constants
+
+       * bobot++.texinfo (Misc Scripting Stuff): Documented bot:who and
+       bot:whois
+       (bot.conf): Document MAXNICKLENGTH
+
+       * source/Interp.C (interp_init_helper): Add bot:who and bot:whois
+       bindings to Scheme
+
+       * source/ScriptCommands.C (Who): Implemented Who method
+       Removed IQUEUE macro (no longer needed)
+       (Whois): Implemented Whois method
+
+       * source/ScriptCommands.H: Added Who and Whois methods
+
+       * source/Commands.C (Who): Implemented Who
+       (Whois): Implemented Whois
+
+       * source/Commands.H: Add Who and Whois tethods
+
+       * source/Interp.C: Updated copyright notice
+       (interp_init_helper): Remove send from CTCP/CTCPReply method names
+
+       * source/Interp.H: Updated copyright notice
+
+       * source/ScriptCommands.C (CTCP): Renamed from sendCTCP
+       (CTCPReply): Renamed from sendCTCPReply
+
+2005-07-05  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Low Level Message Functions): Updated docs to
+       reflect new names for ctcp functions
+
+       * source/Interp.C (interp_init_helper): Register
+       ScriptCommands::Notice instead of sendNotice
+       (interp_init_helper): Renamed bot:send-ctcp to bot:ctcp
+       (interp_init_helper): Renamed bot:send-ctcp-reply to bot:ctcp-reply
+
+       * source/ScriptCommands.C (Notice): Renamed from sentNotice
+
+       * source/ScriptCommands.H: Renamed sendNotice to Notice
+
+       * bobot++.texinfo (Hook Types): Spelling fix
+
+2005-07-04  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * scripts/bobot-utils.scm (_deprecated-fun): Set
+       current-error-port to bot:logport while calling
+       issue-deprecation-warning
+
+       * bobot++.texinfo: Grammar fixes on the title page
+       (Configuration): Added more info on config files.
+       (bot.conf): Added xrefs for server syntax and channel syntax
+       (server syntax): Added more detail and moved a paragraph
+       (channel syntax): Added more details, revised the examples, and
+       moved some text around
+       (User Levels): Clarified
+       (Protection): Cleaned up
+       (Automatic Op): Improved substantially
+
+       * source/DCCManager.C (checkInput): Call hooks/dcc/chat-end if the
+       DCC CHAT has died
+
+       * scripts/bobot-utils.scm (bot:log): Updated to use bot:logport
+       instead of bot-logport
+
+       * source/Interp.C (interp_init_helper): Add hooks/dcc/chat-end
+       constant to Scheme
+
+       * bobot++.texinfo (DCC CHAT Hooks): Document hooks/dcc/chat-end
+
+       * source/BotInterp.H: Add DCC_CHAT_END to enum
+
+       * source/DCCManager.C (checkStale): Run hooks/dcc/chat-end when
+       deleting a stale connection.
+
+2005-07-03  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Hook Types): Documented all hooks
+
+       * source/ServerQueue.C (sendPrivmsg): Changed SEND_MESSAGE hook to
+       match dest and pass dest to send hook
+
+       * bobot++.texinfo (Hook Types): Changed language of
+       hooks/dcc/chat-* hook documention
+       (Received Message Hooks): Added subsub section of Hook Types
+       (Sent Message Hooks): Added subsub section of Hook Types
+       (DCC CHAT Hooks): Added subsub section of Hook Types
+       (Miscellaneous Hooks): Added subsub section of Hook Types
+
+       * source/Parser.C (parseScriptFunction): Changed
+       lazy_apply_wrapper to Interp::LazyApplyWrapper
+       (parseScriptFunction): Changed empty_handler to Interp::EmptyHandler
+       (parsePart): Grammar fix in log (Leaved => Left)
+
+       * source/Interp.H (Interp): Added LazyHandler method
+
+       * source/BotInterp.C (RunHooks): changed lazy_apply_wrapper to
+       Interp::LazyApplyWrapper
+       (RunTimers): Changed empty_handler to Interp::EmptyHandler
+       (RunHooks): Changed empty_handler to Interp::EmptyHandler
+       (RunTimers): Changed lazy_apply_wrapper to Interp::LazyApplyWrapper
+
+       * source/Interp.C (LazyHandler): Renamed from lazy_handler
+       (ScmApplyWrapper): Renamed from scm_apply_wrapper
+       (EmptyHandler): Renamed from empty_handler
+
+       * source/Interp.H (Interp): Removed ErrorHandler method
+       (Interp): Added LazyApplyWrapper method
+       (Interp): Added EmptyHandler method
+       (Interp): Added ScmApplyWrapper method
+
+       * scripts/bobot-utils.scm: Added hooks/leave as an alias for hooks/part
+       Added begin-deprecated around deprecated definitions
+       (_deprecated-fun): Added macro to define an alias for a function
+       and issue a deprecation warning when used
+       Converted all bot- aliases to use _deprecated-fun
+
+       * source/Interp.C (interp_init_helper): Changed Hook::LEAVE to
+       Hook::PART
+       (interp_init_helper): Removed definition of hooks/leave
+
+       * bobot++.texinfo (Hook Types): Removed stub for hooks/leave, only
+       document hooks/part name (hooks/leave still exists, but will not
+       be documented as it is the same as hooks/part)
+
+       * source/Parser.C (parsePart): Use Hook::PART instead of Hook::LEAVE
+
+       * source/BotInterp.H: Removed Hook::LEAVE, added Hook::PART
+
+       * bobot++.texinfo (Scripting): Added note about most arguments
+       being strings
+
+       * source/Commands.C (NextServer): Call hooks/disconnect
+
+       * source/Bot.C (run): Pass extra argument to Hook::DISCONNECT
+
+       * bobot++.texinfo (Creating a Hook): Reformatted the bot:addhook
+       section to make it more readable
+       (Hook Types): Reformatted hooks/action
+       (Hook Types): Changed grammar of hooks/nickname (their => his)
+       (Hook Types): Documented hooks/signoff
+
+2005-06-29  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo: Updated copyright years, changed "applies to
+       2.1.5" to 2.2
+
+       * source/Socket.C (readLine): return buf.substr (0, pos) instead
+       of using the String char * constructor (this should be faster,
+       especially for long strings since a simple copy is used instead of
+       going over each char until nul is encountered)
+
+       * configure.ac: Release 2.1.8
+       Change version to 2.1.9CVS
+
+       * source/Parser.C: Include Commands.H (fixes --disable-scripting build)
+
+       * source/Bot.C (Bot): Fix to make a --disable-scripting build work
+
+       * bobot++.texinfo (Configuration): Swapped order of config file
+       placement and config files
+       (User Levels): users not found in the user list *can* execute
+       commands as bot:user-none now.
+       (Low Level Message Functions): Changed a few @code{}s to @var{}s
+
+2005-06-28  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo: @vskip Opt... => @vskip 0pt...
+
+       * source/Main.C (namespace): Added debug-scripts option
+
+       * source/Parser.C (parseCTCP): Hook::ACTION is now passed
+       from->getNick () instead of from->getAddress () (consistency fix)
+
+       * source/Main.C: Merged error handling patch from dsmith
+
+       * source/Parser.C: Merged error handling
+       patch from dsmith
+
+       * source/Interp.H: Merged error handling patch from dsmith
+
+       * source/Interp.C (lazy_handler): Merged error handling patch from
+       dsmith
+
+       * source/BotInterp.H: Merged error handling patch from dsmith
+
+       * source/BotInterp.C: Merged error handling patch from dsmith
+
+       * bobot++.texinfo (Low Level Message Functions): Documented
+       bot:send-ctcp-reply
+
+       * source/Parser.C (parseCTCP): Converted to use Commands::CTCPReply
+
+       * source/Interp.C (interp_init_helper): Bound bot:send-ctcp-reply
+       in scheme
+
+       * bobot++.texinfo (Low Level Message Functions):
+       s/bot:send-CTCP/bot:send-ctcp/
+
+       * source/Interp.C (interp_init_helper): Renamed bot:send-CTCP to
+       bot:send-ctcp
+
+       * source/ScriptCommands.H: Uncommented sendCTCPReply prototype
+
+       * source/ScriptCommands.C (sendCTCP): Convert to use Commands::CTCP
+       (sendCTCPReply): Added
+
+       * source/Parser.C (parseJoin): Convert to use Commands::CTCP
+
+       * source/Commands.C (CTCP): Implemented
+       (CTCPReply): Implemented
+       (Action): Convert to use Commands::CTCP
+
+       * source/Commands.H: Added CTCP (bot, target, command, message)
+       Added CTCPReply (bot, target, command, message)
+
+2005-06-27  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * examples/bot.conf (maxnicklength): Update example config
+
+       * source/Utils.C (valid_nickname_p): Use b->MAX_NICKLENGTH
+
+       * source/Bot.C (readConfig): Look for MAXNICKLENGTH parameter
+
+       * source/Bot.H: Added MAX_NICKLENGTH member
+
+       * source/Utils.H (valid_nickname_p): Now takes Bot* as first argument
+
+       * source/Commands.C (Msg): Send multiple PRIVMSGs when a message
+       is multiple lines
+
+       * source/UserCommands.C (SetVersion): Convert to use Commands::Notice
+
+       * source/Commands.C (Notice): Send multiple NOTICEs when a message
+       is multiple lines
+
+2005-06-25  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Main.C (real_main): Enable Guile debugging mode when
+       --debug is used
+
+       * source/Interp.C (interp_post_startup_helper): Return
+       SCM_UNSPECIFIED instead of 0
+
+2005-06-24  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * All: Updated FSF street address
+
+       * source/Commands.C (Msg): Move body of Say to an if inside of this
+       (Say): Just call Msg
+
+       * source/ScriptCommands.C (sendNotice): Returns error code instead
+       of just #t or #f
+
+       * source/Commands.C (Say): Check to make sure target is a channel
+       (Msg): Extended to send messages to channels
+
+2005-06-23  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * scripts/bot.scm: Added file ((bobotpp bot) module for other
+       modules to gain access to bobot++ interface)
+
+       * source/Commands.C (Notice): Commented out check/abort if target
+       is a channel (there doesn't seem to be a reason for this to not work)
+
+       * source/Interp.C (interp_init_helper): Register bot:notice with scheme
+
+       * bobot++.texinfo (High Level Message Functions): Document bot:notice
+
+       * source/Message.H: Added operator== to Message (tests for error
+       code equality)
+
+       * source/Commands.C: Removed message type macros
+
+       * source/Message.H: Moved message type macros to Message.H
+
+       * source/ScriptCommands.C (sendNotice): Implemented sendNotice
+
+       * source/ScriptCommands.H: Uncomment sendNotice
+
+       * source/Bot.C (waitForInput): Use %02d when formatting
+       Hooks::TIMER argument instead of %2d, and switch to snprintf to
+       enforce max length
+
+       * bobot++.texinfo (Hooks): Clarified intro text about hooks (order
+       of processing).
+
+       * source/Bot.C (run): Added call to Hooks::DISCONNECT
+       (hooks/disconnect) when the bot is disconnected from the server
+
+       * bobot++.texinfo: Applied documentation patch from Dale P. Smith
+       (Hook Types): Added hooks/disconnect argument
+
+2005-06-06  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo: Change @vskip 0 to @vskip 0pt to make this work
+       again (thanks dsmith)
+
+2005-06-01  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (interp_init_helper): Added
+       bot:protection/[none|ban|kick|deop] constants to Scheme
+       (interp_init_helper): Added bot:aop/[yes|no] constants
+
+2005-05-31  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * configure.ac: Release Bobot++ 2.1.7
+       Changed version to 2.18.CVS
+
+       * source/UserList.C (save): Remove workaround for BUG #2
+
+       * source/Parser.C (parse001): make realNick lowercase when doing
+       the comparison to bot->nickName to prevent pushing a second copy
+       of the bot onto the userlist (closes BUG #2)
+
+       * source/Bot.C (Bot): cleaned up constructor
+       (waitForInput): replaced gh_list with scm_list_n
+
+       * source/UserList.C: Cleaned up some formatting
+
+       * source/Main.C: Formatted code more cleanly
+       (real_main): changed a few Strings to std::strings
+
+       * source/String.C (operator): Made index signed again, it's not
+       worth fixing this warning
+
+       * source/Bot.C: Add casts to make this compile with unsigned int
+       as operator[] in String
+
+       * source/String.C (operator): Made index unsigned
+
+       * source/Utils.C: Made a few things unsigned to kill warnings
+
+       * source/Socket.C (readLine): Made pos unsigned
+
+       * source/Bot.C (Bot): Fixed initializer list order to kill warnings
+
+       * source/BotInterp.C (RunTimers): Removed unused variable (Timer *t)
+
+       * source/StringTokenizer.C (count_tokens): Changed return type to
+       unsigned int
+       (more_tokens_p): Made counter unsigned
+
+       * source/StringTokenizer.H (class StringTokenizer): Made pos
+       std::string::size_type instead of int
+
+       * source/Commands.C (TBan): Returns Ok is the ban is done instead
+       of falling off the end (oops)
+
+       * source/BotInterp.H: Add general catch case (false)
+
+2005-03-11  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * configure.ac: Release 2.1.6
+       Changed version to 2.1.7CVS
+
+2005-02-28  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Parser.C (parseLine): use map<>::find and an iterator to
+       find the IRC command instead of map<>::operator[] to avoid a
+       potential segfault
+
+       * source/Bot.C (waitForInput): Removed commented out code
+
+       * source/Socket.C (readLine): return String (buf.c_str ()) instead
+       of String (buf) so that only the buffer up to the first null is returned
+       (readLine): Added a comment explaining the usage of buf
+       (readLine): Changed type of length (std::string::size_type instead
+       of std::size_t)
+
+       * source/String.C: Reimplemented String on top of std::string to
+       fix a few bugs and potential memory leaks
+       (toLower): use Utils::to_lower
+       (toUpper): Use Utils::to_upper
+       (trim): Use Utils::trim_str
+
+       * source/String.H: removed srep, replaced it with a std::string
+       (my_string)
+
+       * source/Utils.C (to_upper): Applied patch from Jos Hulzink
+       <josh@stack.nl>
+       (trim_str): Appled patch from Jos Hulzink <josh@stack.nl> (fixes
+       counters and substr call)
+
+       * source/StringTokenizer.C (next_token): Applied patch from Jos
+       Hulzink <josh@stack.nl> (fixes substr call)
+       (rest): Applied patch from Jos Hulzink <josh@stack.nl> (fixes
+       substr call)
+
+2005-02-27  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Bot.H (COPYRIGHT_STRING): Remove Michael Wilson because
+       he is a lazy bum and never submitted the String replacing patch
+
+2005-01-23  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * configure.ac: Remove CC++ test
+       Changed version to 2.1.6CVS (2.1.5 released)
+
+       * bobot++.texinfo: Updated copyright
+
+2005-01-16  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * TODO (General): Added TODO items
+       (2.2): Moved a few items here from 2.4
+
+       * README (NOTE): Mention boost requirement
+
+2005-01-13  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * ChangeLog Updated copryight
+
+       * source/User.H: Removed forward declaration of Utils
+
+       * source/Bot.H: Removed forward declaration of Utils
+
+       * source/ChannelList.H: Removed forward declaration of Utils
+
+       * source/UserListItem.H: Removed forward declaration of Utils
+
+       * source/Utils.H: Removed class Utils, replaced with a namspace
+       (it only contained static methods)
+
+       * source/Bot.H (COPYRIGHT_STRING): Added 2005 and Michael Wilson
+       (he is replacing String)
+
+2005-01-12  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/BotConfig.C (set_option_value): Put watcher calling
+       inside of if (cf_iter != end()) to fix a segfault (if the cf_iter
+       = end then there are no watchers since this is a new value and
+       references cf_iter->second segfaults)
+
+       * source/Utils.C (trim_str): Fixed bug (last non-space character
+       was being cut off)
+
+       * source/BotConfig.C (read_config): Made to use set_option_value
+       instead of manipulating options_db directly
+
+       * source/BotConfig.H (class BotConfig): Add set_option_value that
+       takes a t_value instead of t_value_list (most uss of
+       set_option_value will be to add a single value so this is very useful)
+
+       * source/BotConfig.C (set_option_value): Implemented
+
+       * source/UserList.C: Made to work with new Utils/StringTokenizer names
+
+       * source/UserCommands.C: Made to work with new
+       Utils/StringTokenizer names
+
+       * source/ShitList.C: Uses Utils.H now (Utils::trim_str & friends)
+
+2005-01-11  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/ShitList.C: Made to work with new StringTokenizer names
+
+       * source/ServerQueueItem.C: Made to work with new StringTokenizer names
+
+       * source/ServerQueue.C: Made to work with new Utils names
+
+       * source/ScriptCommands.C: Made work with new Utils names
+
+       * source/Person.C (getNick): Made work with new Utils names
+
+       * source/String.H: Added substr prototypes
+
+       * source/String.C (substr): Added substr as an alias of subString
+       (for compat with std::string before the transition)
+
+       * source/Parser.C: Made to work with new Utils/StringTokenizer names
+
+       * source/DCCParser.C: Made to work with new Utils names
+
+       * source/DCCChatConnection.C: Made to work new Utils names
+
+       * source/Commands.C: Made to work with new Utils names
+
+       * source/Channel.C: Made to work with new Utils names
+
+       * source/BotInterp.C: Made to work with new Utils
+
+       * source/Bot.C: Made to work with new Utils/StringTokenizer names
+
+       * source/String.C (operator=): Unremoved operator=(std::string)
+
+       * source/String.H: Unremoved operator=(std::string)
+
+       * source/BotConfig.C (read_config): Use Utils::trim_str
+
+       * source/String.C (trim): Fixed bug (p->s[i] == '\r', s/i/j/)
+
+       * source/Utils.C (trim_str): Implemented
+
+       * source/Utils.H: Added tim_str (replaces String::trim)
+
+       * source/BotConfig.C: Made everything work with new
+       StringTokenizer and Utils names
+
+       * source/Utils.H: Added to_lower
+       Added to_upper
+
+       * source/StringTokenizer.C (rest): uses std::isspace instead of
+       checking st[pos] against ' ' and '\t'
+
+       * source/StringTokenizer.H: Removed CamelCasing
+       Renamed hasMoreTokens to more_tokens_p
+
+       * source/StringTokenizer.C: Converted to use std::string
+
+       * source/StringTokenizer.H: Converted to use std::string
+
+       * source/String.C: Removed operator=(std::string)
+
+       * source/String.H: Removed operator=(std::string)
+
+       * source/Utils.C: Added copyright
+       Reformatted to match GNU coding standard more closely
+       Converted everything to use std::string
+       (get_nick): Renamed from getNick
+       (get_userhost): Renamed from getUserHost
+       (get_key): Renamed from getKey
+       (IP_p): Renamed from isIP
+       (make_wildcard): Renamed from makeWildcard
+       (channel_p): Renamed from isChannel
+       (wildcard_p): Renamed from isWildcard
+       (valid_channel_name_p): Renamed from isValidChannelName
+       (valid_nickname_p): Renamed from isValidNickName
+       (get_level): Renamed from getLevel
+       (str2time): Renamed from strToTime
+       (str2time): Fixed potential buffer overflow (num[512] => std::string)
+       (level2str): Renamed from levelToStr
+       (prot2str): Renamed from protToStr
+       (bool2str): Renamed from boolToStr
+       (long2str): Implemented
+       (scm2str): Renamed from scm2String
+       (str2scm): Renamed from string2SCM
+
+       * source/BotConfig.C: Reformatted to fit GNU coding style more closely
+
+       * source/Utils.H: Added long2str (long int -> std::string)
+
+       * source/String.H: Added 2003 copyright (the year I last modified
+       it in)
+
+       * source/String.C: Added 2002 copyright (the year I last modified
+       it in)
+
+       * source/Utils.H: Updated Copyright
+       s/String/std::string/g
+       Removed camel casing and is* = *_p
+       xToY = x2y
+
+       * source/BotConfig.C: Updated Copyright
+
+       * source/BotConfig.H: Updated copyright
+
+2005-01-08  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/BotConfig.C (set_option_value): Take care of the case
+       where key is not already in the db
+       (add_watcher): Implemented
+       (read_config): Removed ',' token parsing (not needed)
+
+       * configure.ac: Add AC_LANG([C++]) so we can check for C++ libs
+       AC_CHECK_LIB ccgnu2 (CommonC++2)
+
+       * README: Updated README (reformatted, adding info, etc.)
+
+2005-01-07  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/BotConfig.C (set_option_value): call watcher list
+       (run_fun_): Added to support watcher list calling
+
+2005-01-06  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/BotConfig.C (set_option_value): Fuck you STL
+       (push_back_): Reimplemented so that it doesn't need std::bind1st
+       because the STL is being stupid
+
+2004-12-26  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/BotConfig.C (read_config): Implemented properly
+       (get_option_values): Implemented properly
+       (set_config_file): Fixed
+
+2004-07-10  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Built-In Commands): Added empty stubs to the
+       list of commands
+
+2004-06-22  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/BotConfig.C: New file (implementation of configuration database)
+
+       * source/BotConfig.H: New File (semi-generic configuration database)
+
+2004-06-17  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Starting the Bot): New section
+
+2004-06-14  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (Protection): Added Section
+       (User Levels): Rewrote section to be useful
+       (bot.users): Added section
+
+2004-06-12  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/DCCChatConnection.C (connect): Checks to make sure the
+       person initiating a DCC CHAT with the bot is at least a FRIEND of
+       the bot.
+
+       * README: Fixed a typo
+
+       * scripts/bobot-utils.scm (ctcp-quote): Implemented ctcp-quote
+       (bot:ctcp-quote): Renamed ctcp-quote to bot:ctcp-quite (whoops)
+
+2004-05-28  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * bobot++.texinfo (bot.conf): Finished section
+       (server syntax): New section, documents the bot.conf SERVER syntax
+       (channel syntax): New section, documentes the bot.conf CHANNEL syntax
+
+2004-05-13  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Main.C (real_main): std::exit instead of exit
+
+2004-05-12  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/DCCConnection.C (DCCConnection): Intialized `nuh' in the
+       constructor with `n' This should fix the segfaulting.
+
+2004-01-28  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * ChangeLog: Updated copyright notice
+
+2004-01-09  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (interp_init_helper): Register
+       bot:change-command-level
+
+       * source/ScriptCommands.C (ChangeCommandLevel): Added
+       ChangeCommandLevel to change the level a user needs to be to run a
+       command
+
+       * source/ScriptCommands.H: Added ChangeCommandLevel
+
+2003-10-12  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/String.H: Changed #define STRING_H to BSTRING_H
+
+2003-08-04  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * scripts/bobot-utils.scm (bot:sent-to-me?): New procedure, used
+       to see if a message was sent to the bot (this is better than
+       bot:match-to-me because the hook isn't invalidated when the bot's
+       nickname changes)
+
+       * source/DCCConnection.H: Added `nuh' back and added an
+       accessor (get_nuh)
+       Added setter `set_autoRemove(bool)'
+
+       * source/DCCConnection.H: Removed all friends
+       Added accessors (get_bot, get_lastSpoken, get_autoRemove; get_bot
+       reveals the pointer to the bot [PRIVATE POINTER] which probably
+       isn't so nice, but there isn't much to be done about it with the
+       current design of the bot)
+
+       * source/DCCChatConnection.H: Removed all friends
+
+       * source/DCCConnection.H: DCCConnection is now a pure virtual
+       class with the subclass DCCChatConnection
+
+2003-07-29  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Socket.C (connect): log errors to the bot log instead of
+       printing to stderr
+
+2003-07-23  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Parser.C (parseMessage): use the find method of std::map
+       to find the command to call instead of [] and then extract the
+       pointer to the userFunction from that if it exists. This appears
+       to fix the crash when one uses an undefined command followed by
+       any defined command.
+
+2003-04-09  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (interp_init_helper): Bind bot:setfloodrate to
+       ScriptCommands::SetFloodRate
+
+       * source/ScriptCommands.C (SetFloodRate): New Method: SetFloodRate
+
+       * source/Bot.C (init_user_functions): Make SETFLOODRATE available
+       to bot master
+
+       * source/Bot.H: Made MAX_MESSAGES writeable
+
+       * source/UserCommands.H: New method: SetFloodRate
+
+       * source/Commands.H: New method: SetFloodRate
+
+2003-04-03  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * configure.ac: Merged all AC_OUTPUTs at the end
+
+2003-04-02  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * scripts/bobot-utils.scm: Make exported symbols from
+       the-bot-module available in the guile-user module so that scripts
+       loaded with Interp::Load function.
+
+2003-03-30  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * scripts/bobot-utils.scm (bot:load-module): Loads a file from the
+       %bot:loadpath into its own module and returns that (unnamed) module
+       (bot:use-module): Calls bot:load-module and then adds the newly
+       loaded module to the (current-module)'s use-list
+
+       * source/Interp.C (interp_init_helper): New procedure to initialize
+       the-bot-module (this is the old Interp::Startup verbatim)
+       (interp_post_startup_helper): New procedure to export
+       the-bot-module from bot_module
+       (Startup): Now calls interp_init_helper and
+       interp_post_startup_helper to initalize the bot module system
+
+       * source/Interp.H: Added private variable bot_module to Interp
+
+2002-11-04  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * scripts/bobot-utils.scm: Added bot: to regex functions (yes,
+       this breaks existing scripts, this is the unstable tree after all)
+
+2002-11-03  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Mask.C (match): Made Mask::match case insensitive
+
+2002-09-23  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (scm_apply_wrapper): turned off locking of
+       Interp::mutex to see if this makes the bot work again...and it
+       does!
+
+2002-09-07  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * configure.ac: Removed arguments to AM_INIT_AUTOMAKE and updated
+       everything to use aclocal/automake 1.6
+
+2002-08-27  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/DCCPerson.H (class DCCPerson): Added
+       UserCommands::DCCList as a friend (friends are better than the old
+       DCC() function at least).
+
+       * source/DCCManager.H (class DCCManager): Added
+       UserCommands::DCCList as a friend
+
+       * source/Interp.H (class Interp): Made function scm_apply_wrapper
+       a friend so it can lock Interp::mutex
+
+       * source/Interp.C (scm_apply_wrapper): Lock Interp::mutex if
+       MULTITHREAD is defined (it is always defined when scripting is
+       enabled) so that Sockets can be made multithreaded using
+       CommonC++.
+
+       * source/DCCPerson.H: Removed DCC method and made Bot a friend
+       Made DCCManager a friend
+
+       * source/DCCManager.H (class DCCManager): Removed MAP() method
+       and made Bot a friend of DCCManager
+
+2002-08-18  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (Startup): Renamed bot:DCC-chat-send to
+       bot:dcc-chat-send. 
+
+       * bobot++.texinfo (Hook Types): Fixed a typo (I wrote
+       user!nick@host instead of the correct nick!user@host).
+
+       * source/Interp.C (Startup): Register bot:DCC-chat-send
+
+       * source/ScriptCommands.C (sendDCCChatMessage): Added method again
+
+2002-08-08  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/String.C (String): The std::string copy constructor now
+       extracts the c_str of the std::string and then takes the strlen of
+       that before copying it. This fixes a bug with DCC where if you did
+       e.g. "!help" the bot would reply with "No TOPIC PRIVMSG FOUND" or
+       something like that, depending on what the last message was
+       because Socket will insert a \0 into its semi-static buffer, so
+       the len of the String will not equal the strlen of its char*.
+
+2002-08-07  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/DCCPerson.H: Removed destructor (I = idiot)
+
+       * source/DCCConnection.H: DCCManager is now a friend of
+       DCCConnection (ugh, the bot has way too many friends).
+
+       * source/DCCPerson.H: Added DCC member that returns a const
+       DCCConnection* (the dcc connection). This isn't saved anywhere
+       because when a DCCPerson is destroyed, its connection is also
+       destroyed.
+
+       * source/Bot.H: dccConnections is now a DCCManager
+
+       * source/DCCPerson.H: Added destructor
+       Added handleInput method
+
+       * source/DCCManager.C: New file
+       (addConnection): Wrote method, add a DCCConection to the manager
+
+       * source/DCCManager.H: New file
+
+       * source/Interp.C (Startup): Register bot:DCC-chat-send
+       (Startup): Removed sendDCCChatMessage stuff
+
+       * source/ScriptCommands.C (sendDCCChatMessage): New method:
+       sendDCCChatMessage (to, message) sends message to to.
+
+       * source/DCCConnection.C (connect): Run DCC_CHAT_BEGIN hook with
+       one arg: from (user!nick@host).
+
+       * source/DCCParser.C (parseLine): Runs DCC_CHAT_MESSAGE hook with
+       two args: from (user!nick@host) and line
+
+2002-08-06  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (Startup): Two new Scheme values:
+       hooks/dcc/chat-begin and hooks/dcc/chat-message for the
+       DCC_CHAT_BEGIN and DCC_CHAT_MESSAGE hooks.
+
+       * source/BotInterp.H: Added two new enum values to Hook:
+       DCC_CHAT_BEGIN and DCC_CHAT_MESSAGE for the DCC chat start and DCC
+       chat message hooks
+
+2002-08-05  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Parser.C (parseCTCP): Removed call to htonl and fixed
+       DCC! Ack, sockets take their arguments in network byte order so
+       there is no need to convert to host...now DCC _sort of_ works.
+
+2002-08-04  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/UserList.C (save): Increment iterator twice to get around
+       bug (see BUGS #2)
+
+       * source/ServerQueue.C: Now sends SEND_* hooks instead of
+       triggered general hooks.
+
+       * source/Interp.C (Startup): New scheme side defines: hooks/send/*
+       (* = the new SEND_ hooks, but lowercase).
+
+       * source/BotInterp.H: New hook types (SEND_..., ... = ACTION,
+       CTCP, PUBLIC, MESSAGE). These are triggered on send messages.
+
+2002-08-01  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Bot.C (set_log_file): Oops! Fixed logging. Now the bot
+       logs again.
+
+       * source/Socket.C (readLine): Now uses a static std::string that
+       starts out with 512 chars. This will never need to be resized for
+       usualy IRC messages, but might be for DCC messages
+
+2002-07-31  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * scripts/bobot-utils.scm (not-from-me): New syntax.
+
+       * source/ScriptCommands.C (AddHook): Now takes another optional
+       arg--name that will name the hook (see the hooks section in the
+       manual for what this does).
+
+       * source/BotInterp.H: Added name field to Hook
+
+2002-07-29  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/ServerQueue.C (sendPrivmsg): Now calls hooks on own
+       PRIVMSGes because the IRC server doesn't echo them back to the
+       bot. This could be useful for something (e.g. log script).
+
+2002-07-27  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (Shutdown): Runs bot:exit-hook hooks
+       (Startup): New var for Scheme: bot:exit-hook. Calls the thunks
+       associated with the hook when Interp::Shutdown is called (bot exit).
+
+2002-07-23  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/BotInterp.H (Hook<): Changed behavior of Hook's <. If a
+       hook is greater than or less than the other hook, only the
+       priority is considered. However, if both hooks have the same
+       priority, then the fallthru-ness is considered, with fallthru
+       hooks being greater than non-fallthru hooks.
+       
+       * source/BotInterp.C (hptr_lt): Added this static function to be
+       used to sort the hooks list (now hooks should be sorted using
+       Hook's operator < instead of using pointer comparision, meaning
+       the new hook system will work correctly)
+
+       * scripts/bobot-utils.scm: Make bot:log use for-each instead of
+       map because we don't need the result of the displays (this would
+       just be a list of #<undefined> values and is a waste of memory).
+
+2002-07-13  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Bot.C (Bot): userFunctions is now a map for efficiency
+       (worst case search is now NlogN instead of N). This improvement is
+       not as drastic as the one gained by making the Parser functions
+       list a map (because we don't scan this map for every message), but
+       it helps to clean up the code
+
+2002-07-12  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Parser.H: Removed userFunctionsStruct
+
+       * source/Interp.C (Startup): ScriptCommands::sendCTCP registered
+       as bot:send-CTCP for Scheme
+
+       * source/ScriptCommands.C (sendCTCP): Wrote sendCTCP
+
+2002-07-11  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/ServerQueue.C (sendUser): Changed . . in USER command to
+       0 * (which is the Right Way to because <mode> must be a number...)
+
+       * source/Parser.C (init): New method of Parse. This initalizes the
+       functions map. functions replaces the old functions array, and
+       should yield better performance (since the functions array had to
+       be scanned for every incoming message)
+
+       * source/Parser.H: New member, functions (private)
+
+2002-07-10  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Interp.C (Startup): New symbols: bot:user-*
+       [none|user|trusted|friend|master] are defined in Scheme as the
+       different levels of the users. 
+       (Startup): All bot-* variables are now bot:*
+
+2002-07-09  Clinton Ebadi  <clinton@unknownlamer.org>
+
+       * source/Bot.H: Made some variables private because they shouldn't
+       be changed at runtime
+
+       * source/Parser.C (parseCTCP): Reneabled DCC CHAT (I want to test
+       this out to see if it works and make it work)
+
+       * source/Bot.C (Bot::Bot): New var: logs_dir. Set to the log file
+       dir. 
+
+       * scripts/bobot-utils.scm: Fixed a typo (I forgot the / after
+       scripts in the user scripts dir) that made bobot++ not able to
+       load scripts from the user scripts dir
+
 2002-07-08  Clinton Ebadi  <clinton@unknownlamer.org>
 
        * source/BotInterp.C (RunHooks): Changed iterators to
 2002-07-08  Clinton Ebadi  <clinton@unknownlamer.org>
 
        * source/BotInterp.C (RunHooks): Changed iterators to
        * source/Queue.C: Didn't notice iostream.h here! Fixed
 
 
        * source/Queue.C: Didn't notice iostream.h here! Fixed
 
 
-Copyright 2002 Clinton Ebadi
+Copyright 2002,2003,2004,2005,2006,2007 Clinton Ebadi
 Copying and distribution of this file, with or without modification, are
 permitted provided the copyright notice and this notice are preserved.
 Copying and distribution of this file, with or without modification, are
 permitted provided the copyright notice and this notice are preserved.