EPIC2pre3 (2.8 compliant)

*** News 03/19/95: finished prototyping
	I think i got all the header files all prototyped now, and right
	away things started hitting the fan.  It ends up that screen.h
	and window.h protos were hopelessly intertwined, and neither could 
	be satisfactorily parsed without the other being completely parsed
	first.   Ick.  I had to do some pretty nasty hacks to get around 
	it without having to give up the func prototypes...

*** News 03/18/95: new config.h define, "EXEC_COMMAND"
	At the request of DemoN, i have included a define in config.h
	that will allow you to remove the EXEC command at compile time.
	If you remove the EXEC command, it cannot be used unless you
	recompile the client again.  If you do not define EXEC_COMMAND,
	you cannot use the file manipulation functions either.  This
	is "supposed" to be a security feature. >;-)

*** News 03/17/95: New /set: AUTO_NEW_NICK

	If the server rejects you for a nickname collision, and
	you have AUTO_NEW_NICK set to ON, the client will convolute
	your nickname in an attempt to get a nickname suitable for
	reconnecting.  It has a pretty good idea when its out of
	guesses, and if that happens, it will fall back and ask
	you for a new nickname.  If AUTO_NEW_NICK is off, the client
	will always ask you for a new nickname if you are collided.

*** News 03/17/95: New function (alias.c notice.c server.h)
	New function:

	$version([servernumber]) - returns in text form the "class"
		of server specified.  The servernumber should be
		a number corresponding to a server in your server list
		TO WHICH YOU ARE OR ALREADY HAVE BEEN CONNECTED!!
		Specifying no arguments implies your current server.

		The classes are such:

			"2.5"		a 2.5 server
			"2.6"		a 2.6 server
			"2.7"		a 2.7 server
			"2.8"		a regular 2.8 server
			"u2.8"		an undernet 2.8 server (mu/me)
			"2.9"		a regular 2.9 server
			"u2.9"		an undernet 2.9 server
			"2.10"		a regular 2.10 server
			"u3.0"		an undernet 3.0 server
	
	Please dont get confused if you get the reply "u2.8" from
	a server on efnet:  All that is meant to convey is that the
	server has the capability to handle the extended undernet
	numerics and replies.

	If you ask for the version of a server to which you have not
	been connected, "2.5" will be returned (becuase it is the
	lowest common denominator)
	

*** News 03/16/95: EPIC finally loads 100% of ircII2.2.9 scripts

	Thanks to the prodding of Kanan and Murple, i tracked down
	the reason EPIC wouldnt load old script packs.  It was in
	edit.c in the loader, the part that handled comments was
	munging up lines that it shouldnt have been.  I am now able 
	to load textbox, axis, and phoenix without any apparant 
	problems.  (mixed blessing)  This is the most fundamental
	bug that i have fixed, so it is worth upgrading for.

*** News 03/16/95: character translation function
	New function:

	$tr(/oldc/newc/text) - Substitutes any instances of characters
		in 'oldc' with corresponding character in 'newc' in
		'text'.  If 'oldc' is longer then 'newc', then the last
		character in 'newc' will be used to extend 'newc' to the
		length of 'oldc'  Delim is the first character, does not 
		have to be '/'.  Examples:

	$tr(/a/b/Mary had a little lamb) returns "Mbry hbd b little lbmb"
	$tr(?a??Mary had a little lamb) returns "Mry hd  little lmb"
	$tr(:abcdefghijklmnopqrstuvqxyz:nopqrstuvwxyzabcdefghijklm:$*)
		would do a "rot-13" on the text passed to the alias.
	$tr(/$chr($jot($ascii(a) $ascii(z)))/
	     $chr($jot($ascii(n) $ascii(z)))$chr($jot($ascii(a) $ascii(m)))/$*)
		Does the same thing as above.

EPIC2pre2 (2.8 compliant)

*** News 03/14/95: New IP/name conversion functions
	Added three new functions:

	$iptoname(ip-addr) given a XXX.XXX.XXX.XXX ip address, returns the 
		hostname associated with that IP
	$nametoip(hostname) given a hostname, returns the XXX.XXX.XXX.XXX 
		ip address associated with that host.
	$convert(whatever) converts whatever you give it to whatever it isnt.
		$convert($convert(rush.cc.edu)) should return "rush.cc.edu"

