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

    * src/ogg_vorbis.c
    Fix return value of SFC_SET_VBR_ENCODING_QUALITY command.

    * doc/command.html
    Document SFC_SET_VBR_ENCODING_QUALITY, SFC_GET/SET_LOOP_INFO and
    SFC_GET_INSTRUMENT.

    * 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.

