EPIC4 Projects, Bugs, and other Errata:

KNOWN ERRATA (eg, bugs, or unresolved requests):
------------------------------------------------
* The ever-present lastlog.c/187 and names.c/244 magic check failures.
  (These have been around forever, and are pretty rare, but still they
   are pending bugs.  They are not, however, a general problem.)

PROJECT LIST:
-------------
Legend: X means its done.
	* means ive already designed the process and plan on doing it
	+ means ive not designed it yet, but will do it if can be done.
	- means ive not designed it and dont plan on it, but who knows?
	0 means itll only get done if someone else does it. >;-)

Major projects
--------------
X (pre3) Write or roll in a new math parser
X (pre3) Different STATUS_FORMATs for each window. (k)
X (pre3) $getopt()/$optind()/$optarg() function for aliases? (rb nutbar)
X (pre3) Much needed overhaul of server stuff.
X (pre3) Argument lists (with default args) for aliases
* (pre3) Convert uses of Window-ptrs to Window_t refnums.
* (pre3) Channel issues [1]
* (pre3) Rewrite the i/o implementation
* (pre3) Unified symbol tables/package retention 
* (pre3) Dynamic loading of object modules,
* (pre4) "Fix" the interaction between screens, windows, servers, and channels.
+ (pre4) Roll lastlog and scrollback buffers together
+ (pre4) Re-evaluate the /load command (arbitrary limits, speed, etc)
* (pre4) Abolish all uses of list.c (crypt.c, exec.c, screen.c, window.c)
* (pre5) Re-evaluate the help system
+ (pre5) Re-evaluate the security system
+ (pre5) Re-evaluate the /set implementation
* (pre5) Re-evaluate the ignore system
* 	 Do something with %D?
* 	 Thorough code audit, more profiling, 
*	 Get const correctness under control (some of this done already)
-        $HELP_PATH should be searchable path? (this cant be done.)
+        Reverse DCC?  All of DCC?
-	 Some way to "sign" a dcc send with a larger file.
+        DCC CHAT collisions perhaps could be handled more gracefully (+)
-	 Built in file pager
+	 per-channel sets for auto rejoin/delay
-	 $C should work in the context of the from_server, not just curr_win.
-	 DCC progress meter to appear on "top non-active window"
+	 Remove all limitations to size of lines in /load'ed files.
-	 Lossage when nicknames include special chars. (Not sure what to do)
*	 Sort out the entire lastlog/ignore level fiasco.
*	 Keep track of when ignores are set, and have time-expire ignores
-	 Have a special expando char that does arbitrary extensions.
*	 psykotyk wants a $packages() function.
*	 psykotyk wants to be able to do /stack (push|pop) bind
-	 Kasi thinks we shouldnt re-establish modes right away on connect.
-	 /xecho -x and -y
*	 Floating point support for the new math parser (big job)
*	 Figure out what kind of weirdness shade wants to do with /redirect.
*	 Function to return the number of mails last seen?
+	 /upause command (sja)
+	 Different status formats for non-current windows
*	 Deal with KNOCKs.

[1] CHANNEL ISSUES: (to be addressed in pre3)
---------------------------------------------
* Channel key isnt stored on reconnects.		[done]
* Channel and window relationships is all whacked out.	[kind of done]
* $C and $T still reflect old values after disconnect. (this is not a bug)
* Maybe a $next_channel() function?
* Allow multiple channels to be bound to a window at a time.
* Dont allow windows to change to channels theyre not bound to.
* Allow per-channel logging

