EPIC3.003 [[MORE BY DEMAND]] *** News 12/30/96 -- Support for all 26 possible user modes All user modes are now supported. This should be the last of it until someone comes up with the bright idea of making uppercase modes mean different things (and ill strangle the bastard who does...) I based it on the idea from sheik, but i took a quite different approach... *** News 12/27/96 -- New built in command /repeat Up until now, /repeat has been an alias. This has been a pain in the butt, because all of them either cant be used recursively, or theyre terribly expensive to use (or both). So now you have a zero-overhead /repeat command that can be used without any headaches. There are two forms. The old one you all know and love, and a new form that allows you to specify an expression in parens: /repeat text command(s) (traditional form) /repeat (exp) command(s) (new form) eg, the following two commands are equivalent: /repeat $var {commands} /repeat (var) {commands) *** News 12/12/96 -- New command, /input_char /input_char is identical to /input, except that it returns after only one character has been pressed, instead of waiting for the return key to be pressed. See the 'less' script for an example. /input_char has problems with /wait and /pause just like /input. *** News 12/12/96 -- New command, /pause If you specify an argument, the client will wait X seconds before continuing. Its kind of a mix between /wait and /sleep, except that this is nonblocking (unlike sleep) and doesnt send anything to the server (unlike wait). It also doesnt assure that you wont have any race conditions (unlikes wait) and it will parse all incoming traffic normally (unlike sleep). If no argument is specfied, the client will wait for the user to press a key. This kind of sort of works, but not really so much as i would recommend you use it unless you do so as an experiment as to whether it really works in the real world. Maybe if you find bugs youll tell me about it? >;-) /pause does recursive calls to io() (much like /wait does). That means that it has problems if you intermix calls to /input while you are /pause'd, and vice versa. Let the coder beware. *** News 12/12/96 -- New /window option, "BEEP_ALWAYS" This option allows you to control whether a beep in a hidden window will still beep. (Up until now, it has not.) If this is ON, then a beep in a hidden window will beep anyhow. If this is OFF, then a beep in a hidden window will be silent. *** News 12/12/96 -- /ON DCC_CONNECT/DCC_REQUEST changed Arguments to /ON DCC_REQUEST are now: $0 Nickname of other peer $1 The type of DCC $2 Filename or other information $3 The remote IP $4 The remote port $5 Filename (DCC SEND only) $6 File Size (DCC SEND only) Arguments to /ON DCC_CONNECT are now: $0 Nickname of the other peer $1 The type of DCC $2 The remote IP $3 The remote port $4 Filename (DCC SEND only) $5 File Size (DCC SEND only) *** News 12/10/96 -- Virtual Hostname support The IRCHOST environment variable, and the /hostname (/irchost) commands reflect this new support. Supposedly it works on feeding, so i guess its ok. (thanks to flarp) *** News 12/09/96 -- Double line status bar /window double and its attendant features have been added. You can thank Archon for doing all the work =) *** News 12/06/96 -- New status line variable You can now use %= in your status format to denote when you are a channel voice (+v). It only goes on when you are +v but not also +o. (Crowman) *** News 11/25/96 -- New Built in function $winvisible() Archon pestered me enough to put this in that i did so that he would leave me alone. ;-) It takes one argument, a reference to a window. The return value is: 1 if window exists and is visible 0 if window exists and is hidden -1 if the window does not exist (error) EPIC3.002 [[MINOR RELEASE]] *** News 10/29/96 -- New functionality to /timer You may now specify any arbitrary string (up to 10 characters) as the refnum for /timer. Example: /timer -refnum foobar 10 echo booya booya booya boo! *** News 10/28/96 -- New script ``fake-dcc'' I wrote a new script to demonstrate the two features below. It allows the client to (at random) substitute any word out of a list for the word ``DCC'' in a DCC handshake. The reciever, if they have the same list of words, will then be able to decode it using this script. *** News 10/28/96 -- New /on, /ON SEND_TO_SERVER Any time anything is sent to a server, this will be hooked. It takes three (or more) arguments: $0 - the server refnum $1 - the unix filedescriptor $2- - what is being sent Note that using this /on is very expensive -- expensive along the same lines as /on raw_irc. So please use with discernment. If you hook this SILENTLY, you will inhibit the sending of the message to the server. You can then use /QUOTE to send a new message. Please note that use of /QUOTE in /ON SEND_TO_SERVER can cause an infinitely loop that will crash your client if you are not careful. It is up to you to not do that. on ^send_to_server "% % % PRIVMSG % :$chr(1)DCC*" { quote PRIVMSG $4 :$chr(1)$getrandword($fake_dcc) $6- } *** News 10/28/96 -- New command, /PRETEND The pretend command allows you to ``pretend'' that a line has come from the CURRENT server. Use of this command where the current server is undefined results in undefined behavior. Use of this command is expensive and can lead to convoluted scripting. You (of course) can use it however you wanted, but i had in mind a way to fake out the client when there is no other way to get around some client limitation. See the ``fake-dcc'' script for an example of such a case. on ^raw_irc "% PRIVMSG % :$chr(1)\\[$fake_dcc\\]*" { pretend $0 $1 $2 :$chr(1)DCC $4- } EPIC3.001 [[FINAL PUBLIC RELEASE]] *** News 10/12/96 -- Solidified syntax for /SERVER Now you may use either of the forms: server:port:password:nick or server port password nick for the ``server'' argument(s) to /SERVER. Of course, all fields, except for the ``server'' field, are optional. If you want to omit a field, you will have to use the colon-seperated syntax. *** News 10/11/96 -- New built in function $uniq(... list of words ...) -- The easiest way to explain this is that each word in the given list is present at most once in the return value. *** News 10/04/96 -- New /set, /SET COMMENT_HACK Sheik wanted this to become a /set rather than a compile time option. Just remember to make sure this is the right setting, (It should be ON usually), or your scripts could get very confused. *** News 10/04/96 -- New /set, /SET DCC_STORE_PATH This setting determines what directory you want your incoming dcc's to be stored into. You must have it set correctly before you /dcc get, as there's no turning back after that. Twiddles are expanded, there is no default (puts it into the current directory). *** News 10/03/96 -- New command, /CALL The built in command "/CALL" outputs to the display the current script-level stack trace. These are the commands whose execution is in progress. If the client crashes (due to a segmentation or bus fault), the stack trace will be displayed, as an aid to debugging. There must be a #define WIND_STACK in config.h (the default). This will show up as an 'a' in $info(o) *** News 09/23/96 -- New built-in-functions Several new built in functions are available: $chmod([filename|fd] perm) -- given either a filename, or a file descriptor corresponding to a previously $open()ed file, change the permissions on that file to 'perm', which is an absolute octal value. Example: $chmod(foobar 0700). See the man page for 'chmod' for more information. $umask(perm) -- specfies the bits that are to be turned OFF when you next create a file. This affects every file that the client may create during the same session, including but not limited to any $open()s, or /save's. The old umask is returned, so you can restore it later if you want to. See the man page for 'umask' for more information. *** News 09/18/96 -- Information about /on send_notice /on send_notice is triggered any time you send a notice or a notice is sent on your behalf, unless such triggering would cause an infinite loop, in that case the /on is NOT triggered. If you want to send a notice without it ever being triggered, try /quote notice instead. *** News 09/18/96 -- /set AUTO_REJOIN semantics fixed It should now rejoin in the CORRECT window instead of the current window. This should make some people happy. =) *** News 09/18/96 -- New flag to /XECHO -- "-CURRENT" /XECHO -CURRENT ..... sends "....." to your current window. Im not really sure why i told people to use this when it didnt exist. *cough*. *** News 09/17/96 -- Change to /WINDOW ADD and /WINDOW DELETE. James pointed out that you cant /WINDOW ADD a nick that begins with a caret ('^'), and that a caret is a legal n-char. Furthermore, /WINDOW REMOVE has existed and is the "normal" way to remove nicknames from the list. Therefore, you may no longer remove a nick from the window's "nicklist" by prepending it with a caret ('^'). You must now use /WINDOW REMOVE to remove any nicknames. You may now /WINDOW ADD nicks that start with a caret without any error messages. *** News 09/16/96 -- New set, /SET DCC_SLIDING_WINDOW When you are sending a file to any peer, EPIC will send packets at the initiation and attempt to always keep packets outstanding. This is a simplistic implementation of the traditional sliding window algorithm. There is no irc-level error correction: We depend entirely on TCP to keep everything straight. This should not be a problem, except over lossy networks, so you should have this /SET to 1 unless you are willing to take a gamble! Since packet sizes are 2k, and most OSs have socket sendq's ranging from 4k to 32k, you may have to tweak this /SET for optimal efficiency on your system (trial and error). This should have *NO IMPACT* on the person to whom youre sending the file, regardless of what client theyre using. If you have any problems, it is probably a bug -- so please let me know. *** News 09/16/96 -- Silent change to /WINDOW arguments At the request of kanan, /WINDOW LEVEL, /WINDOW NOTIFY_LEVEL and /WINDOW LASTLOG_LEVEL now do not require an argument. If you do not specify an argument, the current level will be displayed. *** News 09/02/96 -- New feature covers up weakness in syntax There was a semantic ambiguity that allowed the following construction: /EVAL (...[$0]) to crash the client due to the $0 not being expanded because the (...) protects expansion. After conferring with several people, it appeared that no real reason exists to formally support aliases that begin with a left-paren. This allows the use of the left-paren to be semantically bound to something else, to prevent the above from crashing the client, and so the paren-set was made as a synonym for the @ construction: So that means the following two STATEMENTS are equivalent: @ x = 3 (x = 3) *** News 08/14/96 -- Two new config.h define's. #define MIRC_BROKEN_DCC_RESUME turns on mIRC compatable /DCC RESUME feature. It breaks the protocol, so it does NOT come #define'd by default -- you must turn it on yourself explicitly so that you take sole responsibility for it. This shows up as 'i' in $info(o) #define USE_DCC_CHECKSUM turns on DCC SEND checksumming. If not defined, you neither send nor honor file checksums that are sent from other epic clients. This shows up as 'v' in $info(o). *** News 08/08/96 -- Silent change to /on send_(msg|public) With the changes to the send_text subsystem, if you sent a msg to multiple targets, it will pass all of the nicks to /on send_msg and /on send_public. This is in contrast to previously, where it hooked them once per nick. It is still possible for both to be hooked with the same message, of course. *** News 08/07/96 -- CTCP PING now works to microsecond resolution More or less. The client now sends off second + usecond information, and then calculates the ping time based on that when it comes back. *** News 08/06/96 -- Revamped CTCP support Several changes have happened to the CTCP support: If any of these changes cause you a great deal of problems, let me know, and ill work something out with you. The choices made here were based upon personal and public discussions i had with people on the epic mailing list, so your mileage may vary: * If you have an /encrypt set up for a target, any CTCPs you send to that person will be encrypted now. This is very useful for encrypting DCC handshakes. This is in addition to your ability to send CTCPs over pre-existing DCC CHAT connections. * Since no known clients allow you to send more than one CTCP per privmsg, and this (multiple CTCPs per privmsg) is a well known mechanism for flooding, only the first CTCP that would normally be "returned" is actually returned. All the rest are ignored. CTCPs that dont "return" are not limited by this restriction. The one exception to *this* is DCC. Only one CTCP DCC will be accepted per privmsg. * Other internal changes have occured. See the source code for more information. Most of the support has been rewritten. Nothing else should have changed from the user point of view. *** News 08/03/96 -- Added socks support from ircii-2.9 ircII-2.9 has support for the 'socks' firewall library, and so i took that support and added it at the request of several people. *** News 08/02/96 -- Implemented workaround for incompatability I implemented support for the gratutitous incompatability brought to you by the efnet 2.9 server in the JOIN command. It should do the "right thing" now. *** News 07/31/96 -- Finished work on encrypted CTCPs. I had started support before for encrypted CTCPs. They should be fully supported now, and they will be used if possible. Note that this might be a problem if youre carrying on an /encrypt'd conversation with a non-EPIC peer and you send CTCPs. They will be encrypted, and the other peer will probably not know what to do with them. If anyone has a grave problem with this, let me know and ill work something out with you. *** News 07/28/96 -- Striping quotation marks If you want to $strip() out quotation marks, you have to quote the quotation mark, so it isnt taken as a word delimiter. People have been reporting $strip(" ....) not working correct as a bug, but this is _not_ a bug, because we need a way to be able to strip out spaces To strip out spaces: $strip(" " ....) To strip out quotation marks: $strip(\\" ....) *** News 07/27/96 -- /FEC now has same semantics as /FE The syntax as /FEC is now the same as the syntax for /FE. However, the semantics all remain the same. An example of what you can now do that you couldnt do before: fec ($variable) a b c {echo $a $b $c} *** News 05/14/96 -- $tdiff() no longer leaves trailing space If you do $tdiff(60), you no longer get that trailing space that was left behind: This was (IMO) a bug, because $tdiff(59) did not have any trailing spaces. *** News 05/14/96 -- Can now do /timer -delete all If you want to delete all your timers, you can do /timer -delete all and your timer list will be made very empty. *** News 05/10/96 -- Made 'make install' less painful Now when you do 'make install', it will attempt to only install those things that really need to be installed. Only those things that are newer then the installed components will actually be copied. This applies to all the binaries, scripts, and translation tables. *** News 05/09/96 -- Added $mkdir() at request of CrowMan He asked why we had $rmdir() but not $mkdir().. and i guess there wasnt any particular reason. So here it is. *** News 05/08/96 -- Significant profiling project completed This marks the end of the second major profiling project in EPIC's history. Some strategic modifications have been made in an attempt to reduce the rate at which ircII consumes CPU time. Note that this does not neccesarily make EPIC "faster", but rather just makes it less of a hog. Future performance enahancements may occur on an informal basis. *** News 05/08/96 -- New $info() command, "O" (crowman) The "O" command (short for "options") returns a string that is representative of the compiled-in options for the binary. *** News 05/04/96 -- New command, /HOSTNAME (demon) At the request of DemoN, ive added the /HOSTNAME command that allows those with dynamic/multiple IP addresses to change the address that DCC should use without having to restart the client. *** News 04/28/96 -- Added encryption over dcc send/get/chat Its very simple. At the end of the command line, just append a '-encrypt PASSWD' where PASSWD is what you want the dcc encrypted with. It uses ircII's standard encryption, so it isnt totaly secure, but its "secure enough" for those who may be snooping. Dont even *THINK* of giving me a hard time for implementing this. -------------------------------------------------------- ----- This doesnt work at the time of this release ----- -------------------------------------------------------- *** News 04/25/96 -- Added /server -add Now you can add a server entry w/o having to connect to it. Just do /server -add hostname portname password EPIC3 [[ Hurray! We're done! (yea.... right.) ]] *** News 04/21/96 -- New Built-in function $glob() Before i begin, you can turn this off by #undef'fing INCLUDE_GLOB_FUNCTION in config.h. If your system cant compile the supplied glob.c, you should #undef NEED_GLOB in config.h. You'll have to try your luck with your system's glob(). If your system doesnt have a working glob(), and you cant compile glob.c, then you must #undef INCLUDE_GLOB_FUNCTION. The $glob() function allows you to specify a "shell-like" wildcard argument list, for which it will return all the files that match the patterns. Its "supposed" to behave just like the shell does, so you should already know how it works. Yes, you can specify more then one argument. Directories are appended with a forward-slash ('/'), making it easier to seperate them from the regular files. *** News 04/20/96 -- Workaround for lame ircd lossage on ``K-line comments'' (Rant on) I hate these things. Whoever allowed K-line comments to contain an unlimited under of words should be drawn and quartered. (Rant off) *** News 04/19/96 -- Added $numsort() Its like $sort(), but it makes an attempt to properly order numbers present in the text. The strings are alphabetically sorted except when numbers are placed in identicaly locations. So 'abc5' is located before 'abc12'. However, 'abcX', where X is any non-digit, is guaranteed to be treated as if "X" were a 0, when comparing with 'abcY', where Y is a digit. Examples: $sort(12 1 5) returns "1 5 12" $sort(S5 S1 S12) returns "S1 S5 S12" $sort(B2 A3 C1) returns "A3 B2 C3" $sort(abcd abc12 abc5) returns "abcd abc5 abc12" *** News 04/16/96 -- No, the help bot support wasnt removed... I just #ifdef'd it out. Its #define USE_HELP_BOTS. Youll have to add it to the config.h to get the support. *** News 04/12/96 -- AUTO_UNMARK_AWAY will call /away alias if possible Someone asked that the code that does AUTO_UNMARK_AWAY call the user's 'away' alias if they had one, so that scripts like superpak and phoenix could correctly end their msg logging. I should have told the person to do an /on 306 instead. ;-) *** News 04/11/96 -- New set, /SET DCC_LONG_PATHNAMES (ON|OFF) If its ON, youll see the whole pathname of the files youre sending. if its OFF, youll only see the last part. *** News 04/11/96 -- More info in the status bar for DCC transfers As a comprimise to those who want a ncftp-ish "progress-o-meter" with reverse text et all, i decided to display the total number of packets in the file transfer and how many have been transfered so far, so that the percentage you see is more meaningful. Will this lead some day to ETC? Perhaps. *** News 04/10/96 -- HACKED_DCC_WARNING no longer default So many people have had problems with it, that i am #undef'ing it by default -- you are of course free to #define it if you like having it. *** News 04/08/96 -- Dropped support for help bots. The help bots dont exist any more, so im going to take out the code that supports them. Ill have to make sure that the help files are easily available with the release. *** News 04/08/96 -- Added #define CONNECT_TIMEOUT to config.h It was silly that it was hard coded and not user-specifiable. I changed it to 30 seconds (it was 15 before) since 15 seconds hasnt seemed to cut it for me. *** News 04/06/96 -- Same thing for /WHILE and /UNTIL Removed the silly restriction (see below) for /WHILE. The following are supported: /while (expr) commands /while (expr) {commands} Applies also to /UNTIL. *** News 04/06/96 -- removed silly restriction on /IF The silly restriction that required you to enclose the THEN part of an /IF comamnd even if you didnt have an ELSE part has been removed. This is not to say you cannot, but rather to say that you are not required to. The /IF command can now be of the form(s): /IF (expr) commands /IF (expr) {commands} /IF (expr) {commands} {commands} Just so long as it appears as all one logical line in the script. You should use {}s for asthetic reasons if you are using more then one command in the THEN body. You MUST use {}s if you have an ELSE part. All this applies to /UNLESS as well. *** News 04/06/96 -- Added /UNLESS and /UNTIL /UNLESS is the opposite of /IF. unless (x == 0) {y = 7} /UNTIL is the opposite of /WHILE. until (x == 0) {x--;y += func()} *** News 04/01/96 -- New built in function, $notify() If specified with no arguments, returns the nicknames you have on your notify list. It takes the following arguments: ON - specifies that only those who are PRESENT should be returned OFF - specifies that only those who are ABSENT should be returned SERV X - specifies that server number X should be used. This flag can be used without the "ON" or "OFF" arguments, but there isnt much point to that. If the number argument is missing, the whole function returns nothing. In case of error (like invalid server number), the function returns nothing. *** News 03/27/96 -- $rmdir(), $unlink(), and $rename() They now expand twiddles, per the suggestion of Crowman. *** News 03/20/96 -- Added 'sound' script The 'sound' script is an attempt on my part to support mirc's CTCP SOUND command. See the script for usage info. *** News 03/20/96 -- Fix two bugs in /exec The first one was a lame typo lamage that was the reason posix systems (freebsd, linux) were having lossage trying to kill off exec'd processes on quit. That should all be kosher now The second one is that the signal handlers are reset right after the fork() in exec'd processes so that if the program being run coredumps, it wont output that annoying "IRC-II has trapped..." message back up the pipe to ircII, but will rather die the default death for memory faults on the system (a coredump). *** News 03/20/96 -- New built in function -- $sort() Yes, I finally got off my duff and wrote this. it requires qsort(3), which is required by ANSI, so i hope everyone has that without my having to have 'configure' check for it... *** News 03/20/96 -- Reworked io() io() no longer recreates the fd_set's every time its called, it doesnt call functions it doesnt need to call, and several other optimizations intended to reduce unnecesary CPU usage. *** News 03/19/96 -- Fixed alias_special_char() to not call parse_inline() Unscientific tests show that it improves performance of simple variable lookups by almost 20%. Performance of expression mode is not effected by this change, but the performance of [$var] instead of 'var' goes from 50% slower to 30% slower. *** News 03/19/96 -- $common() and $diff() fixed The following things were "broken" with $common() and $diff() -- If a word in the left part was found in part of a word in the right part, it was wrongly returned: $common(one two / phone ugh) returned "one" -- If a word appeared multiple times in the left part, and it was present at least once in the right part, it was returned multiple times: $common(one two one / one three) returned "one one" Both of these weaknesses are now fixed. *** News 03/18/96 -- Fixed /on bug Up until now, doing something like this didnt work like expected: /on foo "blah blah" { ... } or /on foo "blah blah" .... because the extra spaces fouled up the /ON command. Now any spaces between the pattern and the body of the ON are ignored. This also means that anyone who was doing this: /on foo "blah blah" text to send to channel should change it to look like this: /on foo "blah blah" / text to send to channel This seems to make a lot more sense to me... *** News 03/18/96 -- Finished the "new and improved" ircserv. This new ircserv has all the functionality of the old one except that it actually works now, and its much simpler to both the client and ircserv itself. The catch is that the client wont work with the old ircserv any more, and the new ircserv wont work with old clients. You must install the new ircserv with this version of the client if you expect to use ircserv. *** News 03/08/96 -- Support for //^ "feature" The //^ "feature" that is used by many large and widely used scripts is now supported again by popular demand. However, you should NOT use this "feature" in new scripts, *please* use the syntactically correct ^// construct. Thanks. *** News 03/07/96 -- Added new command /SWITCH The syntax is: switch (control text) { (switch 1) /* "switch set" is an expr */ { /* and some commands to */ body 1 /* execute if it matches the */ } /* control text */ (switch 2) /* A switch set may have */ (switch 3) /* then one expression, and */ { /* if any of them match, */ body 2 /* then the commands are */ } /* executed. */ } The "control text" is the text that youre trying to match. Each "switch set" is comprised of one or more "switch texts" and a "switch body". If any of the "switch texts" are found to match (wildcards are allowed) the control text, then the commands are executed. Only the first such "switch set" found to match the control text is executed, the rest are ignored. So it is important to put your most general switches at the end of the structure. At the face of it, the general idea is that it is a way to allow you to do a multi-way selection on a string when there are more then two possible values. On a deeper level, there is also the flexibility to parse arguments using regular expressions and then knowing what to do depending on which pattern was matched. See the "country" script for an example of what im talking about. *** News 03/06/96 -- Workaround for longstanding /foreach bug It has been a long standing problem that you couldnt use [] notation in the /foreach command So now instead of being required to do: /foreach foo.${ii}.${jj} kk { ... } You have the more asthetically appealing option of: /foreach foo[$ii][$jj] kk { ... } Sorry, you still cant (and never will be able to) do /foreach foo.$ii.$jj kk { ... } *** News 03/06/96 -- Added new built in function $usermode() Hard to believe there wasnt one before. You give it a server number, and it gives you your umode on that server. If no argument is specified, the "current" server is used. Specify an argument at your own peril, as no sanity checking is done. *** News 03/06/96 -- Added new on, /on SILENCE Whenever you get a SILENCE message from the server, /ON SILENCE will be hooked. It provides the following arguments: $0 - a plus ('+') or a minus ('-') depending on whether this message is for a silence added or removed $1 - the pattern silenced or unsilenced. *** News 03/06/96 -- Modified /alias's behavior on error. Well, it seemed pretty lame indeed that having trailing junk after the closing } in an alias would cause it to crap on the entire alias. So now it just emits a warning and adds the alias anyhow, which is more sensible. EPIC3pre8 [[ Bug fixes, performance tuning ]] *** News 03/05/96 -- Added $winsize() If given an argument, returns the size (height) of the specified window. If not given an argument, returns the size of the current window. *** News 03/04/96 -- /fe now honors "extended" words correctly The words that are surrounded with quotation marks are now parsed (correctly) as one word... *** News 02/28/96 -- /set highlight_char now accepts any string If the argument to /set highlight_char is not BOLD, UNDERLINE, or REVERSE, the argument is taken as the string to be used as your highlight string. *** News 02/27/96 -- notify now queries each server Yes, thats right -- /notify now works on each server you have open independantly of each other. Try it out. =) Due to logistics problems, each server has an independant list, but each server must have exactly the same set of nicknames (you cannot have a different list for each server, sorry.) *** News 02/26/96 -- Added the $strftime() function The $strftime() function from ircII2.8.2 has been integrated. The biggest change i made to it is that the first argument, which is an integer representing the time, is optional. If no time is specified, then the "current" time is used. *** News 02/25/96 -- Fixed horrendous ++/-- bugs. The ++/-- operators, that had a few non-trivial bugs before, have been revamped to work in all situtations. The only catch is that they do not actually operate on the values until such time as they are parsed. That is to say that a prefix operator does not reflect the new value until the operand. A postfix operator is definitely reflected in tokens after the operand. For a contrived example, if $foobar is 3, (foobar++ + foobar) is (3 + 4 == 7), and *not* 6. Also, (foobar + ++foobar) is (3 + 4 == 7), and *not* 8. Its not so hard to understand how it works, just that its hard to accept that it does work that way. ;-) *** News 02/25/96 -- revamped much of next_unit (parse_inline()) I rewrote most of next_unit() by making a few general macros and then writing the rest of everything in terms of the macros. Makes the function a lot easier to read, and allowed me to fix the ++/-- bugs as described above. This shouldnt affect anything as i didnt actually change the code used, only how it is arranged. *** News 02/22/96 -- New built-in function $pass() This function is the opposite of $strip(). You specify a list of characters to NOT strip out of the text, and it returns the text after all the characters that are not in the list are removed. *** News 02/20/96 -- New built-in function $repeat() Very simple: $repeat(count text) Returns "text" repeated "count" times. You should not assume any leading spaces are either retained or stripped, but you may assume spaces after words (including the last word) are retained. It doesnt put a space between each repitition -- if you need a space between each repetition, make sure to append a trailing space. *** News 02/20/96 -- ansi compiling Please compile EPIC with ansi mode turned on if at all possible! EPIC3pre7 [[ IS THIS THE LAST BETA RELEASE? WE CAN ONLY HOPE! ]] *** News 01/16/96 -- Ok. ok. the -S and -s overloaded cla were lame. The -s and -S command line arguments, which were overloaded to allow you to specify a default server have now lost that semantic. -s and -S now have only their classical meanings, whether or not to use ircserv *** News 01/15/96 -- The semantics for $splice() Semantics for the heretoforth "undocumented" function $splice(): $splice(variable start length text) Where "variable" is the name of a variable. "variable" is modified such that words "start" to "start+length" are replaced with the specified text. The words removed are returned. Using an absurd value for "start" or "length" just appends the text to the closest end. Assuming in all cases tha the value of $foobar is "one two three" $splice(foobar 0 1 booya booya) returns "one" $foobar assigned to "booya booya two three" $splice(foobar 5 4 ooga booya) returns empty string $foobar assigned to "one two three ooga booya" $splice(foobar 1 2 one) returns "two three" $foobar assigned to "one one" If $foobar is empty string: $splice(foobar 3 4 one) returns empty string $foobar assigned to "one" FYI, $splice() is an expensive function, but not as expensive as the script version was. *** News 01/15/96 -- Added $geom() Returns the value of the global variables CO and LI that correspond to the number of columns and the number of lines, respectively, in the main screen for ircII. If you have more then one screen open and they are of different sizes, then the actual value(s) returned by this function is at best undefined. If all the screens are the same size, however, then that size should always be returned by this function. *** News 01/13/96 -- Added $chanmode() Semantics for $chanmode(): $chanmode(#channel) If #channel is not specified or is an "asterisk", the current channel is assumed. This function returns the "channel mode" for the specified channel. You must be on the channel to use this function. (See the $key() function for related semantics.) *** News 01/13/96 -- revamped "timer" mechanism At the request of several people (esp. Shiek), I have rewritten the interface to the /timer function and written timer.c which contains a generic time-delayed callback mechanism. You may use it in your own C code. See the code for more information. *** News 01/13/96 -- Silent chagne to /timer Support for timer refnum zero ("0") is hereby withdrawn due to the impossibility to portably differentiate between an explicitly specified zero argument and an error returned from atoi(). More specifically, if you attempt to use a non-numeric value for the refnum option to /timer, it would implicitly be assigned the value of 0, which prohibited the emition of an error message since up until now specifying a 0 refnum was valid. Now any attempt to use refnum zero is flagged as an error. It is possible to support the old (broken) semantics. See the source code for more information. *** News 01/07/96 -- Attempts to make $ expandoes boundless Up until this release, all $ expandoes have been truncated at a 2048 character length. Since this has made a few people rather irritated due to unreliable behavior, the behavior has been changed so that $ expandoes are never truncated at any length. Testing has shown that this new method is somewhat slower for extremely large variables (10,000 characters and up), but this is not totaly unexpected since mallocing off large chunks of memory and strcpy()ing them around is more expensive then just whipping up a stack array and strcpy()ing a shorter string into it. For the sake of sanity, i want to point out that unless your variables are long enough that they were being truncated, the processing time for all variables is essentially zero. Also note that this entire discussion applies only to the use of $ expandos and does not apply at all to "expression" mode where variables have never been truncated. *** News 01/02/96 -- /dcc get nick works multiple times. /dcc get nick will not issue an error about connection already being in progress unless all connections currently being offered from "nick" are actually in progress. (Previously, you could only do /dcc get nick one time, no matter how many files "nick" had offered you.) *** News 01/01/96 -- New built-in function $info() Semantics for $info(): Description: A function used to supply non-specific information about the actual executable image itself. Arguments: "COMPILE" returns information about who compiled the binary in the form: "Compiled by @ on at