------------------------  version 2.4.7 released  ----------------------------
1999-05-06  Eric Melski  

	* Fixed a endless looping bug caused by a failed attempt to load a
	second tape in backup

1999-04-09  Eric Melski  

	* Changed TestTapeLabelEquality to not test the equality of the
	magic numbers, because they will never match due to the way magic
	numbers are stored internally.

	* Fixed up BurtMtWrite and BurtMtRead.  Both have more accurate
	return codes now.  Correctly recognizes EOT on Linux now, which is
	important for multitape support.  Stripped out some dead code.

	* Fixed ProcessBackupInputChannel, ReadTape,
	ProcessRecoverInputChannel to deal with new return codes.

	* Created function GetMaxPacketSize(), which returns the maximum
	size of the data block in a packet.  The function encapsulates
	some "magic" numbers, like the size of the packet and the size of
	the header info in the packet.
1999-04-01  Eric Melski  

	* Removed old LoadNextBackupTape() stuff in backup

1999-03-26  Eric Melski  

	* Added an option to the status command; "status internalversion"
	will print the rcsid strings from each module

1999-03-23  Eric Melski  

	* Replaced readtape and recover load next tape stuff with new

	* Created LoadNextTape(), ProcessLoadWritableTapeTimer() and
	ProcessLoadReadableTapeTimer(), which together will replace
	LoadNextBackupTape(), ProcessLoadNextBackupTapeTimer(),
	LoadNextReadtapeTape(), ProcessLoadNextReadtapeTapeTimer(),
	LoadNextRecoverTape() and ProcessLoadNextRecoverTapeTimer(); these
	functions shared a lot of common code, so this consolidation
	should reduce the maintenance overhead and probably the binary
	size too, a little.

	* Renamed SetBurtTapeLabel() to SetupTapeLabel() which is
	(marginally) more descriptive

1999-03-19  Eric Melski  

	* Rewrote BurtBackupIsComplete() to be more readable.  Ugly logic

1999-03-17  Eric Melski  

	* Changed the backup, recover, and readtape startup procedures to
	treat a failed tape rewind as a warning, rather than an error.
	This is a (small) hack to make Burt more friendly to non-tape
	devices until I figure out a better way to do it.

	* Renamed GetUserBackupChannels() to EvaluateUserBackupProc(); made a
	separate function for finding the name of the backupmonitor proc,
	called GetUserBackupMonitorProc()
1999-03-16  Eric Melski  

	* Moved code to set the blocking and translation modes on the
	input/stderr channels returned by a user-defined backup proc from
	StartBackupChannel to GetUserBackupChannels (where that code
	belongs, conceptually)

1999-03-15  Eric Melski  

	* Pulled the code that enables/disables backup events on all the
	channels in a backup control block into separate functions

1999-03-10  Eric Melski  

	* Changed the format of the error messages given by
	GetUserBackupChannels.  The new format gives more information in a
	hopefully easier to read layout.

1999-03-03  Eric Melski  

	* Removed an inefficiency in StartBackupChannel; originally, it 
	allocated a Burt_Packet on the stack, then copied that
	(garbage-filled) packet to the malloc'd packet (also garbage
	filled).  This didn't cause any memory leaks or other problems, it
	just introduced an unnecessary (and big and slow) memory copy.

1999-02-16  Eric Melski  

	* Fixed a bug in the calls to StartBackupChannel.  In cases when
	StartBackupChannel returned an error, the engine wasn't properly
	noting that as a "complete" item, so the engine would never

	* Improved the error dialog from StartBackupChannel and
	GetUserBackupChannels.  The error messages now clearly indicate
	that they came from the Burt engine (with the BURT: prefix); they
	more clearly identify the error; and they include a timestamp.

1999-02-12  Eric Melski  

	* Replace the call to Tcl_BackgroundError in CloseBackupChannel
	with an explicit write to the log channel

	* Wrapped call to StartBackupChannel in CloseBackupChannel with
	some code to ensure that a new backup is started to replace the
	one that is finishing, provided that there remain items to backup

1999-02-11  Eric Melski  

	* Removed the string based backup command entirely (it has been
	superceeded by the object based backup command), including the
	function prototype in burtInt.h and the code in burtBackup.c

	* Removed the PositionTapeForAppend function (it has been
	superceeded by the AppendBackup function)

	* Replaced the call to Tcl_BackgroundError in
	ProcessBackupStderrChannel with an explicit write to the log
	channel.  This will cause errors in backupmonitor proc code to be
	logged closer to the instant that they occurred, rather than
	delaying that logging until the background error shows up.

	* Replaced the call to Tcl_BackgroundError in
	ProcessBackupInputChannel with an explicit write to the log channel.

1999-02-02  Eric Melski  

	* Removed entry point for the old string based backup command, to
	facilitate tests of the new object based implementation

1999-01-22  Eric Melski  

	* Added AppendBackup(), which contains all the code which gets run
	when a user runs "backup append ...."  Very close now to having a
	completely Tcl 8.0 object implementation of the backup command

