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
	reverse_iterators because the hooks list is sorted in ascending
	order--higher priority and fallthrough hooks appear _after_ the
	lower priority and non-fallthrough hooks.

	* source/Main.C (print_long_help): Added function
	(print_short_help): Renamed from printUsage
	(namespace): Most stuff in here is now defined in an anonymouse
	namespace so it doesn't have external linkage
	(real_main): Uses getopt_long instead of getopt. Added several
	command line arguments (bobotpp --help for a full list).

	* scripts/bobot-utils.scm (bot-load): Function moved from
	bobot-scheme.scm
	
	* source/Interp.C (Startup): Autoloads
	PREFIX/bobotpp/scripts/bobot-utils.scm now
	(Startup): New Scheme variable: bot-sys-scripts-dir (system
	scripts dir)

	* source/bobot-scheme.scm.in: Removed

	* source/Makefile.am: Removed bobot-scheme.scm compiliation

	* configure.ac (PREFIX): configure.ac defined prefix now

	* source/Main.C (real_main): Default configuration is now read
	from /etc/bobotpp/default
	* source/bobot-scheme.scm.in: Added file. This defines the
	'bot-load' procedure which will load a file from
	$HOME/.bobotpp/scripts/ or @datadir@/bobotpp/scripts/ if the
	script doesn't exist in the user script dir.

2002-07-01  Clinton Ebadi  <clinton@unknownlamer.org>

	* bobot++.texinfo: Started docs (just a skeleton right now)

	* source/ScriptCommands.C (AddHook): Now takes pri and fall opt
	args to set a hooks priority and whether or not it will
	fallthrough. These args are optional.

	* source/Interp.C (Startup): addhook now takes 3 req and 2 opt args

	* source/BotInterp.C (AddHook): Now uses priority and fallthrough
	(RunHooks): exec fallthrough hooks first.

	* source/BotInterp.H: Changed Hooks to have priority
	Added fhooksMap to BotInterp (fallthrough)

	* source/UserCommands.C (AddShit): Converted to use Commands

2002-06-21  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/Commands.C (AddUser): Fixed a one-off (function call was
	before a brace instead of after one) that caused a segfault when
	the user mask was a wildcard

2002-06-20  Clinton Ebadi  <clinton@unknownlamer.org>

	* all files: Updated address of the FSF

	* source/UserCommands.C (AddUser): Uses Commands now instead of
	manipulating the bot directly

2002-06-18  Clinton Ebadi  <clinton@unknownlamer.org>

	* source/ScriptCommands.C (AddShit): Filled in function.

	* source/Interp.C (Startup): Bind bot-adduser to
	ScriptCommands::AddUser instead of Action
	(Startup): Bind bot-addshit to ScriptCommands::AddShit

	* source/ScriptCommands.C (AddUser): Filled in function

	* source/ServerList.C (delServer): Changed (n - 1) to n...n-1
	would have caused problems if you used more than one server

	* source/Parser.H: Changed const char* to String in userFunctionStruct

	* source/String.H: Added std::string compatibility members

	* configure.ac: You can now disable Crypt and scripting

	* source/*: Added #include "config.h" where needed

	* configure.ac: Added AM_CONFIG_HEADER

	* config.h.in: added file

	* source/Queue.C: Didn't notice iostream.h here! Fixed


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.
