Updated exit codes as constant values

Re-allocated exit status codes according to three references, which follow:

BSD sysexits.h:http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=sysexits
GNU recomendations:http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html
Bash scripting:http://tldp.org/LDP/abs/html/exitcodes.html

The GNU recommendations stem from and expand upon the standard C/C++ library (stdlibc)
definitions, while also suggesting some best-practice conventions which happen to prevent
exit status code collisions with bash, and probably other shells.

The re-allocated codes are now mapped to constant values, set in *application/config/constants.php*,
and used throughout the CodeIgniter core.  They would additionally be used in *index.php*,
but the constants file hasn't been loaded at that point, so the integer values are used
instead, and a comment follows each such use with amplifying information on why that
particular value was selected.

Finally, the errors documentation has been updated accordingly.

Signed-off-by: Daniel Hunsaker <danhunsaker@gmail.com>
diff --git a/application/config/constants.php b/application/config/constants.php
index 58264ed..32a7159 100644
--- a/application/config/constants.php
+++ b/application/config/constants.php
@@ -73,6 +73,116 @@
 */
 define('SHOW_DEBUG_BACKTRACE', TRUE);
 
+/*
+|--------------------------------------------------------------------------
+| Exit Status Codes
+|--------------------------------------------------------------------------
+|
+| Used to indicate the conditions under which the script is exit()ing.
+| While there is no universal standard for error codes, there are some
+| broad conventions.  Three such conventions are presented below, for
+| those who wish to make use of them.  The CodeIgniter defaults were 
+| chosen for the least overlap with these conventions, while still
+| leaving room for others to be defined in future versions and user
+| applications.  The CodeIgniter values are defined last so you can 
+| set them to values used by any of the other conventions, and do so 
+| by name instead of value.
+|
+*/
+
+/*
+ * standard C/C++ library (stdlibc):
+ */
+/*
+define('LIBC_EXIT_SUCCESS', 0);
+define('LIBC_EXIT_FAILURE', 1); // generic errors
+*/
+
+/* 
+ * BSD sysexits.h 
+ */
+/*
+define('SYS_EX_OK', 0); // successful termination
+define('SYS_EX_USAGE', 64); // command line usage error
+define('SYS_EX_DATAERR', 65); // data format error
+define('SYS_EX_NOINPUT', 66); // cannot open input
+define('SYS_EX_NOUSER', 67); // specified user unknown
+define('SYS_EX_NOHOST', 68); // specified host name unknown
+define('SYS_EX_UNAVAILABLE', 69); // service unavailable
+define('SYS_EX_SOFTWARE', 70); // internal software error
+define('SYS_EX_OSERR', 71); // system error (e.g., can't fork)
+define('SYS_EX_OSFILE', 72); // critical OS file missing
+define('SYS_EX_CANTCREAT', 73); // can't create (user) output file
+define('SYS_EX_IOERR', 74); // input/output error
+define('SYS_EX_TEMPFAIL', 75); // temporary failure; user is invited to retry
+define('SYS_EX_PROTOCOL', 76); // remote error in protocol
+define('SYS_EX_NOPERM', 77); // permission denied
+define('SYS_EX_CONFIG', 78); // configuration error
+*/
+
+/*
+ * Bash scripting 
+ */
+/*
+define('BASH_EXIT_SUCCESS', 0);
+define('BASH_EXIT_ERROR', 1);
+define('BASH_EXIT_BUILTIN_MISUSE', 2);
+define('BASH_EXIT_CANT_EXEC', 126);
+define('BASH_EXIT_CMD_NOT_FOUND', 127);
+define('BASH_EXIT_INVALID_EXIT', 128);
+define('BASH_EXIT_SIG_HUP', 129);
+define('BASH_EXIT_SIG_INT', 130);
+define('BASH_EXIT_SIG_QUIT', 131);
+define('BASH_EXIT_SIG_ILL', 132);
+define('BASH_EXIT_SIG_TRAP', 133);
+define('BASH_EXIT_SIG_ABRT', 134);
+define('BASH_EXIT_SIG_BUS', 135);
+define('BASH_EXIT_SIG_FPE', 136);
+define('BASH_EXIT_SIG_KILL', 137);
+define('BASH_EXIT_SIG_USR1', 138);
+define('BASH_EXIT_SIG_SEGV', 139);
+define('BASH_EXIT_SIG_USR2', 140);
+define('BASH_EXIT_SIG_PIPE', 141);
+define('BASH_EXIT_SIG_ALRM', 142);
+define('BASH_EXIT_SIG_TERM', 143);
+define('BASH_EXIT_SIG_STKFLT', 144);
+define('BASH_EXIT_SIG_CHLD', 145);
+define('BASH_EXIT_SIG_CONT', 146);
+define('BASH_EXIT_SIG_STOP', 147);
+define('BASH_EXIT_SIG_TSTP', 148);
+define('BASH_EXIT_SIG_TTIN', 149);
+define('BASH_EXIT_SIG_TTOU', 150);
+define('BASH_EXIT_SIG_URG', 151);
+define('BASH_EXIT_SIG_XCPU', 152);
+define('BASH_EXIT_SIG_XFSZ', 153);
+define('BASH_EXIT_SIG_VTALRM', 154);
+define('BASH_EXIT_SIG_PROF', 155);
+define('BASH_EXIT_SIG_WINCH', 156);
+define('BASH_EXIT_SIG_IO', 157);
+define('BASH_EXIT_SIG_PWR', 158);
+define('BASH_EXIT_SIG_SYS', 159);
+*/
+/*
+ * BASH_EXIT_OUTOFRANGE would be 255, and mean an exit status code beyond 
+ * the range of 0-255 was given.  However, this code CANNOT BE USED IN PHP,
+ * so it isn't actually defined, even in a comment.
+ */
+
+/*
+ * CodeIgniter defaults
+ */
+define('EXIT_SUCCESS', 0); // no errors
+define('EXIT_FAILURE', 1); // generic error
+define('EXIT_CONFIG', 3); // configuration error
+define('EXIT_404', 4); // file not found; convenience value
+define('EXIT_UNK_FILE', 4); // file not found
+define('EXIT_UNK_CLASS', 5); // unknown class
+define('EXIT_UNK_MEMBER', 6); // unknown class member
+define('EXIT_USER_INPUT', 7); // invalid user input
+define('EXIT_DATABASE', 8); // database error
+define('EXIT__AUTO_MIN', 9); // lowest automatically-assigned error code
+define('EXIT__AUTO_MAX', 125); // highest automatically-assigned error code
+ 
 
 /* End of file constants.php */
 /* Location: ./application/config/constants.php */
\ No newline at end of file