EPIC5 Projects, Bugs, and other Errata: KNOWN ERRATA (eg, bugs, or unresolved requests): ------------------------------------------------ * Need a $shuffle() operator. * /on dcc_raw handling should set message_from() (rb Harz) * The way we handle "screen is not tall enough" underflow needs work * Unify window query and channels in the target list. * Allow /ignore for a nick!user@host but only on a channel * Add /set server_default_type, irc or irc-ssl (rb nick_) * Typing 😂😂😂 to the input line doesn't work right -- This is a screen problem; it doesn't support multi-column unicodes * I don't think /msg @L1 is implemented correctly - check out files.c:file_write for type == 2 * If a window is holding before a resize/rebuild; and it is not holding afterwards (ie, restore_window_positions() goofs), unconditionally reset the hold point to the bottom of the screen (rb zlonix) * Learn how mouse support in xterm works for fusion * [ 2:13PM] ERROR: error:1C80006B:Provider routines::wrong final block length when you do /eval echo $xform("+AESSHA +B64" test 1) [rb zlonix] This is because we're explicitly turning off padding, but I don't know why * Support the idiotic proliferation of chanmodes for users on unrealirc PREFIX=(qaohv)~&@%+ * Allow /echo to defeat word wrap (ie, don't split on words) (rb Harz) * Why does /exec -line {#} ls -l still output something? because pipes are block-buffered, and ls -l output will get broken in the middle of a line, and that ends up being a -linepart {} We need to have a way to handle this. - Line buffering needs a way to "hold" incomplete lines for a moment * Add some way to get the "next notified(activity) window" * Do 24 bit color first EPIC5-3.0 MAJOR PROJECTS ------------------------ 1. Python support that doesn't suck 2. Saving and restoring client state across restarts 3. Robust, no compromises, ZNC support 4. Reboot of /set load_path, /load, and namespaces 5. SQLite support MEDIUM-TERM PROJECTS -------------------- * Need to have a script that implements per-channel FiSH 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" * 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? * /Foreach should work with local variables. It can't right now because of the challenge of indicating which elements are from local variables. * Harz would like a way to do /bind -default for just a single binding. * /PAUSE does not save/restore context, and it should. * /window maximize + new status expando when a zero-height window gets output * Unlimited input buffer with auto-splitting (rb zlonix) [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 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 ) allows you to replace $* in /on. * Add $hookctl(USERINFO ) 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 +) 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 ) 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 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 doesn't clobber with (rb howl) * Add support for /server refnum: 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) * EPIC5-1.1.6 released here (Kakorrhaphiophobia) (Commit ID: 1693) * Begin a big project to decouple status bar generation from window refresh. * Create $status_oneoff() which lets you press a status bar on the fly. * Fix configure and the build so it works with ruby 1.8/1.9/2.0 * Update the help script to work with the new website (credit ) * Make many changes based on suggestions by clang and scan-build * Make the configure checks for ruby support more ruby executable names * A few minor changes to the history.rb script for no reason * Add /input -- to end arg processing so your prompt can start with hyphen * Fix a typo bug that kept the correct status bar from being regen. * Fix another issue with /window server that caused status not to be updated * Add a VERY TEMPORARY /debuglog command for my use. Will go away soon! * Fix status bar update problems (sigh) * Update status bar from set_server_005s, so %G updates right away. (caf) * Larnifications for incoming nicknames (caf) * Add %{4}S status bar expando, always returns full "itsname" * When checking Maildir for /set mail 1, ignore subdirectories (rb zlonix) * Change string_fgets() to return the number of bytes read * Always check servers at startup, even if user did -S. * (They might have done /server in their startup) * Change file_size() to use normalize_filename(). * This allows MAILDIR to support ~-expansion (ie, ~/Maildir) * The sender can be omitted (such as with "NOTICE AUTH"), so don't check those * New xmsglog script from zlonix * Fix trimming support for $xform(). Plus, FISH should do trimming. (rb zlonix) * Fix maildir support for /set mail 1 (help by zlonix) * Update tabkey.ce from fudd * Update xmsglog from zlonix * Two new scripts, sasl_auth and idlealert from zlonix. * EPIC5-1.1.7 released here (Kainotophobia) (Commit ID: 1705) * Updated massmode from zlonix. * All the stuff below are round 1 utf8 support for input line * New file, wcwidth.c, utf8<->unicode conversion, unicode column counting. * Revamp /INPUT system to be utf8 aware. callback 2nd arg is now const. * Specifically, save the state of the input line across /INPUTs. * -- This is stub code. needs to be completely fleshed out. * Reformat keys.c so I can work with it easier * Only bytes < 127 can now participate in binds. >= 128 are SELF_INSERT. * I think the keybinding system can grow 'namespaces' which might be cool. * The TRANSPOSE_CHARACTERS keybinding has passed away quietly. * New keybinding DEBUG_INPUT_LINE to help me * Revamp the edit_codepoint() system to work with unicode code points * Screen input now collects bytes until it gets valid utf8 code points. * Collect all of the input line data structures into Struct InputLine * Give each screen it's own inputline with an eye towards stacking them. * The ability to 'fake' input in dumb mode has passed away quietly. * Completely revamp input.c to work with inputline data structure * Change input line so users operate on "logical characters" * Inputline data structure maps "logical characters" to bytes in input buffer. * It's almost too overwhelming to describe specific details. * Basically the input system accepts unicode code points, and stores in utf8. * Things like cursor movement, column counting, side scrolling all Just Work. * Even things like cut buffering work. * HOWEVER -- it seems this stuff doesn't work in GNU screen. can't fix this. :/ * Internal function strext2() allows me to cut substrings out, for input buf. * Fix input_delete_character(), it forgot to call retokenize_input() * Fix term_inputline_putchar() so it doesn't mangle 0x9b (valid utf8 char) * Fix $curpos(), sort of. Does this return byte offset or column offset? * It used to be the same, but now it's not! * InputLine.buffer_pos isn't used any more. Whack that. * Test every keybinding, fix the ones that are broken. * Fix handling of highlight chars * Add "number_of_logical_chars" to input line so we can boundary check eol. * Error if you try to /bind a high bit char -- that's illegal now. * Test and fix composed characters (for mac os x) * Teach the normalize_string, prepare_display, and output_with_count about utf8 * Since utf8 parsing is "consumptive", some utility funcs changed too * Column counting/line wrapping in the display works correctly now. * Fix read_color_seq(). * ... again. * Fix screen prompts so they can recurse, and restore previous state! * Fix line wrapping bug that zlonix found. * Get column counting working for the status bar (rb zlonix) * Re-implement /input -noecho * Create a utf8 string checker * Add "encoding=" flag to /server descriptions to act as default. * EG, /server host=irc.foo.com:encoding=ISO-8859-1 * Run every non-utf8 string from the server through iconv using def encoding * Extend $chr() to accept U+xxxx strings * Add function $unicode() converts input into U+xxxx strings * Add recode.c, to hold stuff regarding /ENCODING and encoding xlates * New command, /ENCODING, declare encodings for targets. only "console" now. * Translate user input via /encoding console setting, defaults to utf8. * Translate screen output to /encoding console setting * Non-utf8 users now appear as utf8 users to irc! * UTF8 users now appear as non-utf8 users to non-utf8 epic users! * Automatically recode undeclared non-utf8 scripts using /encoding scripts * Add Emojis (unicode 6) to the column counting code (rb Kitambi) * Set /ENCODING CONSOLE automatically to nl_langinfo(CODESET) from LC_ALL. * If the default codeset is "US-ASCII" then it's changed to ISO-885-1. * In translate_user_input() try to detect utf8 typers using non-utf8 encodings * Tell user if we're recoding a script at /load time. * Fix slurp_elf_file() it was leaving a 0xFF at end of file, confusing /load * Don't bind ^T to non-existing TRANSPOSE_CHARACTERS keybinding. * Bump MAXPARA from 15 to 20 for RusNet * Fix the UTF8 detector for user input * Fix cursor left when switching zones to the left. * Allow /set word_break to include high bit code points (rb fusion) * To work around RusNET, forgive truncated utf8 sequences at the end. * Fix /server , so it doesn't null deref. * Add /lastlog -this_server and /lastlog -global for zlonix. * Fix $windowctl(NEW) by forbidding status updates during window creation. * Default /ENCODING CONSOLE to the user's locale, not to utf8. * Re-implement /set allow_c1_chars for input line, display prep, and output. * Fix diagnostic output of /encoding * Comment out some stuff in term.c that isn't being used. * Re-implement status repeat-char-fill for utf8. (rb fudd) * Fix /xtype -l to be UTF-8 aware. (rb zlonix) * When status updates are suppressed, make a note if an attempt is tried * When status updates are permitted again, do an update_all_status() if defered * Make /set lastlog do a scrollback redraw to "dispose" of extra lines * Make /set lastlog refuse to set to a value < twice the biggest window. * However, doing /set lastlog 0 WILL delete everything and clear every window. * Have configure auto-detect your "local" directory (/usr/local|opt|/usr/pkg) * Have configure use the auto-detected local directory. * Reformat some parts of server.c * Change the current window whenever we're processing server stuff. -- This was withdrawn because it was very unpopular. * Don't allow /window lastlog to set the lastlog too low. * Add support for ITALICS (^P) (\020), including ITALIC keybinding. * Add support for 256 colors. I should document all changes but i don't wanna * Document all the places where encoding translation should happen. * De-harshen some comments I wrote 20 years ago in anger. * Fix colors with high bit set. (rb Hellfire) * Change ^X so it only supports two hex digits 00-FF * Fix QUOTE_CHARACTER (^Q) * Lots of internal work to implement back-end of /encoding. * Add decide_encoding() to evaluate rules and pick one for non-utf8 stuff. * Add serverinfo_matches_servref() internal to decide if (si) works for a serv. * Add outbound_recode() internal to translate messages we're sending out * Add inbound_recode() internal to translate messages received from irc. * Add recode_with_iconv_t() internal function for the above. * Rewrite (inbound_recode()) privmsgs, notices, topics, all this good stuff * Rewrite (outbound_recode()) msgs, notices. * Withdraw the /server -encoding feature. * Add /xdebug recode to debug recoding rules. Help you help me! * Review the recode code and leave comments for future improvement * Don't allow the user to delete the magic recode rules. * Fix $tobase( 0) to always return 0 instead of empty string. * Fix $"", caused by accumulator in translate_user_input not being cleaned. * Fix bug with /encoding found by zlonix. * Make serverinfo_matches_servref() honor 005 NETWORK value. * Add /encoding support for 311, 314, 322, 332, and 352 numerics (*gulp*) * Leave notes to add support for outbound topic/kick/part/etc. * Add /encoding support for CTCPs (reported by zlonix) * Fix /encoding support for PARTs (found by zlonix) * Add /encoding support for outbound KICKs/TOPICs/etc * Create internal rfc1459_any_to_utf8 to preprocess before parse_server(). * Tokenize recode rule "target" at create time instead of every evaluation * This is part of a larger code cleanup for recode.c * Remove the per-message handling for /encoding since it's done globally now. * Change vsend_to_aserver so it does recoding. * This means outbound doesn't honor /set translation any more * This requires send_to_server_with_payload() since payloads already recoded * Fix typo causing payload not to be recoded properly. * Missing a break. d'oh. * Outbound messages should not be recoded if they're already utf8. * Yes they must be! duh. Square all this away with zlonix. * Fix send_text so it doesn't send non-utf8 text through /on send_msg * Finnese invalid_utf8str() so it doesn't truncate partial cp's for non-utf8s * Warn if we try to do double-outbound-recoding * Be more sensible about handling string lengths in vsend_to_server()s. * Add $^*var to 'quote everything' (except letters and digits) * When recoding inbound, move server|payload part out of buffer first. * Don't double decode the ircname in whoreply. * Rewrite strformat() to be utf8 aware. This fixes $[9]var * Rewrite $pad() to be utf8 aware. * Allow char-based /set's to hold a utf8 code point (for /set pad_char) * Fix typo in check_xdigit() that borked 256 colors * Fix $status_oneoff() to repeat with space if status bar is empty string. * Don't -1 the line len when passing to prepare_display(); already adjusted! * De-confuse ctcp_type and sed_type in the /encrypt stuff * Make encryption work again, with encoding (but not with recursive ctcps) * Write special handling for (defering) recoding of CTCPs until decrypted * Rewrite $left(), $right(), and $mid() to be utf8 aware. * Make /FEC utf8 aware. * Fix a double recode with outbound ctcps * Extend send_text() with a new flag saying if text already recoded * Don't double-recode ctcp's! * Inbound recoding of CTCPs must happen *before* processing, not afterwards * This fixes /encode + /encrypt + /me * Convert $strlen() to utf8-aware, many others to follow * Add new flag "CTCP_NORECODE" which tells do_ctcp not to recode first. * This allows non-encryption ctcps to automatically be recoded. * This fixes /me yet again. * Create internal cpindex() and rcpindex(), like [r]sindex(), but works on CPs * Adjust internal chop() to work on code points. * Make a first pass to choke if /encoding argument is not valid locale. * Write some more internal CP based functions in wcwidth.c * Rewrite/ensure these functions are UTF8 aware: strlen chop index rindex indextoword wordtoindex maxlen * Write a half-finished reimplementation of $fix_width() that is commented out * Fix rcpindex() when the search char isn't in the string * Fix search_for() which makes $before() and $after() utf8 aware. * Eliminate usage of internal sindex() -> strchr(), strpbrk(), or cpindex(). * Rewrite/ensure these functions are UTF8 aware: strip split before after curpos * At startup, create a (locale_t) that points to "en_US.UTF-8" for ctype funcs * Create internal mkupper_l and mklower_l to convert codepoints to upper/lower * Rewrite internal upper()/lower() to use mk(upper|lower)_l. * This makes $toupper() and $tolower() utf8 aware. yay! And other stuff! * Implement internal utf8_strnicmp and use it for my_str[n]icmp. * This means things like case insensitive aliases work for non-english! yay! * Rewrite/ensure these functions are UTF8 aware: toupper tolower * Add sanity check to next_code_point() to warn if i do something stupid. * Revise next_in_div_list to take CP so $[m]sar() can take arbitrary delims * Revise substitute_string to handle case insensitivity as utf8 aware. * Rewrite/ensure these functions are UTF8 aware: reverse rest pass sar msar * De-emphasize toupper() and tolower(), which are not utf8 aware * Comment out $shiftseg() until I learn more about it (needs utf8) * Rewrite/ensure these functions are UTF8 aware: center tr chrq insert * Rewrite/ensure these functions are UTF8 aware: substr rsubstr * Fix many warnings suggested by the compiler * Zlonix updated idlealert, sasl_auth, xmsglog, and added new_lastlog. * I had added contrib/utf8.c and regress/test_xform3 regress/test_xform4. * Fix many warnings/bugs suggested by clang's static analyzer * Add sanity checking for encodings, so we can warn the user * Specifically check the locale encoding for sanity, use ISO-8859-1 as fallback * Warn the user if /encoding encoding is unusable -- and don't switch over. * Put in references to two wiki pages I need to document http://epicsol.org/encodings_and_locales http://epicsol.org/encoding * Server names can contain '*'s. (rb zlonix) * Fix /topic when you don't supply a channel (rb zlonix) * EPIC5-1.1.8 released here (Atavistic) (Commit ID: 1775) * Fix from freebsd to avoid checking yes(1) as ruby executable in configure * Create functions to enumerate what should be documented in wiki * This is exposed via undocumented $help_topics() function. * Explicitly set LC_NUMERIC to "C" because otherwise math parser breaks * Reset /window activity when a window becomes current (as in /window notified) * Create stub for $encodingctl(), and spec it, but not implemented yet. * Create internal time_since_startup() function (for eventual load logging) * recode.c needs to include because of newlocale(3). * Add new "source" flag to recode rules, to tell user where rule came from. * Implement $encodingctl(). * RecodeRule->magic wasn't being set correctly. * Output the recode rule refnum for /encoding * Rewrite internal fix_string_with(), with new chop_[final_]columns() funcs. * Extend $fix_width() to support 'c'enter and 'r'ight justify, and UTF8 aware. * EPIC5-1.1.9 released here (Desquamation) (Commit: 1780) * Fix compile error in function_help_topics * EPIC5-1.1.10 released here (Desquamation) (Commit: 1781) * Updated sasl_auth (v1.2) from zlonix * Fix input lines being blank on non-main screens (set output_screen) * Fix not being able to chain /INPUT's together (reset input line before callb) * DO NOT set the window when handling server (very unpopular) (* Change the current window whenever we're processing server stuff.) * Rewrite add_window_to_screen/remove_window_from_rewrite * Rewrite recalculate_windows. * This fixes screen corruption when creating wins or shrinking your screen. * Fix a bug where UPDATE_STATUS could get ignored (introduce FORCE_STATUS) * Remove /set translation and all its stuff. * Don't unforce the status bar until it's actually been redrawn. * Set a window's screen before hiding it on /window new_hide (rb fusion) * Fix rogue semicolon. * Fix a null deref in creating new window when all other windows are fixed * Fix some bugs that clang static analyzer found * Fix where /set -continued_line led to strange denormalize behavior (rb Tilt) * Add tmux support for /window create, (zlonix) * Fix all calls to iconv() so they follow standard (2d arg -> (char **)) * Revamp do_crypto() to recode messages after decryption. Somehow missed this * Add comments to various functions that I think deserve it. * Windows added to screens must have their "my_cols" set! * Add support for detecting iso2022-jp for fusion (Japenese non-utf8 encoding) * Plaster over two lame clang warnings in if.c so i don't have to look at them. * Don't #include "wcwidth.c" from ircaux.c, compile on its own * Make next_code_point() self-synchronizing; callers doesn't have to handle err * Update for topicbar from zlonix (rename topicbar.purge -> datapurge) * Modify next_code_point() to allow re-syncing or error reporting. * This fixes a bug where invalid_utf8string was broken (rb zlonix) * Adjust the wrapping point for long lines without breaks (rb fudd) * Remove /set default_script_encoding (superceded by /encoding scripts) * Remove /set high_bit_escape (superceded by /encoding console) * When i rewrote recalculate_windows() forgot to call window_check_columns()! * $read() will using /encoding scripts to convert non-utf8 strings. (temp!) * Fix next_code_point() to skip bytes, not increment them (fusion) * Don't permit /set no_control_log to overrule mangling * Improve the warning for /set dcc_use_gateway_addr for ipv6 only conns * Don't use/require /hostname to be set for /server connections, (rb stygian) * Fix connecting to server w/o vhost (caused by previous commit) * Fix a crash with ^L when there is a dead screen (rb zlonix) * Fix a crash with /window create (rb zlonix) * Do not allow add_to_log() to be recursive, an invalid rewriter can cause [error] output, leading to infinite recursion (rb tjh) * BTW, to do timestamping in logfiles, try /@logctl(SET 2 REWRITE "\\($strftime(%b %d %X)) $$0 $$1-") * Add $windowctl(REFNUMS_ON_SCREEN ) to get all wins in screen order * Fix configure check for socks5 (binki at gentoo dot org) -- Thanks! * If after resize, scrolling view is "too high", do an /unclear (rb desaster) * Get_subarray_elements (ie, /foreach) does NOT honor "type" arg and it should * This fixes /foreach -cmds i {....}. Odd that nobody noticed this... * Allow ~'s in nicknames because ircnet permits it. (rb Harzelien) * New sasl_auth script from zlonix * Add recoding support (ie, UTF8 support) to send/recv msgs from /exec procs. * Don't whine that your irc hostname is invalid until /dcc fails because of it. * Fix null deref when looking up a variable that exists but not as a variable * Fix recoding /exec's by having the "target" be "%", like /msg works. * Don't let /ignore hop msgs cover up /ignore #epic joins * Allow ` in nicknames for ircnet. (caf) * Two scripts from zlonix, scripts/user_list scripts/tmux_away * Fix build on systems without , newlocale() [FreeBSD-8] * Rewrite target_file_write() to support the expected syntax * Rewrite $write() and $writeb() to use new target_file_write() properly. * Remove frivolous fprintf()s to stdout. * These features were suggested by Roca He, who is doing a research project on inproper OpenSSL API usage by open source software. * Output the SSL protocol upon connect (SSL_get_version()) * Call SSL_CTX_load_verify_locations() to load root CAs. Need to /set-ify this * Call SSL_get_verify_result() to validate certs whenever possible. * Extend /on ssl_server_cert with $4=SSL_get_verify_result() * Extend /on ssl_server_cert with $5=SSL_get_version() * Refactor ssl_connected() with comments and clarity. * Fetch a SSL server's certificate (including subject, issuer, pkey, and digest) * Extend /on ssl_server_cert with $6=SSL digest (+URLified)) * Someday, we'll save the ssl_certificate and cert_hash in the server struct * Someday, we want ssl.h to save all the metadata, for non-servers. * Add new argument "snap" to add_timer(), for determining initial timeout. * Updated tmux_away, userlist script (zlonix) * Fix bug in target_file_write() not properly handling @W/@L/@ref * Refactor the timer subsystem with comments and clarity * Add /TIMER -SNAP which allows you to run timers "at the top of the interval" * Make /timer option processing similar to other commands * Add comments to make the timer API more clear and robust. * Revamp add_time() to add snapping, and handle updating better * Add /SET SSL_ROOT_CERT_LOCATION to pass to SSL_CTX_load_verify_locations * Add script 'find_ssl_root_certs' which sets SSL_ROOT_CERT_LOCATION for you. * Have 'find_ssl_root_certs' loaded by 'global' * Fix very many warnings recommended by clang. * Use X509_verify_cert_error_string() to get SSL verification explanation * Revamp /load find_ssl_root_certs after discussions with folks. * Signficantly revamp ssl.c, to make clearer, and save metadata of connection * This is so in future, $serverctl() may provide SSL info to user/script. * Create $serverctl(GET refnum SSL_<*>) operations for SSL info (see UPDATES) * CIPHER VERIFY_RESULT PEM CERT_HASH PKEY_BITS * SUBJECT SUBJECT_URL ISSUER ISSUER_URL VERSION * New function $chankey() -- similar to $key(), but can specify servref. * Support inbound recoding of dcc chat messages. * (Outbound recoding of dcc chat messages was already supported) * This means that dcc chat (including ctcp-over-dcc) is now utf-8 aware. * This concludes the UTF-8 project. EPIC5 is now fully UTF-8 aware. * Change /set ssl_root_cert_file to /set ssl_root_cert_location * Change default ^X binding back to SWITCH_CHANNELS * Add a callback to /set ssl_root_cert_location to help with auto-detecting * Don't /load find_ssl_root_certs by default, since it's auto-detected * Updated 'layout' script from zlonix. * This means /set -ssl_root_cert_location uses openssl default suggestions * For crypt.c and crypto.c, "key"->"password" for passwords * For crypt.c and crypto.c, "key"->"crypt" for crypt struct objects * Remove #ifdef HAVE_SSL's in crypt.c, because ssl is required now. * Change crypt's primary key to be target only, not target+crypt type * Add /encrypt -remove to remove an entry more simply * Make errors for string transformations and ctcp encodings more verbose * EPIC5-1.1.11 released here (Lucubrations) (Commit: 1810) * Use pending-nickname if we have one as the default nickname on reconnect (caf) * Add @serverctl(SET refnum UMODE ...) to overrule reconnect umodes * Handle /SET -SSL_ROOT_CERTS_LOCATION in set_root_certs_location (caf) * Eliminate some avoidable uses of strcpy/strcat/sprintf for the pedantic. * Move the uncompleted wishlist items to the web-based wishlist * Signficantly rewrite the shebang (-S) command line option to remove strcpy()s * Increase the padding for SHA256 xforms to avoid a buffer overflow (caf) * -- I switched to git here -- * "Make install" modified permissions in the tree. Ew. Take that out. * EPIC5-1.2 released here (Deracination) (Commit: 1816) * Always #define UNAME_HACK; don't return detailed OS info on CTCP VERSION * OK, a compromise -- don't #define UNAME_HACK, but don't show OS version. * Fix a crash when you do $splitw("" abcd) * Make sure /encoding shows a builtin rule is "Set by User" if user changes it * Internal function new_split_string() is like split_string() but utf-8 aware * Rewrite $splitw() to use new_split_string(), so it's utf8-aware! yay! * Fix warnings about libarchive and abs() from clang * Fix warnings from ubuntu as a special favor to wjr. * I can't believe it's so difficult to believe "I don't care if this fails" * More complier warnings from gcc-4.9 * Final compiler warning, from openbsd this time. * Lots of OS's and compilers checked. Looks good! * Final warning fixed! * Refuse to recurse more than twice in send_text() to avoid infinite recursion * Fix crash if you try to clear an /encoding rule that doesn't eixst. * Refactor deleting a recode rule into a func and have everyone use it (rb des) * "Valid UTF8" requires something other than a broken code point at end (rb des) * Treat ^C99 as a bare ^C, because of other clients (rb wuf) * Turn #define use_automargins on for now * Add /SET FIRST_LINE which will be prefixed to all lines of output. * Do a term_clreol() at the START of output, not the end * This allows us to write to the last column of the display! * Just /set -continued_line and /set first_line @ (or whatever)! * You _MUST_ use an automargin TERM (ie, export TERM=vt102am) for this to work * EPIC5-1.4 released here (Sententious) (Commit: 1833) * Fix null deref when you used an implied unary operator in expression stmt. * Fix call stack dumping, which was missing a frame, null derefing (caf) * Add /on raw_irc_bytes for caf - raw, unfiltered data from server * Fix dcc resume (caf) * Be reasonable handling DCC ACCEPTs where DCC RESUME was not requested (caf) * Fix dcc resume again (caf) * Ensure translate_user_input() passes nul terminated string to n_c_p (caf) * Fix memory leak with sanity_checking_encoding() (caf) * Fix memory leak with bind_string_comporess() (caf) * Fix $bindctl(SEQUENCE .. SET ..) when find_sequence() fails (caf) * Below two items were reported by Felix Janda * Musl C library (for linux) doesn't support sys_siglist, and our shim fails * Don't require sys_siglist to be present to build epic; just remove features * Eventually I'll build something into epic to do this at startup. * Fix clueless function get_all_server_groups() (rb ce) * Proper signal numbers start with 0. (0 is permitted by some systems) (fj) * Fix preserve_serverinfo() when the hostname is an ipv6 paddr. * Deprecate the use of strformat() which can't count columns correctly * Add truncation to fix_width(), to allow the below... * Fix $[len]var to use fix_width(), for well-defined behavior (see UPDATES) * Fix $pad() to use fix_width(), for well-defined behavior (see UPDATES) * Hide all the SSL debugging chatter behind /xdebug SSL * Add /window log_rewrite, to overrule /set log_rewrite on window logs * Add /window log_mangle, to overrule /set mangle_logfiles on window logs * Remove prohibition from /query'ing an exec process that doesn't exist * For musl libc (linux), eliminate use of sys_siglist and sig.inc. * Roll our own signal names at runtime (ie, SIGHUP -> "HUP") * This fixes /exec -SIGNAL %process. * Support iconv()s that don't support //TRANSLIT (Felix Janda) * Fix /load guh, it had an old-style C comment * Eliminate LocalHostName in favor of LocalIPv(4|6)HostName * If your Vhost does not resolve in the family you're using, use fallback * Use the protocol-specific vhost when registering with the server * The following fixes make /load ../regress/func work again * Fix a crash with $after(1). There are more bogons downwind here. * Fix cpindex() and rcpindex() which fixes $index() and $rindex(). * Fix $tr() to behave the way it is documented * Change transform_string_dyn() to return the bytes in retval, not it's size * -- I hope this doesn't break anything else! * EPIC5-1.6 released here (Usufruct) (Commit: 1854) * Remove non-utf8 characters (rb Felix Janda) * These bug fixes from caf * Report getsockopt() errno and result in the right order (caf) * Prevent memory leak after /DUMP (caf) * Fix a memory leak in $bindctl(SEQUENCE .. SET ..) (caf) * Fix memory leak caused by $open(file R) when file is executable (caf) * Fix memory leak in /ASSIGN (caf) * Fix memory leak in $close() (caf) * Stop looping in $delitem() after the entire array is deleted (caf) * When deleting the only item in an array, $delitems() should return 0 (caf) * Thanks to caf for his bug hunting and fixing! :) * Fix false positive memory leak from using VALGRIND_MEMORY_TRIM (caf) * Fix false positive memory leak deleting local variable stack at exit (caf) * Fix memory leak when deleting server (caf) * At the request of gentoo, the following patches and requests... * Change highlight chars (^V) to #def's (REV_TOG_STR) because file(1) is weak * Fix tcl, ruby, perl, libarchive support to be more gentoo friendly (binki) * (We had already applied their socks patch a long time ago) * Remove 'localhost' from IRCSERVERS default list - default is efnet now. * The patches were for autoconf-2.60, so some changes were made * End changes requested by gentoo * Fix to make --with-localdir more gentoo friendly (binki) * Fix to make parallel builds work better for gentoo (binki) * Make /set logfile behave more like /log filename (see UPDATES) * Make /window logfile behave more like /log filename (see UPDATES) * Ooops. Should have tested that better. * EPIC5-1.8 released here (Perlustration) (Commit: 1862) * Fix memory leak with closing ssl cnnections (caf) * Fix memory leak with servers that never get connected (caf) * EPIC5-2.0 released here (Gamboling) (Commit: 1864) * Call setgid() before setuid(), for best practice (caf) * Fix off-by-one error with printing OpenSSL strings (caf) * Don't output the full SSL certificate for a server (caf) * When (re-)connecting, use the hardcoded server description nick (rb larne) * Fix utf8_strnicmp(), which broke $uniq() (robo, caf) * Fix null deref when a server has no CA (caf) * Remove a couple of unused variables in ssl handling (caf) * Fix crash when you $close() an fd from $exec() [rb CE] * Reformat all the ./configure --help outputs [rb skered] * EPIC5-2.0.1 released here (Indolence) (Commit: 1869) * Revamped maildir support to count both 'new' and 'cur' (wcarson) * Optimize maildir support so it's as fast as possible (wcarson) * Fix uninitialized pointer of window->log_rewrite (rb Q) * Fix handling of for CentOS 5.11. * new_timer() should initialise ->domref (caf) * Remove unnecessary window->screen check in hide_window() (caf) * Remove double-setting of *outbound in check_recoding_iconv() (caf) * banner() should use %d for printing current_numeric (caf) * inet_vhostsockaddr() should use %d to print port (caf) * Simplify expression in show_key() (caf) * Remove doubled-up SIGABRT from init_signal_names() (caf) * In transform_string_dyn() don't use my_dest_str_len without testing for NULL (caf) * Make output size check more robust in fish64_encode() / fish64_decode() (caf) * Remove unused function slurp_file() (caf) * Fix $ignorectl(WITH_TYPES ...) when only exceptive ignores are supplied (caf) * Remove unnecessary double-setting of window_display (caf) * Loosen overly-tight restrictions from $hookctl(SET .. SERIAL) and $hookctl(SET .. NICK) (caf) * Fix /USLEEP for fractional second delays (caf) * Add ( ) around constants declared as macros using shift operator (caf) * Include output.h in compat.c for yell() (caf) * Don't lower-case the channel name passed to whobase() (caf, rb white) * Only populate server->uh_addr when it's needed, to avoid spurious warning * Extend new_close() to new_close_with_option() allowing callers to manage fd * This is used for python fd handling. * Make new_io_event() actually support NEWIO_NULL (no io callback) * Python support merged into 'master' here. * Add new_open_failure_callback() which allows getting a callback on dead fd. * Add %{1}P status bar variable, "prefix when (not) current" (see UPDATES) * Add /set status_prefix_when(_not)_current variables, default to empty string * Add /window status_prefix_when(_not)_current operations, default to nothing * Convert CTCP data structures from static arrays to a bucket * Initialize hardcoded CTCPs at boot time * Guard against null deref when changing lastlog and/or scrollback at same time * Overhaul ctcp.c so there are no more magic integers used as foreign keys. * Fix a core and leak to do with /userhost and /ison queues (ce) * Revamp/unify do_ctcp() and do_notice_ctcp() to reduce code duplication * Change send_ctcp() to take a boolean int rather than a string for first param. * Simplify the CTCP flags to just "ordinary" and "special", with "raw" (or not) * CTCPs are "raw" if they need the original payload, or not if payload is string * CTCPs are "special" if they handle everything themselves (/me, /dcc) * Enforce anti-botnet CTCP reply flooding on the /CTCP side, not request side * (That way, CTCPs that don't generate responses are not throttled) * Implement $ctcpctl() to register user-defined ctcp handlers. (see UPDATES) * Add $ctcpctl(ALL) for CLIENTINFO purposes. * Create /load ctcp, some basic CTCPs implemented in script * Make /load builtins do a /load ctcp * Comment out some basic CTCPs from the base client -- yay! * Treat empty return strings from ctcp handlers as "not handled" * Initialize status.prefix_when_(not_)current in new windows. * Create a distinction between CTCPs that replace their bodies and themselves * via $ctcpctl(SET REPLACE_ARGS 0|1) [see UPDATES] * Rewrite CTCP PING handler, create CTCP UTC handler * Fix ipv6 p-addr vhosts for /server (rb wcarson) * Add /exec -wintarget, output to any old window (rb wcarson) (caf) * EPIC5-2.1.1 released here (Abulia) (Commit: 1898) * Improve perl support (remove warnings) (caf) * The : before final param is part of the syntax, not the message (caf, rb trn) * Fix bug in previous patch * Don't include unless it's needed, because of ruby-2.7 support * Modernize ruby support while we're at it (checked with 2.3/2.6/2.7) * Add "passthrough read|write" support to newio, for python. * Change python's "epic.xecho" to not default force -s by default * Change python's @on decorator do a ^on so it's silent * Fix a couple of compiler warnings suggested by new clang. * Add _epic.callback_when_readable and _epic.callback_when_writable for python * They take a python callback, and dispatch when an fd is ready. * This allows python scripts to submit an fd for callback with newio. * Call PyErr_Print() on an exception. This is "noisy", but i needed it for debug. * Eventually we have to be able to do this on our own. * Add /pyload shortener -- an in-client url shortening redirecting proxy! * Capture STDOUT and STDERR from python, redirect to /echo. * Pull out the python init code into its own function * Don't try to fancy-print exceptions, now that we're capturing stderr. * Add count_initial_codepoints() to convert a ptr to something for $mid() * Change $regmatches() to use count_initial_codepoints(). * Fix a dumb warning from clang about pointer arithmetic. * Revamp /exec to behave regularly so we can treat %proc as real targetsa (see UPDATES) * Add /on send_exec so you can reformat messages being sent to exec procs * Add $uuid4() -- it returns UUID4s! * Add /exec -nolaunch so you can build an /exec before starting it. * Add $execctl() -- see UPDATES * EPIC5-2.1.2 released here (Lugibrious) (Commit: 1908) * Fix count_initial_codepoints() - it couldn't return 0 * This fixes $regmatches() for wcarson * Add /window delete_kill (rb Harzilein) * Fix /wait %proc (caf, rb wuf) * Fix chmod() to not use ancien S_IREAD/S_IWRITE (S_IRUSR) (rb Tilt) * Support /window - to pass in NULL to window op * Seed all window operations with no-op handlers for NULL * Don't discard DNS results for server until we get to ACTIVE * Add a stub for $inputctl() -- future expansion. * Add %{5}S status expando -- the server status (ie, "ACTIVE") * Signficant refactoring of server.c/server.h * - Change the term "server status" to 'server state" everywhere * - Reorganize Server object to show what values are filled in by each state * - Make all server.c functions static whenever possible * - Remove all server.c functions not used anywhere * - Remove all server.h decls not used anywhere * - Remove unused variables in Server and other structs * - Remove extern server_list[] and make get_server() an ordinary function * - Remove extern server_states[] and create get_server_state_str() * - Document many more things to make it more understandable * - Drive the determination of "ircop" from your umode, not from a variable * Add /on server_state to duplicate /on server_status for now * Support $serverctl(GET x STATE) to duplicate GET STATUS * More refactoring of server.c/server.h ssl support * - Remove unused fields and getters/setters * - Defer all "is this ssl?" questions to the ssl module * - Rename "is_ssl_enabled()" to "is_fd_ssl_enabled()" * - Rename "get_server_isssl()" to "get_server_ssl_enabled()" * - Remove trying to track ssl enablement separately * - Since openssl has been required for a while, remove "ssl is missing" stuff * - Avoid setting the server state directly (ie, avoiding /on server_state) * If something goes wrong in do_server(), just close_server() - If a server is connected to a window with more addrs, it'll resurrect * Add $inputctl(GET|SET CUTBUFFER), manipulate the cut buffer. See UPDATES * Fix /load help.irc - point to correct url * Remove some commented out code before release * window_next() and window_previous() can accept nulls from SWAP_NEXT_WINDOW * Add /window unclear -- why did this not exist? * If a Python callback fails, call the except; if that fails, give up on fd * /PYDIRECT without args needs a usage message * Support /timers with /unload (rb zlonix) * New version of epic.py and shortener.py from skully -- he asked for testing * Improve the code in vars.c * - Change 'flags' to 'pending' since that's all it is used for * - Change $symbolctl() to support both FLAGS and PENDING for the symbols * - Make get_string_var() return a const ptr so people don't change it * - Make make_string_var_bydata() take an (IrcVariable) since that's easier * Crank up the warning flags and start addressing things * - Add a test in configure for __attribute__((fallthrough)) * - This allows the use of FALLTHROUGH to shut up warnings. * - Improve a lot of const correctness issues * - Fix other bogons it pointed out (d'oh!) * Fix my_ctime() to honor that ctime() can return NULL. * EPIC5-2.1.3 released here (Redound) (Commit: 1926) * Fix configure on mac when you do --with-ssl=/path/to/somewhere (rb archon) * Fix configure for systems where "gcc" is c99-only * Add "verbose" flag to sanity_check_encoding() * This is needed in init_encodings() to not output too early. (rb wcarson) * Don't make a lack of CP437 locale a boot failure (rb wcarson) * A lot of work was done on configure to support macports better. * Fix where NSIG was decld in irc_std.h (caf) (rb CE) * Add /ON CHANNEL_CLAIM and /WINDOW CLAIM (see UPDATES) * Exempt claimable channels from referential integrity checks * Add $uuid4(NODASHES) to get uuids without dashes * $windowctl(GET x UUID) -- every window has a hash-free UUID now * Allow windows to be reffed by their UUID in /window * Revamp how channels get claimed (I like this better) to be channel-driven * Fix get_window_by_desc() (rb Harzilein) * Migrate configure to autoconf-2.69. * Round two of getting configure working with 2.69 * Round three of getting configure working with 2.69 * Round four of getting configure working with 2.69 * Get configure to support Python 3.8+ * EPIC5-2.1.5 released here (Fecund) (Commit: 1945) * Add "ssl_checkhost" field to server descriptions * Make ssl_startup() require a hostname for ssl hostname checks * Add ssl_get_checkhost_status() to return ssl hostname check * Fix a place where we don't check the retval of alloca() * Remove the "ENCODING" field from server descs which went away long ago * Ensure "ssl-checkhost" is preserved through serverinfo changes/updates * Perform hostname checking on ssl server connections and abort if failed * Change "ssl-checkhost" to "ssl-strict" * Make ssl strict checking require both the cert and hostname pass muster * Change ssl_info.ssl_fd to "ssl" to confuse me less * Check for self-signed certificates and pass it in /on ssl_server_cert * Add support for getting SANs out of an SSL certificate (rb wcarson) * Add $serverctl(GET x SSL_STRICT_STATUS) * Add $serverctl(GET x SSL_SANS) * Remove $serverctl(GET x SSL_STRICT_STATUS) * Add /on SERVER_SSL_EVAL (see UPDATES) * Add /set ACCEPT_INVALID_SSL_CERT (see UPDATES) * Remove per-server server "strict status" in server desc * Add "accept_cert" per server, to track whether we accept the ssl cert * Add $serverctl(GET x SSL_CHECKHOST_RESULT) * Add $serverctl(GET x SSL_SELF_SIGNED) * Add $serverctl(GET|SET x SSL_ACCEPT_CERT) (see UPDATES) * Add /SET SSL_CIPHERS (see UPDATES) * I forgot to implement the use of /SET SSL_CIPHERS. oops * I made signficant changes, so the above probably obsolete now * Create an object (ssl_cert_error) * Start tracking *every* ssl cert verification error * Treat ssl verification errors as tiered problems * ie, self-signed is not as bad as bad-hostname not as bad as others * Revamp things like "verify_result", "self_signed", etc to errors * ie, verify_error, checkhost_error, self_signed_error * Add a new "other_error" and "most_serious_error" * Try to emulate the old policy behavior (pending more work) * I need to document the flow and /on's and /set's in UPDATES * Change $serverctl()s * serverctl change: SSL_VERIFY_RESULT -> SSL_VERIFY_ERROR * serverctl change: SSL_CHECKHOST_RESULT -> SSL_CHECKHOST_ERROR * serverctl change: SSL_SELF_SIGNED -> SSL_SELF_SIGNED_ERROR * serverctl change: new: SSL_OTHER_ERROR * serverctl change: new: SSL_MOST_SERIOUS_ERROR * Reorg ssl.c because it was getting too jumbled to follow * Ensure every function is decld static or is in header file * Group functions by their subject area * Only create on (SSL_CTX) for all global use now * Don't bother pretending we support being an SSL server. * Create a SSL verification callback that tracks/sorts every error * This allows us to catch multiple problems (self-signed, bad hostname) * We see multiple errors on efnet, for example * Change find_ssl() to get_ssl_info() so its named after data type * Roll Bad Hostname check into main SSL verification instead of extra step * (OpenSSL discourages you from doing it as an extra step) * I need to review /on ssl_server_cert for sanity and document it * Remove the now superfluous notion of "strict status" checking * Remove the bogus stubs for #ifndef HAVE_SSL since that's not supported * Make widening the screen honor /window scrolladj * Sync all /window operations in tabkey.ce * Re-sort the /window operations list ("claim" was in the wrong place) * Document $json_explode(), $json_implode() and $json_error() * Add winref as $2 in /on channel_lost * Remove tracking of "cursor window", a thing we haven't supported in 25 years * Add support for (arglist) {block} statement type * Add /window clearlevel (rb zlonix) * The #define DEFAULT_STATUS_HOLDMODE was different from UPDATES and irregular * Fix many things clang's static analyzer pointed out. * Add /on reconnect_required (sb zlonix) * /WINDOW winref SERVER servref should no-op if it's already that way. * Add /window clearregex (rb zlonix) * When printf()ing (time_t)s, always cast to (intmax_t) and use INTMAX_FORMAT * When processing CTCPs with a script, don't short out /on ctcp or verbse_ctcp * Add $serverctl(GET x PADDR) returns the p-addr of a connected server. * Fix /server + so it correctly rolls over to server 0. * Add $serverctl(GET x OPEN) [don't forget to document this] * Set parsing_server_index around server errors so /timers create correctly * Fix missing else causing all ssl cert's to be accepted * Add support for tilde-expansion for /set ssl_root_certs_location * If a server fd does not map to any server, close it. * Updated version of 'reconnect' from zlonix. * Convert our bundled test.c to be minimal c99 to avoid warnings * Don't permit /reconnect on servers that are actively working * /RECONNECT must not default to the current input window (bah) * Reconnect script should use /server +refnum, not /reconnect * Reconnect script should only do /server + on servers with groups * EPIC5-2.1.6 (1981) (Impignorate) released here * Add debuglog testing for /window search_back (for fusion) * Strip all attributes when regex()ing /window search_back * Fix warnings on mac os x 12 (rb skered) * Add support for json object arguments ("kwargs") * Add support for kwargs for $json_implode(): "root", "compact" (rb fusion) * Add support for tcl8.6 -- run 'make makedepend' * Remove dead code that was #if 0'd out for a long time. * Make /pretend object when you're disconnected (rb skered) * Change panic() to setjmp/longjmp back to main() instead of exit() * Fix bugs with the new panic stuff. * Add 'colors' and 'sasl_nistp256' scripts from zlonix * Fix crash when you switched to AESSHA /encryption (rb zlonix) * Add configure check for newlocale() for slackware 15 (rb fusion) * Some CTCPs are "restartable" (encryption types). (rb zlonix) * Add $serverctl(GET x NEXT_SERVER_IN_GROUP) * New reconnect script (zlonix) * Fix $realpath(); the 2d arg to normalize_filename is (Filename) (zlonix) * Permit /lastlog -file to support ~-expansion (zlonix) * /ON RECONNECT_REQUIRED only gets thrown when connected! * Permit status bars on hidden windows to be generated in the ordinary way * Add /set broken_aixterm for silly emulators that don't support bold+color * Add ?? binary operator (coalesce), same priority as || ("DOR") * A /window clear on a notified hidden window requires a full status regen * Add $serverctl(DONT_CONNECT 1) to trigger the -s command line option * Add $rgb() function to convert rgbs to 256 color (first try at this) * Add support for ^[[38;2;r;g;bm (and 48-2) color codes * Prefix $rgb() with ^X for skered * Change hardcoded \003 and \030's to macros. * Add $rgb({...}) and $rgb{#RRGGBB) (see UPDATES) * EPIC5-2.1.7 (2011) (Cinereous) released here * Add /set automargin_override (for skered) - always turn on automargins * De-cruftify the /set automargin_override stuff (rb skered) * Begin a larger project to transition (Window *) ptrs to winrefs. * The intention is to make (Window *) a pure data object and not a linked list * Repair regression with lineno in /set status_update (rb ce) * Fix /on reconnect_required (doh) * Continue the work on reducing (Window *)s outside of window.h * More work (mostly focused on status) * No more Window ptrs in status.c yay! * Fix a bug with output going to the wrong window (rb fro, me) * Fix bug with /window number (rb zlonix) * Fix %F showing the wrong window refnum (rb zlonix, fro) * Ensure lookup_window() is always handled for error correctly * De-cruftify epic's install procedure. This is for all my pkg friends! * Remove configure --with-threaded-stdout * Remove crutches for people without INET6 * Remove legacy compat for people without getaddrinfo() * Remove dead #define's in config.h * Fix /on switch_windows (rb zlonix) * Add $pledge() and $unveil() for openbsd (zlonix) * Add a "newlist" type for migrating linked lists to. * Improve handling of realpath() failures (rb zlonix) * Make /log on fail (ie, reset to OFF) if the log can't be opened (rb zlonix) * More improvements to window.c, refactor of /window query * Several scripting changes by zlonix * When writing to /log-files, check both refnum and user-refnum (rb zlonix) * Allow adding window refnums, names, and uuids to /logs, and check them passively * Fix /log properly showing targets for window-type logs (rb zlonix) * Fix $winchan(#chan) not returning user refnum (rb zlonix) * Improvements to sasl script (rb harzelein) (zlonix) * More changes, moving towards de-listifying the window object * Type punning project starts here... * Add check for __attribute__((may_alias)) (gcc and clang) * Tag all socket types with "may_alias" * Tag all (List *) types and subtypes with "may_alias" * List changes: * - Use C99 union type casts to convert to and from (List *) * - Create new List macros that use union type casts * - Convert everything to use the macros instead of base fns * - /crypt, /ignore, /bind, /log, /query, * Alist (array) changes: * - Remove (array_item) as a type that can be inherited from * - Create (array_item_) as a container for a (void *) * - Change (array) to keep a list of (array_item_s) * - Change all the alist api's to take these new-style (arrays) * - Convert notify lists from (NotifyList) to ordinary (array) * - Migrate the 'ison' field from (NotifyList) out to the (Server) * - Convert A005 lists from (A005) to ordinary (array) * - Convert symbol lists from (SymbolSet) to ordinary (array) * - Convert symbol api from (SymbolSet *) to (array *) * - Convert nick lists from (NickList) to ordinary (array) * Type punning project ends here ^^^^^ * Compile with -O2 instead of -O to satisfy pedants * Begin removing linked list from (Window) type * - Change window_list to _window_list in screens * - This revealed every place we were manipulating the list * - Change macros in input.c to not hardcode 'current_screen' * - (This required changing INPUT_LINE to INPUT_LINE_ROW) * - Eliminate hardocded uses of 'last_input_screen' in input.c * When doing /window number, be sure to clear old refnum! (rb zlonix) * Add sanity check for direct window lookups * Have $serverwin() return user refnum not internal refnum (rb ce) * Fix the sanity check just above (rb ce) * Re-fix $serverwin() (rb ce) * Changes to color script (zlonix) * Add 'stringify.c', a program to convert data to a C string. * Add support for grabbing configure params in info.c.sh * Add support for grabbing $CC -v output in info.c.sh * Add $info(y) and $info(z) (see UPDATES) * Replace $info(y) and $info(z) with $info(z:*) (see UPDATES) * Add all this z-stuff to the -v cli * Use 'id -u -n' instead of LOGNAME in info.c.sh * Create (union SSu) to capture all (struct sockaddr*) types * Migrate all internal APIs to use (SSUs) to avoid type punning * This makes our socket code all c99-compliant. * Fix typo (reported by ce, fro) * Fix another typo (reported by ce) * Fix bogon with /assign output (rb ce) * Reduce warnings * Eliminate final warnings with -Wwrite-strings -W -Wall -Wextra (except -Wno-pointer-sign -Wno-unused -Wno-unused-parameter) * EPIC5-2.1.8 (2052 - Decoupage) released here * EPIC5-2.1.9 (2053 - Decoupage) released here * Eliminate final warnings with scan-build (clang's static analyzer) * Eliminate found warnings with clang's undefined behavior checker * Remediate the rest of clang's static analyzer's findings. * Fix slurp_elf_file() (rb fro) * Change SIZE_T_MAX to SIZE_MAX (rb ce) * Handle dequoting a single quote (detected by ubsan) * More changes to avoid undefined behavior and zlonix's "impossible bug" * EPIC5-2.1.10 (2059 - Casuistry) released here * Always call alists 'alist's instead of 'array's * Add a #define UINTMAX_HEX_FORMAT for pointers * Change (List)s to have a data pointer rather than inheritance * This removes a major remaining type punning issue * Remove '_window_list_end' from screens. Determine it on the fly. * Add get_screen_bottom_window() to replace '_window_list_end' * Change (Crypt) from a (List) type to a data object for List * Change various crypt.c functions to take a straight (List). * Change various crypt.c functions to create and store a (Crypt) in (List) * Make (WNickList) private to window.c, use ordinary (List)s ordinarily * Change window's 'waiting_chans' and 'nicks' ordinary (List)s * Add ARAs - "automatically resizable arrays"; directly addressable arrays * Comment out bucket_(var|cmd)_alias and bucket_builtin_* to avoid warnings * Except bucket_builtin_variables() which is the only one actually used! * Convert (Ignore) from a (List) type to a data object for List * If a panic() happens during shutdown, then just go ahead and exit. * Convert (Binding) from a (List) type to a data object for List * Convert (Logfile) to use a plain old (List) to hold target names. * Rename 'invislble_list' to '_invisible_list' for future deprecation * Make everything using invisible list go through a function. * Split 'delete_window' into 'unlink_window' and 'delete_window_contents' * And make those two take refnums instead of a window ptr. * /fe ("" .) foo {echo $foo} with /xdebug dword (rb ce) * Fix /window swap_others (skered) * Un-break $unveil() with no arguments (rb zlonix) * Remove configure checks for sysctlbyname(), * Fix warnings from raspbian (rb zlonix) * Don't include (not used) (rb zlonix) * Do #define _GNU_SOURCE 1 for slackware (BAH!) * Begin untangling the "signed pointer mess" * Generally this means: * - (char *), not (unsigned char *) is the "generic type" in C params * - Pointer parameters have to have *equivalent* types, not just *compatible* types. * - The type of "a bunch of bytes" is always (char *), not (unsigned char *) * - Even though (char *) is not 8 bit clean. * - Type type of literals is always (char *), not (unsigned char *) * - So don't use (unsigned char *) for params unless the thing is NOT a BoBs. * - So DO use (char *) and cast it on both sides of the call. * - Don't have (const unsigned char **) params to modify a pointer * - Prefer (const unsigned char *) and return a (ptrdiff_t) * Change (Crypt) 'passwd' to unsigned because OpenSSL wants it that way. * Eliminate all warnings from -Wpointer-sign * - Mostly by eliminating nearly all uses of (unsigned char *) * Eliminate all warnings from -Wunused * - But not from -Wno-unused-functions or -Wno-unused-parameter * Remove many spurious casts to and from (void *) (c99-ism) * Fix warnings found by wider testing * EPIC5-2.1.11 (2071 - Adynaton) released here * Replace the historical (u_32int_t) with the c99 (uint32_t) * Remove the now-unused 'hash' field in alist data items * Remove accommodations for the long gone Interix system * Don't hide __A() and __N() from clang, which supports them just fine * We don't need to cover for systems that don't have memmove() * We should cast the retval of alloca() within LOCAL_COPY(). * Stop redefinining NULL * Remove #ifdef HAVE_SSL and HAVE_ICONV since they're mandatory now * Build 'stringify' using $< and $@ (for separate builds) (rb zlonix) * Remove the c99 macro shims for (List) and rationalize the API * Remove the use of c99 macro shim "MAY_ALIAS" since it's untrue now * Move "reconnect.orig" to "reconnect.old" (rb zlonix) * get_server_protocol_state() can return -1 -- handle properly (rb zlonix) * Guard bogons in set_server_protocol_state() * Have info.c.sh.in use @builddir@ instead of @srcdir@ (zlonix) * Add add_item_to_list() for List management, fix callers * Don't let user create too many windows (rb ce) * Fix configure check for raspberry pis with bad python (rb zlonix) * Fix window refnum bogon (rb zlonix) * EPIC5-2.1.12 (2078 - Secondment) released here * When doing target searches, don't require global targets to have server * Fix /query, particularly for dcc chats (rb fudd) * Fix a null deref found by clang static checker (it was unused code) * Fix widening when window is /clear and /window scrolladj off (rb skered) * More conversions of (Window *) to int refnums * Now the (Window) refers to its neighbors through int's! Huzzah! * Now Screen's window list holds just an int to the head! * Now the invisible list is just an int to refer to the head! * This means we don't need to expose (Window) to #include "window.h" * Add $ctcpctl(SET x ACTIVE 0|1), $ctcpctl([IN]ACTIVE) * Add /ctcp_cloak and /ctcp_uncloak to /load ctcp (rb zlonix) * Remove size limits on $repeat (rb ce) * Fix CTCP CLIENTINFO (x) (rb zlonix) * Fix swap_window() (rb fro, zlonix) * Make _invisible_list an int and not a pointer. yay! * Fix bug with /server showing p-addrs on connect (rb zlonix, skered) * Continue converting internal window.c functions to refnums * More conversions of internal window.c functions to refnums * Complete conversion of internal functions from (Window *) to (int). Yay! * Create screen restful api (well, the getters at least) * De-orbit global "Screen *screen_list" in favor of get_screen_by_refnum() * Make everything that used (Screen *) use int refnums (except windows) * Don't have dequoter() take clue, was causing ub (sorry, ce) (rb zlonix) * Fix screen->last_window_refnum, was wrong type (rb zlonix) * Fix /window clearlevel (need to normalize window refnums) (rb zlonix) * Fix ub with utf-8 detection for non-utf8 console users. * Revert dequoter() changes above (rb zlonix, ce) * Fix ub with decryption (rb zlonix) [this code makes me nervous] * Try a gentler fix for the ub in dequoter() * Add the "clear_point" per-window where you last did a /clear * When moving the "top of scrolling" around, honor the clear_point * The /unclear command will ignore the clear_point (backwards compatible) * The /unclear -noforce flag will honor the clear_point * Fix ub when decoding base64 data with invalid characters * Add /xdebug sequence_points and %{2}P and /set status_sequence_point * Also, $sequence_point(). This is all an easter egg. * Create notion of "Window Attachments", that belong to the screen * Create screen-focused API to manage "window attachments" (window list) * In the meantime, change (Window)->_next and ->_prev to ->_next_ and ->_prev_ * Sanity check the window-based window list from the screen-based window list * Fix bug with 'clearpoint' (rb zlonix) * Updated reconnect script (zlonix) * Finalize replacement of (Screen *) with (int) refnums. * Move Screen definition inside screen.c. Yay! * Remove unused ANSIFLAGS from Makefile * Add $tags(), support for CAP tags (zlonix) * Add script for CAP negotitation (zlonix) * Add "cert" field for server descs (client-side SSL certs) (rb tjh) * Add ability to specify client-side cert for SSL (generally) * Move Window definition inside window.c YAY~! * Add dont_need_lastlog_item() so windows can repudiate lastlog items * Make /window flush_scrollback repudiate lastlog items * That way rebuilding the scrollback doesn't make flushed things re-appear * Fixes to above (rb zlonix) * Fixes/improvements from zlonix for the above * Fix handling CAP multi-prefix (rb zlonix) * Use ctime_r() [c99] instead of ctime() [c90] * Add /clearignore in 2.8script (rb sobriquet) * Begin a project to clean up message_from() in dcc [sb Harz] * Handle /redirect /cmd better so it behaves sensibly. * Expand the range of unicode 6 emojis (from 1f5ff to 1f6ff) * Add /on ping (rb skered) * Fix the addition of 'git_commit' to handle releases (rb zlonix) * Update to 'colors' script (zlonix) * Fix /window create (rb fusion); fix ub in wserv.c * Have configure check for crypt() * Adapt and regenerate configure to use autoconf-2.71 (sigh) * Make $crypt() return empty if no crypt() [rb Tilt] * In /load history, ^U should use erase_line not reset_line. (rb fusion) * Add /set blank_line_indicator (rb harz) -- see UPDATES * Add $symbolctl(GET 0 BUILTIN_VARIABLE ORIG_DATA) (very much WIP!) * Don't have configure check for (sigh) * Don't use inline expandos ($L) in /load history -- use $builtin_expand() * When /set status_does_expandos, double-quote the injected text (rb fudd, lw) * Fix bogus use of * in on send_public in builtins (rb lw) * Fix antiquated/bogus use of dword in /load country * Add make uninstall, which does its best (rb skered) * Rewrite /disconnect|reconnect so it behaves more reasonably (i hope) (rb CE) * Fix a bogon with new STATUS_DOES_EXPANDOS stuff (rb wcarson) * Add $windowctl(GET x CURRENT_CHANNEL) returns a window's current channel * Fix where first char of continued lines didn't have attributes (rb skered) /eval echo $chr(3)53$repeat(500 .) for example * Remove a debug statement harz found with /window channel * Make window toplines honor /set automargin_override. * Use gcc13 -fanalyzer and clang-devel scan-build (static analyzers) * The following changes were directed by the static analyzer * Check/use -fno-delete-null-pointer-checks in configure * Fix pop_integer() to return correct type * Use fseek() instead of rewind() so clang doesn't complain about errno * Don't check a pointer after using it so as to not offend gcc13 * If you pass no args to $unshift() or $push(), get nothing back * Fix uninitialized clue in $currchans() [this was an actual bug] * Strip down $globi() so I can fix static analysis complaints * Fix uninitialized variable in $hookctl() [this was an actual bug] * Don't just assume open() doesn't fail in opento() [actual bug] * ifdef out split_message() and friends because i don't understand what gcc13 is complaining about there and I don't use it * Oh, you get the idea. more of the same as above * Add /window lister "refnums" (see UPDATES) * Explore writing output using fd's rather than (FILE *)s * Add /set auto_reconnect_delay to reconnect (skered)