EPIC5 Projects, Bugs, and other Errata:

KNOWN ERRATA (eg, bugs, or unresolved requests):
------------------------------------------------
* Permit /load'ing a directory, complete with /set load_path changes
* Observe whether the errors reported by the newio2 system are adequate.
* Nullie wants a way to do themed sends, such that
	/ctcp ...   is themed, and /^ctcp .. is unthemed
* Larne wants me to figure out if i can support 256-color xterm
* Using screen's hardware status bar causes a race condition where screen
  can report the wrong geometry, causing epic to screw up the status bar
  placement (the status bar ends up in the input bar)
* Nullie reports that resizing display to 1x1 then back again screws up.
* Investigate suitability of http://miniupnp.free.fr/
* Rain says we need to turn off IXOFF as well as IXON
* Because of call to new_normalize_string (input.c:271), input prompt can
  never truly be "null" so all code that special cases that is bogus.  Decide
  whether this call is bogus for no input prompt, or whether all code that
  special cases null prompt is bogus.

LOOK FOR IN THE FUTURE
-----------------------
* send_text() needs rework, to add extra /on's so you can flag those special. 
* Lastlog improvements (unified lastlog, refnums, moving between windows, etc)
* Shattah would like something like /window omit <regex> to remove stuff.
* Import utf8 support from ircII OR add support for utf16 (wide chars)
* Import fg/bg color support from ircII
* Cache what files can be /loaded in a hash
* Support loading through ZIP files.
* Some way to call an alias in a variable indirectly
* Output rules
* Support for CNOTICE
* /CTCPs over /DCCs don't match up with their queries very well. (nullie)
* $xform()s for SED and DEF
* str_to_mask() should be silent, callers should be warning.
* Support for 64 bit ints could be more widespread
* Larne wants suppression of duplicated lines (like syslog maybe?)
* Larne and nullie say that stdout can block when running under screen
* Refactor hardcoded uses of select() so select() isn't mandatory.

