summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorAdam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864>2010-05-02 04:37:17 +0000
committerAdam- <Adam-@5417fbe8-f217-4b02-8779-1006273d7864>2010-05-02 04:37:17 +0000
commitd002ea19526bf8e976c8b9aa9204f5c1f6b4d7f7 (patch)
treed3736014372ca68781c0fa8ded2c1d0dd6ac7890 /docs
parent05eb3fd2d675b8363ac88d4c54a63b9f13c32c70 (diff)
Moved CODING, TODO, and Changes* to docs/. Removed unused empty file install-sh.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2926 5417fbe8-f217-4b02-8779-1006273d7864
Diffstat (limited to 'docs')
-rw-r--r--docs/CODING170
-rw-r--r--docs/Changes99
-rw-r--r--docs/Changes.conf51
-rw-r--r--docs/Changes.lang251
-rw-r--r--docs/TODO80
5 files changed, 651 insertions, 0 deletions
diff --git a/docs/CODING b/docs/CODING
new file mode 100644
index 000000000..21f4fa2d2
--- /dev/null
+++ b/docs/CODING
@@ -0,0 +1,170 @@
+Orginally pulled from: http://www.inspircd.org/wiki/Coding_Guidelines
+Yes, I'm aware the formatting of this document is ugly. It'll be fixed when someone cares. Read the wiki page if you want pretty for now.
+
+---
+
+
+InspIRCd Coding Guidelines
+
+The following are a set of guidelines for writing patches to InspIRCd, or for creating modules for distribution with the official package. These
+guidelines were written a time after InspIRCd development started, and so not all code yet follows these. This will be rectified with time.
+
+
+1. Comments
+ Multi Line
+ Multiple line comments should follow the C-style comment, for example:
+ /*
+ * This is a multiple line comment, huzzah..
+ */
+
+ Single Line
+ Single line comments should also be in the C style, for example:
+ /* This is a boring one-line comment */
+
+ Doxygen commenting
+ If you wish your comment to show in doxygen, the comment should be directly above the item you are documenting (a class, function, enum, etc)
+ and the first line should be "/**". For example:
+ /** This is a doxygen multiline comment.
+ * Description of thingymebob here.
+ */
+ The first line after the "**" is used as the short description of the item (up to the full stop) and everything afterwards as the detailed
+ description.
+
+ Indentation
+ Tabs. Tabs. ONLY TABS. Use a single tab for each level of indentation, for example:
+ int main()
+ {
+ <tab>if (condition)
+ <tab>{
+ <tab><tab>code
+ <tab>}
+ }
+
+
+ Separation
+ Always put a space in between a keyword like if/while and the condition, for example:
+ if (foo == bar)
+ NOT
+ if(foo == bar)
+
+ Braces
+ Always put braces opening and closing blocks on separate lines, see the identation example. For example, place braces like this:
+ if (apples == "green")
+ {
+ cout << "Apples are green" << endl;
+ }
+
+ and not:
+ if (apples == "green") {
+ cout << "Apples are green" << endl;
+ }
+ The one exception to this is if you are declaring a class method which is only one line long, in that case the following is acceptable in most cases:
+ class foo : public bar
+ {
+ foo() { }
+ getrandomfoo() { return rand(); }
+ };
+
+ Templates
+ Where possible, use templates rather than #defines. Avoid use of RTTI.
+ Structs
+ Structs should be declared in the following fashion:
+ struct BodyPartBasket
+ {
+ int arms;
+ int legs;
+ int scrotalsacs;
+ };
+ and not like this:
+ typedef struct
+ {
+ int arms;
+ int legs;
+ int scrotalsacs;
+ } BodyPartBasket;
+ The second way is not required in C++ to be able to do this:
+ BodyPartBasket mybasket;
+ Plus, placing the name at the bottom of the declaration makes readability more difficult (as you have to scroll down to the bottom of the
+ struct to find its name).
+ (where possible, call them classes rather than structs.)
+
+ Variable naming
+ Class and struct names should be in camel case with a leading capital letter, for example "MyBagOfBones" and not "my_bag_of_bones" or
+ "mybagofbones". Variable names can be in either camel case with a leading capital letter or alternatively all lower case, so long as the same
+ naming convention is adhered to throughout the class. No classes or variables should be named in capitals unless this makes sense for the
+ name (for example "class DNS"). Constants and enum values should always be completely in CAPITALS and underscores may be used, for example:
+ enum DecayState
+ {
+ DECAYED_MOULDY = 0,
+ DECAYED_SMELLY = 1,
+ DECAYED_MAGGOTS = 2
+ };
+ All value names in an enum should be started with the same text which should be related in some way to the enum's use. For example "DNS_CNAME,
+ DNS_A, DNS_AAAA".
+
+ Use of references
+ Wherever possible, when dealing with any complex class, pass a const reference rather than a copy of the class. For example:
+ MyThingy::MyThingy(const std::string &thingyvalue)
+ {
+ }
+ Of course, if you intended to change the string you can just omit the 'const'.
+
+ Use of char pointers
+ Whenever you use char pointers (char*, char**) try to use const equivalents. This is much safer and avoids ugly and dangerous casts. For example:
+ MyThingy::Thingify(const char* const* wotsits)
+ {
+ }
+ If it is possible without performance loss, consider avoiding char pointers altogether and using std::string instead.
+
+ Use of STL
+ For more information on use of STL in InspIRCd, please see the separate STL FAQ.
+
+ Making copies of data
+ Never ever make a copy of a piece of data unless it is absolutely necessary. For example, don't use strlcpy() to make a copy of the const char* string
+ returned by std::string::c_str(), if the change can be done to the std::string itself. The same goes for unnecessary variable assignments, especially
+ those which assign large classes.
+
+ namespace std
+ Avoid the following:
+ using namespace std;
+ It might take a bit more typing, but things work better if you don't set (then later assume) the namespace -- specify it explicitly when you want to
+ use it.
+
+ Linefeeds
+ Unix linefeeds only please. We do not like to see our screens covered in ^M. :-)
+
+ Portability
+ Always make sure your code is portable to all supported operating systems, remember of course that as of 1.1.8 this includes windows. Don't write code
+ that only works on windows, or only works on Linux. Test your code on all platforms or ask for help from other developers who have the platforms you
+ want to test on.
+
+ new() and delete(), malloc() and free()
+ Apart from the fact that using malloc() and free() is bad practice in C++ code, you must never use malloc() or free() in InspIRCd, within its modules
+ or within the core. This is because if you use malloc() or free() in windows, the memory is claimed from the program's local heap. In windows, each
+ shared object (module, dll) has its own heap, which is protected from other dlls and executables. To get around this issue and allow more posix-like
+ memory access from other dlls in the program (other modules), InspIRCd overrides the operators new and delete to ensure that memory allocated by them
+ comes from the windows global heap. If you use malloc() and free() for this, the ircd will segfault when another module tries to access the memory you
+ have allocated!
+
+ strdup()
+ As with malloc(), above, strdup() should be avoided. Where strdup() is absolutely necessary, use strnewdup() which is our strdup() implementation that
+ calls operator new instead of using malloc(). char arrays allocated by strnewdup() should be deleted with operator delete[].
+
+ CoreExport and DllImport
+ Prefix all types you want to import or export to other modules with CoreExport and DllImport macros. These do nothing in POSIX operating systems,
+ however in windows these are expanded to the instructions __declspec(dllimport) and __declspec(dllexport) respectively depending on where they are
+ used and how.
+
+ External Dependencies
+ If a module is compiled as standard, or the code is part of the core, you must not use any dependencies that are not available as standard on all
+ supported operating systems beyond libstdc++, libc, and whatever else is currently required to build the core. Modules which use nonstandard
+ dependencies belong in the modules/extra directory.
+
+ Profiling and Performance
+ It is one thing to assume that code performs bad, it is another thing to prove that it actually is. A lot of experienced programmers talk about
+ 'premature optimisation', and here is what it means: if you have a piece of code called once on startup that takes 10 seconds instead of one second to
+ run, and a piece of code that takes 0.05 seconds to run when it should take 0.01, and it is called once per second, the second piece of code is the
+ priority.
+ In other words, make sure that what you think is slow, and a performance problem in Insp actually is.
+ To do this, use the callgrind tool from Valgrind (valgrind --tool=cachegrind bin/inspircd -nofork -debug), and kcachegrind (or similar) to view the
+ output files.
diff --git a/docs/Changes b/docs/Changes
new file mode 100644
index 000000000..d73c1c190
--- /dev/null
+++ b/docs/Changes
@@ -0,0 +1,99 @@
+Anope Version 1.9.2
+--------------------
+A K alias to chanserv kick command
+A KB alias to chanserv ban command
+A The ability to register empty nonregistered channels
+A Flatfile plaintext databases and removed old binary ones
+A Added in live updating SQL and the ability to execute commands through SQL (see docs/MYSQL)
+A Added support for many more modes into Anope and the ability to have generic support for modes unknown to Anope
+A Added a mode stacker to combine many mode changes into fewer
+A Added in the CS SET PERSIST command which can be used to keep service bots in channels even when the channel is empty
+A Added AUTOOWNER OWNER and OWNERME into CS LEVELS
+A Added ns_resetpass module to the core
+A CS ACCESS VIEW which shows who added the access and last time used
+A Last used time to CS AKICK VIEW
+A Added a sha_256 encryption module
+A Added the ability to load multiple encryption modules, and the ability to seamlessly convert your database between diferent encryptions
+A Added configuration options to allow Anope to reconnect if it disconnects from the uplink instead of dieing
+A Added support for linking with IPv6
+F Unban command to accept an optional nick arg
+F Some typos in services.conf
+F Crash when users change their host that are identified to a group, but not a nick
+F Host length checking in HS SET(ALL) and HS REQUEST
+F Only show if a user is online in NS INFO if they are really identiifed for the group of the nick they are on
+F Crash when using BSSmartJoin
+F Converting access entries to access from xop when a users access is below voice
+F A bad pointer passed to the OnDelEvent which could cause some 3rd party modules to crash
+F CS FORBID allows to you forbid unregistered channels
+F The -nothird command line option to work
+F ms_rsend to really work
+
+Anope Version 1.9.1
+--------------------
+F Don't enforce akick/forbidden/etc.-restrictions on clients on ulined servers.
+F Remove modules_unload_all fini + hack that goes with it.
+F Signal handling cleanup.
+A Seamless fantasy support on all ChanServ commands, instead of requiring bs_fantasy_*.
+F Allow fantasy to be disabled on some commands (e.g. FORBID).
+F Some commands (e.g. !help) need to strip the pre-provided channelname from them.
+D HelpServ removed
+F Command parser cleanup: mod_current_buffer removed and replaced with proper parser. Commands now indicate how they want the buffer split.
+F Make NS ENFORCE/RELEASE stuff more sane, redo timers.
+A Opertypes (similar to InspIRCd's opertypes)
+
+Provided by Ankit <ankit@nevitus.com> - 2009
+F Segfault on shutdown
+
+Provided by Adam <adam@anope.org> - 2009
+F NickServ registration is sometimes denied.
+F Applied patch from Adam to fix some potential screwups
+F More fixes to bs_bot from Adam, plus an extra fix within DoAdd not covered in Adam's patch.
+F Fix bs_bot to use the correct parameters, patch from Adam.
+F Fix for bug #1004, based from second half of patch from Adam.
+F Partial patch by Adam, commenting fix for #1006 for future reference.
+F Forward-port r1946: Patch by Adam fixing #1006 (originally caused by #922): modes set by ChanServ are reversed. Thanks!
+
+Provided by DukePyrolator <dukepyrolator@gmx.de> - 2009
+F Patch converting all match calls to new method, thanks!
+F Add 'w' and 'y' support to dotime(), also prevent an overflow.
+F Allow NS STATUS from unregistered users, thanks DP!
+F Wild pointers do not a happy Anope make. Thanks DP :)
+F Allow NS REGISTER to unregistered nicks, silly oversight. Thanks DP! :)
+F Fix call order, thanks to DP
+F Pass the right array to do_umode(), fixes mode tracking on Unreal. Thanks to DukePyrolator (yet again :P)
+F Fix bs_set help, thanks to DukePyrolator! :)
+F Fix two segfaults, noted by DukePyrolator. Thanks!
+F Fix part one of #1010, reported by DukePyrolator. (Language settings are not respected in message sending.) Thanks!
+F Memory leak on +beI modes.
+
+Provided by Liber <Liber@jasonirc.net> - 2009
+F Support operoverride and such things (stop reversing changes from nonopped people where unnecessary)
+
+Anope Version 1.9.0
+--------------------
+F Modified compile to use g++
+F Improve protocol modules support (classes, virtual methods, etc)
+F Move core services to use BotInfo
+F Move BotInfo and related methods into a class
+F Move modules into a class
+F Fixed ns resending of passcode issue
+F Modules now delete themselves
+F additional field where users' masked host can be stored so both masked IP and vhost are available instead of just one.
+F No struct Uid, ugly, and, unnecessary that we store UID in BotInfo.
+F Prevent deletion of core services via /bs bot
+F Module subsystem cleanup ('modules' branch)
+F Move modules to use classes somewhat (AnopeInit, AnopeFini)
+F Change MODULE_INIT to return a pointer
+F Remove duplicate module creation.. have loadModule return a pointer rather than creating one
+F Remove buffered loading/unloading, this makes os_modunload perm, but who cares
+F Remove 'delayed' loading, this is necessary because of before/after connected to ircd (ircd is before, rest after), I'm sure this can be done better.
+A Remove old config, replace with insp-inspired (albeit bind format) config (CBX)
+F Clean up protocol modules a bit
+A InspIRCd 1.2 support
+F Remove old (prior to 1.8.0) db compat
+F Establish a proper base for services pseudoclients
+F Add ss_main StatServ Hal9000 to play with :)
+F Burn automake with fire (CBX)
+
+Provided by mooncup <mooncup@anonnet.org> - 2009
+F Automatically reapply vhost on hs off for unreal.
diff --git a/docs/Changes.conf b/docs/Changes.conf
new file mode 100644
index 000000000..c25bbe80a
--- /dev/null
+++ b/docs/Changes.conf
@@ -0,0 +1,51 @@
+Anope Version 1.9.2
+--------------------
+** ADDED CONFIGURATION DIRECTIVES **
+options:enablelogchannel added to auto turn on the logchannel on startup
+options:mlock added to configure the default mlock modes on new channels
+options:database added for the database modules
+options:botmodes added to configure modes BotServ bots should use
+options:userlen added to configure maxiumum ident length
+options:hostlen added to configure maximum hostname length
+options:database added to configure what database modules to use
+options:passlen added to specify the maximum length of passwords
+uplink:ipv6 added to enable IPv6 connectivity
+options:maxretries added to specify the number of reconnect attempts allowed
+options:retrywait added to specify how long to wait between reconnect attempts
+
+** MODIFIED CONFIGURATION DIRECTIVES **
+options:encryption added enc_sha256
+chanserv:modules added cs_unban
+nickserv:modules added ns_resetpass
+
+** DELETED CONFIGURATION DIRECTIVES **
+nickserv:database deleted because of new database system
+nickserv:prenickdatabase deleted because of new database system
+chanserv:database deleted because of the new database system
+botserv:database deleted because of the new database system
+hostserv:database deleted because of the new database system
+operserv:database deleted because of the new database system
+operserv:newsdatabase deleted because of the new database system
+operserv:exceptiondatabase deleted because of the new database system
+hs_request:database deleted because of the new database system
+os_ignore:database deleted because of the new database system
+serverinfo:localport deleted
+
+Anope Version 1.9.1
+-------------------
+** ADDED CONFIGURATION DIRECTIVES **
+Opertypes have been added, through the opertype blocks.
+Services Operators are now specified in the oper blocks.
+
+** MODIFIED CONFIGURATION DIRECTIVES **
+botserv:modules no longer contains bs_fantasy* modules, fantasy is now seamless.
+operserv:modules has replaced os_logonnews, os_opernews, and os_randomnews with os_news.
+operserv:modules no longer contains os_admin and os_oper modules, removed in favor of oper blocks.
+operserv:notifications no longer contains osraw due to removal of OS RAW.
+
+** DELETED CONFIGURATION DIRECTIVES **
+Nick tracking has been removed as an option.
+Restricting of NS GETPASS and CS GETPASS removed in favor of opertypes.
+Host Setters were removed in favor of opertypes.
+HelpServ has been removed entirely.
+operserv:disableraw removed due to removal of OS RAW.
diff --git a/docs/Changes.lang b/docs/Changes.lang
new file mode 100644
index 000000000..32f3cd243
--- /dev/null
+++ b/docs/Changes.lang
@@ -0,0 +1,251 @@
+Anope Version 1.9.2
+--------------------
+*** New Strings:
+ CHAN_INVITE_OTHER_SUCCESS
+ NICK_HELP_CONFIRM_OPER
+ CHAN_QOP_DISABLED
+ CHAN_QOP_NICKS_ONLY
+ CHAN_QOP_ADDED
+ CHAN_QOP_MOVED
+ CHAN_QOP_NO_SUCH_ENTRY
+ CHAN_QOP_NOT_FOUND
+ CHAN_QOP_DELETED
+ CHAN_QOP_DELETED_ONE
+ CHAN_QOP_DELETED_SEVERAL
+ CHAN_QOP_LIST_EMPTY
+ CHAN_QOP_LIST_HEADER
+ CHAN_QOP_CLEAR
+ CHAN_HELP_QOP
+ CHAN_QOP_SYNTAX
+ CHAN_HELP_CMD_QOP
+ CHAN_HELP_SET_PASSWORD
+ CHAN_LEVEL_AUTOOWNER
+ CHAN_LEVEL_OWNER
+ CHAN_LEVEL_OWNERME
+ CHAN_ACCESS_VIEW_XOP_FORMAT
+ CHAN_ACCESS_VIEW_AXS_FORMAT
+ CHAN_SET_PERSIST_SYNTAX
+ CHAN_SET_PERSIST_ON
+ CHAN_SET_PERSIST_OFF
+ CHAN_INFO_OPT_PERSIST
+ BOT_UNASSIGN_PERSISTANT_CHAN
+ CHAN_HELP_SET_PERSIST
+ NICK_RESETPASS_SYNTAX
+ NICK_RESETPASS_SUBJECT
+ NICK_RESETPASS_MESSAGE
+ NICK_RESETPASS_COMPLETE
+ NICK_CONFIRM_EXPIRED
+ NICK_CONFIRM_SUCCESS
+ NICK_HELP_CMD_RESETPASS
+ NICK_HELP_RESETPASS
+ CHAN_UNBANNED_OTHER
+ OPER_HELP_SYNC
+ OPER_HELP_CMD_SQLSYNC
+ OPER_SYNC_UPDATING
+ OPER_SYNC_UPDATED
+
+*** Mod Strings:
+ CHAN_HELP_SET
+ CHAN_REGISTER_SYNTAX
+ CHAN_ACCESS_SYNTAX
+ CHAN_HELP_ACCESS
+ CHAN_HELP_SET
+ NICK_HELP_CONFIRM
+ CHAN_UNBAN_SYNTAX
+ CHAN_HELP_CMD_UNBAN
+ CHAN_HELP_UNBAN
+
+*** Del Strings:
+ CHAN_PASSWORD_IS
+ CHAN_SET_PASSWORD_FAILED
+ CHAN_PASSWORD_CHANGED
+ CHAN_IDENTIFY_SUCCEEDED
+ CHAN_IDENTIFY_FAILED
+ CHAN_HELP_IDENTIFY
+ CHAN_IDENTIFY_SYNTAX
+ CHAN_HELP_CMD_IDENTIFY
+ CHAN_LOGOUT_FOUNDER_FAILED
+ CHAN_LOGOUT_SUCCEDED
+ CHAN_LOGOUT_NOT_LOGGEDIN
+ CHAN_LOGOUT_ALL_SUCCEEDED
+ CHAN_SERVADMIN_HELP_LOGOUT
+ CHAN_HELP_LOGOUT
+ CHAN_LOGOUT_SERVADMIN_SYNTAX
+ CHAN_LOGOUT_SYNTAX
+ CHAN_HELP_CMD_LOGOUT
+ CHAN_GETPASS_UNAVAILABLE
+ CHAN_GETPASSWORD_IS
+ CHAN_SERVADMIN_HELP_GETPASS
+ CHAN_GETPASS_SYNTAX
+ CHAN_HELP_CMD_GETPASS
+ CHAN_SENDPASS_SUBJECT
+ CHAN_SENDPASS_HEAD
+ CHAN_SENDPASS_LINE_1
+ CHAN_SENDPASS_LINE_2
+ CHAN_SENDPASS_LINE_3
+ CHAN_SENDPASS_LINE_4
+ CHAN_SENDPASS_LINE_5
+ CHAN_SENDPASS_OK
+ CHAN_SENDPASS_UNAVAILABLE
+ CHAN_HELP_SENDPASS
+ CHAN_SENDPASS_SYNTAX
+ CHAN_HELP_CMD_SENDPASS
+ OPER_DEFCON_NO_CONF
+
+Anope Version 1.9.1
+--------------------
+*** New Strings:
+ COMMAND_REQUIRES_PERM
+ COMMAND_IDENTIFY_REQUIRED
+ COMMAND_CANNOT_USE
+ COMMAND_CAN_USE
+ NICK_STATUS_REPLY
+ NICK_INFO_SERVICES_OPERTYPE
+ CHAN_LOGOUT_NOT_LOGGEDIN
+ CHAN_INVITE_ALREADY_IN
+ CHAN_INVITE_SUCCESS
+ CHAN_OP_SYNTAX
+ CHAN_HALFOP_SYNTAX
+ CHAN_VOICE_SYNTAX
+ CHAN_PROTECT_SYNTAX
+ CHAN_OWNER_SYNTAX
+ CHAN_DEOP_SYNTAX
+ CHAN_DEHALFOP_SYNTAX
+ CHAN_DEVOICE_SYNTAX
+ CHAN_DEPROTECT_SYNTAX
+ CHAN_DEOWNER_SYNTAX
+ CHAN_KICK_SYNTAX
+ CHAN_BAN_SYNTAX
+ MEMO_STAFF_SYNTAX
+ OPER_JUPE_INVALID_SERVER
+
+*** Mod Strings:
+ NICK_LOGOUT_SERVICESADMIN
+ CHAN_STATUS_SYNTAX
+ CHAN_GETKEY_KEY
+ MEMO_SET_NOTIFY_SYNTAX
+ BOT_REASON_BADWORD
+ BOT_BOTLIST_EMPTY
+ OPER_IGNORE_SYNTAX
+ OPER_DEFCON_SYNTAX
+ OPER_HELP_EXCEPTION
+ OPER_HELP_SESSION
+ NEWS_LOGON_SYNTAX
+ NEWS_OPER_SYNTAX
+ NEWS_RANDOM_SYNTAX
+ NEWS_HELP_LOGON
+ NEWS_HELP_OPER
+ NEWS_HELP_RANDOM
+ NICK_HELP_STATUS
+ NICK_HELP_SENDPASS
+ NICK_SERVADMIN_HELP
+ NICK_SERVADMIN_HELP_LOGOUT
+ NICK_SERVADMIN_HELP_DROP
+ NICK_SERVADMIN_HELP_INFO
+ NICK_SERVADMIN_HELP_LIST
+ NICK_SERVADMIN_HELP_ALIST
+ NICK_SERVADMIN_HELP_GLIST
+ CHAN_HELP_SET_RESTRICTED
+ CHAN_HELP_OP
+ CHAN_HELP_DEOP
+ CHAN_HELP_VOICE
+ CHAN_HELP_DEVOICE
+ CHAN_HELP_HALFOP
+ CHAN_HELP_DEHALFOP
+ CHAN_HELP_PROTECT
+ CHAN_HELP_DEPROTECT
+ CHAN_HELP_OWNER
+ CHAN_HELP_DEOWNER
+ CHAN_HELP_KICK
+ CHAN_HELP_CLEAR
+ CHAN_HELP_GETKEY
+ CHAN_HELP_SENDPASS
+ CHAN_SERVADMIN_HELP
+ CHAN_SERVADMIN_HELP_LOGOUT
+ CHAN_SERVADMIN_HELP_DROP
+ CHAN_SERVADMIN_HELP_SET
+ CHAN_SERVADMIN_HELP_INFO
+ CHAN_SERVADMIN_HELP_LIST
+ MEMO_HELP_SET_NOTIFY
+ MEMO_HELP_STAFF
+ OPER_HELP_CMD_CHANKILL
+ OPER_HELP_STATS
+ OPER_HELP_IGNORE
+ OPER_HELP_UMODE
+ OPER_HELP_ULINE
+ OPER_HELP_SVSNICK
+ OPER_HELP_SET
+ BOT_HELP
+ BOT_SERVADMIN_HELP_BOT
+ BOT_SERVADMIN_HELP_SET
+ HOST_DELALL_SYNTAX
+ HOST_SET_SYNTAX
+ HOST_SETALL_SYNTAX
+ HOST_DEL_SYNTAX
+
+*** Del Strings:
+ PERMISSION_DENIED
+ RAW_DISABLED
+ HELP_LIMIT_SERV_OPER
+ HELP_LIMIT_SERV_ADMIN
+ HELP_LIMIT_SERV_ROOT
+ HELP_LIMIT_IRC_OPER
+ HELP_LIMIT_HOST_SETTER
+ HELP_LIMIT_HOST_REMOVER
+ NICK_STATUS_0
+ NICK_STATUS_1
+ NICK_STATUS_2
+ NICK_STATUS_3
+ NICK_INFO_SERVICES_OPER
+ NICK_INFO_SERVICES_ADMIN
+ NICK_INFO_SERVICES_ROOT
+ CHAN_MUST_REGISTER_NICK
+ CHAN_MUST_IDENTIFY_NICK
+ OPER_ADMIN_SYNTAX
+ OPER_ADMIN_SKELETON
+ OPER_ADMIN_EXISTS
+ OPER_ADMIN_REACHED_LIMIT
+ OPER_ADMIN_ADDED
+ OPER_ADMIN_NOT_FOUND
+ OPER_ADMIN_NO_MATCH
+ OPER_ADMIN_DELETED
+ OPER_ADMIN_DELETED_ONE
+ OPER_ADMIN_DELETED_SEVERAL
+ OPER_ADMIN_LIST_EMPTY
+ OPER_ADMIN_LIST_HEADER
+ OPER_ADMIN_LIST_FORMAT
+ OPER_ADMIN_CLEAR
+ OPER_ADMIN_MOVED
+ OPER_OPER_SYNTAX
+ OPER_OPER_SKELETON
+ OPER_OPER_EXISTS
+ OPER_OPER_REACHED_LIMIT
+ OPER_OPER_ADDED
+ OPER_OPER_NOT_FOUND
+ OPER_OPER_NO_MATCH
+ OPER_OPER_DELETED
+ OPER_OPER_DELETED_ONE
+ OPER_OPER_DELETED_SEVERAL
+ OPER_OPER_LIST_EMPTY
+ OPER_OPER_LIST_HEADER
+ OPER_OPER_LIST_FORMAT
+ OPER_OPER_CLEAR
+ OPER_OPER_MOVED
+ OPER_SET_SQL_ON
+ OPER_SET_SQL_OFF
+ OPER_SET_SQL_ERROR
+ OPER_SET_SQL_ERROR_INIT
+ OPER_SET_SQL_ERROR_DISABLED
+ OPER_RAW_SYNTAX
+ HELP_HELP
+ HELP_HELP_BOT
+ HELP_HELP_HOST
+ OPER_HELP_CMD_OPER
+ OPER_HELP_CMD_ADMIN
+ OPER_HELP_OPER
+ OPER_HELP_ADMIN
+ OPER_HELP_SET_SQL
+ OPER_HELP_RAW
+ HOST_ID
+ HOST_NOT_REGGED
+ HOST_OFF_UNREAL
diff --git a/docs/TODO b/docs/TODO
new file mode 100644
index 000000000..8fb8a8b3a
--- /dev/null
+++ b/docs/TODO
@@ -0,0 +1,80 @@
+Legend:
+ x = done
+ ? = unsure
+ + = in progress
+
+1.9.2
+-----
+[x] Redo database insanity.
+ [x] Move database load/save to a module
+ [x] realtime SQL/whatever module using events (possibly ongoing)
+ [x] flatfile save on a periodic timer
+ [x] SANE password encryption - prefix password with the method it was encrypted with, allowing for *seamless* upgrading to different methods
+ [x] Salted SHA256 (contact Special for this)
+ [x] New database format (text, not binary - works very well for merging and so on)
+[x] generic database routines modules can use to create their own database
+[?] IRCd capability support: don't rely on CAPAB, provide an interface to turn capabilities on specifically
+[x] Socket subsystem needs some serious loving
+ [x] Multiple sockets
+ [x] Asynchronous, using select() (multiple engines? not really needed..)
+ [x] Callbacks, event style, see also inspircd
+[x] generic way to check which modes a user has set (u->HasUmode(UMODE_OPER))
+[x] way for one module to depend on another... not like 2 MOD_HEADs and it being unpredictable which is loaded first..
+ the MOD_HEAD MOD_TAIL allows for too few combinations (interface code of insp, hooks code of insp?)
+[x] Last used time on AKICK/access entries
+[x] Channel passwords seem to be of limited use, think of a more appropriate way to handle this
+[+] General options block, ability to turn LOGCHAN on from the config file..
+[x] Docs directory cleanup
+[x] Fix permanent channels support properly
+[x] CS SET INHABIT to keep pseudoclient in a channel after it empties to maintain banlists and such
+[x] Set forbidden channels +s
+[x] SendAkill should just take a pointer to the Akill class instead of millions of fields (same for some other stuff)
+[x] burn do_sjoin with fire
+[x] Channel access additions
+ [x] Setter
+ [x] Last used
+
+Future
+------
+[ ] Asynchronous DNS
+[ ] CIDR Akills, session exceptions, etc
+[ ] Hashing system for storing just about everything needs to die
+[ ] Move a (lot) of stuff to class members as a defined interface rather than copypasta everywhere (ns_set, ns_saset!)
+[?] Remote identification (1.9.1? will this break stuff?)
+[ ] Language charset stuff, including collation (1.9.1? phoenix?)
+[ ] Add support for +k, +q, etc type umodes
+[ ] fantasy: allow replies/notifications to fantasy commands to go to the channel via notice
+[?] a way for a module to queue itself (or even another module) for unloading
+[ ] Language system is disgusting, it must die.
+ [ ] Modules should also have a way to add strings programatically
+ [ ] Should be able to add many strings by dropping a file in a set location.
+ [ ] I forsee this working via a function rather than defines, as it seems to do now: e.g. _("NS_NICK_IS_REGISTERED").
+[?] Update help to reflect the fact /msg memoserv set notify mail - works just fine ;)
+[ ] Useful/common "third party" modules to core distro
+ [ ] NS AJOIN
+[+] Method to store listmodes (more generically than AKICK, too) for e.g. +beI and extbans, etc.
+[ ] Channel access additions
+ [ ] Time added
+ [ ] Time modified
+ [ ] Expiry (useful?)
+[ ] NS INFO: seperate field for last seen realhost, shown to SRA only
+[ ] NS SUSPEND: show suspender and reason, probably to sopers only (see CS SUSPEND)
+[ ] Merge NS INFO blah ALL with NS INFO blah, if you're requesting info, you really want the info anyway.
+[?] Don't allow soper accounts to expire
+[?] Reason for CS SET RESTRICTED
+[ ] NS IDENTIFY changes
+ [?] Last failed identify? Maybe more useful for sopers only, so users don't get unnecessarily worried
+ [?] Last successful login time/ip? perhaps both of these should be a new nick setting
+[x] AKILL/SGLINE/etc..
+ [x] Setter
+ [x] Time added
+ [+] Time modified (can they be modified?)
+ [ ] Time until expiry/expiry time (YES, time until expiry *instead of* expiry time, more human)
+ [x] Reason
+ [ ] Unique IDs on each AKILL/blah so that networks may use them as ticket IDs
+[ ] HS ACTIVATE -ALL (rob sez this all needs reviewing)
+[?] NS MARK, CS MARK. Allow multiple marks. Combine into OS MARK? (AKA os_info)
+[?] MS IGNORE. Make it take nick (accounts) or n!u@h masks. Fake success of memo send still, but send to opers?
+[?] More "friendly" date displays of some things like registration time ("November 7th 2006 (2 years, 0 months, 0 days ago)")
+[?] OS INJECT
+[?] Drop CS SET ENTRYMSG, replace with a 'news' type system? (limited to a configured number of items, default 3)