*** News 03/14/95: Rigorous compilation & prototyping
	I compiled the whole thing with the -Wall flag to find
	some of the more obvious logic bugs and fixed them.  I
	actually found quite a few.  Hopefully this will make 
	everyone's compilation happier..

	I finished prototyping any header files that werent
	prototyped.

*** News 03/13/95: file reading/writing by popular request
	You now have the capability to manipulate files directly in
	irc using several built in functions.

		$open(FILENAME <type>) where <type> is R or W depending
			on whether you want to Read or Write.  Write does
			not truncate file, but rather appends.  Returns the 
			file descriptor to the opened file.
		$close(fd)  closes the file corresponding to the fd.
		$read(fd) returns a line from the file corresponding to the fd.
		$write(fd text...) writes the line of text to the file
				corresponding to the fd.
		$eof(fd)  returns 1 if the fd is at end-of-file, 0 otherwise.

	These functions return -1 if there is some sort of error.
	More functions can be added if you tell me what you want to have.
	The "read" option uses uzfopen, so you can read compressed files
		via this method if you wish.

	Example of usage:
		alias cat {
			@ fd = open($0 R)
			do { echo $read($fd) } while (!eof($fd)) 
			@close($fd)
		}

EPIC2pre1 (2.8 compilant)

*** News 03/01/95:  do (if.c) (final support in pre2)
	Finally got around to supporting the do/while command.  It takes
	the following form(s):
		/do cmds
		/do {cmds}
		/do {cmds} while (expr) 
	All forms should work correctly.

*** News 02/28/95:  uzfopen (edit.c ircaux.c help.c)
	Added capability for ircII to automatically grok the *.Z, *.z,
	and *.gz compressed file extentions and automatically know what
	to do with them.  You may now compress any LOADable file, or
	any HELP file any way you choose (gzip or compress) and ircII
	will know what to do.  Blew away all uses of the ZCAT macro.

*** News 02/27/95:  Bug fixes, 2.8 compliance (all)
	Wow. Now that its all ANSI prototyped, i have to go through and
	fix all the function calls that are incorrect, especially most
	of the key binding functions. Some of them were (char, char *),
	some of them were (char *, void (*)()), and some of them were (void).
	Ick.  They all take (char, char *) now.  I need to go through and
	compile ircII with the -Wall option and find all the bugs i can...

*** News 02/15/95:  More Undernet Support (edit.c status.c)
	u2.9 commands /RPING, /UPING, and /MAP now supported
	u2.9 user mode +d now supported.
	mu3 /SILENCE command and replies now supported

*** News 02/9/95:  Hack for 'uname' and 'c-like comments'
	see config.h about #define UNAME_HACK and #define COMMENT_HACK
	basically, it provides some sanity checking for people who dont
	like 1) giving out their uname's, and 2) having scripts like
	phoenix break on EPIC. (awwwww! >;-)
 
*** News 01/10/95:  Bug fixes (alias.c)
	A tertiary operator without a colon (? but no :) caused a
	coredump: this has been fixed

*** News 01/02/95:  Sanity check for SUPPRESS_SERVER_MOTD (numbers.c)
	If you have /set SUPPORT_SERVER_MOTD set to ON, then you
	cannot hook /on 372, 375, or 376 the first time you join
	a server (ie, its suppressed).  You will still hook these 
	ons any other time you do a /motd.

*** News 01/02/95: new set: NUM_OF_WHOWAS (vars.h.proto vars.c edit.c whois.c)
	Allows you to set the number of WHOWAS replies you will recieve
	from the server for any given /WHOWAS command.  If the value is
	nonpositive, the WHOWAS suppression is turned off and you will 
	recieve all the WHOWAS replies from the server.  If it is set 
	to a positive number, you will recieve up to but not more then 
	that number of WHOWAS replies per command.

	You can override the set by using /WHOWAS <nickname> <NUMBER>
	where number is the number of whowas's you want for that 
	command ONLY.  It does not change the default.

