This is the HISTORY file for tkbiff.

Date	Version	Description
-------	-------	------------------------------------------------------
5/25/05 4.20.0	Collin McCurdy <cmccurdy@cs.wisc.edu> 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 <kevin.rodgers@ihs.xcom> noted that tkbiff
		should not complain about spaces in passwords.  Strange.  I
		wonder how that test was added in the first place.
		
		Pat Ellingsen <paale@ii.uib.xno> 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 <gannon.dick@verizon.xnet> for better
		spam filtering, changed tkbiff to save all headers.

		Added patches from Alberto Lusiani <slipp@sdf.lonestar.xorg> 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 <marc@jhu.xedu>

10/15/02 3.17.0	Added emacs-rmail/babyl support at the request of Ian Frank
		<ianf@fun.ac.xjp>.

		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 <kaupo.palo@ebi.xee> 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 <bernholdtde@ornl.xgov> 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 <marty@cris.wustl.xedu> 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 <sressler@nist.xgov> noted error in audio_init
		for Mac and PC.

1/5/01	3.12.0	Will Shackleford <shackle@cme.nist.xgov> 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 <corbin@grover.jpl.nasa.xgov> 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 <scott-holmstrom@utulsa.xedu> 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 <matt@securepipe.xcom> 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 <Lisa@central.ois.net.xau> reported tkbiff -pop
		bombed when deleting msg.  msg_id was in wrong namespace.

10/23/99 3.8.0  Jean-Claude Wippler <jcw@equi4.xcom> found confusion in
		env(AUDIOPATH) vs audiopath.

		Thomas Andrews <thomaso@best.xcom> 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 <nick.sweeney@jesus.ox.ac.xuk> noted that config
		didn't understand host type i686-unknown-linux.  Patched
		config.guess.

8/6/99 3.7.0	John Mama <genesis@bravo.net.xmx> found bug when reading pop
		msg without message-id with uidl supported by server.

		Tomek Piatek <tomek@wetafx.co.xnz> 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" <bills@lcdmultimedia.xcom> 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
		<david.sauder@nist.xgov> 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. <rajukv@wipinfo.soft.xnet>, 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 <Configure> in . rather than children
		since they would miss <Configure> 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 <bernhold@npac.syr.xedu> 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 <configure> 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 <rickm@vsl.xcom> 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 <martial@cam.nist.xgov> 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 <salvator@plan-9.xcom> found that .tkbiff
		was not being created - due to missing "global tk_version".

11/13/97 2.4.0	Clem Taylor <ctaylor@srtc.xcom> 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 <fstajano@orl.co.xuk> 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 <prasad@stro.vub.ac.xbe> 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.