@(#)$eterna: OLDNEWS,v 1.2 2001/08/12 15:42:26 mrg Exp $

Changes since ircII 2.2.9:

New functions:

  o  onchannel(nick #channel)   is `nick' on `#channel' ?
  o  pid()                      returns the pid of this client
  o  ppid()                     returns the parent pid of this client
  o  chanusers(#channel)        returns a list of the users on this channel
  o  for()                      like c's for with the separator being `,' not
                                `;'.  (hop)
  o  fe() and fec()             an alternative to recursion.  (hop)

New commands:

  o  beep                       sends a beep to the terminal
  o  rbind function             shows the keys bound to `function'
  o  stack action list arg      `action' is either push or pop. list is one
                                of `on', `alias', `assign', `bind', or `set'.
                                only `on' is implemented currently
  o  window remove nick         the opposite of window add.
  o  window number num          changes the refnum of a window, forcing a
                                swap if so needed.
  o  window bind #chan          permanently bind a channel to a window.
  o  window unbind [#chan]      remove permanent binding to a window.
  o  abort                      drops a core file, and a saved file (hop).
  o  disconnect [ser [reason]]  disconnects from the named server (number) with
                                the given reason.

Fixed commands:

  o  set help_window            now works again.
  o  dcc close send nick file   no longer requires the full path for `file'.
  o  transpose_characters       now works with the cursor at the `end' of the
                                screen.
  o  topic *                    now works as expected.

Changed commands:

  o  userhost [nicks] -cmd      now accepts any number of nicks.
  o  save [-all] [...]          save `all' values, or any part.  valid parts
                                are: assign, alias, all, bind, notify, on,
                                set and digraph.

  o  clear -unhold              as well as clearing the screen, it also
                                unholds one screen.  same as the binding
                                clear_screen

New scripts:

  o  newaway                    does `set show_away_once on' in scripts and
                                with as many nicks as you want
  o  uhnotify                   gives userhost with the notify list.  works
                                much better with the new userhost syntax.
  o  complete, compl.mods       tcsh-like complete scripts.  see script for
                                more information.
  o  imap                       creates an irc map.  see script for more info.
  o  undernet			script to make ircII understand undernet extras.

Changed scripts:

  o  2.8script			updated for 2.8
  o  finger			updated
  o  newformat			updated
  o  netsplit			updated
  o  tabkey			fixes for nicks with \'s in them.

New variables:

  o  realname                   changes the value of your `realname' the
                                next time you change servers (or use 
                                `/quote quit').
  o  notify_handler             three values.  `noisy', `quiet', and `old'
                                old makes /notify work like it did for 2.2,
                                `noisy'  and `quiet' make it work on a lot
                                more events.  join/quit/message/etc trigger
                                the notify, the difference being that `quiet'
                                won't show these extra differences, where as
                                `noisy' will.  they both add/remove the
                                name to the internal `notified' list.
  o  screen_options             this is orthogonal to xterm_options for
                                /window create.

Other things:

  o  redirect works much better.  it doesn't `catch' things it shouldn't in
     most cases.
  o  lots and lots and logs of bug fixes
  o  ctcp flooding is handled better.
  o  lots and lots of bug fixes.
  o  on dcc_raw dcc close works.
  o  all dcc messages go to level dcc
  o  level all contains `dcc' again.
  o  lots of bug fixes.
  o  gnu `autoconf'ified.
  o  did i meantion lots of bug fixes?
  o  if you add #define DYNAMIC_SLIP, you don't need to restart ircii
     for it to notice the ip number of the local machine has changed.
     note: this has since been obsoleted by a smarter, more general method.
  o  /window create might be stabler.  really this time.
  o  new `-q' switch does `quick start' (no .ircrc processing)


	New things for ircII 2.2
	^^^^^^^^^^^^^^^^^^^^^^^^

Commands that have changed.
	It is now possible to redirect to a DCC CHAT connecoitn with
		REDIRECT =nick
	You can have some command execute on the results of USERHOST with
		USERHOST -CMD command
	You can, and are recommented to, use WAIT different now with
		WAIT -CMD command
	You can have ircII create new winodows on screen or xterm's with
		WINDOW CREATE
	The IF and WHILE commands have changed.
    New in 2.2.2
	You can delete a server from the server list with
		SERVER -DELETE <num>
	Two new IGNORE levels, CRAP and CTCP.

New commands
	WHICH script - returns which script will be loaded with LOAD
	FOREACH - to iterate over a list.
	TIMER seconds command - executes `command' after `seconds' seconds.
	INPUT "prompt" command - executes `command' when input is read from
		the keyboard.
	PING nick - uses CTCP PING to work out how many seconds a remote 
		is from you.
	PARSEKEY key - acts as though a key bound to `key' was pressed.
	SENDLINE line - is the same as typing in the line.
	HOOK line - does an ON HOOK check.
	EVAL line - passes `line' to the inline parser, to be executed.
	CTCP UTC - A time CTCP.
	MLOAD - loads a menu.
    New in 2.2.1
	CTCP ECHO - Similar to CTCP ERRMSG.
	WINDOW LOGFILE - Sets the logfile for that window.
    New in 2.2.2
	WINDOW NOTIFY_LEVEL - sets notify level for that window.
	XTYPE - gives full control over /type

(Set help files for these)

New alias variables:
	$W $V $H $U $~

New SETable variables
	NO_CTCP_FLOOD
	SHOW_STATUS_ALL
	STATUS_USER1-3
	MENU
	HIGHLIGHT_CHAR
	HELP_PROMPT
	HELP_SERVICE
	HELP_PATH
	DCC_BLOCK_SIZE
	LOAD_PATH
	DEBUG
	VERBOSE_CTCP
	SCROLL_BACKWARD
	SCROLL_FORWARD
	SCROLL_END
	TRANSLATION
	BOLD_VIDEO
    New in 2.2.1
	SHOW_WHO_HOPCOUNT
    New in 2.2.2
	XTERM_OPTIONS
	EIGHT_BIT_CHARACTERS
	NOTIFY_LEVEL

   And STATUS_FORMAT has these new variables
	%W %X %Y %B %# %@
    New in 2.2.2
	%>

New/changed on hook's.
	ON DCC_RAW
	ON HOOK
	ON INPUT
	Several of the numeric ON's have changed.
    New in 2.2.1
	ON SERVER_NOTICE   *****  THIS HAS CHANGED  *****
    New in 2.2.2
	ON PUBLIC          *****  THIS HAS CHANGED  *****

New bindable keys.
	ERASE_TO_BEG_OF_LINE
	REFRESH_INPUTLINE
	META3_CHARACTER
	META4_CHARACTER

New functions.
	$ENCODE()
	$DECODE()
	$TOUPPER()
	$TOLOWER()
	$TDIFF()
	$CONNECT()
	$LISTEN()
	$ISCHANNEL(word)
	$ISCHANOP(nick channel)
	$WORD(number wordlist)
	$WINNUM()
	$WINNAM()
    New in 2.2.2
	$MYCHANNELS(window)
	$MYSERVERS()

Other
	You can no longer use \n in a line to separate commands.
	Functions are now access with $name().  $%name() is not supported.
	You can access varibles in structures by using struct[index]
	  as well as struct.index.
	You can use { } style braces around aliases.
	You can connected to the server via Unix domain sockets.
	The display defaults to OFF while loading a script.
	You can #define SCROLL_AFTER_DISPLAY to get 2.1.5 like scrolling.
    New in 2.2.2
	New command line option, -v, which prints the version
	and internal version (release date).
	You can use literal ^M's and ^J's to seperate the input line.

    New in 2.2.3
	The character atribute chars have changed in this version.  They
	are now:
		^_ does underline
		^B does bold
		^V does inverse.
		^O turns them all off.

old HISTORY file:
2.2.9
	fixed memory leak

2.2.7
	DCC SEND/GET now shows the size, if it exists.

	You can now use \ to escape newlines in scripts.

2.2.5
	New key binding, SCROLL_START, which moves the scroll
	buffer to the start of the lastlog buffer.  Bound to
	meta1-< by default.

	New arguemnt to /LASTLOG, -LITERAL, which allows you
	to specify the next argument as the pattern to match.
	Allows matching of numbers, eg
		/LASTLOG -LITERNAL 6667

	Channel keys, if set, are now shown in STATUS_MODE.

	When DCC connections become connected, the remote IP number
	is shown, for additional security.

2.2.3
	I think the Makefile and config.h file are easier to use
	now.

	The control characters for bold, inverse and underline
	have been changed to ^B ^V and ^_ respectively, so make
	some sort of visual connection (B to bold, _ to underline)
	with these characters.

2.2.2
	New command, XTYPE.  Happens like this;
		XTYPE [-LITERAL] <text>

	This text gets added to the input cursor, like /type does,
	except bindings are ignored with the -LITERAL switch is
	used.

	New function $CURPOS() which returns the postition from the
	start of the input line to where the cursor is now.

	New STATUS_FORMAT variable, %> which makes anything beyond 
	it right justified.

	It is now possible to close all DCC connections and kill all
	EXEC'ec process by sending the client a SIGUSR1.

	ON PUBLIC has now got this format:
		$0  sender
		$1  channel sent to
		$2- message

	New variable, NOTIFY_LEVEL, and window command NOTIFY_LEVEL,
	which affect the notification of hidden windows.  Same
	arguments as LASTLOG_LEVEL.

	Two new level of /IGNORE, CRAP, and CTCP.

	New functions, MYCHANNELS() and MYSERVERS() added.
	MYCHANNELS() takes a window refnum (defaults to current
	window), and returns a string with a list of channels on that
	windows server.  MYSERVERS() returns a string of the names of
	the servers you are connected to.

	New variable, XTERM_OPTIONS, which are passed to xterm, when
	using WINDOW CREATE.  Note that -geom switches are already
	generated by ircII, so these will be ignored by xterm.

	New variables, EIGHT_BIT_CHARACTERS, which, if set, allows
	you to input 8 bit characters (such as the Swedish character
	set).

	New SERVER option, -DELETE, allows you to remove servers
	from the internal server list.

	New command line option, -v, which prints the version
	and internal version (release date).

2.2.1
	New WINDOW command LOGFILE has been added.  It takes one 
	argument, the file name of the logfile to be used for this
	window.  Nothing is appended to this name, if you use 
	WINDOW LOG.  If you don't set a logfile for the window, and
	use WINDOW LOG, then ircII creates a name for you (old way).

	ON SERVER_NOTICE has been changed, and any script which used
	this will most likely not work any more.  In the new format,
	$0 is the server name, and $1- is the notice itself.

	New variable, SHOW_WHO_HOPCOUNT, which if set will not filter
	out the hopcount on a who reply.

2.2c
	New CTCP, ECHO, which just returns what you sent.

2.2
	New alias variables `$W', `$V' and `$H' which expand to the
	current working directory, the internal ircII release date,
	in YYYYMMDD format, and the current numeric being processed, 
	respectively.

	/ME and /DESCRIBE no longer add a period to the end.

	New variable NO_CTCP_FLOOD has been added.  When set, it makes
	your client only send out one CTCP REPLY each second, and will
	ignore anyothers it gets for that second.

	New BINDable key function, REFRESH_INPUTLINE, which, amazingly,
	refreshes the input line.

	Several /ON NUMERICS's have been changed such that $0 is now the
	server name of the originating.  These include the 31x series
	(/WHOIS replies), which in turn is /ON WHO and /ON WHOIS.
	Numberics 401, have also been changd for this.

	MSG -channel is no longer supported.  Multi-channal make
	this switch unreliable.

	IRCII now supports CTCP PING.  You can call this with
		/PING nick[,nick[,nick...]]
	And it will show you how many seconds to takes to get a
	message to them and back.  Be warned that too many nick
	will cause the server flood control to be used, making
	the times calculated wrong.

	You can now redirect in to a dcc chat connection, with
		REDIRECT =nick command.

2.2pre8
	New command, INPUT has been added.  It takes arguments like:
		/INPUT "prompt" command args
	
	Where it displays "prompt" and then calls command, with args,
	and with the line prompted for as $*.  The use of this is
	strongly encouraged over the use of variable $"..".  Similar
	problems that occur in /wait.

	USERHOST and HOST commands have been changed to allow
	asymnronous command execution, depening on the return of
	the userhost reply.  The form is
		/USERHOST <nick> -CMD <commands>

	Where $0 - $4 expand to the nick, oper status, away status,
	username and hostname respectively.

	If you want the screen to be scrolled like it was in 2.1.5
	and before (A line at the bottom), edit source/window.h and
	define SCROLL_AFTER_DISPLAY.

	DCC CHAT has be improved.  No longer will a collision cause
	nasty things to happen - the client will automatically connect
	if a collision is detected.

	LASTLOG has been changed so that you can now use it like this:
	/LASTLOG <pattern> <count> to get the last <count> lines that
	match <pattern>.

	LIST -TOPIC has been fixed, and its functionality changed,
	so that it do NOT over ride other switches, but works with
	them.

	Three new variables STATUS_USER1-3 have been added, to combine
	with the new STATUS_FORMAT variables, %X, %Y and %Z. <poxaV>

	New command, PARSEKEY, added.  The argument is one of the key
	functions, and the effect is the same as would be if you
	pressed a key bound to that function.

	New command, SENDLINE added.  The arguments parsed to it
	are processed like normal text input, except they are not
	caught by ON INPUT.

	ON INPUT changed to catch all inputted text, not just
	text being send to a channel or a nick.  New variable
	INPUT_PROTECTION added to stop people shooting their
	own foot with the new ON INPUT.

	One new BIND functions has been implimented -
	ERASE_TO_BEG_OF_LINE (not bound to anything by default),
	erases from the current cursor position to the beginning
	of the input line - <poxaV>

	Added new variable HIGHLIGHT_CHAR.  That is /setable to either
	BOLD, INVERSE, or UNDERLINE.  It effects the character that
	ignore + uses.

	Made dcc chat messages show the time after them, if away,
	like normal messages.

	Made ctcp not reply to global messages, either in the form
	of $*.domain, or #*.domain.

	Added a new command line argument.  `-S'.  It does the 
	oppsite of the `-s' option, and also made -s the default.
	Make then run ircserv if they want it, not if they don't
	know.

	Rewrote BreakArgs() in parse.c trying to fix a bug with
	referencing NULL pointers on domain/ox.

	More of the source files reformatted.   Starting to get some
	distance with this finally.

	We now understand that &channel are channels, for the 2.8 servers
	that will be arriving soon.

	DCC LIST now shows the start time, and the number of bytes
	sent, and read on a dcc connection.

	Added a ctcp reply to dcc.c so that when a dcc collision 
	occurs, we also inform the other client of the event, rather
	than them not knowing about it.  (obsoleted)

	Added new functiality to the /TIMER command.  If it is called
	with out arguments, then it list the commands that were
	added with /TIMER, that are pending to be executed.  If it is
	called with the -DELETE flag, and given a refnum (first column
	in the timer list), it will attempt to delete the timer.  You
	can also specific the TIMER command to use a refnum of your
	choice, with the -REFNUM n flag.  It generates an error if
	the refnum already exists, or you specify a negative number.
	It is illegal to remove a timer from itself.

	Added new functionality to /window server command.  You can now
	do /window server server.name:port:password:nick, and the nick
	will be set properly for that server.

	Two new functions, $ENCODE() and $DECODE().  They work as a
	pair, such that $ENCODE($DECODE(blah)) will return blah, and
	the other way around.  The primary use is tha $ENCODE() always
	returns a value that is suitable for a variable name, so that
	the well used $strip_chan() alias is not needed.  <Daemon>

	Added -WIDE flag to /LIST.  Shows the channel names, and their
	sizes in as little space as possible.  <Troy>

	HELP now works properly again.  No recusive calls to irc_io, and
	no ping timeouts, but with the same functionality as 2.2pre7.

	New variable added, HELP_PROMPT.  If set ON, nothing different
	happens, but if set OFF, then ircII will not prompt for more
	help after showing a file.

	All the header files reformatted, and some of the source files.

	Fixed bug in window server which caused the client to become
	confused about nicks for each window.

	Fixed bug that caused ircII to continue trying to connect to the
	last server in the server list if it failed on every other one,
	and often flooded umode s people.  Nasty Nasty.

	Fixed bug in status.c/window.c that caused the window_notify
	to be out of date on occasion.

	When changing servers, or when the last window to a server is
	closed, the QUIT is actually sent.

2.2pre8.troy
	A new command has been added - /TIMER. This takes the form:

		TIMER seconds command

	and causes the given command to be executed after the specified
	number of seconds. Any number of timers can be issued, and 
	they do not need to be issued in order. For example, the following
	alias:

		ALIAS JUMBLE TIMER 10 echo one;TIMER 5 echo two; \
				TIMER 15 echo three

	will cause "two", "one" and "three" to be printed at 5 second
	intervals, starting with "two" in 5 seconds. Using /TIMER should
	be the preferred approach over /SLEEP.

	ircII can now take advantage of X windows and screen to create
	windows in different xterms or screen windows. The command to
	create such a window is /WINDOW CREATE. Each window created in
	this manner gets its own input line. This feature is
	particularly useful if you use multiple channels. There are
	still some things to be fixed with this. In particular,
	prompted input can give unexpected results ($"..", /Oper and
	server passwords, confirmations), as can the old form of the
	/WAIT command. In short, when using multiple windows,
	expect the unexpected.  To use this feature you will have to
	define WINDOW_CREATE in source/window.c.

	A new form of the WAIT command, /WAIT -CMD command,
	(or WAIT -CMD %process command) causes the given command
	to be executed after the wait condition has occured.
	For example, the following alias:

		ALIAS BACKWARDS wait -cmd echo hello there;echo hi there

	Will actually display "hi there" before "hello there", because
	the "hello there" echo is not executed until a WAIT token is
	received from the server.

	This new form of /WAIT is to be used in preference over the
	old form. The old form has innumerable problems, among them being:

		If one WAIT is executed while another is pending,
		both will be registered as satisfied when the first
		returns. A warning is now issued when this happens.

		If you are in a prompted input sequence (such as oper
		password, confirmation prompts, and $".." input),
		results can be unpredictable.

		It is not consistant with the message driven programming
		model which exists in ircII.

	With multi window enhancements the problems with WAIT become even
	more prohibitive, unless used in the -CMD form.

	If you are echoing output to the screen from within the WAIT -CMD
	form, it is probably a good idea to record the current window
	and use XECHO -WINDOW to ensure that output goes where it should.

2.2lynx.pre8
	Modified /me (edit.c) to automatically append periods,
	feature used by new 'action' script.

	Revamped many scripts, the config.h, little changes to
	Makefile and help files.

	Globally replaced all put_it("*** .. by new function say()
	and changed put_it_always into yell.


2.2pre7.myc6.phone
	Added Megre support of irc 2.8, there is still a long way to
	go here.   Code for the user mode e has been written, but not
	added, as it probably won't be in the server.

	Added window refnum to the output of the WINDOW LIST command.

	Notify bug on start up fixed.

	Two new functions GETPID() and GETPPID() added to allow the 
	process ID, and parent process ID to be accessable with in
	a script.   These have been left out for now.

	Changed the KICK command, to allow the sending of kick
	comments.

	Bug in QUIT_ON_OPERATOR_KILL fixed, where last time was
	not `seen' for long enough to be read.

	Mail checking bug fixed.

	Added new variable SHOW_STATUS_ALL.  When set, it shows everthing
	in every (visible) status line.  When not set, it only show
	things that (I think) are relevant to that window, and are
	not the same as the current window.   Things like nickname, 
	usermode, are only shown on one window, if connected to only
	one server.

	Made DCC with no arguments the same as DCC LIST.

	Added the window notification status to WINDOW command (no args).

	Away changed to allow different away messages on different
	servers.  Two flags -ONE and -ALL (-ONE default) for the sending
	of the away message to the servers you are on.

	Bug in $RAND() fixed <Daemon>.

2.2pre7.myc6
	HELP_SERVICE and HELP_PATH are now SETtable variables.

	Memory leak in add_to_window() is fixed.

	WHICH doesn't wedge the client (by corrupting load_depth) any more.

	MSG *, QUERY *, CTCP *, REDIRECT *, NAMES *, LIST *.  [Daemon]

	$U inserts cut buffer.  [Daemon]

	$RAND() is a bit more portable and doesn't use floating point.

	Scripts updated to use `:' as noop rather than `#'.

2.2pre7.myc5
	QUOTE USERHOST *really* doesn't core dump any more.  B-)

	`voice' script updated for new script parser.

2.2pre7.myc4
	The Makefile now handles making the symlink for config.h.  This
	has the advantage of being slightly easier to use on a machine
	without symbolic links; you just change the `LN' variable in the
	top-level Makefile to `cp'.  It also has the advantage that we
	won't see patch files with two copies of the diffs for config.h
	any more.  B-)

	Makefile.proto has been rearranged somewhat, and the dependencies
	have been updated.

	DCC GET bug from myc2 fixed.

2.2pre7.myc3
	All the bloody #defines at the beginning of keys.c are now in
	keys.h.proto, and are handled by `count'.

	Stupid inverse (and bold) video bug from myc2 fixed.

2.2pre7.myc2
	^Os are no longer appended to lines before storing them in the
	lastlog.  This avoids adding ^Os to lines in the log file when
	using /LASTLOG.  Bleah.

	New commmand :, which is a noop.  Using # as a noop command is
	strongly discouraged, as it is treated differently in scripts.
	(# at the beginning of a line in a script (ignoring spaces) means
	to ignore the whole line.)

	Bug in handling quoted braces from 2.2pre7.myc1 fixed.

	`DCC GET nickname' gets the first file offered by `nickname'.

	KICK comments are now displayed, if present.

	Removed silly whitespace limitation in scripts.

	JOIN no longer automatically adds a `#' to a channel name if missing.
	[Avalon]

2.2pre7.myc1
	New commands WINDOW BACK, NEXT, PREVIOUS.  [phone]

	New commands ON HOOK and HOOK.  [Daemon]

	DCC SEND and GET now display speed when transfer is finished.  [Avalon]

	(Rest of these by Mycroft:)

	Added declaration for `newexp' in whilecmd() which Troy left
	out.

	Removed line discipline code for AIX.

	Fixed ON_KICK.

	Tabs now display in reverse video after limit reached, so you
	can actually see them.

	-c works again.

	ON WINDOW doesn't recurse (and thus doesn't crash).

	TOPIC and ACTION messages go in the right windows.

	PAUSE_AFTER_MOTD is now a compile-time option and actually
	works.

	QUOTE USERHOST doesn't crash.

	QUOTE ISON does something sensible.

	USERHOST and ISON with no arguments no longer corrupt the
	whois queue.

	\ is no longer converted to \\ by /SAVE and in the history.

	/MSG FOO, does the right thing.

	/TYPE \^ now types out a caret, which you couldn't do before.

	White space around braces is less important.  The main effect
	is that K&R style braces now work.  You should be able to use
	whatever indenting style you prefer.  Note that braces inside
	a command should be quoted now, a la \{ and \}.

2.2pre7
	Meta4 is now sticky. That is, Meta4-C-D-E-F-G invokes the
	meta4 versions of C, D, E, F and G. This effect lasts until
	meta4 is invoked again. Additionally, the Meta4 characters
	^h, SPACE, h, i, j, k, x, H, I, J, K, L and X have been
	bound in such a way that BIND ^[ META4_CHARACTER now
	gives a vi editing mode.

	Bugs in complex '@' expressions fixed.

	Thu Jun 11 09:48:47 1992  Charles Hannum  (mycroft@ai.mit.edu):

	* Makefile: Change RS/6000 support.

	* config.h (DEFAULT_STATUS_CHANNEL): Delete duplicate definition.

	* script/action: Remove `on's.

	* script/bigcheese: Convert to 2.2pre6 syntax.
	script/finger.who, script/fnet, script/killpath: Likewise.
	script/kpstat, script/log, script/nicks, script/repeat: Likewise.
	script/shell, script/voice: Likewise.

	* script/version: Update version number.
	script/netsplit: Rewrite to handle multiple splits.
	script/brc: Fix typo.

	* source/alias.c: Change function prototypes to match definitions.
	source/ctcp.c, source/edit.c, source/status.c: Likewise.
	source/term.c, source/translat.c, source/vars.c: Likewise.
	source/window.c: Likewise.

	* source/edit.c: Put comment delimiters around text after #endif.
	source/help.c, source/hold.h, source/irc.h, source/ircaux.c: Likewise.
	source/lastlog.h, source/term.h: Likewise.

	* source/exec.c: Add support for AIX 3.
	source/help.c, source/irc.h, source/ircserv.c: Likewise.
	source/log.c, source/newio.c, source/scandir.c: Likewise.
	* source/ircaux.c: Rename _RS6000 to _IBMR2.
	source/status.c: Likewise.
	* source/term.c: Remove unnecessary code for AIX 3.

	* source/vars.c: Replace NULLs with 0s in integer context.

	* source/status.c (convert_sub_format): Make bletch an array to
	prevent being put in readonly storage.
	(status_channel): Use format string even if *private*.

	* source/notice.c (parse_server_notice): Don't call
	reconnect_all_channels and reinstate_user_modes if first connect
	(phone bug).

	* source/menu.c: Make sure menu cursor doesn't get redrawn if menu
	disappears.

	* source/exec.c: Make sure messages get redirected after EXEC output.

	* source/edit.c (evalcmd): Fix EVAL when subargs == NULL.
	source/if.c (ifcmd, whilecmd, foreach): Likewise for IF, WHILE,
	and FOREACH.

	* source/if.c (whilecmd): Copy exp on every iteration, as parse_inline
	destroys it.

	* source/irc.c: Update version number.

	* source/dcc.c: Include arpa/inet.h for prototypes.

	* script/ping, script/whowas: New scripts.
2.2pre6
	WARNING. 2.2pre6 will almost certainly require changes
	to your .ircrc and script files due to changes in the
	parsing. The intention at this point is to keep the new
	syntax forever. That is, unless there's something I
	have missed, there will be no further script breaking
	changes.

	DISPLAY now defaults to OFF in scripts.

	Two new meta keys have been added. Meta3 is bound by
	default to META1-[, and Meta4 is left unbound.

	DCC SEND now checks that a file exists before sending
	the request. Memory allocation bugs when using DCC
	file transfers with ~ pathnames fixed.

	If you have experienced corrupted output from ircII,
	this should be fixed.

	Several display bugs, including a memory leak related
	to using windows have been fixed.

	Missed PINGs when in the help pager fixed.

	A new command, EVAL, has been added. EVAL causes
	its arguments to be passed through variable substitution
	and executed.

	Alias substitution is no longer performed in scripts,
	regardless of the setting of INPUT_ALIASES. To force alias
	substitution, use EVAL.

	A command beginning with '@' is taken to be an
	alias expression as would be normally parsed
	from within ${}. The expression is substituted and
	the substituted value discarded.

	The script loading path is now accessible as the SET
	variable, LOAD_PATH. Additionally, if you are unsure
	as to which directory a script being loaded is in,
	the /WHICH command will display the full path to a
	script. eg. /which global shouls give something on all
	systems.

	Bugs in Menus which caused core dumps have been fixed.

	Bug in DCC which caused incoming DCC messages not to be
	directed to window level DCC fixed.

	Bug with +s channels and /names fixed.

	Connections to servers on UNIX domain sockets are now
	supported.

	Aliases can now be recursive up to a maximum level
	as specified in the variable MAX_RECURSIONS.

	The inline variable parser now substitutes \n, \r, \0
	and \p too their equivalents in the CTRL-P convention.

	Having ! as the first character for the INDEX function
	no longer causes just unescaped characters to be matched.
	It is now a normal character in this context.

	The $%FUNCTION syntax is no longer supported. You can
	still use functions - just remove the '%'.

	The parser used when INPUT_ALIASES is on has been changed
	again. Text between brackets (...) and {...} is no longer
	subject to alias expansion, unless the opening bracket is
	escaped (ie... \( or \{ ). This affects alii and input when
	INPUT_ALIASES is on.

	Additionally, You can return to full alias substitution
	within ${...} by enclosing the substitution text in
	[...]. Thus  if $0 == test, and $bear == black
		${[$0]} expands to "test"
		${[$bear]} expands to "black"
		${bear} also expands to "black"
		${ bear == [black] }  expands to "1",
		${ [$0] == [test] ) expands to "1"
		${ [$0] == [black] ) expands to "0"
		${ [$0](this) } expands to the return value of $test(this)

	There is a new form for the if command. This is:
		if (expr) {then_commands} {else_commands}
	Note that because the expression, the then_commands
	and the else_commands are between brackets, they are
	not expanded in alias expansion. This is taken care of
	in the if statement itself. The expression is treated
	as if it were enclosed in ${...}. Thus all the comparisons,
	groupings, arithmetic and boolean operations that a
	available in ${...} can be used in the expression.
	Also note that you can have more than one command in
	each of the then and else parts of the condition.

	The result is that what used to look like this:

	on ^send_public * if "$^!^=^>^<C=$^!^=^>^<0" \
		"echo $%format(11 <$N>) $^"1-" \
		"echo $%format(10 <$N):$^"0> $^"1-"

	can (and must) now be expressed like this:

	on ^send_public * if ( C == [$0] ) \
			{ echo $format(11 <$N> $1- } \
			{ echo $format(10 <$N):$0> $1- }

	Note that this means there is no longer any need for using the
	^ escaping, and this may disappear in a later version unless
	there are strong objections.

	The same thing has happened to while and foreach, which now
	have the syntax:
		WHILE (expr) {commands}
	AND
		FOREACH structure index {commands}

	The effect of this on WHILE and FOREACH is that you no longer
	need to double up occurrences of '$'. You can still get this
	effect if you wish by escaping the leading bracket in the
	appropriate expression. Additionally, both while and foreach
	can now be recursive. Thus the following works as expected:

		assign a.1.1 one one
		assign a.1.2 one two
		assign a.2.1 two one
		assign a.2.2 two two
		alias fe
		{
			foreach a i
			{
				foreach a.$i j
				{
					echo $i $j $a[$i][$j]
				}
			}
		}

	THE OLD SYNTAX FOR IF, WHILE AND FOREACH IS NO LONGER SUPPORTED.

	In scripts, lines beginning with '{' and containing other text
	are joined on to the previous line with one space placed between
	the two lines, thus the above example could have been written as:

	on ^send_public * if ( C == [$0] )
			{ echo $format(11 <$N> $1- }
			{ echo $format(10 <$N):$0> $1- }

	Additionally, the {..} syntax for grouping within scripts
	can now be nested. Nested {...} pairs must have the brackets
	placed on their own line, and the brackets are included in the
	resulting text. Thus the following is equivalent to the above:

	on ^send_public * if ( C == [$0] )
			{
				 echo $format(11 <$N> $1-
			}
			{
				echo $format(10 <$N):$0> $1-
			}

	Or, for a little more verbosity:

	on ^send_public * if ( C == [$0] )
			{
				echo Current Channel:
				echo $format(11 <$N> $1-
			}
			{
				echo Another Channel:
				echo $format(10 <$N):$0> $1-
			}

2.2pre5
	Bug in "Password" prompt for server passwords fixed.

	Bug in WINDOW REFNUM fixed. <phone>

	Bug in ON DCC_CHAT which prevented interaction with
	the server fixed. <phone>

	Bug which caused +w'd non-opers to see their own WALLOPs
	twice fixed. <phone>

	Additional operators have been added to the ${...}
	expresions. They are the equality and inequality
	operators (==, !=, >, >=, <, <=), the unary NOT
	operator (!), and the conjugation operators (&&, ||, ^^).
	These take 0 as false and any other number as true,
	and return 1 as true and 0 as false.

	On top of these are the assignment operator (=) and the
	string concatenation operator (##). The assignment operator
	means that the following now makess sense, and causes the value
	of first_name and last_name to be concatenated with a space
	inserted between them, and the value assigned to full_name.

		@ full_name = first_name ## [ ] ## last_name

	The following is also possible:

		@ a = b * (c + d)

	A new variable has been added for script developers.
	The DEBUG variable enables three types of debugging
	output dependant on the settings of various bits.
		bit	value	purpose
		 0	  1	Display all commands executed
		 1	  2	Display all alias substitutions made
		 2	  4	Display all function calls and return values

	More changes to parsing have occured. Firstly, there
	is no longer any '\' substitution on input. Thus, when
	you type text to a channel, in a /msg or elsewhere, it
	comes out exactly as you type it.

	On the other hand, '\' processing does exist anywhere
	that alias expansion occurs. The result is that if you
	have INPUT_ALIASES ON, you won't notice the difference.
	Also, aliases and ons still get the '\' substitution
	performed on them. All \c pairs where c is any character
	are collapsed to just 'c' after all parsing has been done,
	with the exception of ", !, =, < and >, which are
	required by if and while. This shouldn't be the case
	for much longer.

	Function and array index expansion now only observes
	unescaped bracket delimiters. Thus $%index(\) abc\)def)
	returns 3.

	Finally, the '%' is no longer needed for functions.
	Thus you the above example is the same as
	$index(\) abc\)def)

	The net result of all the changes to parsing in this
	version should be to make both command entry and alias
	construction much more intuitive.

	A new function, TDIFF, has been implemented.
	TDIFF takes as its argument a time interval in seconds
	and returns it as the english representation of
	that number in the form:

		dd days hh hours mm minutes ss seconds

	omiting any zero values, unless all values are zero,
	in which case the seconds field is returned.

	Bugs in dumb mode fixed.

	The parsing of ${} expressions has been changed. When
	mathematical expressions are being used, order of
	operations is respected and brackets are recognised
	and treated correctly. Additionally, functions can
	be referenced (without needing the % qualifier), and
	functions and aliases can be mixed to give versatility.
	This may break some numeric expressions, but will make
	a lot more a whole lot more legible and intuitive. For
	example, the following:

		${3*(INDEX(x abcxdef)+2)}

	Yields 3*(3+2) = 15
	or, if you have an alias:

		ALIAS TEST echo ${INDEX(x $0)*5}

	and then type:

		/TEST abcxdef

	you will get back 15

	Then, if you have a set of functions, A.1, A.2, A.3,
	and the variable IND is set to 2, then ${A[$IND]()}
	will resolve to an invocation of A.2 as a function.

	If you have a function, F, and a pair of arrays A
	and B, each with elements numbered 1-10, and F returns
	either A for 1 and B for 2, then the following:

		${F(2)[5]}

	returns element 5 from array B.
	Because order of operations is now respected, both
	${3*2+5} and ${5+2*3} return 11.

2.2pre4
	/WHO * now results in failure if you are not on a channel.

	Behaviour of positioning when menus are being used has been
	corrected. There's the possibility that I broke something
	else while doing it though.

	The worst of the memory leaks has been fixed. There are
	still some memory leaks apparently present. If you compile
	with ALLOC_DEBUG defined, then when the memory tracking
	table gets full (indicating a leak), IRCII will abort,
	generating a debug.log which lists all allocated blocks
	with their sizes and contents in ASCII. This should
	prove helpful in tracking leaks.

	The slosh (\) no longer quotes characters which have no
	special meaning, thus allowing you to enter a '\' in the
	text without doubling it up. Additionally, The \n sequence
	no longer works. Use ';' in aliases instead, and quote the
	CR or NL character to get the same effect interactively
	(ie. ^Q^J or similar).

	Fixes to the multitude of bugs in pre3.

2.2pre3
	If the environment variable "MAIL" is set, IRCII now uses
	it to determine which file to check for mail.

	The VERBOSE_CTCP variable has been fixed.

	A new function, CONNECT(), gives access to TCP sockets
	at the application level. The arguments are the destination
	host and port number, and the return value is the
	file descriptor (fd) associated with that socket.
	A null file descriptor indicates that the host could
	not be resolved, and a negative descriptor indicates
	that an error occured in connecting.

	To test this facility, create a connection to the
	echo service on some machine with:

		/alias socktest echo $%connect(host 7)

	Which will echo the file descriptor.
	Then send messages to it with:

		/dcc raw fd host message

	These will be echoed back at you by the remote host.
	Incoming messages can be intercepted with ON DCC_RAW,
	which has the following formats:

		fd host D data
		fd host C
		fd host N port
		fd host E port

	The D message indicated incoming data.
	The C message indicates that the socket has been closed.
	The N message indicates that a socket listening on the
	specified port has accepted a connection. fd in this case
	is the file descriptor for the new connection.
	The E message is generated when a CONNECT() results in a
	successful connection.

	The LISTEN() function creates a listening socket. It takes
	a single argument - the port number on which to listen. If
	this is zero, then a port number is assigned. The return
	value is the port number on which the socket is listening
	for connections. A port number below 1025 results in an
	error.

	Conventions to be used for the socket access:

		Scripts using sockets should never use the
		serial number 0 in their hooks. As their first
		act before using the DCC_RAW hooks, they should
		set:

		ON ^DCC RAW * #

		To ensure that all raw DCC sockets produce no
		output.

		A new set of hooks should be created for each
		active socket at a chosen serial number. One
		must always exist to detect the close message,
		and as its last act must remove all the hooks
		for that file descriptor.
	
	
	You can now "send" a message to a command. For example,
		/msg /echo this is a test
	is the same as
		/echo this is a test.
	The primary use of this is to allow a /QUERY of a command.
	Thus if you /query /echo, everything you type to the
	current window will simply be echoed back, and if you
	/query /exec, you can use IRCII as a shell. Note that
	when querying a command, you may need to use XECHO -WINDOW
	to ensure output goes to the right place.

	CTCP UTC has been added. This is primarily for robots
	to send date and time information to users and have it
	displayed in local time. The format of the UTC
	CTCP is:
		UTC number
	where number is the ASCII representation of the 32 bit
	integer representing the time as is used on UNIX machines.
	When IRCII receives this CTCP, it replaces the text of
	the local time expressed in the local language back into
	the original message. Thus if you send the following:

		/NOTICE nick The time is ^AUTC 702777074^A

	The user might see:

		-yournick- The time is Thu Apr  9 09:51:14 1992

	(if their timezone is Australian Eastern Standard Time).

	Menus have been added. The menus are totally user
	configurable and a test menu has been provided in
	the top level directory of the IRCII source distribution.
	To use this menu, copy it to your home directory,
	run IRC, and to the following:

		/MLOAD test
		/SET menu Main Menu

	Control-R is bound to ENTER_MENU, and while in the menu
	you can use vi-like keys or EMACS-like keys to move
	through the options, and either '.' or SPACE to select
	an option. The format of the menu file is as follows

	A line beginning with a '#' represents a comment.
	Blank lines are ignored.
	A line beginning with the word "MENU" starts a new menu
	and gives it a name.
	A line beginning with the word "OPTION" adds a new option
	to the menu, gives it a name and describes what it does.

	For more information, see the demonstration menu shipped
	with the sources.

	Bug which cleared the input line when calling WAIT from
	ON TIMER fixed.

	Bug which left channel names from a previous connection
	in the channel list even if they could not be rejoined
	fixed.

	User modes are now restored after a disconnect/reconnect.

	Bug which caused the scrollback buffer to duplicate messages
	when HOLD_MODE is on fixed.

	USERHOST is now used in place of WHOIS to retrieve IRC-Op
	information on WALLOPing users and in the case of 2.6.2
	servers, user@host information for IGNORE. This means
	that there are now three commands going through the WHOIS
	queue - WHOIS, ISON and USERHOST. It is not a good idea
	to /quote these, as you will be likely to corrupt the
	WHOIS queue. USERHOST can now be issued with /HOST and
	/USERHOST

	It is now possible to have more than one ON hook executed for
	each event triggering a hook. This has been done by adding a
	new serial number concept to the ON command. Each ON hook has
	a serial number attached. Serial numbers can be any number
	from -maxint to maxint, with the default being 0.

	When an event triggers a hook, IRCII now goes through the ON
	hooks added for that event, and for each serial number used
	by ON hooks in that hook type, finds the best match out of those
	ON hooks which have that serial number and executes that ON
	hook. The hooks are executed in order of serial number. Thus
	if you set up the following set of MSG hooks.

		ON #^MSG -666 * echo Message coming:
		ON ^MSG * echo Message from $0: $1-
		ON #^MSG 666 * echo I got one, I got one!
		ON #^MSG 666 WiZ echo WiZ hath spoken

	will cause the following to appear when you receive a message:

		Message coming:
		Message from nick: text
		I got one, I got one!

	And the following if you receive a message from WiZ:

		Message coming:
		Message from WiZ: text
		WiZ hath spoken

	The default serial number is 0, and the serial numbers are always
	executed in order, starting with the lowest, and ending with the
	highest.

	Although the '^' modifier can be used with any serial number,
	it will only suppress the decault action if used with serial
	number 0. Thus if the only message hook you have is:

		ON #^MSG -666 * echo Incoming:

	You will see the following when you receive a message:

		Incoming:
		*nick* text

	It is advisable to place any ON hooks which do not suppress the
	default action in a serial number other than 0. In particular,
	TIMER hooks, which are generally not intended to exclude other
	TIMER hooks, should be placed at different serial numbers wherever
	possible, and never on 0 (since 0 is the most likely place to
	get a clash if anybody does use it).
	
	The # modifier (bind to current server) for ON commands has been
	changed to '&'.

	Fixed display bug with reverse and bold modes which caused
	these modes to be turned off if a line wrapped. Also fixed
	NOTIFY and LINKS problems.

	The bug in user mode processing when a MODE command makes no
	actual changes to the user mode has been fixed.

	A new status line variable, %B, gives the number of lines
	in the hold buffer for the current window. Its format
	is controlled by the STATUS_HOLD_LINES variable. %B is only
	updates once for every ten lines.

	New status line variable, %# added. This returns the current
	user mode. Its format is controlled by the STATUS_UMODE
	variable.

	The behaviour of FLUSH when HOLD_MODE is on has changed.
	it now clears the hold buffer for the current window before
	flushing further output from the server. The result is that
	with HOLD_MODE on it is now impossible to get into a
	situation where you are being flooded by server output
	with no hope of reprieve.

2.2pre2
	^G bug fixed. A couple of small things cleaned up.

2.2pre1
	Note that there have been several new variables added in
	this version, so old config.h files won't work. Also the
	IRCIIhelp service is being regionalised. You should set
	HELP_SERVICE to the nearest IRCII help service in config.h

	Three new BIND functions have been implimented -
	SCROLL_BACKWARD (bound by default to ESC-p), SCROLL_FORWARD
	(bound by default to ESC-n), and SCROLL_END (bound by
	default to ESC-e). These allow you to scroll through the
	output stored in LASTLOG without having to use the
	LASTLOG command. SCROLL_BACKWARD causes IRCII to scroll
	half a window of LASTLOG data on to the screen, pushing
	whatever is in the window towards the bottom. ESC-p
	reverses this, thus looking at newer parts of the LASTLOG
	history. ESC-e exits this scrollback buffer facility
	at any time. This facility is probably best used with
	HOLD_MODE set to ON, and requires SCROLL to be set to ON.
	If you use this facility with HOLD_MODE off, then when you
	leave the scrollback buffer, either by SCROLL_FORWARDing
	to the end of it or SCROLL_ENDing, all text that has been
	accumulated will be printed. If you have HOLD_MODE on,
	the window will be held until you manually unhold it.

	Provision has been made for memory allocation debugging
	for developers. Add -DALLOC_DEBUG to the CFLAGS, and
	IRCII will abort (generating a core dump) should memory
	be freed which was never allocated. Additionally, a
	dump will be made showing the locations of all allocated
	memory with the two preceding long integers in memory.
	Additionally, SEGV will be trapped and will generate
	a similar log, with the addition that if you are using
	an IBM RS6000 it will dump a heap walk. People on other
	platforms will need to either add heap walk code for
	those systems or manually walk the heap using the
	debugging information. The dump is stored in debug.log

	A new XECHO flag, -WINDOW, has been implimented. Thus:
		XECHO -WINDOW 1
	always sends output to window 1, and
		XECHO -WINDOW JUNK
	always sends output to the window named "junk". If the
	window does not exist, the -WINDOW flag has no effect,
	except to cancel any earlier -WINDOW flag.

	Two new modifiers have been added to /ON. If the first
	character of the first argument (the hook name or numeric
	number) is '#' or '@', the ON only affects things relating
	to the current server. Additionally, if it is '@', and there
	is no match for things in the list of ONs applying to the
	current server, it will not resort to the default list.
	[Changed in pre3]

	WHO -LUSERS (returns only non-operators) and
	WHO -NICK <nickname> (returns only people matching the
	nickname argument) have been implimented.

	A new variable, DCC_BLOCK_SIZE controls the size of
	blocks sent when sending files using DCC SEND.
	The default is normally 512. Increasing this number
	increases network efficiency. Decreasing this number
	slows down the transfer, but also decreases the chances
	of the transfer being aborted over bad links.

	Use of real estate when SCROLL is ON has been improved.
	There is no longer a blank line between the text and
	the status bar. This takes a little getting used to,
	as now the screen scrolls before a line is printed
	rather than after.

	You can now include text modification characters
	(^B, ^V, ^_ and ^O) in STATUS_FORMAT. If you change
	the format at the start of STATUS_FORMAT, you will
	have to do it again after any %C or %U, as these
	both reset it to reverse video.

	You can no longer abbreviate QUIT, SIGNOFF, BYE or EXIT
	in NOVICE mode.

	All restrictions on IGNORE by user@host removed.

	Internals given a decent reworking. There could be bugs here.
	You should now never see ircd's colons marking the last
	argument.

	Added two new wildcards to the pattern matching system.
	'%' matches any sequence of characters except a space.
	'?' matches any single character.

	International character set support added. Translation
	tables are supplied for various terminal types. To activate
	the appropriate character set, /SET TRANSLATION charset_name
	eg. For an IBM PC set up for US English (Code page 437),
		/SET TRANSLATION CP437
	The translation tables assume that text transmitted on the
	servers adheres to ISO 8859/1. If your terminal understands
	ISO8859/1, set TRANSLATION to LATIN_1. The default is ASCII,
	due to the fact that nothing can be safelt assumed about any
	terminal.

	Bug in /set history 1 fixed

	Bug with redirecting to yourself fixed. It is now illegal
	to redirect to yourself.

	$P (Chanop status variable) fixed, and a new status line
	substitution, %@, which subsitutes to STATUS_CHANOP if
	you are chanop on the channel shown on the status bar.

	$~ now substitutes to the last word on a line.

	New functions:

	ISCHANNEL(word)		Returns 1 if word is a valid
				channel name.
	ISCHANOP(nick channel)	Returns 1 if nick is a chanop
				on the given channel.
	WORD(number wordlist)	Returns the specified word from
				wordlist. The first word is
				numbered 0.
	WINNUM()		Returns the current window number.
				this is always the window which is
				indicated by STATUS_WINDOW.
	WINNAM()		Returns the current window name.
				this is always the window which is
				indicated by STATUS_WINDOW.
				If the window has no name, it returns
				nothing.

	INVERSE_VIDEO variable and beyond fixed.

	A new character attribute, bold, has been added. This
	is enabled and disabled with ^_. Disabling bold has
	the side effect of disabling inverse and underline
	without recording it internally. You should allow for
	this when using bold text. Bold text can be enabled
	and disabled with the BOLD_VIDEO variable.

	The status line problems with attribute characters
	have been fixed. You can now include attribute characters
	in the status line and they will take effect. One
	application of this is to change the status bar from
	inverse text to bold or underlined by including ^_ or
	^V at the start of STATUS_FORMAT.

	You can now refer to the elements of structures
	(normally Structure.Element) as Structure[Element].
	When you do this, Element is evaluated as an expression
	before it is appended to Structure. Thus if A has the
	value "TEST", and there is a variable "B.TEST" with the
	value "Message":
		echo $B[$A]
	yields:
		Message
	These can be repeated, as in:
		$MATRIX[0][0]
	which becomes "$MATRIX.0.0". The result is a pseudo-array
	effect.

	New command, FOREACH has been added. The format is
		FOREACH structure variable command
	This causes command to be executed once for each
	element in the named structure, with variable
	substituted to the name of the element. Thus
	if you have assigned:
		/ASSIGN A.1 ONE
		/ASSIGN A.2 TWO
		/ASSIGN A.3 THREE
		/ASSIGN A.4 FOUR
		/ASSIGN A.5 FIVE
	and have an alias:
		/ALIAS SHOWA FOREACH a i ECHO $$i
	and type
		/SHOWA
	The output will be:
		1
		2
		3
		4
		5
	Alternatively, you can use:
		/ALIAS SHOWA FOREACH a i ECHO $$a[$$i]
	to get:
		ONE
		TWO
		THREE
		FOUR
		FIVE
	Note that if you use numbers, 11 comes before 2.
	The easiest way around this is to start numbering
	elements at a higher number, such as 100.
	Note that FOREACH, like WHILE, does variable
	substitution once when the FOREACH command is
	evaluated, and once for each iteration. This
	means that in general you will need to double
	up any occurences of '$'.
2.1.5b-2.1.5g

	Functionality of WHO -HOST and WHO -SERVER returned.

	New WHO flags, -HERE and -AWAY added.

	New functions:

	MATCH(pattern word-list) Returns an index into the word
				list of the first word that matches
				the pattern, starting at 1 and
				returning 0 for no match.
	RMATCH(word pattern-list) Returns an index into the pattern
				list of the pattern that word best
				matches.
	STRIP(charlist line)	Strips all occurrences of characters
				contained in charlist from the line.

	You no longer need to supply the leading # to JOIN and PART.
	If the leading # is omitted, and you are on a 2.7 server,
	it will be inserted. Notable exceptions to this rule are
	channel '#', which would have no name if the # were omitted,
	and channels beginning with '##'.

	CTCP Action format changed so as not to interfere with channel
	text. ON ACTION and ON SEND_ACTION added. You can now suppress
	ACTION text with these, or reformat it.

	Many bugs fixed.

2.1.5-2.1.5a

	New functions:

	USERHOST()		Returns the user@host of the sender
				of the message currently being
				processed.

	WHO -HOST and -SERVER is no more supported. (This is reenabled
	in a later version).

	The contents of an alias can now be surrounded by '{' and '}'
	in and broken over multiple lines. See script/finger for an example.

	Indentation with leading tabs and spaces is now permitted in script
        files. See /HELP LOAD.

	HOLD_MODE no longer holds when you are being active in that window.

	If you have SHOW_AWAY_ONCE on, away messages are remembered and
	only displayed when they change.

	Notification of the receipt of a CTCP request no longer occurs
	unless VERBOSE_CTCP is on.

	Prompts from EXECed processes now appear in the input window if
	$T appears in INPUT_PROMPT.

	Scripts and help files can now be stored in compressed format.
	They will be uncompressed as they are used.

	All the scripts have been updated and many helpfiles written and
	rewritten.  Many bugs have been fixed, support of newer server
	features added. Server 2.7 compatibility improved.

	There have been major changes in the command parser. Commands
	are not expected to have a leading / unless entered interactively,
	if you experience incompatibilities, you will have to add 'say' and 
	'send' wherever you have made aliases that send to the channel or query.
	See also /help ircII programming for this. Also the ';' has a new
	meaning as command seperator within ALIAS, BIND and ON. You might have
	to \escape it.

	CTCP ACTION has been implemented which permits you to send
	descriptions of actions/'feelings' to other people on channels
	and even through queries. You can use it with /me and the action
	script. See also: /help load action.

* 2.1.5 (by lynX) Text is historically from new to old, that is - read it from bottom to top!

	Updated help files: NEWS LOAD/* WHOIS IRCII/IRCII IRCII/PROGRAMMING
	    ALIAS/ALIAS BIND/PARSE_COMMAND BIND/EXAMPLES ON/ON CTCP/* ME DESCRIBE
	    ON/SIGNOFF SEND SAY NOTIFY SET/COMMAND_MODE ALIAS/SPECIAL RESTART
	    SET/LASTLOG_LEVEL

	Threw out /who -s and -h, they were superflous and bad.
	Cleaned up the vars.h and hook.h by cleaning the protos... FINALLY!
	Wrote count.c and the proto headerfiles, adapted the Makefile.proto
	Added underlining mechanism with put_it-code ^V.
	Updated man page a bit.
	Added optional code to limit the notify list length (MAX_NOTIFY).
	Removed lots of do_hook-numeric if's by splitting the numeric's switch.
	Rewritten /notify list.
	Simplified notify.c and whois.c to no more support channel notify.
	    (If ISON doesn't, why should we then?).
	Added Troy's alias functions MATCH and USERHOST, but no HELPs.
	Added support for {  } constructs in scripts and indentation.

	Removed the oper-flags from the IRC commands, if you issue oper commands while
	you're not one, you get the beautiful ircd error messages.

	Seem to have fixed the problem in the status_mail sprintf...
	Changed the handling of 2.7 UserHost in PRIVMSG etc.
	The $, is now also set when you get an invitation.
	Added oneself's nickname as command alias for /me. "/lynx smiles."
	Improved HOLD_MODE: it no more holds a window if the user is being active on it.
	Added some numeric codes in numbers.c for 2.7 compatibility.
	Added support for ~ in IRCPATH, but only referring to the user's own home-dir.
	Suspended a piece of new code in mail.c which seems to cause weird problems.
	Introduced lastlog_level 'ACTIONS' to log in and outgoing CTCP ACTION lines.
	Made 317 (whois-idle) a tiny bit smarter (seconds or minutes).
	Added #ifdef SVR4 code.
	Added SHOW_AWAY_ONCE and VERBOSE_CTCP vars.
	Replaced QUIT_ON_KILL variable by a #define.
	Applied Allanon's patches to ctcp.c and dcc.c, removal of DCC/SENDCRC + GETCRC.
	Added support for numeric 364 (new LINREPLY). Old LINREPLY code not removed.

	New handling of process prompts. In the past they were put into the window->prompt
	and then inserted into the INPUT_PROMPT var mask, which looks *ugly*, also the
	input would not get echoed. Now it does this: If a prompt is detected you are
	elegantly prompted, as if you were in the program itself, when you enter your
	datum prompt and input are displayed in the window the way it would look outside
	ircII. This is a great step towards using ircII as an interface to all kinds of
	things, ircII + /bin/sh as a replacement for tcsh.. Ha ha I'm kidding. Well, for
	a MUD client it's fine. ircII can now be used as MUD client.
	BTW, I had to do profound changes in the handling of prompts throughout the source.

	Fixed ancient bug concerning process-query: you can now type 'just CR' into an exec.

	Fixed strange bug with /save prompt. Still don't know what was actually wrong,
	but it behaves correctly now.  :-I

	Away messages are only displayed ONCE.

	Added #ifdef into new_free() to hunt for free's that should not take place.
	If you have spare time hunt some of those..  ;)

	Added the commands '<text> and :<text> which only work in COMMAND_MODE and
	act like /send and /me respectively. This is a MUD standard.

	Added /restart, /xtra and /host which calls USERHOST. The last two have no
	/help files.

	Introduced Allanon's implementation of ZCAT help file display.
	Also scripts (files for /load) can be stored in compressed format if one likes.

	Patched /save to work with totally dumb terminals, with -d it saves without prompting.

	Added special sequence '$D' to the alias parser. Thanks to The_Edge for the idea.
	Added binding ESC-G to the 'commander' script that uses it.

	Applied Veggen's patch to alias.c concerning uninitialized variables.

	Removed /set VERBOSE_QUERY since the same can be achieved with /^query...
	(If you want it use /alias quer ^query)

	Added DCC SENDCRC and GETCRC by Allanon. These functions transmit and receive
	files with checksum. It has to be tested and decided if a checksum is needed
	or futile by TCP definition. The commands are temporary and should replace
	the current SEND/GET or be removed away again. Since this decision affects
	other client coders, too, it should be discussed via USENET or interactively.

	Added ';' handling: In ALIASes, ONs and BINDs it is legal to use ; as command
	seperator instead of \\n while in LOAD and interactive mode ';' is considered a
	normal character (to be able to type ;-) ). With a little magic I managed to make
	it possible to escape the ; with \; in aliases if you want it as character.  *PHEW*

	Repaired /whois 317 (idle time output).
	Added /whois <server> <nick>[,<nick2>..] format to /whois command.

	Added commands /me and /describe to produce ACTION messages.

	Added CTCP ACTION handling.

	Disabled GLOBAL_IRCRC, replaced by automatic /load of 'global' which is
	supposed to be in the IRCPATH. This permits easier debugging and developing
	of scripts by redirecting everything into an other directory.

	If a person has an .ircrc the person is assumed to not be a novice, the /HELP NEWUSER
	notice is not output.

	Added variable QUIT_ON_KILL to select if one wants to /quit when
	one is killed. /ON KILL has not been implemented for obvious
	reasons of possible misuse..  :-(

	Added #ifdef AUTO_RECONNECT to make ircII not auto-reconnecting.

	Added CTCP TIME by Veggen.

	Added 'signoff reason' to signoff message. Modified some messages concerning
	CTCP and NOTIFY for beauty or better elequence...

	Added /send command which sends something to the current query or channel
	as if it were typed. Acts as replacement to bare text, since that is now
	interpreted as commands

	Added /say command which does the same as '/ <text>'
	and /# (or # in script mode) command which is the same as /comment.

	Introduced script (command) mode and COMMAND_MODE variable.

	Removed some code that would never get used, as my optimizer told me.

	Bug fixes concerning buffers, /if command with HP/UX, ...
	by Allanon and Veggen.

* 2.1.4c
	Some bug fixes, including the CTCP DCC bug and substitution
	of '\' in alias expansion.

	Bug in SAVE with "-d" mode fixed.

* 2.1.4b
	Support for server version 2.7

* 2.1.4a
	Bug fixes.

* 2.1.4
	$N now substitutes correctly to the nick on the current server.

	Bug with changing servers when on multiple channels fixed.

	ISON based NOTIFY has been implemented. In addition, the
	code has been modified so that NOTIFY will cause much lower
	network loads.

	/TOPIC can now change the topic of a # channel on a 2.6.2b
	or newer server. The new format for /TOPIC is:
	/TOPIC [<channel>] [<topic>]

	Aliases and ASSIGNed variables can now include a dot
	('.') in their names. When listing aliases and assigned
	variables, anthing after a dot in the variable name
	is suppressed, unless typed explicitly. If two variables
	have the same name after this, only the first occurence
	is printed. This allows a structure-like effect.

	/ASSIGN A.A This is a
	*** Assign A.A added
	/ASSIGN A.B this is B
	*** Assign A.B added
	/ASSIGN A.C This is c
	*** Assign A.C added
	/ASSIGN A
	*** Assigns:
	***	A	<Structure>
	/ASSIGN A.
	*** Assigns:
	***	A.A	This is a
	***	A.B	this is B
	***	A.C	This is c
	/ALIAS A.A alias a
	*** Alias A.A added
	/ALIAS A.B alias b
	*** Alias A.B added
	/ALIAS A.C alias c
	*** Alias A.C added
	/ALIAS A
	*** Aliases:
	***	A	<Structure>
	/ALIAS A.
	*** Aliases:
	***	A.A	alias a
	***	A.B	alias b
	***	A.C	alias c

	Note that structures are effectively in a different naming
	space to non structures. Thus, you can have a structure called
	'A' and a normal variable, also called 'A'.

	Server notices are now displayed with the SNOTE level.
	Four additional lastlog levels, USERLOG1-USERLOG4, are
	reserved for users. These can be used by displaying text
	with the XECHO command.

	Four new alias substitutions: $O substitutes to the value
	of STATUS_OPER if you are an operator, $P to '@' if you are
	a channel operator on the current channel, $M to the modes
	on the current channel, and $A to the current away message.
* 2.1.3c
	A new DCC command, rename, changes the name of a file sent
	to you by somebody else. DCC file transfer should also accept
	the ~ now.

	Some bug fixes.
* 2.1.3b
	A new log level, OPNOTE, has been added. This level applies
	to notices sent to operators, such as KILL notices.

	A new status line variable, %F, lists the hidden windows in
	which there has been activity since they were made hidden.
	An associated IRCII variable, STATUS_NOTIFY, sets the format
	for this to be displayed.

	New ONs: CHANNEL_NICK and CHANNEL_SIGNOFF are executed once
	for each channel from which the user changes nick or signs off.
	If all the CHANNEL_NICK and CHANNEL_SIGNOFF hooks which are
	matched suppress output, then the default output and the NICKNAME
	and SIGNOFF hooks will be suppressed.

	Various bug fixes.
* 2.1.3a
	Various bug fixes.
* 2.1.3
	Added support for the Tektronix XD88

	Added DCC talk. To use this, /DCC TALK user@host. DCC talk
	will only send an announcement once, rather than an infinite
	number of times.

	Fixed bug with functions which have no arguments. Added RINDEX
	function.

* 2.1.2.2
	New help files RULES and IMPORTANT included. You should
	read these before installing help and decide on a site
	by site basis if you wish to install them. If not, remove
	them from the help directory.

	Hopefully fixed the WHOIS queue once and for all.

	Fixed some bugs outstanding from 2.1 (HELP paging with
	HOLD_MODE ON, Core dumps after a WHOIS or WHOWAS if the
	WHOIS queue was empty, core dumps when the status line
	is an empty string)

* 2.1.2
	Added DCC file transfers (GET and SEND), and DCC CLOSE

	Added new window command - NOTIFY. This toggles the
	notification status of the current window. A window with
	notification on causes a message to be printed in the
	current window if output to that window occurs while
	it is hidden.
	
	Changed group message ([$#]*.domain) handling so that such
	messages are treated more like WALLs than MSGs. (Meaning
	that it beeps if you have WALLs set in BEEP_ON_MSG, not
	if you have MSGs set).

	The type of the MAIL variable has been changed from BOOLEAN
	back to INTEGER. If set to 2, it will now display some of the
	headers from incoming mail. Setting it to 1 is the same as
	setting it to ON used to be.

	/ON SERVER_NOTICE processes messages sent from the server
	as NOTICEs, including MOTDs and many server status messages.
	The easiest way to see what is trapped by this is to do a
	/ON ^SERVER_NOTICE * /echo [SNOTICE] $* and see what happens.

	/WHO -FILE performs a /WHO, displaying only those nnicks
	contained in the named file. This allows a larger list to
	be kept of people you know on IRC but not well enough to
	put them in the NOTIFY list.

	If a channel name exceeds the channel name width in the output
	of /NAMES or /WHO, the last character that would be displayed
	is shown as a '>'.

	Added NOVICE variable. Causes a new user message to be printed
	after .ircrc has been loaded if it is still set to ON, and
	refuses to allow any ON commands to be executed.

	Added /ON RAW_IRC to deal with any unknown commands coming from
	the server. This is primarily of use to people working on server
	code, or people using servers with new commands which IRCII does
	not yet recognise.

	Direct Client Connections implemented. /DCC CHAT opens a direct
	connection to another client. The user at the other end can either
	accept the chat with a /DCC chat or ignore it. Messages are sent
	across DCC CHAT connections with DMSG or DQUERY. A new status
	specifier, %D (STATUS_DQUERY) is supported, which substitutes
	the DQUERY value. Two more /ONs, DCC_CHAT and SEND_DCC_CHAT, deal
	with DMSG messages.

* 2.1.1
	Version 2.1.1 supports user defined functions. A user
	defined functions is an alias that ASSIGNs a value to
	FUNCTION_RETURN. Another alias can substitute the return
	value with $%FUNCTION(ARGUMENTS). See /HELP ALIAS FUNCTIONS

	Pattern matching has been improved. IRCII now has an idea
	of the "best" match. This allows #* to be treated differently
	to * in /ON NAMES, for example.

	IF and WHILE now only use unescaped operators. Thus if it
	is possible for a substitution in an if or while to produce
	an operator, such as a channel name containing !, it can
	be entered as $^!CHANNEL, escaping the ! and making IF
	and WHILE work as expected.

	Support has been added for privileged ports. If IRCII is
	installed setuid->root it will attempt to bind the local
	socket to a privileged port, allowing some servers to
	verify connecting users on this basis. The PP_OBJS and
	PP_DEFS macros in Makefile must be uncommented.