1999-01-21  Eric Melski  

	* Added StartBackup(), to isolate the "backup start ..." code and
	clean up the "Burt_BackupCmd".  This is also in anticipation of
	adding the "Burt_BackupObjCmd" (the Tcl 8.0 object version of the

	* Fixed numerous logic problems with the StartBackup() code, such
	as some bootstrapping deals with setting the BurtStatus stuff, and
	burt_complete, before actually finishing the startup code for
	"backup start ..."

	* Moved the check for an empty schedule to the top of the
	StartBackup() code

	* Changed the StartBackup() code to be more robust when initially
	starting channels.  If you try to start x channels and an error
	occurs while trying to start the first schedule item for one of 
	them, StartBackup() will try to start a different schedule item,
	continuing until it either successfully starts a item or it runs
	out of items to try.  This will only really be an issue if you
	have a bug in your backup type definition.

	* Changed StartBackup() to display the actual number of channels
	started, instead of the requested number of channels.  That is, if 
	you try to start x channels and y channels (y <= x, always) are 
	actually started, the message displayed will read "BURT: Started y

	* Added a check to StartBackup() which verifies that the tape
	label is not too long

	* Restructured StartBackup() for greater clarity

1999-01-18  Eric Melski  

	* Changed BurtMtWriteLabel to return the number of bytes written on
	success instead of MT_OK, so that it behaves like BurtMtWrite and
	can then more accurately track the number of bytes written

1999-01-12  Eric Melski  

	* Replaced Tcl_GetChannelHandle/lseek with Tcl_Seek in
	LoadNextBackupTape, LoadNextRecoverTape and LoadNextReadTape

	* Moved the check for a zero-length schedule earlier in the order
	of things checked when "backup start" is issued, and changed the
	test from using BurtBackupIsComplete() to using
	BurtScheduleLength() == 0, which makes the code a little clearer

1999-01-11  Eric Melski  

	* Moved code that prepares a tape for appending from
	Burt_BackupCmd to a separate function (PositionTapeForApped) 
	which is called by Burt_BackupCmd

1999-01-06  Eric Melski  

	* Changed readtape command to leave input/log channels registered
	with the interpreter when those channels haven't been opened with
	the proper permissions (instead of calling Tcl_UnregisterChannel
	on them, which was, in my opinion, extraordinarily rude)

	* Fixed a potential buffer overflow problem in StartBackupChannel
1999-01-05  Eric Melski  

	* Changed schedule module to use Tcl_Alloc/Tcl_Free instead of
	malloc/free, which saves me the hassle of checking that memory
	really is allocated (Tcl_Alloc does it for me)

	* Fixed a couple memory leaks in schedule module, in particular with
	the schedule remove and schedule list commands

	* Replaced a reference to "interp->result" with
	Tcl_GetStringResult, in schedule module

	* Changed the "mt" command to use the Tcl_Object format
1999-01-04  Eric Melski  

	* Changed the Tcl interface for the "schedule" command to use the
	Tcl 8.0 Tcl_Object format

	* Rewrote portions of the schedule module, including the functions
	BurtScheduleInfo, BurtScheduleLength, BurtScheduleList, 
	BurtScheduleAdd, BurtScheduleRemove, and BurtScheduleGetNext, to 
	better emphasize the relationship between the functions and the
 	module, and to eliminate the need for other functions to have
	access to the schedule table (I'm working towards functions that
	are strongly cohesive, loosely coupled, and friendly)

	* Updated the backup and recover modules to use the new function
	BurtScheduleLength instead of calling BurtTableLength on the
	schedule table directly, again to improve modularity 

	* Added checks to ensure that the input to the "schedule" command
	is not so long that it overflows the storage allocated (ie, that
	the host, atom, level and type specified are of length less than
	BURT_MAX_TYPELEN, respectively).  The lack of checks like this
	made it possible to make the Burt core dump core if given
	inappropriately long input

	* Made the schedule table a private member of the schedule module
	(as it should have been from the start)

	* Changed BurtTableLength to simply look inside the Tcl_HashTable
	structure and extract the number of elements rather than walking
	the table and explicitly counting them.  This is much faster, it
	is an O(1) operation instead of an O(n) operation.
1998-12-12  Eric Melski  

	* Changed log file time stamp format from [time date] to {time
	date}, which allows for easier parsing from Tcl scripts

------------------------  version 2.4.1 released  ----------------------------

1998-10-15  Eric Melski  

	* Added README containing a brief description of Burt and where to
	get more information.

1998-10-14  Eric Melski  

	* Added ChangeLog with changes from v2.4 up.

1998-10-08  Eric Melski  

	* Changed installation of pkgIndex.tcl to be non-destructive.
  	Intead of simply overwriting whatever pkgIndex.tcl may have
 	existed originally, the installation will append a single line
 	corresponding to the new version to an existing pkgIndex.tcl.
	* Changed interpretation of filemark offsets to indicate number of
 	filemarks from the beginning of a given tape, not from the
	beginning of a backupset.  This allows faster recovery of items
	which have no data on the first n tapes -- instead of
 	fast-forwarding through those n tapes, the recover process can
 	just start with the appropriate tape.

1998-09-30  Eric Melski  

	* Added checks which ensure that the names of the Burt commands
 	have not already been registered within the interpreter.  In case
 	of conflict, load of the Burt module aborts.

	* Added check which ensures that the tape being read as part of an
 	interrupted read check (ie, when readchecks start after a tape in
 	a multi-tape backup is written) has a label which matches the
 	expected label.
-------------------------  version 2.4 released  -----------------------------

last modified Thursday October 15, 1998
eric melski