10.3.12:
	A beta release of the WFDB_tools package is now available for testing.
	This package allows Matlab R13 users to use the WFDB library to read
	and write digitized signals and annotations such as those available
	from PhysioBank. The WFDB_tools functions are wrappers for the WFDB
	library, so that Matlab users can access the full range of capabilities
	offered by current and future versions of the WFDB library, including
	transparent access to data in a large and growing number of formats,
	whether stored locally or on remote web servers. The package was
	written and contributed by Jonas Carlson. It has been tested
	successfully under GNU/Linux and MS-Windows, and it should be portable
	to MacOS X and other platforms supported by Matlab R13.  Look for the
	WFDB_tools package on PhysioNet.

	Thanks to instructions provided by David Linker, and a port of the
	XView library by Logan Donaldson, WAVE can now be used under Mac OS X.
	No code changes were necessary;  it just works!

	It has long been possible to use WAVE to view sequence of the 'num'
	fields in an annotation file as a signal.  This is useful, for example,
	for visualizing a series of measurements applied to each beat in an
	ECG.  WAVE now supports changing the scale of the displayed signal,
	using the same controls as for ordinary signals.  Also, it is possible
	to define default scales for different types of measurements in the
	WFDB calibration database (data/wfdbcal), using the annotator name as
	the signal type.

	Some recent GNU/Linux distributions use a default color for window
	backgrounds that makes WAVE's grid invisible.  WAVE's resource
	(preference) file (wave/Wave.res) has been updated to work around this
	problem;  it also includes documentation of all other WAVE-specific
	settings that can be controlled via this file.  Portions of the WAVE
	User's Guide related to this subject have also been updated.

	Okko Willeboordse pointed out an incompatibility between the native
	MS-Windows API and the ANSI/ISO C library function 'mkdir', which is
	used by the WFDB library.  This does not present a problem when
	compiling the WFDB library using the supported Cygwin/gcc compiler
	under MS-Windows, nor does any related problem occur on any other
	platform.  It should now be a little easier to compile the WFDB library
	using unsupported compilers, thanks to a new MKDIR macro that hides
	the incompatibility (see lib/wfdblib.h0).

	Piotr Wlodarek initiated a discussion about memory leaks in the WFDB
	library, citing as an example the 'trivial example program in C' from
	the WFDB Programmer's Guide, which does not free memory it allocates
	in isigopen() when reading the signal specifications.  This problem
	can be avoided by invoking wfdbquit() in the example program, just
	before exiting.  Further discussion of this point has been added to
	the WFDB Programmer's Guide following the presentation of the 'trivial
	example', and in the description of wfdbquit().

	Thomas Heldt provided a sample input for `ihr', in which a misplaced
	annotation evoked a lengthy interval during which valid inputs were
	rejected.  This example stimulated a modification to the predictor
	used by ihr for outlier detection, in order to avoid such behavior;
	see comments in app/ihr.c for details.

	Using rdsamp's -v option causes it to print column headings based on
	the descriptions of the signals in the input record.  The default
	signal description as supplied by the WFDB library ('record XXX,
	signal N') is abbreviated to 'sig N', but previous versions did not
	do this consistently.

	Gains and scale factors can now be chosen independently for each
	signal when using wrsamp.

	The man page for xform (doc/wag-src/xform.1) now documents the -S
	option (thanks to Lucy Gibson for pointing out the omission).

10.3.11:
	Isaac Henry provided a fix for 'configure' to avoid a problem that
	may occur in a non-standard Cygwin installation. 

	In lib/signal.c, several bugs have been identified and fixed.  Thanks
	to Piotr Wlodarek, who found a buffer overrun in isigopen.  Also,
       	isgsettime sometimes performed incorrect seeks on multifrequency
	records that had been opened in high-resolution mode;  this has been
	fixed, together with a related bug that caused the value returned by
	strtim("e") to be calculated incorrectly in some such cases.

	New signal types and units have been added to the WFDB calibration
	database (data/wfdbcal).

10.3.10:
	In version 10.3.9, the functions setannstr, setanndesc, and setecgstr
	(in lib/annot.c) did not contain necessary checks to avoid invoking
	strcmp with a NULL argument.  These checks have been added in version
	10.3.10.  Thanks to Thomas Heldt for reporting this problem.  In the
	internal function wfdb_addtopath (in lib/wfdbio.c), an extra character
	was appended when adding a component to the WFDB path (in version
	10.3.9 only);  this has also been corrected.

	WAVE now incorporates a simplified method for synchronizing multiple
	windows.  The WAVE version number has been changed from 6.6 to 6.7.

10.3.9:
	The WFDB library functions setwfdb, setannstr, setanndesc, and
	setecgstr now copy their input string arguments, so that it is
	no longer necessary for WFDB applications to keep these strings
	valid.  If you have created applications that rely on being able
	to modify these strings, it will be necessary to invoke the
	corresponding functions again before such changes will take effect
	within the WFDB library.

	Previous versions of the WFDB library function putinfo did not
	flush their output until either a new header file was created (via
	setheader or newheader) or the process exited.  This has now been
	corrected, and putinfo output is now flushed before putinfo returns.
	Thanks to Jonas Carlson for reporting this problem.

10.3.8:
	The WFDB library function setbasetime (in lib/signal.c) now properly
	accepts arguments specifying midnight (e.g., "0:0:0"), which previous
	versions rejected, and the function setheader (also in lib/signal.c)
	records such times correctly in the .hea files it creates.

	epicmp's new -I option allows exclusion of short episodes from all
	statistics (the -i option, which remains available, excludes such
	episodes from episode counts but includes them in duration tallies.)
	Also, previous versions of epicmp (formerly epic) output a "time of
	day"  string where "0.000" should have appeared if the input record had
	a defined base time.  This behavior has been corrected (thanks to
	Paul Albrecht for the bug report, and for suggesting and providing
	an implementation of the -I option).

	The bounding box for pschart output has been enlarged so that most
	signal labels will not be clipped.

	A new application, time2sec, converts a string in WFDB standard
	time format into a time interval in seconds.

	wfdbdesc now produces output even for records with no signals.

	Three highly condensed time scales have been added to those previously
	available in WAVE.

	Modified psd/hrlomb and psd/hrmem so that the plots they produce are
	power, not amplitude, spectra, as psd/hrfft produces.  All three of
	these scripts can now produce log-log and semi-log plots (make them
	by using the new "-l xy" or "-l y" options).

	psd/lomb can now accept input series of arbitrary length, and its -P
	option (for selecting a power spectrum rather than the default
	amplitude spectrum) is now properly documented in its man page.

	The -l option of psd/memse is now obsolete; memse can now accept input
	series of arbitrary length.

	Fixed bugs in convert/readid and convert/makeid.  These programs read
	and write AHA DB-format tape ID files.  The bugs were introduced in
	version 10.0.1 (!);  the programs should work properly again, if anyone
	still needs to use them.

10.3.7:
	Fixed a bug in xform, introduced in 10.3.4, that prevented xform from
	reading the output sampling frequency from the standard input.  Thanks
	to Thomas Heldt for the bug report.

10.3.6:
	The fix applied in isigclose() in 10.3.5 was incomplete but is now
	(really!) fixed.  Applications that use sample() should call wfdbquit()
	to be certain that sample's buffer is freed before exiting.

	Some long-standing problems in the code (in lib/wfdbio.c) that handles
	http range requests for NETFILES-enabled versions of the library have
	been partially addressed.  The underlying issue is that http servers
	do not always return the range of bytes requested;  when this happens,
	it is not difficult to determine that there is a problem, but it is
	tricky to figure out what to do about it.  Based on experiments with
	several different http servers, the strategy for handling such problems
	within the WFDB NETFILES code has been improved substantially, but
	there may be further room for improvement.

10.3.5:
	Fixed a bug in WFDB library function isigclose() (in lib/signal.c)
	that had caused sample()'s buffer to be freed inappropriately when
	switching segments in a multi-segment record.  Thanks to Dave
	Schaffer for the bug report and for a test case that illustrated
	the bug.

10.3.4:
	xform now handles input and output sampling frequencies that are not
	exact multiples of 1 Hz.

	Added SRCDIR definition in configure and conf/cygwin.def.

10.3.3:
	Fixed man page installation bug;  thanks to Joe Mietus for the bug
	report.

        Updated INSTALL (installation notes).

10.3.2:
	New applications wav2mit and mit2wav create WFDB-format records from
	files in the widely-used .wav audio format and vice versa.

	New application nguess estimates the locations of missing normal
	sinus heart beats in an annotation file.

	When running multiple WAVE processes started from a single command,
	it is now possible to update all of the signal windows by selecting
	a sample in the master signal window (using <control>+<middle mouse
	button>).

	WAVE now handles invalid entries in the signal list properly;  thanks
	to Joe Mietus for the bug report.

	Changed options in ann2rr to support more flexible output formatting.

	Fixed a WFDB library bug that caused annotation sorting to fail
	if a new header file had been written.  Thanks to Winton Baker for
	reporting this problem and for providing an example that illustrated
	the bug.

	Fixed a bug in mit2edf that caused a crash instead of printing help
	if no arguments were supplied on the command line;  thanks to Jesus
	Olivan for the bug report.

	Better input checking in edf2mit;  fixed bugs in handling of unusual
	signal lists.

	Fixed a bug in snip that caused a crash if -a was the last option
	on the command line;  thanks to Joe Mietus for the bug report.

	Fixed installation bugs in psd/hr* scripts and psd/Makefile.tpl.

	Corrected a documentation bug in WAVE's on-line help.

	Revised rpm.spec and rules (in Makefile.tpl) for creating RPMs.
	There are now separate wfdb, wfdb-devel, wfdb-app, wfdb-doc, and
	wfdb-wave RPMs.

10.3.1:
	Added a -W option to ann2rr to create 2-column output containing
	intervals in seconds and annotation mnemonics, and modified the
	interval calculations to avoid accumulated roundoff error.

	Fixed a bug that caused WAVE to crash when the main window was
	resized if the open record had 3 or more signals, and added two
	high-resolution time scales in modepan.c.

	Fixed a bug in edf2mit that caused crashes when using the -s option,
	and another bug in mit2edf that caused crashes when converting a
	record with a frame rate of less than 1 Hz.  Thanks to Jesus Olivan
	for reporting these problems and for providing test cases that were
	helpful in developing and testing the fixes.

	Wei Zong has contributed an arterial blood pressure pulse detector
	for continuous ABP signals, which has been added to the package
	(see wabp).

10.3.0:
	The WFDB Software Package has been ported to MacOS/X (Darwin),
	version 10.2 (the port should also work under 10.1 but this
	has not been tested and will not be supported).	

	It is now possible to generate a shared WFDB library (DLL)
	under MS-Windows using Cygwin/gcc.

	Fixed bugs in lib/signal.c that caused improper accounting of
	signal group numbers when reading from two or more records at
	the same time (as in 'nst'), a bug that caused a segfault in
	'nst', and a bug that referenced uninitialized memory in
	newheader() if nsig = 0.

	Added functions sample() and sample_valid() to the WFDB library
	(in lib/signal.c).  sample(s, t) returns the sample at time (sample
	number) t from signal s, handling all necessary buffering
	internally and allowing the caller to treat the signal file
	as a virtual array of randomly accessible samples.  sample_valid()
	can be invoked to check if the most recent value returned by
	sample() was valid (e.g., to see if the end of the input was
	reached).  For an example of the use of these functions, see
	app/wqrs.c .

	Use -p -p to obtain higher precision in 'rdsamp' output.

	New -w option for 'ann2rr' and 'rr2ann' for attaching annotation
	types to intervals.

	Fixed a subtle bug in 'bxb' that caused it to count matching
	annotations as mismatches in very rare circumstances when the heart
	rate exceeds 200 bpm.  The effect of this bug was only to cause
	a tiny fraction of correct detections to be counted as errors, and not
	to cause detector errors to be counted as correct.  Thanks to James
	Pardey for reporting the problem and for providing a test case that
	was useful for developing and testing the fix.  See the comments in
	'app/bxb.c' for details.

	The application formerly known as 'epic' has be renamed 'epicmp'
	(episode comparator), to avoid conflicts with a new but widely
	distributed IRC chat client named 'epic'.

	Conversion of floating-point values to integer samples has been
	modified to obtain better cross-platform consistency in psfd and
	wrsamp.

	Wei Zong's length-transform-based QRS detector, wqrs, has been
	added to the package.

	New 'mit2edf' application converts records to European Data Format.

	Numerous updates in the WFDB Applications Guide.

10.2.9:
	Fixed a bug in example 9 in the WFDB Programmer's Guide (introduced
	in version 10.2.0).

	Updated lib/wfdbdll.def and the 'Makefile.dos' files in several
	directories.  These have not been tested in recent years and may
	need further revisions;  feedback is welcome.

	Corrected persistent problems with generating PDF versions of the
	manuals for the desired page size, and added hyperlinks to the
	PDF version of the WFDB Programmer's Guide.

10.2.8:
	Fixed a bug in WAVE that occasionally caused a crash when starting
	up;  also repaired a broken link in WAVE's on-line help.

10.2.7:
	Added a workaround to wfdb_fclose() (in lib/wfdbio.c) so that
	closing stdin after using freopen doesn't trigger a core dump.

	If out-of-order annotations were written and automatic annotation
	sorting was suppressed, the warning produced by oannclose() (in
	lib/annot.c) once again includes the correct 'sortann' command
	needed to put the annotations into order.  (This feature was broken
        by a previous revision.)

	Added 'ahaconvert', a shell script (in convert) that can reformat
	all (or any subset) of the records on an AHA DB CD-ROM using a2m
	and ad2m.  'a2m' and 'ad2m' now do a better job of automatically
	recognizing their input file types, and 'ad2m' now converts
	long-format as well as short-format AHA .CMP (signal) files
	correctly.

	Numerous updates and corrections in the WFDB Applications Guide.
	
10.2.6:
	Added setifreq() and getifreq() to the WFDB library.  setifreq
	allows the caller to resample an input record at any convenient
	sampling frequency, using getvec() to perform xform's resampling
	algorithm transparently.  Thanks to Pat Hamilton for the inspiration!
	The complementary getifreq returns the current getvec frequency
	(either the native sampling frequency of the current record, or
	the frequency previously set using setifreq()).  Times expressed
	in sample intervals passed to or from other WFDB functions (getann,
	putann, timstr, mstimstr, strtim) are rescaled to match the intervals
	corresponding to the chosen frequency.

	'sqrs' and 'sqrs125' now use setifreq() to resample their inputs.

	Added 'wfdb-config', a tiny program (in app) that reports the WFDB
	library version and linking information (similar to libwww-config,
	gtk-config, etc.).

	The WFDB library now records the base time with millisecond precision
	(previous versions did so with one-second precision), and 'xform'
	provides starting times to the library function 'setbasetime' with
	millisecond precision.  Thanks to Allavatam Venugopal for providing
	examples that illustrated the need for these features.

	Fixed handling of absolute time strings in 'ann2rr', 'bxb', 'epic',
	'fir', 'ihr', 'mxm', 'pscgen', 'rdann', and 'rxr' (all in app).

	Fixed deskewing buffer initialization in getframe() (in lib/signal.c).
	broken by the 10.2.0 update, which introduced an infinite loop when
	reading a record that requires skew correction starting at sample 0.
	Thanks to Andrew Walsh for finding an example that triggered this bug.

	Fixed rounding errors in adumuv(), muvadu(), and physadu() (all in
	lib/signal.c).  Previous versions rounded negative values toward zero;
	to obtain consistent conversions, however, it is necessary to round
	all values down (e.g., from -1.5 to -2 rather than up to -1).

	Fixed a memory leak in wfdb_fclose() (in lib/wfdbio.h), and made
	additional minor changes for portability (in lib/calib.c, lib/signal.c,
	and lib/wfdblib.h).  Thanks to Ion Gaztaaga for bug reports, for his
	careful notes on compiling the WFDB library using Borland C++ Builder
	(see INSTALL for a summary), and for testing intermediate versions
	of the library.

	Fixed a bug in checkpkg/appcheck, which was correctly testing xform
	with NETFILES and reporting any errors, but was not counting errors
	in this test.

10.2.5:
	New output format options in 'ann2rr' and 'ihr'.

	FreeBSD support in 'configure', new conf/freebsd* (thanks to
	Giuseppe Pagnoni).

	Added support for annotation maps from wfdb/ecgmap.h to the Fortran
	wrappers (fortran/wfdbf.c) and fixed two typos there.

	Removed unneeded references to wfdb/wfdb.h from waverc/wave-remote.c
	and waverc/wavescript.c (thanks again to Giuseppe Pagnoni).

10.2.4:
	Bug fixes in 'pschart' and 'psfd' (vbuf was not properly initialized
	before its first use).

10.2.3:
	Portability fixes in 'configure', 'install.sh', 'wave/Makefile.tpl',
	'psd/hr*', 'doc/*.sh', 'lib/wfdblib.h', and 'checkpkg/*check'.

	Updated 'checkpkg/appcheck' to use WFDBANNSORT when testing 'sortann'.

	The full package is now much smaller because the figures for the
	WAVE User's Guide are now generated as needed from compressed ppm
	files.  Also, 'doc/texindex.c' and 'doc/texi2html' have been removed
	from the package (these are now more widely available than when they
	were originally included, and relatively few users need them).

	Added rules for creating 'dbu.hlp' (MS-Windows help file version of
	the WFDB Programmer's Guide) to doc/Makefile.tpl.  Updated rules for
        generating the info version of the Programmer's Guide.

	Special pipe and tape header files from 'data' are now installed
	by default.

	Added rules for creating WFDB source and binary RPMs to the top-level
	Makefile.tpl.

10.2.2:
	WAVE can now be used to view and edit annotations for records that
	have no signals.

	The WAVE User's Guide has been moved to the 'doc' directory, and
	the process of formatting it is now better integrated with that for
	the other WFDB guides.

	In 'ihr', the use of an uninitialized variable ('lasttime') caused
	some non-outlier data in the first few samples to be rejected
	incorrectly.  This has now been fixed.

10.2.1:
	Most users will no longer need to set the WFDB path explicitly, as a
	result of several minor changes in the default path and in the
	installer for the WFDB Software Package.

	The environment variable WFDBNOSORT was replaced by WFDBANNSORT, and
        the environment variable WFDBGVMODE was introduced (see 'Annotation
        Order' and 'Multi-Frequency Records', in the WFDB Programmer's Guide,
	for details).

10.2.0:
	The 10.2 series differs from all earlier releases in that the WFDB
	library no longer imposes any fixed limits on the numbers of annotators
	or signals that can be open simultaneously.  There is also no
	fixed limit on the number of samples per signal per frame.  The
	constants WFDB_MAXANN, WFDB_MAXSIG, and WFDB_MAXSPF, which determined
	these limits in previous versions of the library, are still defined in
	lib/wfdb.h for compatibility with older programs that use them, e.g.,
	to set array sizes.

	In this release, almost all of the WFDB applications, including WAVE,
	those in the 'app' and 'examples' directories, and convert/edf2mit,
	have been revised so that they can handle arbitrary numbers of signals
	and (where applicable) annotation files.  The exceptions are:

	  sample
	    limited by the number of channels provided by the ADC/DAC it uses
	  view, wview
	    use 'gtkwave' (http://www.physionet.org/physiotools/beta/gtkwave)

	Also please note the new 'checkpkg' directory, which contains a variety
	of tests to check the basic functionality of the WFDB library and many
	of the WFDB applications.  From the base directory, run the tests by:

		make check

	These tests will check the currently installed version of the WFDB
	software package.  If you use them to check an old version, there may
	be minor discrepancies because of changes in the output formats;  you
	should not encounter any discrepancies if you use these tests after
	installing this version of the WFDB software package.

	As always, your comments are welcome!

	George (george@mit.edu)
