2011-07-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * NEWS README configure.ac doc/*.html
    Updates for 1.0.25.

2011-07-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sfconfig.h
    Add handling for HAVE_SYS_WAIT_H.

    * Makefile.am src/Makefile.am tests/Makefile.am
    Add 'checkprograms' target.

2011-07-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/sndfile.c
    Purge SF_ASSERT macro. Use standard C assert instead.

    * src/paf.c src/common.h src/sndfile.c
    Fix for Secunia Advisory SA45125, heap overflow (heap gets overwritten with
    byte value of 0) due to integer overflow if PAF file handler.

    * src/ima_adpcm.c src/ms_adpcm.c src/paf.c
    Use calloc instead of malloc followed by memset.

    * tests/utils.tpl
    Clean up use of memset.

2011-07-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ogg.c
    Fix log message.

    * tests/format_check_test.c
    Fix compiler warnings.

2011-07-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fix error message for erro code SFE_ZERO_MINOR_FORMAT.

    * tests/format_check_test.c
    Add a test to for SF_FINFO format field validation.

    * src/ogg.c src/ogg_vorbis.c src/ogg.h src/ogg_pcm.c src/ogg_speex.c
        src/common.h src/Makefile.am
    Move vorbis specific code to ogg_vorbis.c, add new files for handling PCM
    and Speex codecs in an Ogg container. The later two are only enabled with
    ENABLE_EXPERIMENTAL_CODE config variable.

2011-06-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/strings.c
    Clean up and refactor storage of SF_STR_SOFTWARE.

2011-06-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in doc/api.html
    Fix definition of SF_STR_LAST and update SF_STR_* related docs. Thanks to
    Tim van der Molen for the patch.

2011-06-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-interleave.c
    Fix handling of argc. Thanks to Marius Hennecke.

    * src/wav_w64.c
    Accept broken WAV files with blockalign == 0. Thanks to Olivier Tristan for
    providing example files.

    * src/wav.c
    Jump over 'FLLR' chunks.

2011-06-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Fix -Wundef warning due to ENABLE_SNDFILE_WINDOWS_PROTOTYPES.

    * configure.ac
    Add -Wundef to CFLAGS.

    * src/ogg.c
    Fix -Wunder warning.

2011-05-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Use int64_t instead of off_t when they are the same size.

    * src/Makefile.am tests/Makefile.am
    Use check_PROGRAMS instead of noinst_PROGRAMS where appropriate.

2011-05-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Don't allow unknown and/or un-editable chunks to prevent the file from being
    opened in SFM_RDWR mode.

2011-04-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/format_check_test.c
    Fix segfault in test program.

2011-04-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/format_check_test.c
    New test program to check to make sure that sf_open() and sf_check_format()
    agree as to what is a valid program.

    * tests/Makefile.am tests/test_wrapper.sh.in
    Hook into build and test runner.

    * src/sndfile.c
    Fix some sf_format_check() problems. Thanks to Charles Van Winkle for the
    notification.

2011-04-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/caf.c
    Add validation to size of 'data' chunk and fix size of written 'data'
    chunk. Thanks to Michael Pruett for reporting this.

2011-03-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/* tests/* programs/*
    Fix a bunch of compiler warnings with gcc-4.6.

2011-03-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/util.tpl
    Add NOT macro to util.h.

    * src/strings.c
    Fix handling of SF_STR_SOFTWARE that resulted in a segfault due to calling
    strlen() on an unterminated string. Thanks to Francois Thibaud for reporting
    this problem.

    * tests/string_test.c
    Add test for SF_STR_SOFTWARE segfault bug.

    * configure.ac
    Sanitize FLAC_CFLAGS value supplied by pkg-config which returns a value of
    '-I${includedir}/FLAC'. However FLAC also provides an include file
    <assert.h> which clashes with the Standard C header of the same name. The
    solution is strip the 'FLAC' part off the end and include all FLAC headers
    as <FLAC/header.h>.

    * configure.ac src/Makefile.am
    Use non-recursive make in src/ directory.

2011-03-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * NEWS README docs/*.html
    Updates for 1.0.24 release.

2011-03-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fix up usage of sed (should not assume GNU sed).

    * M4/add_(c|cxx)flags.m4
    Test flags in isolation.

    * tests/cpp_test.cc
    Fix a broken test (test segfaults). Report by Dave Flogeras.

2011-03-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/common.[ch]
    Add function program_name() which returns the program name minus the path
    from argv [0].

    * programs/*.c programs/Makefile.am
    Use program_name() where appropriate. Fix build.

2011-03-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    For u-law and A-law files, write an 18 byte 'fmt ' chunk instead of a 16
    byte one. Win98 accepts files with a 16 but not 18 byte 'fmt' chunk. Later
    version accept 18 byte but not 16 byte.

2011-03-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Add examples for question 12.

    * doc/libsndfile.css.in
    Add tweaks for h4 element.

    * doc/api.html
    Add documentation for virtual I/O functionality. Thanks to Uli Franke.

    * tests/util.tpl
    Add static inline functions sf_info_clear() and sf_info_setup().

    * tests/(alaw|dwvw|ulaw)_test.c
    Use functions sf_info_clear() and sf_info_setup().

2011-03-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fail more gracefully if pkg-config is missing. Suggestion from Brian
    Willoughby.

2011-02-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Use size_t instead of int for size params with varargs.

2011-02-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Update supported platforms with more Debian platforms and Android.

2011-01-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Add an LPCWSTR version of the SndfileHandle constructor to the SndfileHandle
    class definition. Thanks to Eric Eizenman for pointing out this was missing.

    * tests/cpp_test.cc
    Add test for LPCWSTR version of the SndfileHandle constructor.

2011-01-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-play.c
    Remove cruft.

2010-12-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Add methods rawHandle() and takeOwnership(). Thanks to Tim Blechmann for
    the patch.

    * tests/cpp_test.cc
    Add tests for above two methods. Also supplied by Tim Blechmann.

2010-11-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Add mention of use of sf_strerror() when sf_open() fails.

2010-11-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Make TYPEOF_SF_COUNT_T int64_t where possible. This may fix problems where
    people are compiling on a 64 bit system with the GCC -m32 flag.

    * src/sndfile.h.in
    Fix comments on sf_count_t.

2010-10-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Handle non-zero offset field in SSND chunk. Thanks to Michael Chinen.

2010-10-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Sed fix for FreeBSD. Thanks Tony Theodore.

2010-10-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * shave.in M4/shave.m4
    Fix shave invocation of windres compiler. Thanks Damien Lespiau (upstream
    shave author).

    * configure.ac M4/shave.m4 shave-libtool.in shave.in
    Switch from shave to automake-1.11's AM_SILENT_RULES.

2010-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * shave-libtool.in shave.in
    Sync to upstream version.

    * src/rf64.c
    More work to make the parser more robust and accepting of mal-formed files.

2010-10-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add functions psf_strlcpy() and psf_strlcat().

    * src/broadcast.c src/sndfile.c src/strings.c src/test_main.c
        src/test_main.h src/test_strncpy_crlf.c
    Use functions psf_strlcpy() and psf_strlcat() as appropriate.

    * tests/string_test.c
    Add tests for SF_STR_GENRE and SF_STR_TRACKNUMBER.

    * src/rf64.c
    Fix size of 'ds64' chunk when writing RF64.

2010-10-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/*.c
    Add the libsndfile version to the usage message of all programs.

2010-10-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/version-metadata.rc.in src/Makefile.am
    Add version string resources to the windows DLL.

    * doc/api.html
    Update to add missing SF_FORMAT_* values. Closed Debian bug #545257.

    * NEWS README configure.ac doc/*.html
    Updates for 1.0.23 release.

2010-10-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pedantic-header-test.sh.in
    Handle unusual values of CC environment variable.

    * src/rf64.c
    Minor tweaks and additional sanity checking.

    * src/Makefile.am src/binheader_writef_check.py
    Use python 2.6.

2010-10-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Add a missing 'inline' before a constructor defintion.

2010-10-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add macro NOT.

    * src/rf64.c
    Minor tweaks.

    * Makefile.am */Makefile.am
    Add *~ to CLEANFILES.

2010-10-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fix a typo in the error string for SFE_OPEN_PIPE_RDWR. Thanks to Charles
    Van Winkle for the report.

2010-10-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c src/ogg.c src/sndfile.h.in src/strings.c src/wav.c
    Add ability to read/write tracknumber and genre to flac/ogg/wav files.
    Thanks to Matti Nykyri for the patch.

    * src/common.h src/broadcast.c src/strings.c
    Add function psf_safe_strncpy() and use where appropriate.