*** News 12/22/94:  Command line parser rewritten (irc.c)
	Revamped the command line argument parser, its not quite as 
	quirky now, and is more able to cope with different styles.

	The biggest change (that will break things) is that every flag
	must be preceeded by a hypen (ie, -lbs is *not* the same as 
	-l -b -s any more.)

	Of the commands that need to take an argument, the argument
	may either be in the same "word" as the flag or may be in 
	the next word. (ie, -lfoo.irc is the same as -l foo.irc)

	Arguments given in the same word to flags that do not expect 
	an argument elicit a warning but are not fatal.

	Naked arguments (arguments not starting with a hyphen) are parsed
	just like they always have been, with the first naked argument
	being used as the default nickname and any other naked args used
	as default server(s)

	All taken into account, it is intended that the command line
	arguments will now be easier to use and wont be quite so
	painful with its (oft) mistaken restrictions...

	New command line arguments:
		-n    sets the default nickname
		-s    With argument: sets the default server,
		      Without argument: turns off ircserv.

	The command flags -I and -i will be supported in some future 
	release. (used to determine default visibility)

EPIC1.003 (vars.h.proto vars.c alias.c)

	Added new set, /set PAD_CHAR which is used to determine the
	padding character used in the "width" expando (ie, $[10]foo).
	While syntatically PAD_CHAR may be set to any string, only the
	first character will actually be used and the rest are ignored.

