This is the HISTORY file for tkbiff. Date Version Description ------- ------- ------------------------------------------------------ 5/25/05 4.20.0 Collin McCurdy found that MS Exchange was complaining about a lack of crlf's after new mail. Tcl's -translation auto hueristic was guessing wrong, so I hardcoded -translation crlf. Kevin Rodgers noted that tkbiff should not complain about spaces in passwords. Strange. I wonder how that test was added in the first place. Pat Ellingsen noted that the body was displayed with mime-encoded (=?...) characters. Added call to field_decode. Pat also noted that subjects still appear encoded. I explained that is because of the default tiny font lacking full glyph info and that he should chose a different font. 6/22/04 3.19.2 Added raise to make sure password window is not initially obscured by tkbiff's own console window. Added -title and -titlepassword to avoid confusion when simultaneously running multiple tkbiffs with different passwords. For an experiment, changed exit to warning when IMAP response is blank when it is expecting a tag-response. Added -verbosefile to log verbose messages. Added bgot to save results of last bget (imap only) for better diagnostics. Added test for password window visibility before grab. 7/15/03 3.19.1 artsplay appears to always return 1, so ignore the diagnostic. 7/14/03 3.19.0 Added support for arts audio subsystem on Linux systems. Began obfuscating email addresses in this file. 6/13/03 3.18.0 At request of Gannon Dick for better spam filtering, changed tkbiff to save all headers. Added patches from Alberto Lusiani to complete support for preauthenticated connections. Added code to handle extra blank lines in imap header. Not sure where they're coming from but it's in violation of the spec. Tk 8.4 moved all private tk[A-Z]* commands into the the tk namespace. This broke scrolling. Probably I shouldn't be calling a private Tk function this way to do it but I don't have time to figure out the right solution. Encountered header broken in yet a new way. Rewrote rfc822 header code to avoid any further problems like that. Added code to do a better job with MacOSX which identifies itself as UNIX. Added $windowingsystem variable. Unclear how to change audio/browser support. Left audio and browser support alone (so both with respond using UNIX conventions on MacOSX). This may take several iterations to get right, sigh. Made configure look for newer versions of tcl/tk and also without decimals in version numbers for Cygwin as per Marc Vaillant 10/15/02 3.17.0 Added emacs-rmail/babyl support at the request of Ian Frank . Added sleep(file) to control all file-based sleeps. Mailbox was not displayed in help page when implicit. Added test for old-style tkbiff so user-code is not inited twice. See 3.14.0. 9/16/02 3.16.0 Kaupo Palo supplied code to mime decode from/subject. Generalized to other non-body fields and added error checking and user controls. Found several bugs in mime::field_decode (tcllib1.3). Rewrote field_decode and sent it back to tcllib maintainers. Solaris 8 reports xhost as prefix and hostname as FQ which broke [audio_host]. Fixed bug in mbx support. Wasn't pre-reading first line. 8/4/02 3.15.0 Added file support for UW-IMAP's mbx files. Yes, you should be able to get these using imap, but some people have a mix of mbox and mbx and are used to using mbox so it seemed easier just to add direct mbx support. David Bernholdt provided patch for apop when querying for secret. Made a first cut at bounce support. Until it's stronger, it will remain undocumented. 4/15/02 3.14.0 Missing exit after error in tkbiff_audio. Should only affect people debugging audio driver. Made user's init routine an official part of the API so that it can be called 2nd thing. User's usage procedure is now first. Marty Olevitch provided bug fix for configure to be allow missing prefix dir. 10/29/01 3.13.2 Added titleTo option to add To: to title bar. 8/13/01 3.13.1 Error in tkbiff_audio -init when running remotely. 4/27/01 3.13.0 Sandy Ressler noted error in audio_init for Mac and PC. 1/5/01 3.12.0 Will Shackleford provided fix for bug when parsing msg headers with no status. Changed to call tkbiff_audio by absolute rather than relative path. Relative exec required path traversal, which sometimes induced huge delays after automounts on PATH had expired. Improved finding of the default browser on a Mac. 4/12/00 3.11.1 Nick Sweeny noted configure broke if no --prefix supplied. Yet more probs in config.*. Updated config.* directly from GNU CVS repository this time! 4/10/00 3.11.0 Corbin J Miller noted complaints about solariskludge.au not being found. Bug in configure. Added additional tests to make handling of exec-prefix and prefix more robust. Roger Wang encountered overaggressive error checking. 4/5/00 3.10.2 Scott A. Holmstrom reports config fails with "Invalid configuration `i686-unknown-linux'". Try including a new version of config.guess and config.sub. 2/12/00 3.10.0 Hyperlink open failing due to scoping bug. 12/13/99 3.9.3 Added esound audio player. It could probably be merged into the linux player but the current documentation is currently too sketchy. Added -state/-init to tkbiff_audio in anticipation of a player that requires such state be maintained. 12/4/99 3.9.2 Lisa Evans noted that linux 'play' controls volume logarithmically - I had assumed it was linear like all the other audio players. Since the documentation does not provide enough info to compute a proper mapping, I've provided a simplistic one. Knowledgeable hackers are invited to refine it. While I was at it, added -where flag to tkbiff_audio to report where it is finding the sound. (It's hard to know otherwise.) 12/1/99 3.9.1 Matthew Callaway reported tkbiff -imap blew up. Bug in capability test. 11/30/99 3.9.0 Added support for preauthenticated IMAP connections. Added support for STARTTLS. Lisa Evans reported tkbiff -pop bombed when deleting msg. msg_id was in wrong namespace. 10/23/99 3.8.0 Jean-Claude Wippler found confusion in env(AUDIOPATH) vs audiopath. Thomas Andrews noted minor bug in mac_audio. 9/12/99 3.7.3 Added exit on deletion of "." 9/6/99 3.7.2 Missing decl made fake-msg-id handling blow up. 8/18/99 3.7.1 Nick Sweeney noted that config didn't understand host type i686-unknown-linux. Patched config.guess. 8/6/99 3.7.0 John Mama found bug when reading pop msg without message-id with uidl supported by server. Tomek Piatek noted that imap login didn't handle passwords with non-alphas. Removed isfile; too hard to keep up to date. Made imap handler compact sequences into ranges. Made pop handler not care about lack of space after status indicator. Added protocol(imap,maxfetch) to support UWimapd which limits cmds to 8K. Username of "anonymous" now automatically gets a default password since servers don't seem to care. 7/13/99 3.6.2 Added support for whitespace before : in mail headers. RFC is rather unclear on this. Rewrote security documentation and improved the way Makefile handled docs. 7/13/99 3.6.1 Minor tweaks. 7/12/99 3.6.0 Fixed minor bugs in cfg for Windows. Changed "sockcmd" to "connect" throughout. 7/6/99 3.5.4 Add documentation for using Matt Newman's tls extension. Fixed fonts for helpwin and msgwin. Per note from "Bill Schongar" in clt, made Windows 95/95 use "start" and NT only use $env(COMSPEC). Added support for 8.1's tcl_platform(user). 6/4/99 3.5.3 Simplified SSL stuff further by forcing crlf-output translation all the time. Editted INSTALL also to factor in more of Matt Newman's work on his extension to Open SSL. 6/4/99 3.5.2 For the first time, got tkbiff talking to an IMAP server using SSL. Rewrote INSTALL instructions for SSL - which were, of course, completely wrong! Changed solariskludge.au from 1 byte to 4 after Dave Sauder noted that audioplay on Ultra 2 sometimes hangs on shorter files! Confirmed this with truss. We were able to reliably reproduce this state by running workman. Probably it's conditioning some streams module for 4-bytes at a time which audioplay doesn't bother to reset. 6/2/99 3.5.1 Added optional prompt for host and protocol type - useful for running on public workstations such as PCs where people use it without logging in. Fixed bug that was a workaround for Mac-Tk window resize bug. Unfortunately, this bug affected all ports. Fine-tuned fake_message_ids a little. Added support for and control of handling messages with no message ids (via fake_message_ids). Added support to pop and imap. Unified this kind of option handling which meant slight mods to suppress_nfs_caching. At request of Raju K. V. , added autoiconify. 5/29/99 3.4.0 Fixed bug that let imap messages be displayed in random order. I was using imap uids which provide no information about order. In fact, imap doesn't even guarantee seqnums returned from fetch or search are ordered. So went to requesting seqnums and explicitly sorting them. Seems absurd to have to use seqnums just to get the order when using uids for every- thing else because now I have to build a map to get from one form to the other. And as far as I've seen, every imap server *does* return seqnums *and* uids in message order, but since the spec doesn't guarantee it, we have to do all this work just in case. Added more diagnostics to trace. Went back to catching in . rather than children since they would miss events if window merely shrank. Forgot to catch WM_DELETE_WINDOW in console and password windows. Massaged hyperlinks to work more like a real browser - only if cursor hasn't moved (more than a little) when button is released do they fire. And colors (now configuable) change to indicate visited. 5/26/99 3.3.0 David E. Bernholdt noted bug in configuring maildir. To clarify, changed configure to use -enable-mbox and -enable-maildir. When mh gets supported it can be -enable-mh. David also reported extra backslash in configure file that prevented network protocols from working. Modified password prompt to show user and offer to change that too. Made default message window a little shorter to accommodate smaller screens. Fixed bug in imap when resynchronizing msgs after change in uidvalidity. Added desktop to audio search path on windows. 5/25/99 3.2.0 Added -max flag to limit messages. Simplified hostretry implementation and documentation. 5/18/99 3.1.1 Converted documentation to html. Dumped man page and README. Made tkbiff.txt symlink to tkbiff.html for temporary compat. Left tkbiff_audio.man since that's UNIX specific - maybe should convert that too? 5/13/99 3.1.0 Rewrote main window resize code to gracefully handle wm's which send continual configure events during manual resize or which ignore requests for sized desired by internal widgets. This was done by defering reconfigs, minimizing calls to update_display, and hooking onto the binding in the internal sticky widgets rather than the toplevel. Also worked around bug when invoking a delayed [wm geom ... size] produces a window with the old size and in the old position. Never did figure out if this is due to Tk or Win/X window manager(s) bug. Interestingly, MacOS was the only one that worked fine. However, MacOS mishandles wm resize restrictions on gridded windows. Changed to main window from one listbox to two listboxes thereby allowing the use of proportional fonts. The listbox widths are also proportional to one another. Resizing the main window is now very slick as you can now watch the proportional dynamic expansion between the fields. Also added faint separator. Previously, it appeared the letters were smashing into one another. Worked on more appropriate fonts for various platforms. Help window can now have proportional font too. Added code to display what (host or file) tkbiff is checking before it writes anything else to the main window. Added support for Linux audio. Separated concept of X windows and UNIX so that tkbiff behaves reasonably on non-UNIX platforms that have X. Documented handling of messages with missing/duplicate message-ids. Internally, tkbiff ignores messages with such ids. That means it may have to repeatedly reread the headers of such messages each time only to throw them away. However, since this is expected to happen very rarely and it's only the headers anyway, it's not a big deal. (pop is actually a little tougher if uidl and top aren't supported because then the whole message has to be read, sigh.) It would be very painful to do better, because even with imap the potential change of uidvalidity means we have to reread the headers anyway to get message-ids. Rewrote IMAP code for the Nth time as my understanding of IMAP becomes clearer. Dialogue is now minimized dramatically both in terms of number of interactions and sizes. Everything reasonable (and a lot unreasonable) is error checked. IMAP parser is now very robust. Made IMAP protocol case insensitive as per RFC. Added capability check. Made all imap command tags unique and distinct. Added greeting checking for both imap and pop. This is a real concern as servers may be out of commission temporarily or servers may be non-compliant in some way. Added support to use pop's uidl command if server supports it. This will significantly improve performance of large pop mailboxes. Split message reading routine into separate ones for each protocol. This simplified things a lot since there are now 4 different readers and they're all significantly different. Only a couple things are common (like reading rfc822 headers) and these were split out into separate procs. Added tracing system so you can see what tkbiff is doing. Added verbose cmd and bindings to activate tracing. This should be particularly helpful - I wish all mail clients had a feature by which you could ask them what they were busy doing or waiting for! Made URLs in help window live. I believe I got the cursors right for the different platforms. The MacOS support could be better if some AppleScript guru could tell me how to detect the browser automatically. Help window got too long - so added scroll bars. Added kludge for odd behavior - only on Windows, final line has to have an explicit \n or else it won't show. Couldn't reproduce this with a trivial script though. Added page-up/down bindings. Added exit binding. Added Maildir support. Documented the specific file formats that tkbiff supports. Rewrote SSL support to be more generic in anticipation of TLS and other packages. Default bgerror was inappropriate so added a modified bgerror. See code for details. Repaired tkbiff::exit since bgerror now waits "properly". Improved readability of many diagnostics. Added a special handler for audio errors since they aren't fatal, shouldn't block, and shouldn't pile up either since they're almost aways due to a common error (incorrect dir, broken player, etc.) Added kludgesound.au to work around audio bug on Solaris where audio system starts playing audios incorrectly. The problem is that when called with -v, audioplay sometimes mistreats audio (depending on how the previous audio program left the audio subsystem) with the result that it sounds like static. Oddly, calling audioplay without -v fixes it. So we duly invoke audioplay with a one-byte unhearable sound first each time. Seems stupid but it works nicely and I don't see any alternative. Took quite a while to track down the .au format. For the record, the only doc I could find was: http://www.cooper.edu/~donahu/auformat/AuFileDetails.html I actually considered dumping the -v support entirely but eventually decided that I don't want to be dependent on the state that other apps leave the sound system in - which is cause of all this grief in the first place. Polished configure script and INSTALL instructions. Made configure generate a partially pre-configured version for mac and windows for distribution. Added "old" hook to allow users to request or ignore old messages - which are extra work for imap and Maildir. Added support to extract config template from Mac resource to simplify installation. Added "configure" window to tell user when a new config file has been created and what to do with it. Added support for detecting tkbiff v2 config file versus one that the user has simply broken. Added support for producing different diagnostics on different platforms. Revised man page similarly. Worked around bug - Windows and MacOS won't highlight selection unless window has the focus. (Bug or design?) Unfortunately, Tk won't give the focus to a disabled widget. Naturally, our message windows are just that - to prevent users from messing with the text. However, they should still be able to select text. So force the focus when they begin a selection. Removed default action of rereading the config file each time. This screwed me when tkbiff rewrote my config file at the same moment my editor was doing the same thing. Whoops. Moved to an explicit binding. Moved one-time fileevent call inside of bgets (where it is done everytime) to avoid possible infinite loops in various waits. This really shouldn't happen if protocols are followed but do it to protect ourselves from misbehaving servers. It's a serious concern because it can prevent diagnostics from being readable which means we might not otherwise be able to figure out the problem! Why? Because Tk can be reporting readability infinitely before it gets around to painting the screen with the diagnostic. Made socket creation be asynchronous so users can turn on tracing and figure out what's going on even if server connection is slow or hung. Defined bgerror_notrace in cases for explicitly caught errors where traces are garbage. 3/23/99 3.0.0a Rewrote man page and INSTALL. Rewrote homepage and FAQs. Fixed man page so that it could be read without nroff. Worked on easing configuration for hosts without configure. Added code to warn about obsolete config file. Added bindings so that messages can be popped down or removed by clicking on the message window itself rather than having to go back to the main window. Made these work on Mac/Win. More bindings for Mac/Win to exit and raise debugging console. Finished imap support. Added support for Mac and Win mouse buttons. Added support for Snack audio extension. Added support for Mac audios. Added support for Win audios. Added support for SSL. Added AboutBox for Mac. Added support for fileevent on sockets. (Should I bother with fileevent on files?) Rewrote arg handling. Rewrote usage handling. Rewrote configfile handling. Rewrote error handling for portability. Rewrote path handling for portability. Rewrote all diagnostics for portability. Cleaned up font usage for portability. Cleaned up expressions for compiler. Cleaned up code by switching to namespaces. Switched main window display from one listbox to two listboxes. Now it can use variable-width fonts since I no longer have to worry about things lining up. Made widths of both stretch proportionally. Fixed transient bug when scrolling main window by keyboard. Fixed bug that allowed long messages to be truncated on very tall windows using tiny fonts. Added restriction to prevent main window max size no less than 2 to avoid stretched out listboxes. 10/12/98 2.7.0 Added support for pop3. imap support started but not finished. - Added new window to collect password if necessary. (This required massaging of init/_init in order to allow user to redefine this window.) - Since pop marks messages as RO, modified initial visibility flags to force users to see RO (old) messages - exactly the opposite behavior desired for file-based handling where users do NOT want to see RO messages. POP is so stupid! Fixed inability to handle messages with no From: line. Fixed backwards test in nfs-bug support. Since tclsh now understands events, took this opportunity to simplify code that handled tcl vs tk differently. Rick Macdonald provided fixes for: Linux running fetchmail - It sometimes created empty Status: lines; and pine - it rewrites Status: rather than deleting entire message. 4/16/98 2.6.2 Martial MICHEL noted bug in fixline1. 4/10/98 2.6.1 Improved Makefile shell selection and #! line generation. Added sfplay and more suffixes to Irix audio driver. Installed some default audio files. Should make that initial use much more gratifying to most people. 4/3/98 2.6.0 Massaged audio drivers to allow default path to be selected at configure time and remote options at run time. Moved rsh generation into tkbiff_audio so that rplay driver could bypass rsh. Added remote_audio driver to be used as default. tkbiff_audio is now complicated enough that I added a man page for it. Modified to support ssh and remsh. Changed usage proc so that additional flags to be added by user. 4/1/98 2.5.1 Main and temporarily displayed windows can now be scrolled. Simplified handling of toggles. Revised compat system to remove .au bias from tkbiff itself. Added compat scripts for sunos and solaris. 3/9/98 2.5.0 Finished setting up compat system for providing audio on any type of system. Added hooks for irix, rplay, and hpux although I'll have to leave it to others to test that these actually work. 12/18/97 2.4.1 Salvatore Miccicke found that .tkbiff was not being created - due to missing "global tk_version". 11/13/97 2.4.0 Clem Taylor fixed bug in content-length handling that screwed up subsequent messages in same batch. tkbiff mishandled headers that where the values were entirely on continuation lines. 11/6/97 2.3.0 Frank Stajano noted that running tkbiff without Tk didn't work as advertised. Minor fixes to installation procedure. Message arrived with message id of < > which was promptly rewritten to "." which caused obvious problems. Message-id is clearly wrong, but adding a prefix avoids problem. 8/31/97 2.2.0 Fixed for Tcl/Tk 8.0. (Tcl compiler found syntax errors in never before executed code!) 7/10/97 2.1.0 Prasad V.S. Alavilli noted that Compuserve headers have different capitalization than tkbiff expects. RFC says headers are case-independent. Oops. 5/12/97 2.0.0 First official release outside NIST. ?.?.? Sigh - didn't keep a history here. 2/1/95 0.0.0 Ran out of patience with xbiff++. Retrieved and looked at other biff programs. Even the ones written with Tcl/Tk didn't seem to take advantage of it. So I started writing my own.