2010-10-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * NEWS README configure.ac doc/*.html
    Updates for 1.0.22 release.

2010-10-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/broadcast.c src/rf64.c src/sndfile.c src/wav.c
    Rewrite of SF_BROADCAST_INFO handling.

    * src/test_broadcast_var.c tests/command_test.c
    Tweak SF_BROADCAST_INFO tests.

    * src/test_broadcast_var.c
    Fix OSX stack check error.

2010-09-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sds.c
    Set sustain_loop_end to 0 as suggested by Brian Lewis.

2010-09-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sds.c
    Make sure the correct frame count gets written into the header.

    * tests/write_read_test.tpl
    Don't allow SDS files to have a long frame count.

2010-09-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sds.c
    Apply a pair of patches from Brian Lewis to fix the packet number location
    and the checksum.

2010-09-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    *  src/aiff.c src/file_io.c src/ogg.c src/rf64.c src/sndfile.c
        src/strings.c src/test_audio_detect.c src/test_strncpy_crlf.c
        src/wav.c tests/pcm_test.tpl
   Fix a bunch of minor issues found using static analysis.

2010-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_broadcast_var.c
    New file containing tests for broadcast_set_var().

    * src/Makefile.am src/test_main.[ch]
    Hook test_broadcast_var.c into tests.

2010-08-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/broadcast.c src/common.(c|h)
    Move function strncpy_crlf() to src/common.c so the function can be tested
    in isolation.

    * src/test_strncpy_crlf.c
    New file.

    * src/Makefile.am src/test_main.[ch]
    Hook test_strncpy_crlf.c into tests.

2010-08-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Move code around to make comments make sense.

    * src/broadcast.c
    Add debugging code that is disabled by default.

2010-08-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    When the file meta data says the file has zero frames set psf->sf.frames
    to SF_COUNT_MAX. Fixes Debian bug #590752.

    * programs/sndfile-info.c
    Print 'unknown' if frame count == SF_COUNT_MAX.

2010-06-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Only support writing mono SVX files. Multichannel SVX files are not
    interleaved and there is no support infrastructure to cache and write
	multiple channels to create a non-interleaved file.

    * src/file_io.c
    Don't call close() on a file descriptor of -1. Thanks to Jeremy Friesner
    for the bug report.

2010-06-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add macro SF_ASSERT.

    * src/sndfile.c
    Use SF_ASSERT to ensure sizeof (sf_count_t) == 8.

    * src/svx.c
    Add support for reading and writing stereo SVX files.

2010-05-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    When compiling with x86_64-w64-mingw32-gcc link with -static-libgcc flags.

    * programs/common.c programs/sndfile-metadata-set.c
    Update metadata after the audio data is copied. Other minor fixes. Patch
    from Marius Hennecke.

2010-05-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/nist.c
    Fix a regression reported by Hugh Secker-Walker.

    * src/api.html
    Add comment about sf_open_fd() not working on Windows if the application
    and the libsndfile DLL are linked to different versions of the Microsoft
    C runtime DLL.

2010-04-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pedantic-header-test.sh.in
    Fix 'make distcheck'.

2010-04-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pedantic-header-test.sh.in
    New file to test whether sndfile.h can be compiled with gcc's -pedantic
    flag.

    * configure.ac tests/test_wrapper.sh.in
    Hook pedantic-header-test into test suite.

    * src/sndfile.h.in
    Fix -pedantic warning.

2010-04-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-salvage.c programs/Makefile.am
    New program to salvage the audio data from WAV/WAVEX/AIFF files which are
    greater than 4Gig in size.

2010-04-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-convert.c
    Fix valgrind warning.

2010-04-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-cmp.c
    When files differ in the PCM data, also print the difference offset.
    Minor cleanup.

2010-03-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Don't use the 'twos' marker for 24 and 32 bit PCM, use 'in24' and 'in32'
    instead. Thanks to Paul Davis (Ardour) for this suggestion.

2010-02-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Clean up configure report.

    * tests/utils.tpl
    Add functions test_read_raw_or_die and test_write_raw_or_die.

    * tests/rdwr_test.(def|tpl) tests/Makefile.am
    Add new test program and hook into build.

    * src/sndfile.c
    Fix minor issues with sf_read/write_raw(). Bug reported by Milan Křápek.

    * tests/test_wrapper.sh.in
    Add rdwr_test to the test wrapper script.

2010-02-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Remove -fpascal-strings from OSX's OS_SPECIFIC_CFLAGS.

    * programs/common.[ch] programs/sndfile-metadata-set.c
    Apply a patch from Robin Gareus allowing the setting of the time reference
    field of the BEXT chunk.

2010-02-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ima_adpcm.c
    Add a fix from Jonatan Liljedahl to handle predictor overflow when decoding
    IMA4.

2010-01-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Add a constructor which takes an existing file descriptor and then calls
    sf_open_fd(). Patch from Sakari Bergen.

2010-01-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-deinterleave.c programs/sndfile-interleave.c
    Improve usage messages.

2010-01-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/id3.c src/Makefile.am
    Add new file src/id3.c and hook into build.

    * src/sndfile.c src/common.h
    Detect and skip and ID3 header at the start of the file.

2010-01-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/common.c
    Fix update_strings() copyright, comment, album and license are correctly
    written. Thanks to Todd Allen for reporting this.

    * man/Makefile.am
    Change GNU makeism to something more widely supported. Thanks to Christian
    Weisgerber for reporting this.

    * configure.ac programs/Makefile.am programs/sndfile-play.c
    Apply patch from Christian Weisgerber and Jacob Meuserto add support for
    OpenBSD's sndio.

2010-01-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Discourage the use of sf_read/write_raw().

2009-12-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Test for Unix pipe() and waitpid() functions.

    * src/sfconfig.h tests/pipe_test.tpl
    Disable pipe_test if pipe() and waitpid() aren't available.

2009-12-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/Makefile.am src/create_symbols_file.py
        src/make-static-lib-hidden-privates.sh
    Change name of generated file src/Symbols.linux to Symbols.gnu-binutils and
    and use the same symbols file for other systems which use GNU binutils like
    Debian's kfreebsd.

    * M4/shave.m4 shave.in
    Update shave files from upstream.

2009-12-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * man/sndfile-metadata-get.1
    Fix typo.

    * man/sndfile-interleave.1 man/Makefile.am
    New man page.

2009-12-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ogg.c
    When decoding to short or int, clip the decoded signal to [-1.0, 1.0] if
    its too hot. Thanks to Dmitry Baikov for suggesting this.

    * NEWS README doc/*.html
    Updates for 1.0.21.

2009-12-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-jackplay.c man/sndfile-jackplay.1
    Remove these which will now be in found in the sndfile-tools package.

    * programs/Makefile.am man/Makefile.am
    Remove build rules for sndfile-jackplay.

    * configure.ac
    Remove detection of JACK Audio Connect Kit.

    * programs/sndfile-concat.c man/sndfile-concat.1
    Add new program with man page.

    * man/Makefile.am programs/Makefile.am
    Hook sndfile-concat into build system.

2009-12-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/error_test.c
    Don't terminate when sf_close() returns zero in error_close_test().
    It seems that Windows 7 behaves differently from earlier versions of
    Windows.

2009-12-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac M4/*.m4
    Rename all custom macros from AC_* to MN_*.

    * programs/sndfile-interleave.c
    Make it actually work.

2009-12-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/*.html configure.ac
    Corrections and clarifications courtesy of Robin Forder.

    * programs/sndfile-convert.c programs/common.[ch]
    Move some code from convert to common for reuse.

    * programs/sndfile-interleave.c programs/sndfile-interleave.c
    Add new programs sndfile-interleave and sndfile-deinterleave.

    * programs/Makefile.am
    Hook new programs into build.

2009-12-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/create_symbols_file.py tests/stdio_test.c tests/win32_test.c
    Minor OS/2 tweaks as suggested by David Yeo.

    * tests/multi_file_test.c
    Fix file creation flags on windows. Thanks to Bruce Sharpe.

    * src/sf_unistd.h
    Set all group and other file create permssions to zero.

    * tests/win32_test.c
    Add a new test.

2009-11-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/print.css doc/*.html
    Add a print stylesheet and update all HTML documents to reference it.
    Thanks to Aditya Bhargava for suggesting this.

    * doc/index.html
    Minor corrections.

2009-11-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * sndfile.pc.in
    Add a Libs.private entry to assist with static linking.

2009-11-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/make-static-lib-hidden-privates.sh src/Makefile.am
    Add a script to hide all non-public symbols in the libsndfile.a static
    library.

2009-11-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/locale_test.c
    Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES.

2009-11-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/windows.c
    Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES.

2009-11-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-convert.c
    Allow the program to read from stdin by specifying '-' on the command line
    as the input file.

    * src/sndfile.h.in
    Hash define ENABLE_SNDFILE_WINDOWS_PROTOTYPES to 1 for greater safety.

    * tests/virtual_io_test.c
    Add a PAF/PCM_24 test and verify the file length is not negative
    immediately after openning the file for write.

2009-10-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    When writing loop lengths, adjust the end position by one to make up for
    Microsoft's screwed up spec. Thanks to Olivier Tristan for the patch.

2009-10-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Apply patch from Uli Franke allowing FLAC files to be encoded at any sample
    rate.

2009-10-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/nist.c
    Fix parsing of odd ulaw encoded file provided by Jan Silovsky.

    * configure.ac
    Insist on libvorbis >= 1.2.3. Earlier verions have bugs that cause the
    libsndfile test suite to fail on MIPS, PowerPC and others.
    See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549899

2009-10-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * man/sndfile-convert.1
    Fix warning from Debian's lintian checks.

    * man/sndfile-cmp.1 man/sndfile-jackplay.1 man/sndfile-metadata-get.1
        man/Makefile.am
    Add three new minimal manpages and hook into build.

2009-10-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/test_wrapper.sh.in
    Don't run cpp_test on x86_64-w64-mingw32.

2009-09-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.tpl
    On windows, make sure the open() function doesn't get called with a third
    parameter of 0 which fails for no good reason. Also make sure this third
    parameter doesn't get called with S_IRGRP when compiling for windows because
    Wine complains.

    * src/sndfile.hh
    Add a SndfileHandle constructor for windows that takes a 'const wchar_t *'
    string.

    * doc/FAQ.html
    Add Q/A : I'm cross compiling libsndfile for another platform. How can I
    run the test suite?

    * src/create_symbols_file.py src/Makefile.am
    Add Symbols.static target, a list of symbols, one per line.

2009-09-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/test_wrapper.sh.in
    Update to allow all tests to be gathered up into a testsuite tarball and
    then be run using this script.

    * build-test-tarball.mk.in
    Add a Make script to build a tarball of all the test binaries and the test
    wrapper script. This is useful for cross compiling; you can build the
    binaries, build test test tarball and transfer the test tarball to the
    target machine for testing.

2009-09-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/*.c
    Modify SF_FILE struct to allow it to carry either 8-bit or 16-bit strings
    for the file path, directory and name. Fixes for this change throughout.

    * src/windows.c src/Makefile.am
    New file defining new windows only public function sf_wchar_open() which
    takes a 'const wchar_t *' string (LPCWSTR) for the file name parameter.

    * src/sndfile.h.in
    Add SF_CHANNEL_MAP_ABISONIC_* entries.
    Add windows only defintion for sf_wchar_open().

    * src/create_symbols_file.py
    Add sf_wchar_open() to the list of public symbols (windows only).

    * tests/locale_test.c
    Add a wchar_test() to test sf_wchar_open().

2009-09-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/*.c
    Split file stuff into PSF_FILE struct within the SF_PRIVATE struct.

2009-09-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c src/voc.c
    When a byte is needed, use unsigned char.

    * src/ima_oki_adpcm.c src/broadcast.c src/test_ima_oki_adpcm.c
    Include sfconfig.h to prevent compile errors with MinGW compilers.

    * configure.ac
    Remove AM_CONFIG_HEADER due to warnings from autoconf 2.64.

    * tests/locale_test.c
    Update to work with xx_XX.UTF-8 style locales. Refactoring.

2009-09-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Set __USE_MINGW_ANSI_STDIO to 1 when compiling using MinGW compilers.
    Remove unneeded AC_SUBST.
    Report Host CPU/OS/vendor.

2009-09-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fix error message string.

    * src/flac.c
    Add 88200 to the list of supported sample rates.

    * src/ogg.c
    Fix compiler warning when using gcc-4.5.0.

    * programs/sndfile-info.c tests/utils.tpl
    Remove WIN32 snprintf #define.

    * src/ima_adpcm.c
    Fix minor bug in aiff_ima_encode_block. Thanks to Denis Fileev for finding
    this.

2009-09-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/caf.c
    Use the correct C99 format specifier for int64_t.

    * M4/endian.m4
    Fix detection of CPU endian-ness when cross compiling. Thanks to Pierre
    Ossman for the bug report.

    * src/caf.c src/sndfile.c
    Fix reading and writing of PEAK chunks in CAF files.

    * tests/peak_chunk_test.c tests/test_wrapper.sh.in
    Run peak_chunk_test on CAF files.

2009-09-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c src/wav.c
    Use the correct C99 format specifier for int64_t.

2009-08-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/rf64.c src/sndfile.c src/wav.c src/wav_w64.h
    Apply a patch (massaged slightly) from Uli Franke adding handling of the
    BEXT chunk in RF64 files.

    * tests/command_test.c
    Update channel_map_test() function so WAV test passes.

    * src/rf64.c
    Add channel mapping and ambisonic support.

    * src/sndfile.h
    Add comments showing correspondance between libsndfile channel map
    defintiions and those used by Apple and MS.

    Add handling of reading/writing channel map info.

    * tests/command_test.c tests/test_wrapper.sh.in
    Update channel map tests.

2009-07-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add function psf_isprint() a replacement for the standard C isprint()
    function which ignores any locale settings and treats all input as ASCII.

    * src/(aiff|common|rf64|sd2|strings|svx|wav).c
    Use psf_isprint() instead of isprint().

2009-07-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/command.c
    Add string descriptions for SF_FORMAT_RF64 and SF_FORMAT_MPC2K.

2009-06-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-play.c
    Allow use of Open Sound System audio output under FreeBSD.

2009-06-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add patch from Conrad Parker to add --disable-jack.

2009-05-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/alaw.c src/float32.c src/htk.c src/pcm.c src/sds.c src/ulaw.c
    Fix bugs where invalid files can cause a divide by zero error (SIGFPE).
    Thanks to Sami Liedes for reporting this a Debian bug #530831.

2009-05-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/chanmap.[ch]
    New files for channel map decoding/encoding.

2009-05-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/sndfile.h.in
    Fix MSVC definition of sf_count_t.

2009-05-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_w64.[ch]
    Add wavex_channelmask to WAV_PRIVATE struct and add a function to convert
    an array of SF_CHANNEL_MASK_* values into a bit mask for use in WAV files.

    * src/wav.c
    Add ability to write the channel mask.

2009-05-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-info.c
    Add -c command line option to dump the channel map information.

    * src/wav_w64.c
    Don't bail from parser if channel map bitmask is faulty.

    * src/common.h src/sndfile.c
    Remove error code SFE_W64_BAD_CHANNEL_MAP which is not needed any more.

    * src/sndfile.c
    On SFC_SET_CHANNEL_MAP_INFO pass the channel map command down to container's
    command handler.

2009-05-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/common.h src/sndfile.c src/wav_w64.c
    Apply a patch from Lennart Poettering (PulseAudio) to allow reading of
    channel data in WAV and W64 files.
    Add a test for the above.

2009-05-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FAQ.html
    Update the section about pre-compiled binaries for Win64.

2009-05-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/test_conversions.c
    Be more careful when including <stdint.h> so compiling on pre-C99 platforms
    (hello Slowlaris) might actually work.

    * NEWS README doc/*.html
    Updates for 1.0.20.

2009-04-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/voc.c
    Fix a bug whereby opening a specially crafted VOC file could result in a
    heap overflow. Thanks to Tobias Klein (http://www.trapkit.de) for reporting
    this issue.

    * src/aiff.c
    Fix potential (heap) buffer overflow when parsing 'MARK' chunk.

2009-04-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/stdin_test.c
    Check psf->error after opening file.

    * src/file_io.c
    Fix obscure seeking bug reported by Hugh Secker-Walker.

    * tests/utils.tpl
    Add check of sf_error to test_open_file_or_die().

    * src/sndfile.c
    Clear error if opening resource fork fails.

2009-04-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/alaw_test.c tests/locale_test.c tests/ulaw_test.c
    Cleanup output.

2009-03-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float32.c
    Fix f2s_clip_array.

2009-03-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float32.c
    In host_read_f2s call convert instead of f2s_array.

    * src/ima_adpcm.c
    Remove dead code.

    * src/test_ima_oki_adpcm.c examples/generate.c tests/dither_test.c
        tests/dwvw_test.c tests/fix_this.c tests/generate.c
        tests/multi_file_test.c
    Minor fixes.

2009-03-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * M4/shave.m4 shave.in
    Pulled update from upstream.

2009-03-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Add pointers to example programs in source code tarball.

2009-03-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Define SF_PLATFORM_S64 for non-gcc compilers with 'long long' type.

    * configure.ac
    Add documentation for --disable-external-libs and improve error handling
    for that option.

    * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py
    Add public function sf_version_string.

    * tests/sfversion.c
    Test function sf_version_string.

    * M4/shave.m4 shave-libtool.in shave.in
    Add new files from 'git clone git://git.lespiau.name/shave'.

    * configure.ac
    Enable shave.

    * src/Makefile.am src/binheader_writef_check.py Octave/*
    Shave related tweaks.

2009-03-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/caf.c src/sndfile.c
    Add SF_MAX_CHANNELS (set to 256) and use it.

    * src/sndfile.h.in
    Check for either _MSCVER or _MSC_VER being defined.

2009-03-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/vorbis_test.c
    Relax test slighly to allow test to pass on more CPUs etc.

2009-03-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Detect vorbis_version_string() correctly.

2009-03-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Add a 'See Also' section with a link to sndfile-tools.

    * NEWS README doc/*.html
    Updates for 1.0.19 release.

    * configure.ac
    Fix --enable-external-libs logic.

2009-03-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix resource leak and potential read beyond end of buffer.

    * src/nist.c
    Fix reading of header value sample_n_bytes.

    * src/sd2.c src/wav.c
    Fix potential read beyond end of buffer.

    * src/sndfile.c src/svx.c
    Check return values of file_io functions.

    * tests/win32_test.c
    Fix resource leak.

    * configure.ac
    Detect the presence/absence of vorbis_version_string() in libvorbis.

    * src/ogg.c
    Only call vorbis_version_string() from libvorbis if present.

2009-02-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/win32_test.c
    Don't use sprintf, even on windows.

    * src/aiff.c src/rf64.c src/wav.c
    Eliminate dead code, more validation of data read from file.

2009-02-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ima_adpcm.c
    Clamp values to a valid range before indexing ima_step_size array.

    * src/GSM610/*.c tests/*c programs/*.c src/audio_detect.c
    Don't include un-needed headers.

    * programs/sndfile-info.c
    Remove dead code.

    * tests/test_wrapper.sh.in
    Add 'set -e' so the script exits on error.

    * src/test_ima_oki_adpcm.c
    Fix read beyond end of array.

    * tests/win32_test.c
    Add missing close on file descriptor.

    * src/nist.c programs/sndfile-metadata-set.c
    Fix 'unused variable' warnings.

    * src/aiff.c
    Fix potential memory leak in handling of 'MARK' chunk.
    Remove un-needed test (unsigned > 0).

    * src/sd2.c
    Improve handling of heap allocated buffer.

    * src/sndfile.c
    Remove un-needed test (always true).

    * src/wav.c src/rf64.c
    Ifdef out dead code that will be resurected some time in the future.

    * src/wav.c src/w64.c src/xi.c
    Handle error return values from psf_ftell.

    * src/wav_w64.c
    Fix handling and error checking of MSADPCM coefficient arrays.

    * regtest/*.c
    Bunch of fixes.

    * src/test_file_io.c
    Use snprintf instead of strncpy in test program.

2009-02-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sd2.c
    Validate data before using.

    * src/caf.c
    Validate channels per frame value before using, fixing a possible integer
    overflow bug, leading to a possible heap overflow. Found by Alin Rad Pop of
    Secunia Research (CVE-2009-0186).

2009-02-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Octave/octave_test.sh
    Unset TERM environment variable and export LD_LIBRARY_PATH.

2009-02-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    In windows code, cast LPVOID to 'char*' in printf.

2009-02-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * M4/octave.m4
    Clear the TERM environment before evaluating anything in Octave. This works
    around problems that might occur if a users TERM settings are incorrect.
    Thanks to Rob Til Freedmen for helping to debug this.

    * src/wav.c
    Handle four zero bytes as a marker within a LIST or INFO chunk.
    Thanks to Rogério Brito for supplying an example file.

2009-02-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/*.c
    Use C99 snprintf everywhere.

2009-02-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/test_wrapper.sh.in
    New file to act as the template for the test wrapper script.

    * configure.ac
    Generate tests/test_wrapper.sh from the template.

    * tests/Makefile.am
    Replace all tests with a single invocation of the test wrapper script.

2009-02-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ogg.c
    Record vorbis library version string.

    * configure.ac
    Require libvorbis >= 1.2.2.

    * M4/endian.m4
    Fix bracketing of function for autoconf 2.63. Thanks to Richard Ash.

    * M4/octave.m4 M4/mkoctfile_version.m4
    Clean up AC_WITH_ARG usage using AC_HELP_STRING.

2009-02-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Octave/Makefile.am
    Use $(top_buildir) instead of $(builddir) which may not be defined.

    * M4/octave.m4
    Improve logic and status reporting.

2009-02-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac  AUTHORS NEWS README doc/*.html
    Final tweaks for 1.0.18 release.

2009-02-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-convert.c
    Add 'htk' to the list of convert formats.

    * programs/sndfile-info.c
    Simplify get_signal_max using SFC_CALC_SIGNAL_MAX command.
    Increase size of files for which signal max will be calculated.

2009-01-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Fix links for SoX and WavPlay. Thanks to Daniel Griscom.

2009-01-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-metadata-get.c
    Make valgrind clean.
    Clean up temp string array usage.
    Error out if trying to update coding history in RDWR mode.

2009-01-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Fix links to versions of the LGPL.

2008-12-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/string_test.c
    Add test for RDWR mode where the file ends up shorter than when it was
    opened.

    * src/wav.c
    Truncate the file on close for RDWR mode where the file ends up shorter
    than when it was opened.

2008-11-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * M4/add_cflags.m4
    Fix problem with quoting of '#include'.

    * M4/add_cxxflags.m4 configure.ac
    Add new file M4/add_cxxflags.m4 and use it in configure.ac.

2008-11-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-info.c
    Apply patch from Conrad Parker to calculate and display total duration when
    more than one file is dumped.

2008-11-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/Makefile.am
    Tweaks to generation of Symbols files.

    * tests/win32_ordinal_test.c
    Update tests for above changes.

2008-11-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/common.c
    When merging broadcast info, make sure to clear the destination field
    before copying in the new data.

    * programs/test-sndfile-metadata-set.py
    Add test for the above.

    * src/broadcast.c
    Fix checking of required coding_history_size.

2008-10-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/command_test.c
    Add test to detect if coding history is truncated.

    * src/broadcast.c
    Fix truncation of coding history.

2008-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/command_test.c
    Add broadcast_coding_history_size test.

    * programs/*.[ch]
    Use SF_BROADCAST_INFO_VAR to manipulate larger 'bext' chunks.

    * src/rf64.c
    Add code to prevent infinite loop on malformed file.

    * src/common.h src/sndfile.c src/w64.c src/wav_w64.c
    Rationalize and improve error handling when parsing 'fmt ' chunk.

    * M4/octave.m4
    Simplify and remove cruft.
    Check for correct Octave version.

    * Octave/*
    Reduce 3 C++ files to one, fix build for octave 3.0, fix build.

    * Octave/sndfile.cc Octave/PKG_ADD
    Add Octave function sfversion which returns the libsndfile version that the
    module is linked against.

    * Octave/Makefile.am
    Bunch of build and 'make distcheck' fixes.

2008-10-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/common.c
    Return 1 if SFC_SET_BROADCAST_INFO fails.

    * programs/test-sndfile-metadata-set.py
    Update for new programs directory, exit on any error.

    * tests/error_test.c
    Fix failure behaviour in error_number_test.

    * src/common.h src/sndfile.c
    Add error number SFE_BAD_BROADCAST_INFO_SIZE.

    * src/*
    Reimplement handling of broadcast extentioon chunk in WAV/WAVEX files.

    * src/broadcast.c
    Fix generation of added coding history.

2008-10-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * programs/sndfile-metadata-get.c programs/sndfile-info.c
    Exit with non-zero on errors.

2008-10-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-to-text.c examples/Makefile.am
    Add a new example program and hook it into the build.

    * examples/ programs/
    Add a new directory programs and move sndfile-info, sndfile-play and other
    real programs to the new directory, leaving example programs where they
    were.

2008-10-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/Makefile.am
    Automake 1.10 MinGW cross compiling fixes.

2008-10-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Remove call to deprecated function snd_pcm_sw_params_get_xfer_align.
    Fix gcc-4.3 compiler warnings.

    * tests/command_test.c
    Fix a valgrind warning.

    * tests/error_test.c tests/multi_file_test.c tests/peak_chunk_test.c
        tests/pipe_test.tpl tests/stdio_test.c tests/win32_test.c
    Fix gcc-4.3 compiler warnings.

2008-10-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/broadcast.c
    Fix termination of desitination string in strncpy_crlf.
    When copying BROADCAST_INFO chunk, make sure destination gets correct line
    endings.

    * examples/common.c
    Fix copying of BROADCAST_INFO coding_history field.

2008-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/command_test.c
    Add test function instrument_rw_test, but don't hook it into the testing
    yet.

    * src/common.h src/command.c src/sndfile.c src/flac.c
    Error code rationalization.

    * src/common.h src/sndfile.c
    Set psf->error to SFE_CMD_HAS_DATA when adding metadata via sf_command()
    fails due to psf->have_written being true.

    * doc/command.html
    Document the SFC_GET/SET_BROADCAST_INFO comamnds.

2008-10-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/command_test.c
    Improve error reporting when '\0' is found in coding history.
    Fix false failure.

2008-10-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/broadcast.c
    Convert all coding history line endings to \r\n.

    * tests/command_test.c
    Add test to make sure all line endings are converted to \r\n.

2008-10-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/broadcast.c
    Changed the order of coding history fields.

    * tests/command_test.c
    Update bextch test to cope with previous change.

    * examples/common.c
    Add extra length check when copying broadcast info data.

2008-10-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.tpl tests/pcm_test.tpl
    Update check_file_hash_or_die to use 64 bit hash.

    * tests/checksum_test.c tests/Makefile.am
    Add new checksum_test specifically for lossy compression of headerless
    files.

2008-10-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/gsm610.c
    Seek to psf->dataoffset before decoding first block.

    * src/sndfile.c
    Fix detection of mpc2k files on big endian systems.

2008-10-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/broadcast.c
    Use '\r\n' newlines in Coding History as required by spec.

2008-10-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_conversions.c
    Use int64_t instead of 'long long'.

2008-10-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-metadata-set.c
    Remove --bext-coding-history-append command line option because it didn't
    really make sense.

    * examples/sndfile-metadata-(get|set).c
    Add usage messages.

    * examples/test-sndfile-metadata-set.py
    Start work on test coding history.

2008-09-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * README doc/win32.html
    Bring these up to date.

    * src/aiff.c
    Fix parsing of REX files.

2008-09-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Use intptr_t instead of long for return value of _get_osfhandle.

    * src/test_conversions.c src/test_endswap.tpl
    Fix printing of int64_t values.

    * examples/sndfile-play.c
    Fix win64 issues.

    * tests/win32_ordinal_test.c
    Fix calling of GetProcAddress with ordinal under win64.

    * tests/utils.tpl
    Fix win64 issues.

2008-09-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/*
    Rename copy_data.[ch] to common.[ch]. Fix build.
    Move code from sndfile-metadata-set.c to common.c.

    * examples/Makefile.am tests/Makefile.am regtest/Makefile.am
    Clean paths.

2008-09-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/tutorial.html doc/Makefile.am
    Add file doc/tutorial.html and hook into build/dist system.

2008-09-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-metadata-set.c
    Clean up handling of bext command line params.

2008-09-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/w64.c
    Add handling/skipping of a couple of new chunk types.

2008-09-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add -funsigned-char to CFLAGS if the compiler supports it.

    * examples/sndfile-metadata-(get|set).c
    Add handling for more metadata types.

2008-09-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add macros SF_CONTAINER, SF_CODEC and SF_ENDIAN useful for splitting format
    field of SF_INFO into component parts.

    * src/*.c
    Use new macros everywhere it is appropriate.

2008-09-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-bwf-set.c
    Massive reworking.

2008-08-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-bwf-set.c
    Add --info-auto-create-date command line option.

    * examples/sndfile-metadata-set.c examples/sndfile-metadata-get.c
        examples/Makefile.am examples/test-sndfile-bwf-set.py
    Rename sndfile-bwf-(set|get).c to sndfile-metadata-(set|get).c.
    Change command line args.

2008-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Allow 'PAD ' chunk to be modified in RDWR mode.

    * src/sndfile.h.in src/sndfile.c
    Add handling (incomplete) for SFC_SET_ADD_HEADER_PAD_CHUNK.

    * tests/Makefile.am tests/write_read_test.tpl tests/header_test.tpl
        tests/misc_test.c
    Add tests for RF64.

    * src/rf64.c
    Fixes to make sure all tests pass.

    * tests/Makefile.am tests/string_test.c
    Add string tests (not yet passing).

2008-08-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/rf64.c
    First pass at writing RF64 now working.

2008-08-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Add SF_FORMAT_RF64 to format_map.

    * src/common.h src/sndfile.c
    More RF64 support code.

    * examples/sndfile-bwf-set.c
    Fix the month number in autogenerated date string and use hypen in date
    instead of slash.

    * examples/test-sndfile-bwf-set.py
    Update tests.

    * examples/sndfile-info.c
    When called with -i or -b option, operate on all files on command line, not
    just the first.

2008-08-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/rf64.c
    New file to handle RF64 (WAV like format supportting > 4Gig files).

    * src/sndfile.h.in src/common.h src/sndfile.c src/Makefile.am
    Hook the above into build so hacking can begin.

    * src/pcm.c
    Improve log message when pcm_init fails.

    * src/sndfile-info.c
    Only calculate and print 'Signal Max' if file is less than 10 megabytes in
    length.

2008-08-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/string_test.c
    Polish string_multi_set_test.

    * src/wav.c
    In RDWR mode, pad the header if necessary (ie LIST chunk has moved or
    length has changed).
    Minor fixes in wav_write_strings.
    Write PAD chunk with default endian-ness, not a specific endian-ness.

    * examples/test-sndfile-bwf-set.py
    Add Python script to test sndfile-bwf-set/get.

    * examples/sndfile-bwf-set.c
    Clean up and fixes.

    * src/wav.c
    Merge function wavex_write_header into wav_write_header, deleting about 70
    lines of code.

    * src/common.h
    Double value of SF_MAX_STRINGS.

    * tests/string_test.c
    Add string tests for WAVEX and RIFX files.

    * tests/command_test.c
    Add broadcast test for WAVEX files.

2008-08-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/string_test.c
    Add a new string_rdwr_test (currently failing for WAV).
    Add a new string_multi_set_test (currently failing).

    * tests/command_test.c
    Add new broadcast_rdwr_test (currently failing).

    * src/wav.c
    Fix to WAV parser to allow 'bext' chunk to be updated in place.
    In wav_write_tailer, seek to psf->dataend if its greater than zero.

    * src/sndfile.c
    Make sure psf->have_written gets set correctly in mode SFM_RDWR.

    * configure.ac
    Test for <sys/time.h> and gettimeofday.

    * src/common.c
    Use gettimeofday() to initialize psf_rand_int32.

    * src/common.h src/sndfile.c
    Add unique_id field to SF_PRIVATE struct.

    * src/common.h src/sndfile.c src/wav.c src/wav_w64.[ch]
    Move wavex_ambisonic field from SF_PRIVATE struct to WAV_PRIVATE struct.

    * src/common.h src/strings.c
    Add function psf_location_string_count.

2008-08-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Test for localtime and localtime_r.

    * examples/sndfile-convert.c
    In function copy_metadata(), copy broadcast info if present.

    * examples/copy_data.[ch] examples/Makefile.am
    Break some functionality out of sndfile-convert.c so it can be used in
    examples/sndfile-bwf-set.c.

    * tests/utils.tpl
    Add new function create_short_sndfile().

    * examples/sndfile-bwf-set.c examples/sndfile-bwf-get.c
        examples/Makefile.am
    Add new files and hook into build.

2008-08-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Fix comments. Patch from Mark Glines.

2008-07-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Use zero_data_test on Ogg/Vorbis files.

    * src/ogg.c
    Fix segfault when closing an Ogg/Vorbis file that has been opened for write
    but had no actual data written to it. Bug reported by Chinoy Gupta.

    * tests/Makefile.am
    Make sure to run mist_test on Ogg/Vorbis files.

2008-07-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * regtest/Makefile.am
    Use SQLITE3_CFLAGS to locate sqlite headers.

2008-07-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html doc/FAQ.html
    Add notes about which versions of windows libsndfile works on.

2008-07-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Add a test for correct handling of Ambisonic files. Thanks to Fons
    Adriaensen for the test.

    * src/wav.c src/wav_w64.c
    Fix handling of Ambisonic files. Thanks to Fons Adriaensen for the patch.

2008-06-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fix detection/enabling of external libs.

    * M4/extra_pkg.m4 M4/Makefile.am
    Add m4 macro PKG_CHECK_MOD_VERSION which is a hacked version
    PKG_CHECK_MODULES. The new macro prints the version number of the package
    it is searching for.

2008-06-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Apply a fix from Axel Röbel where if the second loop in the instrument
    chunk is none, the loop mode is written into the first loop.

2008-05-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_float.c src/test_main.(c|h) src/Makefile.am
    Add new file to test functions float32_(le|be)_(read|write) and
    double64_(le|be)_(read|write). Hook into build and testsuite.

    * src/double64.c src/float32.c
    Fix bugs in functions found by test added above. Thanks to Nicolas Castagne
    for reporting this bug.

    * src/sndfile.h.in
    Change time_reference_(low|high) entries of SF_BROADCAST_INFO struct to
    unsigned.

    * examples/sndfile-info.c
    Print out the BEXT time reference in a sensible format.

2008-05-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Fuzz fixes.

    * src/ogg.c
    Add call to ogg_stream_clear to fix valgrind warning.

    * src/aiff.c
    Fix x86_64 compile issue.

    * configure.ac src/Makefile.am src/flac.c src/ogg.c
    Link to external versions of FLAC, Ogg and Vorbis.

    * tests/lossy_comp_test.c tests/ogg_test.c tests/string_test.c
        tests/vorbis_test.c tests/write_read_test.tpl
    Fix tests when configured with --disable-external-libs.

    * tests/external_libs_test.c tests/Makefile.am
    Add new test and hook into build and test suite.

    * src/command.c
    Use HAVE_EXTERNAL_LIBS to ensure that the SFC_GET_FORMAT_* commands return
    the right data when external libs are disabled.

2008-05-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl
    Add a test for extending a file during write by seeking past the current
    end of file.

    * src/sndfile.c
    Allow seeking past end of file during write.

2008-05-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html doc/command.html
    Move all information about the sf_command function to command.html and add
    a link from documentation of the sf_read/write_raw function to the
    SFC_RAW_NEEDS_ENDSWAP command.

    * doc/index.html doc/FAQ.html doc/libsndfile.css
    Minor documentation tweaks.

2008-05-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add AM_PROG_CC_C_O.

2008-04-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/error_test.c
    Add a test to make sure if file opened with sf_open_fd, and then the file
    descriptor is closed, then sf_close will return an error code. Thanks to
    Dave Flogeras for the bug report.

    * src/sndfile.c
    Make sf_close return an error is the file descriptor is already closed.

2008-04-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Set object format to aout for OS/2. Thanks to David Yeo.

    * src/mpc2k.c src/sndfile.c src/sndfile.h.in src/common.h src/Makefile.am
    Add ability to read MPC 2000 file.

    * tests/write_read_test.tpl tests/misc_test.c tests/header_test.tpl
        tests/Makefile.am
    Add tests for MPC 2000 file format.

    * examples/sndfile-convert.c
    Allow conversion to MPC 2000 file format.

2008-04-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/VORBIS/lib/codebook.c
    Sync from upstream SVN.

    * autogen.sh configure.ac
    Minor tweaks.

2008-04-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ogg.c
    Add a patch that fixes finding the length in samples of an Ogg/Vorbis file.
    The patch as supplied segfaulted and required many hours of debugging.

    * src/OGG/bitwise.c
    Sync from upstream SVN.

2008-04-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix up handling of 'APPL' chunk. Thanks to Axel Röbel for bringing up
    this issue.

2008-04-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/*.c
    Add calls to sf_close() where needed.

    * tests/utils.tpl tests/multi_file_test.c
    Always pass 0 as the third argument to open when OS_IS_WIN32.

2008-04-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_*
    Add files test_main.[ch].
    Collapse all tests into a single executable.

2008-03-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC
    Sync to upstream CVS.

2008-03-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Make SF_MIN and SF_MAX macros MinGW friendly.

    * examples/sndfile-(info|play).c
    Use Sleep function from <windows.h> instead of _sleep.

    * tests/locale_test.c
    Disable some tests when OS_IS_WIN32.

    * src/FLAC/src/share/replaygain_anal/replaygain_analysis.c
        src/FLAC/src/share/utf8/utf8.c
    MinGW fixes.

2008-03-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Tweaks to pcm16 <-> float conversion answer.

2008-02-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/OGG
    Sync to SVN upstream.

    * Makefile.am
    Add 'DISTCHECK_CONFIGURE_FLAGS = --enable-gcc-werror'.

2008-02-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-jackplay.c
    Minor tweaks to warning message printed when compiled without libjack.

2008-01-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/peak_chunk_test.c
    Improve read_write_peak_test to find more errors. Inspired by example
    provided by Nicolas Castagne.

    * src/aiff.c
    Another SFM_RDWR fix shown up by above test.

2008-01-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix reading of COMM encoding string.

    * src/chunk.c src/common.h src/Makefile.am
    New file for storing and retrieving info about header chunks. Hook into
    build.

    * src/aiff.c
    Use new chunk logging to fix problem with AIFF in RDWR mode.

2008-01-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/command.c
    Add WVE to the list of major formats.

    * tests/aiff_rw_test.c
    Fix error reporting.

2008-01-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.[ch]
    Add internal functions str_of_major_format, str_of_minor_format,
    str_of_open_mode and str_of_endianness.

    * tests/write_read_test.tpl
    Fix reporting of errors in new_rdwr_XXXX_test.

2008-01-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Apply patch from Yair K. to fix compiles with OSS v4.

    * src/common.h src/float32.c src/double64.c
    Rename psf->float_enswap to psf->data_endswap.

    * src/sndfile.h.in src/sndfile.c src/pcm.c
    Add command SFC_RAW_NEEDS_ENDSWAP.

    * tests/command.c
    Add test for SFC_RAW_NEEDS_ENDSWAP.

    * doc/command.html
    Document SFC_RAW_NEEDS_ENDSWAP.

    * tests/peak_chunk_test.c
    Add test function read_write_peak_test. Thanks to Nicolas Castagne for the
    bug report.

2008-01-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-cmp.c
    Add new example program contributed by Conrad Parker.

    * examples/Makefile.am
    Hook into build.

    * doc/development.html
    Change use or reconfigure.mk to autogen.sh.

2008-01-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/win32_test.c
    Add another win32 test.

    * tests/util.tpl
    Add function file_length_fd which wraps fstat.

    * tests/Makefile.am
    Run the multi_file_test on AU files.

    * tests/multi_file_test.c
    Use function file_length_fd() instead of file_length() to overcome stupid
    win32 bug. Fscking hell Microsoft sucks so much.

2008-01-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sd2.c
    Fix a rsrc parsing bug. Example file supplied by Uli Franke.

2007-12-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Allow use of either LGPL v2.1 or LGPL v3.

    * tests/header_test.tpl
    Add header_shrink_test from Axel Röbel.

    * src/wav.c
    Add fix from Axel Röbel for writing files with float data but no peak
    chunk (ie peak chunk gets removed after the file is opened).

    * src/aiff.c tests/header_test.tpl
    Apply similar fix to above for AIFF files.

    * src/wav.c tests/header_test.tpl
    Apply similar fix to above for WAVEX files.

    * src/command.c
    Add Ogg/Vorbis to 'get format' commands.

2007-12-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ogg.c
    Fix seeking on multichannel Ogg Vorbis files. Reported by Bodo.
    Set the default encoding quality to 0.4 instead of 4.0 (Bodo again).

    * tests/ogg_test.c
    Add stereo seek tests.

2007-12-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/ogg_test.c
    Add a test (currently failing) for stereo seeking on Ogg Vorbis files. Test
    case supplied by Bodo.

    * tests/utils.(def|tpl)
    Add compare_XXX_or_die functions.

2007-12-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix a bug where ignoring ssnd_fmt.offset and ssnd_fmt.blocksize caused
    misaligned reading of 24 bit data. Thanks to Uli Franke for reporting this.

2007-12-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/vox_adpcm.c src/ima_oki_adpcm.[ch] src/Makefile.am
    Merge in code from the vox-patch branch. Thanks to Robs for the patch
    which fixes a long standing bug in the VOX codec.

2007-12-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Fix handling of -override-sample-rate=X option.

2007-11-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ogg.c src/VORBIS
    Merge in Ogg Vorbis support from John ffitch of the Csound project.

2007-11-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Recognise files with 'vox6' extension as 6kHz OKI VOX ADPCM files. Also
    recognise 'vox8' as and 'vox' as 8kHz files.

    * configure.ac
    Detect libjack (JACK Audio Connect Kit).

    * examples/sndfile-jackplay.c examples/Makefile.am
    Add new example program to play sound files using the JACK audio server.
    Thanks to Jonatan Liljedahl for allowing this to be included.

2007-11-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Update support table with SD2 and FLAC.

2007-11-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fix calculation of internal value psf->read_current when attempting to read
    past end of audio data.
    Remove redundant code.

    * tests/lossy_comp_test.c
    Add read_raw_test to check that raw reads do not go past the end of the
    audio data section.
    Clean up error output messages.

    * src/sndfile.c
    Add code to prevent sf_read_raw from reading past the end of the audio data.

    * tests/Makefile.am
    Add the wav_pcm lossy_comp_test.

2007-11-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/Makefile.am src/create_symbols_file.py
    More OS/2 fixes from David Yeo.

2007-11-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c tests/utils.tpl tests/benchmark.tpl
    Improve handling of requirements for O_BINARY as suggested by Ed Schouten.

2007-11-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Fix symbol class when SF_MIN is nested inside SF_MAX or vice versa.

    * src/create_symbols_file.py
    Add support for OS/2 contributed by David Yeo.

2007-11-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * M4/gcc_version.m4
    Add macro AC_GCC_VERSION to detect GCC_MAJOR_VERSION and GCC_MINOR_VERSION.

    * configure.ac
    Use AC_GCC_VERSION to work around gcc-4.2 inline warning stupidity.
    See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33995
    Use -fgnu-inline to prevent stupid warnings.

2007-11-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/util.tpl
    Increase the printing width for print_test_name().

    * tests/command_test.c tests/Makefile.am
    Add tests for correct updating of broadcast WAV coding history.

    * examples/sndfilehandle.cc examples/Makefile.am
    Add example program using the C++ SndfileHandle class.

2007-10-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/sndfile.c
    Add error codes SFE_ZERO_MAJOR_FORMAT and SFE_ZERO_MINOR_FORMAT.

2007-10-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sd2.c
    Identify sample-rate/sample-size/channels by resource id.

2007-10-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/broadcast.c src/common.h src/sndfile.c
    Improvements to handling of broadcast info in WAV files. Thanks to Frederic
    Cornu and other for their input.

2007-10-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC/include/share/alloc.h
    Mingw fix for SIZE_T_MAX from Uli Franke.

2007-10-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/open_fail_test.c tests/error_test.c tests/Makefile.am
    Move tests from open_fail_test.c to error_test.c and remove the former.

2007-10-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/scale_clip_test.(def|tpl)
    Add tests for SFC_SET_INT_FLOAT_WRITE command.

    * doc/command.html
    Add docs for SFC_SET_INT_FLOAT_WRITE command.

    * examples/sndfile-play.c tests/dft_cmp.c
    Fix gcc-4.2 warning messages.

2007-10-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c
    Add command SFC_GET_CURRENT_SF_INFO.

    * src/sndfile.h.in src/sndfile.c src/create_symbols_file.py
    Remove function sf_get_info (only ever in pre-release code).

    * tests/command_test.c
    Add test for SFC_GET_CURRENT_SF_INFO.

2007-10-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Add parsing of 'exif' chunks. Originally coded by Trent Apted.

    * configure.ac
    Put config stuff in Cfg directory.
    Remove check for inttypes.h.

2007-10-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/w64.c
    Fix writing of 'riff' chunk length and check for correct value in parser.

2007-09-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Link to MP3 FAQ entry.

2007-09-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Move the blocksize check to an earlier stage of flac_buffer_copy.

2007-09-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC
    Huge merge from FLAC upstream.

2007-09-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/*.c
    Change license to all example programs to BSD.

2007-09-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC/include/FLAC/metadata.h
    Include <sys/types.h> to prevent compile error on OSX.

    * Octave/octave_test.sh
    Disable test on OSX. Can't get it to work.

    * src/flac.c
    Check the blocksize returned from the FLAC decoder to prevent buffer
    overruns. Reported by Jeremy Friesner. Thanks.

2007-09-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Makefile.am M4/octave.m4
    Fix build when Octave headers are not present.

2007-08-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/development.html
    Add note about bzr repository directory looking empty.

2007-08-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac Octave/* M4/octave_*
    Bunch of changes to add ability to build GNU Octave modules to read/write
    sound files using libsndfile from Octave.

2007-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * acinclude.m4 configure.ac ...
    Get rid of acinclude.m4 and replace it with an M4 directory.

2007-08-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Remove crufty Metrowerks compiler support. Allow header file to be compiled
    on windows with both GCC and microsoft compiler.

2007-08-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/dft_cmp.[ch] tests/floating_point_test.tpl
    Clean up floating point tests.

2007-08-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix segfault when COMM chunk length is byte swapped.

2007-08-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/mat4.c src/mat5.c src/sndfile.c
    Add a generic SFE_CHANNEL_COUNT_ZERO error, remove format specific errors.

    * src/au.c
    Fix crash on AU files with zero channel count. Reported by Ben Alison.

2007-08-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/voc.c
    Fix bug in handling file supplied by Matt Olenik.

2007-07-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/OGG
    Merge from OGG upstream sources.

2007-07-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC
    Merge from FLAC upstream sources.

2007-07-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Fix memory leak; set copy parameter to FALSE in call to
    FLAC__metadata_object_vorbiscomment_append_comment.

    * src/common.[ch]
    Add function psf_rand_int32().

2007-07-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC
    Merge from FLAC upstream sources.

    * src/strings.c tests/string_test.c tests/Makefile.am
    Make sure string tests for SF_STR_LICENSE actually works.

2007-07-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/string_test.c
    Add ability to test strings stored in metadata secion of FLAC files.

    * src/string.c
    Fix logic for testing if audio data has been written and string is added.
    Make sure SF_STR_ALBUM actually works.

    * src/flac.c
    Finalize reading/writing string metadata. Tests pass.

    * src/sndfile.h.in tests/string_test.c src/flac.c
    Add string type SF_STR_LICENSE, update test and use for FLAC files.

    * src/sndfile.h.in
    Add definition for SFC_SET_SCALE_FLOAT_INT_WRITE command.

    * src/common.h src/double64.c src/float32.c src/sndfile.c
    Add support for SFC_SET_SCALE_FLOAT_INT_WRITE (still needs testing).

2007-07-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Apply patch from Ed Schouten to read artist and title metadata from FLAC
    files.
    Improve reporting of FLAC metadata.

    * src/sndfile.h.in tests/string_test.c src/flac.c
    Add string type SF_STR_ALBUM, update test and use for FLAC files.

2007-06-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC/*
    Merge from upstream CVS.

2007-06-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC/*
    Update from upstream CVS.

2007-06-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/cpp_test.cc
    Add extra tests for when the SndfileHandle constructor fails.

    * src/sndfile.hh
    Make sure failure to open the file in the constructor does not allow later
    calls to other methods to fail.

2007-06-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/util.tpl
    Add function write_mono_file.

    * tests/generate.[ch] tests/Makefile.am
    Add files generate.[ch] and hook into build.

    * tests/write_read_test.tpl
    Add multi_seek_test.

    * src/flac.c
    Fix buffer overflow bug. Test provided by Jeremy Friesner and fix provided
    by David Viens.

2007-06-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Minor update.

    * configure.ac src/FLAC/src/libFLAC/ia32/Makefile.am src/Makefile.am
    Apply patch from Trent Apted make it compile on Intel MacOSX. Thanks Trent.

2007-05-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fix writing of MSGUID subtypes. Thanks to Bruce Sharpe.

2007-05-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fix array indexing bug raised by Bruce Sharpe.

2007-05-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC/src/share/getopt/getopt.c
    Fix Mac OSX / PowerPC compile warnings.

    * configure.ac
    Make sure WORDS_BIGENDIAN gets correctly defined for FLAC code.

2007-05-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Add Q/A about MP3 support.

2007-05-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/new_file_type.HOWTO
    Minor updates.

2007-05-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wve.c
    Fix a couple bad parameters with psf_log_printf.

    * src/pcm.c
    Improve error reporting.

    * src/common.h src/common.c
    Constify psf_hexdump.

2007-04-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC
    Ditch and re-import required FLAC code.

    * configure.ac
    Force FLAC__HAS_OGG variable to 1.

    * src/FLAC/src/libFLAC/stream_encoder.c
    Fix compiler warnings.

2007-04-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac tests/win32_ordinal_test.c
    Detect if win32 DLL is beging generated and only run win32_ordinal_test if
    true.

    * src/G72x/Makefile.am src/Makefile.am
    Use $(EXEEXT) where possible.

2007-04-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wve.c src/common.h src/sndfile.c
    Complete definition of SfE_WVE_NO_WVE error message.

    * src/wve.c
    Fix error in files generated on big endian systems. Robustify parsing.

2007-04-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/double64.c
    Fix clipping of double to short conversions on 64 bit systems.

    * src/flac.c regtest/database.c tests/cpp_test.cc
    Fix compile warnings for 64 bit systems.

2007-04-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/wav_w64.c
    Use audio detect function when 'fmt ' chunk data is suspicious.

    * configure.ac
    Add ugly hack to remove -Werror from some Makefiles.

2007-04-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/GSM610/long_term.c src/macbinary3.c tests/cpp_test.cc
    Add patch from André Pang to clean up compiles on OSX.

    * src/wve.c src/common.h src/sndfile.c src/sndfile.h.in
        examples/sndfile-convert.c
    Merge changes from Reuben Thomas to improve WVE support.

    * tests/lossy_comp_test.c tests/Makefile.am
    Add tests for WVE files.

2007-04-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Add a static SndfileHandle::formatCheck method as suggested by Jorge
    Jiménez.

2007-04-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed a bug in sf_error() where the function itself was being compared
    against zero. Add a check for a NULL return from peak_info_calloc. Fix a
    possible NULL dereference.

2007-04-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Turn off seekable flag when writing, return SFE_BAD_RDWR_FORMAT when
    opening file for RDWR.

    * src/sndfile.c
    Improve error message for SFE_BAD_RDWR_FORMAT.

    * src/mat4.c
    Fix array indexing issue. Thanks to Ben Allison (Nullsoft) for alerting me.

2007-03-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Add Q/A 19 on project files.

2007-03-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Guard agains MacOSX universal binary compiles.

    * doc/FAQ.html
    Add Q/A 18 and clean up Q3.

2007-02-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Add support for 'in24' files.

2007-02-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/wav_w64.c src/wav_w64.h
    Start work towards detecting ausio codec type from the actual audio data.

    * src/audio_detect.c src/test_audio_detect.c
    Add new file and its unit test.

2007-02-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/cooledit-fixer.c examples/Makefile.am
    Remove old broken example program.

2007-02-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py
    Add function sf_get_info.

2007-01-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    For ALSA, use the 'default' device instead of 'plughw:0'.

2007-01-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Allow writing of WAV/WAVEX 'BEXT' chunks in SFM_RDWR mode.

2007-01-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/development.html doc/embedded_files.html man/sndfile-play.1
    Minor documentation fixes. Thanks Reuben Thomas.

2006-12-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Add -override-sample-rate command line option.

2006-11-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Force errno to zero at start of some tests.

    * src/sndfile.c
    Minor clean up of error handling.

    * configure.ac
    Remove an assembler test which was failing on OSX.

2006-11-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Fix the definition of SF_PLATFORM_S64 for MinGW.

    * src/FLAC/Makefile.am src/FLAC/share/grabbag/Makefile.am
    Fix path problems for MinGW.

2006-11-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sfendian.h
    Add include guard.

    * src/Makefile.am src/flac.c
    Clean up include paths.

    * src/test_conversions.c
    New file to test psf_binheader_readf/writef functions.

    * src/Makefile.am src/test_file_io.c src/test_log_printf.c src/common.c
    Clean up unit testing.

    * src/common.c
    Fix a bug reading/writing 64 bit header fields. Thanks to Jonathan Woithe
    for reporting this.

    * src/test_conversions.c
    Complete unit test for above fix.

2006-11-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    More refactoring to clean up psf_open_file() and vairous sf_open()
    functions.

2006-11-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Apply a patch from Jonathan Woithe to allow opening of (malformed) WAV
    files of over 4 gigabytes.

2006-11-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Refactor function psf_open_file() to provide a single return point.

    * tests/misc_test.c
    Fix permission_test to ensure that read only file can be created.

2006-11-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add SF_PLATFORM_S64 macro as a platform independant way of doing signed 64
    bit integers.

    * src/aiff.c src/svx.c src/wav.c
    Add warning in log if files are larger than 4 gigabytes in size.

2006-11-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/FLAC src/OGG confgure.ac src/Makefile.am
    Pull in all required FLAC and OGG code so external libraries are not
    needed. This makes compiling on stupid fscking Windoze easier.

2006-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sd2.c
    Add workaround for switched sample rate and sample size.

    * src/wav.c
    Add workaround for excessively long coding history in the 'bext' chunk.

2006-10-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c src/wav.c doc/command.html
    Use SF_AMBISONIC_* instead of SF_TRUE/SF_FALSE.

2006-10-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/wav.c src/wav_w64.c src/common.h doc/command.html
    Apply a patch from Fons Adriaensen to allow writing on WAVEX Ambisonic
    files. Still needs a little tweaking before its ready for release.

    * src/*.c
    Use the UNUSED macro to prevent compiler warnings.

2006-10-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix a bug in parsing AIFF files with a slightly unusual 'basc' chunk. Thanks
    to David Viens for providing two example files.

    * src/common.(c|h) src/aiff.c
    Add a function psf_sanitize_string and use it in aiff.c.

2006-10-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_w64.c
    Apply a patch from Fons Adriaensen which fixes a minor WAVEX GUID issue.

2006-10-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/Makefile.am
    Fix problem related to recent test coverage changes.

2006-10-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac tests/Makefile.am
    Add --enable-test-coverage configure option.

2006-10-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Add an std::string SndfileHandle constructor.

    * tests/scale_clip_test.tpl
    Fix the 'make distcheck' target.

2006-10-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/double64.c src/float32.c
    Add optional clipping on float file data to int read data conversions.

    * tests/tests/scale_clip_test.(def|tpl)
    Add test for above new code.

2006-09-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/aiff_rw_test.c
    Add 'MARK' chunks to make sure they are parsed correctly.

2006-09-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix parsing of MARK chunks. Many thanks to Sciss for generating files to
    help debug the problem.

2006-09-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Make the SF_MIN and SF_MAX macros at least partially type safe.

    * tests/lossy_comp_test.c
    Fix overflow problems when ensuring that signalis not zero.

2006-08-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac docs/*.html
    Changes for release 1.0.17.

2006-08-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Remove inline from functions called by pointer. Thanks to Sampo Savolainen
    for notifying me of this.

2006-07-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Add writeSync method.
    Add copy constructor and assignment operator (thanks Daniel Schmitt).
    Add methods readRaw and writeRaw.
    Make read/write/readf/writef simple overlaods instead of templates (thanks
    to Trent Apted for suggesting this).

    * tests/cpp_test.cc
    Cleanup. Add tests.

2006-07-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Templatize the read/write/readf/writef methods as suggested by Lars Luthman.
    Prevent the potential leak of SNDFILE* pointers in the openRead/openWrite/
    openReadWrite methods.
    Add const to SF_INFO pointer in Sndfile constructor.
    Make the destrictor call the close() method.

    * tests/cpp_test.cc
    Add more tests.

2006-07-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/cpp_test.cc
    Remove the generated file so "make distcheck" passes.

    * src/Makefile.am
    Add sndfile.hh to distributed header files.

    * src/sndfile.hh
    Change the license for the C++ wrapper to modified BSD.

2006-07-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.hh
    Complete it.

    * tests/cpp_test.cc
    Add more tests.

2006-07-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.tpl
    Add extern C to generated header file.

    * src/sndfile.hh
    Work towards completing this.

    * tests/cpp_test.cc tests/Makefile.am
    Add a C++ test and hook into build.

    * configure.ac
    Add appropriate CXXFLAGS.

2006-07-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Test if compiler supports -Wpointer-arith.

    * src/common.c
    Fix a warning resulting from -Wpointer-arith.

2006-07-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Explicitly set endian-ness as well as setting 16 bit output.

    * examples/sndfile-info.c
    Make sure to parse info if file fails to open.

    * src/sndfile.c
    Handle parse error a little better.

    * src/wav_w64.[ch]
    Minor clean up, add detection of IPP ITU G723.1.

2006-06-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Make sure psf->dataoffset gets reset to zero when openning headersless
    files based on the file name extension.

2006-06-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/(command|lossy_comp|pcm|scale_clip)_test.c tests/fix_this.c
        tests/write_read_test.(tpl|def)
    Fix gcc-4.1 compiler warnings about "dereferencing type-punned pointer will
    break strict-aliasing rules".

    * examples/cooledit-fixer.c
    More fixes like above.

2006-06-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Fix a windows bug where the syserr string of SF_PRIVATE was not being set
    correctly.

    * src/sndfile.c
    Fixed a logic bug in sf_seek(). Thanks to Paul Davis for finding this.

2006-06-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fixed detection of S_IRGRP.

2006-05-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * sndfile-convert.c
    Add conversion SF_INSTRUMENT data when present.

2006-05-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/development.html
    Removed references to tla on windows.

    * src/common.h src/sndfile.c
    Add separate void pointers for file containter and file codec data to
    SF_PRIVATE struct. Still need to move all existing fdata pointers.

    * tests/write_read_test.tpl
    Change the order of some tests.

    * src/aiff.c
    When writing 'AIFC' files, make sure get an 'FVER' gets added.

    * src/common.h src/(dwvw|flac|g72x|gsm610|ima_adpcm|ms_adpcm|paf|sds).c
        src/(sndfile|voc|vox_adpcm|xi).c
    Remove fdata field from SF_PRIVATE struct and replace it with codec_data.

2006-05-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/testprog.c Win32/Makefile.am
    Add a minimal win32 test program.

    * Win32/README-precompiled-dll.txt Mingw-make-dist.sh
    Update readme and Mingw build script.

2006-05-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac acinclude.m4
    Minor fixes for Solaris.

2006-05-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_endswap.(def|tpl)
    Fix printf formatting for int64_t on 64 bit machines.

2006-05-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/binhead_check.py
    New file to check for bad parameters passed to psf_binheader_writef().

    * src/Makefile.am
    Hook into test suite.

    * src/voc.c src/caf.c src/wav.c src/mat5.c src/mat4.c
    Fix bugs found by new test program.

    * src/double64.c
    Clean up double64_get_capability().

2006-05-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_w64.c
    Fix a bug on x86_64 where an int was being passed via stdargs and being
    read using size_t which is 64 bits. Thenks to John ffitch for giving me a
    login on his box.

2006-05-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/caf.c src/double64.c examples/sndfile-info.c tests/virtual_io_test.c
            tests/utils.tpl
    Fix a couple of signed/unsigned problems.

2006-05-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/command_test.c
    Add channel map tests.

    * src/common.h src/sndfile.c
    Add a pointer the the SF_PRIVATE struct and make sure it gets freed in
    sf_close().

2006-04-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac doc/(command|index|api).html NEWS README
    Updates for 1.0.16 release.

    * src/sndfile.h.in
    Define enums for channel mapping.

    * examples/sndfile-info.c
    Clean up usage of SF_INFO struct.

2006-04-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/util.tpl
    Add function testing function exit_if_true().

    * tests/floating_point_test.tpl
    Fix a problem where the test program was not exiting when the test failed.

2006-04-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c src/common.h src/command.c
    Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS.

    * doc/commands.html
    Document new commands. Other minor updates.

    * tests/peak_chunk_test.c
    Update tests for new commands.

2006-04-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/peak_chunk_test.c
    Add test for RIFX and WAVEX files.
    Try and confuse the PEAK chunk writing by enabling and disabling it.

    * src/sndfile.c
    Fix a bug where enabling and disabling PEAK chunk was screwing up.

2006-03-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Add the block of 190 reserved bytes into this struct to allow for
    future expansion.

    * src/wav.c src/sndfile.c src/broadcast.c
    Significant cleanup of broadcast wave stuff.

    * examples/sndfile-info.c
    Fix print message.

    * tests/command_test.c tests/Makefile.am
    Complete bext tests, hook test in test suite.

2006-03-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Make coding_history field of SF_BROADCAST_INFO struct a char array instead
    of a char pointer.

    * src/sndfile.c src/common.h src/wav.c
    Clean up knock on effects of above chnage.

    * examples/sndfile-info.c
    Add -b command line option to usage message.
    Clean up output of broadcast wave info.

    * src/wav.c
    Ignore and skip the 'levl' chunk.

2006-03-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fix handling of --enable and --disable configure args. Thanks to Diego
    'Flameeyes' Pettenò who sent the patch.

2006-03-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/win32.html
    Make it really clear that although the MSVC++ cannot compile libsndfile,
    the precompiled DLL can be used in C++ programs compiled with MSVC++.

2006-03-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix bug in writing of INST chunk in AIFF files.
    Fix potential bug in writing MARK chunks.

    * src/sndfile.c
    Make sure the instrument chunk can only be written at the start of the file.

    * tests/command_test.c
    Add check of log buffer.

    * tests/utils.tpl
    Add usage of space character to psf_binheader_writef.

2006-03-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/Makefile.am tests/Makefile.am
    Remove --source-time argument from autogen command lines.

    * src/broadcast.c
    New file for EBU Broadcast chunk in WAV files.

    * src/sndfile.c src/sndfile.h.in src/wav.c src/common.h
    Add patch from Paul Davis implementing read/write of the BEXT chunk.

2006-03-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/README-precompiled-dll.txt
    New file descibing how to use the precompiled DLL.

    * Win32/Makefile.am
    Add Win32/README-precompiled-dll.txt to EXTRA_DIST files.

    * configure.ac
    Bump version to 1.0.15.

2006-03-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    On read, only add the endian flag if the file is big endian.

    * src/ms_adpcm.c
    Fixed writing of APDCM coeffs in RIFX files.

    * tests/write_read_test.tpl tests/lossy_comp_test.c
    Add tests for RIFX files.

2006-03-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Mingw-make-dist.sh
    Bunch of improvements.

    * doc/win32.html
    Update MinGW program versions.

2006-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/create_symbols_file.py
    Fix the library name in created win32 DEF file. Add correct DLL name for
    Cygwin DLL.

    * Win32/Makefile.am tests/Makefile.am
    Remove redundant files, add win32_ordinal_test to test suite.

    * tests/win32_ordinal_test.c
    Update to do test in cygsndfile-1.dll as well.

    * doc/win32.html
    Fix typo, mention that -mno-cygwin with the Cygwin compiler does not work.

    * src/wav.c src/wav_w64.c src/sndfile.c src/sndfile.h.in
    Apply large patch from Jesse Chappell which adds support for RIFX files.

2006-03-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Makefile.am
    Add Mingw-make-dist.sh to the extra dist files.

    * configure.ac
    Fix setting SHLIB_VERSION_ARG for MinGW.

    * tests/win32_ordinal_test.c
    New test program to test that the win32 DLL ordinals agree with the DEF
    file.

2006-03-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add a static inline function to convert an int to a size_t. This will be
    a compile to nothing on 32 bit CPUs and a sign extension on 64 bit CPUs.

    * src/aiff.c src/avr.c src/common.c src/xi.c src/gsm610.c
    Fix an ia64 problem where a varargs function was being passed an int in
    some places and a size_t in other places.

    * src/sd2.c
    Add a workaround for situations where OSX seems to add an extra 0x52 bytes
    to the start of the resource fork.

2006-02-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Mingw-make-dist.sh
    Add a shell script to build the windows binary/source ZIP file.

    * doc/index.html
    Add download link for windows binary/source ZIP file. Add links for GPG
    signatures.

    * doc/win32.html
    Remove info about building using microsoft compiler.

    * configure.ac
    Bump version to 1.0.14.

2006-02-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sd2.c
    Improve logging of errors in resource fork parser.

2006-01-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/Makefile.msvc
    Replace au_g72x.* with g72x.*. Thanks to ussell Borogove.

2006-01-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Make sure return values are initialised header buffer is full.

    * src/wav.c
    Add workarounds for messed up WAV files.

2006-01-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/config.h
    Undef HAVE_INTTYPES_H for win32.

    * tests/command_test.c
    Don't exit on error in instrument test for XI files.

    * configure.ac
    Bump version to 1.0.13.

    * doc/*.html NEWS README
    Update version numbers.

2006-01-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/xi.c
    Start work on add read/write of instrument chunks.

    * src/command_test.c
    Add tests for XI instrument chunk.

    * tests/largefile_test.c tests/Makefile.am
    Add new test and hook it into the build system. This test will not be run
    automatically because it requires 3 Gig of disk space and takes 3 minutes
    to run.

2006-01-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Fix calculation of samples remaining in win32 code. Thanks Axel Röbel.

    * src/common.h
    Make sure length of header buffer can hold header plus strings. Thanks Axel
    Röbel.

2006-01-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/aiff.c src/wav.c
    Apply a patch from John ffitch (Csound project).
    Add detune field to SF_INSTRUMENT struct.
    Add reading/writing instrument chunks to WAV files.

    * tests/command_test.c
    Update SF_INSTRUMENT tests.

    * tests/Makefile.am
    Hook instrument tests into test suite.

2006-01-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Check for <inttypes.h> because some broken systems (like Solaris) don't have
    <stdint.h> which is the 1999 ISO C standard file containing int64_t.

    * src/sfendian.h src/common.h
    Use <inttypes.h> if <stdint.h> is not available.

2005-12-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/peak_chunk_test.c
    Extend and clean up tests.

    * src/sndfile.c
    Fix a bug that prevented the turning off of PEAK chunks.

2005-12-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/error_test.c
    Make the test distclean correct.

    * src/file_io.c
    Fix an SD2 MacOSX bug (reported by vince schwarzinger).

2005-12-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c tests/command_test.c
    Apply a big patch from John ffitch (Csound project) to add reading and
    writing of instrument chunks to AIFF files. Also update the test.

2005-12-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/aiff_rw_test.c tests/virtual_io_test.c tests/utils.tpl
    Move test function dump_data_to_file() to utils.tpl.

    * tests/error_test.c tests/Makefile.am
    Updates, including a new test to test that sf_error() returns a valid error
    number.

2005-12-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/list_formats.c
    Make sure the SF_INFO struct is memset to all zero before being used.
    Thanks to Stephen F. Booth.

    * src/sndfile.c
    Make the return value of sf_error() match the API documentation.

2005-11-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Allow conversion to raw gsm610.

    * src/common.h src/sndfile.c src/au.c
    Remove au_nh_open() and all references to it (wasn't working anyway).

    * tests/headerless_test.c
    Add new test for file extension based detection.

    * src/sndfile.c
    Rejig file extension based file type detection.

2005-11-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Add "gsm" as a recognised file extension when no magic number can be found.

    * tests/lossy_comp_test.c tests/Makefile.am
    Test headerless GSM610.

2005-11-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Fix a minor typo and a minor error. Thanks Christoph Kobe and John Pavel.

2005-10-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_w64.c
    Add more reporting of 'fmt ' chunk for G721 encoded files.

    * src/wav.c
    Gernerate a more correct 20 byte 'fmt ' chunk rather than a 16 byte one.

2005-10-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/G72x/g72x.[ch]
    Minor cleanup of interface.

2005-10-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ogg.c
    Removed the horribly broken and non-functional OGG implementation when
    --enable-experimental was enabled. When OGG does finally work it will be
    merged.

    * src/caf.c
    Fix a memory leak.

2005-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/g72x.c src/G72x/*.(c|h) src/common.h src/sndfile.c src/wav.c src/au.c
    Add support for G721 encoded WAV files.

    * doc/index.html
    Update support matrix.

    * tests/lossy_comp_test.c
    For file formats that support it, add string data after the audio data and
    make sure it isn't treated as audio data on read.

    * src/gsm610.c
    Add code to ensure that the container close function (ie for WAV files) gets
    called after the codec's close function. This allows GSM610 encoded WAV files
    to have string data following the audio data.
    Add an AIFF specific check on psf->datalength.

    * src/wav.c
    Simplify wav_close function.

    * src/aiff.c
    Make sure the tailer data gets written at an even file offset. Pad if
    necessary.

    * src/common.h
    Replace the close function pointer in SF_PRIVATE with separate functions
    codec_close and container_close. The former is always called first.

    *  src/*.c
    Fix knock on effects of above.

2005-10-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-info.c
    Complete dumping SF_INSTRUMENT data.

    * src/dwvw.c src/ima_adpcm.c src/gsm610.c src/ms_adpcm.c
    Add extra checks in *_init function.

    * tests/lossy_comp_test.c
    Add a string comment to the end of the files to make sure that the decoder
    doesn't decode beyond the end of the audio data section.

2005-10-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-info.c
    Minor code cleanup.
    Start work on dumping SF_INSTRUMENT data.

2005-10-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/common.h src/common.c
    Update definition of SF_INSTRUMENT struct and create a function to allocate
    and initialize the struct (input from David Viens).
    Clean up definition of SF_INSTRUMENT struct.

    * src/wav.c src/wav_w64.c
    Add support for Ambisoncs B WAVEX files (David Viens).

    * src/aiff.c src/wav.c src/wav_w64.c
    Start work on reading/writing the SF_INSTRUMENT data.

    * src/sndfile.c
    Add code to get and set SF_INSTRUMENT data.

    * tests/command_test.* tests/Makefile.am
    Add test for set and getof SF_INSTRUMENT data.
    The file command_test.c is no longer autogen generated.

2005-10-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/gsm610.c
    Minor cleanup.

2005-10-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/lossy_comp_test.c
    Minor cleanup.

2005-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Ensure sfconfig.h is included before any other header file.

    * src/file_io.c
    Add comments documenting the three sections of the file.

    * src/gsm610.c
    Make sure SF_FORMAT_WAVEX are handled correctly.

2005-10-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add options to allow disabling of FLAC and ALSA. Suggested by Ben Greear.

2005-09-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/locale_test.c
    Modify the way the unicode strings were encoded so that older compilers
    do not complain. Thanks Axel Röbel.

    * configure.ac
    Bump the version to 1.0.12 for release.

    * NEWS README Win32/config.h doc/(FAQ|index.html|command|api).html
    Update version numbers.

2005-09-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Fix valgrind error and minor cleanup.

2005-09-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/(au|paf|aiff|w64|wav|svx).c
    Make sure structs are initialised.

2005-09-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Make -Wdeclaration-after-statement work with --enable-gcc-werror configure
    option.
    Add -std=gnu99 (C99 plus posix style stuff like gmtime_r) to CFLAGS if the
    compiler supports it.

2005-09-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac acinclude.m4
    Add -Wdeclaration-after-statement to CFLAGS if the compilers supports it.

2005-09-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/util.(tpl|def)
    Make the test_write_*_or_die() functions const safe.

2005-09-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/nist.c
    Make sure the data offset is read from the file header. Thanks to
    David A. van Leeuwen for a patch.

2005-09-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/sfconfig.h
    Check for <locale.h> and the function setlocale().
    Set config variables to zero if not found.

    * tests/locale_test.c tests/Makefile.am
    Add new test program and hook into build/test system.

2005-09-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/file_io.c
    On windows, use windows specific types for file handles.
    Add functions psf_init_files() and psf_use_rsrc().

    * src/sd2.c
    Make resource fork handling independant of file desciptor/handles.

    * src/sndfile.c src/test_file_io.c
    Fix knock on effects.

2005-09-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float_cast.h
    The lrint and lrintf implementations in Cygwin are both buggy and slow.
    Add replacements which were pulled from the Public Domain MinGW math.h
    header file.

2005-09-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/(lossy_comp_test|virtual_io_test).c
    More Valgrind fixups.

    * configure.ac
    Simplify and correct configuring for Cygwin.

    * Win32/config.h Win32/sndfile.h Win32/Makefile.msvc
    Update build for MSVC.

2005-09-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/lossy_comp_test.c
    Make sure to close SNDFILE when exiting test when file format is not seekable.

    * tests/(aiff_rw_test|virtual_io_test).c
    Do a few valgrind fix ups.

2005-09-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float32.c src/double64.c
    Replace floating point equality comparisons with greater/less comparisons.
    Found by John Pavel using the Intel compiler.

    * src/sfconfig.h
    New file to clean up issues surrounding autoconf generated preprocessor
    symbols.

    * src/*.(c|h) tests/*.(c|tpl) examples/*.c
    Fixed a bunch of other stuff found by John Pavel using the Intel compiler.

    * src/file_io.c
    Remove Mac OS9 Metrowerks compiler specific hacks.

2005-08-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/w64.c
    Cast integer literal to sf_count_t in call to psf_binheader_writef() to
    prevent Valgrind error.

2005-08-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/command.html
    Improve documentation of SF_GET_FORMAT_SUBTYPE.

2005-08-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Allow files to be converted to SD2 format.

    * src/sd2.c
    Fix a bug in reading and writing of SD2 files on little endian CPUs.
    Thanks to Matthew Willis for finding this.

2005-08-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Update Note2 to point to SFC_SET_SCALE_FLOAT_INT_READ.

2005-08-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Use $host_os instead of $target_os (thanks to Mo De Jong).

2005-08-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/Makefile.am
    Apply a patch from Mo DeJong to allow building outside of the source dir.

    * src/file_io.c
    Fix psf_fsync() for win32.

    * src/wav.c src/wav_w64.(c|h)
    Move some code from wav.c to wav_w64.c to improve the log output of files of
    type WAVE_FORMAT_EXTENSIBLE.

2005-08-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/create_symbols_file.py
    Make sure sf_write_fsync is an exported symbol.

    * examples/sndfile-convert.c
    Add support for writing VOX adpcm files.

2005-07-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Document the new function sf_write_sync().

    * doc/FAQ.html
    Do you plan to support XYZ codec.

2005-07-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c
    Add function sf_write_sync() to the API.

    * src/common.h src/file_io.c
    Low level implementation (win32 not done yet).

    * tests/write_read_test.tpl
    Use the new function in the tests.

2005-07-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/double64.c src/float32.c src/sndfile.c
    Change the way PEAK chunk info is stored. Peaks now stored as an sf_count_t
    for position and a double as the value.

    * src/aiff.c src/caf.c src/wav.c
    Fix knock on effects of above changes.

    * src/caf.c
    Implement 'peak' chunk for file wuth data in SF_FORMAT_FLOAT or
    SF_FORMAT_DOUBLE format.

2005-07-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/nist.c
    Fix a bug where a variable was being used without being initialized.

    * src/flac.c
    Add extra debug in sf_flac_meta_callback.
    Make a bunch of private functions static.

    * src/aiff.c src/wav.c
    Fix allocation for PEAK_CHUNK (bug found using valgrind).

2005-07-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Move the peak_loc field of SF_PRIVATE to the PEAK_CHUNK struct.
    Remove had_peak field of SF_PRIVATE, use pchunk != NULL instead.
    Rename PEAK_CHUNK and PEAK_POS to PEAK_CHUNK_32 and PEAK_POS_32.

    * src/aiff.c src/caf.c src/wav.c src/float32.c src/double64.c
    Fix knock on effects from above.

2005-07-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Prevent files with unknown chunks from being opened read/write.

2005-07-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/flac.c
    Do not use psf->end_of_file because it never gets set to anything.

    * src/common.h
    Remove unused SF_PRIVATE field end_of_file.

2005-07-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Change the 'S' format specifier of psf_binheader_writef() to write AIFF
    style strings (no terminating character).

    * src/aiff.c
    Move to new (correct) AIFF string style. Thanks to Axel Röbel for being
    so persistent on this issue.

2005-07-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open().

    * doc/api.html doc/command.html
    Documentation updates (thanks to Kyroz for promoting these updates).

    * src/mat5.c
    Modify the way the header is written.

2005-07-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/caf.c
    Add a 'free' chunk to the written file so that the audio data starts at
    an offset of 0x1000.

    * src/sndfile.c
    Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open().

2005-07-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/caf.c src/sndfile.c
    Add support for signed 8 bit integers.

    * tests/write_read_test.tpl
    Add test for signed 8 bit integers in CAF files.

    * doc/index.html
    Update matrix for signed 8 bit integers in CAF files.

2005-07-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Update sf_check_format() to support CAF.

    * examples/sndfile-convert.c
    Add support for ".caf" file extension.

    * doc/index.html
    Add Apple CAF to the support matrix.

    * src/caf.c
    Add file write support.

    * src/common.c
    Fix printing of Frames.

    * tests/Makefile.am tests/write_read_test.tpl tests/lossy_comp_test.c
        tests/header_test.tpl misc_test.c
    Add tests for CAF files.

2005-07-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Fix Q/A about reading/writing memory buffers.

    * src/caf.c
    Bunch of work to support reading of CAF files.

2005-07-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/(aiff|ima_adpcm|mat4|mat5|ms_adpcm).c examples/sndfile-play.c
    Fix sign conversion errors reported by gcc-4.0.

    * src/caf.c
    New file for Apple's Core Audio File format.

    * src/sndfile.c src/common.h src/sndfile.h.in src/Makefile.am
    Hook new file into build system.

2005-06-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src_wav_w64.c
    Fix handling of stupidly large 'fmt ' chunks. Thanks to Vadim Berezniker
    for supplying an example file.

    * src/common.h src/sndfile.c
    Remove redundant error code SFE_WAV_FMT_TOO_BIG.

2005-06-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/common.h src/sndfile.c
    Add public error value SF_ERR_MALFORMED_FILE.

    * src/sndfile.c
    When parsing a file header fails and we don't have a system error, then set
    the error number to SF_ERR_MALFORMED_FILE (suggested by Kyroz).

    * configure.ac
    Allow sqlite support to be disabled in configure script.

    * regtest/database.c regtest/sndfile-regtest.c
    Fix compiling when sqlite is missing.

2005-06-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Fix psf_is_pipe() and return value of psf_fread() when using virtual i/o.

    * src/sndfile.c
    Fix VALIDATE_AND_ASSIGN_PSF macro for virtual i/o.

    * tests/virtual_io_test.c
    Fill in skeleton test program.

    * tests/Makefile.am
    Move virtual i/o tests to end of tests with stdio/pipe tests.

    * src/(sndfile.h.in|file_io.c|common.h|sndfile.c) tests/virtual_io_test.c
    Rename some of the virtual i/o functions and data types.

2005-06-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fix the return values of sf_commands : SFC_SET_NORM_DOUBLE,
    SFC_SET_NORM_FLOAT, SFC_GET_LIB_VERSION and SFC_GET_LOG_INFO. Thanks to
    Kyroz for pointing out these errors.

    * doc/command.html
    Correct documented return values for SFC_SET_NORM_DOUBLE and
    SFC_SET_NORM_FLOAT. Thanks to Kyroz again.

2005-05-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * regtest/*
    Add new files for sndfile-regtest program.

    * configure.ac Makefile.am
    Hook regetest into build.

    * src/wav.c src/common.c
    Fix a regression where long ICMT chunks were causing the WAV parser
    to exit.

2005-05-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * libsndfile.spec.in
    Add html docs to the files section as suggested by Karsten Jeppesen.

    * src/aiff.c
    Fix parsing of odd length ANNO chunks.

2005-05-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Change the include guard to prevent clashes with other code.

2005-05-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Improve error handling in code for playback under Linux/ALSA.

2005-05-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ircam.c
    Fix writing of IRCAM files on big endian systems (thanks to Axel Röbel).

    * src/wav.c
    Add workaround for files created by the Peak audio editor on Mac which can
    produce files with very short LIST chunks (thanks to Jonathan Segel who
    supplied the file).

2005-04-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Apply a patch From David Viens to make the parsing of basc chunks more
    robust.

    * src/wav.c
    Another patch from David Viens to write correct wavex channel masks for
    the most common channel configurations.

2005-04-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/command.c
    Only allow FLAC in the format arrays if FLAC is enabled. Thanks to
    Leigh Smith.

2005-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add a directory field for storing the file directory to the SF_PRIVATE
    struct.

    * src/sndfile.c
    Grab the directory name when copying the file path.

    * src/file_io.c
    Cleanup psf_open_rsrc() and also check for resource fork in
    .AppleDouble/filename.

2005-03-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/svx.c
    Fix a bug in the printing of the channel count. Bug reported by Michael
    Schwendt. Thanks.

2005-01-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c
    Fix a seek bug for 24 bit PAF files.

    * tests/write_read_test.tpl
    Update write_read_test to trigger the previously hidden PAF seek bug.

2005-01-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c src/w64.c src/wav.c
    Do not return a header parse error when the log buffer overflows.
    Continuing parsing works even on files where the log buffer does overflow.
    This avoids a bug on some weirdo WAV (and other) files.

    * src/common.h src/sndfile.c
    Remove SFE_LOG_OVERRIN error and its associated error message.

    * src/file_io.c
    Fix a rsrc fork problem on MacOSX.

2004-12-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile-play.c
    In the ALSA output code, added call to snd_pcm_drain() just before
    snd_pcm_close() as suggested by Thomas Kaeding.
    In the OSS output code, added two ioctls (SNDCTL_DSP_POST and
    SNDCTL_DSP_SYNC) just before the close of the audio device.

    * tests/virtual_io_test.c tests/Makefile.am
    Add a new test program (currently empty) and add it to the build.

2004-12-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.h src/common.h src/file_io.c
      src/create_symbols_file.py
    Apply patch from Steve Baker which is the beginnings of a virtual
    I/O interface.

2004-12-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c src/sndfile.h.in
    Const-ify the write path throughout the library.

2004-12-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/development.html
    Minor improvements.

2004-11-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/bugs.html
    Minor improvements.

2004-11-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Add workaround for Logic Platinum AIFF files with broken COMT chunks.

2004-11-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Remove some ambiguities in the SD2 FAQ answer.

2004-11-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/sndfile.h Win32/config.h MacOS9/sndfile.h MacOS9/config.h
    Updates from autoconfig versions.

2004-11-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fix parsing of COMT chunks. Store SF_STR_COMMENT data in ANNO chunks
    instead of COMT chunk.

2004-11-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c src/common.h
    Change the ptr argument to psf_write() from "void*" to a "const void*".
    Thanks to Tobias Gehrig for suggesting this.

2004-10-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c src/common.h
    Add functions psf_close_rsrc() and read length of resourse fork into
    rsrclength field of SF_PRIVATE.

    * src/sd2.c
    Make sure resource fork gets closed.

    * tests/util.tpl
    Add functions to check for file descriptor leakage.

    * src/write_read_test.tpl
    Use the file descriptor leak checks.

    * src/sndfile.h.in
    Add SFC_GET_LOOP_INFO and SF_LOOP_INFO struct.

    * src/common.h
    Add SF_LOOP_INFO pointer to SF_PRIVATE.

    * src/wav.c src/aiff.c
    Improve and add parsing of 'ACID' and 'basc' chunks, filling in
    SF_LOOP_INFO data in SF_PRIVATE.

2004-10-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sd2.c
    Further cleanup: remove printfs, change snprintf to LSF_SNPRINTF.

    * Win32/config.h Win32/sndfile.h
    Updates.

    * tests/util.tpl
    Add win32 macro for snprintf.

2004-10-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sfendian.h
    Add macros : H2BE_SHORT, H2BE_INT, H2LE_SHORT and H2LE_INT.

    * src/sd2.c
    Use macros to make sure writing SD2 files on little endian machines works
    correctly.

    * tests/util.tpl
    Add a delete_file() function which also deletes the resource fork of SD2
    files.

    * tests/write_read_test.tpl
    Use delete_file() so that "make distcheck" works.

2004-10-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/file_io.c
    Move resource filename construction and testing to psf_open_rsrc().

    * src/common.h src/sndfile.c
    Add error SFE_SD2_FD_DISALLOWED.

    * tests/util.tpl tests/*.(c|tpl)
    Add and allow_fd parameter to test_open_file_or_die() so that use of
    sf_open_fd() can be avoided when opening SD2 files.

2004-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Update ACID chunk parsing.

    * src/sd2.c
    More fixes for files with large resource forks.

2004-10-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/sndfile.c
    Add error numbers and messages for sd2 files.

    * src/sd2.c
    Reading of sd2 (resource fork version) now seems to be working.

2004-10-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.h
    Update file_io.c to include win32 psf_rsrc_open().

    * tests/floating_point_test.tpl
    Remove use of __func__ in test programs (MSVC++ doesn't grok this).

    * Win32/(config|sndfile).h MacOS9/(config|sndfile).h
    Updates.

2004-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sfendian.h
    Fix endswap_int64_t_(array|copy).

    * src/test_endswap.(tpl|def)
    Add tests for above and inprove all tests.

2004-10-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sfendian.h
    Improve type safety, add endswap_double_array().

    * src/double64.c
    Use endswap_double_array() instead of endswap_long_array().

    * src/test_endswap.(tpl|def) src/Makefile.am
    Add preliminary endswap tests and hook into build system.

2004-10-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/configure.ac src/makefile.am
    Finally fix the bulding of DLLs on Win32/MinGW.

    * tests/makefile.am
    Fix running of tests on Win32/MinGW.

2004-10-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c tests/floating_point_test.tpl
    Rename SFC_SET_FLOAT_INT_MULTIPLIER to SFC_SET_SCALE_FLOAT_INT_READ.

    * doc/command.html
    Document SFC_SET_SCALE_FLOAT_INT_READ.

2004-09-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/floating_point_test.(tpl|def)
    Derived from floating_point_test.c.
    Add (float|double)_(short|int)_test functions.

    * tests/util.(tpl|def)
    Make separate float and double versions of gen_windowed_sine().

    * tests/write_read_test.tpl
    Fix after changes to gen_windowed_sine().

    * src/(float32|double64).c
    Implement SFC_SET_FLOAT_INT_MULTIPPLIER.

2004-09-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * acinclude.m4
    Fix warnings from automake 1.8 and later.

    * examples/sndfile-info.c
    Add a "fflush (stdout)" after printing Win32 message.

2004-09-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/Makefile.mingw.in
    Add a "make install" target.

2004-09-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/common.h src/sndfile.c src/command.c
    Start work on adding command SFC_SET_FLOAT_INT_MULTIPLIER.

2004-09-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Fix a bug converting stereo integer PCM files to float.

2004-09-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Appy patch from Conrad Parker to make Mac OSX error messages more
    consistent and informative.

    * doc/api.html
    Fix a HTML HREF which was wrong.

    * doc/win32.html
    Add information about when nmake fails.

2004-09-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Another patch from Denis Cote to prevent race conditions.

2004-09-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/ms_adpcm.c src/ima_adpcm.c
    Fix alternative to ISO standard flexible struct array feature for broken
    compilers.

2004-08-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/string.c src/sndfile.c
    Make sf_set_string() return an error if trying to set a string when in
    read mode.

2004-08-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Change the unnamed union into a named union so gcc-2.95 will compile it.

    * src/*.c
    Fixes to allow for the above change.

2004-08-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Fixes for Win32. Thanks to Denis Cote.

    * Win32/Win32/Makefile.(msvc|mingw.in)
    Fix build system after removal of sfendian.h.
    Build sndfile-convert.

    * src/Makefile.am
    Remove sfendian.c from dependancies.

2004-08-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Fix typo in comments (thanks Tommi Sakari Uimonen).

2004-07-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/(a|u)law_test.c
    Minor cleanup.

2004-07-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/(pcm|float|double64|ulaw|alaw|xi).c
    Optimise read/write loops by removing a redundant variable.

2004-07-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Remove call to fsync() in psf_close().

2004-07-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c
    Inline x2y_array() functions where possible.

    * configure.ac
    Detect presence of type int64_t.

    * src/sfendian.c src/sfendian.h
    Move functions in the first file to the sfendian.h as static inline
    functions.
    Improve endswap_long_*() where possible.

2004-07-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c
    When converting from unsigned char to float or double, subtract 128 before
    converting to float/double rather than after to save a floating point
    operation as suggested by Stefan Briesenick.

    * src/(pcm|sfendian|alaw|ulaw|double64|float32).c
    Optimize inner loops by changing the loop counting slightly as suggested
    by Stefan Briesenick.

    * configure.ac
    Detect presence of <byteswap.h>.

    * src/sfendian.h
    Use <byteswap.h> if present as suggested by Stefan Briesenick.

    * src/pcm.c
    Update bytewapping.

2004-07-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/*.c
    Change the psf->buffer field of SF_PRIVATE into a more type safe union with
    double, float, int etc elements.

2004-06-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Merge slightly modifed patch from Stanko Juzbasic which allows playback of
    mono files on MacOSX.

2004-06-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Move copy_metadata() after the second sf_open().

2004-06-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Fix a bug which caused the program to go into an infinite loop if the source
    file has no meta-data. Thanks to Ron Parker for reporting this.

    * src/sndfile.h.in
    Add SF_STR_FIRST and SF_STR_LAST to allow enumeration of string types.

    * Win32/sndfile.h MacOS9/sndfile.h
    Update these as per the above file.

2004-06-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/common.h src/ogg.c src/sndfile.c src/sndfile.h.in
      src/Makefile.am
    Apply large patch from Conrad Parker implementing Ogg Vorbis, Ogg Speex and
    Annodex support via liboggz and libfishsound. Thanks Conrad.

2004-06-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/avr.c src/ircam.c src/nist.c src/paf.c src/xi.c
    Add cast to size_t for some parameters passed to psf_binheader_writef. This
    is Debian bug number 253490. Thanks to Anand Kumria and Andreas Jochens.

    * src/w64.c
    Found and fixed a bug resulting from use of size_t when writing W64 'fmt '
    chunk.

2004-06-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Bump version to 1.0.10 ready for release.

    * Makefile.am
    Remove redundant files (check_libsndfile.py libsndfile_version_convert.py)
    from distribution tarball.

    * tests/header_test.tpl
    Fix uninitialised variable.

    * src/GSM610/short_term.c
    Fix compiler warning on MSVC++.

2004-05-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Improve record keeping of chunks seen and return an error if a file with
    unusual chunks is opened in mode SFM_RDWR.

    * src/mmreg.h
    This file not needed so remove it.

2004-05-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/header_test.tpl
    Add extra_header_test().

    * src/common.h src/sndfile.c
    Add SFE_RDWR_BAD_HEADER error number and string.

2004-05-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.tpl tests/*.c tests/*.tpl
    Add a line number argument to check_log_buffer_or_die() and update all
    files that use that function.

    * tests/header_test.tpl
    Modify/update tests for files opened SFM_RDWR and SFC_UPDATE_HEADER_AUTO.

    * src/aiff.c src/wav.c
    Fix another bug in AIFF and WAV files opened in SFM_RDWR and using
    SFC_UPDATE_HEADER_AUTO.

    * src/test_file_io.c
    Add a test for psf_ftruncate() function.

2004-05-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fix another  weird corner case bug found by Martin Rumori. Thanks.

    * tests/header_test.(tpl|def)
    Two new files to test for the absence of the above bug and include tests
    moved from tests/misc_test.c.

    * tests/Makefile.am
    Hook new tests into build/test system.

    * tests/misc_test.c
    Remove update_header_test() which has been moved to the new files above.

2004-05-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fixed a bug reported by Martin Rumori on the LAD list. If a file created
    with a format of SF_FORMAT_FLOAT and then closed before any data is written
    to it, the header can get screwed up (PEAK chunk gets overwritten).

    * tests/write_read_test.tpl
    Add a test (empty_file_test) for the above bug.

2004-05-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/Makefile.mingw.in
    Added a Makefile for MinGW (needs to be processed by configure).

    * src/mmsystem.h src/mmreg.h
    Add files from the Wine project (under the LGPL) to allow build of
    sndfile-play.exe under MinGW.

2004-05-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/GSM610/gsm610_priv.h
    Replace ugly macros with inline functions.

    * src/GSM610/*.c
    Remove temporary variables used by macros and other minor fixes required by
    above change.

2004-05-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pipe_test.tpl tests/stdio_test.c Win32/Makefile.msvc
    Make sure these programs compile (even though they do nothing) on Win32
    and add them to the "make check" target.

    * src/sfendian.h
    Fix warning on Sparc CPU and code cleanup.

2004-05-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Fix warning messages when compiling under MinGW.

2004-05-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Set HAVE_FLEXIBLE_ARRAY in src/config.h depending on whether the compiler
    accepts the flexible array struct member as per 1999 ISO C standard.

    * src/common.h src/ima_adpcm.c src/paf.c src/ms_adpcm.c
    Added ugly #if HAVE_FLEXIBLE_ARRAY and provided a non-standards compliant
    hack for non 1999 ISO C compliant compilers.

2004-04-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/strings.c
    If adding an SF_STR_SOFTWARE string, only append libsndfile-X.Y.Z if the
    string does not already have libsndfile in the string. Thanks to Conrad
    Parker.

    * tests/string_test.c
    Add test to verify the above.

    * examples/sndfile-convert.c
    Add ability to transcode meta data as well (Conrad Parker).

2004-04-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/command.html
    Fix minor error. Thanks to Simon Burton.

    * doc/win32.html
    Started adding instructions for compiling libsndfile under MinGW.

    * configure.ac
    Add --enable-bow-docs to enable black text on a white background HTML docs.

    * doc/libsndfile.css.in
    This is now a template file for configure which sets the foreground and
    background colours.

2004-04-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Do some MinGW fixes.

    * configure.ac doc/Makefile.am
    Install HTML docs when doing make install.

2004-04-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-info.c
    Print out the dB level with the signal max.

2004-04-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Define S_ISSOCK in src/file_io.c if required.

2004-04-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Improve printout configuration summary (as suggested by Axel Röbel).

    * doc/index.html
    Add link to pre-release location.

    * src/sndfile.h.in
    Remove comma after last element of enum.

    * src/float32.c src/double64.c
    Fix read/write of float/double encoded raw files to/from pipes.

    * tests/pipe_test.c tests/pipe_test.tpl tests/pipe_test.def
    Turn pipe_test.c into an autogenerated file and add tests for reading/
    writing floats and doubles.

    * tests/Makefile.am
    Hook tests/pipe_test.* into build system.

2004-04-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac acinclude.m4
    Rename AC_C_STRUCT_HACK macro to AC_C99_FLEXIBLE_ARRAY.

2004-03-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Perform update_header_test in RDWR mode as well.

    * src/aiff.c
    Fix problems when updating header in RDWR mode.

2004-03-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/w64.c src/wav_w64.c
    Integrate code supplied by David Viens for supporting microsoft's
    WAVEFORMATEXTENSIBLE stuff. Thanks David for supplying this.

    * configure.ac doc/*.html
    Bump version to 1.0.9.

2004-03-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/command.c src/sndfile.c src/sndfile.h.in src/wav.c
    Started work on supporting microsoft's WAVEFORMATEXTENSIBLE gunk.

2004-03-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/avr.c
    New file to handle Audio Visual Resaerch files.

    * src/sndfile.h.in src/common.h src/sndfile.c src/command.c
    Hook AVR into everything else.

    * tests/Makefile.am tests/write_read_test.tpl tests/misc_test.c
    Add testing for AVR files.

2004-03-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Fix psf_set_file() for win32. Thanks to Vincent Trussart (Plogue Art et
    Technologie) for coming up with the solution.

2004-03-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl
    Fixed a bug that was causing valgrind to report a memory leak. The bug was
    in the test code itself, not the library.

2004-03-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/generate.cs
    An example showing how to use libsndfile from C#. Thanks to James Robson
    for providing this.

2004-03-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Fix problems with WAV files containing large chunks after the 'data'
    chunk. Thanks to Koen Tanghe for providing a sample file.

2004-03-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Detect presense of ALSA (Advanced Linux Sound Architecture).

    * examples/sndfile-play.c
    Add ALSA output support.

    * examples/Makefile.am
    Add ALSA_LIBS to link line of sndfile-play.c.

2004-03-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * acinclude.m4
    Add new macro (AC_C_STRUCT_HACK) to detect whether the C compiler allows
    the use of the what is known as the struct hack introduced by the 1999 ISO
    C Standard.

    * configure.ac
    The last release would not compile with gcc-2.95 due to the use of features
    (ie struct hack) introduced by the 1999 ISO C Standard.
    Add check to make sure compiler handles this and bomb out if it doesn't.

2004-03-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl
    Fix compiler warning on Win32.

    * src/file_io.c
    Fix use of an un-initialised variable in Win32 stuff.

    * Win32/config.h examples/sndfile-play.c
    Win32 fixes.

2004-03-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fix bug which occurres when configuring for MinGW.
    If compiler is gcc and cross compiling use -nostdinc.

2004-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/aiff.c src/wav.c src/float32.c src/double64.c
      src/sndfile.c
    Fix a bug with PEAK chunk handling for files with more than 16 channels.
    Thanks to Remy Bruno for finding this.

2004-03-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Fix a bug which was preventing WAV files being openned correctly if the
    file had a very large header. Thanks to Eldad Zack for finding this.

2004-03-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/file_io.c
    Fix cross-compiling from Linux to Win32 using the MinGW tools.

2004-03-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/create_symbols_file.sh
    Christian Weisgerber pointed out that the shell script did not run on a
    real Bourne shell although it did run under Bash in Bourne shell mode.

    * src/create_symbols_file.py
    Rewrite of above in Python. Also add support for writing Win32 .def files.
    The Python script generates Symbols.linux, Symbols.darwin and
    libsndfile.def (Win32 version). These files get shipped with the tarball
    so there should not be necessary to run the Python script when building
    the code from the tarball.

    * configure.ac src/Makefile.am Win32/Makefile.am
    Hook new Python script into the build system.

2004-02-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/configure.ac
    Add --enable-gcc-werror option and move GCC specific stuff down.

2004-02-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * acinclude.m4 configure.ac
    Fix clip mode detection (tested in one of HP's testdrive Itanium II boxes).

    * src/file_io.c
    Added check for sizeof (off_t) != sizeof (sf_count_t) to prevent recurrence
    of missing large file support on Linux and Solaris.

2004-02-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Fix a MacOSX specific bug which was caused by a space being inserted in
    the middle of a file name.

    * configure.ac src/Makefile.am examples/Makefile.am
    Fix a couple of MacOSX build issues.

2004-02-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/command.html
    Document SFC_SET_CLIPPING and SFC_GET_CLIPPING.

2004-02-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/*.html
    Applied patch from Frank Neumann (author of lakai) which fixes many minor
    typos in documentation. Thanks Frank.

2004-02-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * ChangeLog
    Changed my email address throughout source and docs.

2004-02-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Make sure config.h is included before stdio.h to make sure large file
    support is enabled on Linux (and Solaris).

    * tests/misc_test.c
    Disable update_header test on Win32. This should work but doesn't and
    I'm not sure why.

    * Make.bat Win32/Makefile.msvc
    Updates.

2004-01-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Changed logindex, headindex and headend files of SF_PRIVATE from unsigned
    int to int to prevent weird arithmetic bugs.

    * src/common.c src/aiff.c src/wav.c src/w64.c
    Fixed compiler warnings resulting from above change.

2004-01-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Fixed a bug in header reader for some files with data after the sample data.

2003-12-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/lossy_comp_test.c tests/Makefile.am
    Add tests for AIFF/IMA files.

2003-12-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/macbinary3.c src/macos.c
    Two new files required for handling SD2 files.

    * src/common.h
    Add prototypes for functions in above two files.

    * src/Makefile.am
    Hook new files into build system.

2003-12-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add checks for mmap() and getpagesize() which might be used at some time
    for faster file reads.
    Add detection of MacOSX.

2003-12-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Minor mods to pkg-config section.

2003-12-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/create_symbols_file.sh
    Andre Pang (also known as Ozone) pointed out that on MacOSX, all non
    static symbols are exported causing troubles when trying to link
    libsndfile with another library which has any of the same symbols.
    He fixed this by supplying the MacOSX linker with a file containing
    all the public symbols so that only they would be exported and then
    supplied a patch for libsndfile.
    This wasn't quite ideal, because I would have to maintain two (3 if
    you include Win32) separate files containing the exported symbols.
    A better solution was to create this script which can generate a
    Symbols file for Linux, MacoSX and any other OS that supports
    minimising the number of exported symbols.

    * configure.ac src/Makefile.am
    Hook the new script into the build process.

2003-12-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Added comments about Steve Dekorte's SoundConverter scam.

2003-12-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Axel Röbel pointed out that on Mac OSX a pipe is not considered a fifo
    (S_ISFIFO (st.st_mode) is false) but a socket (S_ISSOCK (st.st_mode) is
    true). The test has therefore been changed to is S_ISREG and anything
    which which does not return true for S_ISREG is considered a pipe.

2003-11-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Fix update_header_test to pass SDS.

    * src/sds.c
    More minor fixes.

    * tests/floating_point_test.c
    Add test for SDS files.

    * src/command.c
    Add SDS to major_formats array.

2003-11-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl tests/misc_test.c
    Add tests for SDS files.

    * src/sds.c
    Fix a bug in header update code.

2003-11-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sds.c
    Get file write working.

    * src/paf.c
    Fix a potential bug in paf24_seek().

2003-11-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Add Q/A about u-law encoded WAV files.

    * Win32/*.h
    Updated so it compiles on Win32.

2003-11-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Add -alaw and -ulaw command line arguments.

    * configure.ac
    Add library versioning comments.
    Add arguments to AC_INIT.

2003-10-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Ross Bencina has contributed code to replace all of the (mostly broken)
    Win32 POSIX emulation calls with calls the native Win32 file I/O API.
    This code still needs testing but is likely to be a huge improvemnt
    of support for Win32. Thanks Ross.

2003-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/dwvw.c
    Removed filedes field from the DWVW_PRIVATE struct.

    * src/file_io.c
    Change psf_fopen() so it returns psf->error instead of the file descriptor.
    Add new functions psf_set_stdio() and psf_set_file().

    * src/sndfile.c
    Change these to work with changed psf_fopen() return value.
    Remove all uses of psf->filedes from sndfile, making it easier to slot native
    Win32 API file handling functions.

    * src/test_file_io.c
    Minor changes to make it compile with new file_io.c stuff.

2003-10-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/gsm610.h
    Rename a variable from true to true_flag. As Ross Bencina points out,
    true is defined in the C99 header <stdbool.h>.

    * src/file_io.c
    If fstat() fails, return SF_TRUE instead of -1 (Ross Bencina).

2003-10-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Increase the size of SF_BUFFER_LEN and SF_HEADER_LEN.

    * src/sndfile.c
    Fix sf_read/write_raw which were dividing by psf->bytwidth and
    psf->blockwidth which can both be zero.

    * examples/sndfile-info.c
    Increase size of BUFFER_LEN.

2003-09-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add checks for <sys/wait.h> and ssize_t.
    Other Win32/MinGW checks.

    * src/aiff.c src/au_g72x.c src/file_io.c src/gsm610.c src/interleave.c
      src/paf.c src/sds.c src/svx.c src/voc.c src/w64.c src/wav.c src/xi.c
    Fix compiler warnings.

2003-09-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/scale_clip_test.tpl
    Add definition of M_PI if needed.

2003-09-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Detect if S_IRGRP is declared in <unistd.h>.

    * src/file_io.c tests/*.tpl tests/*.c
    More fixes for Win32/MSVC++ and MinGW. MinGW does have <unistd.h> but that
    file doesn't declare S_IRGRP.

2003-10-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/config.h.in
    Add comment stating that the sf_count_t typedef is determined when
    libsndfile is being compiled.

    * tests/utils.tpl
    Modified so that utils.c gets one copy of the GPL and not two.


2003-09-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/unistd.h src/sf_unistd.h
    Move first file to the second. This will help for Win32/MSVC++ and MinGW.

    * Win32/Makefile.am src/Makefile.am
    Changed in line with above.

    * Win32/Makefile.msvc
    Removed "/I Win32" which is no longer required.

    * src/file_io.c src/test_file_io.c tests/*.tpl tests/*.c
    If HAVE_UNISTD_H include <unistd.h> else include <sf_unistd.h>. This should
    work for Win32, MinGW and other fakes Unix-like OSes.

    * src/*.c
    Removed #include <unistd.h> from files which didn't need it.

2003-09-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * libsndfile.spec.in
    Apply fix from Andrew Schultz.

2003-09-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/vox_adpcm.c
    Only set psf->sf.samplerate if the existing value is invalid.

2003-09-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Started adding support for ALSA output.

2003-09-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Removed <stdlib.h> from sndfile.h.

    * src/*.c examples/*.c tests/*.c tests/*.tpl
    Added <stdlib.h> where needed.

2003-09-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Added ARRAY_LEN, SF_MAX and SF_MIN macros.

2003-08-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Remove statements about alternative licensing arrangements.

2003-08-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * MacOS MacOS9 Makefile.am configure.ac
    Change directory name from MacOS to MacOS9

    * MacOS9/MacOS9-readme.txt
    Change name to make it really obvious, add text to top of file to make it
    still more obvious again.

2003-08-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_log_printf.c
    Add tests for %u conversions.

    * src/common.c
    Fix psf_log_printf() %u conversions.

2003-08-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fixed a bug where opening a file with a non-trival header in SFM_RDWR mode
    would over-write part of the header. Thanks to Axel Röbel for pointing
    this out. Axel also provided a patch to fix this but I came up with a
    neater and more general solution.
    Return error when openning an AIFF file with data after the SSND chunk
    (Thanks Axel Röbel).

    * tests/aiff_rw_test.c
    Improvements to test program which will later allow it to be generalised to
    test WAV, SVX and others as required.

2003-08-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pipe_test.c
    Add useek_pipe_rw_test() submitted by Russell Francis.

    * src/sndfile.c
    In sf_open_fd(), check if input file descriptor is a pipe.

    * src/sndfile.[ch]
    Fix typo in variable name do_not_close_descriptor.

2003-08-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_log_printf.c
    Improve the tests for %d and %s conversions.

    * src/common.c
    Fixed a few problems in psf_log_printf() found using new tests.

2003-08-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add -Wwrite-strings warning to CFLAGS if the compiler is GCC. Thanks to
    Peter Miller (Aegis author) for suggesting this and supplying a patch.

    * src/*.c examples/*.c tests/*.c
    Fix all compiler warnings arising from the above.

2003-08-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/aiff_rw_test.c tests/Makefile.am
    New test program to check for errors re-writing the headers of AIFC files
    opened in mode SFM_RDWR.

2003-07-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Applied a patch from Tero Pelander to allow this program to run on systems
    using devfs which used /dev/sound/dsp instead of /dev/dsp.

2003-07-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/new_file_type.HOWTO
    Updated document. Still incomplete.

2003-06-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fix VALIDATE_SNDFILE_AND_ASSIGN_PSF which was returning an error rather
    than saving it and returning zero.

2003-06-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Two fixes for Mac OS9.
    Fix all casts from sf_count_t to ssize_t (not size_t).

2003-06-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fix for reading files with RIFF length of 8 and data length of 0.

2003-06-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c tests/*.c tests/*.tpl
    Added comments to mark code for removal when make Lite version of
    libsndfile.

2003-06-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Add extra error checking for unrecognised arguments.

2003-06-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ima_adpcm.c
    Started adding code to write IMA ADPCM encoded AIFF files.

    * src/test_log_printf.c src/Makefile.am
    New file to test psf_log_printf() function and add hooks into build system.

    * src/common.c
    Move psf_log_printf() function to top of the file and only compile the rest
    of the file if if PSF_LOG_PRINTF_ONLY is not defined.

2003-06-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/config.h Win32/sndfile.h
    Updated with new config variables.

    * Win32/unistd.h src/file_io.c
    Added implementation of S_ISFIFO macro which Win32 seems to lack and is
    used in src/file_io.c.

    * tests/utils.tpl
    Added #include <unitstd.h> to pull in Win32/unistd.h so it compiles for
    Win32.

    * src/Makefile.msvc
    Added src\test_file_io.exe build target and run this as the very first
    test.

    * tests/win32_test.c
    Add support for testing Cygwin32.

    * configure.ac
    Detect POSIX fsync() and fdatasync() functions.

    * src/file_io.c
    If compiling for Cygwin, call fsync() before calling fstat() to retrieve
    file length.

    * tests/pcm_test.tpl
    Add a test for lrintf() function. This was required to detect a really
    broken lrint() and lrintf() on Cygwin.

    * tests/misc_test.c
    Don't run permission test when compiling under Cygwin.

    * src/float_cast.h
    Fix fallback macro for lrint() and lrintf() to cast to long instead of int
    to match official function prototypes.

2003-06-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-convert.c
    Modifications to improve accuracy of conversions; use double data for
    floating point and int for everything else.

    * src/ima_apdcm.c
    Completed work on decoding IMA ADPCM encoded AIFF files. Still need to
    get encoding working.

2003-05-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c src/ima_adpcm.c
    Start working on getting IMA ADPCM encoded AIFF files working.

2003-05-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fixed the touch command for when the autogen program is not found (Matt
    Flax).

    * src/ulaw.c src/alaw.c
    Made these pipe-able.

2003-05-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c src/ircam.c
    Fixed writing to pipe.

    * src/wav.c src/aiff.c src/nist.c src/mat*.c src/svx.c src/w64.c
    Return SFE_NO_PIPE_WRITE if an attempt is made to write to a pipe.

2003-05-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-info.c
    Modified to detect unknown file lengths.

    * src/mat4.c
    Fix reading from a pipe.

2003-05-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pipe_test.c
    Add more file types to tests.

    * src/mat4.c
    Removed explicit setting of psf->sf.seekable to SF_TRUE.

    * tests/utils.tpl
    Add macro for generating and check data in the stdio and pipe tests.

    * tests/stdout_test.c tests/stdin_test.c
    Use the above macro to generate known data on output and check data on
    input.

    * src/voc.c src/htk.c common.h sndfile.c
    Disallow reading/writing VOC and HTK files from/to pipes be returning new
    error values.

    * src/w64.c
    Fixes to allow reading from a pipe.

2003-05-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac src/sndfile.h.in
    When the configure script determines the sizeof (sf_count_t), also set the
    value of SF_COUNT_MAX in sndfile.h.

    * configure.ac
    Remove -pedantic flag from default GCC compiler flags.

    * tests/pipe_test.c
    Add a pipe_read_test() before doing pipe_write_test().

    * tests/scale_clip_test.c
    Add test to make sure non-normalized values also clip in the right way.

2003-05-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Add test to detect processor clipping capabilities.

    * tests/stdin_test.c tests/stdout_test.c
    Fix a pair of compiler warnings.

    * src/common.h
    Add new pipeoffset field to SF_PRIVATE. This will contain the current file
    offset when operating on a pipe.

    * src/common.c
    Removed direct calls to psf_fread()/psf_fseek()/psf_fgets() etc from
    psf_binheader_readf and redirect them to new buffered versions
    header_read(), header_seek() and header_gets().
    Add "G" format specifier to emulate fgets() functionality with buffering.
    This will allow reading some file types from pipes.

    * src/file_io.c
    When the file descriptor is a pipe, manintain psf->pipeoffset.

    * src/pvf.c
    Change use of psf_fgets() to psf_binheader_readf() as required but changes to header re

    * src/au.c
    Fix reading from a pipe.

2003-05-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c
    Add clipping versions of the f2XXX_array() functions to allow option of
    clipping data that would otherwise overflow.

    * tests/scale_clip_test.tpl tests/scale_clip_test.def
    New files test that clipping option does actually work.

2003-05-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Fixed a typo ("OS(" instead of "OS9").

2003-05-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/open_fail_test.c
    Include <string.h> to prevent warning message of missing declaration of
    memset().

2003-05-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Add new "add_clipping" field to SF_PRIVATE.

    * src/sndfile.h.in src/sndfile.c
    Add command SFC_SET_CLIPPING which sets/resets add_clipping field.

2003-05-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Add docs for sf_set_string() and sf_get_string().

    * src/common.h src/sndfile.c
    Add new SFE_STR_BAD_STRING error.

    * tests/stdin_test.c tests/stdout_test.c
    Removed all non-error print statements.

    * tests/stdio_test.c tests/pipe_test.c tests/Makefile.am
    Add print statements removed from two files above.

2003-05-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * libsndfile.spec.in
    Fixed a coulpe of minor errors discovered by someone calling themselves
    Agent Smith.

    * src/common.c src/common.h src/file_io.h
    Added is_pipe field to SF_PRIVATE and declaration of psf_is_pipe()
    function. (Axel Röbel)

    * src/sndfile.c
    Fixed determination of whether the file is a pipe. (Axel Röbel)

    * src/paf.c
    Force paf24 to start with undefined mode. (Axel Röbel)

    * tests/pipe_test.c
    Mods to make this test work and actually do the test on RAW files. (Axel
    Röbel).

2003-05-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed a potential bug where psf->sf.seekable was being set to FALSE when
    operating on stdin or stdout but then the default initialiser was reseting
    it to TRUE. Thanks to Axel Röbel.

    * src/aiff.c
    Fixed a bug in the header parser where it was not handling an odd length
    COMM chunk correctly. Thanks to Axel Röbel.

    * src/test_file_io.c
    Add more tests.

    * tests/win32_test.c
    New file for showing the bugs in the Win32 implementation of the POSIX API.
    It also runs on Linux for sanity checking.

    * tests/Makefile.am Win32/Makefile.msvc
    Hook the new test program into the build system.

2003-05-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/test_file_io.c
    New test program to test operation of functions defined in file_io.c. This
    should make supporting win32 significantly easier.

    * src/Makefile.am
    Hook new test program into the build system.

    * src/file_io.c
    Add compile/run time check that sizeof statbuf.st_size and sf_count_t are
    the same.

    * src/common.h src/sndfile.c
    Added new error code and error message for new check.

    * tests/benchmark.tpl
    Fix to use frames instead of samples in SF_INFO.

2003-05-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    More stuffing about working around PLAIN OLD-FASHIONED **BUGS** in Win32.

    * examples/sndfile-info.c
    Applied patch from Conrad Parker to add "--help" and "-h" options as
    well as an improved usage message.

2003-05-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/au.c
    Added embedded file support.

    * tests/multi_file_test.c
    Added tests for embedded AU files.
    Added verbose testing mode.

    * src/common.h src/sndfile.c
    Added an embedded AU specific error code and message.

    * src/wav.c
    Added patch from Conrad Parker which filled in a little more information
    about ACIDized WAV files.

2003-04-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Fixed Win32 version of psf_fseek() which was calling psf_get_filelen()
    which was in turn calling psf_fseek() which in the end blew the stack.
    Now of course this would have been easy to find on Linux, but this blow
    up was happening in kernel32.dll and the fscking MSVC++ debugger couldn't
    figure out what call caused this (it couldn't even tell me the stack had
    overflowed) and was absolutley useless for this debugging exercise.
    On top of that, the reason I got into this mess was that windoze doesn't
    have a working fstat() function which can return file lengths > 2 Gig. It
    HAS a fscking _fstati64() but the file length value is only updated AFTER
    the bloody file is closed. That makes it completely useless.
    How the hell do people stand working on this crap excuse of an OS?

2003-04-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/unistd.h src/file_io.c
    Moved definitions of S_IGRP etc from file_io.c to unistd.h so that these
    can be used in the test programs.

    * Win32/libsndfile.def
    Added sf_open_fd.

    * Win32/sndfile.h
    Updated to match src/sndfile.h.in.

    * Win32/Makefile.msvc
    Added dither.c and htk.c to libsndfile.dll target.

2003-04-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    First attempt at getting the Win32 versions of the these functions working.
    They still need to be tested.

2003-04-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/strings.c
    Found and fixed a bug which was causing psf_store_string() to fail on
    Motorola 68k processors. Many thanks fo Joshua Haberman (Debian maintainer
    of libsndfile) for compiling and running debug code to help me debug the
    problem.

2003-04-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/file_io.c src/wav.c src/aiff.c
    Much hacking to get reading and writing of embedded files working (ie sound
    files at a non-zero files offset).

    * doc/embedded_files.html
    First pass atempt at documenting reading/writing embedded files.

2003-04-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Updated answer to "Why doesn't libsndfile do interleaving/de-interleaving?"

2003-04-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/aiff.c
    Fix retrieving and storing of string data from files. Need to be careful
    about using psf->buffer for strings.

2003-04-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Fix psf_fseek() for seeks withing embedded files.

2003-04-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Changed the definition of SNDFILE slightly to produce warnings when it isn't
    used correctly. This should have zero affect in code which uses the SNDFILE
    type correctly.

    * src/sndfile.c
    Fixed a few compiler warnings cause by the changes to the SNDFILE type.

2003-04-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Added question and answer to the question "How about adding the ability
    to write/read sound files to/from memory buffers?".

2003-04-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl
    Removed un-needed enums declaring TRUE and FALSE and replaced usage of
    these with SF_TRUE and SF_FALSE.

    * tests/multi_file_test.c
    New test program to test sf_open_fd() on files containing data other than
    a single sound file.

2003-04-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    When creating files, set the readable by others flag. This still allows
    further restrictions to be enforced by use of the user's umask. Fix
    suggested by Eric Lyon.

2003-04-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c
    Changed sf_open_fd(). Dropped offset parameter and added a close_desc
    parameter. If close desc is TRUE, the file descritpor passed into the
    library will be closed when sf_close() is called.

    * tests/utils.tpl
    Modified call to sf_open_fd() to set close_desc parameter to SF_TRUE.

2003-04-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl
    Add a string (using sf_set_string() function) before and after data section
    of all files. This will make sure that if string data can be added, it
    doesn't overwrite real audio data.

2003-04-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Started work on supporting a non-zero offset parameter for sf_open_fd ().

    * src/<file header parsers>.c
    Removed many uses of psf_fseek (SEEK_END) which to allow for future use of
    sf_open_fd() with non-zero offset.
    Associated refactoring.

    * src/aiff.c
    Implemented functionality required to get sf_get_string() and
    sf_set_string() working for AIFF files.

2003-04-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.tpl
    Modified test_open_file_or_die() to alternately use sf_open() and
    sf_open_fd().

    * src/svx.c
    Fixed a bug which occurred when openning an existing file for read/write
    using sf_open_fd(). In this case, the existing NAME chunk needs to be
    read into psf->filename.
    Fixed printing of sf_count_t types to logbuffer.

2003-03-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Added prototype for new function sf_open_fd().

    * src/sndfile.c
    Moved most of the code in sf_open() to a new function psf_open_file().
    Created new function sf_open_fd() which also uses psf_open_file() but
    does not currently support the offset parameter.

    * doc/api.html
    Document sf_open_fd().

2003-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed a memory leak reported by Evgeny Karpov. Memory leak only occurred
    when an attempt was made to read and the open() call fails.

2003-03-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/open_fail_test.c
    New test program to check for memory leaks when sf_open fails on a valid
    file. Currently this must be run manually under valgrid.

    * tests/Makefile.am
    Hook new test program into build.

2003-03-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Octave/sndfile_save.m Octave/sndfile_play.m
    Added a -mat-binary option to the octave save command to force the output
    to binary mode even if the user has set ascii data as the default. Found
    by Christopher Moore.

2003-02-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/dither.html
    New file which will document the interface which allows the addition of
    audio dither when sample word sizes are being reduced.

    * src/dither.c
    More work.

2003-02-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    In update_header_test(), make HTK files a special case.

    * doc/index.html
    Added HTK to the feature matrix.

2003-02-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/htk.c
    New file for reading/writing HMM Tool Kit files.

    * src/sndfile.h.in src/sndfile.c src/command.c src/Makefile.am
    Hook in htk.c

    * tests/write_read_test.tpl tests/misc_test.c tests/Makefile.am
    Add tests for HTK files.

2003-02-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed a bug where the LIST chunk length was being written incorrectly.

    * tests/string_test.c
    Added call to check_log_buffer().
    Minor cleanups.

2003-02-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_w64.h
    Applied patch from Antoine Mathys to add extra WAV format definitions and
    a G72x_ADPCM_WAV_FMT struct definition.

    * src/wav_w64.c
    Applied patch from Antoine Mathys which converts wav_w64_format_str() from
    one huge inefficient switch statement to a binary search.

    * tests/string_test.c
    Dump log buffer if tests fail.

2003-02-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/string_test.c
    David Viens supplied some modifications to this file which showed up a bug
    when using sf_set_string() and the sf_writef_float() functions.

    * src/sndfile.c
    Fixed the above bug.

2003-02-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Added Q and A on how to detect libsndfile in configure.in (at the suggestion
    of Davy Durham).

2003-02-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Add enums and typedefs for dither.
    Deprecate SFC_SET_ADD_DITHER_ON_WRITE and SFC_SET_ADD_DITHER_ON_READ, to be
    replaced with SFC_SET_DITHER_ON_WRITE and SFC_SET_DITHER_ON_READ which will
    allow different dither algorithms to be enabled.
    Added SFC_GET_DITHER_INFO_COUNT and SFC_GET_DITHER_INFO.

    * src/sndfile.h.in src/Version_script.in Win32/libsndfile.def.
    Added public sf_dither_*() functions.

    * src/sndfile.c
    Implement commands above.

    * src/dither.c
    More work. Framework and external hooks into dither algorithms complete.

2003-02-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/version-1.html libsndfile_version_convert.py
    Remove redundant files.

    * doc/index.html doc/api.html
    Remove links to version-1.html.

    * src/dither.c
    New file to allow the addition of audio dither on input and output.

    * src/common.h
    Add prototype for dither_init() function.

    * Makefile.am doc/Makefile.am
    Changes for added and removed files.

2003-02-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/Makefile.msvc
    Changes to force example binaries to be placed in the top level directory
    instead of the examples/ directory.
    Add src/strings.c and src/xi.c to the build.
    Add string_test to build and to tests on WAV files.

    * doc/index.html
    Added XI to support matrix.

2003-01-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Added prototypes for sf_get_string() and sf_set_string() and SF_STR_*
    enum values.

    * src/sndfile.c
    Added public interface to sf_get_string() and sf_set_string().

    * src/wav.c
    Added code for setting and getting strings in WAV files.

    * tests/string_test.c
    New test program for sf_get_string() and sf_set_string() functionality.

    * tests/Makefile.am
    Hook new test program into build and test framework.

2003-01-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Added fields to SF_PRIVATE for string data needed to implement
    sf_get_string() and sf_set_string().

    * src/strings.c
    New file for storing and retrieving strings to/from files.

    * src/Makefile.am
    Added strings.c to build.

2003-01-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/xi.c
    Read seems to be working so looking at write.

    * src/sndfile.h.in
    Added SF_FORMAT_XI, SF_FORMAT_DPCM_8 and SF_FORMAT_DPCM_16 enum values.

    * tests/floating_point_test.c tests/lossy_comp_test.c tests/Makefile.am
    Added test for 8 and 16 bit XI format files.

2003-01-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Added a non-lawyer readable summary of the licensing provisions as
    suggested by Steve Dekorte.

2003-01-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed a compiler warning found by Alexander Lerch.

2003-01-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Fixed the multiple linking of libm.

2003-01-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/Makefile.mcvs
    Added comments on the correct way to set up the MSVCDir environment
    variable.

    * doc/win32.html
    Add on how to set up the MSVCDir environment variable.

2003-01-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c examples/sndfile-info.c
    When run on Win32 without any command line parameters print a message and
    then sleep for 5 seconds. This means the when somebody double clicks on
    these programs in explorer the user will actually see the message.

2003-01-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Bypass permission test if running as root because root is allowed to open
    a readonly file for write.

2003-01-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/Makefile.msvc
    Added pvf.c and xi.c source files to project.

    * src/sndfile.h
    Updated for PVF files.

2003-01-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Modified validate_sfinfo() to force samplerate, channels and sections
    to be >= 1.
    In format_from_extension() replaced calls to does_extension_match()
    with strcmp().

    * src/xi.c
    More work.

2003-01-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/Makefile.am
    Added octave.html which had been left out. Found by Jan Weil.

2003-01-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pvf.c src/common.h src/sndfile.c
    Fixed error handling for PVF files.

    * src/xi.c
    New file for handling Fasttracker 2 Extended Instrument files. Not working
    yet and included when configured with --enable-experimental.

    * src/sndfile.c src/common.h
    Hooked in new file xi.c.

2002-12-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/rx2.c
    Added a patch from Marek Peteraj which sheds a little more light on the
    slices within an RX2 file. Still need to find out data encoding.

2002-12-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Started work on decoding 'acid' and 'strc' chunks.

2002-12-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/peak_check_test.c
    Minor cleanup.

2002-12-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl
    Added check to make sure no error was generated when an attempt was made to
    read past the end of the file.

2002-12-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/lists.html
    Added "mailto" links for all three lists.

    * src/pvf.c
    New file for Portable Voice Format files.

    * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am
    Added hooks for SF_FORMAT_PVF format files.

    * tests/write_read_test.tpl tests/std*.c
    Add tests for SF_FORMAT_PVF.

    * doc/index.html
    Add PVF to the compatibility matrix.

    * src/pcm.c src/alaw.c src/ulaw.c src/float32.c src/double64.c
    Previously, attempts to read beyond the end of a file would set psf->error
    to SFE_SHORT_ERROR. This behaviour diverged from the behaviour of the POSIX
    read() call but has now been fixed.
    Attempts to read beyond the end of the file will return a short read count
    but will not longer set any error.

2002-12-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Add more sanity checking when opening a RAW file for read. When format is
    not RAW, zero out all members of the SF_INFO struct.

    * tests/raw_test.c
    Add bad_raw_test() to check for above problem.

    * tests/stdin_test.c examples/sndfile-info.c
    Set the format field of the SF_INFO struct to zero before calling
    sf_open().

    * doc/api.html
    Add information about the need to set the format field of the SF_INFO struct
    to zero when opening non-RAW files for read.

    * configure.ac
    Removed use of conversion script on Solaris. Not all Solaris versions
    support it.

    * doc/lists.html
    New file containg details of the mailing lists.

    * doc/index.html
    Add a link to the above new file.

2002-12-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/dft_cmp.c
    Fixed a SIGFPE on Alpha caused by a log10 (0.0). Thanks to Joshua Haberman
    for providing the gdb traceback.

2002-11-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Added more capabilities to 'smpl' chunk parser.

    * src/sndfile.c
    Fixed some (not all) possible problems found with Flawfinder.

2002-11-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed a bug in sf_seek(). This bug could only occur when an attempt was
    made to read beyond the end and then sf_seek() was called with a whence
    parameter of SEEK_CUR.

    * src/file_io.c
    Win32's _fstati64() does not work, it returns BS. Re-implemented
    psf_get_filelen() in terms of psf_fseek().

    * tests/write_read_test.tpl
    Add a test to detect above bug.

    * src/float_cast.h
    Modification to prevent compiler warnings on Mac OS X.

    * src/file_io.c
    Fixes for windows (what a f**ked OS).

2002-11-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.ac
    Disable use of native lrint()/lrintf() on Mac OSX. These functions exist on
    Mac OSX 10.2 but not on 10.1. Forcing the use of the versions in
    src/float_cast.h means that a library compiled on 10.2 will still work on
    10.1.

2002-11-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in configure.ac
    Renamed configure.in to configure.ac as expected by later versions of
    autoconf.
    Slight hacking of configure.ac to work with version 2.54 of autoconf.
    Changed to using -dumpversion instead of --version for determining GCC
    version numer as suggested by Anand Kumria.

    * src/G72x/Makefile.am
    Slight hacking required for operation with automake 1.6.3.

2002-11-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    In psf_binheader_readf() changed type parameter type "b" type from size_t
    to int to prevent errors on IA64 CPU where sizeof (size_t) != sizeof (int).
    Thanks to Enrique Robledo Arnuncio for debugging this.

2002-11-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * test/command_test.tpl
    Changed test value so test would pass on Solaris.

    * src/Version_script.in
    Modified version numbering so that later versions of 1.0.X can replace
    earlier versions without recompilation.

    * src/vox_adpcm.c
    Fixed bug causing short reads.

2002-11-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * test/floating_point_test.c
    Code cleanup using functions from util.c.
    Add test for IEEE replacement floats and doubles.

2002-11-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed a possible divide by zero error when read the 'smpl' chunk. Thanks to
    Serg Repalov for the example file.

    * tests/pcm_test.tpl
    Used sf_command (SFC_TEST_IEEE_FLOAT_REPLACE) to test IEEE replacement code.
    Clean up pcm_double_test().

    * src/float32.c src/double64.c
    Force use of IEEE replacement code using psf->ieee_replace is TRUE,
    Print message to log_buffer as well.
    Rename all broken_read_* and broken_write* functions to replace_read_* and
    replace_write_*.

    * tests/util.tpl
    Added string_in_log_buffer().

    * tests/pcm_test.tpl
    Use string_in_log_buffer() to ensure that IEEE replacement code has been
    used.

    * configure.in
    Removed --enable-force-broken-float option. IEEE replacement code is now
    always tested.

2002-10-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/double64.c
    Implement code for read/writing IEEE doubles on platforms where the native
    double format is not IEEE.

    * src/float32.c src/common.h
    Remove float32_read() and float32_write(). Replace with float32_le_read(),
    float32_be_read(), float32_le_write() and float32_be_write() to match stuff
    in src/double64.c.

    * src/common.c
    Fix all usage of float32_write().

    * src/sndfile.h.in
    Added SFC_TEST_IEEE_FLOAT_REPLACE command (testing only).

    * src/common.h
    Added SF_PRIVATE field ieee_replace.

    * src/sndfile.c
    In sf_command() set/reset psf->ieee_replace.

2002-10-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pcm_test.tpl
    Fixed a problem when testing with --enable-force-broken-float. The test was
    generating a value of negative zero and the broken float code is not able
    to write negative zero. Removing the negative zero fixed the test.

2002-10-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Added fix for Cygwin (suggested by Maros Michalik).

2002-10-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Improved error detection and handling.

    * src/file_io.c src/common.h
    Removed functions psf_ferror() and psf_clearerr() which were redundant
    after above improvements.

    * src/aiff.c src/svx.c src/w64.c src/wav.c
    Removed all use of psf_ferror() and psf_clearerr().

    * src/sndfile.c
    Removed #include of <stdio.h>, <unistd.h>, <fcntl.h> and <math.h> which
    are no longer needed.

    * tests/misc_test.c
    Added test to make sure the correct error message is returned with an
    existing read-only file is openned for write.

2002-10-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html doc/api.html
    Updated for OKI Dialogic ADPCM files.

    * src/command.c
    Added VOX ADPCM to sub_fomats.

2002-10-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/vox_adpcm.c src/Makefile.am
    New file for handling OKI Dialogic ADPCM files.

    * src/sndfile.h
    Add new subtype SF_FORMAT_VOX_ADPCM.

    * src/sndfile.c
    Renamed function is_au_snd_file () to format_from_extenstion () and expanded
    its functionality to detect headerless VOX files.

    * src/raw.c
    Added hooks for SF_FORMAT_VOX_ADPCM.

    * examples/sndfile-info.c
    Print out file duration (suggested by Conrad Parker).

    * libsndfile.spec.in
    Force installation of sndfile.pc file (found by John Thompson).

    * tests/Makefile.am tests/lossy_comp_test.c tests/floating_point_test.c
    Add tests for SF_FORMAT_VOX_ADPCM.

2002-10-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Add test which attempts to write to /dev/full (on Linux anyway) to check
    for correct handling of writing to a full filesystem.

    * src/sndfile.c
    Return correct error message if the header cannot be written because the
    filesystem is full.

    * tests/util.tpl
    Corrected printing of file mode in error reporting.

    * src/mat5.c
    Fixed a bug where a MAT5 file written by libsndfile could not be opened by
    Octave 2.1.36.

2002-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/file_io.c
    All low level file I/O have been modified to be better able to report
    system errors resulting from calling system level open/read/write etc.

    * src/*.c
    Updated for compatibility with above changes.

    * examples/cooledit-fixer.c
    New example program which fixes badly broken file created by Syntrillium's
    Cooledit which are marked as containing PCM samples but actually contain
    floating point data.

    * examples/Makefile.am
    Hooked cooledit-fixer into the build system.

2002-10-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/command.html
    Document SFC_GET_FORMAT_INFO.

2002-10-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/wav32_aiff24.c examples/sndfile2oct.c examples/sfhexdump.c
        examples/sfdump.c
    Removed these files because they weren't interesting.

    * examples/sfconvert.c examples/sndfile-convert.c
    Renamed the first to the latter.

    * examples/Makefile.am
    Added sndfile-convert to the bin_PROGRAMS, so it is installed when the lib
    is installed.
    Removed old programs wav32_aiff24 and sndfile2oct.

    * man/sndfile-convert.1
    New man page.

    * examples/sndfile-convert.c
    Added some gloss now that sndfile-convert.c is an installed program.

    * src/sndfile.h.in src/sndfile.c src/common.h src/command.h
    Added command SFC_GET_FORMAT_INFO.

    * tests/command_test.c
    Added tests form SFC_GET_FORMAT_INFO.

2002-10-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    In sf_format_check() return error if samplerate < 0.

2002-10-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fixed bug in handling of COMM chunks with a 4 byte encoding byte but no
    encoding string.

2002-10-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed repeated word in an error message.

2002-10-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Improved advertising in Features section.

2002-10-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Added decoding of 'labl' chunks within 'LIST' chunks.

    * src/common.h
    Added (experimental only) SF_FORMAT_OGG and SF_FORMAT_VORBIS and definition
    of ogg_open(). This is nowhere near working yet.

    * src/sndfile.c
    Added detection of 'OggS' file marker and added call to ogg_open() to
    switch statement.

    * src/ogg.c
    New file. Very early start of Ogg Vorbis support.

    * src/wav.c
    Added handling of brain-damaged and broken Cooledit "32 bit 24.0 float
    type 1" files. These files are marked as being 24 bit WAVE_FORMAT_PCM with
    a block alignment of 4 times the numbers of channels but are in fact 32 bit
    floating point.

2002-10-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Modified option --enable-experimental to set ENABLE_EXPERIMENTAL_CODE in
    config.h to either 0 or 1.

    * src/sndfile.c
    Modify sf_command (SFC_GET_LIB_VERSION) to append "-exp" to the version
    string if experimental code has been enabled.

2002-10-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/Makefile.am
    Added -lm to libsndfile_la_LIBADD. This means that -lm is not longer needed
    in the link line when linking something to libsndfile.

    * tests/Makefile.am examples/Makefile.am
    Removed -lm from all link lines.

    * sndfile.pc.in
    Removed -lm from Libs line.

2002-09-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Removed all perror() calls.

    * src/nist.c
    Removed calls to exit() function.
    Added check to detect NIST files dammaged from Unix CR -> Win32 CRLF
    conversion process.

2002-09-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c
    New function sf_strerror() which will eventually replace functions
    sf_perror() and sf_error_str().
    Function sf_error_number() has also been changed, but this was documented
    as being for testing only.

    * doc/api.html
    Documented above changes.

    * tests/*.c examples/*.c
    Changed to new error functions.

2002-09-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Detect GCC version, and print a warning message about writeable strings
    it GCC major version number is less than 3.

2002-09-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in doc/api.html
    Documentation fixes.

2002-09-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/Version_script.in src/Makefile.am configure.in
    Use the version script to prevent the exporting of all non public symbols.
    This currently only works with Linux. Will test on Solaris as well.

    * src/float_cast.h
    Added #ifndef to prevent the #warning directives killing the SGI MIPSpro
    compiler.

    * src/au_g72x.c src/double64.c src/float32.c src/gsm610.c src/ima_adpcm.c
        src/ms_adpcm.c
    Fix benign compiler warnings arising from previously added compiler
    flags.

2002-09-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed a bug in sf_error_str() where errnum was used as the index instead
    of k. Found by Tim Hockin.

    * examples/sndfile-play.c
    Fixed a compiler warning resulting from a variable shadowing a previously
    defined local.

2002-09-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in src/sndfile.c
    Added command SFC_SET_RAW_START_OFFSET.

    * doc/command.html
    Document SFC_SET_RAW_START_OFFSET.

    * tests/raw_test.c tests/Makefile.am
    Add new file for for testing SF_FORMAT_RAW specific functionality.

    * tests/dwvw_test.c
    Updates.

2002-09-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Modified reading of 'smpl' chunk to take account of the sampler data field.

    * tests/utils.tpl tests/utils.h
    Added function print_test_name().

    * tests/misc_test.c tests/write_read_test.tpl tests/lossy_comp_test.c
        tests/pcm_test.tpl tests/command_test.tpl tests/floating_point_test.c
    Convert to use function print_test_name().

2002-09-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/octave.html
    Added a link to some other Octave scripts for reading and writing sound
    files.

    * src/paf.c
    Change type of dummy data field to int. This should fix a benign compiler
    warning on some CPUs.
    Removed superfluous casts resulting from the above change.

    * src/rx2.c
    More hacking.

2002-09-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/mat5.c src/common.c
    Changed usage of snprintf() to LSF_SNPRINTF().

    * Win32/Makefile.msvc
    Updated to include new files and add new tests.

    * Win32/config.h Win32/sndfile.h
    Updated.

    * doc/api.html
    Added note about the possibility of "missing" features actually being
    implemented as an sf_command().

2002-09-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/misc_test.c
    Added previously missing update_header_test and zero_data_tests for PAF,
    MAT4 and MAT5 formats.

    * src/paf.c src/mat4.c src/mat5.c
    Fixed bugs uncovered by new tests above.

    * src/mat5.c
    Generalised parsing of name fields of MAT5 files.

    * src/mat5.c src/sndfile.c
    Added support for unsigned 8 bit PCM MAT5 files.

    * tests/write_read_test.tpl
    Added test for unsigned 8 bit PCM MAT5 files.

    * doc/index.html
    Added unsigned 8 bit PCM MAT5 to capabilities matrix.

2002-09-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * test/update_header_test.c tests/misc_test.c
    Renamed update_header_test.c to misc_test.c.
    Added zero_data_test() to check for case where file is opened for write and
    closed immediately. The resulting file can be left in a state where
    libsndfile cannot open it. Problem reported by Werner Schweer, the author
    of Muse.

    * src/aiff.c
    Removed superfluous cast.

    * src/wav.c src/svx.c
    Fixed case of file generated with no data.
    Removed superfluous cast.

    * src/sndfile.c
    Fixed error on IA64 platform caused by incorrect termination of
    SndfileErrors struct array. This problem was found in the Debian buildd
    logs (http://buildd.debian.org/).

    * configure.in
    Added Octave directory.

    * Octave/Makefile.ma
    New Makfile.am for Octave directory.

    * Octave/sndfile_load.m Octave/sndfile_save.m Octave/sndfile_play.m
    New files for working with Octave.

    * doc/octave.html
    Document explaining the use of the above three Octave scripts.

2002-09-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed bug in RDWR mode.

2002-09-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Fixed psf_get_date_str() for systems which don't have gmtime_r() or
    gmtime().

    * src/file_io.c
    Added #include <io.h> for Win32. Reported by Koen Tanghe.

2002-09-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Added 'S' format specifier for psf_binheader_writef() which writes a C
    string, including single null terminator to the header.
    Added 'j' format specifier to allow jumping forwards or backwards in the
    header.
    Added function psf_get_date_str().

    * src/mat5.c
    Complete read and write support.

    * doc/index.html
    Added entries for MAT4 and MAT5 in capabilities matrix.

2002-09-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/mat4.c
    Completed read and write support.

    * src/common.h src/sndfile.c
    Added MAT4 and MAT5 specific error messages.

    * tests/write_read_test.tpl tests/Makefile.am
    Added tests for MAT4 and MAT5 files.

    * tests/stdio_test.c tests/stdout_test.c tests/stdin_test.c
    Added tests for MAT4 and MAT5 files.

2002-09-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/command.c
    Added elements for SF_FORMAT_MAT4 and SF_FORMAT_MAT5 to major_formats
    array.

    * examples/sfconvert.c
    Added mat4 and mat5 output targets.

2002-09-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Added check to prevent errors openning read only formats for read/write.

    * src/interleave.c
    New file for interleaving non-interleaved data. Non-interleaved data is
    only supported on read.

    * src/Makefile.am
    Added src/interleave.c to build.

2002-09-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/double64.c src/common.h
    Added double64_be_read(), double64_le_read(), double64_be_write() and
    double64_le_write() which replace double64_read() and double64_write().

    * src/common.c
    Cleanup of psf_binheader_readf() and add ability to read big and little
    endian doubles (required by mat4.c and mat5.c).
    Add ability for psf_binheader_writef() to write doubles to sound file
    headers.

2002-09-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/mat5.c
    New file for reading Matlab (tm) version 5 data files. This is also the
    native binary file format for version 2.1.X of GNU Octave which will be
    used for testing.
    Not complete yet.

    * src/mat4.c
    New file for reading Matlab (tm) version 4.2 data files. This is also the
    native binary file format for version 2.0.X of GNU Octave which will be
    used for testing.
    Not complete yet.

    * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am
    Mods to add Matlab files.

    * src/common.[ch]
    Added readf_endian field to SF_PRIVATE struct allowing endianness to
    remembered across calls to sf_binheader_readf().
    Fixed bug in width_specifier behaviour for printing hex values.

2002-08-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Check return value of close() call in psf_fclose().

2002-08-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ms_adpcm.c
    Commented out some code where 0x10000 was being subtracted from a short
    and the result assigned to a short again. Andrew Zaja found this.

2002-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/command.html
    Fixed typo found by Tommi Ilmonen.

    * src/ima_adpcm.c
    Changed type of diff from short to int to prevent errors which can occur
    during very rare circumstances. Thanks to FUWAFUWA.

2002-08-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/floating_point_test.c
    Disable testing on machines without lrintf().

    * Win32/Makefile.msvc
    Added dwd.c and wve.c to build.

    * configure.in
    Bumped version to 1.0.0.

2002-08-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Add a #include for Mac OS 9. Thanks to Stephane Letz.

    * src/wav.c
    Changed an snprintf to LSF_SNPRINTF.

    * doc/Makefile.am
    Added version-1.html.

2002-08-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Bumped version to 1.0.rc6.

    * src/*.c
    Modified scaling of normalised floats and doubles to integers. Until now
    this has been done by multiplying by 0x8000 for short output, 0x80000000
    for 32 bit ints and so on. Unfortunately this can cause an overflow and
    wrap around in the target value. All thes values have therefore been
    reduced to 0x7FFF, 0x7FFFFFFF and so on. The conversion from ints to
    normalised floats and doubles remains unchanged. This does mean that for
    repeated conversions normalised float -> pcm16 -> normalised float would
    result in a decrease in amplitude of 0x7FFF/0x8000 on every round trip.
    This is undesirable but less undesireable than the wrap around I am trying
    to avoid.

    * tests/floating_point_test.c
    Removed file hash checking because new float scaling procedure introduced
    above prevented the ability to crate a has on both x86 and PowerPC systems.

2002-08-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/txw.c
    Completed reading of TXW files. Seek doesn't work yet.

    * src/file_io.c
    Added a MacOS 9 replacement for ftruncate().

    * MacOS/sndfile.h
    Added MacOS 9 header file. This should be copied into src/ to compile
    libsndfile for MacOS9.

2002-08-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed commands SF_SET_NORM_DOUBLE and SFC_SET_NORM_FLOAT to return their
    values after being set. Reported by Jussi Laako.

    * configure.in
    If autogen is not found, touch all .c and .h files in tests/.

    * src/common.c
    Added format width specifier to psf_log_printf() for %u, %d, %D and %X.

    * src/dwd.c
    Completed implementation of read only access to these files.

    * src/common.h src/*.c src/pcm.c
    Removed redundant field chars from SF_PRIVATE struct and modified
    pcm_init() to do without it.

2002-08-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wve.c
    New file implementing read of Psion Alaw files. This will be a read only
    format. Implementation complete.

    * src/dwd/c
    Started implementation of DiamondWare Digitized files. Also read only, not
    complete.

    * src/wav.c
    Add parsing of 'smpl' chunk.

    * src/paf.c
    Fixed reading on un-normalized doubles and floats from 24 bit PAF files.
    This brings it into line with the reading of 8 bit files into
    un-normalized doubles which returns values in the range [-128, 127].

    * src/common.c
    Modified psf_log_printf() to accept the %% conversion specifier to allow
    printing of a single '%'.

    * src/sds.c
    Read only of 16 bit samples is working. Need to build a test harness for
    this and other read only formats.

2002-08-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Added --enable-experimental configure option.
    Removed pkg-config message at the end of the configure process.

    * src/sds.c src/txw.c src/rx2.c src/sd2.c
    Moved all the code in these files inside #if ENABLE_EXPERIMENTAL_CODE
    blocks and added new *_open() function for the case where experimental is
    not enabled. These new functions just return SFE_UNIMPLMENTED.

    * Win32/sndfile.h src/sndfile.h.in src/common.h
    Removed un-necessary #pragma pack commands.

    * src/file_io.c
    Implemented psf_ftruncate() and much other hacking for Win32.

    * Win32/Makefile.msvc
    Updated.

    * doc/win32.html
    Updated to include the copying of the sndfile.h file from the Win32/
    directory to the src/ directory.

    * Make.bat
    Batch file to make compiling on Wi32 a little easier. Implements "make" and
    "make check".

2002-08-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    Add place holder for ftruncate() on Win32 which doesn't have ftruncate().
    This will need to be fixed later.

    * src/sndfile.h.in
    New file (copy of sndfile.h) with sets up @TYPEOF_SF_COUNT_T@ which will be
    replaced by the correct type during configure.

    * configure.in
    Modified to find a good type for TYPEOF_SF_COUNT_T.

    * src/aiff.c
    Fixed a bug when reading malformed headers.

    * src/common.c
    Set read values to zero before performing read.

2002-08-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/command.html
    Fixed some HTML tags which were not allowing jumps to links within the
    page.

    * src/sds.c
    Massive hacking on this.

    * src/wav.c
    Added recognition of 'clm ' tag.

2002-08-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Added beginning of a capabilities list beyond simple file formats which
    can be read/written.

    * src/aiff.c
    Added parsing of INST and MARK chunks of AIFF files. At the moment this
    data is simply recorded in the log buffer. Later it will be possible to
    read this data from an application using sf_command().

    * src/wav.c
    Added parsing of 'cue ' chunk which contains loop information in WAV files.

    * exampes/sndfile-info.c
    Changed reporting of Samples to Frames.

    * src/wav.c src/w64.c src/aiff.c src/wav_w64.h
    Moved from a samples to a frames nomenclature to avoid confusion.

    * doc/FAQ.html
    What's the best format for storing temporary files?

    * src/sds.c
    New file for reading/writing Midi Sample Dump Standard files.

    * src/Makefile.am src/sndfile.c src/common.[ch]
    Added hooks for sds.c.

    * examples/sndfile-info.c
    Changed from using sf_perror() to using sf_error_str().

2002-08-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Added explanation of mode parameter for sf_open().
    Added explanation of usage of SFM_* values in sf_seek().

    * src/sndfile.[ch] src/command.c src/file_io.c src/common.h
    Implemented SFC_FILE_TRUNCATE to allow a file to be truncated. File
    truncation was suggested by James McCartney.

    * src/command.html
    Documented SFC_FILE_TRUNCATE.

    * tests/command_test.c
    Add tests for SFC_FILE_TRUNCATE.

    * src/sndfile.c
    Added a thrid parameter to the VALIDATE_SNDFILE_AND_ASSIGN_PSF macro to
    make resetting the error number optional. All uses of the macro other than
    in error reporting functions were changed to reset the error number.

    * src/pcm.c
    Fixed a bug were sf_read_* was logging an SFE_SHORT_READ even when no error
    occurred.

    * tests/write_read_test.tpl
    Added tests of internal error state.

2002-08-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/GSM610/private.h src/GSM610/*.c src/GSM610/Makefile.am
    Renamed private.h to gsm610_priv.h to prevent clash with other headers
    named private.h in other directories. (Probably only a problem on MacOS 9).

    * src/G72x/private.h src/G72x/*.c src/G72x/Makefile.am
    Renamed private.h to g72x_priv.h to prevent clash with other headers
    named private.h in other directories. (Probably only a problem on MacOS 9).

    * MacOS/config.h
    Changed values of HAVE_LRINT and HAVE_LRINTF to force use of code in
    float_cash.h.

    * src/sndfile.h
    Changes the name of samples field of the SF_INFO to frames. The old name
    had caused too much confusion and it simply had to be changed. There will
    be at least one more pre-release.

2002-08-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/index.html
    Updated formats matrix to include RAW (header-less) GSM 6.10.
    Fix specificaltion of table and spelling mistakes.

    * src/sndfile.c src/command.c
    Fixed bug in SFC_CALC_MAX_SIGNAL family and psf_calc_signal_max ().

    * tests/command.c
    Removed cruft.
    Added test for SFC_CALC_MAX_SIGNAL and SFC_CALC_NORM_MAX_SIGNAL.

    * configure.in
    Update version to 1.0.0rc5.

    * sfendian.h
    Removed inclusion of un-necessary header.

2002-08-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Minor fixes of info written to log buffer.

    * src/float_cast.h
    Add definition of HAVE_LRINT_REPLACEMENT.

    * tests/floating_point_test.c
    Fix file hash check on systems without lrint/lrintf.

    * tests/dft_cmp.c
    Limit SNR to less than -500.0dB.

    * examples/sndfile2oct.c
    Fixed compiler warnings.

    * doc/api.html
    Fixed error where last parameter of sf_error_str() was sf_count_t instead
    of size_t.

2002-08-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    Why doesn't libsndfile do interleaving/de-interleaving.

    * tests/pcm_test.tpl
    On Win32 do not perform hash check on files containing doubles.

2002-08-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Defined SF_COUNT_MAX_POSITIVE() macro, a portable way of setting variables
    of type sf_count_t to their maximum positive value.

    * src/dwvw.c src/w64.c
    Used SF_COUNT_MAX_POSITIVE().

2002-07-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c
    Fixed bug in reading/writing of 24 bit PCM PAF files on big endian systems.

    * tests/floating_point_tests.c
    Fixed hash values for 24 bit PCM PAF files.
    Disabled file has check if lrintf() function is not available and added
    warning.
    Decreased level of signal from a peak of 1.0 to a value of 0.95 to prevent
    problems on platforms without lrintf() ie Solaris.

2002-07-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed a problem with two different kinds of mal-formed WAV file header. The
    first had the 'fact' chunk before the 'fmt ' chunk, the other had an
    incomplete 'INFO' chunk at the end of the file.

    * src/w64.c
    Added fix to allow differentiation between W64 files and ACID files.

    * src/au_g72x.c src/common.h src/sndfile.c
    Added error for G72x encoded files with more than one channel.

    * tests/pcm_test.tpl tests/utils.tpl
    Moved function check_file_hash_or_die() to utils.tpl. Function was then
    modified to calculate the has of the whole file.

    * src/wav.c
    Fixed problem writing the 'fact' chunk on big endian systems.

    * tests/sfconvert.c
    Fixed bug where .paf files were being written as Sphere NIST.

2002-07-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/voc.c
    Fix for reading headers generated using SFC_UPDATE_HEADER_NOW.

    * doc/command.html
    Add docs for SFC_UPDATE_HEADER_NOW and SFC_SET_UPDATE_HEADER_AUTO.

2002-07-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * man/sndfile-info.1 man/sndfile-play.1
    Added manpages supplied by Joshua Haberman the Debian maintainer for
    libsndfile. Additional tweaks by me.

    * configure.in man/Makefile.am
    Hooked manpages into autoconf/automake system.

    * src/sndfile.c
    Added hooks for SFC_SET_UPDATE_HEADER_AUTO.

    * tests/update_header_test.c
    Improved rigor of testing.

    * src/*.c
    Fixed problem with *_write_header() functions.

2002-07-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/*.html
    Updates to documentation to fix problems found by wdg-html-validator.

    * src/common.h src/command.c
    Added normalize parameter to calls to psf_calc_signal_max() and
    psf_calc_max_all_channels().

    * src/sndfile.c
    Added handling for commands SFC_CALC_NORM_SIGNAL_MAX and
    SFC_CALC_NORM_MAX_ALL_CHANNELS.

    * doc/command.html
    Added entry for SFC_CALC_NORM_SIGNAL_MAX and SFC_CALC_NORM_MAX_ALL_CHANNELS.

2002-07-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c Win32/Makefile.msvc
    Get sndfile-play program working on Win32. The Win32 PCM sample I/O API
    sucks. The sndfile-play program now works on Linux, MacOSX, Solaris and
    Win32.

2002-07-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/FAQ.html
    New file for frequently asked questsions.

2002-07-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Documentation fixes.

    * src/au.[ch] src/au_g72x.c src/G72x/g72x.h
    Add support of 40kbps G723 ADPCM encoding.

    * tests/lossy_comp_test.c tests/floating_point_test.c
    Add tests for 40kbps G723 ADPCM encoding.

    * doc/index.html
    Update support matrix.

2002-07-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/command.html
    Documented SFC_GET_SIMPLE_FORMAT_COUNT, SFC_GET_SIMPLE_FORMAT,
    SFC_GET_FORMAT_* and SFC_SET_ADD_PEAK_CHUNK.

    * src/sndfile.c src/pcm.c
    Add ability to turn on and off the addition of a PEAK chunk for floating
    point WAV and AIFF files.

    * src/sndfile.[ch] src/common.h src/command.c
    Added sf_command SFC_CALC_MAX_ALL_CHANNELS. Implemented by Maurizio Umberto
    Puxeddu.

    * doc/command.html
    Docs for SFC_CALC_MAX_ALL_CHANNELS (assisted by Maurizio Umberto Puxeddu).

2002-07-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/gsm610.c
    Finalised support for GSM 6.10 AIFF files and added support for GSM 6.10
    encoded RAW (header-less) files.

    * src/wav.c
    Add support for IBM_FORMAT_MULAW and IBM_FORMAT_ALAW encodings.

    * src/api.html
    Fixed more documentation bugs.

2002-07-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h src/common.h
    Moved some yet-to-be-implelmented values for SF_FORMAT_* from the public
    header file sndfile.h to the private header file common.h to avoid
    confusion about the actual capabilities of libsndfile.

2002-07-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c src/wav.c
    Fixed file parsing for WAV and AIFF files containing non-audio data after
    the data chunk.

    * src/aiff.c src/sndfile.c
    Add support for GSM 6.10 encoded AIFF files.

    * tests/lossy_comp_test.c tests/Makefile.am
    Add tests for GSM 6.10 encoded AIFF files.

    * src/*.c
    Fix compiler warnings.

2002-07-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/command_test.c
    For SFC_SET_NORM_* tests, change the file format from SF_FORMAT_WAV to
    SF_FORMAT_RAW.

    * src/sndfile.c
    Added sf_command(SFC_TEST_ADD_TRAILING_DATA) to allow testing of reading
    from AIFF and WAV files with non-audio data after the audio chunk.

    * src/common.h
    Add test commands SFC_TEST_WAV_ADD_INFO_CHUNK and
    SFC_TEST_AIFF_ADD_INST_CHUNK. When these commands are working, they will be
    moved to src/sndfile.h

    * src/aiff.c src/wav.c
    Begin implementation of XXXX_command() hook for sf_command().

    * tests/write_read_test.tpl
    Added sf_command (SFC_TEST_ADD_TRAILING_DATA) to ensure above new code was
    working.

2002-07-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/update_header_test.c
    Allow read sample count == write sample count - 1 to fix problems with VOC
    files.

    * tests/write_read_test.tpl tests/pcm_test.tpl
    Fixed some problems in the test suite discovered by using Valgrind.

2002-07-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.[ch] tests/*.c
    Renamed check_log_buffer() to check_log_buffer_or_die().

    * src/sndfile.c
    SFC_UPDATE_HEADER_NOW and SFC_SETUPDATE_HEADER_AUTO almost finished. Works
    for all file formats other than VOC.

2002-07-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.[ch] src/common.h
    Started adding functionality to allow the file header to be updated before
    the file is closed on files open for SFM_WRITE. This was requested by
    Maurizio Umberto Puxeddu who is using libsndfile for file I/O in iCSound.

    * tests/update_header_test.c
    New test program to test that the above functionality is working correctly.

    * tests/peak_chunk_test.c tests/floating_point_test.c
    Cleanups.

2002-07-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sfendian.[ch]
    Changed length count parameters for all endswap_XXX() functions from
    sf_count_t (which can be 64 bit even on 32 bit architectures) to int. These
    functions are only called frin inside the library, are always called with
    integer parameters and doing the actual calculation on 64 bit values is
    slow in comparision to doing it on ints.

    * examples/sndfile-play.c
    More playback hacking for Win32.

2002-07-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    In psf_log_printf(), changed %D format conversion specifier to %M (marker) and
    added %D specifier for printing the sf_count_t type.

    * src/*.c
    Changed all usage of psf_log_printf() with %D format conversion specifiers
    to use %M conversion instead.

    * tests/pcm_test.tpl tests/pcm_test.def
    New files to autogen pcm_test.c.

    * src/pcm.c
    Fixed bug in scaling floats and doubles to 24 bit PCM and vice versa.

2002-07-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Fix setup of $ac_cv_sys_largefile_CFLAGS so that sndfile.pc gets valid
    values for CFLAGS.

    * examples/sndfile-play.c
    Start adding playback support for Win32.

2002-07-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Worked to removed compiler warnings.
    Extensive refactoring.

    * src/common.[ch]
    Added function psf_memset() which works like the standard C function memset
    but takes and sf_count_t as the length parameter.

    * src/sndfile.c
    Replaced calls to memset(0 with calls to psf_memset() as required.

2002-07-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Added "libsndfile : " to the start of all error messages. This was suggested
    by Conrad Parker author of Sweep ( http://sweep.sourceforge.net/ ).

    * src/sfendian.[ch]
    Added endswap_XXXX_copy() functions.

    * src/pcm.c src/float32.c src/double64.c
    Use endswap_XXXX_copy() functions and removed dead code.
    Cleanups and optimisations.

2002-07-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/sndfile.h
    Gave values to all the SFC_* enum values to allow better control of the
    interface as commands are added and removed.
    Added new command SFC_SET_ADD_PEAK_CHUNK.

    * src/wav.c src/aiff.c
    Modified wav_write_header and aiff_write_header to make addition of a PEAK
    chunk optional, even on floating point files.

    * tests/benchmark.tpl
    Added call to sf_command(SFC_SET_ADD_PEAK_CHUNK) to turn off addition of a
    PEAK chunk for the benchmark where we are trying to miximize speed.

    * src.pcm.c
    Changed tribyte typedef to something more sensible.
    Further conversion speed ups.

2002-07-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/command.c
    In major_formats rename "Sphere NIST" to "NIST Sphere".

    * src/common.c src/sfendian.c
    Moved all endswap_XXX_array() functions to sfendian.c. These functions will
    be tweaked to provide maximum performance. Since maximum performance on one
    platform does not guarantee maximum performance on another, a small set of
    functions will be written and the optimal one chosen at compile time.

    * src/common.h src/sfendian.h
    Declarations of all endswap_XXX_array() functions moved to sfendian.h.

    * src/Makefile.am
    Add sfendian.c to build targets.

2002-07-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c src/sfendian.h
    Re-coded PCM encoders and decoders to match or better the speed of
    libsndfile version 0.0.28.

2002-06-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Add checking for WAVPACK data in standard PCM WAV file. Return error if
    found. This WAVPACK is *WAY* broken. It uses the same PCM WAV file header
    and then stores non-PCM data.

    * tests/benchmark.tpl
    Added more tests.

2002-06-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/benchmark.tpl
    Added conditional definition of M_PI.
    For Win32, set WRITE_PERMS to 0777.

    * Win32/Makefile.msvc
    Added target to make generate program on Win32.

    * src/samplitude.c
    Removed handler for Samplitude RAP file format. This file type seems rarer
    than hens teeth and is completely undocumented.

    * src/common.h src/sndfile.c src/Makefile.am Win32/Makefile.msvc
    Removed references to sampltiude RAP format.

    * tests/benchmark.tpl
    Benchmark program now prints the libsndfile version number when run. This
    program was also backported to version 0 to compare results. Version
    1.0.0rc2 is faster than version 0.0.28 on most conversions but slower on
    some. The slow ones need to be fixed before final release.

2002-06-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/benchmark.def tests/benchmark.tpl
    New files which generate tests/benchmark.c using Autogen. Added int ->
    SF_FORMAT_PCM_24 test.

    * tests/benchmark.c
    Now and Autogen output file.

    * tests/Makefile.am
    Updated for above changes.

2002-06-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/benchmark.c
    Basic benchmark program complete. Need to convert it to Autogen.

    * Win32/Makefile.msvc
    Added benchmark.exe target.

2002-06-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/generate.c
    New program to generate a number of different output file formats from a
    single input file. This allows testing of the created files.

    * tests/benchmark.c
    New test program to benchmark libsndfile. Nowhere near complete yet.

    * examples/Makefile.am tests/Makefile.am
    New make rules for the two new programs.

2002-06-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/libsndfile.def
    Removed definition for sf_signal_max().

    * src/sndfile.c
    Removed cruft.

    * doc/index.html
    A number of documentation bugs were fixed. Thanks to Anand Kumria.

    * doc/version-1.html
    Minor doc updates.

    * configure.in
    Bumped version to 1.0.0rc2.

    * src/sf_command.h src/Makefile.am
    Removed the header file as it was no longer being used. Thanks to Anand
    Kunria for spotting this.

    * doc/index.html
    A number of documentation bugs were fixed. Thanks to Anand Kumria.

2002-06-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Test for Win32 before testing SIZEOF_OFF_T so that it works correctly
    on Win32..

    * src/file_io.c
    Win32 fixes to ensure O_BINARY is used for file open.

    * doc/win32.html
    New file documenting the building libsndfile on Win32.

    * doc/*.html
    Updating of documentation.

2002-06-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pcm_test.c
    Minor changes to allow easier determination of test file name.

    * src/sndfile.[ch]
    Removed function sf_signal_max().

    * examples/sndfile-play.c
    Changed call to sf_signal_max() to a call to sf_command().

2002-06-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/format.c src/command.c
    Renamed format.c to command.c which will now include code for sf_command()
    calls to perform operations other than format commands.

    * src/sndfile.c src/sndfile.h
    Removed function sf_get_signal_max() which is replaced by commands passed
    to sf_command().

    * src/command.c
    Implement commands SFC_CALC_SIGNAL_MAX.

    * doc/command.html
    Documented SFC_CALC_SIGNAL_MAX.

2002-06-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-play.c
    Mods to make sndfile-play work on Solaris. The program sndfile-play now
    runs on Linux, MaxOSX and Solaris. Win32 to come.

    * src/format.c
    Added SF_FORMAT_DWVW_* to subtype_formats array.

    * src/nist.c
    Added support for 8 bit NIST Sphere files. Example file supplied by Anand
    Kumria.

2002-06-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sndfile-info.c
    Tidy up of output format.

    * examnples/sndfile-play.c
    Mods to make sndfile-play work on MacOSX using Apple's CoreAudio API.

    * configure.in
    Add new variables OS_SPECIFIC_INCLUDES and OS_SPECIFIC_LINKS which were
    required to supply extra include paths and link parameters to get
    sndfile-play working on MacOSX.

    * examples/Makefile.am
    Use OS_SPOECIFIC_INCLUDES and OS_SPECIFIC_LINKS to build commands for
    sndfile-play.

2002-06-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/nist.c
    Added ability to read/write new NIST Sphere file types (A-law, u-law).
    Header parser was re-written from scratch. Example files supplied by Anand
    Kumria.

    * src/sndfile.c
    Support for A-law and u-law NIST files.

    * tests/Makefile.am tests/lossy_comp_test.c
    Tests for A-law and u-law NIST files.

2002-06-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.c
    Fixed an error in error string.

2002-06-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * acinclude.m4
    Removed exit command to allow cross-compiling.

    * Win32/unistd.h src/file_io.c
    Moved contents of first file into the second file (enclosed in #ifdef).
    Win32/unistd.h is now an empty file but still must be there for libsndfile
    to compile on Win32.

    * src/sd2.c, src/sndfile.c:
    Fixes for Sound Designer II files on big endian systems.

2002-06-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Modified to work around problems with crappy MacOSX version of sed.
    Added sanity check for proper values for CFLAGS.

2002-06-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Code clean up in sf_open ().

    * Win32/Makefile.msvc
    Michael Fink's contributed MSVC++ makefile was hacked to bits and put back
    together in a new improved form.

    * src/file_io.c
    Fixes for Win32; _lseeki64() returns an invalid argument for calls like
    _lseeki64(fd, 0, SEEK_CUR) so need to use _telli64 (fd) instead.

    * src/common.h src/sndfile.c src/wav.c src/aiff.c
    Added SFE_LOG_OVERRUN error.
    Added termination for potential infinite loop when parsing file headers.

    * src/wav.c src/w64.c
    Fixed bug casuing incorrect header generation when opening file read/write.

2002-06-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/api.html
    Improved the documentation to make it clearer that the file read method
    and the underlying file format are completely disconnected. Suggested
    by Josh Green.

    * doc/command.html
    Started correcting docs to take into account changes made to the
    operations of the sf_command () function. Not complete yet.

    * src/sndfile.c
    Reverted some changes which had broken the partially working SDII header
    parsing. Now have access to an iBook with OS X so reading and writing SDII
    files on all platforms should be a reality in the near future. On Mac this
    will involve reading the resource fork via the standard MacOS API. To move
    a file from Mac to another OS, the resource and data forks will need to be
    combined before transfer. The combined file will be read on both Mac and
    other OSes like any other file.

2002-06-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * ltmain.sh
    Applied a patch from http://fink.sourceforge.net/doc/porting/libtool.php
    which allows libsndfile to compile on MacOSX 10.1. This patch should not
    interfere with compiling on other OSes.

    * src/GSM610/private.h
    Changes to fix compile problems on MacOSX (see src/GSM610/ChangeLog).

    * src/float_cast.h
    Added MacOSX replacements for lrint() and lrintf().

2002-06-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Replaced the code to print the filename to the log buffer when a file is
    opened. This code seems to have been left out during the merge of
    sf_open_read() and sf_open_write() to make a single  functions sf_open().

2002-06-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed a bug where the WAV header parser was going into an infinite loop
    on a badly formed LIST chunk. File supplied by David Viens.

2002-05-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Added a message at the end of the configuration process to warn about the
    need for the use of pkg-config when linking programs against version 1 of
    libsndfile.

    * doc/pkg-config.html
    New documentation file containing details of how to use pkg-config to
    retrieve settings for CFLAGS and library locations for linking files
    against version 1 of libsndfile.

2002-05-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed minor bug in handling of so-called ACIDized WAV files.

2002-05-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/libsndfile.def Win32/Makefile.msvc
    Two new files contributed by Michael Fink (from the winLAME project)
    which allows libsndfile to be built on windows in a MSDOS box by doing
    "nmake -f Makefile.msvc". Way cool!

2002-05-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    MacOSX is SSSOOOOOOO screwed up!!! I can't believe how hard it is to
    generate a tarball which will configure and compile on that platform.
    Joined the libtool mailing list to try and get some answers.

2002-05-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Changed to autoconf version 2.50. MacOSX uses autoconf version 2.53 which
    is incompatible with with version 2.13 which had been using until now.
    The AC_SYS_LARGE_FILE macro distributed withe autoconf 2.50 is missing a
    few features so AC_SYS_EXTRA_LARGE file was defined to replace it.

    * configure.in
    Changed to automake version 1.5 to try and make a tarball which will
    work on MacOSX.

2002-05-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_gsm610.c
    Changed name to gsm610.c. Added reading/writing of headerless files.

    * src/sndfile.c src/raw.c
    Added ability to read/write headerless (SF_FORMAT_RAW) GSM 6.10 files.

2002-05-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/lossy_comp_test.c
    Clean up in preparation for Autogen-ing this file.

    * src/GSM610/*.[ch]
    Code cleanup and prepartion forgetting file seek working. Details in
    src/GSM610/ChangeLog.

    * sndfile.pc.in
    Testing complete. Is sndfile.m4 still needed?

2002-05-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.tpl tests/rdwr_test.tpl
    Merged tests from these two programs into write_read_test.tpl and deleted
    rdwr_test.tpl.

2002-05-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/w64.c src/svx.c src/paf.c
    Fixed bugs in read/write mode.

2002-05-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/Makefile.am
    Renamed sfplay.c to sndfile-play.c and sndfile_info.c to sndfile-info.c for
    consistency when these programs become part of the Debian package
    sndfile-programs.

    * sndfile.pc.in
    New file to replace sndfile-config.in. Libsndfile now uses the pkg-config
    model for providing installation parameters to dependant programs.

    * src/sndfile.c
    Cleanup of code in sf_open().

2002-05-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/utils.tpl tests/write_read_test.tpl
    More conversion to Autogen fixes and enchancements.

    * src/*.c
    Read/write mode is now working for 16, 24 and 32 bit PCM as well as 32
    bit float and 64 bit double data. More tests still required.

    * src/Makefile.am
    Added DISTCLEANFILES target to remove config.status and config.last.

    * Win32/Makefile.am MacOS/Makefile.am
    Added DISTCLEANFILES target to remove Makefile.

2002-05-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.[ch] tests/rdwr_test.c
    More verifying workings of read/write mode. Fixing bugs found.

    * tests/utils.[ch]
    Made these files Autogen generated files.

    * tests/util.tpl tests/util.def
    New Autogen files to generate utils.[ch]. Moved some generic test functions
    into this file. Autogen is such a great tool!

2002-05-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c src/float_cast.h Win32/config.h
    Fixed a couple of Win32 specific bugs pointed out by Michael Fink
    (maintainer of WinLAME) and David Viens.

    * tests/check_log_buffer.[ch] tests/utils.[ch]
    Moved check_log_buffer() to utils.[ch] and deleted old file.

2002-05-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.[ch] src/sndfile.c
    New function psf_default_seek() which will be the default seek function
    for things like PCM and floating point data. This default is set for
    both read and write in sf_open() but can be over-ridden by any codec
    during it's initialisation.

2002-05-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/au.c
    AU files use a data size value of -1 to mean unknown. Fixed au_open_read()
    to allow opening files like this.

    * tests/rdwr_test .c
    Added more tests.

    * src/sndfile.c
    Fixed bugs in read/write mode found due to improvements in the test
    program.

2002-04-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/rdwr_test .c
    New file for testing read/write mode.

2002-04-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * m4/*
    Removed all m4 macros from this directory as they get concatenated to form
    the file aclocal.m4 anyway.

    * sndfile.m4
    Moved this from the m4 directory to the root directory asn this is part of
    the distribution and is installed during "make install".

2002-04-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float32.c
    Removed logging of peaks for all file formats other than AIFF and WAV.

    * tests/write_read_test.tpl tests/write_read_test.def
    New files which autogen uses to generate write_read_test.c. Doing it this
    way makes write_read_test.c far easier to maintain. Other test programs
    will be converted to autogen in the near future.

    * src/*.c
    Fixed a few bugs found when testing on Sparc (bug endian) Solaris.

2002-04-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * doc/*.html
    Fixed documention versioning.

    * configure.in
    Fixed a bug in the routines which search for Large File Support on systems
    which have large file support by defualt.

2002-04-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.[ch]
    Found and fixed an issue which can cause a bug in other software (I was
    porting Conrad Parker's Sweep program from version 0 of the library to
    version 1). When opening a file for write, the libsndfile code would
    set the sfinfo.samples field to a maximum value.

    * tests/write_read_test.c
    Added tests to detect the above problem.

2002-04-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.[ch]
    Finished base implementation of read/write mode. Much more testing still
    needed.

    * m4/largefile.m4
    Macro for detecting Large File Standard capabilities. This macro was ripped
    out of the aclocal.m4 file of GNU tar-1.13.

    * configure.in
    Added detection of large file support. Files larger than 2 Gigabytes should
    now be supported on 64 bit platforms and many 32 bit platforms including
    Linux (2.4 kernel, glibc-2.2), *BSD, MacOS, Win32.

    * libsndfile_convert_version.py
    A Python script which attempts to autoconvert code written to use version 0
    to version 1.

2002-04-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.[ch]
    Finished base implementation of read/write mode. Much more testing still
    needed.

    * tests/write_read_test.c
    Preliminary tests for read/write mode added. More needed.

2002-04-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.[ch]
    Removed sf_open_read() and sf_open_write() functions,replacting them with
    sf_open() which takes an extra mode parameter (SF_OPEN_READ, SF_OPEN_WRITE,
    or SF_OPEN_RDWR). This new function sf_open can now be modified to allow
    opening a file formodification (RDWR).

2002-04-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Completed merging of separate xxx_open_read() and xxx_open_write()
    functions. All tests pass.

2002-04-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/au.c
    Massive refactoring required to merge au_open_read() with au_open_write()
    to create au_open().

2002-04-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Started changes required to allow a sound file to be opened in read/write
    mode, with separate file pointers for read and write. This involves merging
    of encoder/decoder functions like pcm_read_init() and pcm_write_init()
    int a new function pcm_init() as well as doing something similar for all
    the file type specific functions ie aiff_open_read() and aiff_open_write()
    were merged to make the function aiff_open().

2002-04-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/file_io.c
    New file containing psf_fopen(), psf_fread(), psf_fwrite(), psf_fseek() and
    psf_ftell() functions. These function will replace use of fopen/fread/fwrite
    etc and allow access to files larger than 2 gigabytes on a number of 32 bit
    OSes (Linux on x86, 32 bit Solaris user space apps, Win32 and MacOS).

    * src/*.c
    Replaced all instances of fopen with psf_open, fread with psd_read, fwrite
    with psf_write and so on.

2002-03-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/dwvw.c
    Finally fixed all known problems with 12, 16 and 24 bit DWVW encoding.

    * tests/floating_point_test.c
    Added tests for 12, 16 and 24 bit DWVW encoding.

2002-03-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * m4/endian.m4
    Defines a new m4 macro AC_C_FIND_ENDIAN, for determining the endian-ness of
    the target CPU. It first checks for the definition of BYTE_ORDER in
    <endian.h>, then in <sys/types.h> and <sys/param.h>. If none of these work
    and the C compiler is not a cross compiler it compiles and runs a program
    to test for endian-ness. If the compiler is a cross compiler it makes a
    guess based on $target_cpu.

    * configure.in
    Modified to use AC_C_FIND_ENDIAN.

    * src/sfendian.h
    Simplified.

2002-02-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/floating_point_test.c
    Tests completely rewritten using the dft_cmp function. Now able to
    calculate a quick guesstimate of the Signal to Noise Ratio of the encoder.

2002-02-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/dft_cmp.[ch]
    New files containing functions for comparing pre and post lossily
    compressed data using a quickly hacked DFT.

    * tests/utils.[ch]
    New files containing functions for saving pre and post encoded data in a
    file readable by the GNU Octave package.

2002-02-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * m4/lrint.m4 m4/lrintf.m4
    Fixed m4 macros to define HAVE_LRINT and HAVE_LRINTF even when the test
    is cached.

2002-02-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/floating_point_test.c
    Fixed improper use of strncat ().

2002-02-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/headerless_test.c
    New test program to test the ability to open and read a known file type as a
    RAW header-less file.

2002-02-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/losy_comp_test.c
    Added a test to ensure that the data read from a file is not all zeros.

    * examples/sfconvert.c
    Added "-gsm610" encoding types.

2002-01-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sfconvert.c
    Added "-dwvw12", "-dwvw16" and "-dwvw24" encoding types.

    * tests/dwvw_test.c
    New file for testing DWVW encoder/decoder.

2002-01-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/dwvw.c
    Implemented writing of DWVW. 12 bit seems to work, 16 and 24 bit still broken.

    * src/aiff.c
    Improved reporting of encoding types.

    * src/voc.c
    Clean up.

2002-01-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/dwvw.c
    New file implementing lossless Delta Word Variable Width (DWVW) encoding.
    Reading 12 bit DWVW is now working.

    * src/aiff.c common.h sndfile.c
    Added hooks for DWVW encoded AIFF and RAW files.

2002-01-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/w64.c
    Robustify header parsing.

    * src/wav_w64.h
    Header file wav.h was renamed to wav_w64.h to signify sharing of
    definitions across the two file types.

    * src/wav.c src/w64.c src/wav_w64.c
    Refactoring.
    Modified and moved functions with a high degree of similarity between
    wav.c and w64.c to wav_w64.c.

2002-01-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/w64.c
    Completed work on getting read and write working.

    * examples/sfplay.c
    Added code to scale floating point data so it plays at a reasonable volume.

    * tests/Makefile.am tests/write_read_test.c
    Added tests for W64 files.

2002-01-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Modded all code in file header writing routines to use
    psf_new_binheader_writef().
    Removed psf_binheader_writef() from src/common.c.
    Globally replaced psf_new_binheader_writef with psf_binheader_writef.

2002-01-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Modded all code in file parsing routines to use psf_new_binheader_readf().
    Removed psf_binheader_readf() from src/common.c.
    Globally replaced psf_new_binheader_readf with psf_binheader_readf.

    * src/common.[ch]
    Added new function psf_new_binheader_writef () which will soon replace
    psf_binheader_writef (). The new function has basically the same function
    as the original but has a more flexible and capable interface. It also
    allows the writing of 64 bit integer values for files contains 64 bit file
    offsets.

2002-01-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/formats.c src/sndfile.c src/sndfile.h
    Added code allowing full enumeration of supported file formats via the
    sf_command () interface.
    This feature will allow applications to avoid needing recompilation when
    support for new file formats are added to libsndfile.

    * tests/command_test.c
    Added test code for the above feature.

    * examples/list_formats.c
    New file. An example of the use of the supported file enumeration
    interface. This program lists all the major formats and for each major
    format the supported subformats.

2002-01-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.[ch] tests/*.c
    Changed command parameter of sf_command () function from a test string to
    an int. The valid values for the command parameter begin with SFC_ and are
    listed in src/sndfile.h.

2001-12-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/formats.c src/sndfile.c
    Added an way of enumerating a set of common file formats using the
    sf_command () interface. This interface was suggested by Dominic Mazzoni,
    one of the main authors of Audacity (http://audacity.sourceforge.net/).

2001-12-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Added checking of filename parameter in sf_open_read (). Previousy, if a
    NULL pointer was passed the library would segfault.

2001-12-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c src/common.h
    Changed the len parameter of the endswap_*_array () functions from type
    int to type long.

    * src/pcm.c
    Fixed a problem which

2001-12-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Added conditional #include <sys/types.h> for EMX/gcc on OS/2. Thanks to
    Paul Hartman for pointing this out.

    * tests/lossy_comp_test.c tests/floating_point_test.c
    Added definitions for M_PI for when it isn't defined in <math.h>.

2001-11-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ircam.c
    Re-implemented the header reader. Old version was making incorrect
    assumptions about the endian-ness of the file from the magic number at the
    start of the file. The new code looks at the integer which holds the
    number of channels and determines the endian-ness from that.

2001-11-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Added support for other AIFC types ('raw ', 'in32', '23ni').
    Further work on IMA ADPCM encoding.

2001-11-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ima_adpcm.c
    Renamed from wav_ima_adpcm.c. This file will soon handle IMA ADPCM
    encodings for both WAV and AIFF files.

    * src/aiff.c
    Started adding IMA ADPCM support.

2001-11-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/double.c
    New file for handling double precision floating point (SF_FORMAT_DOUBLE)
    data.

    * src/wav.c src/aiff.c src/au.c src/raw.c
    Added support for SF_FORMAT_DOUBLE data.

    * src/common.[ch]
    Addition of endswap_long_array () for endian swapping 64 bit integers. This
    function will work correctly on processors with 32 bit and 64 bit longs.
    Optimised endswap_short_array () and endswap_int_array ().

    * tests/pcm_test.c
    Added and extra check. After the first file of each type is written to disk
    a checksum is performed of the first 64 bytes and checked against a pre-
    calculated value. This will work whatever the endian-ness of the host
    machine.

2001-11-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Added handling of u-law, A-law encoded AIFF files. Thanks to Tom Erbe for
    supplying example files.

    * tests/lossy_comp_test.c
    Added tests for above.

    * src/common.h src/*.c
    Removed function typedefs from common.h and function pointer casting in all
    the other files. This allows the compiler to perform proper type checking.
    Hopefully this will prevernt problems like the sf_seek bug for OpenBSD,
    BeOS etc.

    * src/common.[ch]
    Added new function psf_new_binheader_readf () which will eventually replace
    psf_binheader_readf (). The new function has basically the same function as
    the original but has a more flexible and capable interface. It also allows
    the reading of 64 bit integer values for files contains 64 bit file
    offsets.

2001-11-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/voc.c
    Completed implementation of VOC file handling. Can now handle 8 and 16 bit
    PCM, u-law and A-law files with one or two channels.

    * src/write_read_test.c tests/lossy_comp_test.c
    Added tests for VOC files.

2001-11-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float_cast.h
    Added inline asm version of lrint/lrintf for MacOS. Solution provided by
    Stephane Letz.

    * src/voc.c
    More work on this braindamaged format. The VOC files produced by SoX also
    have a number of inconsistencies.

2001-11-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c
    Added support for 8 bit PCM PAF files.

    * tests/write_read_test.c
    Added tests for 8 bit PAF files.

2001-11-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/pcm_test.c
    New test program to test for correct scaling of integer values between
    different sized integer containers (ie short -> int).
    The new specs for libsndfile state that when the source and destination
    containers are of a different size, the most significant bit of the source
    value becomes the most significant bit of the destination container.

    * src/pcm.c src/paf.c
    Modified to pass the above test program.

    * tests/write_read_test.c tests/lossy_comp_test.c
    Modified to work with the new scaling rules.

2001-11-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/raw.c tests/write_read_test.c tests/write_read_test.c
    Added ability to do raw reads/writes of float, u-law and A-law files.

    * src/*.[ch] examples/*.[ch] tests/*.[ch]
    Removed dependance on pcmbitwidth field of SF_INFO struct and moved to new
    SF_FORMAT_* types and use of SF_ENDIAN_BIG/LITTLE/CPU.

2001-11-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.[ch]
    Started implmentation of major changes documented in doc/version1.html.

    Removed all usage of off_t which is not part of the ISO C standard. All
    places which were using it are now using type long which is the type of
    the offset parameter for the fseek function.
    This should fix problems on BeOS, MacOS and *BSD like systems which were
    failing "make check" because sizeof (long) != sizeof (off_t).

--------------------------------------------------------------------------------
This is the boundary between version 1 of the library above and version 0 below.
--------------------------------------------------------------------------------

2001-11-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sfplay_beos.cpp
    Added BeOS version of sfplay.c. This needs to be compiled using a C++
    compiler so is therefore not built by default. Thanks to Marcus Overhagen
    for providing this.

2001-11-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sfplay.c
    New example file showing how libsndfile can be used to read and play a
    sound file.
    At the moment on Linux is supported. Others will follow in the near future.

2001-11-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c
    Fixed problem with normalisation code where a value of 1.0 could map to
    a value greater than MAX_SHORT or MAX_INT. Thanks to Roger Dannenberg for
    pointing this out.

2001-11-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c
    Fixed scaling issue when reading/writing 8 bit files using
    sf_read/sf_write_short ().
    On read, values are scaled so that the most significant bit in the char
    ends up in the most significant bit of the short. On write, values are
    scaled so that most significant bit in the short ends up as the most
    significant bit in the char.

2001-11-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/au.c src/sndfile.c
    Added support for 32 bit float data in big and little endian AU files.

    * tests/write_read_test.c
    Added tests for 32 bit float data in AU files.

2001-11-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/lossy_comp_test.c
    Finalised testing of stereo files where possible.

2001-11-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_ms_adpcm.c
    Fixed bug in writing stereo MS ADPCM WAV files. Thanks to Xu Xin for
    pointing out this problem.

2001-10-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_ms_adpcm.c
    Modified function srate2blocksize () to handle 44k1Hz stereo files.

2001-10-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/w64.c
    Added support for Sonic Foundry 64 bit WAV format. As Linux (my main
    development platform) does not yet support 64 bit file offsets by default,
    current handling of this file format treats everything as 32 bit and fails
    openning the file, if it finds anything that goes beyond 32 bit values.

    * src/sndfile.[hc] src/common.h src/Makefile.am
    Added hooks for W64 support.

2001-10-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Added more warnings options to CFLAGS when the gcc compiler is detected.

    * src/*.[ch] tests/*.c examples/*.c
    Started fixing the warning messages due to the new CFLASG.

    * src/voc.c
    More work on VOC file read/writing.

    * src/paf.c
    Found that PAF files were not checking the normalisation flag when reading
    or writing floats and doubles. Fixed it.

    * tests/floating_point_test.c
    Added specific test for the above problem.

    * src/float_cast.h src/pcm.c
    Added a section for Win32 to define lrint () and lrintf () in the header
    and implement it in the pcm.c

2001-10-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * sndfile-config.in m4/sndfile.m4
    These files were donated by Conrad Parker who also provided instructions
    on how to install them using autoconf/automake.

    * src/float_cast.h
    Fiddled around with this file some more. On Linux and other gcc supported
    OSes use the C99 functions lrintf() and lrint() for casting from floating
    point to int without incurring the huge perfromance penalty (particularly
    on the i386 family) caused by the regular C cast from float to int.
    These new C99 functions replace the FLOAT_TO_* and DOUBLE_TO_* macros which
    I had been playing with.

    * configure.in m4/lrint.m4 m4/lrintf.m4
    Add detection of these functions.

2001-10-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/voc.c
    Completed code for reading VOC files containing a single audio data
    segment.
    Started implementing code to handle files with multiple VOC_SOUND_DATA
    segments but couldn't be bothered finishing it. Multiple segment files can
    have different sample rates for different sections and other nasties like
    silence and repeat segments.

2001-10-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/*.c
    Removed SF_PRIVATE struct field fdata and replaced it with extra_data.

    * src/voc.c
    Further development of the read part of this woefult file format.

2001-10-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float_cast.h
    Implemented gcc and i386 floating point to int cast macros. Standard cast
    will be used when not on gcc for i385.

    * src/pcm.c
    Modified all uses of FLOAT/DOUBLE_TO_INT and FLOAT/DOUBLE_TO_SHORT casts to
    comply with macros in float_cast.h.

2001-10-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/voc.c
    Changed the TYPE_xxx enum names to VOC_TYPE_xxx to prevent name clashes
    on MacOS with CodeWarrior 6.0.

    * MacOS/MacOS-readme.txt
    Updated the compile instructions. Probably still need work as I don't have
    access to a Mac.

2001-10-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/aiff.c common.c
    Changed all references to snprintf to LSF_SNPRINTF and all vsnprintf to
    LSF_VSNPRINTF. LSF_VSNPRINTF and LSF_VSNPRINTF are defined in common.h.

    * src/common.h
    Added checking of HAVE_SNPRINTF and HAVE_VSNPRINTF and defining
    LSF_VSNPRINTF and LSF_VSNPRINTF to appropriate values.

    * src/missing.c
    New file containing a minimal implementation of snprintf and vsnprintf
    functions named missing_snprintf and missing_vsnprintf respectively. These
    are only compliled into the binary if snprintf and/or vsnprintf are not
    available.

2001-09-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ircam.c
    New file to handle Berkeley/IRCAM/CARL files.

    * src/sndfile.c src/common.h
    Modified for IRCAM handling.

    * tests/*.c
    Added tests for IRCAM files.

2001-09-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Apparently microsoft windows (tm) doesn't like ulaw and Alaw WAV files with
    20 byte format chunks (contrary to ms's own documentation). Fixed the WAV
    header writing code to generate smaller ms compliant ulaw and Alaw WAV
    files.

2001-09-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/stdio_test.sh tests/stdio_test.c
    Shell script was rewritten as a C program due to incompatibilities of the
    sh shell on Linux and Solaris.

2001-09-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/stdio_test.sh tests/stdout_test.c tests/stdin_test.c
    New test programs to verify the correct operation of reading from stdin and
    writing to stdout.

    * src/sndfile.c wav.c au.c nist.c paf.c
    Fixed a bugs uncovered by the new test programs above.

2001-09-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c wav.c
    Fixed a bug preventing reading a file from stdin. Found by T. Narita.

2001-09-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Fixed a problem on OpenBSD 2.9 which was causing sf_seek() to fail on IMA
    WAV files. Root cause was the declaration of the func_seek typedef not
    matching the functions it was actually being used to point to. In OpenBSD
    sizeof (off_t) != sizeof (int). Thanks to Heikki Korpela for allowing me
    to log into his OpenBSD machine to debug this problem.

2001-09-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Implemented sf_command ("norm float").

    * src/*.c
    Implemented handling of sf_command ("set-norm-float"). Float normalization
    can now be turned on and off.

    * tests/double_test.c
    Renamed to floating_point_test.c. Modified to include tests for all scaled
    reads and writes of floats and doubles.

    * src/au_g72x.c
    Fixed bug in normalization code found with improved floating_point_test
    program.

    * src/wav.c
    Added code for parsing 'INFO' and 'LIST' chunks. Will be used for extract
    text annotations from WAV files.

    * src/aiff.c
    Added code for parsing '(c) ' and 'ANNO' chunks. Will be used for extract
    text annotations from WAV files.

2001-09-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sf_info.c example/Makefile.am
    Renamed to sndfile_info.c. The program sndfile_info will now be installed
    when the library is installed.

    * src/float_cast.h
    New file defining floating point to short and int casts. These casts will
    eventually replace all flot and double casts to short and int. See comments
    at the top of the file for the reasoning.

    * src/*.c
    Changed all default float and double casts to short or int with macros
    defined in floatcast.h. At the moment these casts do nothing. They will be
    replaced with faster float to int cast operations in the near future.

2001-08-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/command_test.c
    New file for testing sf_command () functionality.

    * src/sndfile.c
    Revisiting of error return values of some functions.
    Started implementing sf_command () a new function will allow on-the-fly
    modification of library behaviour, or instance, sample value scaling.

    * src/common.h
    Added hook for format specific sf_command () calls to SNDFILE struct.

    * doc/api.html
    Updated and errors corrected.

    * doc/command.html
    New documentation file explaining new sf_command () function.

2001-08-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed error return values from sf_read*() and sf_write*(). There were
    numerous instances of -1 being returned through size_t. These now all set
    error int the SF_PRIVATE struct and return 0. Thanks to David Viens for
    spotting this.

2001-08-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Fixed use of va_arg() calls that were causing warning messages with the
    latest version of gcc (thanks Maurizio Umberto Puxeddu).

2001-07-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c src/sfendian.h
    Moved definition of MAKE_MARKER macro to sfendian.h

2001-07-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Modified sf_get_lib_version () so that version string will be visible using
    the Unix strings command.

    * examples/Makefile.am examples/sfinfo.c
    Renamed sfinfo program and source code to sf_info. This prevents a name
    clash with the program included with libaudiofile.

2001-07-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/read_seek_test.c tests/lossy_comp_test.c
    Added tests for sf_read_float () and sf_readf_float ().

    * src/voc.c
    New files for handling Creative Voice files (not complete).

    * src/samplitude.c
    New files for handling Samplitude files (not complete).

2001-07-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c src/au.c src/paf.c src/svx.c src/wav.c
    Converted these files to using psf_binheader_readf() function. Will soon be
    ready to attempt to make reading writing from pipes work reliably.

    * src/*.[ch]
    Added code for sf_read_float () and sf_readf_float () methods of accessing
    file data.

2001-07-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c src/wav_gsm610.c
    Removed two printf()s which had escaped notice for some time (thanks
    Sigbjørn Skjæret).

2001-07-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_gsm610.c
    Fixed a bug which prevented GSM 6.10 encoded WAV files generated by
    libsndfile from being played in Windoze (thanks klay).

2001-07-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.[ch]
    Implemented psf_binheader_readf() which will do for file header reading what
    psf_binheader_writef() did for writing headers. Will eventually allow
    libsndfile to read and write from pipes, including named pipes.

2001-07-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * MacOS/config.h Win32/config.h
    Attempted to bring these two files uptodate with src/config.h. As I don't
    have access to either of these systems support for them may be completely
    broken.

2001-06-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float32.c
    Fixed bug for big endian processors that can't read 32 bit IEEE floats. Now
    tested on Intel x86 and UltraSparc processors.

2001-06-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Modified to allow REX files (from Propellorhead's Recycle and Reason
    programs) to be read.
    REX files are basically an AIFF file with slightly unusual sequence of
    chunks (AIFF files are supposed to allow any sequence) and some extra
    application specific information.
    Not yet able to write a REX file as the details of the application specific
    data is unknown.

2001-06-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed endian bug when reading PEAK chunk on big endian machines.

    * src/common.c
    Fixed endian bug when reading PEAK chunk on big endian machines with
    --enable-force-broken-float configure option.
    Fix psf_binheader_writef for (FORCE_BROKEN_FLOAT ||______)

2001-06-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in src/config.h.in
    Removed old CAN_READ_WRITE_x86_IEEE configure variable now that float
    capabilities are detected at run time.
    Added FORCE_BROKEN_FLOAT to allow testing of broken float code on machines
    where the processor can in fact handle floats correctly.

    * src/float32.c
    Rejigged code reading and writing of floats on broken processors.

    * m4/
    Removed this directory and all its files as they are no longer needed.

2001-06-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/peak_chunk_test.c
    New test to validate reading and writing of peak chunk.

    * examples/sfconvert
    Added -float32 option.

    * src/*.c
    Changed all error return values to negative values (ie the negative of what
    they were).

    * src/sndfile.c tests/error_test.c
    Modified to take account of the previous change.

2001-06-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/float32.c
    File renamed from wav_float.c and renamed function to something more
    general.
    Added runtime detection of floating point capabilities.
    Added recording of peaks during write for generation of PEAK chunk.

    * src/wav.c src/aiff.c
    Added handing for PEAK chunk for floating point files. PEAK is read when the
    file headers are read and generated when the file is closed. Logic is in
    place for adding PEAK chunk to end of file when writing to a pipe (reading
    and writing from/to pipe to be implemented soon).

    * src/sndfile.c
    Modified sf_signal_max () to use PEAK values if present.

2001-06-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Added pcm_read_init () and pcm_write_init () to src/pcm.c and removed all
    other calls to functions in this file from the filetype specific files.

    * src/*.c
    Added alaw_read_init (), alaw_write_int (), ulaw_read_init () and
    ulaw_write_init () and removed all other calls to functions in alaw.c and
    ulaw.c from the filetype specific files.

    * tests/write_read_test.c
    Added tests to validate sf_seek () on all file types.

    * src/raw.c
    Implemented raw_seek () function to fix a bug where
    sf_seek (file, 0, SEEK_SET) on a RAW file failed.

    * src/paf.c
    Fixed a bug in paf24_seek () found due to added seeks tests in
    tests/write_read_test.c

2001-06-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/read_seek_test.c
    Fixed a couple of broken binary files.

    * src/aiff.c src/wav.c
    Added handling of PEAK chunks on file read.

2001-05-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * check_libsndfile.py
    New file for the regression testing of libsndfile.
    check_libsndfile.py is a Python script which reads in a file containing
    filenames of audio files. Each file is checked by running the examples/sfinfo
    program on them and checking for error or warning messages in the libsndfile
    log buffer.

    * check_libsndfile.list
    This is an example list of audio files for use with check_libsndfile.py

    * tests/lossy_comp_test.c
    Changed the defined value of M_PI for math header files which don't have it.
    This fixed validation test failures on MetroWerks compilers. Thanks to Lord
    Praetor Satanus of Acheron for bringing this to my attention.

2001-05-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.[ch]
    Removed psf_header_setf () which was no longer required after refactoring
    and simplification of header writing.
    Added 'z' format specifier to psf_binheader_writef () for zero filling header
    with N bytes. Used by paf.c and nist.c

    * tests/check_log_buffer.c
    New file implementing check_log_buffer () which reads the log buffer of a
    SNDFILE* object and searches for error and warning messages. Calls exit ()
    if any are found.

    * tests/*.c
    Added calls to check_log_buffer () after each call to sf_open_XXX ().

2001-05-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/wav_ms_adpcm.c src/wav_gsm610.c
    Major rehack of header writing using psf_binheader_writef ().

2001-05-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/wav_ima_adpcm.c
    Major rehack of header writing using psf_binheader_writef ().

2001-05-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Changed return type of get_encoding_str () to prevent compiler warnings on
    Mac OSX.

    * src/aiff.c src/au.c
    Major rehack of header writing using psf_binheader_writef ().

2001-05-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h src/common.c
    Added comments.
    Name of log buffer changed from strbuffer to logbuffer.
    Name of log buffer index variable changed from strindex to logindex.

    * src/*.[ch]
    Changed name of internal logging function from psf_sprintf () to
    psf_log_printf ().
    Changed name of internal header generation functions from
    psf_[ab]h_printf () to psf_asciiheader_printf () and
    psf_binheader_writef ().
    Changed name of internal header manipulation function psf_hsetf () to
    psf_header_setf ().

2001-05-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/nist.c
    Fixed reading and writing of sample_byte_format header. "01" means little
    endian and "10" means big endian regardless of bit width.

    * configure.in
    Detect Mac OSX and disable -Wall and -pedantic gcc options. Mac OSX is
    way screwed up and spews out buckets of warning messages from the system
    headers.
    Added --disable-gcc-opt configure option (sets gcc optimisation to -O0 ) for
    easier debugging.
    Made decision to harmonise source code version number and .so library
    version number. Future releases will stick to this rule.

    * doc/new_file_type.HOWTO
    New file to document the addition of new file types to libsndfile.

2001-05-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/nist.c
    New file for reading/writing Sphere NIST audio file format.
    Originally requested by Elis Pomales in 1999.
    Retrieved from unstable (and untouched for 18 months) branch of libsndfile.
    Some vital information gleaned from the source code to Bill Schottstaedt's
    sndlib library : ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz
    Currently reading and writing 16, 24 and 32 bit, big-endian and little
    endian, stereo and mono files.

    * src/common.h src/common.c
    Added psf_ah_printf () function to help construction of ASCII headers (ie NIST).

    * configure.in
    Added test for vsnprintf () required by psf_ah_printf ().

    * tests/write_read_test.c
    Added tests for supported NIST files.

2001-05-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.c
    Added tests for little endian AIFC files.

    * src/aiff.c
    Minor re-working of aiff_open_write ().
    Added write support for little endian PCM encoded AIFC files.

2001-05-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Minor re-working of aiff_open_read ().
    Added read support for little endian PCM encoded AIFC files from the Mac
    OSX CD ripper program. Guillaume Lessard provided a couple of sample files
    and a working patch.
    The patch was not used as is but gave a good guide as to what to do.

2001-05-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h
    Fixed comments about endian-ness of WAV and AIFF files. Guillaume Lessard
    pointed out the error.

2001-04-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/make_sine.c
    Re-write of this example using sample rate and required frequency in Hz.

2001-02-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed bug that prevented known file types from being read as RAW PCM data.

2000-12-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Added handing of COMT chunk.

2000-11-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sfconvert.c
    Fixed bug in normalisatio code. Pointed out by Johnny Wu.

2000-11-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * Win32/config.h
    Fixed the incorrect setting of HAVE_ENDIAN_H parameter. Win32 only issue.

2000-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/Makefile.am
    Added -lm for write_read_test_LDADD.

2000-10-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/au.c
    Fixed bug which prevented writing of G723 24kbps AU files.

    * tests/lossy_comp_test.c
    Corrrection to options for G723 tests.

    * configure.in
    Added --disable-gcc-pipe option for DJGPP compiler (gcc on MS-DOS) which
    doesn't allow gcc -pipe option.

2000-09-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/ulaw.c src/alaw.c src/wav_imaadpcm.c src/msadpcm.c src/wav_gsm610.c
    Fixed normailsation bugs shown up by new double_test program.

2000-08-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c
    Fixed bug in normalisation code (spotted by Steve Lhomme).

    * tests/double_test.c
    New file to test scaled and unscaled sf_read_double() and sf_write_double()
    functions.

2000-08-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * COPYING
    Changed to the LGPL COPYING file (spotted by H. S. Teoh).

2000-08-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h
    Removed prototype of unimplemented function sf_get_info(). Added prototype
    for sf_error_number() Thanks to Sigbjørn Skjæret for spotting these.

2000-08-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/newpcm.h
    New file to contain a complete rewrite of the PCM data handling.

2000-08-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbjørn
    Skjæret for spotting this one.

2000-08-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/au_g72x.c src/G72x/g72x.c
    Added G723 encoded AU file support.

    * tests/lossy_comp_test.c
    Added tests for G721 and G723 encoded AU files.

2000-08-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * all files
    Changed the license to LGPL. Albert Faber who had copyright on
    Win32/unistd.h gave his permission to change the license on that file. All
    other files were either copyright erikd AT mega-nerd DOT com or copyright
    under a GPL/LGPL compatible license.

2000-08-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/lossy_comp_test.c
    Fixed incorrect error message.

    * src/au_g72x.c src/G72x/*
    G721 encoded AU files now working.

    * Win32/README-Win32.txt
    Replaced this file with a new one which gives a full explanation
    of how to build libsndfile under Win32. Thanks to Mike Ricos.

2000-08-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.[ch]
    Removed double leading underscores from the start of all variable and
    function names. Identifiers with a leading underscores are reserved
    for use by the compiler.

    * src/au_g72x.c src/G72x/*
    Continued work on G721 encoded AU files.

2000-07-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/G72x/*
    New files for reading/writing G721 and G723 ADPCM audio. These files
    are from a Sun Microsystems reference implementation released under a
    free software licence.
    Extensive changes to this code to make it fit in with libsndfile.
    See the ChangeLog in this directory for details.

    * src/au_g72x.c
    New file for G721 encoded AU files.

2000-07-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * libsndfile.spec.in
    Added a spec file for making RPMs. Thanks to Josh Green for supplying this.

2000-06-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/sndfile.h
    Add checking for and handling of header-less u-law encoded AU/SND files.
    Any file with a ".au" or ".snd" file extension and without the normal
    AU file header is treated as an 8kHz, u-law encoded file.

    * src/au.h
    New function for opening a headerless u-law encoded file for read.

2000-06-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c
    Add checking for files shorter than minimal PAF file header length.

2000-06-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.c
    Added extra sf_perror() calls when sf_write_XXXX fails.

2000-05-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Modified usage of va_arg() macro to work correctly on PowerPC
    Linux. Thanks to Kyle Wheeler for giving me ssh access to his
    machine while I was trying to track this down.

    * configure.in src/*.[ch]
    Sorted out some endian-ness issues brought up by PowerPC Linux.

    * tests/read_seek_test.c
    Added extra debugging for when tests fail.

2000-05-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Fixed bug in GSM 6.10 handling for big-endian machines. Thanks
    to Sigbjørn Skjæret for reporting this.

2000-04-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/wav.c src/wav_gsm610.c
    Finallised writing of GSM 6.10 WAV files.

    * tests/lossy_comp_test.c
    Wrote new test code for GSM 6.10 files.

    * examples/sfinfo.c
    Fixed incorrect format in printf() statement.

2000-04-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h.in
    Fixed comments about sf_perror () and sf_error_str ().

2000-03-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Fixed --enable-justsrc option.

2000-03-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * wav.c
    Fixed checking of bytespersec field of header. Still some weirdness
    with some files.

2000-03-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/lossy_comp_test.c
    Added option to test PCM WAV files (sanity check).
    Fixed bug in sf_seek() tests.

2000-02-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/wav.c
    Minor changes to allow writing of GSM 6.10 WAV files.

2000-02-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in Makefile.am src/Makefile.am
    Finally got around to figuring out how to build a single library from
    multiple source directories.
    Reading GSM 6.10 files now seems to work.

2000-01-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Added more error reporting in read_fmt_chunk().

1999-12-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sfinfo.c
    Modified program to accept multiple filenames from the command line.

1999-11-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_ima_adpcm.c
    Moved code around in preparation to adding ability to read/write IMA ADPCM
    encoded AIFF files.

1999-11-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Fixed put_int() and put_short() macros used by _psf_hprintf() which were
    causing seg. faults on Sparc Solaris.

1999-11-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.c
    Added string.h to includes. Thanks to Sigbjxrn Skjfret.

    * src/svx.c
    Fixed __svx_close() function to ensure FORM and BODY chunks are correctly
    set.

1999-10-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/au.c
    Fixed handling of incorrect size field in AU header on read. Thanks to
    Christoph Lauer for finding this problem.

1999-09-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fixed a bug with incorrect SSND chunk length being written. This also lead
    to finding an minor error in AIFF header parsing. Thanks to Dan Timis for
    pointing this out.

1999-09-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c
    Fixed a bug with reading and writing 24 bit stereo PAF files. This problem
    came to light when implementing tests for the new functions which operate
    in terms of frames rather than items.

1999-09-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Modified file type detection to use first 12 bytes of file rather than
    file name extension. Required this because NIST files use the same
    filename extension as Microsoft WAV files.

    * src/sndfile.c src/sndfile.h
    Added short, int and double read/write functions which work in frames
    rather than items. This was originally suggested by Maurizio Umberto
    Puxeddu.

1999-09-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/svx.c
    Finished off implementation of write using __psf_hprintf().

1999-09-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/common.h
    Added a buffer to SF_PRIVATE for writing the header. This is required
    to make generating headers for IFF/SVX files easier as well as making
    it easier to do re-write the headers which will be required when
    sf_rewrite_header() is implemented.

    * src/common.c
    Implemented __psf_hprintf() function. This is an internal function
    which is documented briefly just above the code.

1999-09-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed a bug in sf_write_raw() where it was returning incorrect values
    (thanks to Richard Dobson for finding this one). Must put in a test
    routine for sf_read_raw and sf_write_raw.

    * src/aiff.c
    Fixed default FORMsize in __aiff_open_write ().

    * src/sndfile.c
    Added copy of filename to internal data structure. IFF/SVX files
    contain a NAME header chunk. Both sf_open_read() and sf_open_write()
    copy the file name (less the leading path information) to the
    filename field.

    * src/svx.c
    Started implementing writing of files.

1999-08-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/svx.c
    New file for reading/writing 8SVX and 16SVX files.

    * src/sndfile.[ch] src/common.h
    Changes for SVX files.

    * src/aiff.c
    Fixed header parsing when unknown chunk is found.

1999-08-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/paf.c
    New file for reading/writing Ensoniq PARIS audio file format.

    * src/sndfile.[ch] src/common.h
    Changes for PAF files.

    * src/sndfile.[ch]
    Added stuff for sf_get_lib_version() function.


1999-07-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h MacOS/config.h
    Fixed minor MacOS configuration issues.

1999-07-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * MacOS/
    Added a new directory for the MacOS config.h file and the
    readme file.

    * src/aiff.c
    Fixed calculation of datalength when reading SSND chunk. Thanks to
    Sigbjørn Skjæret for pointing out this error.

1999-07-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/sndfile.h src/raw.c
    Further fixing of #includes for MacOS.

1999-07-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/aiff.c
    Added call to ferror () in main header parsing loop of __XXX_open_read
    functions. This should fix problems on platforms (MacOS, AmigaOS) where
    fseek()ing or fread()ing beyond the end of the file puts the FILE*
    stream in an error state until clearerr() is called.

    * tests/write_read_test.c
    Added tests for RAW header-less PCM files.

    * src/common.h
    Moved definition of struct tribyte to pcm.c which is the only place
    which needs it.

    * src/pcm.c
    Modified all code which assumed sizeof (struct tribyte) == 3. This code
    did not work on MacOS. Thanks to Ben "Jacobs" for pointing this out.

    * src/au.c
    Removed <sys/stat.h> from list of #includes (not being used).

    * src/sndfile.c
    Added MacOS specific #ifdef to replace <sys/stat.h>.

    * src/sndfile.h
    Added MacOS specific #ifdef to replace <sys/stat.h>.

    * src/sndfile.h
    Added MacOS specific typedef for off_t.

    * MacOS-readme.txt
    New file with instructions for building libsndfile under MacOS. Thanks
    to Ben "Jacobs" for supplying these instructions.

1999-07-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Removed sndfile.h from generated file list as there were no longer
    any autoconf substitutions being made.

    * src/raw.c
    New file for handling raw header-less PCM files. In order to open these
    for read, the user must specify format, pcmbitwidth and channels in the
    SF_INFO struct when calling sf_open_read ().

    * src/sndfile.c
    Added support for raw header-less PCM files.

1999-07-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * examples/sfinfo.c
    Removed options so the sfinfo program always prints out all the information.

1999-07-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/alaw.c
    New file for A-law encoding (similar to u-law).

    * tests/alaw_test.c
    New test program to test the A-law encode/decode lookup tables.

    * tests/lossy_comp_test.c
    Added tests for a-law encoded WAV, AU and AULE files.

1999-07-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c src/au.c
    Removed second "#include <unistd.h>". Thanks to Ben "Jacobs" for pointing
    this out.

1999-07-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/ulaw_test.c
    New test program to test the u-law encode/decode lookup tables.

1999-07-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.h
    Made corrections to comments on the return values from sf_seek ().

    * src/sndfile.c
    Fixed boundary condition checking bug and accounting bug in sf_read_raw ().

1999-07-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/au.c src/ulaw.c
    Finished implementation of u-law encoded AU files.

    * src/wav.c
    Implemented reading and writing of u-law encoded WAV files.

    * tests/
    Changed name of adpcm_test.c to lossy_comp_test.c. This test program
    will now be used to test Ulaw and Alaw encoding as well as APDCM.
    Added tests for Ulaw encoded WAV files.

1999-07-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/adpcm_test.c
    Initialised amp variable in gen_signal() to remove compiler warning.

1999-07-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    In __aiff_open_read () prevented fseek()ing beyond end of file which
    was causing trouble on MacOS with the MetroWerks compiler. Thanks to
    Ben "Jacobs" for pointing this out.

    *src/wav.c
    Fixed as above in __wav_open_read ().

1999-07-01    Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_ms_adpcm.c
    Implemented MS ADPCM encoding. Code cleanup of decoder.

    * tests/adpcm_test.c
    Added tests for MS ADPCM WAV files.

    * src/wav_ima_adpcm.c
    Fixed incorrect parameter in call to srate2blocksize () from
    __ima_writer_init ().

1999-06-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/read_seek_test.c
    Added test for 8 bit AIFF files.

1999-06-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.c
    Removed test for IMA ADPCM WAV files which is now done in adpcm_test.c

    * configure.in
    Added -Wconversion to CFLAGS.

    * src/*.c tests/*.c examples/*.c
    Fixed all warnings resulting from use of -Wconversion.

1999-06-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM
    WAV files.

    * src/wav_ima.c
    Changed block alignment to be dependant on sample rate. This should make
    WAV files created with libsndfile compatible with the MS Windows media
    players.

    * tests/adpcm_test.c
    Reimplemented adpcm_test_short and implemented adpcm_test_int and
    adpcm_test_double.
    Now have full testing of IMA ADPCM WAV file read, write and seek.

1999-06-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_float.c
    Fixed function prototype for x86f2d_array () which was causing ocassional
    seg. faults on Sparc Solaris machines.

1999-06-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c
    Fixed bug in __aiff_close where the length fields in the header were
    not being correctly calculated before writing.

    * tests/write_read_test.c
    Modified to detect the above bug in WAV, AIFF and AU files.

1999-06-12    Erik de Castro Lopo     <erikd AT mega-nerd DOT com>

    * Win32/*
    Added a contribution from Albert Faber to allow libsndfile to compile
    under Win32 systems. libsndfile will now be used as part of LAME the
    the MPEG 1 Layer 3 encoder (http://internet.roadrunner.com/~mt/mp3/).

1999-06-11    Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in
    Changed to reflect previous changes.

    * src/wav_ima_adpcm.c
    Fixed incorrect calculation of bytespersec header field (IMA ADPCM only).

    Fixed bug when writing from int or double data to IMA ADPCM file. Will need
    to write test code for this.

    Fixed bug in __ima_write () whereby the length of the current block was
    calculated incorrectly. Thanks to Jongcheon Park for pointing this out.

1999-03-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/*.c
    Changed all read/write/lseek function calls to fread/fwrite/
    fseek/ftell and added error checking of return values from
    fread and fwrite in critical areas of the code.

    * src/au.c
    Fixed incorrect datasize element in AU header on write.

    * tests/error_test.c
    Add new test to check all error values have an associated error
    string. This will avoid embarrassing real world core dumps.

1999-03-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c src/aiff.c
    Added handling for unknown chunk markers in the file.

1999-03-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Filled in missing error strings in SndfileErrors array. Missing entries
    can cause core dumps when calling sf_error-str (). Thanks to Sam
    <mrsam at-sign geocities.com> for finding this problem.

1999-03-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav_ima_adpcm.c
    Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading
    stereo files. Caused by not adjusting offset into buffer of decoded
    samples for 2 channels. A similar bug existed in __ima_write ().
    Need a test for stereo ADPCM files.

    * src/wav_ms_adpcm.c
    Decoder working correctly.

1999-03-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * configure.in Makefile.am
    Added --enable-justsrc configuration variable sent by Sam
    <mrsam at-sign geocities.com>.

    * src/wav_ima_adpcm.c
    Fixed bug when reading beyond end of data section due to not
    checking pima->blockcount.
    This uncovered __ima_seek () bug due to pima->blockcount being set
    before calling __ima_init_block ().

1999-03-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Started implementing MS ADPCM decoder.
    If file is WAVE_FORMAT_ADPCM and length of data chunk is odd, this
    encoder seems to add an extra byte. Why not just give an even data
    length?

1999-03-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c.
    This will make it easier to add and debug other kinds of WAV files
    in future.

1999-03-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/
    Added adpcm_test.c which implements test functions for
    IMA ADPCM reading/writing/seeking etc.

    * src/wav.c
    Fixed many bugs in IMA ADPCM encoder and decoder.

1999-03-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Finished implementing IMA ADPCM encoder and decoder (what a bitch!).

1999-03-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/wav.c
    Started implementing IMA ADPCM decoder.

1999-03-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/sndfile.c
    Fixed bug where the sf_read_XXX functions were returning a
    incorrect read count when reading past end of file.
    Fixed bug in sf_seek () when seeking backwards from end of file.

    * tests/read_seek_test.c
    Added multiple read test to short_test(), int_test () and
    double_test ().
    Added extra chunk to all test WAV files to test that reading
    stops at end of 'data' chunk.

1999-02-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.c
    Added tests for little DEC endian AU files.

    * src/au.c
    Add handling for DEC format little endian AU files.

1999-02-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c src/au.c src/wav.c
    Add __psf_sprintf calls during header parsing.

    * src/sndfile.c src/common.c
    Implement sf_header_info (sndfile.c) function and __psf_sprintf (common.c).

    * tests/write_read_test.c
    Added tests for 8 bit PCM files (WAV, AIFF and AU).

    * src/au.c src/aiff.c
    Add handling of 8 bit PCM data format.

    * src/aiff.c
    On write, set blocksize in SSND chunk to zero like everybody else.

1999-02-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c:
    Fixed bug in let2s_array (cptr was not being initialised).

    * src/sndfile.c:
    Fixed bug in sf_read_raw and sf_write_raw. sf_seek should
    now work when using these functions.

1999-02-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * tests/write_read_test.c:
    Force test_buffer array to be double aligned. Sparc Solaris
    requires this.

1999-02-14  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/pcm.c:
    Fixed a bug which was causing errors in the reading
    and writing of 24 bit PCM files.

    * doc/api.html
    Finished of preliminary documentaion.

1999-02-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>

    * src/aiff.c:
    Changed reading of 'COMM' chunk to avoid reading an int
    which overlaps an int (4 byte) boundary.