EPIC1 (2.6 compliant)

	Upgraded to 2.6 (of course)

	Functions isalpha() and isdigit() added:  isalpha() returns "1"
	if first character passed is a lowercase or uppercase letter.
	Isdigit() returns "1" if the number is a digit, or is a hypen and
	the second character is a digit.

	Most (all?) of the word functions now call new_next_arg() instead
	of next_arg().  What this means for you is that if you wish, you 
	can group more than one word inside of quotation marks, and they
	will be considered as one "word" for matching/counting/etc.
	The usefulness of this will be demonstrated below. ;-)

	Flexible hooks have been added:  You can enter and recognize
	flexible hooks by using single quotes (') instead of double
	quotes (") around the pattern in the /on statement.
		So:  /on join '$N *' echo $*
	will /echo $* any time you join a channel.  The difference
	between a flexible hook and a regular hook is that the
	flexible hook's pattern is not static, but rather is dynamic,
	and any variables in the pattern will be expanded before it
	is matched against the incoming line.  This allows you to put
	variables/functions in a pattern and have it work right.

	Ability added to allow inline explosion of regular expressions.
	If you place two or more words inside a \\[ \\] set, the word
	that makes the pattern best match the string will be used:

	Example: (newlines added solely for readability)
		$rmatch(jnelson@rush.cc.edu 
			"sconway@\\[ugly raisin\\].ucs.indiana.edu"
			"jnelson@\\[rush.cc.edu it.uwp.edu\\]")

	would return "2" because the 2nd pattern matches the string.

		$rmatch(sconway@raisin.ucs.indiana.edu
			"sconway@\\[ugly raisin\\].ucs.indiana.edu"
			"jnelson@\\[rush.cc.edu it.uwp.edu\\]")

	would return "1" becuase the 1st pattern matches the string.

	Note the use of quotation marks around the 2nd and 3rd argument
	(which contain spaces) which allow them to be considered as one
	logical word.

	An example that combines the previous two features:

		/assign $ak nick@user*host lamer@bogus*host
		/on JOIN '% % \\[$ak\\]' kick $1 $0 

	This ON will be parsed as follows:  Since this is a flexible hook,
	the $ak will be expanded to its value each time someone joins a 
	channel.  Next, it sees that the value of $ak is inside a \\[ \\]
	pair, so it subsitutes each word inside the pair into the expression
	to see which (if any) best match the pattern.  The value of a
	\\[ \\] pattern is the number of characters that is matched
	by the word in the pattern that exactly matches the most number of
	characters in the pattern.

	While it is syntatically acceptable to use nested \\[ \\] sets,
	the behavior of this is currently undefined and should not be used
	or trusted to be consistant in any future releases.


	The $which() function can now take two arguments, with the
	first being the file to search for, and the second argument
	being a colon seperated path.  The second argument is optional
	and $LOAD_PATH is used if no path is specified.

EPIC-pre1 (2.3.23 compliant)

	Ban listings are now counted, and the total number of
	bans is displayed (or available via /on 368 as $1)

	Undernet numerics are now (mostly) supported, and the
	additions to present numerics are also supported

	(Obsolete stuff about ZCAT removed)

	If you want things the way wintrhawk has them, just
	#define WINTRHAWK somewhere in config.h: otherwise things
	will appear as they normally are, more conventionally.

2.3.23+11.1

	(obviously) upgraded to 2.3.23

	Included stuff from wintrhawk: (everything from here on till
		you see the 2.3.22+11 line is from WintrHawk)

	Added 6 new STATUS_USER [4..9] variables which will only show in
        your NON-CURRENT window.  SHOW_STATUS_ALL must be OFF for these to
        work.  You can predefine these in the config.h or utilise them in
        exactly the same manner as you would STATUS_USER[..3].

	Additionally, all STATUS_USER variables can now be called with
        %0..%9 in STATUS_FORMAT with backwards compatibility of:
 
			[%U, %X..%Z] == [%0..%3]

	I hope you'll find these usefull in displaying additional
        information on your statusbar.  Look for my updated scripts that
        will take advantage of these in the near future.  I actually do plan
        to add more STATUS_USER variables but I don't have the time or
        patience yet.  |8^)

	Fixed the core dump problem when you attempt irc -h.

	Got rid of the "ircII%s..." bug that refused to show version info on
        abnormal termination.

        Introduced a new global variable UNAME to define system type and
        release information during a CTCP VERSION reply.  Maybe one of these
        days I'll have it autoconfig'd with the Gnu AutoConfigure Script.

        Fixed the bug which hop introduced that would strip all leading
        whitespaces from the input line.  Maybe he had a hidden agenda for
        doing that... I just found it annoying.

        DCC TALK was disabled because the routines didn't work right.  It's
        now fixed.

        Also fixed the bug that would cause you to exit even if you answered
        "no" to the "Do you want to quit?" prompt after hitting ^C.

        Changed +10's IRCFINGER routine.  Functionality remains the same.


2.3.22+11 

	New function: $which() searches your LOAD_PATH for
	the filename you specify, and returns the full path
	to it.  Useful for this example:
	
	alias send_script dcc send $0 $which($1)


	You can now enclose arguments to /LASTLOG inside "".
	You can also now use wildcards in /LASTLOG to determine
	what you want to search against.  If you use these two
	together, you can search for multi-word regexes.

	example:  /lastlog "t*is su"
		  /lastlog -literal "6667 is the port for irc"
		  /lastlog o*er
	

	$before() and $after() now have a few new features.
	You can now supply an optional integer value as the
	first argument to these functions, and if present, will
	be used to indicate which instance of the characters
	you wish to use.  If the number is negative, it counts
	off from the end.  You can also supply more then one
	character to look for, if you wish.  Some examples:

	# completely backwards compatable
	$after(! hop!jnelson@pv0420.vincent.iastate.edu)
		returns "jnelson@pv0420.vincent.iastate.edu"
	$after(-1 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "edu"
	$before(2 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "hop!jnelson@pv0420.vincent"
	$before(-3 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "hop!jnelson@pv0420"
	$after(-5 . hop!jnelson@pv0420.vincent.iastate.edu)
		returns "" because there are not 5 .'s


	Added new operators: +=, -=, *=, %=, /=, #=.  All do
	just what they do in C, except for #= which is a 
	string catenation operator.  I hope to have &=, ^=, and |=
	in the next release.


	New Keybinding: SHOVE_TO_HISTORY: simply takes what you
	have in the input line, saves it to your history, and
	then clears the input line (presumably for more pressing
	needs). You can get back to your line whenever you
	wish by just cycling through your history.
	Comes bound to ^] by default.

        
	$F now returns the time the client booted up,
        in $time() format (long integer in seconds since 1970)


	$J now returns the ircII client version you are
	running as a string ($V returns the date released)



2.3.17+10

        A new hook, /on EXIT will be hooked as the client is exiting.
        This hook is not recoverable (the client can not be stopped 
        from exiting when /on exit is hooked), but you can do some 
        housekeeping before the client quits with this.

        The /DUMP command can now have 4 optional arguments
                "ALIAS" dumps all aliases
                "VARIABLES" dumps all variables
                "ON" dumps all ons
                "ALL" dumps everything
                If no args are given, all is used as the default.

        New function $chr(int int int int)
        Returns the string corresponding to the ascii numbers given
            $chr(65 66 67 68) returns the string "ABCD"

        New Function: $ascii(string)
        Returns the ascii numbers corresponding to the chars given
            $ascii(ABCD) returns "65 66 67 68"

        Thanks to tychy for the following idea.
        When you get an incoming dcc handshake, the userhost of
          the person who sent you the request is displayed, as well
          as the machine that is in the handshake, and the port number
          in the handshake.
        If the port number is less then 1024, it is rejected.
        If the userhost does not agree with the ip number, beware!

        Added two functions: $before() and $after()
        Syntax: $before(chars text text text)
        Usage: Returns the text (before|after) the first instance 
                of any character in "chars"

        $E now returns your idle time.

        Added C-like comments /* */.
        Limitations:
                While comments may span more then one line, code
                may not be broken up over one line.  For example:
                        echo test /*  this is a comment
                           this is more comment */booya
                will echo "test" and execute the alias booya.

		If you #define COMMENT_HACK, you can only have C like
		comments that start at the BEGINNING of a line.  The
		end of the comment still can occur anywhere.

        Fixed the serial numbered hook bug.  The one where any serial
        numbered hooks higher then the first serial number hook set
        that did not have a match were not hooked.

	Fixed the mother of all memory leaks.  The one that leaked
	the channel mode each time the status bar was updated. Phone
	fixed this but introduced a new bug in the process.  That bug 
	got fixed in EPIC1.

        Added the ~ operator (Bitwise negative)

	Added the comma operator.  What it does is evaluate the 
	expression to the left of the comma, and throws away the 
	result, then evaluates the right side and returns it.

	If you are kicked from a channel, and there is a channel
	key, auto-rejoin will use that key.

2.3.16+9

        Reworked the mathematical parser (next_unit) as follows:
                * Added the &, |, and ^ operators
                * Made && and || short circuit
                * Added the tertiary operator
                * The order of hirearchy is the same as C++,
                        the main change being that assignment
                        has LESS priority then conjunctions.

        Are you sick of when your status line repeats the last
        character off to the end of the line?  Then you can just
        /set status_no_repeat ON.

        Added the /ABORT command.  It does a "save" into the current 
        directory and then coredumps.  If ALLOC_DEBUG is defined,
        it does a memory dump, as well.  Useful for confused bots.
        NOTE: IT WILL *_NOT_* corrupt your .ircrc!

        New function $numonchannel().  Returns the number of people
        on the channel specified.  The channel may not be ommitted,
        and you must be on the channel in question. Returns 0 on error.

        Replaced Auto-reconnect in a new form, which was removed from 
	2.3.16.  Autoreconnect is done automatically on server kills.

        fixed the $ischanop() bug from 2.2.9.  The one where if 
        someone changed nickname, the client thought they were no
        longer opped.  This bug still seems to be around in 2.8,
	but it is not present in EPIC.

2.3.16+8

        Changed the /userhost command.  You may now use any number of
        nicks per command, delimiting the list with "-cmd", and each
        nick will be passed through the commands given.

        The client does not automatically turn on the screen when it
        is done loading a script, but rather honors the value of
        /set DISPLAY.  Dont ask me why it was changed in the first
        place.

        A mode stripper has been added:  The mode stripper does not
        replace /on mode, but rather complements it.  You can turn on
        the mode stripper with:
                /set MODE_STRIPPER on
        and then you can catch stripped modes with 
                /on MODE_STRIPPED "...."
        NOTE: /on mode STILL works even with the mode stripper on.

        The load parser has been partially rewritten fixing a bug 
        when a semicolon was the last char on a line.
        
2.2.9+7

        The behavior of the Command Parser has been changed, and you
        may now use {} blocks just about anywhere you want to,
        including the /userhost and /timer command, without having
        to use the /do command.  Try playing around with it, and
        youll see what i mean.

	The "WAIT has been called recursively" problem is no longer
	a problem, so the warning message has been removed.  Waiting
	recusively no longer locks up the client.

        New Functions:
                $center(length string)
                        Returns "STRING" centered in a field
                        of length LENGTH.
			To get a string of length 'length' you
			will need to use the width expando, ie
			$[length]center(length string)

                $split(delim string)
                        Actually, it just changes any occurances
                        of any character in DELIM to a space.
                        Useful with the $word() function.

        The % operator (modulus, aka remainder) has been added

        Full support for postfix and prefix (in|de)crement
            operators has been added.  They now work correctly
            and as you would expect.
        Remember:  $blah++  is not legal, it must be used as
                   ${blah++}.  Also legal is @ blah++.

        New Functions/commands:
        $SHIFT(var) removes word 0 from $var and returns it
        $UNSHIFT(var word) puts "words" at the beginning of $var
        $POP(var) removes the last word from $var and returns it
        $PUSH(var word) puts "words" at the end of $var, returns $var.

	These functions are also provided in command form, so that
		they can be used simply for their side effects.

        New Function:
        $SAR([r][g]/search/replace/text) - search and replace
             If 'r' is the first character,  "text" is assumed
                to be the name of a variable, and the text sub-
                titution is done on that variable and the result
                is put back into the variable, and is returned.
             If 'g' is the first character, all matches of 
                "search" will be replaced with "replace".  Normally
                only the first match is replaced.

             In any case, the first character that is not 'r' or
                'g' is assumed to be the delimiter.  You may use any 
                delimiter you want, but you should take care that
                you dont use it in the first two fields (obviously).
                The delimiter may safely appear in the last field.

2.2.9+6
        New Command: FEC
        Syntax:  /fec (string) var {commands}
        FEC iterates over STRING one character at a time putting
        each character into $var.  If you specify more then one
        variable, the first one is used, the rest are ignored.
        For each character in the string, the commands are 
        executed.
                /fec (booya) x {echo $x}
        would output "booya" one character on a line.

        New Command: DO 
        Syntax:  /do {commands}
        Useful for those places where you can only have one
        command, and backslashing semicolons doesnt appeal to
        you, like in /timer. 
	*** Note:  This command has added capabilities now.  But
	its straight use is generally uneccesary becuase the command
	parser is now able to deal with embedded {} blocks effectively.

        FOR, FOREACH, and FE are now all aliases of each other.
        If the arguments do not start with a '(', it is assumed
        to be the "FOREACH" command.  If there is a () pair, and 
        there are exactly two commas between them, it is assumed
        to be a FOR command, else it is assumed to be a FE command.

        New functions:
        $reverse(text) 
		reverses all the text character by character
        $revw(word ... word) 
		reverses the text word by word
        $jot(min max interval) 
		returns a list of numbers from "min" to "max" every
		"interval" integers, (interval is one if ommited)
		EXAMPLE:
			$jot(1 10) returns the string
				"1 2 3 4 5 6 7 8 9 10"
			$jot(2 10 2) returns the string
				"2 4 6 8 10"

2.2.9+5 (includes 2.2.9+4.1)

        New command: FOR (CMDS1, EXPR, CMDS2) {CMDS3}
        Looks and feels just like the C command (sorta)
                Upon commension, cmds1 is executed once
                Expr is then evaluated, and if expr is TRUE,
                        Cmds3 and then cmds2 are executed, 
                        Repeat loop.
                Stop command
        The comma was chosen as a delimeter on purpose, so you can
        have multiple commands in a set.
        Example:
        alias repeat for (@x=0, x<$0, @x++) {$1-}
        alias foo for (@x=0; @y=0, x+y<5 , @x=x+2;@y--) {echo $x $y}
    
        New command: DUMP
                Deletes all of your aliases, assigns, and ons,
                in case you really FUBAR things.  You can then
                /load global and your .ircrc to effectively reboot.

        New functions:
                RPATTERN (word patttern pattern...)
                  Returns all patterns that match "word"
                RFILTER  (word pattern pattern...)
                  Returns all patterns that do not match "word"
                COPATTERN (pattern variable1 variable2)
                  For each value in variable1 that matches the pattern,
                  the corresponding value from variable2 is returned.

        ENFORCE_STRICTER_PROTOCOL now forbids kicks from /on who.
        Using /on who to kick is lame anyhow....

        If you give the function $key() no arguments, or the argument
        '*', the current channel will be assumed.

2.2.9+4
        New command:  /QUEUE <flags> NAME <number> <{commands}>
        Flags:  -DO        run the commands in the named queue.  Deletes
                             the queue by default.
                -NO_FLUSH  when you run the commands, do not delete
                             the queue.
                -SHOW      show the contents of all of the queues
                -LIST      show the contents of the named queue.
                -DELETE    remove the numbered entry in the named queue
                -FLUSH     remove the named queue
        o The "QUEUE" command allows you to store a list of commands
          into named queues.  You may have as many entries into an
          individual queue as you like, and you may have as many
          named queues as you like.  
        o Error checking is not very tight right now, so if you try to
          crash the command by doing weird stuff, you probably will.
        o If you give a list of commands, they must be surrounded by
          braces, and they will be added to the named queue.
        o At this point, it is not recommended that you use more
          then one flag per command, as i have not tested this yet.
        Store commands:  /queue BOOYA {echo one}
                         /queue WAHOO {mode * +o nick}
        Exec. commands:  /queue -do BOOYA
                         /queue -do -no_flush WAHOO

        If you provide no arguments or the argument "*" to the
        functions $onchannel(), $chops(), and $nochops(), the 
        current channel will be assumed.

        New function: $key(#channel)
        Returns the channel key for #channel, (provided
        you are on the channel that you ask about)

2.2.9+3
        $X now returns your userhost
        $Y now returns your ircname

	(*** Deleted info about $tert() function which was obsolete)

        Added the builtin function $onchannel() which returns
        everyone on the channel given, but is only reliable if
        you are ON that channel.  Returns a null if you are not.

        Added the builtin functions $chops() and $nochops()
        They return the channel operators and non-channel
        operators on the specified channels.

        Karll's "Array Suite" has been incorperated.  The source
        file is array.c and the instructions are in ARRAY

        META5-9 have been added.  You now have 9 META keys to 
        work with.  Meta4 is still sticky.
    
        New command "REALNAME" (or "IRCNAME") allows you to change
        your REALNAME (the text on the right in the first line of
        a whois reply), which will take effect after you use the
        command "RECONNECT"


2.2.9+2
	Several new built-in functions have been added:
		$leftw(x list)  returns the x left words in list
		$rightw(x list) returns the x right words in list
		$restw(x list) returns the Xth word and after
		$midw(start stop list) returns the words start to 
			stop in list
		$notw(x list) return list without the Xth word
		$insertw(x word list) returns list with word added as
			the Xth word
		$remw(word list) returns the list without "word"
		$pattern(pattern list) returns all words in list that
			rmatch pattern
		$filter(pattern list) returns all words in list that
			do not rmatch pattern
		$chngw(x new list) returns list with the Xth word
			changed to new.
		$tow(word list) returns the list up to/including word
		$fromw(word list) returns the list after/including word
		$beforew(word list) returns the list before word
		$afterw(word list) returns the list after word
		$common(list1 / list2) returns all words present in
			both list1 and list2 (case insensitive)
		$diff(list1 / list2) returns all words not in both list1
			and list2 (case insensitive)

	/on encrypted_privmsg and /on encrypted_notice added:
		they have the same parameters as /on msg and /on notice
		expect that they only are hooked when the msg is encrypted.
		NOTE: If you hook these with ^, normal /on msgs will not
		be hooked. (you can override defaults)
		
	(Obsolete stuff about ZSUFFIX and loaded files removed)

	/on disconnect now hooks whenever you are not connected to a
	server, as stated in the help files.
	

2.2.9+
	(Obsolete stuff about ZSUFFIX and help files removed)

        Four new ONs added: NOTE: /on dcc_raw ALWAYS has higher
           priority over any of these ons.

        /on DCC_REQUEST tells you when you have recieved a DCC request
                $0  is the person sending the request
                $1  is the type of DCC request (chat, send)
                $2  is the description (filename for dcc send)
                $3  is the size of the file (for dcc send)

        /on DCC_LOST tells you when a DCC connection terminates
                $0  is the user connected to
                $1  is the type of connection lost
                $2- any additional information as applicable
   
        /on DCC_CONNECT tells you when a DCC connection becomes active
                $0  is the user connected to
                $1  is the type of connection being made
                $2- any addition information as applicable

        A new SET has been added, "AUTO_REJOIN".  When set to ON, 
        you will automatically rejoin the channel if you are kicked.

        A new command /FE has been added.
            FE (list of words) control vars { commands to execute }
        FE allows you to go through a given list of words using an 
        arbitrary number of them at a time, and execute a set of 
        commands once for each pass.  examples:
            /alias opalot fe ($2-) x y z {mode $0 $1ooo $x $y $z}
            /alias kickalot fe ($1-) xx {kick $0 $xx}
        The first would op/deop a list of people 3 at a time
        The second kicks a list of people

        An arbitrary limit of 255 control variables was used.

        A lot of scripts added.  Look through them, you might find
        some of them useful.

        CTCP FINGER returns a null. (if you #define HOP)
