EPIC5 Projects, Bugs, and other Errata:

KNOWN ERRATA (eg, bugs, or unresolved requests):
------------------------------------------------
<none>

MEDIUM-TERM PROJECTS
--------------------
* What about the ability to create a status bar from an arbitrary format?
* Need to have a script that implements per-channel FiSH support
* Need to have a script that implements per-channel iconv() support.
* There needs to be an /on switch_query for wuf/sjhoran
* What about scrolling back to some point in time?
* What about a facility to do auto-off-hold-mode ?
* wuf says that fred!user@machine.domain.com.au should not be
	*!*user@*.com.au but instead *!*user@*.domain.com.au
* There should be a fake level for "channel stuff"
* The four projects of the UTF8 effort are the primary focus for now.
* Curse would like an outbound protocol queue to avoid flooding the server
* Larne wants syntactic word extraction like $foo{3} or $foo{1,4}
* Howl wants to be able to have per-window /input and /input_char
* Howl would like "advanced scrollback" searches, like hit counts
* I think maybe i should expose a better scrollback interface?
* Should be able to change LINE value in windows (for howl)
* Howl would like to be able to replace any line of scrollback via windowctl
* Kitambi would like to be able to rewrite lines after they've been displayed.
* Should any commands be #ifdef'd out at compile time, as opposed to just
  being replaced with error-generating shims?

[I moved the old list to the file "WISHLIST" to keep this file short]

