home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / bx75p3.zip / doc / UPDATES < prev   
Text File  |  1999-02-23  |  93KB  |  1,926 lines

  1. EPIC4pre2
  2.  
  3. *** News 05/28/98 -- /on connect now passes in three arguments
  4.     /on connect now offers the server's idea of what its name is
  5.     as $2.  This may very well differ from what we think its name
  6.     is supposed to be.
  7.  
  8. *** News 05/29/98 -- New built in function $igetmatches() (Crackbaby)
  9.     Can someone tell me what this does?
  10.  
  11. *** News 05/29/98 -- New /on, /ON SEND_CTCP
  12.     When you send a CTCP request or a CTCP reply, this on will be
  13.     hooked.  The arguments are:
  14.         $0    - "PRIVMSG" for requests, "NOTICE" for replies
  15.         $1    - Who the CTCP is being sent to
  16.         $2    - The type of CTCP being sent
  17.         $3-    - (Optional) Argument(s) to the CTCP being sent
  18.  
  19. *** News 05/29/98 -- New built in function $servnum()
  20.     You give it a server name, it returns a server refnum for that
  21.     server.  Returns -1 if the server isnt valid.
  22.  
  23. *** News 05/29/98 -- New type to /xdebug, "ALL"
  24.     If you specify "ALL" to /xdebug, it will turn on all the xdebug
  25.     options (as if you had specified the -x command line argument).
  26.     Using "-ALL" will turn off all xdebug options.
  27.  
  28. *** News 05/29/98 -- New flag to /who, -u-i
  29.     This flag will direct the client to add the 'x' argument to the
  30.     WHO protocol command, which is used by the undernet ircd servers
  31.     to give you invisible users.  (They changed it so that operators only
  32.     see visible users now unless they use this special flag, so that the
  33.     server can whine to everyone else about how youre abusing your power.)
  34.     Dont use this server in any other situation, as itll probably 
  35.     confuse the server or somethign.
  36.  
  37. *** News 05/29/98 -- $isconnected() no long requires an argument
  38.     If you dont specify an argument, 'from_server' is the default
  39.  
  40. *** News 05/29/98 -- /on dcc_connect compatability with BitchX
  41.     /on dcc_connect will hook with $1 being "SEND" first, and if you
  42.     dont grab that, it will offer the same exact thing with $1 being
  43.     "GET".  This is for compatability with bitchx.
  44.  
  45. *** News 04/24/98 -- New built in command line argument (Texaco)
  46.     The -s command line flag is now honored, and it instructs the
  47.     client to not attempt to connect to a server on startup, but
  48.     instead show you your server list (so you can /server to one)
  49.  
  50. *** News 04/24/98 -- New built in function $gettmatch() (Colten)
  51.     Im not exactly sure what it does.  Someone tell me please? =)
  52.  
  53. *** News 04/24/98 -- New noise operator for /on, /on ?type
  54.     This is kind of hard to explain, but here goes.  You may now specify
  55.     an /on as having noisy type '?' (a question mark).  If you use this
  56.     type, the /on will be executed silently (as if you had used /on ^type)
  57.     but whether or not the /on actually supresses the default action will
  58.     be determined by you at runtime.  You are expected to /return a value
  59.     from the body of the /on.  If you return 1, the default action *will*
  60.     be suppressed.  If you return 0, the default action *will not* be
  61.     suppressed.
  62.  
  63. *** News 04/18/98 -- **hack** /on set "set-error *" is hooked by /set
  64.     Whenever the user does something that would cause the /set command
  65.     to emit an error, such as /set booya, where booya is not a valid 
  66.     built in /set, you can hook /on set "set-error *" to suppress or
  67.     redefine the error message.
  68.  
  69. *** News 04/18/98 -- /bind'ings also follow your /package settings
  70.     So if you /unload package, then it will unload any /bind's that
  71.     were set in that package.
  72.  
  73. *** News 04/18/98 -- /on 433, /on 437, /on 438 now pass server as $0
  74.     These are the "nick collision" numerics, and now the server that
  75.     rejected you is passed as $0.  I have cleared this change with Pana,
  76.     so BitchX will do this as well shortly.
  77.  
  78. *** News 04/18/98 -- New built in function $getsets()
  79.     If given an argument, it will return all the built in /set values
  80.     that are matched by the argument(s).  If no arguments are given,
  81.     it will return all built in /set values.
  82.  
  83. *** News 04/18/98 -- Client automatically sends DCC REJECT when you exit
  84.     The client will automatically send CTCP DCC REJECTs on your behalf
  85.     whenever you close or abort a DCC conenction.  This also will happen
  86.     when you /exit.  This is so the remote peer will know that you will
  87.     not be getting the transfer, and if theyre an EPIC or BitchX client,
  88.     they will automatically close it for their end as well.
  89.  
  90. *** News 04/18/98 -- New /set, /SET SCROLLBACK_RATIO
  91.     You may now specify, in percentage points, how much of the screen you
  92.     want to scroll by every time you scroll forward or backward.  This
  93.     value should be between 10 and 100, as the client silently truncates
  94.     it to those extremes if you dont.
  95.  
  96. *** News 04/18/98 -- /DCC GET nick * now works
  97.     You may specify a star as as special indication that you want to get
  98.     all of the files that have been offered by "nick".
  99.  
  100. *** News 04/18/98 -- New set, /SET DCC_AUTO_TIMEOUT  (autoclose old dcc reqs)
  101.     If at least N number of seconds has passed (where N is the value of 
  102.     this set) since you offered or were offered a DCC handshake , the
  103.     client will automatically close the offer on your behalf.
  104.  
  105. *** News 04/18/98 -- Doing /DCC SEND nick file   wont emit error second time
  106.     Rather than emitting an unhelpful error message the second time you
  107.     try to /DCC SEND to someone (perhaps because the first time you did
  108.     the send the person wasnt on), duplicate /DCC SEND requests will now
  109.     send a "booster" message identical to the original.
  110.     (This works for /dcc chat nick as well)
  111.  
  112. *** News 04/18/98 -- /DCC RENAME can now rename chat connections
  113.     To rename a chat connection, specify the original nickname as '-chat'.
  114.     Then specify the old nick and the new nick.  Something like this:
  115.         /dcc rename -chat oldnick newnick
  116.  
  117. *** News 04/18/98 -- DCC sliding window (/set dcc_sliding_window) modified
  118.     You may now set this to any value, no matter how abusrdly large, and
  119.     the client will keep up to this many packets outstanding, but never
  120.     so many that the client will block.  Previously, if you set this value
  121.     too high, the client would block.  Now it is safe to set this to 
  122.     10,000, and acheive pretty good throughput.
  123.  
  124. *** News 04/18/98 -- New /dcc command, /dcc closeall    
  125.     This closes all of your registered DCC connections, leaving your DCC
  126.     list very empty.
  127.  
  128. *** News 04/18/98 -- Windows may now have zero visible lines
  129.     You may now do /window size 0 to make a window that is nothing but
  130.     a status bar.
  131.  
  132. *** News 04/18/98 -- New /set, /SET ND_SPACE_MAX
  133.     For those who want to cap the number of non-destructive spaces that
  134.     may appear in any one line of output, you may set this variable to
  135.     control the number the client will parse before ignoring them.  The
  136.     idea is simliar to /set tab_max
  137.  
  138. *** News 04/18/98 -- New flag to /xecho
  139.     If you use the double-hyphen flag to /xecho, it will stop all
  140.     argument parsing right there and take the rest of the arguments as
  141.     the text to be echoed.  This is useful if the first word you want to
  142.     output starts with a hyphen
  143.             /xecho -- -s booya booya booya boo
  144.     outputs 
  145.             -s booys booys booys boo
  146.  
  147. *** News 04/18/98 -- New flags to /lastlog
  148.     There is a new flag to /lastlog, -all which specifies that the given
  149.     lastlog level to search for is to be all qualifying levels.  You can 
  150.     turn off a given level by using a double hyphen (ala --msgs).  So, if
  151.     you want to see everything in your lastlog EXCEPT your msgs, do this:
  152.             /lastlog -all --msgs
  153.     Another new flag is -reverse.  The -reverse flag instructs the client
  154.     to start from the END of your lastlog and go BACKWARDS through the 
  155.     lastlog when outputting.
  156.  
  157. *** News 04/02/98 -- New command, /userip
  158.     This is the front end to the Undernet command by the same name.  It
  159.     is exactly like /userhost except it returns the ip address instead of
  160.     the named userhost.
  161.  
  162. *** News 04/02/98 -- New command, /usleep 
  163.     The /usleep command pauses the client for some number of microseconds.
  164.     specified as the argument to the command.  This command will probably
  165.     be rolled into /sleep at some future time, Watch for this.
  166.  
  167. *** News 04/02/98 -- $cparse() changed to support bitchx-syntax
  168.     If the first argument passed to $cparse() is an extended word, then
  169.     only the first argument will be used for the output, and any numeric
  170.     expandoes in the first argument will be expanded with the rest of the
  171.     arguments to $cparse() -- ala:
  172.         $cparse("This is a $0 test" cparse)
  173.  
  174. *** News 04/02/98 -- /window create now works properly for GNU screen
  175.     Kanan did the work for this, you can thank him. ;-)
  176.  
  177. *** News 04/02/98 -- You may now /msg a DCC RAW connection.
  178.     To send a message to a DCC RAW connection, simply msg to =NUM
  179.     where NUM is the number that was previously returned by $connect().
  180.     Obviously, you can also /query a DCC RAW connection with this, making
  181.     it usable for protocol connections to remote servers.  I have fixed
  182.     and returned the 'mudirc' script, which demonstrates how to make epic
  183.     act as a relatively useful mud/moo client.
  184.  
  185. *** News 03/24/98 -- Scope resolution operator for variables
  186.     The client now supports a way to differentiate between local 
  187.     variables and global variables having the same name.  As always, 
  188.     an expando with no modification will resolve to a local variable 
  189.     if it can, and a global variable it cannot.  However, if the 
  190.     variable name is prefixed with a single colon (either as an lval 
  191.     OR as an rval), then the variable will be expanded *only* as a 
  192.     local variable, and if the local variable does not exist, it will 
  193.     expand to the false value.  If the variable name is prefixed with 
  194.     two colons (again, either as an lval or an rval), the variable will 
  195.     be expanded *only* as a global variable, even if a local variable 
  196.     by that name exists.  Here are some examples:
  197.  
  198.             assign foo 1
  199.             local foo 2
  200.             @ ::foo = 4        # Sets the GLOBAL variable
  201.             @ :foo = 6        # Sets the LOCAL variable
  202.             @ foo = 8        # Sets the LOCAL variable
  203.             @ bar = 12        # Sets the GLOBAL variable
  204.             $::foo        # is '4'
  205.             $:bar        # is the false value
  206.             $bar        # is 12
  207.             $foo        # is 8
  208.  
  209. *** News 03/24/98 -- New /on, /ON UNLOAD
  210.     As a courtesy to script writers that use /package in order to keep
  211.     track of all of the aliases and so forth that they create in their
  212.     scripts, /ON UNLOAD will be hooked with the package name (as supplied
  213.     to /package) when the user does /unload <packagename>.  Presumably, 
  214.     you could use this to close open logfiles or $connect()s or what
  215.     ever garbage collection that is needed.
  216.  
  217. *** News 03/24/98 -- Built in function $tdiff() enhanced (as a demo)
  218.     To demonstrate the proof of concept, the $tdiff() function has been
  219.     expanded to support decimals.  For example:
  220.         $tdiff(60.01) returns "1 minute 0.01 seconds"
  221.     If you like this support and want to see it applied to the other
  222.     $tdiff*() functions, let me know.
  223.  
  224. *** News 03/24/98 -- New /set, /SET MIRC_BROKEN_DCC_RESUME
  225.     Unfortunately, due to popular demand, i have broken my previous
  226.     promise to never #define MIRC_BROKEN_DCC_RESUME, a feature which
  227.     breaks both the spirit and the letter of RFC 1459.  As a comprimise,
  228.     the ability to use this feature is controlled through a new set by
  229.     the same name, /SET MIRC_BROKEN_DCC_RESUME which will now and forever
  230.     default to OFF.  (Since /set's can be changed by a script, there will
  231.     not ever be a need for me to change this default to ON.)  I stand by
  232.     my previous statement that any script that uses this feature is 
  233.     broken and you should pester the script author to take it out.
  234.  
  235. *** News 03/24/98 -- /ON DCC_OFFER extended
  236.     If you offer a dcc send to another user, then /on dcc_offer will
  237.     hook with additional arguments:
  238.             $3   - filename being offered
  239.             $4   - size of the file being offered
  240.  
  241. *** News 03/24/98 -- Built in function $isnumber() changed
  242.     You may now specify a base argument, prepended with a 'b'.
  243.     For example, to determine if '014' is a number in base 6,
  244.         $isnumber(014 b6)    or    $isnumber(b6 014)
  245.     It makes no difference whether the base is the first or the
  246.     second argument:  but you must put a 'b' before it either way.
  247.     Bases 0 through 36 are supported.  Base 0 (the default) is a 
  248.     special base that attempts to auto-grok the argument for its
  249.     base (see the man page on strtol(3))
  250.  
  251. *** News 03/24/98 -- New built in function $rest(start text) (Matt)
  252.     This function works like $restw(), but it works on strings.  It
  253.     returns 'text' beginning at the 'start'th character
  254.  
  255. *** News 03/24/98 -- /bind metaX now shows all of the meta-X bindings
  256.     If you do something, like say, /bind meta1, then the client will
  257.     show you all the bindings you have that start with meta1.
  258.  
  259. *** News 03/24/98 -- The slash (/) always recognized as a command char
  260.     As a consideration to scripters, the client will always accept
  261.     the slash as a command character, even if /set command_chars does
  262.     not include it.  You may then safely and with a free conscience 
  263.     do //built_in_command without having to lie awake at night worrying
  264.     that someone would take away the slash from you.
  265.  
  266. *** News 03/06/98 -- Add or delete specific levels from /window level
  267.     You may now add or delete levels from your existing /window level
  268.     by prepending the level(s) with a plus ('+') for addition and a
  269.     minus ('-') for subtraction.  For example:
  270.  
  271.         /window level all    -- sets the window level
  272.         /window level -crap    -- removes JUST crap level
  273.         /window level +crap    -- adds crap level back.
  274.  
  275. *** News 03/04/98 -- You may now use "special chars" in your input prompt
  276.     Previously, you could use ansi sequences to turn on bold and so
  277.     forth in your input prompt.  Now you may use ircII's "special chars"
  278.     to turn them on as well (like ^B, ^C, etc).  The flipside of this is
  279.     that you may only use "safe" ansi codes, if you use them at all, since
  280.     unsafe ansi codes will be stripped out by the client.  This is 
  281.     intended to be a feature, not a bug.
  282.  
  283. *** News 03/04/98 -- New character for $info(o)
  284.     If the return value from $info(o) includes the character 'm', then
  285.     you know that you should /set color instead of /set control_color_c.
  286.     This can be used in conjunction with the next note...
  287.  
  288. *** News 03/04/98 -- IMPORTANT!  /SET CONTROL_C_COLOR RENAMED TO /SET COLOR
  289.     It is important to note this change.  If you have /set control_c_color
  290.     in your script, you should do one of two things to work around this:
  291.  
  292.     1) Use a compatability /set for older epic4pre1.* clients:
  293.         /on ^set "COLOR *" set control_c_color $1
  294.  
  295.     2) OR use a compatability /set for newer epic4pre1.* clients:
  296.         /on ^set "CONTROL_C_COLOR *" set color $1
  297.  
  298. *** News 03/03/98 -- Correct support for "nondestructive spaces".
  299.     You may now use the ^S special char as a "non destructive space".
  300.     This is emitted by the ansi parser when you do the ^[[<N>C code. 
  301.     The general idea of a nd space is that any color/highlight/etc that
  302.     is active *will not* be output for the space (it is left totaly 
  303.     blank of all attributes)
  304.  
  305. *** News 03/02/98 -- New flag to /input, /input -noecho
  306.     If you want to input a password, or some other sensitive information,
  307.     you may use the -noecho flag to /input to suppress the echoing of
  308.     the characters as they are typed.
  309.  
  310. *** News 03/02/98 -- Ten new /set status_user(10-19) supported.
  311.     You may now do /set status_user10 through /set status_user19.
  312.     They will show up on your status bar via the %{1}0 through %{1}9
  313.     expandoes.  See below for explanation of how %{N}M works.
  314.  
  315. *** News 03/01/98 -- Uppercase user modes supported
  316.     Now all 26 of the uppercase user modes are supported, along with
  317.     the 26 lower case modes.  Should cause the client not to crash
  318.     on DALNet and so forth.
  319.  
  320. *** News 02/27/98 -- Semantic changes for status line expandoes.
  321.     It is now possible (though there is no support for it yet), to
  322.     specify a "map" for your status line expandos.  The general syntax
  323.     is:    %{N}M     where 'N' is some number, and 'M' is the expando
  324.     that you want.  Note that for different values of 'N', you will get
  325.     different values for 'M'.  The "default" map is 0.  To give you an
  326.     idea how it works, try using %{0}S and see that it is the same as
  327.     %S.  I have included (for testing purposes) a single expando %T on
  328.     map #1.  Use %{1}T and see that it is *different* than %T is.  It
  329.     is expected that this will allow an effectively unlimited number of
  330.     status line expandos in the future.
  331.  
  332. *** News 02/27/98 -- New built in function, $isnumber(text)
  333.     You pass it a number, it tells you if it is a number or not.  It
  334.     correctly handles negative numbers, and hexadecimal/octal.  More or
  335.     less all it does is call strtol(input, NULL, 0).  See the man page 
  336.     for strtol to see how that works.
  337.  
  338. *** News 02/27/98 -- Four new mask types for $mask().  
  339.     There are now four new types of masks for $mask():
  340.  
  341.         N        Z is a hostname        Z is an ip address
  342.     -------------------------------------------------------------------
  343.         10        *!*@h.d            *!*@d.*
  344.         11        *!*u@h.d        *!*u@d.*
  345.         12        n!*@h.d            n!*@d.*
  346.         13        n!*u@h.d        n!*u@d.*
  347.  
  348.     With the following modifications:  In the ``local'' portion of
  349.     the hostname, all sequence of numbers are substituted with a
  350.     single '*'.  That is to say, 
  351.         $mask(10 nick!user@ppp-147-0-52-129.frobitz.com)
  352.     returns
  353.         *!*@ppp-*-*-*-*.frobitz.com
  354.  
  355.  
  356. *** News 02/22/98 -- New built in function, $stripansicodes(text)
  357.     This function will "normalize" the text, suitable for displaying.
  358.     Generally, "normalization" has two aspects.  The first aspect is that
  359.     if DISPLAY_ANSI is ON, then all ansi codes are either converted into 
  360.     logical codes (^C sequences, or ^B, or ^_, etc), or they are stripped
  361.     out entirely.  If DISPLAY_ANSI is OFF, then just the escape is mangled,
  362.     and the rest is left intact.  ^C codes are also converted to a form
  363.     that correctly manages bold and blink attributes.  THIS IS THE SAME
  364.     CODE THAT PREPROCESSES YOUR OUTPUT FOR THE SCREEN.  So you can be
  365.     assured that What You Get Is What Youre Going To See.
  366.  
  367. *** News 02/22/98 -- New built in function, $printlen(text)
  368.     This function returns the number of _printable characters_ in the
  369.     text _as it would appear on the screen_.  The string you pass must
  370.     not contain any ansi sequences, as they are interpreted as printable
  371.     characters.  Use $stripansicodes() to remove them.
  372.  
  373. *** News 02/22/98 -- New math operator, **
  374.     The ** operator now acts as an exponential operator.  All it does is
  375.     call pow(), so you can specify whatever arguments you want with it.
  376.     Yes, it correctly handles negative exponants and fractional exponants,
  377.     as long as your math library does!
  378.  
  379. *** News 02/22/98 -- New built in function $remws(lhs / rhs)
  380.     This function returns all of the words on the rhs of the the /,
  381.     except that any words that appear on the lhs of the / have been
  382.     removed first.
  383.  
  384. *** News 02/22/98 -- New built in function, $pad(len char string)
  385.     This allows you to pad a string out to a certain length with
  386.     a specified character.  If the string is too long, it is NOT
  387.     truncated (as opposed to $[x]y).
  388.  
  389. *** News 02/18/98 -- Twenty new meta maps
  390.     Yep.  Now there are thirty nine of them.  META1-META39.  
  391.     META4 is still, as always, sticky.
  392.  
  393. *** News 02/18/98 -- New built in function, $channel()
  394.     This returns some information about who is on your channel.  It
  395.     returns a sorted list of nicknames prepended by two characters. 
  396.     The first character is a '@' if the person is a channel operator, 
  397.     and '.' if they are not.  The second character is '+' if the person
  398.     is a channel voice, and '.' if they are not, and '?' if we're not
  399.     sure either way.
  400.  
  401. *** News 02/16/98 -- New built in function, $iscurchan()
  402.     This takes a channel argument, and will return '1' if the specified
  403.     channel is the current channel for *any* window that is bound to the
  404.     current server.  It returns 0 otherwise.  This is intended to allow
  405.     for more flexibility for testing for current channels in /ON's.  EG:
  406.  
  407.     Rather than:
  408.         /on ^send_public * {if ([$0] == C) {...} {...}}
  409.     Try doing:
  410.         /on ^send_public * {if (iscurchan($0)) {....} {...}}
  411.  
  412.     This will allow you to do the "right thing" even when $0 is not the
  413.     current channel for the current window. 
  414.  
  415. *** News 02/14/98 -- New built in functions: $getuid(), $getgid(), $getpgrp()
  416.     As well as $getlogin().  These correspond to the system calls by the
  417.     same name.  Do a lookup on the man page for information on what they
  418.     return.
  419.  
  420. *** News 02/14/98 -- Changes to how ansi codes are handled
  421.     IF YOU HAVE /SET DISPLAY_ANSI ON:
  422.     New code contributed by fireclown now eradicates all ansi codes
  423.     from the output before it is counted and displayed.  Any codes that
  424.     are recongized and are "safe" (such as ^[[<X>m, where <X> is one of
  425.     the color codes, or bold/blink/reverse/underline), are converted to
  426.     the corresponding logical character.  All other codes are blown away
  427.     entirely.  Not just the escape, but the whole thing (at least as much
  428.     as we can recognize it.)
  429.  
  430.     IF YOU HAVE /SET DISPLAY_ANSI OFF:
  431.     Just like before, the escape is mangled into reverse, and the rest
  432.     of the string is untouched.
  433.  
  434.     Also, since all ansi color codes are converted to ^C codes, then
  435.     if you /set control_c_color OFF, all color will be inhibited.  
  436.     Conversely, if you /set control_c_color ON, all color will be 
  437.     honored.  IT NO LONGER IS RELEVANT WHAT YOUR /SET DISPLAY_ANSI
  438.     VALUE IS TO DETERMINE HOW YOU SEE COLORS!
  439.  
  440. *** News 02/14/98 -- New ^C codes
  441.     The Control-C Color codes from 00 to 15 are now in "mirc" order
  442.     (which is also used by BitchX).  This has been changed to make it
  443.     easier on scripts that want to be BitchX/EPIC compatable.  The 
  444.     ANSI order codes have been moved to:
  445.             30 - 37        Ansi Foreground colors
  446.             40 - 47        Ansi Background colors
  447.             50 - 57        Emphasized fg/bg colors
  448.     Note that 30-37,40-47 corresponds directly to the ^[[<X>m codes
  449.     and that 50-57 is either the BOLDED colors of 30-37, or the BLINKING
  450.     colors from 40-47, depending on whether or not it is on the lhs or
  451.     the rhs of the color code.
  452.  
  453. *** News 02/14/98 -- Two new debugging flags to /who
  454.     /WHO -d  (diagnose) will show the contents of the who queue for the
  455.         server for your current window
  456.     /WHO -f  (flush)    will remove all the entries of the who queue for
  457.         the server for your current window.  You must *NEVER* do this
  458.         while a WHO request is still pending, or the client will 
  459.         fall over.  If you report this as a bug, i will laugh at you.
  460.  
  461. *** News 02/14/98 -- New built in function, $rigtype()
  462.     You give it some number of ignore levels, it will give you all of the
  463.     patterns (exact patterns) that match *only* those levels (no more,
  464.     no less.)  Dont ask, this is what was requested. ;-)
  465.  
  466. *** News 02/14/98 -- New built in function, $igtype()
  467.     You give it one of your ignore patterns (must be EXACTLY the same.
  468.     This is not for use as a matcher.  Use $rigmask() for that) and it
  469.     will give you the IGNOREd levels on that pattern.
  470.  
  471. *** News 02/14/98 -- New built in function, $winlevel()
  472.     You give it a window description (name or refnum) and it gives
  473.     you the lastlog levels that are bound to that window.  Simple,
  474.     aint it?
  475.  
  476. *** News 02/14/98 -- New /set, /SET HIGH_BIT_ESCAPE (0 | 1 | 2)
  477.     This controls the behavior of how the client handles 8 bit characters.
  478.     If this is set to 0, the eighth bit, if any, is always stripped to
  479.     yeild a 7-bit ascii value.  If this is set to 1, then if the 'km'
  480.     termcap variable is set (hint: it almost always is), then the eight
  481.     bit character <meta>-X will be converted into a <ESC>-X sequence.
  482.     If this is set to 2, then the client will leave the character alone
  483.     and parse it as a normal 8 bit character.
  484.  
  485. *** News 02/14/98 -- New /on, /ON SERVER_LOST
  486.     This is (hopefully) hooked any time youre disconnected from any
  487.     server for any reason.
  488.  
  489. *** News 02/14/98 -- Variable modifier : (a colon) implicitly declares local
  490.     You may now *** as an lvalue *** prepend the variable name with
  491.     a colon to impliclity declare it as a local variable.  You must not
  492.     use the colon in any rvalue context, or in the /fe or /foreach 
  493.     commands, as the variable is already declared local there.  You need
  494.     only use the colon once.  Any future references will automatically 
  495.     use the local variable because it will have been declared that way.
  496.  
  497. *** News 02/14/98 -- New flag to /xecho, /xecho -s
  498.     /xecho -s attempts to emulate the internal "say()" function, and
  499.     promises not to output anything if you have run the command with the
  500.     ^ modifier to suppress any output.  (Normally, all /xecho's always
  501.     are output, even if you did ^cmd to supress output)
  502.  
  503. *** News 02/14/98 -- New status line expando, %. (percent-dot)
  504.     This outputs the current contents of whatever was set with the
  505.     /window status_special command (see below)
  506.  
  507. *** News 02/14/98 -- New /window command, /WINDOW STATUS_SPEICAL
  508.     This /window command sets some window-specific information that
  509.     you would like to see displayed on your status bar.  It will be
  510.     displayed in the status bar using the %. expando (thats a dot)
  511.  
  512. *** News 02/14/98 -- New built in function, $chop(num text)
  513.     This function returns "text" with the LAST "num" characters
  514.     removed.  If "num" is negative, nothing happens.
  515.  
  516. *** News 02/14/98 -- /set status_user<3-9> changed
  517.     They now go to your current window rather than to a NON current
  518.     window.  I did this because it seemed everyone wanted it that way.
  519.  
  520. *** News 02/14/98 -- New set, /set current_window_level <LEVELs>
  521.     This set will allow you to specify some number of levels as always
  522.     going to the current window *if and only if* the current window is
  523.     attached to the same server as the output to that level.  Otherwise,
  524.     it would go to the "normal" window.  This is useful for people who
  525.     want informational stuff to always go to a visible window, so they
  526.     may choose to do  /set current_window_level CRAP
  527.  
  528. *** News 02/14/98 -- $mychannels() can take an argument
  529.     If the argument is a number, then it is taken as a server refnum
  530.     that youre interested in.  If it is not a number, then it is taken
  531.     as a window name that youre interested in.  But wait!  There's more.
  532.     If you must have a need to specify a window refnum instead of a
  533.     name, you can prefix it with the '#' character and thatll work too.
  534.  
  535. *** News 02/14/98 -- Documentation updated
  536.     Youll notice this file is way behind the work ive done.  So today
  537.     im gong to go through and update all the stuff ive done since the
  538.     last time i documented it (2 and a half months).  They all have
  539.     todays date, but theyve been done at various times recently.
  540.  
  541. *** News 12/29/97 -- New built in function $ischanvoice(nick #channel)
  542.     This function returns one of three values depending on the current
  543.     +v status of the given nick on the given channel.
  544.          0    -- The person is not +v
  545.          1    -- The person is +v
  546.         -1    -- I dont know
  547.  
  548. *** News 12/19/97 -- New built in function $mask(type address)
  549.     Returns a pattern suitable for /ignore'ing or banning.  If 'type'
  550.     is N, and the address is Z (either n!u@h.d, or n!u@d.h, where the
  551.     former is a host.domain and the latter is an ip address), then the 
  552.     return value is:
  553.  
  554.         N        Z is a hostname        Z is an ip address
  555.     -------------------------------------------------------------------
  556.         0        *!u@h.d            *!u@d.h
  557.         1        *!*u@h.d        *!*u@d.h
  558.         2        *!*@h.d            *!*@d.h
  559.         3        *!*u@*.d        *!*u@d.*
  560.         4        *!*@*.d            *!*@d.*
  561.         5        n!u@h.d            n!u@d.h
  562.         6        n!*u@h.d        n!*u@d.h
  563.         7        n!*@h.d            n!*@d.h
  564.         8        n!*u@*.d        n!*u@d.*
  565.         9        n!*@*.d            n!*@d.*
  566.  
  567. *** News 12/19/97 -- Changes to $winchan() and $chanwin(), now synonyms
  568.     Since there is no compelling reason to make a distinction between
  569.     $winchan() and $chanwin(), and since the specific distinction that
  570.     was made caused no end of problems for both me and scripters, the
  571.     two troubled functions are now synonyms of each other.  If you pass
  572.     it a channel, it will return a window refnum.  If you pass in anything
  573.     that isnt a channel, it will be considered a window refnum or name,
  574.     and the current channel of that window will be returned.
  575.  
  576. *** News 12/19/97 -- New built in function $winrefs()
  577.     This returns the refnums of every currently open window, both hidden
  578.     and invisible.  While the order of the refnums is *EXPLICITLY*
  579.     undefined, it follows in traverse_all_windows() order, which usually
  580.     returns windows in physical order on their screens, and the invisibile
  581.     windows are last.  You may NOT assume this, though. ;-)
  582.  
  583. *** News 12/19/97 -- New built in function $querywin(target)
  584.     Given a query target, this returns a window that has that target
  585.     as its current query.  If more than one window has the specified
  586.     target as its query, which window is returned is indeterminite.
  587.  
  588. *** News 12/19/97 -- New built in function $uname(description string)
  589.     This returns the entire argument string as-is except with the 
  590.     following modifications, as retreived from the uname(2) system call.
  591.  
  592.     Any instance of        will be replaced with
  593.     ---------------------------------------------------------------------
  594.     %m            The "machine" (architecture)
  595.     %n            The "Node" (hostname)
  596.     %r            The "Release" of the operating system
  597.     %s            The "Name" of the operating system
  598.     %v            The "Version" of the operating system
  599.     %a            The logical value of "%s %n %r %v %m"
  600.     %%            A single % 
  601.  
  602. *** News 12/19/97 -- New built in pattern matcher
  603.     A new pattern matcher has been written.  It is expected to be
  604.     bug-for-bug compatable with the old pattern matcher.  If you see
  605.     any discrepencies, no matter how obscure, please let me know.
  606.     The reason for the new matcher is that it uses an iterative algorithm
  607.     rather than a recursive algorithm, and so is expected to be faster.
  608.  
  609. *** News 12/19/97 -- New built in commands, /PACKAGE and /UNLOAD
  610.     The /PACKAGE command allows you to "group" all of the assigns,
  611.     aliases, and ons (and stubs) in a script under a common package
  612.     name.  When you use the /package command, any alias/assigns/on that
  613.     are registered until the end of the file are given the current
  614.     package name.  You can change the package name anywhere in a script,
  615.     even if you have previously used /package.  However, packages only
  616.     last until the end of the file -- they never propogate upwards.
  617.     Scripts that are loaded by other scripts may put themselves under 
  618.     a different package name than the one being used by the loading
  619.     script.  By default, a script is put into the package that is
  620.     currently active in the script that loaded it (or * if no package
  621.     is active)
  622.  
  623.     The idea of a logical grouping is useful for the purposes of 
  624.     removing the entire package later.  So the /unload command allows
  625.     you to remove a package that was constructed as above.  
  626.  
  627.     The idea behind all this is to allow a script, and anything that
  628.     it loads, to be easily removed whenever you want.  By simply putting
  629.     a /package <something> command at the top of a script, then you can
  630.     later do /unload <something> and everything that was loaded in that
  631.     original script will be removed.
  632.  
  633.     As these commands will surely be used in the future in ways that
  634.     are not really easy to describe now, you should be careful to not
  635.     pass more than one argument to /package or /unload.  Even though
  636.     multiple arguments may be recognized now, for forwards compatability,
  637.     you should not get in the habit of doing that.
  638.  
  639. *** News 12/19/97 -- New built in function $cparse(text)
  640.     The $cparse() function returns the given text without modifications
  641.     except for the following exceptions:
  642.  
  643.     Any instance of        will be replaced with ^C codes to change the 
  644.                 text to        text to        background to
  645.     ---------------------------------------------------------------------
  646.     %k    %K    %0    black          bold black    black
  647.     %r    %R    %1    red            bold red    red
  648.     %g    %G    %2    green          bold green    green
  649.     %y    %Y    %3    yellow         bold yellow    yellow
  650.     %b    %B    %4    blue        bold blue    blue
  651.     %m    %M    %5    magenta        bold magenta    magenta
  652.     %p    %P        magenta (think: purple)
  653.     %c    %C    %6    cyan        bold cyan    cyan
  654.     %w    %W    %7    white        bold white    white
  655.     %F            Flashing attribute turned on
  656.     %n            All colors turned off
  657.     %N            Don't put a clear-color tag at the of output
  658.     %%            A single %
  659.  
  660.     Of course, you need to have /set control_c_color on to see the 
  661.     colors, so this is an easy way for a script to be color-aware 
  662.     while not forcibly imposing colors on an unwilling user. ;-)
  663.  
  664. *** News 12/19/97 -- Built in functios $winnum() and $winnam() extended
  665.     They can now take a window description (eg, a window name or a 
  666.     window refnum) as an optional argument, and will return the info
  667.     for that window, if it exists.  As always, with no arguments it
  668.     still defaults to the current window.
  669.  
  670. *** News 12/18/97 -- New /window command, /WINDOW QUERY
  671.     This allows you to set the query nicknames for any window that
  672.     you can specify.  The /query command now uses it.
  673.  
  674. *** News 12/18/97 -- New attribute, Blinking
  675.     This is a new character attribute, just like underline and bold
  676.     and reverse.  Not all terminal emulations will support it, but
  677.     the linux and freebsd consoles do.  By default, the blink key
  678.     is ^F (think of flashing), and you can input that by /bind'ing 
  679.     something to BLINK.  You can turn it off with /set blink_video off
  680.  
  681. *** News 12/16/97 -- New script: "man"
  682.     After you do /load man, you will have available a "man" alias
  683.     that will search all of the subdirectores if the man-style help
  684.     pages for the topic youre looking for.  It handles multiple
  685.     sections ok.  Try /man away   to get an idea.
  686.  
  687. *** News 12/16/97 -- New argument passed to /on join.
  688.     A fourth argument is now passed to /on join.  Here is a summary of
  689.     the the arguments to /on join.
  690.         $0    Nickname of who joined
  691.         $1    Channel that was joined
  692.         $2    Userhost of who joined
  693.         $3    Zero more of the strings (+o) or (+v) 
  694.                 (only on avalon 2.9 servers)
  695.                 -- (+o), if present, is always $3.
  696.                 -- (+v) can be either $3 or $4.
  697.  
  698. *** News 12/16/97 -- New argument to /help, -WAIT
  699.     If you do /help -wait, then it will not return until the help system
  700.     has finished whatever its doing.  If the user is not currently doing
  701.     /help, it will return immediately.
  702.  
  703. *** News 12/16/97 -- New argument to /xecho, -NOLOG
  704.     The -NOLOG argument to /xecho inhibits the current output line from
  705.     being logged, either at the /set log level or the /window log level.
  706.     Im not sure why you would want to do this, but Kasi asked for it.
  707.  
  708. *** News 12/15/97 -- New built in function, $leftpc()
  709.     This function returns the LONGEST string of "text" that contains
  710.     "N" printable characters, where "N" is the first argument to the
  711.     function and everything else is text.  For example:
  712.         $leftpc(10 onetwothre$chr(27)[34mefour)
  713.     return
  714.         onetwothree<blue attribute>
  715.     Note that any non-printable characters that appear after the N'th
  716.     character *will* be included in the output.  This is intentional.
  717.  
  718. *** News 12/11/97 -- New built in function, $rigmask()
  719.     This works just like $igmask, but in reverse.  You provide it
  720.     a nick!user@host pattern, and it returns to you all the ignores
  721.     that would be triggered by that pattern.
  722.  
  723. *** News 12/05/97 -- Ten new meta keybindings, META10 through META19
  724.     You now have 19 meta keys to work with.  The client attempts as
  725.     much as possible to conserve space, so this isnt a RAM buster.
  726.     If you dont use the new meta maps, the only space reserved for them
  727.     will be a NULL pointer. ;-)  Meta4 is still sticky.
  728.  
  729. *** News 12/03/97 -- New flood protection, change to /ON FLOOD
  730.     On flood now takes one more argument:
  731.         $0    The person doing the flood
  732.         $1    The type of flood theyre doing
  733.         $2    The channel (if any) theyre flooding on   (NEW!)
  734.         $3-    The text of the flood.
  735.  
  736. *** News 12/02/97 -- New flags to /CLEAR and /UNCLEAR
  737.     They are -HIDDEN which clears or unclears all the hidden windows,
  738.     and -VISIBLE for all of the visible windows.  Theyre mutually
  739.     exclusive.  The last one used prevails.  Use -ALL if you want all
  740.     windows to be adjusted.
  741.  
  742. *** News 12/01/97 -- New built in command, /UNCLEAR
  743.     This command works just like /CLEAR, except it nails the bottom of
  744.     your scrollback display onto the bottom of the screen (or as low as
  745.     possible if you dont have a full screen of display yet)
  746.  
  747. *** News 12/01/97 -- New built in function, $msar()
  748.     This is a "multiply substituting" $sar().  You give it any number
  749.     of delimited patterns, and it will substitute all of the patterns
  750.     on the text.  Of course, the obvious limitation is that the text
  751.     may not contain the delimiter character.
  752.  
  753. *** News 11/27/97 -- New built in function, $randread() (srfrog)
  754.     Given a filename, this returns a random line from that file. 
  755.     Yes, it does ~ completion...
  756.  
  757. *** News 11/25/97 -- New built in function, $igmask()
  758.     You give it a pattern, it returns all of the ignore patterns that
  759.     are matched by the pattern.
  760.  
  761. *** News 11/20/97 -- New flag to /timer, -WINDOW <windesc>
  762.     This flag will allow you to specify that the timer should go off
  763.     in the specified window.  Please note that the limiations about
  764.     timers that go off in hidden windows still applies.  Use this flag
  765.     with caution until the problem with timers in hidden windows is 
  766.     addressed.
  767.  
  768. *** News 11/20/97 -- Changes to /dcc close
  769.     You may now use the words "-all" or "*" to indicate that all of the
  770.     dcc's of a given type or dcc's to a given nick should be closed.
  771.     For example:
  772.         To close all of the dcc's you have open to "foobar",
  773.             /dcc close * foobar 
  774.         To close all of the dcc chat's you have open to anyone,
  775.             /dcc close chat *
  776.  
  777. *** News 11/19/97 -- New built in function, $count()
  778.     This function returns the number of times (possibly overlapping) 
  779.     that a given string appears in some text.  For example:
  780.         $count(. one.two.three)        returns 2.
  781.         $count(ll llll)            returns 3 (think about it).
  782.  
  783. *** News 11/12/97 -- New /ON, /ON DCC_OFFER
  784.     This hook is activated whenever you make an OUTBOUND DCC OFFER.
  785.     (Kind of the complement to /on dcc_request).  
  786.     Presently, it has exactly two arguments: 
  787.         $0 is the person to whom you are offering the dcc, 
  788.         $1 is the type of dcc you are offering.
  789.     It is possible that more args could be added in the future on request.
  790.  
  791. *** News 11/11/97 -- New /SET, /SET STATUS_TRUNCATE_RHS **** RECALLED *****
  792.     This set determines which side of the %> in your status bar should be
  793.     truncated if the status bar is wider than the screen.  If this is set
  794.     to ON, then the right hand side of the %> will be truncated back to
  795.     80 characters.  If this is set to OFF, then the left hand side of the
  796.     %> will be truncated so as to allow everything to the right of %> to
  797.     be kept.
  798.         ***** This feature is non-operative due to some *****
  799.         *****      serious problems.  It will remain    *****
  800.         ***** non-operative until such time it is fixed *****
  801.  
  802. *** News 11/10/97 -- New script, "pipe"
  803.     This script implements the $pipe() function, which demonstrates how
  804.     you can use /on exec to capture the stdout of an exec'd command and
  805.     return it from a function (essentially acting as a pipe or a backtick
  806.     type operation).  It may not be universally useful as-is.  Feel free
  807.     to tweak it to your taste.
  808.  
  809. *** News 11/07/97 -- Improvements to /ON
  810.     As part of a larger re-organization of the /on command, three noticible
  811.     changes to the semantics of /ON have been made:
  812.  
  813.     1) The @ and # "server-specific" qualifiers have been withdrawn.
  814.        If you used this feature, and desperately need to retain it, let
  815.        me know and ill work something out with you.  I did not reimplement
  816.        them on the understanding that nobody would miss them.
  817.     2) Doing /on ^type ^"nick" now works as you would expect, that is to 
  818.        say, it really does nothing, and it would suppress the default
  819.        behavior.  This is a lower-cost way to do  /on ^type "nick" #.
  820.     3) You may now do /ON SEND ("send" is just an exmaple, this works for
  821.        any hook) to see all of the hooks for types that begin with "send".
  822.        Previously, it was impossible to get a listing of more than one
  823.        hook type at a time.
  824.  
  825. *** News 11/05/97 -- Improvements to /TIMER
  826.     /TIMER now attempts to keep track of what the current server and
  827.     current window were when the timer was registered, and will revert
  828.     back to that window/server when the timer expires.  This should prove
  829.     to be much more intuitive.
  830.  
  831. *** News 10/28/97 -- New flag to /xecho, /XECHO -R
  832.     This flag dumps a raw string to your terminal emulator.  It is
  833.     imperative to notice that the client does *no interpretation* of the
  834.     string.  It is dumped right to your terminal by the /xecho command,
  835.     so it never gets backed by your window/screen.  That means you should
  836.     really only use this to output strings that act as a state-change 
  837.     command to your terminal (eg, setting the xterm title bar, or doing
  838.     an unflash.)  If you output "modifying" codes (like setting colors or
  839.     attributes), it wont get to your window display and will be lost on
  840.     the next window redraw.
  841.  
  842. *** News 10/27/97 -- New /set, /SET NO_FAIL_DISCONNECT (ON|OFF)     (nuke)
  843.     When this is set to ON, the client will NOT automatically terminate
  844.     your connection to the server if a write() fails.  This is most useful
  845.     for nuke and other people who have static ip's connected to routers
  846.     that retain packets while you are disconnected.  The default is OFF,
  847.     since for most people, a write() failure is a fatal condition.
  848.  
  849. *** News 10/26/97 -- New built in commands, "break", "continue", "return"
  850.     These built in commands are used for controlling the flow of code
  851.     execution.  They work 99% like they would in C.  When youre in a 
  852.     "while" or "for" loop, the "continue" command will immediately
  853.     terminate the current loop and go back to the top (the 'for' command
  854.     will run the 'iteration' part as it does in C).  When you do a 
  855.     "break" command in "while" or "for", it immediately terminates the
  856.     loop entirely and moves to the next command after the "while" or "for".
  857.  
  858.     The "return" command is used to immediately terminate execution of
  859.     an alias or on-event.  If an argument is specified, it is assigned to
  860.     the local variable FUNCTION_RETURN.  Those of you who use the old
  861.     "return" alias that just assigns to function_return will find that it
  862.     still works, but it wont terminate the execution of the current alias
  863.     or on (eg, you wont notice any changes.)  Youre encouraged to take 
  864.     advantage of the new functionality. =)
  865.  
  866. *** News 10/26/97 -- "FUNCTION_RETURN" now a normal local variable.
  867.     When you make a function call, the "function_return" variable is now
  868.     instantiated as a regular local variable.  Previously, the
  869.     function_return variable was trapped for special treatment and was
  870.     a write-only value.  Now it is a read/write variable, so you can use
  871.     it just like any other variable.  The one exception to this is that
  872.     you may assign to FUNCTION_RETURN in aliases that are called from the
  873.     function that instantiated them (as opposed to other local variables
  874.     which are not honored in called aliases.)  This was done out of
  875.     neccesity to be compatable with scripts that presume that you may
  876.     assign to FUNCTION_RETURN and it will carry to the closest enclosing
  877.     function call.  Since FUNCTION_RETURN is stored on the calling stack,
  878.     the arbitrary limit of 128 nested function calls no longer exists.
  879.  
  880. *** News 10/25/97 -- New Status bar expando -- %K
  881.     This expando will be displayed on the status bar if you are currently
  882.     in scrollback mode in that window.  Should be good for people who
  883.     forget. ;-)  What it actually displays is controlled by a set, 
  884.     /set status_scrollback.  The default is "(Scroll)"
  885.  
  886. *** News 10/20/97 -- Greatly reduced CPU usage in pre0.30
  887.     Some profiling work showed some really monsterous CPU hogs.  With
  888.     a few minor, yet strategic changes, CPU usage for the testers has 
  889.     been reduced from 60% to 90% compared to pre0.28. (ive seen cpu usage
  890.     under 2:00 a day for someone on 10 channels running with all usermodes
  891.     active running clonebot-detection scripts.)
  892.  
  893. *** News 10/20/97 -- New built in functions, $regcomp(), $regmatch(), etc.
  894.     There are four new built in functions that give you an interface
  895.     to the posix.2 "regex" pattern matching functionality:
  896.  
  897.     $regcomp(<pattern>)
  898.         given a regex pattern, it will return a printable string
  899.         representation of the compiled pattern.  You must later pass
  900.         the return value of this function to $regfree() to avoid 
  901.         memory leaks.  The pattern is assumed to be case insensitive,
  902.         and cannot make use of any \(...\) subexpressions.
  903.  
  904.     $regexec(<compiled> <string>)
  905.         given a compiled regular expression and some text, it will
  906.         return 0 if the string is matched by the compiled pattern,
  907.         or will return nonzero on error.  The return code can be
  908.         passed to $regerror() for specific information.  Of note, 
  909.         the return value '1' means the pattern didnt match.
  910.  
  911.     $regerror(<error code> <compiled>)
  912.         given an error code and the compiled regular expression from
  913.         which it was generated, this gives you a human readable error
  914.         message.  If the error was from $regcomp(), then you can pass
  915.         the error code "-1", which will then be subtituted with the
  916.         last $regcomp() error code.  Otherwise, error code should be
  917.         the return value from $regexec().
  918.  
  919.     $regfree(<compiled>)
  920.         given a compiled regular expression, this returns any resources
  921.         that were used by the regular expression.  If you fail to 
  922.         $regfree() everything you $regcomp(), then you will expose a
  923.         memory leak, and that wont be my fault. ;-)  You must not use
  924.         a compiled regular expression after you have called $regfree()
  925.         on it.  To do so will result in chaos.
  926.  
  927.             
  928. *** News 10/20/97 -- New command line flag, -B
  929.     This does what the stock client's -b flag does.  It loads your .ircrc
  930.     file right at client startup time rather than waiting for the client
  931.     to connect to a server.
  932.  
  933. *** News 10/20/97 -- New math operators << and >>.
  934.     These are the left-bitshift and right-bitshift operators.  Currently
  935.     they are only available in their binary forms.  There is no support
  936.     for <<= and >>=, as support for that would be problematic.  Since you
  937.     can just do the longhand assignment, their ommision is not a big deal.
  938.  
  939. *** News 10/16/97 -- New built in functions, $fnexist(), $cexist()
  940.     These two functions return 1 if the given built in function, or
  941.     the given built in command, exist.  It returns 0 if they do not
  942.     exist.  The idea use for these is to provide an alias or function
  943.     that emulates the built in function/command youre looking for, if
  944.     theyre absent (as in older versions).  Of course, this is more of
  945.     a forward looking feature, as it wont help you on older releases. =)
  946.  
  947. *** News 10/15/97 -- New /set, /SET STATUS_DOES_EXPANDOS (ON|OFF)
  948.     This /set controls whether or not any expandos (eg, $vars or $func()s)
  949.     in the status line should be expanded or left alone.  Please note that
  950.     this option is *very expensive*, and so you should not turn it on
  951.     unless you really do have expandoes in the status_format, and you 
  952.     really shouldnt put expandoes in the status_format if you can possibly
  953.     get away with it. ;-)
  954.  
  955. *** News 10/15/97 -- New built in function, $currchans(server)
  956.     If you specify an argument, this function will return quoted words
  957.     containing a server refnum and a channel name.  The channels to be
  958.     returned are channels that are currently considered to be "current
  959.     channels" for some window that is connected to the specified server.
  960.     If you specify a server of -1, then $lastserver() is assumed.  If you
  961.     specify no arguments, then all current channels will be returned.
  962.     It is expected that this will be useful to determine if a given
  963.     channel on a given server is a current channel on *any* window. 
  964.     The return value of this function uses double quotes, so it is
  965.     suitable for use in /fe, or to pass to $rmatch().  Just remember to
  966.     glob against "* #chan" (with the quotes!) for any server.
  967.  
  968. *** News 10/15/97 -- Change to /window (Colten)
  969.     If you specify a window refnum where /WINDOW excepts to find a command,
  970.     then that window will be used as the target window for any further
  971.     commands, *but*, that window will not be made the current window (as
  972.     it would if you had used REFNUM <refnum>).  This is useful for 
  973.     changing an attribute for a specific window but you dont want the
  974.     current window to change.  eg:
  975.  
  976.             /window 2 double on
  977.  
  978. *** News 10/15/97 -- Change to $myservers() (Colten)
  979.     If you pass any argument to $myservers(), then a list of refnums to
  980.     open servers will be returned.  The existing behavior of returning a
  981.     list of NAMES to open servers is retained if you pass no arguments.
  982.  
  983. *** News 10/15/97 -- New built in function, $isconnected(refnum) (Colten)
  984.     This function returns 1 if the specified server is currently connected
  985.     (eg, you have been successfully registered).  If refnum is -1, then
  986.     from_server is assumed.
  987.  
  988. *** News 10/08/97 -- New /window command, /WINDOW SCRATCH (ON|OFF)
  989.     This allows you to designate a window as being a "scratch" window.
  990.     A 'scratch' window is one that allows direct addressing, and it does
  991.     not scroll.  The support *just barely works*.  That means if you 
  992.     do anything i didnt expect, you probably will crash the client.
  993.     Let me know if you find any ways to confuse this so i can fix them.
  994.  
  995.     To send text to a given line on a scratch window, use /xecho with
  996.     the -line flag:
  997.         /xecho -window <scratch refnum> -line <line number> text
  998.  
  999.     /XECHO -LINE will whine at you if:
  1000.     * If the window you specify is not a scratch window.
  1001.     * You dont specify -window before you specify -line.
  1002.     * If the line number you specify is out of range for the window.
  1003.  
  1004.     Suggestions/observations:
  1005.     * Scratch windows dont deal with being resized very gracefully.
  1006.       I suggest you do /WINDOW NEW SCRATCH ON FIXED ON  so that it cant be
  1007.       resized on you.  You should assume (at this time) that if the window
  1008.       gets resized, the contents are *undefined*.  That will probably be
  1009.       improved in the future.
  1010.     * Scratch windows probably should not be attached to servers.  Use
  1011.       /WINDOW DISCON to make sure they are unbound.
  1012.     * There is NO SCROLLBACK on scratch windows.  When you overwrite a 
  1013.       line, it is gone forever.
  1014.     * If you "unscratch" a window, then it is implicitly /CLEARed.
  1015.       This to ensure that the status of the window after being returned
  1016.       to normal will be coherent.  The previous contents of the window
  1017.       will be retained in the scrollback buffer.
  1018.     * If you do a normal /echo to a scratch window, it will use the line
  1019.       below the most previously output line.  When you reach the bottom
  1020.       of the window, it will go back to the top.
  1021.  
  1022. *** News 10/08/97 -- New /window command, /WINDOW DISCON
  1023.     This allows you to specify that a window is not to be bound to any
  1024.     specified server.  That means the window will NEVER recieve output
  1025.     from any qualified server event, unless you specifically use /xecho
  1026.     to redirect output to that window.
  1027.  
  1028. *** News 10/01/97 -- IMPORTANT! SEMANTIC CHANGES! IMPORTANT!
  1029.     The $winchan() functions and $chanwin() functions have been reversed.
  1030.     That is to say, $winchan() now takes a WINDOW REFNUM argument, and
  1031.     $chanwin() takes a CHANNEL NAME argument.  This is the reverse of
  1032.     what it has been before, and the change was done in order to keep the
  1033.     semantics of built in functions coherent  (eg, $chan*() functions
  1034.     always take a channel name, and $win*() functions always take a window
  1035.     refnum.  A /set has been provided to let you have the old semantics.
  1036.          *** BUT PLEASE MAKE A PLAN TO CONVERT YOUR CODE TO THE ***
  1037.                  *** NEW SEMANTICS. PLEASE PLEASE PLEASE. ***
  1038.  
  1039.     To let you know if the new semantics or old semantics are in effect,
  1040.     the new $info command, ``$info(w)'' command will return 1.  So add
  1041.     something like this in your script to get compatability:
  1042.             if (info(w) == 1) { set winchan_hack ON }
  1043.  
  1044.     IMPORTANT!!!
  1045.     The value of $info(w) will change to 2 (two) when this hack has been
  1046.     phased out in some future version. *** PROGRAM DEFENSIVELY. ***  Plan 
  1047.     to do something reasonable if $info(w) returns a value of 2. (This
  1048.     means that the above /set is not available, and the new semantics are
  1049.     irrevokably in place.)  I promise that the old semantics will not be
  1050.     irrevokably phased out before EPIC4pre5, and that the old semantics
  1051.     will most likely be phased out at the time of the production release
  1052.     (EPIC4.000)  Please plan ahead for this.
  1053.  
  1054.     If all of this ends up being unreasonably complicated or a burden,
  1055.     then let me know, and i'll work something out with you.
  1056.  
  1057. *** News 10/01/97 -- New /set, /SET WINCHAN_HACK
  1058.     This is a *temporary* feature to help ease the transition for those
  1059.     who have a substantial amount of code that depends on the semantics
  1060.     of $winchan() being "backwards" (eg, that it takes a channel argument
  1061.     rather than a window argument).  When this is turned on, $winchan()
  1062.     and $chanwin() will have their "traditional", or "reverse" semantics.
  1063.     When this is turned off, they will have their "modern", or "correct"
  1064.     semantics.  THIS SHOULD NEVER BE TURNED ON UNLESS YOU REALLY NEED IT.
  1065.     Please do NOT write new code with the old semantics, it will only
  1066.     encourage the broken semantics.
  1067.  
  1068. *** News 09/26/97 -- New /on, /ON REDIRECT
  1069.     This hooks any time something is about to be redirected to someone.
  1070.     If you hook this silently, the redirect will be suppressed.  This 
  1071.     would then be useful to filter out stuff that you might not want
  1072.     to have redirected.
  1073.         $0  - the target to whom the text is about to be sent
  1074.         $1- - the text itself.
  1075.  
  1076. *** News 09/20/97 -- New function $servernick()
  1077.     You give it a server refnum, it gives you your current nickname
  1078.     on that server.  This function has been around a while, it just
  1079.     never got documented.
  1080.  
  1081. *** News 09/20/97 -- #define CONTROL_C_COLOR now in $info(o)
  1082.     It is represented by the letter 'c'.
  1083.  
  1084. *** News 09/20/97 -- New built in function $chanwin()  <THIS HAS BEEN CHANGED>
  1085.     This is the reverse of $winchan().  You give it a window refnum or
  1086.     name, and it gives you the current channel (if any) for that window.
  1087.  
  1088. *** News 09/20/97 -- New built in function, $winnicklist() (Colten)
  1089.     You pass it either a window refnum or a window name, and it returns
  1090.     the nicks that are currently on the "nick list" for that window.
  1091.     (See the help for /window add for info about the nick list).  If
  1092.     you dont specify any arguments, the current window is presumed.
  1093.  
  1094. *** News 09/20/97 -- New /set, /SET NO_CONTROL_LOG (Peter Evans)
  1095.     When this is /set to on, the client will not output any nonprintable,
  1096.     nonspace characters to the log file.  When off, it will have the old
  1097.     behavior (dumping everything right to the log as it appears on the
  1098.     screen.)
  1099.  
  1100. *** News 09/20/97 -- New /on, /ON WINDOW_CREATE
  1101.     When a window is created with /on window, then this new hook will
  1102.     be activated.  You may assume that any "window" commands that you
  1103.     specify in the body will work for the window being created.  This
  1104.     is intended for setting "defaults" for windows, like so:
  1105.  
  1106.         /on window_create * window double on
  1107.  
  1108. *** News 09/18/97 -- Comprimise for /SET STATUS_MAIL
  1109.     Because there has been some controversy over the inability to "get
  1110.     rid of that damned colon" for %M in /set status_mail, i have agreed
  1111.     to take it out.  However, for those of us who like to have 
  1112.     /set mail 1, we wont be left with a "(Mail: )".  There is a new
  1113.     script called 'setmail", that traps /set mail, and offers two new
  1114.     /set's, /set mail_format1, and /set mail_format2, for controlling
  1115.     how the mail should look like when /set mail 1 and /set mail 2
  1116.     is engaged (respectively.)  I would just suggest that you load it
  1117.     in your .ircrc (before you /set mail) and see what i mean.
  1118.  
  1119. *** News 09/18/97 -- New error tracking feature
  1120.     If an error occurs while you are loading a script, then the client
  1121.     will tell you about where the error occured.  I say "about", because
  1122.     the client doesnt actually try to run /load'ed commands until it 
  1123.     reaches the next valid command, so the command that is in error is 
  1124.     always the first one BEFORE the line stated.  As well, when you
  1125.     attempt to /assign to an invalid variable, it will tell you what the
  1126.     invalid variable name was, so you can hunt it down.
  1127.  
  1128. *** News 09/16/97 -- New /set, /SET STATUS_NICK (|Rain|)
  1129.     This is a control for how your nickname will appear in the status
  1130.     bar.  Following convention, you may use %N in the /set to determine
  1131.     where the nick should be placed.  The default is just %N by itself,
  1132.     which yeilds the traditional behavior.
  1133.  
  1134. *** News 09/11/97 -- New function $nohighlight()
  1135.     This function will take any arbitrary input and will convert all of
  1136.     the highlight characters (^B, ^V, ^_, ^O, ^C, and ^[) to a "printable"
  1137.     format (in reverse).  This allows operators to find hidden attributes
  1138.     in channel names that would otherwise be invisibly stripped.
  1139.  
  1140. *** News 09/10/97 -- New function, $deuhc()  (Peter Evans)
  1141.     This function will remove "*!" or "*!*@" from the front of the
  1142.     specified pattern, if it is present.
  1143.  
  1144. *** News 09/09/97 -- New /window argument, /WINDOW SKIP (ON|OFF)
  1145.     You may now mark that a window should be 'skipped' when you are
  1146.     moving to the NEXT_WINDOW or PREVIOUS_WINDOW.  The only way to
  1147.     "land" on that window then is to use /WINDOW GOTO or such.  This
  1148.     was intended to be used for windows that are not to recieve input,
  1149.     such as your OpView window.
  1150.  
  1151. *** News 09/09/97 -- New command, /SHOOK <type> <args>
  1152.     This is a hokey name, i admit.  Anyone got a better name for it?
  1153.  
  1154.     This function allows you to arbitrarily synthesize /on events with
  1155.     your own arguments.  This is intended to retro-fit new problems onto
  1156.     old solutions.  For example, you could do:
  1157.  
  1158.         /on ^public "% &KILLS Received kill message *" {
  1159.             shook KILL $2-
  1160.         }
  1161.  
  1162.     or something like that, to make your normal /on kill handlers to be
  1163.     executed while youre on an ef2.9 server.  Or so is the idea.  Let
  1164.     me know what you think of this, and if its broken, say so.  
  1165.     **** BE WARNED ****
  1166.     Code in on hooks that depend on side effects (like $userhost()
  1167.     being set) will be *utterly confused* by these synthetic events, and
  1168.     will probably get wildly incorrect results.  You yourself are 
  1169.     responsible for making sure that this doesnt happen to you!
  1170.  
  1171. *** News 09/09/97 -- New /window argument, /WINDOW FIXED (ON|OFF)
  1172.     You may now "fix" a window as being a given size.  When a window is
  1173.     "fixed", it will never be shrunk or grown when you shrink or grow
  1174.     another window, and it is immune to /window balance.  You can still 
  1175.     directly shrink or grow a fixed window.  The only exception to this 
  1176.     is if all windows on a screen are fixed, and the screen is resized, 
  1177.     the bottom window of the screen will be forcibly resized, although it
  1178.     would still be "fixed". This was all done so that the OpView window 
  1179.     can be set to 4 lines and it will stay that way unless you explicitly 
  1180.     change it.
  1181.  
  1182. *** News 09/09/97 -- New /set, /SET BANNER_EXPAND
  1183.     If this is set to ON, then the contents of /SET BANNER will be
  1184.     expanded ($-substitution will occur) before it is used.  If it is
  1185.     OFF, then the value of /SET BANNER is used literally.
  1186.  
  1187. *** News 09/05/97 -- Changes to how windows are resized
  1188.     When you resize your display, then the proportion of window sizes
  1189.     between the non-fixed windows will be retained.  That is to say,
  1190.     if you had two windows, sizes X and 2X, and you change the screen
  1191.     so that the first window has size Y, then the second window will have
  1192.     about size 2Y.  When you rebalance your windows (with /window balance),
  1193.     all the nonfixed windows will be set to approx.  the same size.
  1194.     Fixed windows will not be touched. 
  1195.  
  1196. *** News 09/05/97 -- Now friendlier with job control
  1197.     If you want to suspend the client but are worried about it pinging
  1198.     out, you should be able 'bg' the client now, and it wont stop due
  1199.     to (tty output) or mangle your screen.  You will need to stop the
  1200.     client (with 'kill -STOP %1') before you 'fg' it again, or the client
  1201.     wont accept input.  This is not a bug, this is a job control problem.
  1202.     This should satisfy anyone who still pines for 'ircserv' ;-)
  1203.  
  1204. *** News 09/04/97 -- New /on, /ON DCC_LIST
  1205.     Many people have asked for an easy way to reformat the DCC output.
  1206.     So this new on will output the 8 most interesting capabilities.
  1207.     Im open to adding new ones, just let me know.  The 'banner' of the
  1208.     list is output with $0 being "Start" and the rest of the fields being
  1209.     filler.
  1210.         $0  - The type of DCC connection
  1211.         $1  - "1" if encryption is on, "0" if its not  (future exp)
  1212.         $2  - Nickname of the peer
  1213.         $3  - Status of connection
  1214.         $4  - $time() when connection established, 0 if not connected.
  1215.         $5  - Size of the file transfer, 0 if not applicable
  1216.         $6  - Number of bytes transfered, 0 if not connected
  1217.         $7  - Description field (usually the full filename)
  1218.  
  1219. *** News 09/04/97 -- Some new behavior for your display
  1220.     A lot of the code that handles your display has been rewritten.
  1221.     The most important changes are:  When you scroll backwards, you will
  1222.     get the lines that actually appeared on your screen, not the lines in
  1223.     your lastlog.  Those lines are output at the width they were split
  1224.     for, and if your screen is a different size, they wont be re-split.
  1225.     This is not a bug.  Do not report it as a bug.  When you are in
  1226.     scroll mode, the screen will not automatically scroll for you if
  1227.     the display reaches the end of the screen.  Instead, that stuff is
  1228.     put into the hold buffer.  You can use the SCROLL_FORWARD key to go
  1229.     forward a page *even into the hold buffer*, and all new output will
  1230.     appear as long as that output doesnt make the screen scroll.  Use the
  1231.     SCROLL_END key to go back to the "normal" scrolling behavior.
  1232.     You cannot turn HOLD_MODE off if youre in scrollback mode.
  1233.  
  1234. *** News 08/27/97 -- New /set, /SET CLOCK_FORMAT
  1235.     This /set, if set, controls how the client should represent the
  1236.     current time on your status bar, among other things.  Rather than
  1237.     have the representation be hardcoded in the client, this will give
  1238.     you the flexiblity to have the time displayed just however you want.
  1239.     By default, this /set comes UNSET.  When this is unset, the more
  1240.     traditional behavior of /set clock_24hour determines how the time
  1241.     should appear.  If you /set clock_format, it *overrides* the setting
  1242.     of /set clock_24hour.
  1243.  
  1244. *** News 08/25/97 -- New built in functions, $substr() and $rsubstr()
  1245.     These functions allow you to look for a string inside of another
  1246.     string.  It takes two or more arguments, with the first argument
  1247.     being the string to look for (use double quotes if it has spaces
  1248.     in it) and the rest of the arguments being the words to look in.
  1249.     (You dont need quotes for this arg.)  It returns -1 if the string
  1250.     could not be found, or returns the offset (counting by zero) where
  1251.     the string may be found in the source.  $rsubstr() looks backwards
  1252.     from the end of the string rather than from the front.
  1253.  
  1254. *** News 08/22/97 -- New flag to /XECHO, -B
  1255.     The /XECHO -B flag instructs the client to prepend the current value
  1256.     of BANNER_VAR before the line to be output.  This allows you to output
  1257.     something with a banner without having to worry about BANNER_VAR.  If
  1258.     you have have /set show_numerics ON and the hook happens to be a 
  1259.     numeric hook, then the numeric will be output.
  1260.  
  1261. *** News 08/20/97 -- Limits on /echo now removed
  1262.     There have always been limitations to the size of lines being handled
  1263.     for display.  Recent limits have been 2048 characters or 40 lines to 
  1264.     the screen, and 20480 characters to the lastlog or to a log file.  
  1265.     All of these limitations have now been eliminated, and any size line 
  1266.     (within the confines of available memory) can be handled without 
  1267.     excuses.
  1268.  
  1269. *** News 08/19/97 -- Handling of ^C colors, new set, /SET CONTROL_C_COLORS
  1270.     ^C colors (eg, ``mIRC colors'') are now handled in the output stream.
  1271.     Whether or not anything is done with them is controlled by a compile
  1272.     time option (which is further controlled by a /set).  If you #define
  1273.     CONTROL_C_COLORS, in config.h and you /set CONTROL_C_COLORS ON, then 
  1274.     they will be parsed and converted into colors.  If you #undef it, 
  1275.     then the value of the /set will not matter, colors will never be 
  1276.     honored.  Sorry, but the "old" behavior of leaving them unchanged in 
  1277.     the output stream is no longer available.  You either must honor them 
  1278.     or you must have them filtered out.  (I doubt anyone will have a 
  1279.     problem with this.)
  1280.  
  1281.     By default, the #define is #undef'd, and the /set is turned off.
  1282.     The defaults will never change in future releases unless there
  1283.     is overwhelming public pressure to change them.
  1284.  
  1285. *** News 08/17/97 -- New operator, #~ (prepend operator)
  1286.     This is similar to the #= operator, which appends text to a variable.
  1287.     This operator PREPENDS text to a given variable.
  1288.  
  1289. *** News 08/17/97 -- New flag for /timer, -REPEAT
  1290.     The /timer -REPEAT flag takes one argument, which is given to be
  1291.     the number of times that the specified action should be repeated
  1292.     (every specified interval).  The /timer -LIST flag reflects the
  1293.     number of events left to be scheduled.
  1294.  
  1295. *** News 08/17/97 -- New script, "MOTD"
  1296.     This script re-implements client-side MOTD files.  It uses the two
  1297.     below functions.  Its only provided for those of you who miss this
  1298.     feature.
  1299.  
  1300. *** News 08/15/97 -- New function $ftime()
  1301.     This function returns to you the "mtime" of a given file (see stat(2))
  1302.     In ordinary words, this was the last time that the file was modified.
  1303.     It is the time that you see for an ordinary "ls -l" listing.  It is
  1304.     returned in seconds since the epoch, so youll need to $strftime() or
  1305.     $ctime() to convert it to human format.
  1306.  
  1307. *** News 08/15/97 -- New function $irclib()
  1308.     This function is only useful if you need to know where the IRCLIB
  1309.     is.  An example of its use is the "motd" script.
  1310.  
  1311. *** News 08/15/97 -- New function, $winbound()
  1312.     This function takes one argument.  If the argument specified is the
  1313.     name or refnum of a window, then the name of the channel bound to that
  1314.     window (if any) is the return value.  If the argument specified is
  1315.     the name of a channel, then the window refnum to which it is bound
  1316.     (if any) is the return value.  In case of ambiguity (if you have a
  1317.     window name that looks like a channel name), the window takes
  1318.     precedence over the channel.
  1319.  
  1320. *** News 08/08/97 -- Notify can now do userhost lookups automatically
  1321.     Most people (everybody?) do a /userhost request in their 
  1322.     /on notify_signons, and that has been distressing to many servers,
  1323.     because when you connect there is a flurry of ISON and USERHOST traffic
  1324.     and many people have gotten trapped in "flooder mode".  Some have 
  1325.     tried, with limited success and much agony, to batch up userhost
  1326.     requests to help.  In the interests of cutting down on client->server
  1327.     traffic needed for NOTIFY events, the client can now automatically
  1328.     fetch userhosts on your behalf.
  1329.  
  1330.     To turn on this feature, /set NOTIFY_USERHOST_AUTOMATIC on.  When
  1331.     this is ON, the client will dispatch userhost queries for everybody
  1332.     who is 'triggered' for that minute.  It does intelligent batching,
  1333.     so you wont be flooding the server as much.  This is ideal for when
  1334.     you initially connect and your flurry of ISONs and USERHOSTs can
  1335.     sometimes make the server hate you.  If this is OFF, then the 
  1336.     traditional behavior applies as normal.
  1337.  
  1338.     To accomidate this new feature, /on NOTIFY_SIGNON now takes two
  1339.     arguments:  The new second argument is the userhost of the person
  1340.     signing on.  If you have the automatic userhost feature turned off,
  1341.     the second argument will be empty.
  1342.  
  1343. *** News 08/08/97 -- New /set, /SET XTERM
  1344.     You may now use this set to specify what "xterm" program you want
  1345.     to use for /window create.  Note that this can be overriden by the
  1346.     XTERM environment variable.  This was done on purpose, so that those
  1347.     who have been setting the XTERM environment variable wont be suprised
  1348.     by the /set's "default".
  1349.  
  1350. *** News 08/08/97 -- New servcmd support (SQUERY, SERVLIST, WALLCHOP)
  1351.     The client now natively recognizes the SQUERY, SERVLIST commands
  1352.     from av2.9 servers, and the WALLCHOP command from u2.10 servers.
  1353.     I didnt implement WALLCHOP in the same way as contributed, so I
  1354.     might get yelled at and change the implementation soon. ;-)
  1355.  
  1356. *** News 08/08/97 -- Can send multiple files with /dcc send
  1357.     You may now specify more than one file with /dcc send nick <file>.
  1358.     I guess thats useful in conjunction with $glob(*) or something.
  1359.     Each request is sent out in a seperate PRIVMSG (obviously), so
  1360.     you should be careful not to send out TOO many files at a time...
  1361.  
  1362. *** News 08/08/97 -- New /on, /ON KILL
  1363.     This should simplify a lot of people's lives.  When you recieve
  1364.     one of those messages "*** Notice -- Recieved KILL message for ...",
  1365.     /ON KILL will be hooked with the following arguments:
  1366.         $0  - The server who sent the message (your server)
  1367.         $1  - The hapless victim
  1368.         $2  - The bastard who did the kill
  1369.         $3  - The server path to the bastard
  1370.         $4- - The reason for the kill
  1371.  
  1372. *** News 08/04/97 -- New /on, /ON OPER_NOTICE
  1373.     The server uses "sendto_ops" to send an notice to all operators.
  1374.     The client now automatically deals with this.
  1375.         $0  - the server that sent you the notice
  1376.         $1- - the text of the message AFTER the *** Notice --- part.
  1377.  
  1378.  
  1379. *** News 07/28/97 -- New built in function, $uhc()
  1380.     $uhc() takes a single argument, which is a partially constructed
  1381.     nick!user@host pattern, and returns a fully qualified nick!user@host
  1382.     pattern.  That is to say, any parts that are missing are filled in.
  1383.     This is a front end to cut_n_fix_glob(), which is the function that
  1384.     "fills in" your arguments to /ignore, so this works identically as
  1385.     the nick!user@host argument to /ignore.
  1386.  
  1387.     $uhc(nick)        returns        nick!*@*
  1388.     $uhc(user@host.com)    returns        *!user@host
  1389.     $uhc(*.host.com)    returns        *!*@*.host.com
  1390.  
  1391.  
  1392. *** News 07/28/97 -- New /SET, DO_NOTIFY_IMMEDIATELY
  1393.     If this is set to ON, then when you do the /notify command, an
  1394.     ISON will be immediately dispatched (the usual behavior.)  But if
  1395.     this is set to OFF, then the ISON is not immediately performed, and
  1396.     you will have to wait until the top of the next minute to see if 
  1397.     the person is on.  This is intended to be used in your .ircrc, 
  1398.     because some users have a zillion people on notify, and they end up
  1399.     sending enough lines to the server when they connect that they activate
  1400.     the server's flood control mechanism, then the server starts slowing
  1401.     you down, and thats just a big hassle.
  1402.  
  1403. *** News 07/28/97 -- New /SET, NOTIFY_INTERVAL
  1404.     This one is a bit tricky.  The value of this set is taken to be
  1405.     a suggestion about how frequently NOTIFY checks should be performed.
  1406.     This does not ever make the client check at any time other than the
  1407.     top of every minute, but it is possible to tweak this variable so
  1408.     that some minutes will be skipped.  For most sane people, setting
  1409.     this to be a multiple of 60 is advised.  Setting this to less than
  1410.     60 does not make it check more frequently than once a minute.
  1411.  
  1412.     /set notify_interval 60        yeilds the "customary" behavior
  1413.     /set notify_interval 120    makes it only check every 2 minutes
  1414.     /set notify_interval 150    makes it check only twice every 5 mins
  1415.                     at minutes 3 (180s) and 5 (300s).
  1416.  
  1417.  
  1418. *** News 07/28/97 -- Two new /SETs, AUTO_REJOIN_DELAY and AUTO_RECONNET_DELAY
  1419.     These two control the amount of time that must pass between when
  1420.     you are kicked or killed, and the time that you attempt to rejoin
  1421.     or reconnect.   Reconnect is probably not totaly intuitive, as it
  1422.     attempts to bind the server to the current window *at the time that
  1423.     the timer expires*, not the window that was disconnected from.
  1424.     Arguably, this is a bug, and may be "fixed" in the future.  The 
  1425.     implementation for these is kind of hairy.
  1426.  
  1427.  
  1428. EPIC4pre1
  1429.  
  1430. *** News 06/18/97 -- New feature, "CPU SAVER"
  1431.     Some of you have asked me for a way to make ircII use less CPU
  1432.     especially when you are idling and detached.  Every minute ircII
  1433.     sends out your notify list, parses the replies, checks the clock,
  1434.     updates your status line, and other various housekeeping duties.
  1435.  
  1436.     But when youre detached, you dont really care if your notifies
  1437.     dont get processed promptly every 60 seconds, you dont care if
  1438.     the clock is accurate every moment, and you would prefer that
  1439.     the client not go to the trouble of wasting CPU time just to
  1440.     keep track.   This wont help if youre on busy channels, or
  1441.     logging wallops, only if the only traffic youre getting are
  1442.     the pings from the server.
  1443.  
  1444.     There are several new sets:
  1445.     /set CPU_SAVER_AFTER -    If you havent typed anything after
  1446.                 this many minutes, CPU saver mode activates.
  1447.     /set CPU_SAVER_EVERY -    If cpu saver mode is on, the client will
  1448.                 only do housekeeping every this many minutes.
  1449.     If either of these two are 0, then cpu saver mode cannot be
  1450.     activated, and the "traditional" behavior will apply.
  1451.  
  1452.     If youre interested in seeing when the client is in cpu saver
  1453.     mode, there is a new status line expando, "%L".  There is also
  1454.     a new /set, /SET STATUS_CPU_SAVER which determines how the %L
  1455.     expando will look when it is activated (just like STATUS_MAIL)
  1456.  
  1457.     There is also a new keybinding, "CPU_SAVER", which if bound to
  1458.     a key will activate cpu saver mode without having to wait.
  1459.  
  1460.     I did this on a whim, mostly because i havent done any features
  1461.     in a long time that have required this many changes, and I wanted
  1462.     to have some fun, so i just let loose with this and went berzerk
  1463.     If i forgot some obscure feature with this, let me know! ;-)
  1464.  
  1465.  
  1466. *** News 05/31/97 -- New environment variable honored, ``IRC_SERVERS_FILE''
  1467.     Someone had suggested something close to this -- they wanted a 
  1468.     way to specify a SERVERS_FILE as an absolute path rather than
  1469.     having it in their irclib directory.  So you can now set this
  1470.     environment variable to an absolute path where you would like the
  1471.     client to get your server list from.  This overrides any
  1472.     built in SERVERS_FILE setting, if appropriate.
  1473.  
  1474. *** News 05/31/97 -- Semantic clarification for /TOPIC
  1475.     Due to the confusion between the very common ``topic'' alias
  1476.     and the built in TOPIC command syntax, I have expanded the
  1477.     built in TOPIC command to do everything that everyone expects
  1478.     TOPIC to do, towit:
  1479.  
  1480.         /topic This is a topic        (set current channel topic)
  1481.         /topic * This is a topic    (same thing)
  1482.         /topic                (see topic on current chan)
  1483.         /topic *            (same thing.)
  1484.         /topic #chan This is atopic    (set topic on #chan)
  1485.  
  1486.     I strongly advise you to throw away your /topic alias unless it
  1487.     does something up and beyond this.  If it does, let me know, and
  1488.     I can include its semantics in the client, if its reasonable.
  1489.  
  1490. *** News 05/19/97 -- All new syntax for /IF
  1491.     As if ircII wasnt becoming PERLish enough, ive modified the
  1492.     /IF command to be more perl-like:  You may now use the 
  1493.     "elsif" modifier to indicate a blocked if command, eg:
  1494.  
  1495.         if (....) {
  1496.             ....
  1497.         } elsif (...) {
  1498.             ....
  1499.         } elsif (...) {
  1500.             ....
  1501.         } else {
  1502.             ....
  1503.         }
  1504.  
  1505.     (The final "else" is optional.)  Note that the placement of
  1506.     the "elsif" and "else" modifiers is critical:  They MUST be
  1507.     on the same line as the closing } to which they modify, or the
  1508.     /LOAD parser will get totaly confused and munge the whole
  1509.     thing up.  This is a limitation that applies only to how
  1510.     scripts are loaded -- sorry.
  1511.  
  1512. *** News 05/09/97 -- New function added, $findw(word ...text ...)
  1513.     This addresses the two most common complaints people have
  1514.     about $[r]match():
  1515.  
  1516.     1) This function returns the WORD NUMBER of the word
  1517.        in text, such that $word($findw(word .text.)  .text.)
  1518.        returns "word".  It returns -1 if word is not found.
  1519.     2) This function does not do anything screwy about quoting
  1520.        or unquoting your input.  It just looks for the word,
  1521.        thats it.  No pattern matching, no frills, and its fast.
  1522.  
  1523. *** News 05/09/97 -- Semantic weakness closed
  1524.     There was a semantic weakness with respect to the word count
  1525.     and strlen modifiers ($#var and $@var) such that if you did 
  1526.     not provide a variable to modify, an unuseful value was returned.
  1527.     Since this was likely to cause confusion, these cases are now
  1528.     defined to implicitly assume $* as the default argument. eg:
  1529.         $#   all by itself is now the same as $numwords($*)
  1530.         $@   all by itself is now the same as $strlen($*)
  1531.     These are *NOT* built in functions.  The # and @ characters
  1532.     still are considered to be modifiers.  The weakness was that
  1533.     these modifiers did not return meaningful values when a value to
  1534.     modify was not provided:  This change stipulates a useful default.
  1535.  
  1536.     In a seperate, but related topic, a change was also made to
  1537.     the math parser to honor this change in that context.  That
  1538.     is to say,   @ foo = #   now assigns to `foo' the number of
  1539.     arguments in the current context.  NOTE THAT THIS IS NOT A
  1540.     FUNDAMENTAL CHANGE!  We're just saying that the default value
  1541.     for the # and @ modifiers is $*.  This is not a "function"!
  1542.  
  1543. *** News 05/05/97 -- New flag to /WINDOW,  /WINDOW LASTLOG
  1544.     /WINDOW LASTLOG lets you individually tweak the size of a 
  1545.     window's lastlog.  This was introduced because this used to
  1546.     be the default beahavior of /set lastlog, but now that /set
  1547.     lastlog is a global action, we still need a way to do this...
  1548.  
  1549. *** News 04/29/97 -- New /set, /SET QUIT_MESSAGE
  1550.     This will be your default quit message.  If you do something
  1551.     stupid, like unset this completely, the client's version will
  1552.     be used as the default.  Of course, any argument you pass to
  1553.     /quit or /signoff will override this /set.
  1554.  
  1555. *** News 04/29/97 -- New /set, /SET DISPATCH_UNKNOWN_COMMAND
  1556.     If you type a command that is not recognized by the client,
  1557.     and youre one of those people who /never/ mistype a command,
  1558.     then you can /set this to ON, and the client will dispatch any
  1559.     otherwise unrecognized commands to the server.  Im sure your
  1560.     server admin will love you if you do this.
  1561.  
  1562. *** News 04/29/97 -- New built in function, $winchan() <THIS HAS BEEN CHANGED>
  1563.     You give it a channel name, and an optional server name
  1564.     or server refnum, and it tells you what window refnum that
  1565.     channel belongs to. (Written by IceKarma)
  1566.  
  1567. *** News 04/29/97 -- New flag to /lastlog, /lastlog -max
  1568.     You can use /LASTLOG -MAX to specify the maximum number
  1569.     of matches you want to display, regardless of any other
  1570.     flags.  The default is no limit.  This was written by Sheik.
  1571.  
  1572. *** News 04/29/97 -- New functionality to /stack,  /stack set
  1573.     You can now do /STACK (PUSH|POP|LIST) SET just as you can
  1574.     already with ALIAS/ASSIGN/ON.  This was written by Colten.
  1575.  
  1576. *** News 04/21/97 -- New set, /SET BANNER
  1577.     The /SET BANNER variable now controls what special banner will
  1578.     be prepended to informational messages from the client.  Up until
  1579.     now, the banner has been three stars ("***"), and many people dont
  1580.     like that or want to be able to change it.  Now you can.
  1581.  
  1582. *** News 04/21/97 -- New on, /ON SET
  1583.     /ON SET is a way to extend the capabilities of the /set command.
  1584.     The /ON SET hook is passed two or more arguments, with
  1585.         $0  -- is the name of the variable to be set
  1586.         $1- -- is the value the variable will be set to.
  1587.  
  1588.     The main idea is the ability to offer /set variables that are
  1589.     not built into the client, and execute ircII code to handle that
  1590.     situation.  The other idea is the ability to suppliment or override 
  1591.     a built-in set variable when it is changed.
  1592.  
  1593.     If you hook /ON SET with the "SILENT" modifier ('^'), then the
  1594.     default action (if any) will not be taken.  This may mean that
  1595.     if the variable is not a built in variable, no error will be
  1596.     output.  If the variable IS a built in variable, then the variable
  1597.     will NOT be set after the fact.
  1598.  
  1599.     There are two ways to get around this:  You can either hook the
  1600.     /ON SET with the "quiet" modifier ('-'), or you can use the /set
  1601.     command inside of the /on set body.  If you attempt to /set a 
  1602.     variable that is already being parsed by /on set, you will NOT
  1603.     be offered the /on again -- it will directly set the variable:
  1604.  
  1605.     Example:
  1606.         on ^set "exec_protection off" {
  1607.             echo *** You cannot set EXEC_PROTECTION off!
  1608.             set exec_protection on
  1609.         }
  1610.  
  1611.     Or:
  1612.         on ^set "auto_rejoin_delay *" {
  1613.             echo *** AUTO REJOIN delay set to [$1] seconds.
  1614.             @ myscript.autorejoin.delay = [$1]
  1615.         }
  1616.  
  1617.     Then you could do:
  1618.         /set auto_rejoin_delay 4
  1619.  
  1620.  
  1621. *** News 04/17/97 -- $X now reflects your ``real'' userhost
  1622.     When you connect to a server, the client asks the 
  1623.     server what your userhost is, and then that value is
  1624.     reflected in the $X variable.  Different server connections
  1625.     may have different $X values.
  1626.  
  1627. *** News 04/17/97 -- Changed semantics for USERHOST command
  1628.     The userhost command will act the same as always, except
  1629.     under the following  condition:
  1630.  
  1631.     If you do /userhost <nick(s)> -cmd, and *every* nick so 
  1632.     specified is on one of the channel(s) you are on (so that 
  1633.     the client already has the userhost cached), then the -cmd 
  1634.     code will be executed immediately, and the client will *NOT* 
  1635.     ask the server for the userhost information.  You are 100% 
  1636.     guaranteed still to get accurate information, you will just
  1637.     get it without waiting for the server query!  The only caveat
  1638.     is that the AWAY and OPER fields will be specified with the
  1639.     false value.  If you currently use the /userhost command to
  1640.     determine if a person is an operator, keep reading.
  1641.  
  1642.     A new flag has been added to the USERHOST command, -direct.
  1643.     The -direct flag forces the client to do a server query for
  1644.     the specified nicknames, even if all of the nicknames are 
  1645.     known to the client beforehand.  This can be used to get
  1646.     accurate AWAY and OPER information.  This flag only makes sense
  1647.     with the -cmd flag, since userhost caching does not happen
  1648.     unless the -cmd flag is specified.
  1649.  
  1650. *** News 04/10/97 -- Two new operators =~ and !~
  1651.     The two operators are intended to be similar to the perl operators:
  1652.     The lhs of the operator is expected to be a plaintext string, and
  1653.     The rhs of the operator is expected to be a wildcard expression.
  1654.     The operator returns a true value if the pattern matches the text,
  1655.     and it returns the false value if it does not.
  1656.  
  1657.     This is intended to be a low-cost alternative to the $match() and
  1658.     $rmatch() built-in functions when the only thing you need to do is
  1659.     see if a string is matched by a pattern.  If you need to select 
  1660.     from more than one pattern, use $match() or $rmatch().
  1661.  
  1662. *** News 04/07/97 -- Asynchronous code may use local variables
  1663.     You may reference local variables in asynchronous code
  1664.     provided that you follow the rules that have already been
  1665.     laid down.  See the regress/kill script for more info.
  1666.  
  1667.     1) You have to use /bless in the asynchronous code in order
  1668.        to have access to the underlying local variables.
  1669.     2) You have to use /wait in the synchronous code in order to
  1670.        make sure the local variables dont go away.
  1671.     3) Make sure you clean up your own messes.  Asynchronous code
  1672.        lying around, resulting in /bless calls when there is no 
  1673.        context for local variables is not a good thing.
  1674.  
  1675. *** News 03/31/97 -- New argument to /WAIT command, ``for''
  1676.     Yes, ``for'' without a hyphen.  This command guarantees that
  1677.     the code given as the argument is executed synchronously.
  1678.     That is to say, if the arguments, when executed, sent something
  1679.     to the server, the command will not return until that request
  1680.     has been completed (as if a wait had been done.)  But if the
  1681.     code does not send a query to the server, no wait is executed,
  1682.     and the command returns immediately after the code completes.
  1683.  
  1684.     You can also mix and match ``wait for'' with regular ``wait''
  1685.     calls and the client will be able to figure out what to do
  1686.     without waiting extra more than it needs to.
  1687.  
  1688.     And as always, using /wait or /wait for and /redirect at the 
  1689.     same tims is a bad thing (tm), so dont do it.  The result is
  1690.     undefined behavior (eg, what happens isnt my fault.)
  1691.  
  1692. *** News 03/19/97 -- About the new who/ison (and soon userhost) queues.
  1693.     The client now keeps a FIFO (queue) of who/ison/userhost queries
  1694.     you make.  It is *critically* important that you do not confuse
  1695.     these queues (due to the nature of these server queries, there is
  1696.     no way to have any reasonable error recovery). 
  1697.  
  1698.     The following behaviors are forbidden (but the client wont stop
  1699.     you from doing them)
  1700.  
  1701.     * Using /ON ^RAW_IRC to wedge the 303, 351, or 315 numerics.
  1702.       If you do this, the queues wont be properly flushed, anyone
  1703.       waiting on a proper reply wont be handled, and any further
  1704.       reqeusts will be thought to be previous queries, and all hell
  1705.       will break loose.
  1706.     * Using /QUOTE to launch USERHOST, ISON, or WHO requests..
  1707.       If you do this, the client will whine at you when it gets
  1708.       unexpected replies and will eat the information.  If you launch
  1709.       another query before the invalid one finishes, all hell will
  1710.       break loose.
  1711.  
  1712.     *** THERE IS NO WAY TO RECOVER IF YOU DO THESE THINGS ***
  1713.     If youre stupid enough to do it, you get what you deserve.
  1714.  
  1715. *** News 03/18/97 -- Expanded syntax for $userhost()
  1716.     For your convenience, the $userhost() function now takes arguments:
  1717.     You may specify one or more nicknames as arguments to the $userhost()
  1718.     function, and the corresponding userhost(s) for the nick(s) specified
  1719.     will be returned.  The string <UNKNOWN>@<UNKNOWN> will be inserted
  1720.     for any nicknames whose userhost is not known.  The nickname(s)
  1721.     speified *must* be people who are on channels you are also on for
  1722.     the current server!  (See the second caveat)
  1723.  
  1724.     * Caveat -- Because it can take time for the WHO query to complete
  1725.     after you join a channel, there is no definite way to know if
  1726.     $userhost() for a person on your channel will succeed or not.
  1727.     You should probably be prepared to launch a /USERHOST query in
  1728.     case of failure.  This deficiency may be altered or modified in
  1729.     the future to block if an otherwise valid request is made while
  1730.     a WHO query is still pending.
  1731.  
  1732.     * Caveat -- This function will never be modified to launch a server 
  1733.     query.  That means that this function will only ever recognize those 
  1734.     nicknames that are common to channels you are on.  If you want to find 
  1735.     the userhost for other users, you should use the /userhost command.
  1736.     It is expected that the /userhost command will soon be able to
  1737.     take advantage of the userhost caching (but it does not yet.)
  1738.  
  1739. *** News 03/18/97 -- Expanded syntax for /who
  1740.     For your convenience, the /who command now takes two new arguments:
  1741.  
  1742.     -line {...}    The code inside the braces will be executed for each
  1743.             line returned by the who query.  The arguments are
  1744.             exactly the same as for the /on who hook, except that
  1745.             this flag is *guaranteed* to override the default
  1746.             /on who, and will also *go away* when the current who 
  1747.             query is finished.
  1748.  
  1749.     -end {...}    The code inside the braces will be executed at the
  1750.             end of the who query, when the 315 numeric is parsed.
  1751.             The arguments are:
  1752.                 $0 - server queried
  1753.                 $1 - body of the query
  1754.             This is guaranteed to toverride the default /on 315,
  1755.             and will also go away once the current who query is
  1756.             completed.
  1757.  
  1758.     These command bodies will be executed asynchronously, which means
  1759.     that you must assume that the enclosing code scope will complete
  1760.     before the code is ever executed (e.g., the same rules as for the
  1761.     /userhost -cmd flag.) unless you use /wait.  You are encouraged
  1762.     to not use /wait if you can figure a way around it.  Code that is
  1763.     not concerned with being stricly backwards compatable with the
  1764.     stock client is ***strongly encouraged*** to use these new flags.
  1765.  
  1766.     Underlying this change is a new re-entrant WHO queue, which allows
  1767.     you to launch more than one WHO query simultaneously.  No longer do
  1768.     concurrent WHO requests have to wait for previous queries to complete,
  1769.     and no longer (with the above flags) does the caller need to put the
  1770.     WHO command in a /stack-/on-/wait wrapper.
  1771.  
  1772. *** News 03/17/97 -- /on 312, /on 319 changes
  1773.     All of the whois numerics: 311, 312, 313, 314, 317, 318, 319
  1774.     now pass $0 as the server name and $1 as the target of the 
  1775.     whois query.  All the rest of the arguments are passed as $2-.
  1776.     Previously, some of these numerics passed the target as $1,
  1777.     but not all of them.  I changed it this way for consistancy.
  1778.  
  1779. *** News 03/17/97 -- New: /ON STATUS_UPDATE and $status()
  1780.     /ON STATUS_UPDATE is hooked whenever any of the status lines
  1781.     for any of the visible windows changes **and you are in dumb mode**:
  1782.        $0  is the refnum for the window whose status line has changed
  1783.        $1  is the status line in that window that has changed
  1784.        $2- is the actual status line for that window.
  1785.  
  1786.     $status() can be used to fetch the current status line for any
  1787.     visible window.  Invisible windows do not have their status lines
  1788.     updated, so they may be inaccurate.  This problem may change in
  1789.     the future.  Pass two arguments:
  1790.        $0  is the refnum for a window
  1791.        $1  is the status line
  1792.  
  1793. *** News 03/02/97 -- Local variables can now span entire array tree
  1794.     The syntax:
  1795.         ``local x.y.''
  1796.     will define all variables in the subarray $x[y][...] to be
  1797.     implicitly considered local variables.  That is to say, the
  1798.     entire variable tree rooted at $x[y] is local to that scope.
  1799.     This was requested by a user for compatability with another
  1800.     client.  All local variables that are instantiated in this
  1801.     manner have the same scope as the explicit declaration above.
  1802.  
  1803. *** News 02/18/97 -- New built in variable, /SET CONNECT_TIMEOUT <seconds>
  1804.     Set this to the number of seconds you want your connect()ions to    
  1805.     block before they time out.  Note that this doesnt affect
  1806.     connect()ions that are already in progress, only those that are
  1807.     started after you set it.  The default is 30.
  1808.  
  1809. *** News 01/30/97 -- Expanded syntax for /LOCAL, /STUB
  1810.     You may now specify more than one name per command:  Each name
  1811.     will be treated independantly of all others.  The names must be
  1812.     seperated by a comma, and ***must not*** have any spaces between
  1813.     the commas and the names (that is, all of the names must form one
  1814.     logical word).  To declare both "foo" and "bar" as local vars,
  1815.             /local foo,bar
  1816.  
  1817.     You can do this to stub more than one alias/assign to the same
  1818.     file, as well:
  1819.             /stub foo,bar filename
  1820.  
  1821. *** News 01/29/97 -- New command /BLESS
  1822.     Currently this command ignores its arguments.  This may change
  1823.     in the future, so you should not get in the habit of supplying
  1824.     arguments to this function, for forwards compatability.
  1825.  
  1826.     The ''BLESS'' command is used to allow an asynchronous scope to
  1827.     access the local variables of the underlying synchronous context:
  1828.  
  1829.         alias foobar {
  1830.             local myvar $0
  1831.             userhost $1- -cmd {
  1832.                 bless
  1833.                 echo $myvar -- $0!$3@$4
  1834.             }
  1835.             wait
  1836.         }
  1837.  
  1838.     Note that the use of 'bless' must be paired with an appropriate
  1839.     call of ``wait'' in the synchronous context, or this wont work.
  1840.  
  1841. *** News 01/27/97 -- New flag for /EXEC, -direct
  1842.     Syntax:
  1843.         /EXEC -direct <commands>
  1844.  
  1845.     This simulates the effect that unsetting the SHELL variable
  1846.     causes, that is, the command is executed directly, without
  1847.     invoking a subshell.  This is appropriate for those who wish
  1848.     to execute a command passing untrusted data as an argument:
  1849.     With this flag, there would be no shell to interpret metacharacters,
  1850.     thus cutting down on that ability to have an accidental back door.
  1851.  
  1852. *** News 01/27/97 -- New command, /SETENV
  1853.     Syntax:
  1854.         /SETENV <var-name> <new-val>
  1855.  
  1856.     Sets the process environment variable <var-name> to the value of
  1857.     <new-val>.  This command is not neccesarily useful, nor is it 
  1858.     always appropriate, but it is provided for completeness.  There
  1859.     are several places in the code that can benefit from the ability
  1860.     to change environment variables after startup (eg, TZ).  It also
  1861.     allows you to set environment variables for /exec'd processes,
  1862.     and it is also possible to really foul things up if you mangle
  1863.     important environment variables such as DISPLAY and so on.
  1864.  
  1865. *** News 01/24/97 -- New, /ON ODD_SERVER_STUFF
  1866.     This is hooked whenever the server sends you something
  1867.     that the client doesnt recognize.  This is usually when
  1868.     you try to connect to a non ircd server, or you use some
  1869.     extension that isnt yet supported.  You are strongly 
  1870.     encouraged to use this interface to support new features
  1871.     rather than using /on raw_irc because this hook is only
  1872.     activated when something unexpected occurs (which is rare),
  1873.     rather than for every incoming line, as raw_irc does.
  1874.  
  1875.     $0  is the server that sent it to you, '*' if unknown
  1876.     $1- is the unrecognized command and its arguments.
  1877.  
  1878. *** News 01/22/97 -- /FE, /FOREACH use local variables now
  1879.     The "control variables" for the /FE and /FOREACH command
  1880.     now are local variables.  They will not disturb global variables,
  1881.     but they will destroy any local variables you have by the same
  1882.     name.  You dont have to explicitly declare the variables as local,
  1883.     it is done automatically for you.  Note that the normal warnings 
  1884.     for local variables still apply -- dont use any variable name that
  1885.     is the same as a global variable you might want to use later in
  1886.     the same alias/on. 
  1887.  
  1888. *** News 01/18/97 -- Support for local variables
  1889.     You may define a local variable with the following command:
  1890.  
  1891.         LOCAL <varname> [<value>]
  1892.  
  1893.     It mirrors the ASSIGN command.  Note that local variables act
  1894.     in exactly the same way as normal variables, except you cannot
  1895.     get rid of them.  You also do not (yet) have any way to get at
  1896.     a global variable that has the same name as a local variable, so
  1897.     choose wisely.  An example:
  1898.  
  1899.         alias foobar
  1900.         {
  1901.             local b            (declare LOCAL var $b as []) 
  1902.             assign a 4        (assigns 4 to GLOBAL $a)
  1903.             local a 5        (assigns 5 to LOCAL $a)
  1904.             eval echo $a        (outputs '5' -- local)
  1905.             @ a = []        (clears LOCAL variable)
  1906.             eval echo $a        (outputs '' -- local)
  1907.         }
  1908.  
  1909.     Restrictions:
  1910.     * You cannot have local aliases -- only local variables
  1911.     * You cannot save local variables.
  1912.     * You cannot (yet) access a global variable with the same name
  1913.       as a local variable.
  1914.  
  1915.     This support is EXPERIMENTAL and still has some development to go 
  1916.     before it is mature.  
  1917.  
  1918.  
  1919. [This file truncated for EPIC4pre1... the rest of it is available via
  1920.  ftp at ftp.acronet.net]
  1921.  
  1922. [[ Additional note ]]
  1923. People are apparantly looking in here to see where some of the features 
  1924. (like translation tables) went to.  Please refer to "doc/missing" before
  1925. reporting a removed feature as a bug.  Thanks.
  1926.