1EPIC5 Projects, Bugs, and other Errata:
2
3KNOWN ERRATA (eg, bugs, or unresolved requests):
4------------------------------------------------
5<none>
6
7EPIC5-3.0 MAJOR PROJECTS
8------------------------
91. Python support that doesn't suck
102. Saving and restoring client state across restarts
113. Robust, no compromises, ZNC support
124. Reboot of /set load_path, /load, and namespaces
135. SQLite support
14
15MEDIUM-TERM PROJECTS
16--------------------
17* Need to have a script that implements per-channel FiSH support
18* There needs to be an /on switch_query for wuf/sjhoran
19* What about scrolling back to some point in time?
20* What about a facility to do auto-off-hold-mode ?
21* wuf says that fred!user@machine.domain.com.au should not be
22	*!*user@*.com.au but instead *!*user@*.domain.com.au
23* There should be a fake level for "channel stuff"
24* Curse would like an outbound protocol queue to avoid flooding the server
25* Larne wants syntactic word extraction like $foo{3} or $foo{1,4}
26* Howl wants to be able to have per-window /input and /input_char
27* Howl would like "advanced scrollback" searches, like hit counts
28* I think maybe i should expose a better scrollback interface?
29* Should be able to change LINE value in windows (for howl)
30* Howl would like to be able to replace any line of scrollback via windowctl
31* Kitambi would like to be able to rewrite lines after they've been displayed.
32* Should any commands be #ifdef'd out at compile time, as opposed to just
33  being replaced with error-generating shims?
34* /Foreach should work with local variables.  It can't right now because
35  of the challenge of indicating which elements are from local variables.
36* Harz would like a way to do /bind -default for just a single binding.
37* /PAUSE does not save/restore context, and it should.
38* /window maximize + new status expando when a zero-height window gets output
39
40[I moved the old list to the file "WISHLIST" to keep this file short]
41
42[See http://www.epicsol.org/PROJECTS for things to come in the future]
43[See http://www.epicsol.org/CHANGELOG5 for things that changed in the past]
44
45THE CHANGELOG SINCE THE LAST RELEASE:
46-------------------------------------
47* Patch from twincest to fix build on solaris
48* Don't honor queries for WALLOPS (requested by opers)
49* Conditionalize <ieeefp.h> per twincest's fix.
50* Clear RUBYDOTOH if ruby is found but it isn't usable (rb Zoopee)
51* Rewrite checks for (intmax_t) for systems w/o strtoimax(). (rb JailBird)
52* Define NSIG as _NSIG or 32 if it's not defined (rb JailBird)
53* Broaden what you can specify for the server "proto" field (see UPDATES)
54* Fix figure_out_address() to properly identify a server name
55* This fixes /ignore user@host.com which was lamely broken.
56* Make /window channel output all channels in the window
57* Don't call update_all_status() if /set -status_clock (by Oliver Fromme)
58* Comment out strtol() compat stuff, causing people problems.
59* More graciously handle snprintf() returning -1 (rb twincest)
60* Do not use /usr/include/ep on hpux
61* Mark lastlog items as "dead" and check for them to avoid dangling ptrs
62* Handle (graciously) when /set scroll_lines is > size of the window. (rb CE)
63* Properly handle remove_lastlog_item() for the very last item.
64* Fixes /eval defer window new kill;defer window new;defer window kill_others
65* Add $hookctl(ARGS <recursive> <args>) allows you to replace $* in /on.
66* Add $hookctl(USERINFO <recursive> <info>) allows you to set dynamic info.
67* Don't lamely malloc_strcpy() over non-malloced strings in hookctl.
68* Add $iconvctl() to control iconv stuff. (See UPDATES.)
69* Add $xform(iconv +<iconv id>) functionality. (See UPDATES.)
70* Fix bug where /window number could lead to confused lastlogs
71* Generalize base64 encoding so it doesn't hardcode the base64 string.
72* Add $xform(+FISH64 ...) which does FiSH's base64 encoding.
73* Make a better test for embedded perl support by calling SvTRUE().
74* Fix /bind -defaults so it actually removes all keybindings first. doh.
75* Fix /window double so it actually shows you the current double status.
76* Make the expression error for too many operands output the expression.
77* Rewrite the iconv() configure checks to deal with libiconv's #define's.
78* Rewrite the strtoimax() tests so they don't fail lamely to detect (intmax_t)
79* Rewrite the perl and ruby runtime configure tests so they work right with gcc
80* Fix various warnings revealed by gcc warnings
81* Make a very preliminary attempt to write some fish decoding stuff. Not Ready!
82* Fix for configure to handle perl's non-existance (kreca)
83* Fix wserv4 dependencies so you can do make -j4 on multi-cpu.
84* Rework the ruby checking in configure so it builds on freebsd-7
85* Add CTCP FISH support (this is _not_ fish support!), see UPDATES
86* Make an initial stab at proper support for FiSH's base64 converter.
87* I took the "fish64" entry out of $xform() for now while it's broken.
88* Capture stdout of ruby scripts and send it to an epic window. yay!
89* This means you can do regular old 'puts' in ruby script and it'll Just Work.
90* Finish $xform() for +fish64 and -fish64, verified against actual FiSH code
91* Try to make the perl configure check more robust for non-working perls.
92* Start a project to convert things to use transform_string().
93* Fix show_lastlog() to return the rewritten result (so -mangle works)
94* Actually de-orbit [en|de]code().
95* Create transform_string_dyn, a pleasant api in front of transform_string.
96* Create a bunch of global vars for transform_string to avoid lookups.
97* Add hints to how big destination buffers should be for xforming.
98* Fix transforms by initializing the expander and overhead items.
99* Make various sanity checks for transforms to fix amn.
100* Ensure all the users of transform_string_dyn are prepared to handle NULLs
101* Ensure all the xform encoder/decoders can handle zero dest buffer sizes
102* Add code to configure to fail if OpenSSL is not found.  No turning back!
103* Split the notion of "iv size" and "blocksize" in crypto support
104* This is needed because FiSH does not use an IV, being an ECB cipher
105* It's also needed because the notion that the IV *must* be blocksize is lame.
106* Add notion of "trimmable bytes" to end of crypto message
107* Again, this is for FiSH, because it doesn't trim bytes on last packet.
108* Support for assissting valgrind in helping us find memory leaks (caf)
109* Fix memory leaks found by valgrind (caf)
110* GC function_[en|de]code() and function_sha256 (superceded by $xform())
111* GC unused [en|de]code(), enquote_it, dequote_it, and dequote_buffer().
112* Fix display calcs when adding 1st window to 1st screen
113* This allows you to change 'status.number' for default # of status lines
114* Start tracking timestamps for scrollback items
115* Full generalization of scrollback/scrollforward functions
116* Implement scrollback/forward based on lines
117* Implement scrollback/forward based on regex
118* Begin thinking about implementing scrollback/forward based on time (not done)
119* Windows that are hidden from birth have a fake height of 24 lines
120* This fixes a bug where doing /window double on hold_slider 0 in a
121  never-visible window caused it to get stuck in an infinite loop.
122* Add new scripts, "help.irc", "history.rb", "locale", and "tabkey.sjh"
123* I need to document these in UPDATE!
124* Add /exec -closeout, to send EOF to the exec'd process
125* Add $dccctl(FD_TO_REFNUM <fd>) to convert $connect() to a refnum for dccctl.
126* Remember $dccctl(GET refnum WRITABLE) detects a connected socket, by rule
127* Change /on 322 handler so output always goes to OTHER, not to the window.
128* Add an /on switch_query, but it's incomplete, so don't use it yet.
129* Rewrite malloc_sprintf() so it can be used by do_hook_internal().
130* Revamp do_hook() so it returns the final value of $*
131* This will allow future use of do_hook() to rewrite text.
132* Don't test for /usr/local/lib/libiconv.a because os x doesn't have it
133* Prototype malloc_vsnprintf().
134* Don't test uninitialized variables, you dummy.
135* Have to be more aggressive using va_copy() for 64-bit sake
136* Add /xeval -n {...} which un-does the ^ operation.
137* Fix the 'ambig' script to use /xeval -n.
138* Fix the command mode support in 'builtins' to use /xeval -n
139* Reorganize open_log(), add support for double quotes around filenames
140* Verify that logfiles are now working as I Hope they would.
141* Make 'global' load ambig and newnick, since those recently came up
142* Change a variable name to avoid conflicts with a global symbol
143* Create a stub function to calculate how long the input line could be.
144* Fix a bug with /who -real (i forgot who reported this, sorry!)
145* Fix the redonkulous spurious errors when using $convert().
146* Add a configure check for strtoimax() being a macro (ugh)
147* Apparently strings in configure are supposed to be [quote]d.
148* Check for strtoimax() separately in inttypes.h and stdint.h
149* This hopefully fixes the build on hpux
150* Add @E<win> as a /msg target so you can /msg a window.
151* Fix lame compile error in wserv() if we need yell().
152* Improve the test for libarchive in configure
153* Fix /bind -default because it whacked the bindings themselves. doh!
154* Normalize the copyright notice on scripts BlackJac wrote, per his request
155* Fix 439 handling for inspircd (rb twincest)
156* Add the ability to /log server all or /log add all for server logs.
157* Change the configure test for perl from AC_TRY_LINK to AC_TRY_RUN
158* Change string insensitive comparisons so "SERVER" doesn't match "SASAFRASS"
159* Bump up the "overhead" bytes for xform()s to multiples of 8 per zlonix
160* Support /log server ALL and /log type server add ALL to log all servers
161* Fix brain-o that I missed -- strnicmp() consumers must use FULL STRINGS!
162* Fix more.  You'd think I was not paying attention or something.
163* Don't permit /xecho /flag because that's just useless
164* Fix two dcc locking bogons that i discovered by accident.
165* Revert the string insensitive comparison changes for now.
166* Use PRIdMAX and PRIuMAX for printing (intmax_t), for hpux, or larne
167* Fix my brokenness of my_stricmp().  Time to go hide under a rock.
168* Fix the bug where the right indicator appeared when it should not.
169* Add the 'logman' script which does per-server, and per-channel logging
170* Handle inspired's BBC 351 numeric, for larne.
171* Fix bug with /encrypt complaining "X is not a multiple of Y!" (rb zlonix)
172* Add a bunch more scripts I've been sitting on that were contributed.
173* Add 'cycle', 'set_color', 'ban', and 'speak.irc' scripts. i need to doc them
174* Create some internal funcs to allow updating a server desc on the fly
175* Allow add_servers() to update server descriptions
176* Allow /server -add to update server descriptions
177* Allow /server -update to update server descriptions
178* Allow plain old /server to update server descriptions
179* Allow $serverctl(READ_FILE filename) to update server descriptions
180* Add $serverctl(UPDATE refnum stuff) to update server descriptions
181* Allow /window server to update server descriptions
182* Add $windowctl(GET x SERVER_STRING) returns last good /window server value
183* Release epic5-1.1.1 (commit 1631) (Prolixity)
184* Fixes so /server <group> doesn't clobber <host> with <group> (rb howl)
185* Add support for /server refnum:<other flags> which I noticed
186* For example, this means, /server 0:type=irc-ssl now works! yay!
187* Add special check for OS X (Zach)
188* Fix configure check for perl so it doesn't segfault.
189* Fix configure check for iconv, so it doesn't bork the freebsd port
190* Iconv support really is mandatory now! I mean it!
191* Fix transform_string_dyn().  How did nobody catch this??
192* Add a function findchar_quoted() like strchr(), but honors \.s
193* Use this in server descriptions to find the unquoted : after a PASS.
194* This means you can \ a : in a password. yay!
195* Nuke the "URLPASS" support.  Let us never speak of this again.
196* Two changes to timer.c from caf.
197* Fix bugs found by --with-warns.
198* Add a check in configure for -fno-strict-aliasing; could be used with -O2?
199* Fix /parsekey reset_line so it sets the cursor to the end (for howl)
200* Add /on unknown_set for howl (see UPDATES)
201* Fix set_input(), which fixes history. yay!
202* When /dcc causes nonblocking connect, tell the user so they know we tried
203* Add 'c' option to $sar() and $msar() (see UPDATES)
204* Revamp substitute_string() so $sar() and $msar() work as intended.
205* Add a NONE_xform const to do null transformations.
206* Release epic5-1.1.2 (commit 1638) (Trencherman)
207* Fix build so it builds on mac os x, with or without macports perl.
208* Fix brain-dead typo with /on unknown_set support
209* Rewrite /bind transpose_characters in response to it being borked.
210* Fix configure support so valgrind can be used (caf)
211* Fix crash when you output to a window while it's being killed (caf)
212* Fix memory leak with initialization of hook stuff (caf)
213* Fix memory leak with realnames when a server is destroyed (caf)
214* Change /bind previous_word and next_word to honor /set word_break
215* Apparently the lastlog output stuff wasn't guarded properly by show_lastlog
216* Refine fix for crash when you output to a window while it's being killed
217* Use the length passed to write_server_ssl(), that's what it's there for (ce)
218* Avoid null derefs with OMATCH/IMATCH/PMATCH in serverctl (ce)
219* Fix /allocdump so it doesn't crash without a filename (ce)
220* Fix for a bug that stopped "/xquote -u" inserting null chars.
221* Fixed $serverctl([gio]match ...) to not return deleted servers.
222* Improve performance in the main select loop.  In practice, MAY require minor script alterations.
223* Save the errno from a failed $dbmctl(OPEN) for $dbmctl(ERROR -1)
224* Add $channelsyncing(#chan server) for tjh.
225* Make $info(o) show "S" if OpenSSL was compiled in -- useful for crypto
226* When starting /dcc nonblocking connect, don't worry the user with noise
227* Display the original /window arglist on any syntax error.
228* Remove ADD_STR_TO_LIST macro (caf)
229* Add "from" window to adjust_context_windows, windows are killed (caf)
230* Fix from_server getting lost in vsyserr (caf)
231* Fix null deref in umode handler (caf)
232* Add %G status expando, to return 005 NETWORK (caf)
233* Friendlier ZNC support changes follow here...
234* Allow multiple servers on same (host,port) with different passwords
235* For now, neutralize adjust_window_refnums() until a proper fix (rb tjh)
236* Caf noticed I fixed the wrong bug. oops!
237* EPIC5-1.1.3 released here (Feculance) (Commit ID: 1656)
238* Add $xform("+LEN" ...) which turns anything into a length (for ciphertext)
239* Fix $xform("-FiSH" ...) for compatability with other implementations.
240* Don't accept EAGAIN as a valid error code for connect (caf)
241* Fix infinite loop bug with /userhost (caf)
242* Fix memory leak with /who in certain error conditions (caf)
243* Rewrite isonbase() so it handles longer nicks correctly (caf)
244* Implement /lastlog -ignore, which shows everything EXCEPT the pattern.
245* Add /xeval -nolog which suppresses logging for that command.
246* Implement $dccctl([SG]ET refnum PACKET_SIZE num) for packet-buffering
247* Implement $dccctl([SG]ET refnum FULL_LINE_BUFFER [01]) for forced line buff
248* Implement $hookctl(CURRENT_IMPLIED_HOOK) for implied on hooks to know context
249* Add "expire timeout" to lastlog entries
250* Create do_expire_lastlog_entries() which wipes expired window output
251* Add functions to "merge" logfiles/channels/output/timers to a new window
252* Remove the scripted COMMAND_MODE feature, which interferes with /window merge
253* Add /xecho -E which causes window output to get away after some seconds
254* Add /window merge which collapses two windows into one and kills the other
255* window->lastlog_size must be maintained for both giver and taker!
256* Try to fix some infinite loops when cleaning up window lastlogs.
257* Add fn name to many panics.
258* Make /on set only throw once if the user types the canonical /set name.
259* Automatically close all $dbmctl() open files on exit.
260* Fix /lastlog -context (but only for the normal case. -reverse comes next)
261* Update_server_from_raw_desc() was missing a clear_serverinfo().
262* Improve error handling for /hostname errors.
263* Add /xdebug no_color which turns off color support at the lowest level.
264* Fix /lastlog -reverse -context, all done now!
265* Don't allow $repeat() or $pad() to request strings > 1MB.
266* Have the malloc-failed panic tell you how many bytes were requested.
267* Add a feature to check for unreleased message_from contexts in main().
268* Fix two missing message_from leaks in server handler.
269* Fix the lastlog trimming, an infinite loop (caf)
270* Increase detail when debugging output contexts (caf)
271* Reformat some code, fix more display context leaks (caf)
272* EPIC5-1.1.4 released here (Adumbration) (Commit ID: 1667)
273* Fix lock-ups when killing windows by refining the safeguard
274* Create slurp_elf_file/string_feof|fgets|fgetc, to front-end ELF files
275* Change /load to use the string front-end functions
276* This allows /load to work on pure strings, and decouples from files
277* Create recode_with_iconv() to convert a string using iconv() (for /load)
278* Add /load -encoding which lets you specify the encoding of the file
279* This means you can load iso-8859-1 encoded files on a utf8 terminal!
280* Fix various warnings from gcc -Wall
281* Add a new /set DEFAULT_SCRIPT_ENCODING -- will be used soon!
282* Call setlocale(LC_ALL, "") at start of main() to get locale info
283* Fix slurp_file() (caf)
284* Fix make installman, man page filename had changed
285* Begin a major project to fix issues suggested by clang (Ancient)
286* Fix xecho as suggested by clang
287* Check retval of set[ug]id() just because it's good style
288* Make sure "MAXPATHLEN" (bsd) is always spelled "PATH_MAX" (posix)
289* Fix while as suggested by clang
290* Re-comment translate_user_input() based on suggestion by ce
291* Move add_wait_prompt() to a new home
292* Fix whoreply() as suggested by clang
293* All of the below were suggested by clang.
294* Fix set_screens_current_window() and search_for().
295* Fix a "use-after-free" when realloc() fails
296* Fix or paper over string-overruns for a malformed globs
297* Fix a memory leak when opening a compressed file fails
298* Fix a corruption of from_server in vsyserr()
299* Check the param to denormalize_string()
300* Slurp_file shouldn't call stat() or check its retval
301* Denormalize_string() should check its param
302* And so should p_killmsg(), and dishonor kill msg if its malformed.
303* Fix /while, /topic, and $repeat() in case of malformed arguments
304* All of the above were suggested by clang
305* More fixes suggested by clang that I'm too annoyed to list out.
306* Even more fixes suggested by clang (most related to theoretical null derefs)
307* Even more fixes...
308* Rewrite /window move and /window move_to to make clang happy
309* One final batch of updates by clang....
310* Rewrite lastlog moving funcs to use windows ptrs instead of refnums (caf)
311* EPIC5-1.1.5 released here (Gallimaufry) (Commit ID: 1683)
312* Add /QUEUE -RUNONE
313* Caf and jm confirmed that ircu doesn't use 307 for USERIP any more.
314* ignorectl(DELETE) is not silent and it should be.
315* To satisfy fedora packaging rules, accept DESTDIR for 'make install'
316* Many printf() format fixes (caf)
317* Many changes clang suggested
318* Fix "topicbar" script to double quote "s for now.
319* Fixed-skipped windows don't get channels from /window kill (unless no choice)
320* Add $windowctl(REFNUMS_BY_PRIORITY) to give you windows by current-ness
321* Add /lastlog -reignore (ce)
322* Add $logctl(NEW)
323* Add $logctl(LAST_CREATED)
324* EPIC5-1.1.6 released here (Kakorrhaphiophobia) (Commit ID: 1693)
325* Begin a big project to decouple status bar generation from window refresh.
326* Create $status_oneoff() which lets you press a status bar on the fly.
327* Fix configure and the build so it works with ruby 1.8/1.9/2.0
328* Update the help script to work with the new website (credit <fill in here>)
329* Make many changes based on suggestions by clang and scan-build
330* Make the configure checks for ruby support more ruby executable names
331* A few minor changes to the history.rb script for no reason
332* Add /input -- to end arg processing so your prompt can start with hyphen
333* Fix a typo bug that kept the correct status bar from being regen.
334* Fix another issue with /window server that caused status not to be updated
335* Add a VERY TEMPORARY /debuglog command for my use.  Will go away soon!
336* Fix status bar update problems (sigh)
337* Update status bar from set_server_005s, so %G updates right away. (caf)
338* Larnifications for incoming nicknames (caf)
339* Add %{4}S status bar expando, always returns full "itsname"
340* When checking Maildir for /set mail 1, ignore subdirectories (rb zlonix)
341* Change string_fgets() to return the number of bytes read
342* Always check servers at startup, even if user did -S.
343*   (They might have done /server in their startup)
344* Change file_size() to use normalize_filename().
345* This allows MAILDIR to support ~-expansion (ie, ~/Maildir)
346* The sender can be omitted (such as with "NOTICE AUTH"), so don't check those
347* New xmsglog script from zlonix
348* Fix trimming support for $xform().  Plus, FISH should do trimming. (rb zlonix)
349* Fix maildir support for /set mail 1 (help by zlonix)
350* Update tabkey.ce from fudd
351* Update xmsglog from zlonix
352* Two new scripts, sasl_auth and idlealert from zlonix.
353* EPIC5-1.1.7 released here (Kainotophobia) (Commit ID: 1705)
354* Updated massmode from zlonix.
355* All the stuff below are round 1 utf8 support for input line
356* New file, wcwidth.c, utf8<->unicode conversion, unicode column counting.
357* Revamp /INPUT system to be utf8 aware.  callback 2nd arg is now const.
358* Specifically, save the state of the input line across /INPUTs.
359* -- This is stub code. needs to be completely fleshed out.
360* Reformat keys.c so I can work with it easier
361* Only bytes < 127 can now participate in binds.  >= 128 are SELF_INSERT.
362* I think the keybinding system can grow 'namespaces' which might be cool.
363* The TRANSPOSE_CHARACTERS keybinding has passed away quietly.
364* New keybinding DEBUG_INPUT_LINE to help me
365* Revamp the edit_codepoint() system to work with unicode code points
366* Screen input now collects bytes until it gets valid utf8 code points.
367* Collect all of the input line data structures into Struct InputLine
368* Give each screen it's own inputline with an eye towards stacking them.
369* The ability to 'fake' input in dumb mode has passed away quietly.
370* Completely revamp input.c to work with inputline data structure
371* Change input line so users operate on "logical characters"
372* Inputline data structure maps "logical characters" to bytes in input buffer.
373* It's almost too overwhelming to describe specific details.
374* Basically the input system accepts unicode code points, and stores in utf8.
375* Things like cursor movement, column counting, side scrolling all Just Work.
376* Even things like cut buffering work.
377* HOWEVER -- it seems this stuff doesn't work in GNU screen. can't fix this. :/
378* Internal function strext2() allows me to cut substrings out, for input buf.
379* Fix input_delete_character(), it forgot to call retokenize_input()
380* Fix term_inputline_putchar() so it doesn't mangle 0x9b (valid utf8 char)
381* Fix $curpos(), sort of.  Does this return byte offset or column offset?
382* 	It used to be the same, but now it's not!
383* InputLine.buffer_pos isn't used any more.  Whack that.
384* Test every keybinding, fix the ones that are broken.
385* Fix handling of highlight chars
386* Add "number_of_logical_chars" to input line so we can boundary check eol.
387* Error if you try to /bind a high bit char -- that's illegal now.
388* Test and fix composed characters (for mac os x)
389* Teach the normalize_string, prepare_display, and output_with_count about utf8
390* Since utf8 parsing is "consumptive", some utility funcs changed too
391* Column counting/line wrapping in the display works correctly now.
392* Fix read_color_seq().
393* ... again.
394* Fix screen prompts so they can recurse, and restore previous state!
395* Fix line wrapping bug that zlonix found.
396* Get column counting working for the status bar (rb zlonix)
397* Re-implement /input -noecho
398* Create a utf8 string checker
399* Add "encoding=<stuff>" flag to /server descriptions to act as default.
400* EG, /server host=irc.foo.com:encoding=ISO-8859-1
401* Run every non-utf8 string from the server through iconv using def encoding
402* Extend $chr() to accept U+xxxx strings
403* Add function $unicode() converts input into U+xxxx strings
404* Add recode.c, to hold stuff regarding /ENCODING and encoding xlates
405* New command, /ENCODING, declare encodings for targets. only "console" now.
406* Translate user input via /encoding console setting, defaults to utf8.
407* Translate screen output to /encoding console setting
408* Non-utf8 users now appear as utf8 users to irc!
409* UTF8 users now appear as non-utf8 users to non-utf8 epic users!
410* Automatically recode undeclared non-utf8 scripts using /encoding scripts
411* Add Emojis (unicode 6) to the column counting code (rb Kitambi)
412* Set /ENCODING CONSOLE automatically to nl_langinfo(CODESET) from LC_ALL.
413* If the default codeset is "US-ASCII" then it's changed to ISO-885-1.
414* In translate_user_input() try to detect utf8 typers using non-utf8 encodings
415* Tell user if we're recoding a script at /load time.
416* Fix slurp_elf_file() it was leaving a 0xFF at end of file, confusing /load
417* Don't bind ^T to non-existing TRANSPOSE_CHARACTERS keybinding.
418* Bump MAXPARA from 15 to 20 for RusNet
419* Fix the UTF8 detector for user input
420* Fix cursor left when switching zones to the left.
421* Allow /set word_break to include high bit code points (rb fusion)
422* To work around RusNET, forgive truncated utf8 sequences at the end.
423* Fix /server , so it doesn't null deref.
424* Add /lastlog -this_server and /lastlog -global for zlonix.
425* Fix $windowctl(NEW) by forbidding status updates during window creation.
426* Default /ENCODING CONSOLE to the user's locale, not to utf8.
427* Re-implement /set allow_c1_chars for input line, display prep, and output.
428* Fix diagnostic output of /encoding
429* Comment out some stuff in term.c that isn't being used.
430* Re-implement status repeat-char-fill for utf8. (rb fudd)
431* Fix /xtype -l to be UTF-8 aware. (rb zlonix)
432* When status updates are suppressed, make a note if an attempt is tried
433* When status updates are permitted again, do an update_all_status() if defered
434* Make /set lastlog do a scrollback redraw to "dispose" of extra lines
435* Make /set lastlog refuse to set to a value < twice the biggest window.
436* However, doing /set lastlog 0 WILL delete everything and clear every window.
437* Have configure auto-detect your "local" directory (/usr/local|opt|/usr/pkg)
438* Have configure use the auto-detected local directory.
439* Reformat some parts of server.c
440* Change the current window whenever we're processing server stuff.
441  -- This was withdrawn because it was very unpopular.
442* Don't allow /window lastlog to set the lastlog too low.
443* Add support for ITALICS (^P) (\020), including ITALIC keybinding.
444* Add support for 256 colors.  I should document all changes but i don't wanna
445* Document all the places where encoding translation should happen.
446* De-harshen some comments I wrote 20 years ago in anger.
447* Fix colors with high bit set. (rb Hellfire)
448* Change ^X so it only supports two hex digits 00-FF
449* Fix QUOTE_CHARACTER (^Q)
450* Lots of internal work to implement back-end of /encoding.
451* Add decide_encoding() to evaluate rules and pick one for non-utf8 stuff.
452* Add serverinfo_matches_servref() internal to decide if (si) works for a serv.
453* Add outbound_recode() internal to translate messages we're sending out
454* Add inbound_recode() internal to translate messages received from irc.
455* Add recode_with_iconv_t() internal function for the above.
456* Rewrite (inbound_recode()) privmsgs, notices, topics, all this good stuff
457* Rewrite (outbound_recode()) msgs, notices.
458* Withdraw the /server -encoding feature.
459* Add /xdebug recode to debug recoding rules.  Help you help me!
460* Review the recode code and leave comments for future improvement
461* Don't allow the user to delete the magic recode rules.
462* Fix $tobase(<base> 0) to always return 0 instead of empty string.
463* Fix $"", caused by accumulator in translate_user_input not being cleaned.
464* Fix bug with /encoding found by zlonix.
465* Make serverinfo_matches_servref() honor 005 NETWORK value.
466* Add /encoding support for 311, 314, 322, 332, and 352 numerics (*gulp*)
467* Leave notes to add support for outbound topic/kick/part/etc.
468* Add /encoding support for CTCPs (reported by zlonix)
469* Fix /encoding support for PARTs (found by zlonix)
470* Add /encoding support for outbound KICKs/TOPICs/etc
471* Create internal rfc1459_any_to_utf8 to preprocess before parse_server().
472* Tokenize recode rule "target" at create time instead of every evaluation
473* This is part of a larger code cleanup for recode.c
474* Remove the per-message handling for /encoding since it's done globally now.
475* Change vsend_to_aserver so it does recoding.
476* This means outbound doesn't honor /set translation any more
477* This requires send_to_server_with_payload() since payloads already recoded
478* Fix typo causing payload not to be recoded properly.
479* Missing a break. d'oh.
480* Outbound messages should not be recoded if they're already utf8.
481* Yes they must be! duh.  Square all this away with zlonix.
482* Fix send_text so it doesn't send non-utf8 text through /on send_msg
483* Finnese invalid_utf8str() so it doesn't truncate partial cp's for non-utf8s
484* Warn if we try to do double-outbound-recoding
485* Be more sensible about handling string lengths in vsend_to_server()s.
486* Add $^*var to 'quote everything' (except letters and digits)
487* When recoding inbound, move server|payload part out of buffer first.
488* Don't double decode the ircname in whoreply.
489* Rewrite strformat() to be utf8 aware.  This fixes $[9]var
490* Rewrite $pad() to be utf8 aware.
491* Allow char-based /set's to hold a utf8 code point (for /set pad_char)
492* Fix typo in check_xdigit() that borked 256 colors
493* Fix $status_oneoff() to repeat with space if status bar is empty string.
494* Don't -1 the line len when passing to prepare_display(); already adjusted!
495* De-confuse ctcp_type and sed_type in the /encrypt stuff
496* Make encryption work again, with encoding (but not with recursive ctcps)
497* Write special handling for (defering) recoding of CTCPs until decrypted
498* Rewrite $left(), $right(), and $mid() to be utf8 aware.
499* Make /FEC utf8 aware.
500* Fix a double recode with outbound ctcps
501* Extend send_text() with a new flag saying if text already recoded
502* Don't double-recode ctcp's!
503* Inbound recoding of CTCPs must happen *before* processing, not afterwards
504* This fixes /encode + /encrypt + /me
505* Convert $strlen() to utf8-aware, many others to follow
506* Add new flag "CTCP_NORECODE" which tells do_ctcp not to recode first.
507* This allows non-encryption ctcps to automatically be recoded.
508* This fixes /me yet again.
509* Create internal cpindex() and rcpindex(), like [r]sindex(), but works on CPs
510* Adjust internal chop() to work on code points.
511* Make a first pass to choke if /encoding argument is not valid locale.
512* Write some more internal CP based functions in wcwidth.c
513* Rewrite/ensure these functions are UTF8 aware:
514	strlen	chop	index	rindex	indextoword	wordtoindex	maxlen
515* Write a half-finished reimplementation of $fix_width() that is commented out
516* Fix rcpindex() when the search char isn't in the string
517* Fix search_for() which makes $before() and $after() utf8 aware.
518* Eliminate usage of internal sindex() -> strchr(), strpbrk(), or cpindex().
519* Rewrite/ensure these functions are UTF8 aware:
520	strip	split	before	after	curpos
521* At startup, create a (locale_t) that points to "en_US.UTF-8" for ctype funcs
522* Create internal mkupper_l and mklower_l to convert codepoints to upper/lower
523* Rewrite internal upper()/lower() to use mk(upper|lower)_l.
524* This makes $toupper() and $tolower() utf8 aware. yay!  And other stuff!
525* Implement internal utf8_strnicmp and use it for my_str[n]icmp.
526* This means things like case insensitive aliases work for non-english! yay!
527* Rewrite/ensure these functions are UTF8 aware:
528	toupper	tolower
529* Add sanity check to next_code_point() to warn if i do something stupid.
530* Revise next_in_div_list to take CP so $[m]sar() can take arbitrary delims
531* Revise substitute_string to handle case insensitivity as utf8 aware.
532* Rewrite/ensure these functions are UTF8 aware:
533	reverse	rest	pass	sar	msar
534* De-emphasize toupper() and tolower(), which are not utf8 aware
535* Comment out $shiftseg() until I learn more about it (needs utf8)
536* Rewrite/ensure these functions are UTF8 aware:
537	center	tr	chrq	insert
538* Rewrite/ensure these functions are UTF8 aware:
539	substr	rsubstr
540* Fix many warnings suggested by the compiler
541* Zlonix updated idlealert, sasl_auth, xmsglog, and added new_lastlog.
542* I had added contrib/utf8.c and regress/test_xform3 regress/test_xform4.
543* Fix many warnings/bugs suggested by clang's static analyzer
544* Add sanity checking for encodings, so we can warn the user
545* Specifically check the locale encoding for sanity, use ISO-8859-1 as fallback
546* Warn the user if /encoding encoding is unusable -- and don't switch over.
547* Put in references to two wiki pages I need to document
548	http://epicsol.org/encodings_and_locales
549	http://epicsol.org/encoding
550* Server names can contain '*'s. (rb zlonix)
551* Fix /topic when you don't supply a channel (rb zlonix)
552* EPIC5-1.1.8 released here (Atavistic) (Commit ID: 1775)
553* Fix from freebsd to avoid checking yes(1) as ruby executable in configure
554* Create functions to enumerate what should be documented in wiki
555* This is exposed via undocumented $help_topics() function.
556* Explicitly set LC_NUMERIC to "C" because otherwise math parser breaks
557* Reset /window activity when a window becomes current (as in /window notified)
558* Create stub for $encodingctl(), and spec it, but not implemented yet.
559* Create internal time_since_startup() function (for eventual load logging)
560* recode.c needs to include <xlocale.h> because of newlocale(3).
561* Add new "source" flag to recode rules, to tell user where rule came from.
562* Implement $encodingctl().
563* RecodeRule->magic wasn't being set correctly.
564* Output the recode rule refnum for /encoding
565* Rewrite internal fix_string_with(), with new chop_[final_]columns() funcs.
566* Extend $fix_width() to support 'c'enter and 'r'ight justify, and UTF8 aware.
567* EPIC5-1.1.9 released here (Desquamation) (Commit: 1780)
568* Fix compile error in function_help_topics
569* EPIC5-1.1.10 released here (Desquamation) (Commit: 1781)
570* Updated sasl_auth (v1.2) from zlonix
571* Fix input lines being blank on non-main screens (set output_screen)
572* Fix not being able to chain /INPUT's together (reset input line before callb)
573* DO NOT set the window when handling server (very unpopular)
574  (* Change the current window whenever we're processing server stuff.)
575* Rewrite add_window_to_screen/remove_window_from_rewrite
576* Rewrite recalculate_windows.
577* This fixes screen corruption when creating wins or shrinking your screen.
578* Fix a bug where UPDATE_STATUS could get ignored (introduce FORCE_STATUS)
579* Remove /set translation and all its stuff.
580* Don't unforce the status bar until it's actually been redrawn.
581* Set a window's screen before hiding it on /window new_hide (rb fusion)
582* Fix rogue semicolon.
583* Fix a null deref in creating new window when all other windows are fixed
584* Fix some bugs that clang static analyzer found
585* Fix where /set -continued_line led to strange denormalize behavior (rb Tilt)
586* Add tmux support for /window create, (zlonix)
587* Fix all calls to iconv() so they follow standard (2d arg -> (char **))
588* Revamp do_crypto() to recode messages after decryption.  Somehow missed this
589* Add comments to various functions that I think deserve it.
590* Windows added to screens must have their "my_cols" set!
591* Add support for detecting iso2022-jp for fusion (Japenese non-utf8 encoding)
592* Plaster over two lame clang warnings in if.c so i don't have to look at them.
593* Don't #include "wcwidth.c" from ircaux.c, compile on its own
594* Make next_code_point() self-synchronizing; callers doesn't have to handle err
595* Update for topicbar from zlonix (rename topicbar.purge -> datapurge)
596* Modify next_code_point() to allow re-syncing or error reporting.
597* This fixes a bug where invalid_utf8string was broken (rb zlonix)
598* Adjust the wrapping point for long lines without breaks (rb fudd)
599* Remove /set default_script_encoding (superceded by /encoding scripts)
600* Remove /set high_bit_escape (superceded by /encoding console)
601* When i rewrote recalculate_windows() forgot to call window_check_columns()!
602* $read() will using /encoding scripts to convert non-utf8 strings. (temp!)
603* Fix next_code_point() to skip bytes, not increment them (fusion)
604* Don't permit /set no_control_log to overrule mangling
605* Improve the warning for /set dcc_use_gateway_addr for ipv6 only conns
606* Don't use/require /hostname to be set for /server connections, (rb stygian)
607* Fix connecting to server w/o vhost (caused by previous commit)
608* Fix a crash with ^L when there is a dead screen (rb zlonix)
609* Fix a crash with /window create (rb zlonix)
610* Do not allow add_to_log() to be recursive, an invalid rewriter can cause
611  [error] output, leading to infinite recursion (rb tjh)
612* BTW, to do timestamping in logfiles, try
613  /@logctl(SET 2 REWRITE "\\($strftime(%b %d %X)) $$0 $$1-")
614* Add $windowctl(REFNUMS_ON_SCREEN <winref>) to get all wins in screen order
615* Fix configure check for socks5 (binki at gentoo dot org) -- Thanks!
616* If after resize, scrolling view is "too high", do an /unclear (rb desaster)
617* Get_subarray_elements (ie, /foreach) does NOT honor "type" arg and it should
618* This fixes /foreach -cmds i {....}.  Odd that nobody noticed this...
619* Allow ~'s in nicknames because ircnet permits it.   (rb Harzelien)
620* New sasl_auth script from zlonix
621* Add recoding support (ie, UTF8 support) to send/recv msgs from /exec procs.
622* Don't whine that your irc hostname is invalid until /dcc fails because of it.
623* Fix null deref when looking up a variable that exists but not as a variable
624* Fix recoding /exec's by having the "target" be "%<name>", like /msg works.
625* Don't let /ignore hop msgs cover up /ignore #epic joins
626* Allow ` in nicknames for ircnet. (caf)
627* Two scripts from zlonix, scripts/user_list scripts/tmux_away
628* Fix build on systems without <xlocale.h>, newlocale() [FreeBSD-8]
629* Rewrite target_file_write() to support the expected syntax
630* Rewrite $write() and $writeb() to use new target_file_write() properly.
631* Remove frivolous fprintf()s to stdout.
632* These features were suggested by Roca He, who is doing a research project
633  on inproper OpenSSL API usage by open source software.
634* Output the SSL protocol upon connect (SSL_get_version())
635* Call SSL_CTX_load_verify_locations() to load root CAs.  Need to /set-ify this
636* Call SSL_get_verify_result() to validate certs whenever possible.
637* Extend /on ssl_server_cert with $4=SSL_get_verify_result()
638* Extend /on ssl_server_cert with $5=SSL_get_version()
639* Refactor ssl_connected() with comments and clarity.
640* Fetch a SSL server's certificate (including subject, issuer, pkey, and digest)
641* Extend /on ssl_server_cert with $6=SSL digest (+URLified))
642* Someday, we'll save the ssl_certificate and cert_hash in the server struct
643* Someday, we want ssl.h to save all the metadata, for non-servers.
644* Add new argument "snap" to add_timer(), for determining initial timeout.
645* Updated tmux_away, userlist script (zlonix)
646* Fix bug in target_file_write() not properly handling @W/@L/@ref
647* Refactor the timer subsystem with comments and clarity
648* Add /TIMER -SNAP which allows you to run timers "at the top of the interval"
649* Make /timer option processing similar to other commands
650* Add comments to make the timer API more clear and robust.
651* Revamp add_time() to add snapping, and handle updating better
652* Add /SET SSL_ROOT_CERT_LOCATION to pass to SSL_CTX_load_verify_locations
653* Add script 'find_ssl_root_certs' which sets SSL_ROOT_CERT_LOCATION for you.
654* Have 'find_ssl_root_certs' loaded by 'global'
655* Fix very many warnings recommended by clang.
656* Use X509_verify_cert_error_string() to get SSL verification explanation
657* Revamp /load find_ssl_root_certs after discussions with folks.
658* Signficantly revamp ssl.c, to make clearer, and save metadata of connection
659* This is so in future, $serverctl() may provide SSL info to user/script.
660* Create $serverctl(GET refnum SSL_<*>) operations for SSL info (see UPDATES)
661*	CIPHER	VERIFY_RESULT	PEM	CERT_HASH	PKEY_BITS
662*	SUBJECT	SUBJECT_URL	ISSUER	ISSUER_URL	VERSION
663* New function $chankey() -- similar to $key(), but can specify servref.
664* Support inbound recoding of dcc chat messages.
665* (Outbound recoding of dcc chat messages was already supported)
666* This means that dcc chat (including ctcp-over-dcc) is now utf-8 aware.
667* This concludes the UTF-8 project.  EPIC5 is now fully UTF-8 aware.
668* Change /set ssl_root_cert_file to /set ssl_root_cert_location
669* Change default ^X binding back to SWITCH_CHANNELS
670* Add a callback to /set ssl_root_cert_location to help with auto-detecting
671* Don't /load find_ssl_root_certs by default, since it's auto-detected
672* Updated 'layout' script from zlonix.
673* This means /set -ssl_root_cert_location uses openssl default suggestions
674* For crypt.c and crypto.c, "key"->"password" for passwords
675* For crypt.c and crypto.c, "key"->"crypt" for crypt struct objects
676* Remove #ifdef HAVE_SSL's in crypt.c, because ssl is required now.
677* Change crypt's primary key to be target only, not target+crypt type
678* Add /encrypt -remove to remove an entry more simply
679* Make errors for string transformations and ctcp encodings more verbose
680* EPIC5-1.1.11 released here (Lucubrations) (Commit: 1810)
681* Use pending-nickname if we have one as the default nickname on reconnect (caf)
682* Add @serverctl(SET refnum UMODE ...) to overrule reconnect umodes
683* Handle /SET -SSL_ROOT_CERTS_LOCATION in set_root_certs_location (caf)
684* Eliminate some avoidable uses of strcpy/strcat/sprintf for the pedantic.
685* Move the uncompleted wishlist items to the web-based wishlist
686* Signficantly rewrite the shebang (-S) command line option to remove strcpy()s
687* Increase the padding for SHA256 xforms to avoid a buffer overflow (caf)
688* -- I switched to git here --
689* "Make install" modified permissions in the tree. Ew. Take that out.
690* EPIC5-1.2 released here (Deracination) (Commit: 1816)
691* Always #define UNAME_HACK; don't return detailed OS info on CTCP VERSION
692* OK, a compromise -- don't #define UNAME_HACK, but don't show OS version.
693* Fix a crash when you do $splitw("" abcd)
694* Make sure /encoding shows a builtin rule is "Set by User" if user changes it
695* Internal function new_split_string() is like split_string() but utf-8 aware
696* Rewrite $splitw() to use new_split_string(), so it's utf8-aware! yay!
697* Fix warnings about libarchive and abs() from clang
698* Fix warnings from ubuntu as a special favor to wjr.
699* I can't believe it's so difficult to believe "I don't care if this fails"
700* More complier warnings from gcc-4.9
701* Final compiler warning, from openbsd this time.
702* Lots of OS's and compilers checked.  Looks good!
703* Final warning fixed!
704* Refuse to recurse more than twice in send_text() to avoid infinite recursion
705* Fix crash if you try to clear an /encoding rule that doesn't eixst.
706* Refactor deleting a recode rule into a func and have everyone use it (rb des)
707* "Valid UTF8" requires something other than a broken code point at end (rb des)
708* Treat ^C99 as a bare ^C, because of other clients (rb wuf)
709* Turn #define use_automargins on for now
710* Add /SET FIRST_LINE which will be prefixed to all lines of output.
711* Do a term_clreol() at the START of output, not the end
712* This allows us to write to the last column of the display!
713* Just /set -continued_line and /set first_line @ (or whatever)!
714* You _MUST_ use an automargin TERM (ie, export TERM=vt102am) for this to work
715* EPIC5-1.4 released here (Sententious) (Commit: 1833)
716* Fix null deref when you used an implied unary operator in expression stmt.
717* Fix call stack dumping, which was missing a frame, null derefing (caf)
718* Add /on raw_irc_bytes for caf - raw, unfiltered data from server
719* Fix dcc resume (caf)
720* Be reasonable handling DCC ACCEPTs where DCC RESUME was not requested (caf)
721* Fix dcc resume again (caf)
722* Ensure translate_user_input() passes nul terminated string to n_c_p (caf)
723* Fix memory leak with sanity_checking_encoding() (caf)
724* Fix memory leak with bind_string_comporess() (caf)
725* Fix $bindctl(SEQUENCE .. SET ..) when find_sequence() fails (caf)
726* Below two items were reported by Felix Janda
727* Musl C library (for linux) doesn't support sys_siglist, and our shim fails
728* Don't require sys_siglist to be present to build epic; just remove features
729* Eventually I'll build something into epic to do this at startup.
730* Fix clueless function get_all_server_groups() (rb ce)
731* Proper signal numbers start with 0. (0 is permitted by some systems) (fj)
732* Fix preserve_serverinfo() when the hostname is an ipv6 paddr.
733* Deprecate the use of strformat() which can't count columns correctly
734* Add truncation to fix_width(), to allow the below...
735* Fix $[len]var to use fix_width(), for well-defined behavior (see UPDATES)
736* Fix $pad() to use fix_width(), for well-defined behavior (see UPDATES)
737* Hide all the SSL debugging chatter behind /xdebug SSL
738* Add /window log_rewrite, to overrule /set log_rewrite on window logs
739* Add /window log_mangle, to overrule /set mangle_logfiles on window logs
740* Remove prohibition from /query'ing an exec process that doesn't exist
741* For musl libc (linux), eliminate use of sys_siglist and sig.inc.
742* Roll our own signal names at runtime (ie, SIGHUP -> "HUP")
743* This fixes /exec -SIGNAL %process.
744* Support iconv()s that don't support //TRANSLIT (Felix Janda)
745* Fix /load guh, it had an old-style C comment
746* Eliminate LocalHostName in favor of LocalIPv(4|6)HostName
747* If your Vhost does not resolve in the family you're using, use fallback
748* Use the protocol-specific vhost when registering with the server
749* The following fixes make /load ../regress/func work again
750* Fix a crash with $after(1).  There are more bogons downwind here.
751* Fix cpindex() and rcpindex() which fixes $index() and $rindex().
752* Fix $tr() to behave the way it is documented
753* Change transform_string_dyn() to return the bytes in retval, not it's size
754* -- I hope this doesn't break anything else!
755* EPIC5-1.6 released here (Usufruct) (Commit: 1854)
756* Remove non-utf8 characters (rb Felix Janda)
757* These bug fixes from caf
758* Report getsockopt() errno and result in the right order (caf)
759* Prevent memory leak after /DUMP (caf)
760* Fix a memory leak in $bindctl(SEQUENCE .. SET ..) (caf)
761* Fix memory leak caused by $open(file R) when file is executable (caf)
762* Fix memory leak in /ASSIGN <name> (caf)
763* Fix memory leak in $close() (caf)
764* Stop looping in $delitem() after the entire array is deleted (caf)
765* When deleting the only item in an array, $delitems() should return 0 (caf)
766* Thanks to caf for his bug hunting and fixing! :)
767* Fix false positive memory leak from using VALGRIND_MEMORY_TRIM (caf)
768* Fix false positive memory leak deleting local variable stack at exit (caf)
769* Fix memory leak when deleting server (caf)
770* At the request of gentoo, the following patches and requests...
771* Change highlight chars (^V) to #def's (REV_TOG_STR) because file(1) is weak
772* Fix tcl, ruby, perl, libarchive support to be more gentoo friendly (binki)
773* (We had already applied their socks patch a long time ago)
774* Remove 'localhost' from IRCSERVERS default list - default is efnet now.
775* The patches were for autoconf-2.60, so some changes were made
776* End changes requested by gentoo
777* Fix to make --with-localdir more gentoo friendly (binki)
778* Fix to make parallel builds work better for gentoo (binki)
779* Make /set logfile behave more like /log filename (see UPDATES)
780* Make /window logfile behave more like /log filename (see UPDATES)
781* Ooops.  Should have tested that better.
782* EPIC5-1.8 released here (Perlustration) (Commit: 1862)
783* Fix memory leak with closing ssl cnnections (caf)
784* Fix memory leak with servers that never get connected (caf)
785* EPIC5-2.0 released here (Gamboling) (Commit: 1864)
786* Call setgid() before setuid(), for best practice (caf)
787* Fix off-by-one error with printing OpenSSL strings (caf)
788* Don't output the full SSL certificate for a server (caf)
789* When (re-)connecting, use the hardcoded server description nick (rb larne)
790* Fix utf8_strnicmp(), which broke $uniq() (robo, caf)
791* Fix null deref when a server has no CA (caf)
792* Remove a couple of unused variables in ssl handling (caf)
793* Fix crash when you $close() an fd from $exec() [rb CE]
794* Reformat all the ./configure --help outputs [rb skered]
795* EPIC5-2.0.1 released here (Indolence) (Commit: 1869)
796* Revamped maildir support to count both 'new' and 'cur' (wcarson)
797* Optimize maildir support so it's as fast as possible (wcarson)
798* Fix uninitialized pointer of window->log_rewrite (rb Q)
799* Fix handling of <locale.h> for CentOS 5.11.
800* new_timer() should initialise ->domref (caf)
801* Remove unnecessary window->screen check in hide_window() (caf)
802* Remove double-setting of *outbound in check_recoding_iconv() (caf)
803* banner() should use %d for printing current_numeric (caf)
804* inet_vhostsockaddr() should use %d to print port (caf)
805* Simplify expression in show_key() (caf)
806* Remove doubled-up SIGABRT from init_signal_names() (caf)
807* In transform_string_dyn() don't use my_dest_str_len without testing for NULL (caf)
808* Make output size check more robust in fish64_encode() / fish64_decode() (caf)
809* Remove unused function slurp_file() (caf)
810* Fix $ignorectl(WITH_TYPES ...) when only exceptive ignores are supplied (caf)
811* Remove unnecessary double-setting of window_display (caf)
812* Loosen overly-tight restrictions from $hookctl(SET .. SERIAL) and $hookctl(SET .. NICK) (caf)
813* Fix /USLEEP for fractional second delays (caf)
814* Add ( ) around constants declared as macros using shift operator (caf)
815* Include output.h in compat.c for yell() (caf)
816* Don't lower-case the channel name passed to whobase() (caf, rb white)
817* Only populate server->uh_addr when it's needed, to avoid spurious warning
818* Extend new_close() to new_close_with_option() allowing callers to manage fd
819* This is used for python fd handling.
820* Make new_io_event() actually support NEWIO_NULL (no io callback)
821* Python support merged into 'master' here.
822* Add new_open_failure_callback() which allows getting a callback on dead fd.
823* Add %{1}P status bar variable, "prefix when (not) current" (see UPDATES)
824* Add /set status_prefix_when(_not)_current variables, default to empty string
825* Add /window status_prefix_when(_not)_current operations, default to nothing
826* Convert CTCP data structures from static arrays to a bucket
827* Initialize hardcoded CTCPs at boot time
828* Guard against null deref when changing lastlog and/or scrollback at same time
829* Overhaul ctcp.c so there are no more magic integers used as foreign keys.
830* Fix a core and leak to do with /userhost and /ison queues (ce)
831* Revamp/unify do_ctcp() and do_notice_ctcp() to reduce code duplication
832* Change send_ctcp() to take a boolean int rather than a string for first param.
833* Simplify the CTCP flags to just "ordinary" and "special", with "raw" (or not)
834* CTCPs are "raw" if they need the original payload, or not if payload is string
835* CTCPs are "special" if they handle everything themselves (/me, /dcc)
836* Enforce anti-botnet CTCP reply flooding on the /CTCP side, not request side
837* (That way, CTCPs that don't generate responses are not throttled)
838* Implement $ctcpctl() to register user-defined ctcp handlers. (see UPDATES)
839* Add $ctcpctl(ALL) for CLIENTINFO purposes.
840* Create /load ctcp, some basic CTCPs implemented in script
841* Make /load builtins do a /load ctcp
842* Comment out some basic CTCPs from the base client -- yay!
843* Treat empty return strings from ctcp handlers as "not handled"
844* Initialize status.prefix_when_(not_)current in new windows.
845* Create a distinction between CTCPs that replace their bodies and themselves
846* via $ctcpctl(SET <type> REPLACE_ARGS 0|1) [see UPDATES]
847* Rewrite CTCP PING handler, create CTCP UTC handler
848* Fix ipv6 p-addr vhosts for /server (rb wcarson)
849* Add /exec -wintarget, output to any old window (rb wcarson) (caf)
850* EPIC5-2.1.1 released here (Abulia) (Commit: 1898)
851* Improve perl support (remove warnings) (caf)
852* The : before final param is part of the syntax, not the message (caf, rb trn)
853* Fix bug in previous patch
854* Don't include <term.h> unless it's needed, because of ruby-2.7 support
855* Modernize ruby support while we're at it (checked with 2.3/2.6/2.7)
856* Add "passthrough read|write" support to newio, for python.
857* Change python's "epic.xecho" to not default force -s by default
858* Change python's @on decorator do a ^on so it's silent
859* Fix a couple of compiler warnings suggested by new clang.
860* Add _epic.callback_when_readable and _epic.callback_when_writable for python
861* They take a python callback, and dispatch when an fd is ready.
862* This allows python scripts to submit an fd for callback with newio.
863* Call PyErr_Print() on an exception.  This is "noisy", but i needed it for debug.
864* Eventually we have to be able to do this on our own.
865* Add /pyload shortener -- an in-client url shortening redirecting proxy!
866* Capture STDOUT and STDERR from python, redirect to /echo.
867* Pull out the python init code into its own function
868* Don't try to fancy-print exceptions, now that we're capturing stderr.
869* Add count_initial_codepoints() to convert a ptr to something for $mid()
870* Change $regmatches() to use count_initial_codepoints().
871* Fix a dumb warning from clang about pointer arithmetic.
872* Revamp /exec to behave regularly so we can treat %proc as real targetsa (see UPDATES)
873* Add /on send_exec so you can reformat messages being sent to exec procs
874* Add $uuid4() -- it returns UUID4s!
875* Add /exec -nolaunch so you can build an /exec before starting it.
876* Add $execctl() -- see UPDATES
877* EPIC5-2.1.2 released here (Lugibrious) (Commit: 1908)
878* Fix count_initial_codepoints() - it couldn't return 0
879* This fixes $regmatches() for wcarson
880* Add /window delete_kill (rb Harzilein)
881* Fix /wait %proc (caf, rb wuf)
882* Fix chmod() to not use ancien S_IREAD/S_IWRITE (S_IRUSR) (rb Tilt)
883* Support /window -<operation> to pass in NULL to window op
884* Seed all window operations with no-op handlers for NULL
885* Don't discard DNS results for server until we get to ACTIVE
886* Add a stub for $inputctl() -- future expansion.
887* Add %{5}S status expando -- the server status (ie, "ACTIVE")
888* Signficant refactoring of server.c/server.h
889* - Change the term "server status" to 'server state" everywhere
890* - Reorganize Server object to show what values are filled in by each state
891* - Make all server.c functions static whenever possible
892* - Remove all server.c functions not used anywhere
893* - Remove all server.h decls not used anywhere
894* - Remove unused variables in Server and other structs
895* - Remove extern server_list[] and make get_server() an ordinary function
896* - Remove extern server_states[] and create get_server_state_str()
897* - Document many more things to make it more understandable
898* - Drive the determination of "ircop" from your umode, not from a variable
899* Add /on server_state to duplicate /on server_status for now
900* Support $serverctl(GET x STATE) to duplicate GET STATUS
901* More refactoring of server.c/server.h ssl support
902* - Remove unused fields and getters/setters
903* - Defer all "is this ssl?" questions to the ssl module
904* - Rename "is_ssl_enabled()" to "is_fd_ssl_enabled()"
905* - Rename "get_server_isssl()" to "get_server_ssl_enabled()"
906* - Remove trying to track ssl enablement separately
907* - Since openssl has been required for a while, remove "ssl is missing" stuff
908* - Avoid setting the server state directly (ie, avoiding /on server_state)
909* If something goes wrong in do_server(), just close_server()
910  - If a server is connected to a window with more addrs, it'll resurrect
911* Add $inputctl(GET|SET CUTBUFFER), manipulate the cut buffer.  See UPDATES
912* Fix /load help.irc - point to correct url
913* Remove some commented out code before release
914* window_next() and window_previous() can accept nulls from SWAP_NEXT_WINDOW
915* Add /window unclear -- why did this not exist?
916* If a Python callback fails, call the except; if that fails, give up on fd
917* /PYDIRECT without args needs a usage message
918* Support /timers with /unload (rb zlonix)
919* New version of epic.py and shortener.py from skully -- he asked for testing
920* Improve the code in vars.c
921* - Change 'flags' to 'pending' since that's all it is used for
922* - Change $symbolctl() to support both FLAGS and PENDING for the symbols
923* - Make get_string_var() return a const ptr so people don't change it
924* - Make make_string_var_bydata() take an (IrcVariable) since that's easier
925* Crank up the warning flags and start addressing things
926* - Add a test in configure for __attribute__((fallthrough))
927* - This allows the use of FALLTHROUGH to shut up warnings.
928* - Improve a lot of const correctness issues
929* - Fix other bogons it pointed out (d'oh!)
930* Fix my_ctime() to honor that ctime() can return NULL.
931* EPIC5-2.1.3 released here (Redound) (Commit: 1926)
932* Fix configure on mac when you do --with-ssl=/path/to/somewhere (rb archon)
933* Fix configure for systems where "gcc" is c99-only
934* Add "verbose" flag to sanity_check_encoding()
935* This is needed in init_encodings() to not output too early. (rb wcarson)
936* Don't make a lack of CP437 locale a boot failure (rb wcarson)
937* A lot of work was done on configure to support macports better.
938* Fix where NSIG was decld in irc_std.h (caf) (rb CE)
939* Add /ON CHANNEL_CLAIM and /WINDOW CLAIM (see UPDATES)
940* Exempt claimable channels from referential integrity checks
941* Add $uuid4(NODASHES) to get uuids without dashes
942* $windowctl(GET x UUID) -- every window has a hash-free UUID now
943* Allow windows to be reffed by their UUID in /window
944* Revamp how channels get claimed (I like this better) to be channel-driven
945* Fix get_window_by_desc() (rb Harzilein)
946* Migrate configure to autoconf-2.69.
947* Round two of getting configure working with 2.69
948* Round three of getting configure working with 2.69
949* Round four of getting configure working with 2.69
950* Get configure to support Python 3.8+
951* EPIC5-2.1.5 released here (Fecund) (Commit: 1945)
952* Add "ssl_checkhost" field to server descriptions
953* Make ssl_startup() require a hostname for ssl hostname checks
954* Add ssl_get_checkhost_status() to return ssl hostname check
955* Fix a place where we don't check the retval of alloca()
956* Remove the "ENCODING" field from server descs which went away long ago
957* Ensure "ssl-checkhost" is preserved through serverinfo changes/updates
958* Perform hostname checking on ssl server connections and abort if failed
959* Change "ssl-checkhost" to "ssl-strict"
960* Make ssl strict checking require both the cert and hostname pass muster
961* Change ssl_info.ssl_fd to "ssl" to confuse me less
962* Check for self-signed certificates and pass it in /on ssl_server_cert
963* Add support for getting SANs out of an SSL certificate (rb wcarson)
964* Add $serverctl(GET x SSL_STRICT_STATUS)
965* Add $serverctl(GET x SSL_SANS)
966* Remove $serverctl(GET x SSL_STRICT_STATUS)
967* Add /on SERVER_SSL_EVAL (see UPDATES)
968* Add /set ACCEPT_INVALID_SSL_CERT (see UPDATES)
969* Remove per-server server "strict status" in server desc
970* Add "accept_cert" per server, to track whether we accept the ssl cert
971* Add $serverctl(GET x SSL_CHECKHOST_RESULT)
972* Add $serverctl(GET x SSL_SELF_SIGNED)
973* Add $serverctl(GET|SET x SSL_ACCEPT_CERT) (see UPDATES)
974* Add /SET SSL_CIPHERS (see UPDATES)
975* I forgot to implement the use of /SET SSL_CIPHERS. oops
976* I made signficant changes, so the above probably obsolete now
977* Create an object (ssl_cert_error)
978* Start tracking *every* ssl cert verification error
979* Treat ssl verification errors as tiered problems
980* ie, self-signed is not as bad as bad-hostname not as bad as others
981* Revamp things like "verify_result", "self_signed", etc to errors
982* ie, verify_error, checkhost_error, self_signed_error
983* Add a new "other_error" and "most_serious_error"
984* Try to emulate the old policy behavior (pending more work)
985* I need to document the flow and /on's and /set's in UPDATES
986* Change $serverctl()s
987* serverctl change: SSL_VERIFY_RESULT -> SSL_VERIFY_ERROR
988* serverctl change: SSL_CHECKHOST_RESULT -> SSL_CHECKHOST_ERROR
989* serverctl change: SSL_SELF_SIGNED -> SSL_SELF_SIGNED_ERROR
990* serverctl change: new: SSL_OTHER_ERROR
991* serverctl change: new: SSL_MOST_SERIOUS_ERROR
992* Reorg ssl.c because it was getting too jumbled to follow
993* Ensure every function is decld static or is in header file
994* Group functions by their subject area
995* Only create on (SSL_CTX) for all global use now
996* Don't bother pretending we support being an SSL server.
997* Create a SSL verification callback that tracks/sorts every error
998* This allows us to catch multiple problems (self-signed, bad hostname)
999* We see multiple errors on efnet, for example
1000* Change find_ssl() to get_ssl_info() so its named after data type
1001* Roll Bad Hostname check into main SSL verification instead of extra step
1002* (OpenSSL discourages you from doing it as an extra step)
1003* I need to review /on ssl_server_cert for sanity and document it
1004* Remove the now superfluous notion of "strict status" checking
1005* Remove the bogus stubs for #ifndef HAVE_SSL since that's not supported
1006* Make widening the screen honor /window scrolladj
1007* Sync all /window operations in tabkey.ce
1008* Re-sort the /window operations list ("claim" was in the wrong place)
1009* Document $json_explode(), $json_implode() and $json_error()
1010* Add winref as $2 in /on channel_lost
1011* Remove tracking of "cursor window", a thing we haven't supported in 25 years
1012* Add support for (arglist) {block} statement type
1013* Add /window clearlevel <levels> (rb zlonix)
1014* The #define DEFAULT_STATUS_HOLDMODE was different from UPDATES and irregular
1015* Fix many things clang's static analyzer pointed out.
1016* Add /on reconnect_required (sb zlonix)
1017* /WINDOW winref SERVER servref should no-op if it's already that way.
1018* Add /window clearregex <regex> (rb zlonix)
1019* When printf()ing (time_t)s, always cast to (intmax_t) and use INTMAX_FORMAT
1020* When processing CTCPs with a script, don't short out /on ctcp or verbse_ctcp
1021* Add $serverctl(GET x PADDR) returns the p-addr of a connected server.
1022* Fix /server + so it correctly rolls over to server 0.
1023* Add $serverctl(GET x OPEN) [don't forget to document this]
1024* Set parsing_server_index around server errors so /timers create correctly
1025* Fix missing else causing all ssl cert's to be accepted
1026* Add support for tilde-expansion for /set ssl_root_certs_location
1027* If a server fd does not map to any server, close it.
1028* Updated version of 'reconnect' from zlonix.
1029* Convert our bundled test.c to be minimal c99 to avoid warnings
1030* Don't permit /reconnect on servers that are actively working
1031* /RECONNECT must not default to the current input window (bah)
1032* Reconnect script should use /server +refnum, not /reconnect
1033* Reconnect script should only do /server + on servers with groups
1034* EPIC5-2.1.6 (1981) (Impignorate) released here
1035