[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:
-------------------------------------
* Patch from twincest to fix build on solaris
* Don't honor queries for WALLOPS (requested by opers)
* Conditionalize <ieeefp.h> per twincest's fix.
* Clear RUBYDOTOH if ruby is found but it isn't usable (rb Zoopee)
* Rewrite checks for (intmax_t) for systems w/o strtoimax(). (rb JailBird)
* Define NSIG as _NSIG or 32 if it's not defined (rb JailBird)
* Broaden what you can specify for the server "proto" field (see UPDATES)
* Fix figure_out_address() to properly identify a server name
* This fixes /ignore user@host.com which was lamely broken.
* Make /window channel output all channels in the window
* Don't call update_all_status() if /set -status_clock (by Oliver Fromme)
* Comment out strtol() compat stuff, causing people problems.
* More graciously handle snprintf() returning -1 (rb twincest)
* Do not use /usr/include/ep on hpux
* Mark lastlog items as "dead" and check for them to avoid dangling ptrs
* Handle (graciously) when /set scroll_lines is > size of the window. (rb CE)
* Properly handle remove_lastlog_item() for the very last item.
* Fixes /eval defer window new kill;defer window new;defer window kill_others
* Add $hookctl(ARGS <recursive> <args>) allows you to replace $* in /on.
* Add $hookctl(USERINFO <recursive> <info>) allows you to set dynamic info.
* Don't lamely malloc_strcpy() over non-malloced strings in hookctl.
* Add $iconvctl() to control iconv stuff. (See UPDATES.)
* Add $xform(iconv +<iconv id>) functionality. (See UPDATES.)
* Fix bug where /window number could lead to confused lastlogs
* Generalize base64 encoding so it doesn't hardcode the base64 string.
* Add $xform(+FISH64 ...) which does FiSH's base64 encoding.
* Make a better test for embedded perl support by calling SvTRUE().
* Fix /bind -defaults so it actually removes all keybindings first. doh.
* Fix /window double so it actually shows you the current double status.
* Make the expression error for too many operands output the expression.
* Rewrite the iconv() configure checks to deal with libiconv's #define's.
* Rewrite the strtoimax() tests so they don't fail lamely to detect (intmax_t)
* Rewrite the perl and ruby runtime configure tests so they work right with gcc
* Fix various warnings revealed by gcc warnings
* Make a very preliminary attempt to write some fish decoding stuff. Not Ready!
* Fix for configure to handle perl's non-existance (kreca)
* Fix wserv4 dependencies so you can do make -j4 on multi-cpu.
* Rework the ruby checking in configure so it builds on freebsd-7
* Add CTCP FISH support (this is _not_ fish support!), see UPDATES
* Make an initial stab at proper support for FiSH's base64 converter.
* I took the "fish64" entry out of $xform() for now while it's broken.
* Capture stdout of ruby scripts and send it to an epic window. yay!
* This means you can do regular old 'puts' in ruby script and it'll Just Work.
* Finish $xform() for +fish64 and -fish64, verified against actual FiSH code
* Try to make the perl configure check more robust for non-working perls.
* Start a project to convert things to use transform_string().
* Fix show_lastlog() to return the rewritten result (so -mangle works)
* Actually de-orbit [en|de]code().
* Create transform_string_dyn, a pleasant api in front of transform_string.
* Create a bunch of global vars for transform_string to avoid lookups.
* Add hints to how big destination buffers should be for xforming.
* Fix transforms by initializing the expander and overhead items.
* Make various sanity checks for transforms to fix amn.
* Ensure all the users of transform_string_dyn are prepared to handle NULLs
* Ensure all the xform encoder/decoders can handle zero dest buffer sizes
* Add code to configure to fail if OpenSSL is not found.  No turning back!
* Split the notion of "iv size" and "blocksize" in crypto support
* This is needed because FiSH does not use an IV, being an ECB cipher
* It's also needed because the notion that the IV *must* be blocksize is lame.
* Add notion of "trimmable bytes" to end of crypto message
* Again, this is for FiSH, because it doesn't trim bytes on last packet.
* Support for assissting valgrind in helping us find memory leaks (caf)
* Fix memory leaks found by valgrind (caf)
* GC function_[en|de]code() and function_sha256 (superceded by $xform())
* GC unused [en|de]code(), enquote_it, dequote_it, and dequote_buffer().
* Fix display calcs when adding 1st window to 1st screen
* This allows you to change 'status.number' for default # of status lines
* Start tracking timestamps for scrollback items
* Full generalization of scrollback/scrollforward functions
* Implement scrollback/forward based on lines
* Implement scrollback/forward based on regex
* Begin thinking about implementing scrollback/forward based on time (not done)
* Windows that are hidden from birth have a fake height of 24 lines
* This fixes a bug where doing /window double on hold_slider 0 in a 
  never-visible window caused it to get stuck in an infinite loop.
* Add new scripts, "help.irc", "history.rb", "locale", and "tabkey.sjh"
* I need to document these in UPDATE!
* Add /exec -closeout, to send EOF to the exec'd process
* Add $dccctl(FD_TO_REFNUM <fd>) to convert $connect() to a refnum for dccctl.
* Remember $dccctl(GET refnum WRITABLE) detects a connected socket, by rule
* Change /on 322 handler so output always goes to OTHER, not to the window.
* Add an /on switch_query, but it's incomplete, so don't use it yet.
* Rewrite malloc_sprintf() so it can be used by do_hook_internal().
* Revamp do_hook() so it returns the final value of $*
* This will allow future use of do_hook() to rewrite text.
* Don't test for /usr/local/lib/libiconv.a because os x doesn't have it
* Prototype malloc_vsnprintf().
* Don't test uninitialized variables, you dummy.
* Have to be more aggressive using va_copy() for 64-bit sake
* Add /xeval -n {...} which un-does the ^ operation.
* Fix the 'ambig' script to use /xeval -n.
* Fix the command mode support in 'builtins' to use /xeval -n
* Reorganize open_log(), add support for double quotes around filenames
* Verify that logfiles are now working as I Hope they would.
* Make 'global' load ambig and newnick, since those recently came up
* Change a variable name to avoid conflicts with a global symbol
* Create a stub function to calculate how long the input line could be.
* Fix a bug with /who -real (i forgot who reported this, sorry!)
* Fix the redonkulous spurious errors when using $convert().
* Add a configure check for strtoimax() being a macro (ugh)
* Apparently strings in configure are supposed to be [quote]d.
* Check for strtoimax() separately in inttypes.h and stdint.h
* This hopefully fixes the build on hpux
* Add @E<win> as a /msg target so you can /msg a window.
* Fix lame compile error in wserv() if we need yell().
* Improve the test for libarchive in configure
* Fix /bind -default because it whacked the bindings themselves. doh!
* Normalize the copyright notice on scripts BlackJac wrote, per his request
* Fix 439 handling for inspircd (rb twincest)
* Add the ability to /log server all or /log add all for server logs.
* Change the configure test for perl from AC_TRY_LINK to AC_TRY_RUN
* Change string insensitive comparisons so "SERVER" doesn't match "SASAFRASS"
* Bump up the "overhead" bytes for xform()s to multiples of 8 per zlonix
* Support /log server ALL and /log type server add ALL to log all servers
* Fix brain-o that I missed -- strnicmp() consumers must use FULL STRINGS!
* Fix more.  You'd think I was not paying attention or something.
* Don't permit /xecho /flag because that's just useless
* Fix two dcc locking bogons that i discovered by accident.
* Revert the string insensitive comparison changes for now.
* Use PRIdMAX and PRIuMAX for printing (intmax_t), for hpux, or larne
* Fix my brokenness of my_stricmp().  Time to go hide under a rock.
* Fix the bug where the right indicator appeared when it should not.
* Add the 'logman' script which does per-server, and per-channel logging
* Handle inspired's BBC 351 numeric, for larne.
* Fix bug with /encrypt complaining "X is not a multiple of Y!" (rb zlonix)
* Add a bunch more scripts I've been sitting on that were contributed.
* Add 'cycle', 'set_color', 'ban', and 'speak.irc' scripts. i need to doc them
* Create some internal funcs to allow updating a server desc on the fly
* Allow add_servers() to update server descriptions
* Allow /server -add to update server descriptions
* Allow /server -update to update server descriptions
* Allow plain old /server to update server descriptions
* Allow $serverctl(READ_FILE filename) to update server descriptions
* Add $serverctl(UPDATE refnum stuff) to update server descriptions
* Allow /window server to update server descriptions
* Add $windowctl(GET x SERVER_STRING) returns last good /window server value
* Release epic5-1.1.1 (commit 1631) (Prolixity)
* Fixes so /server <group> doesn't clobber <host> with <group> (rb howl)
* Add support for /server refnum:<other flags> which I noticed
* For example, this means, /server 0:type=irc-ssl now works! yay!
* Add special check for OS X (Zach)
* Fix configure check for perl so it doesn't segfault.
* Fix configure check for iconv, so it doesn't bork the freebsd port
* Iconv support really is mandatory now! I mean it!
* Fix transform_string_dyn().  How did nobody catch this??
* Add a function findchar_quoted() like strchr(), but honors \.s
* Use this in server descriptions to find the unquoted : after a PASS.
* This means you can \ a : in a password. yay!
* Nuke the "URLPASS" support.  Let us never speak of this again.
* Two changes to timer.c from caf.
* Fix bugs found by --with-warns.
* Add a check in configure for -fno-strict-aliasing; could be used with -O2?
* Fix /parsekey reset_line so it sets the cursor to the end (for howl)
* Add /on unknown_set for howl (see UPDATES)
* Fix set_input(), which fixes history. yay!
* When /dcc causes nonblocking connect, tell the user so they know we tried
* Add 'c' option to $sar() and $msar() (see UPDATES)
* Revamp substitute_string() so $sar() and $msar() work as intended.
* Add a NONE_xform const to do null transformations.
* Release epic5-1.1.2 (commit 1638) (Trencherman)
* Fix build so it builds on mac os x, with or without macports perl.
* Fix brain-dead typo with /on unknown_set support
* Rewrite /bind transpose_characters in response to it being borked.
* Fix configure support so valgrind can be used (caf)
* Fix crash when you output to a window while it's being killed (caf)
* Fix memory leak with initialization of hook stuff (caf)
* Fix memory leak with realnames when a server is destroyed (caf)
* Change /bind previous_word and next_word to honor /set word_break
* Apparently the lastlog output stuff wasn't guarded properly by show_lastlog
* Refine fix for crash when you output to a window while it's being killed
* Use the length passed to write_server_ssl(), that's what it's there for (ce)
* Avoid null derefs with OMATCH/IMATCH/PMATCH in serverctl (ce)
* Fix /allocdump so it doesn't crash without a filename (ce)
* Fix for a bug that stopped "/xquote -u" inserting null chars.
* Fixed $serverctl([gio]match ...) to not return deleted servers.
* Improve performance in the main select loop.  In practice, MAY require minor script alterations.
* Save the errno from a failed $dbmctl(OPEN) for $dbmctl(ERROR -1)
* Add $channelsyncing(#chan server) for tjh.
* Make $info(o) show "S" if OpenSSL was compiled in -- useful for crypto
* When starting /dcc nonblocking connect, don't worry the user with noise
* Display the original /window arglist on any syntax error.
* Remove ADD_STR_TO_LIST macro (caf)
* Add "from" window to adjust_context_windows, windows are killed (caf)
* Fix from_server getting lost in vsyserr (caf)
* Fix null deref in umode handler (caf)
* Add %G status expando, to return 005 NETWORK (caf)
* Friendlier ZNC support changes follow here...
* Allow multiple servers on same (host,port) with different passwords
* For now, neutralize adjust_window_refnums() until a proper fix (rb tjh)
* Caf noticed I fixed the wrong bug. oops!
* EPIC5-1.1.3 released here (Feculance) (Commit ID: 1656)
* Add $xform("+LEN" ...) which turns anything into a length (for ciphertext)
* Fix $xform("-FiSH" ...) for compatability with other implementations.
* Don't accept EAGAIN as a valid error code for connect (caf)
* Fix infinite loop bug with /userhost (caf)
* Fix memory leak with /who in certain error conditions (caf)
* Rewrite isonbase() so it handles longer nicks correctly (caf)
* Implement /lastlog -ignore, which shows everything EXCEPT the pattern.
* Add /xeval -nolog which suppresses logging for that command.
* Implement $dccctl([SG]ET refnum PACKET_SIZE num) for packet-buffering
* Implement $dccctl([SG]ET refnum FULL_LINE_BUFFER [01]) for forced line buff
* Implement $hookctl(CURRENT_IMPLIED_HOOK) for implied on hooks to know context
* Add "expire timeout" to lastlog entries
* Create do_expire_lastlog_entries() which wipes expired window output
* Add functions to "merge" logfiles/channels/output/timers to a new window
* Remove the scripted COMMAND_MODE feature, which interferes with /window merge
* Add /xecho -E which causes window output to get away after some seconds
* Add /window merge which collapses two windows into one and kills the other
* window->lastlog_size must be maintained for both giver and taker!
* Try to fix some infinite loops when cleaning up window lastlogs.
* Add fn name to many panics.
* Make /on set only throw once if the user types the canonical /set name.
* Automatically close all $dbmctl() open files on exit.
* Fix /lastlog -context (but only for the normal case. -reverse comes next)
* Update_server_from_raw_desc() was missing a clear_serverinfo().
* Improve error handling for /hostname errors.
* Add /xdebug no_color which turns off color support at the lowest level.
* Fix /lastlog -reverse -context, all done now!
* Don't allow $repeat() or $pad() to request strings > 1MB.
* Have the malloc-failed panic tell you how many bytes were requested.
* Add a feature to check for unreleased message_from contexts in main().
* Fix two missing message_from leaks in server handler.
* Fix the lastlog trimming, an infinite loop (caf)
* Increase detail when debugging output contexts (caf)
* Reformat some code, fix more display context leaks (caf)
* EPIC5-1.1.4 released here (Adumbration) (Commit ID: 1667)
* Fix lock-ups when killing windows by refining the safeguard
* Create slurp_elf_file/string_feof|fgets|fgetc, to front-end ELF files
* Change /load to use the string front-end functions
* This allows /load to work on pure strings, and decouples from files
* Create recode_with_iconv() to convert a string using iconv() (for /load)
* Add /load -encoding which lets you specify the encoding of the file
* This means you can load iso-8859-1 encoded files on a utf8 terminal!
* Fix various warnings from gcc -Wall
* Add a new /set DEFAULT_SCRIPT_ENCODING -- will be used soon!
* Call setlocale(LC_ALL, "") at start of main() to get locale info
* Fix slurp_file() (caf)
* Fix make installman, man page filename had changed
* Begin a major project to fix issues suggested by clang (Ancient)
* Fix xecho as suggested by clang
* Check retval of set[ug]id() just because it's good style
* Make sure "MAXPATHLEN" (bsd) is always spelled "PATH_MAX" (posix)
* Fix while as suggested by clang
* Re-comment translate_user_input() based on suggestion by ce
* Move add_wait_prompt() to a new home
* Fix whoreply() as suggested by clang
* All of the below were suggested by clang.
* Fix set_screens_current_window() and search_for().
* Fix a "use-after-free" when realloc() fails
* Fix or paper over string-overruns for a malformed globs
* Fix a memory leak when opening a compressed file fails
* Fix a corruption of from_server in vsyserr()
* Check the param to denormalize_string() 
* Slurp_file shouldn't call stat() or check its retval
* Denormalize_string() should check its param
* And so should p_killmsg(), and dishonor kill msg if its malformed.
* Fix /while, /topic, and $repeat() in case of malformed arguments
* All of the above were suggested by clang
* More fixes suggested by clang that I'm too annoyed to list out.
* Even more fixes suggested by clang (most related to theoretical null derefs)
* Even more fixes...
* Rewrite /window move and /window move_to to make clang happy
* One final batch of updates by clang....
* Rewrite lastlog moving funcs to use windows ptrs instead of refnums (caf)
* EPIC5-1.1.5 released here (Gallimaufry) (Commit ID: 1683)
* Add /QUEUE -RUNONE
* Caf and jm confirmed that ircu doesn't use 307 for USERIP any more.
* ignorectl(DELETE) is not silent and it should be.
* To satisfy fedora packaging rules, accept DESTDIR for 'make install'
* Many printf() format fixes (caf)
* Many changes clang suggested
* Fix "topicbar" script to double quote "s for now.
* Fixed-skipped windows don't get channels from /window kill (unless no choice)
* Add $windowctl(REFNUMS_BY_PRIORITY) to give you windows by current-ness
* Add /lastlog -reignore (ce)
* Add $logctl(NEW)
* Add $logctl(LAST_CREATED)
