---- Changes 0.11.11 -> 0.12 (Stan) Oops, some files were left out of the 0.11.11.tgz, so fixed that.. IMPORTANT: (probably) Fixed the local/global install options in Makefile. BE AWARE that for local 'install' in the build-directory, you do: make CFG_DIR=$PWD whereas for global install you instead do: make; make install (See README for more details). Minor simplification of the slload.c using SLfind_file_in_path(). Cleanup of the command-buffer code in slirc.c, with a view to later defining a general-purpose text-entry widget. Starting to change vfile-module to be more like the new posix-io, in the sense of taking advantage of BString_Type and pack/unpack. Updates to sldoc/VFile.txt. fileno() changed to vf_fileno() to clearly distinguish it from slang's builtin fileno(). Added a new function vf_seek(), and mentioned vf_reset() which should probably be called vf_closeall() instead. Eliminated the '//' C++ style comments in favor of standard C style comments. ---- Changes 0.11.10 -> 0.11.11 (Stan) Changes to use the (relatively) new MAKE_ICONSTANT for integer constants. Changed the vfile.c stuff to take advantage of the new modules/import features of libslang... so now there is a vfile-module.so which is dynamically loaded by the 'import("vfile")' in init.sl. Similarly, utils.c becomes utils-module.c, which is loaded by 'import("utils")'. By the way... this complicates the installation/execution of slirc IN THE CASE THAT libslang.so.1.3.8 is NOT your global libslang. In that case, you need libslang.so.1.3.8 in ./lib/, and when you run slirc you need to like this: LD_PRELOAD=lib/libslang.so.1.3.8 ./slirc Some housecleaning in the tests subdirectory. PS: Thanks to J.E.D. for making the dynamic modules support so easy to use... it required only a few lines of changes to vfile.c to get vfile-module.c, and the only change to the .sl scripts was to add 'import("vfile");' near the top of init.sl. ---- Changes 0.11.9 -> 0.11.10 (Stan) Various changes to scripts/*.sl to utilize foreach() instead of for() over array indexes. Found a bug in windoze.c: DisplayWindow() could segfault if window had no lines. ---- Changes 0.11.8 -> 0.11.9 (Stan) Added /help command... /help with no params presents a menu of commands, /help xxx looks up some help onfo on the xxx command. Need to work on slirc.hlp file some now :) Watch that you fix slirc_hlp in scripts/config.sl to point to the actual slirc.hlp. ---- Changes 0.11.7 -> 0.11.8 (Stan) Changed dead-server-detect code... if >120 secs passes without any message (including PING) from server, then PING the server and wait up to another minute for a message before giving up. Consolidated irc_scroll_up() irc_scroll_down() irc_page_up() irc_page_down() all into irc_scroll(n), where n<0 is up n lines, n>0 is down n lines. This meant a few changes in windoze.c and editor.sl. ---- Changes 0.11.3 -> 0.11.7 (Stan) A long period of neglect, some changes to use namespace features of the slang-1.3.* versions. Various minor bugfixes. Now /server changes should work somewhat. Changes in c code to make popups redisplay properly again after scroll of main window. New timer field in status line, displays seconds since last message received from server... this should make it more evident when the server connection has died. Added intrinsic define_for_ifdef() for some condition feature selection... There is an ENEMIES list using this feature... it allows more total ignoring of uhosts sending messages with multiple ctrl chars (inspired by certain annoying flood-attacks on #linux recently). See lame_check() and so forth in standard.c if you're curious. uncomment the define_for_ifdef("ENEMIES") line in init.sl if you want this code active. In view of all the nice new features and data-types of slang-1.3.*, really there should be a major over-haul of slirc and vfile, but I doubt we have the time or interest to do this any time soon. ---- Changes 0.11.3 -> 0.11.4 (Stan) Added ctcp commands TIME and SOURCE. BTW, some ctcp flood protection should be added to slirc. Spit out the word-break logic of Preformat_Line() into a separate function called WordBreak(), trying to make Preformat_Line() more readable. Cleanup of windoze.c to improve speed and reduce code-size. Added a unique msgno field to LineData_Type to be used for maintaining (time) ordering of LineData_Type objects when shuffling them between windows... thought this might be more reliable than rxtime which has a granularity of 1 sec. Eliminated a memory leak in windoze.c (maybe). ---- Changes 0.11.2 -> 0.11.3 (Stan) Merged into windoze.c the line preformatting code from 0.10.13... this should allow indentation and linebreaks to work properly even after window resizing. (Still some thought needs to be given to the overall strategy for handling windows.) A fix(?) to the /topic command, which wasn't working right. Added tab-expansion for commands topic and kick. ---- Changes 0.11.1 -> 0.11.2 (Stan) Fixed(?) a bug in vfile.c which caused slirc to sigsegv after /dcc get under libc6 -- this should also fix the same problem in FreeBSD. Problem was that sometimes FD_ISSET() was called with a fd=-1, meaning an already-closed file, but libc6 didn't like this. A few changes in declarations (from _slang.h) for the slang-1.2.1, which exports more functions which had been 'internal'. Small change to windoz.c, so that ColAutoResp is also used to highlight IRC_SAY's which you originate, as well as those which are directed to you. Change to ctcp_check() in ctcp.sl, to consider /ctcp's directed to a channel (other than ACTION's) NOT to be considered /ctcp's. Don't want to respond to /ctcp #linux VERSION and such. Changed '//' comments to '/* */' style in vfile.c to be consistent with dwd's style. Cleaned up some protypes, etc, after compiling with -Wmissing-declarations and -Wstrict-protypes. Made vfile.h, utils.h and changed slirc.h, slirc.c appropriately. ---- Changes 0.11.0 -> 0.11.1 (dwd) More pissing about with windows. For the user: This may prove workable with... Feedback greatly appreciated. As it's still a deveropment release, you may prefer the latest 0.10.x release. For the developer: I've tidied up the multiple rulesets on windows thang. Also, I've started to play about with AutoConf - this should hopefully ease the problem of hunting where the fuck RH has hidden the slang.h file. Not that I'm using a slang 1.x.y RPM, actually, but that's just to let me use my nicely configured Jed... I've not changed anything in the scripts at all, and no major functionality has changed in the slightest. However, I'm aiming to have the thing fully auto-confed, with multiple server support, prettied up a touch, and properly released - RPMs etc - as soon as possible. That means I'd like maximum feedback right now... --- Changes 0.10.10 -> 0.11.0 (dwd) Big piss about with windows. For the user: This is really a sort of development release. Because I basically wrote large chunks of the windowing stuff from scratch, some functionality has been lost. You may prefer to use 0.10.10. Hopefully I'll sort out the line wrapping properly, etc, soon. For the developer: There's an extra source file, windoze.c, to handle this stuff. The basic idea is that, instead of Stan's display-only-targetted-messages, we now display anything in the window. This might be a single channel, or might be all messages, or something. It's filtered according to exact (Well, IRC case insensitive) matches on the To, From, and Server properties of a particular line. Oh, incidentally, there isn't multiple server support, but the raw basics are there. It could be put in, and quite possibly will be by 0.11.1 or so. I would have put it in earlier, but there was the problem of conflicting #linux chnnels, and things. As a result of all this, there's a few changes to flip.sl, mostly to keep it in line with the new thing. 1) /WIN command added. Brings up popup menu, listing windows available, and whether they've been read since anything new was added. The latter may not work. :-) Keys are: - Return - Switch to window. - 'd' - Delete window. - 'm' - Mini's window (Puts four lines of it in the top.) I usually let flip.sl's window creation stuff do it's thang, and switch by the good old F keys. The only thing I use the /win command for is occasionally checking the Default window, and putting Messages as my mini. There are silly limitations: 1) You can define multiple rules for windows, but you can't delete one of them later - just the whole window. 2) SLang interface needs much more added to it. I just put in enoug so I could do what I want to do. 3) You can only have one mini, one main. Bummer. 4) And more... I probably changed other things. Including the HACK interface, which is really just a command to allow you te type in raw SLang, and probe the values of variables... It's off by default, and there's no help. Read the SLang source. ---- Changes 0.10.9 -> 0.10.10 (Stan) Miscellaneous bug-fixes and cleanup. Fixed a bug which had caused status line displays to sometimes lag. Small change to progressmeter code so that DrawProgressMeter won't be called unless the percentage actually changes. Fixed /discon, /server commands to autojoin same channels when doing a server change. Added SrvN_40? handlers for a few more common error responses. ---- Changes 0.10.8 -> 0.10.9 (Stan) New commands /DISCON, /SERVER. A few changes in lists.sl, safer modifications of lists. Fixed /WHO command so that when given no parameter it tries channel or nick of current target. Fixed a problem with WINCH change of window size... apparantly SLtt_get_screen_size() IS needed in addition to SLmsg_init(). ---- Changes 0.10.7 -> 0.10.8 (Stan) Continuing re-work of screen/window related code in slirc.c. Renamed the routines which actually scribble directly on the screen, like DoTop(), to Draw*(), just for clarity. Changed most of these to take parameter(s) indicating location on the screen. Most of these 'pieces' of the screen, like Top, have a Blah_dirty flag, which indicates whether there has been a change which requires calling DrawBlah() from UpdateDisplay(); The 1st pass on pop-up menus... now /ignore without params lets you see the current list of ignore regex's, and pressing selects one to remove. ---- Changes 0.10.6 -> 0.10.7 (Stan) Changes to flip.sl, most importantly... /flip lists the current flip-targets, (debug stuff) /flip add blah creates a new flip-target 'blah' (usually chan|nick|=nick) /flip del N deletes the target associated with FN, (N = 1..12) /flip del blah deletes any target named 'blah' A new [temporary] command /showinfo, toggles whether the windows display 'IRC_TYPE_INFO' lines (which means most everything other than PRIVMSG and ACTION). Sometimes handy on busy channels, but will later probably be subsumed by a more general way of doing regexp filters on windows. Few more miscellaneous commands, /time, /userhost, /version. Added a reset_VFile() function to vfile.c, to try to close VFiles, especially sub-processes, any time that SLirc terminates somewhat under control. This usually solves the problem of left-over child processes. In goodies.sl, added functions irc_Info(), irc_Inff(), which are equiv of irc_info(*,irc_target) and irc_info(sprintf(*),irc_target) -- so they designate target window to be current window in effect. This also will ease the transition when we break the 1-1 correlation of windows to irc_target's. Various changes from irc_log() calls to irc_info() calls throughout the scripts, for messages we don't need on all windows. ---- Changes 0.10.5 -> 0.10.6 (Stan) New /flipdel command to remove flip-target windows. Eg: /flipdel nick to remove window associated with messages from/to nick /flipdel 3 to remove window associated with F3 flip-target [this is a temporary solution. --- see above, as /flipdel changes to /flip del] Multiple windows (ala BitchX console 'hidden' windows) are here. Warning: for the moment, /msg's to you can only be seen in their respective (flip) target window. Now there is a beep on message... also on ctcp_dcc_SEND and ctcp_dcc_CHAT. You can disable beep_on_msg in scripts/config.sl. Added irc_beep() intrinsic to slirc.c. Big revision of the ScrollWindow code in slirc.c, to begin multiple- window support. The association of messages to windows is, for the moment, clumsy, just based on irc_target variable, but will later be made very configurable. What actually goes to the visible window is determined by the IsVisible() function in slirc.c, which will be improved in time. Re the subject of multiple windows -- there will have to be some re-writing of the *.sl scripts so that more of the informational messages (dwd has joined #linux) have an identified originator and target (meaning which channels, etc, it concerns). The target parameter of irc_say(), etc must be extended to understand comma- separated lists, because that is what irc_target's really are. It may also be desirable to better track nick-changes. Changed irc_action() to have target parameter, like irc_say(). New intrinsic irc_info(text,to) has target parameter, to handle many command/responses which can be associated with a target window. Sorry abt the awful blue color, you can change it in colours.sl, it's irc_info_text. Some changes toward shifting gethostbyname() and gethostbyaddr() into forked subprocess(es) which communicate with main proc via a UDPc socketpair... this should remove one potential blocking problem. Also, lets us maintain ip# info in the nick_chan list, which might be handy. See open_resolver(), host_looker() in vfile.c, and the tests/vresolver.sl sample script for more details. This is preliminary but functional: leaves unreaped children if the VFile is not properly closed. Tied the resolver-child in with nick_chan list stuff, so we automatically fetch gethostbyname() data on nicks which do nick_chan_add_uhost(). Not sure how good an idea it is... maybe generates to much unnecessary nameserver traffic. Still, it's a clean way to avoid (most) blocking gethostbyname()'s, and would let MAPS-rbl scans be easily tied in to SLirc. Accidentally deleted vMAPS.sl, but there is a messy vrMAPS.sl which does same function. New script RBL.sl providing SLirc command /rbl -- this scans the known-nicks list for hosts appearing on the MAPS-RBL list. Somewhat silly, but was just curious to see how many appear on IRC. Changed various SLMALLOC->SLmalloc and SLFREE->SLfree to be consistent. ---- Changes 0.10.4 -> 0.10.5 (Stan) Various changes to dcc.sl... Host validation of incoming connections now based on IP#'s, not hostnames. Commands to accect/reject chat offer changed to /chat,/nochat. Made chats 1st check the lists to avoid redundant connections with same nick. (Start wondering about effects of nick-changes on these lists.) Corrected a bug in chomp() which slipped in at some unknown time. Added a missing ntohl() in inet_addr(). Added implicit typecasts CHAR_TYPE <-> INT_TYPE in vfile.c, they act like `C' casts u_char <-> int. Needed for working with Char_Type arrays used by vf_read/vf_write functions. Implemented the string() function for VFile_Type objects. This should help for debugging. Added define_keysym() intrinsic to slirc.c, thinking to support ISO-LATIN-1 characters, but it seems the display is set for the box-drawing charset by default. Not clear (to me) whether that or LATIN-1 is standard for IRC... apparently both are occasionally used. Corrected some docs which erroneously stated that the prototype for set_action() was set_action(VFile,int,&function [,cookie]) should be: set_action(VFile,int,"function"[,cookie]) Ported tests/babel.sl to VFile interface -- called vbabel.sl ---- Changes 0.10.3 -> 0.10.4 (Stan) More docs in sldocs directory. More sample scripts in tests/ directory for illustrating VFile interface. Updated README.dropin to reflect (int) return-type of registered functions. Amalgamated get_local_ip,get_local_port to get_local_ipp(), which pushes both ip & port of local end of a socket. Amalgamated get_remote_ip,get_remote_port to get_remote_ipp(), which pushes both ip & port of remote end of a connected socket. Modified dcc.sl and slftp.sl appropriately. Made an intrinsic tcp_connect(ip,port) which, like udp_connect(), takes numeric ip's. The old tcp_open(hostname,port) remains... it is equivalent to tcp_connect(gethostbyname(hostname),port). Added names for sockets opened by udp_open/udp_connect/tcp_listen/tcp_accept. This may be useful for slang traceback debugging output. ---- Changes 0.10.0 -> 0.10.3 (Stan) Well, lots! Really a total rewrite of the sltcp.c file interface stuff for two reasons: (1) DWD & I were both aware of some inate problems in using stdio streams here. If a TCP packet arrives which cuts a line in two then you are stuck in the fread() loop until the packet which contains the "\n" arrives. It doesn't happen too often, but there you are. Also, since select() imposes only char-wise buffering of the stream, performance of fread() for /dcc get is rather poor -- giving only abt 8k/sec here even when both ends of the DCC are on the same host. (Compare BitchX which gives more like 200k/sec.) (2) A standard libslang.a or libslang.so no longer has the SL_File_Table variable declared global. Without it, it is hopeless to tie sltcp.c in cooperatively with slang's slfile.c. The alternative was to have people patch slang source and rebuild a version which had the SL_File_Table global (non-static), but that's rather a pain, and would discourage many from trying out SLirc. BTW, SLirc now doesn't use SLang's slfile interface at all. (3) Okay, okay, I lied. Also, I wanted to be able to deal with binary files and UDP sockets, where you have embedded null-characters, which are a problem for slang's fgets/fputs which is line-oriented, and uses strings-which-can't-have-embedded-nulls anyway. (4) now added udp_open(host_ip,port) which can open a udp socket. host_ip,port correspond to the local side of the socket, and host_ip=0 is INADDR_ANY, port=0 means assign port. The functions get_local_ip(), get_local_port(), apply. The sendto,recvfrom functions are obtained as write(tgt_ip,tgt_port,VFile sock,buf|array[,len]) and read(VFile sock, buf|array[,len]) -- they behave like the corresponding write()/read() functions, except that if the read is successful on an un-connected UDP socket, then the source ip#,port# are pushed on stack... eg: udpsock = udp_open(0,0); r = vf_read(udpsock,array); if (r>=0) (src_ip,src_port) = (); 'Connected' UDP sockets udp_connect() can also be used -- in this case only packets from the specified source ip:port are received, so the src_ip,src_port is not pushed by vf_read(). Also, since the destination for vf_write() is already known, the send() equivalent is just vf_write(sock,...). Probably the unconnected version is more useful for servers or port-scanners, and the 'connected' version more useful for normal client programs. Now, on to other things: Eliminated the check_input() slang-loop (in standard.sl) -- now everything's just fired off from a VF_do_actions() loop in slirc.c. Each 5 seconds, the slang-function check_timed() is called, to handle dcc expires, etc. /dcc chat is functional now, even with flip-targets and nick-completions. The /dcc chat nick initiates a dcc chat with nick. /dcc accept nick accepts a chat offered by nick. /msg =nick blah sends "blah" over dcc-chat connection to nick. /dcc close chat nick closes chat with nick. Well, maybe not all ctcp-chat related messages are perfect yet. Now have a functioning ftp-URL-grabber in SLirc -- syntax is /ftp get host:/path-to-file (old ftp type URL syntax) or /ftp get ftp://host/path-to-file (modern URL syntax) Also, /ftp get URL localfile if URL is a dir (ends in '/') then it is the output of LIST /dir/ that is fetched. /ftp put localfile URL if the URL is a dir (ends in '/') then file uses name of localfile. For both /ftp get and /ftp put, default local directory is ftp_dir. /ftp get/put don't close the control-connection immediately. There is an auto-timeout for ftp data and control connections, by default, 90 and 120 seconds, respectively. An "/ftp ???" looks to see if there is still an *open* control connection, and if so, reuses it. This saves the stupid repeating of the login sequence for every transfer. The command connection survives a failed CWD, RETR, STOR, or LIST, which is a frequent result of a typo in the /dir/file part of the URL. /ftp get doesn't currently set the mtime to match that of the server-file. Doing so will first require parsing the LIST command output, which varies. Since there was already an http-URL-grabber and a finger thingy in the tests/ directory, will probably tie them into slirc soon, also. Then '/ftp get' may become '/url get' :) Well, nothing to get excited about, of course, but how better to learn protocols than by implementing them? The goodies.sl is no longer autoloaded. Since its functions were used all over, it seemed pointless. For the moment, neither are dcc.sl or slftp.sl, to save time debugging. As discussed below, changed the way registry functions work, in the sense that each registered function should now return an integer +1,0,-1. +1: then it overrides the normal handler for the command or response. 0: then the normal handler will still be executed, but the command or response will be considered to have been handled even if there is no specific default handler. -1: if there is no specific handler, then the fallthrough, or error, handler will execute. perform_actions() was split into perform_Aactions() and perform_Nactions, for treating separately alphabetic and numeric server-responses. At the point from which they are called in parse_return, it is already known whether they are alpha or numeric, so it seems a waste of time to repeat the same tests in perform_actions(). Fixed up the set_action() and do_actions() stuff to pass an arbitrary 'cookie' parameter to the initiated IO-handler. This is useful when we have multiple similar connections (/dcc) each of which working on some sort of structure representing state. Previously each dcc and ftp handler had to search for it's state-structure in a list, comparing the sockets, bah! Refinement of the main VF_do_actions() loop in slirc.c to avoid unnecessary calls to UpdateDisplay(); Stack-checks around SLexecute() of functions from do_actions() and after check_timed(). Minor clean-up of handle_server() in standard.sl and parse_return() in slirc.c which breaks up line into Rpms[]. ---- Changes 0.9.8e -> 0.10.0 (Stan) Cleaning up scroll-window code in slirc.c, added new field 'bold' to keep 'bold' state of continued-lines. That, and fixing use of the 'htyp' field fixes a couple minor bugs in window display, and simplifies code. ---- Changes 0.9.8d -> 0.9.8e (Stan) Some general clean-up. Lobbying JD to add a couple of new intrinsics to slstruct. Just 2 little things which would greatly improve the speed of searches through linked-lists. Also, maybe to export the SL_File_Table thingy from slfile.c, since we desperately need it for sltcp.c to be able to cooperate with slfile. Now working with slang1.0.3, no changes which bothered SLirc. Finally put in command history. I moved the scroll-(up|down)-one-line bindings to the insert/delete keys, like in lynx, in order to free up the up/down arrow keys for command-history. TODO: say you type in 'xyz', and then use up/down arrow for history, maybe that should only select on history lines which match '^xyz' That way, you can easily scroll through just /commands, or just things you addressed to a certain nick. Added the response-handling (SrvN_nnn) functions for the /LIST command. Changed /WHOIS handling to include timeout-stuff like the new /LIST. Changed tab-ex so nick completions work in comma-delimited lists, like /WHOIS nicka,nickb Moved the irc_exec_buffer() thing from slirc.c down into standard.sl, amalgamating it with command_default(). Think that makes the code clearer, since it eliminates the: *.sl -> *.c -> *.sl *.sl <- *.c <- [IMHO]: Calls from S-Lang to C to S-Lang are confusing, and should be avoided unless there is a good reason. Consistent with above thought, changed the way that irc_disect_* carved up the server-line and then dropped back into S-Lang to do the work before returning to C then to S-Lang. Now just have an irc_parse_params(buf) which splits buf into Rpms[] array. So: handle_server() just fgets() a line, calls return_parse(buf), which does the dirty-work in S-Lang. Should be easier to read. What was command_default() merged into return_parse(). Now have ability of setting a search-path for evalfile,autoload. See new slload.c and irc_set_path() intrinsic. Uses SLang_Load_File_Hook. Updated the README installation instructions. Fixed up the Makefile to have a valid 'make install' to simplify installation somewhat. Also, it runs a check_slang script which tries to look for obvious oversights in version of slang or whether (in the case of static linking) both slang.h and libslang.a have been copied to the appropriate places. [misc remark] Re: perform_cmd_actions(), perform_actions(). Shouldn't these return a -1,0,1 code, where: 1 means: handled completely (overriding default) 0 means: handled it, but still want normal handler (command_,SrvN_,SrvA_). -1 means: as far as you're concerned, I didn't have a clue. The difference between 0 and -1 is that -1 will still do the 'I don't have a clue' treatment in the absence of any specific command_blah() or Srv*_blah() function. [misc remark] Re: scroll-window display. Added a 'dirty' field to LW structure, so the scroll-window doesn't have to be re-displayed after each check_input, unless something happened which actually requires it. It's silly to do all that work, say, after each dcc receive block or cursor-movement in the command-buffer. Later we should perhaps think about a more uniform API for logical 'pieces' of the screen, to avoid unnecessary updating of all pieces after each check_input(). Really we should have way to pop-up subwindows for things like /HELP, /LIST, /WHO*, /NAMES, even for dealing with /DCC SEND authorization and command/nick completion when there are multiple responses, and, of course, /IGNORE, /SET, /SERVER. The way lynx handles check-boxes and such is kinda cool. Hey, that makes me wonder whether there might be a way to make SLirc be a sort of plug-in for lynx :) [misc remark] Re: multiple windows, 'grepping' scroll-window. Now sorely wish I had made the LW stuff referenced off the bottom line in window, and not the top line, because it would have vastly simplified using regex filtering of which lines to display (which could also effectively do 'separate windows' for channels, etc. Wouldn't it be nice to instantly select to display just the lines from/to certain nicks? Like when you realise you're interested in what X and Y were saying on a busy channel. This really wants the 'current' pointer for window to be bottom (most recent) rather than top (which will be a different number of visible lines up, depending on the regex match pattern). [misc remark] Re: add_cmnd(). This function just registers a function for command-completion, but some day maybe it will also deal with /HELP, etc, for the command. Put a few more intrinsics in utils.c, and completed(?) the changeover to using slang's builtin upper/lower case letters table. Should speed up case-insensitive string compares a bit, as well as reducing clutter in the C code. Also, we can now happily use strlow(), strup(), in place of those silly irc_* versions. Separated the (ugly!) LRU stuff from slirc.c and moved it to lru.c. Hopefully this leaves slirc.c easier to read, and will facilitate the eventual elimination of the LRU C-code. Most of its functionality had already been moved into lists.sl long ago. About all it does now is make that colorful list of recently active nicks at the top of the screen. Probably trapped a bug or two in lists.sl. Continuing to plan for multiple (hidden) windows -- the ideas fall into place, but it's not quite time for coding. Maybe tomorrow. Cleaned up some of the stuff in ./tests/, and added a README file there, which will hopefully make the tests (demos) useful to someone (other than me) who wants to learn slang. The rude beginnings of a scheduler added to check_input() in standard.sl. Later, maybe we do this more nicely by merging it into the action_list code in sltcp.c -- IMHO, that IS the natural place for it. select(), like the 'Lizard King,' can do anything. ---- Changes 0.9.8c -> 0.9.8d (Stan) Ported to slang-1.0.2. Well... sort of, you see, you need to remove the 'static' from the declaration of SL_File_Table in slang/src/slfile.c before compiling slang itself. Don't forget to copy slang.h to ./include/ and libslang.a to ./lib/ before you start, if you want the objects linked statically to libslang without actually installing slang-1.0.x as your default lib. (I haven't yet, because of lynx.) So many changes that I lost track of them. Probably found (and fixed) a bug in the action-list logic in sltcp.c. Slang structures are nice, but hard to get at on the C-code side :( In any event, the *.sl code is surely easier to read. The whole list.c user-object thing for manipulating linked lists more or less went out the window, due to the change from 'user-objects' to 'classes' and the fact that more of the SLang internals are now inaccessible :( Some of the general-purpose stuff went to utils.c, and the linked-list stuff went to LList.sl. The latter change was good for readability of the code, but bad for performance speed in dealing with linked-lists. Worked through dcc.sl and fixed it up so that incoming /dcc SEND's are put in a dcc_pending list -- you have to accept them, like in BitchX, or they will eventually be timed-out and closed automatically after about 2 minutes. ---- Changes 0.9.8b -> 0.9.8c (Stan) Just as an aside, we don't need a tcp_close() call at all. :-) I've therefore left that one out of the merge... fclose does everything it should. Also, Stan wrote a brilliant little English -> French translator that uses Athe BabelFish site by Digital to translate... But that's not in this distrib, until I've put in the IRC translation, which I might end up doing. So what *have* I done? Well, while was doing the merge with Stan's 0.9.8b code, I realised that I'd never released the version I did with the dropin script support. Basically, see registry.sl, but the idea is that scripts can be literally "dropped in" to config.sl, and no weird hacking about with standard.sl to fit in the support needs to be done. This meansthat things like flip.sl, which previously had strange support in standard.sl, no longer has special support, and just registers itself. Kaboom. Zammo. Etc. There's now a bunch of stuff in TODO, which has finally been updated... Still no FAQ's, though. If you're using this, and miss some command or other, then *please* let us know, and even better, write it. Stan and I are rather busy with the core code, and since it's quite easy for someone who knows the IRC protocol to just use it directly, we really can't be arsed to code half the stuff. -------- Changes 0.9.8 -> 0.9.8b (Stan) Added a tcp_close() function to sltcp.c, because it's just untidy to leave open files all over the place :). UH, maybe that was a waste of time -- just noticed the fclose() intrinsic -- well, maybe no, since we also need to unassign the SLfile_table_ thingy. dwd: Help! Made a tcp_test program to assist in playing with the tcp intrinsics, and little test applications twget.sl, tfing.sl illustrating the SLtcp independently of SLirc. You can try `em out by: ./tcp_test test/tfing.sl ./tcp_test test/twget.sl A few changes to make "servers: list more like ircII.servers file, mostly in config.sl and a few in standard.sl. Pretty much self-explanatory from config.sl. Later we can put commands like /server [n] to change servers, like the BX and ircII commands. Added s_sortk() and s_putk() llist intrinsics, which are for sorting linked lists and inserting records in list which is ordered on kth field. Changed many 'udom' labels to 'uhost' in the *.sl files. This being more consistent with the usual notation 'nick!user@host'. ---- Changes 0.9.6a -> 0.9.8 (Dave) Added progress meters... These spring up on the top of the screen, when required. Make one with blah = irc_create_pm("title", max); - blah is an integer handle. Stan'll probably smarten these up, and turn them into SLang user objects, but that's probably beyond me. For now, destroy them with irc_destroy_pm(blah); and set them to a certain value with irc_set_pm(blah, val); I think I've figured out the RXVT bug. Not sure, though. Added support for SIGWINCH. I think. Actually it was really easy, once I'd found the relevant code to crib from John Davis's source. New and exciting bugs introduced in both of these. :-) ---- Changes 0.9.6 -> 0.9.7 (Stan) Added command-completions: a substring /m will expand to 1st registered command of which it is a prefix. Eg: /j expands to /join . A command "blah" is registered by add_cmnd("blah") in lists.sl We should later perhaps move all these add_cmnd() calls to a common place so that precedence of completions would be more evident ? Also, the commandlist list might be the most convenient hook for adding command help-files. Fixed a typo in llist.c which had caused s_nth() to not work. Fixed the crash-bug in /ignore (it was caused by sloppy code which attempted to use invalid ref p0 to s_1st(ignores) after deleting same.) Added another debug-command /igl to lists.sl -- should cut it out later. ---- Changes 0.9.5 -> 0.9.6 (Stan) A few fixes and improvements in lists processing. Moved more list-related things from standard.sl to lists.sl. Still need to track a bug in ignore-logic. ---- Changes up until 14/12/97, since I last did a changes thing... (Dave) Stan's done huge amounts on both interface and writing nifty stuff. Also cleaning up the whole return_parse thing to be miles neater. It obviously looks the part now. I've done yet more work on SLtcp - I think I've got it really quite nice, now. DCC looks as if it's finally done. I cn't find any obvious problems, and it's working fast enough that it doesn't seem to hit by CPU load. Um.... Oh. And I've sorted out the script/download paths, so they should all be lovely, now. Almost up to release level. :-) ---- Changes since the last reclusive BETA: (Dave) Primarily, I changed the TCP support to be SLang based, andmoved much of the bulk of the TCP handling inte SLang. Now the C in there is pretty limited. Changed the status bar, mainly to make it easier for debugging. Fiddled generally. CTCP support is somewhat present... The Version string should be understable by most, if not all, clients, now. Very little support for most of the server returns, still, though. Please DO NOT redistribute at this stage... Thanks. DWD