From James' Wish List:
----------------------
 0 real arrays (i.e. replace Karll's arrays with a numerical array op),
 0 case-sensitivity for input and comparisons (maybe a /set for this)
 + (Write logfiles are they appear on the screen -- eg -- wrapped)
 + tighten (or clarify) ++ and -- syntax rules
 + more (graceful) ircd 2.9 support (I know you hate it, but...)
 - Automatic expandos for current alias, parent alias, filename, line num...
 * IGNORE/LASTLOG/etc levels dont match, and they should.
 - Auto-restubbing aliases/assigns/whatever


THE CHANGELOG FOR EPIC4pre3:
----------------------------
2.001 Fix bug in uzfopen where it couldnt open compressed files
2.001 Fix bug in iglist(*) returning NULL when no ignores exist.
2.001 Add experimental optimization to alist for binary searching with ints.
2.001 Rewrite $"" to use add_wait_prompt rather than get_line.
2.001 Add $'', which now works like $"", but it waits for just one char.
2.001 Also converted /pause to use add_wait_prompt.
2.001 Removed bletcherous "key_pressed" global variable, unused now.
2.001 Fix memory leak in $getsets() (Colten)
2.001 Fix another memory leak in $msar() (Robohak)
2.001 Fix bug where $(:var) caused "add is NULL" panic
2.001 Fix /on status_update to be thrown even when not in dumb mode.
2.001 Brutal hacks to edit_char, to make /pause work again with /input_char.
2.001 Fix -k handling, the server provides the key, we have to ignore it.
2.001 Add support for .bz2 compressed files (bunzip)
2.001 Added ALL_OFF to the types you can mangle via $stripcrap() et all.
2.001 Add /set mangle_logfiles, works just like /set mangle_inbound, et al.
2.001 Fix how /load handles the ; character at EOL so it's less lame.
2.001 Fix /do ... while and /for to check for TRUE with check_val.
2.001 Fix bug with /topic with no arguments.
2.001 Fix bug with /fe, /do-while, /for, etc, not properly handling /return.
2.001 Fix bug with dcc_check not skipping over bogus (DELETED) entries.
2.001 Remove extraneous yell left in 2.001-nr.
2.001 Fix vars.c to properly initialize /set beep_on_msg default.
2.001 Fix some more ways that the "add is NULL" panic can be tickled.
2.001 Fix bogons in /flush where flushing of held stuff caused a panic.
2.001 Add /bind refresh_status, redraws your status lines and nothing else.
2.001 Add /on switch_channels, $0 is window, $1 is old chan, $2 is new chan.
2.001 Add /on switch_windows, $0 old scr, $1 old win, $2 new scr, $3 new win.
2.001 Removed double-ptr chicanery which caused $listen() dcc's to block.
2.001 Fix main() so it outputs epic version on startup (for output dumps).
2.001 Fix problem where serv 0 channels show up twice with /channel
2.001 Removed unused /on dcc_error hook.
2.001 Fix bug in dcc_check that prevented closed DCCs from being collected.
2.001 Add /xecho -x, allows you to output something w/attrs no matter what.
2.001 -- This isnt as useful as it might otherwise appear.
2.001 Add /set max_reconnect, hard to test this though... defaults to 4.
2.001 Fix update_input so it updates every input line, not just current one
2.001 Roll in the new expression parser.  Turn on with /xdebug new_math
2.001 -- THIS IS NOT TOTALY TESTED!  IT MAY NOT WORK 100%!
2.001 -- Important! -- Contact me if you want to help me test it.
2.001 Fix $uname() to handle bogus solaris errval better (retch)
2.001 Add doc/outputhelp, describes how to get color and latin-1 chars working.
2.001 Fix /window <hidden> delete so it doesnt crash.
2.001 Add /xquote -all, send something to every connected server. (Colten)
2.001 Add $aliasctl(assign match <x>), based on a patch by Colten.
2.001 Remove useless 'away_set' global variable, keep track of away different.
2.001 Fix alist stuff so you can select sensitive or insensitive hashing
2.001 Fix alias,notify,names to use the new alist hashing stuff
2.001 Fix swap_windows to call make_window_current so /on switch_windows hook.
2.001 Fix bug where make_window_current crashes if new curr_win is hidden.
2.001 Fix /set help_path so its figured at runtime rather than compile time
2.001 Removed now unnecesary dependancy that vars.c had on Makefile.
2.001 Fix keys.c so it doesnt bind char 0 (null) by default, too many problems.
2.001 Lots of fixes all over the place to implement per-window status_formats
2.001 Add /window status_format, window_status_format[1|2] per above.
2.001 Lots more fixes to new expression parser.
2.001 Fix send_line so it clears input buffer before calling parse_line
2.001 Dont clear input_line in parse_line -- that should be done in send_line.
2.001 Fix do_history, it wasnt putting a leading / at start of returned line
2.001 Fix do_timer to set from_server to -1 if not connected to server at all.
2.001 Huge overhaul of keys.c, way too much stuff to list here, but...
2.001 -- See the UPDATES file for user-visible updates.
2.001 Add support for /bind -defaults, restores key bindings to default states
2.001 And add /set meta to determine at runtime how many meta states there are.
2.001 Add default bindings for freebsd console pgup/pgdown/end/home keys.
2.001 Fix bug in $glob() where we were free()ing something we ought not have.
2.001 Fix missing newline in the startup output (nutbar)
2.001 Fix $leftpc() so it returns false value if there is no text (Robohak)
2.001 Fix /dcc send nick -p <port> so it works again. How did i miss this?
2.001 Fix repaint_window() so it doesnt call update_window_status uselessly.
2.001 Must remember to not use bzero() and friends. doh. (Starfox)
2.001 Fix build_status_format so a NULL status format isnt fatal.
2.001 Fix a few bogons in traverse_all_channels that was breaking channels.
2.001 Fix create_channel to initlize *all* of the members, fixes much damage.
2.001 Fix input_backspace() so it accounts properly for the input prompt.
2.001 Fix figure_out_address so "!user@host" comes out as "*!user@host".
2.001 Fix new expr parser so #(...) is valid syntax.
2.001 Add $getopt() function (Crackbaby)
2.001 Fix bug where /bind ^x didnt work quite right if ^x was already a meta.
2.001 Fix bug where /dcc close in an /on dcc_* caused a segfault.
2.001 Add '*' dereference operator to math parser.  W/o arg acts like [$*]
2.001 Fix new math parser so $. $, $: $; work again. Ugh. :P
2.001 Bash out a lot of const-correctness all over the place.
2.001 -- Ugh. this was a lot of work, but its worth it, and very overdue.
2.001 Local vars now belong to their atomic scope, not the enclosing scope.
2.001 -- *IMPORTANT* this is a change you should let me know if it breaks you!
2.001 Add new /exec -line(part), /exec -error(part), /exec -end flags.
2.001 Add $isaway() function (nutbar)
2.001 Fix get_server_away() so it checks the server argument (nutbar)
2.001 Add ability of /bind to do auto-meta generation.  /bind ^[[11~ works now.
2.001 Add 'pmatch' verb for $aliasctl (colten, nutbar)
2.001 Fix bug where /set dcc_timeout 0 didnt turn off auto-reject feature.
2.001 Hook /on dcc_lost when client auto-closes an idle dcc session.
2.001 Fix bug where 'foo[$func(args)]' was incorrectly grokked as func call.
2.001 Add /window clear.  How did this get overlooked?
2.001 Fix bug in output_with_count() that didnt count ND_SPACE's.
2.001 Fix bug where a naked * could cause an uninit-ptr to be free()d.
2.001 Fix bug where there was a shadowed local var in $getsets().
2.001 Fix bug where /parsekey cmd didnt properly deal with meta commands.
2.001 Add $maxlen(<word list>) function for knghtbrd.
2.001 Add $prefix(<word list>) function for knghtbrd.  Hope i did this right.
2.001 Fix line wrapping bug with /set indent and first line with one seperator.
2.001 -- This bug caused the first char of the *third* line to be lost.
2.001 Fix $servername(), $servernick(), $servports() to accept no argument.
2.001 Fix help_paused_topic not being reset (Robohak)
2.001 Fix $prefix() not checking its input first. doh. (Crackbaby)
2.001 Fix bug in parse_key where trying to whack on META bindings didnt work.
2.001 Check for ALL_OFF before ALL in the line-mangler decoder. (Robohak)
2.001 Fix /on switch_windows so its hooked for many more situations.
2.001 Fix check_ignore_channel so nuh ignores and channel ignores work together
2.001 Fix off-by-one error in repaint_window causing status bar to disappear
2.001 Add internal function slurp_file(), intended for use in load2.
2.001 Fiddle around with the Makefile so make install works better.
2.001 Fix /join 0 so it works again
2.001 Add some more support for the % user flag that denotes a +h user on TS4.
2.001 Fix a bug with notify that caused people to never be signed off.
2.001 Support ^C16 for compatability with some broken mirc scripts (knghtbrd)
2.001 Fix Makefile, irc.c to not make default ircpath compiled in default.
2.001 Must intialize global status stuff, even when in dumb mode!
2.001 Fix //topic so that it doesnt mangle the argument list spuriously.
2.001 Make sure status-bar clock gets updated if system time goes backwards.
2.001 Add support for dalnet's +R channel mode.
2.001 Change %S status line expando so it displays even when only one server.
2.001 Fix bug where /xecho -r was not careful about where it sent the output
2.001 Fix typo in /stub assign that caused a null deref crash.
2.001 Fix tabkey script to not barf quite so badly on nicks with ^ in them.
2.001 Add a /cycle command since you cant /quote part any more.
2.001 Add completely gratuitous /usrip cmd for incredibly bogus efnet lamage.
2.001 Add /window refnum_or_swap -- go to a window, unswap if neccesary.
2.001 Add support to /on stripped_modes for the new dalnet/ts4 channel modes.
2.001 Add hack to prepare_display to substitute reverse space for $chr(131)
2.001 Remove extraneous (and annoying) about dcc talk not being supported.
2.001 Rewrite figure_out_address to work much more consistently. Fixes ignore.
2.001 Change add_timer() so if the last arg is NULL, it means "dont change win"
2.001 Fix the problem with /help terminating too easily
2.001 Correctly fix the buffer overrun problem with /help.
2.001 NR9 release (first candidate release)
2.001 Remove const from putenv() declaration for solaris' sake.  Oh joy.
2.001 Fix bug in e_topic, missing args to say(). (Robohak)
2.001 Fix stray, bogus \ in Makefile.in that confused bash. (Robohak)
2.001 Fix bug where LICENSE listed after LINKS in command list. doh.
2.001 Remove restrictions on /quote part and /quote join
2.001 Roll back the built in /cycle command.
2.001 Change internal empty() function so a space is not empty
2.001 This permits the use of " " as a non-empty argument to built in funcs.
2.001 Change /redirect, /wait, and /wait -cmd to use PING instead of inv. cmd
2.001 Add $isfunction().  Returns 1 if alias was called as func, 0 otherwise.
2.001 NR10 release
2.001 Fix copy_redux so that /bind ^ binds the ^ rather than the nul char.
2.001 Get /redirect to work again by making sure PING arg is not a prefix.
2.001 Flush out the lameness that svr4 calls env var handling
2.001 And use the bsd stuff from compat.c that has quasi-sane semantics.
2.001 Add #undef OLD_STATUS_S_EXPANDO_BEHAVIOR for old %S status behavior
2.001 Explicitly set current_window while doing input handling.
2.001 Explicitly set current_window while doing status bars, too.
2.001 NR11 release (second candidate release)
2.001 Fix broken func decls in irc.h for the bsd-env stuff.
2.001 Add support for blinking mirc bg colors for pc consoles (knghtbrd)
2.001 Remove a handfull of unused or unuseful globals in server.c
2.001 Fix saving of keybindings so metas dont do a negative array reference.
2.001 Major overhaul of server.c, too much to mention, but
2.001 Fixes to encapsulate server_list to notify.c, server.c, who.c only, and
2.001 Various fixes to make auto-recon and auto-rejoin happier, more consistent.
2.001 Officially, anything bad that happens when you do /flush is not my fault.
2.001 Fix to get_target_by_refnum not checking for NULL before deref (Robohak)
2.001 Add $hash_32bit() function from srfrog.  Converts string to 32 bit int.
2.001 Fix bug in check_window_servers() that was foiling reconnect attempts.
2.001 Add some extra debugging stuff to new_malloc, track files, lines.
2.001 NR12 release
2.001 Fix bug with NOTIFY_SIGNON defaults (srfrog)
2.001 Fix two bugs in window_server() that caused much commotion.
2.001 Fix bug where /server -delete <n> didn't work
2.001 Fix to reconnect_all_channels to support hybrid's painful key semantics.
2.001 Fix for function_hash_32bit to not require a length argument (srfrog)
2.001 Fix for /xquote -s crash (srfrog)
2.001 Add basic syntax functionality for alias argument lists.
2.001 Add basic semantic functionality for alias argument lists.
2.001 Finish implementation of alias argument lists. (See UPDATES for info)
2.001 Fix bug where local stacks were not being cleaned up properly
2.001 Fix buffer underrun when a /window server failed.
2.001 Revamp of the random number generator, support /dev/urandom now
2.001 Add /set random_source to determine where to get random numbers.
2.001 Add my_accept() to avoid accept() race conditions and
2.001 Add /set random_local_ports.  Both for the delusionally paranoid.
2.001 Add new flood/ignore stuff for topics/nicks/joins (srfrog)
2.001 Remove an unnecesary malloc() call in input_backspace.
2.001 Add /set new_server_lastlog_level, new window level after /window server
2.001 Fix the "less" script to keep track of the window to output to.
2.001 Remove the bogus "langtrans.irc" script, don't know why it was there.
2.001 Remove a really bogus use of current_ftarget in commands.c
2.001 Add the <=> (swap rvalues) operator to the new math parser.
2.001 Add some hacks in send_ctcp() to make sure trailing \001 is always there.
2.001 Add support for new ! channels from ircnet2.10 (Kasi)
2.001 NR13 release (please let this be the last one)
2.001 Fix /away's use of current_window->server instead of from_server.
2.001 Fix send_text's use of current_window->server instead of from_server.
2.001 Fix bug with /server -add crashing
2.001 Fix flood.c, so the flood levels are "TOPICS" "NICKS" and "JOINS"
2.001 Fix memory leak with $listen().
2.001 Fix check_channel_type, i had botched up the printf format.
2.001 Fix ExecuteTimers() so it doesnt keep Window pointers around.
2.001 Add int to Window struct to keep track of when it is /window kill'd
2.001 Fix make_window_current to refuse to handle killed windows.
2.001 NR14 release
2.001 Fix various calls to dgets() to make sure buffer is IO_BUFFER_SIZE big
2.001 Many changes to Makefile and source/Makefile and configure
2.001 -- So that configure honors --srcdir and --includedir, for debian (kb)
2.001 Add one more call to check_channel_type() (Kasi)
2.001 Make sure that check_window_servers() is called for every server change.
2.001 Fix userhost_reply to whine about and throw away bogus userhost replies.
2.001 Fix make_window_current_by_refnum to ignore refnum == -1.
2.001 Change help_paused_topic buffer to 500 entries.
2.001 Add panic to help_pause_add_line to protect against a segfault.
2.001 NR15 release
2.001 Fix bug where /alias -foo when 'foo' had been stubbed caused a crash.
2.001 Revamp man page, call it epic.1.  Looks better now.
2.001 Many more fixes to configure, Makefiles, to make knghtbrd happy.
2.001 Added much faster dcc checksum algorithm 
2.001 Minor hack to make dead dcc's clean up immediately.
2.001 Add 'closing' member to server struct to prevent infinite recursion.
2.001 Fix connect_to_new_server to not capriciously re-register.
2.001 Ignore dcc checksums that start with 'x', reserved for future use.
2.001 NR16 release
2.001 A couple of minor changes to the Makefile.in's
2.001 Change p_kick to remove kicked users after /on kick (list decision)