[See http://www.epicsol.org/PROJECTS for things to come in the future]
[See http://www.epicsol.org/CHANGELOG5 for things that changed in the past]

THE CHANGELOG SINCE THE LAST RELEASE:
-------------------------------------
* Make GET_INT_ARG() support 64 bit ints, for future use
* Make $fseek() support 64 bit file offsets (yay!)
* Begin converting some time_t uses over to 64 bits, Just In Case
* Make $numsort(), $strtol(), $tobase() support 64 bit ints.
* Make $stat() support 64 bit ints where possible.
* Add 'channelmonitor' script from larne.  Thanks!
* Whack /set highlight_char which is no longer being used.
* Move away from calling parse_line() and runcmds(), towards the call_* funcs
* Add provisional support for renumbering windows with channels/logs/timers
* Constify get_*_alias(), so lookups can't modify the actual alias this way.
* Rename parse_command() to parse_statement().
* Create a next_statement() to figure out how long the next stmt is.
* Stop using expand_alias() to rip apart statements. yay!
* Refactor parse_command and parse_statement to better define their roles.
* Push responsibility for expansion to parse_statement, someday, to cmds!
* Push responsibility for handling block statements to parse_statement.
* "Forget" to re-implement /set input_aliases.  I wonder if anyone will notice.
* Change the name of "hist_flag" to "interactive" to reflect its purpose.
* Change /load -std to use parse_statement() instead of parse_line()
* Add a /perl command, just for laughs. Usage: /perl {...}
* Ruby support. yay!
* Add a /tcl command, just for laughs.  Same as perl.
* Trap ruby exceptions, get everything working (sort of)
* Eliminate the third argument to expand_alias(), the statement spanner.
* Rename parse_line() to parse_block() to better reflect its duties.
* Make parse_block() static.  Everything needs to call runcmds() now.
* Eliminate the local-stack-creating feature of parse_block(), callers do this.
* Rename 'line' to 'stmt' in parse_statement().
* Sort of forget to re-implement /set cmdchars.  The / is the cmdchar.
* Try to optimize parse_statement() and next_statement() some.
* Rework configure mojo for perl, ruby, tcl to autogrok compile stuff.
* Run make depend again.
* Update the DCC "last time" value regularly.
* Fix build on freebsd-i386
* Make the ruby support work with ruby-1.6.4 api (for older freebsd)
* Add the 'nickcomp' script contributed by Blackjac. Thanks!
* Create an 'extlang.h' header file for perl/tcl/ruby stuff.
* Clean up warnings and stuff for the external lang support.
* Suspend protocol enforcement when we're processing user input.
* Lay the foundations for nonblocking ssl connection (not supported yet)
* Change SEND_LINE to do SCROLL_FORWARD if we're in scrollback mode
* Add support for maildir mailboxes. 
* Fix crash with 042 numeric.
* Fix buffer overrun with new server state.
* Don't call close_server() for gaps in server list in close_all_servers().
* Support AI_ADDRCONFIG in our builtin AI_MASK/getaddrinfo().
* Make set[_non]_blocking extern.
* Support NEWIO_SSL_CONNECT as a new_open() type.
* Add a new ssl_connect() io callback function for NEWIO_SSL_CONNECT.
* New scripts from weirdo: autojoin, autoquery, floodprot, renumber
* New version of reconnect script from weirdo.
* GC the fixed-alist support (last used by /quote and protocol handler)
* Reorg server SSL negotation stuff to be nonblocking. yay!
* Comment all sorts of stuff in ssl.c.
* Add /set mail_type (MBOX or MAILDIR) to control what we check for mail.
* Make rebuild-scrollback a toggle flag instead of an operation.
* Teach update_all_windows() how to rebuild scrollback
* Write some preliminary code for the unified lastlog
* Add /ON NUMERIC which is thrown if you don't hook the numeric specifically.
* Important changes to autojoin and floodprot scripts.
* Support cast5/blowfish encryption a la ircII.
* Fix build for non-ssl users.
* Add AES256 support.
* Add AESSHA256 support (AES256 using the SHA256 digest of your passkey)
* Rename "EXTCRYPT" to "PROGCRYPT"
* Migrate SED support from crypt.c to crypto.c
* Integrate SED and extprog support into the mainline [de]cipher_message()
* Refactor [de]cipher_message() to be less lame.
* Support "anycrypt" support (AESSHA, AES, BLOWFISH, CAST5, SED, PROG)
* Include sha256 implementation from Karll.  Thanks Karll!
* Unify the ctcp handling of all crypto ctcps
* Add $sha256() function to test sha support (digest)
* Make funcs in crypto.c static and just expose [de]crypt_msg().
* This finishes the divide between crypt.c (front end) and crypto.c (back end)
* Fix a gazillion compiler warnings and sort out const/unsigned char issues.
* Add SEDSHA cipher type, which is better than SED, and always available.
* Add my_sleep|isreadable|iswritable() funcs to phase out rogue selects()h
* Add support for multiple concurrent servers to /encrypt. yay!
* Store the length of the Crypt key within the key itself.
* This moves us closer to being able to decrypt arbitrary data.
* Test all of the cipher types, incl. compat of CAST with ircII.  All set!
* Fix Cut & Paste error.
* DO YOU THINK YOU CAN RE-ORDER AN ARRAY AND NOT CHANGE THE #DEFINES DUMMY?
* Bust do_crypt back into its callers [de]crypt_msg().
* Make lookups between /encrypt flag<->cipher flag<->ctcp table-driven.
* Fix bugs with /crypt -- I think this finishes the project!
* Fix bug that prevented you from deleting a crypto having server desc.
* Add /encrypt -clear so you can purge your crypto list (for debugging)
* Don't output the key for SEDSHA and AESSHA in binary mode (convert to hex)
* Fix external encryption support.
* Release epic5-0.3.1
* Fix compile errors for non-openssl users.
* Fix breakage for solaris found by zlonix
* Fix %{2}+ so it behaves like %+ and not like %{1}+, as per the docs.
* Add server states CREATED and DELETED for nullie.
* Add /on operwall and operwall window level for black.
* Fix $levelwindow()
* Finally whack unused /set status_truncate_rhs
* New versions of autojoin and reconnect from nullie
* Fix /xecho -l for larne. yay!
* Fix /whois so trailing spaces don't look like real words.
* Change ltoa() to my_ltoa() for hpux's sake
* Change finite() to isfinite() for hpux's sake
* Add $serverctl(GET refnum ADDRSLEFT) (see UPDATES)
* Fix finite()/isfinite() madness.
* Look for clock_gettime() in -lrt for ubuntu.
* Automatic reconnect from nullie. yay!
* Change /xecho -v to always output to current window if it's visible.
* Fix /on's with arglists, so lower serial nums don't corrupt $*. [rb nullie]
* Fix memory leak with $url(en|de)code() [rb nullie]
* Change /server - so it calls disconnect() directly
* Fix const correctness problems with sha2.c
* Fix typo: HAVE_INFINITE -> HAVE_ISFINITE [rb kev]
* Desupport dwords in a lot of builtin functions (see updates) [nullie]
* Make /window foo kill fail for want of 'foo' (see updates)
* New 'builtins' from blackjac, more modern format, /whowas improvements
* Refactor the serverinfo stuff
* Allow skipping of fields in server descs (see UPDATES)
* Make /window foo kill not fall back to /window describe, for want of 'foo'.
* Add a 'proto' field to server descs (tcp4, tcp6, 4, or 6), see UPDATES.
* Add RESET_LINE keybinding, for tabkey and history recall scripts.
* Add /on channel_lost, from nullie, who needs to write an UPDATES blurb.
* Fix bug with reset_line, found by nullie.
* Finish implementation of /stack push|pop set with symbol table, rb nullie.
* Preliminary work making @#chan public show up in #chan's window.
* Add /ON UNKNOWN_COMMAND from nullie (thanks!)
* Fix valgrind bugs that nullie found (yay!)
* Fix bug with '' in the new math parser being NULL instead of empty string
* Add support for @#chan via notices to show up in #chan's window
* MORON.  Don't replace a 'return' with something that doesn't return!
* Don't call happykey() on a plain text password (valgrind)
* Fixes for two memory leaks from nullie
* New /on, /ON WINDOW_SERVER, from nullie.
* Teach history script to use parsekey reset_line (nullie)
* Fix one bogon (still others left!) in map script
* Improvements to 'save' script (blackjac)
* Change /on unknown_command to include // prefix if that was used (nullie)
* Fix behavior of /set old_server_lastlog_level (rb larne, fixed by nullie)
* Pass double ptr to remove_bindings_recurse() to fix exit-time memory leak.
* Remove /set bad_style, input_aliases, security,  (unused)
* Remove /set ssl_certfile, ssl_keyfile, and ssl_path (unused)
* Add a (ServerInfo) object to (Server), switch to using it.
* Remove a bunch of unused thingees in (Server) while i'm here.
* Restore /set reverse_status_line to a builtin. oh well.
* Make $urlencode() rfc3986-ish, converting all non-unreserved chars
* Change ServerInfo to use const char's since we don't modify them directly.
* Reorganize how ServerInfos are used, into "temporary" and "permanent" types
* Convert Server's use of ServerInfo's into safe permanent types.
* Add /server -update <refnum> <desc> to change server descs on the fly.
* Fix typo in /invite.
* Fix 'country' script by wrapping it with xdebug dwords.
* Fix some problems with /window query (rc kreca)
* Fix cross-matching of ctcp-over-dcc with queries. YAY! (nullie)
* Fix crash when you received ssl-encrypted msgs and you don't have ssl.
* Begin a major project to normalize the behavior of "words" in function calls
* Fix compat issues with 'history' script.
* Fix problem with get_child_exit() can block SIGCHLD.
* Change $mask() so it doesn't require a full $uhc() value, compat with epic4
* Avoid crash by actually removing ssl entries when they're shut down
* Fix replace_line, it wasn't moving the cursor before writing new contents.
* Fix a double SSL_free, from yesterday's fixes.
* Add a WIP document that describes how all functions arglists work.
* Fix a few problematic word manip functions.
* Add a 'vhost' field to server descriptions, for setting per-server vhost.
* Fix $prefix( )
* Add support for "conditional dequoting" in universal_next_arg_count
* Change next_earg() and next_func_arg() to use the conditional dequoting.
* This permits me to implement $qword() which returns a $word() literally! yay!
* Fix 'loadformats' script (rb zlonix)
* Change last_arg() so it dequotes the retval according to the word type
* Change $pop() so it only takes an lvalue
* Change $revw() to use the last_arg() improvements.
* Improve /xdebug so it takes a block as an argument
* Improve $push() so it pushes the whole arguments as dwords
* Add new function $curcmd() for currently executing command (nullie)
* Rewrite $remw() so it uses standard word handling routines.
* Normalize $shift() and $unshift() in the same way as $push() and $pop().
* Fix /eval echo $func($*) at the input prompt causing "add is NULL" panic.
* Put a delay on handling 001 to avoid problem I'm seeing on epicsol.
* Release EPIC5-0.3.2 (1431) (Mitigation)
* Make the build work with socks5 again, for freebsd ports support
* Add malloc_strcat3_c().
* Optimize malloc_strcat_word_c
* Add a new /userhost -extra flag for nullie (see UPDATES)
* Add code to do stdout stuff with threads (larne)
* If you're doing threaded stdout, $info(o) includes 'o'.
* Add $mask(10 ...) from kreca.
* Fix from black for 'save' script, to save notify nicks.
* Fix from larne for configure checks for tcl for solaris (ick)
* Fix solaris ports support, inspired by patch from larne, rb zlonix
* Change startup code so it outputs the pid of the bot process for -b.
* Fix $info(o) bug.  rb zlonix
* Output the errno value ret by failed nonblocking server connects on error.
* Add auto-close boolean flag for server (see UPDATES)
* Black pointed out that $winquery() exists in builtins.
* Pass error value from getsockopt() through dgets for nonblocking connects.
* Use the error value from getsockopt() to output to the user.
* Allow you to ignore operwalls and have them tracked as floods.
* New version of altchan from black.
* Various and sundry fixes.
* Don't unconditionally set who_level to NONE in /window.
* Set and reset message_from() info around each /window operation.
* This fixes /window <refnum> echo "<string>" so the line is added to lastlog.
* Fix $ruby(puts 0.4.0) by calling rb_rescue2() to catch /all/ exceptions.
* Fix /window add/query so they auto-remove nicks from other wins first.
* Fix build on non-ipv6 systems. (bruns)
* Never allow INPUT_PROMPT_LEN to be < 0.
* This fixes the damage from resizing to 1x1 and then back again.
